Example #1
0
        /// <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);
        }
Example #2
0
        /// <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);
        }