/// <summary> /// Packs a rect. Returns null, if there's no more place left. /// </summary> /// <param name="width"></param> /// <param name="height"></param> /// <param name="userData"></param> /// <returns></returns> public PackerRectangle PackRect(int width, int height, object userData) { var rect = new stbrp_rect { id = _rectangles.Count, w = width, h = height }; int result; fixed(stbrp_context *contextPtr = &_context) { result = stbrp_pack_rects(contextPtr, &rect, 1); } if (result == 0) { return(null); } var packRectangle = new PackerRectangle(new Rectangle(rect.x, rect.y, rect.w, rect.h), userData); _rectangles.Add(packRectangle); return(packRectangle); }
/// <summary> /// Packs a rect. Returns null, if there's no more place left. /// </summary> /// <param name="width"></param> /// <param name="height"></param> /// <returns></returns> public bool PackRect(int width, int height, out Rectangle packRectangle, int offset = 2) { var rect = new stbrp_rect { id = PackeRectanglesCount, w = width + offset, h = height + offset }; int result; fixed(stbrp_context *contextPtr = &_context) { result = stbrp_pack_rects(contextPtr, &rect, 1); } if (result == 0) { packRectangle = Rectangle.Empty; return(false); } packRectangle = new Rectangle ( rect.x + (int)(offset / 2f), rect.y + (int)(offset / 2f), rect.w - offset, rect.h - offset ); ++PackeRectanglesCount; return(true); }
public int stbtt_PackFontRanges(byte[] fontdata, int font_index, FakePtr <stbtt_pack_range> ranges, int num_ranges) { var info = new FontInfo(); var i = 0; var j = 0; var n = 0; var return_value = 1; stbrp_rect[] rects; for (i = 0; i < num_ranges; ++i) { for (j = 0; j < ranges[i].num_chars; ++j) { ranges[i].chardata_for_range[j].x0 = ranges[i].chardata_for_range[j].y0 = ranges[i].chardata_for_range[j].x1 = ranges[i].chardata_for_range[j].y1 = 0; } } n = 0; for (i = 0; i < num_ranges; ++i) { n += ranges[i].num_chars; } rects = new stbrp_rect[n]; for (i = 0; i < rects.Length; ++i) { rects[i] = new stbrp_rect(); } if (rects == null) { return(0); } info.stbtt_InitFont(fontdata, Common.stbtt_GetFontOffsetForIndex(fontdata, font_index)); n = stbtt_PackFontRangesGatherRects(info, ranges, num_ranges, rects); stbtt_PackFontRangesPackRects(rects, n); return_value = stbtt_PackFontRangesRenderIntoRects(info, ranges, num_ranges, rects); return(return_value); }