Пример #1
0
        public static void nk_rp_pack_rects(nk_rp_context *context, nk_rp_rect *rects, int num_rects)
        {
            int i;

            for (i = (int)(0); (i) < (num_rects); ++i)
            {
                rects[i].was_packed = (int)(i);
            }
            nk_rp_qsort(rects, (uint)(num_rects), nk_rect_height_compare);
            for (i = (int)(0); (i) < (num_rects); ++i)
            {
                nk_rp__findresult fr =
                    (nk_rp__findresult)(nk_rp__skyline_pack_rectangle(context, (int)(rects[i].w), (int)(rects[i].h)));
                if ((fr.prev_link) != null)
                {
                    rects[i].x = ((ushort)(fr.x));
                    rects[i].y = ((ushort)(fr.y));
                }
                else
                {
                    rects[i].x = (ushort)(rects[i].y = (ushort)(0xffff));
                }
            }
            nk_rp_qsort(rects, (uint)(num_rects), nk_rect_original_order);
            for (i = (int)(0); (i) < (num_rects); ++i)
            {
                rects[i].was_packed = (int)((((rects[i].x) == (0xffff)) && ((rects[i].y) == (0xffff))) ? 0 : 1);
            }
        }
Пример #2
0
        public static void nk_rp_qsort(nk_rp_rect *array, uint len, QSortComparer cmp)
        {
            uint  right;
            uint  left  = (uint)(0);
            uint *stack = stackalloc uint[64];
            uint  pos   = (uint)(0);
            uint  seed  = (uint)(len / 2 * 69069 + 1);

            for (;;)
            {
                for (; (left + 1) < (len); len++)
                {
                    nk_rp_rect pivot = new nk_rp_rect();
                    nk_rp_rect tmp   = new nk_rp_rect();
                    if ((pos) == (64))
                    {
                        len = (uint)(stack[pos = (uint)(0)]);
                    }
                    pivot        = (nk_rp_rect)(array[left + seed % (len - left)]);
                    seed         = (uint)(seed * 69069 + 1);
                    stack[pos++] = (uint)(len);
                    for (right = (uint)(left - 1);;)
                    {
                        while ((cmp(&array[++right], &pivot)) < (0))
                        {
                        }
                        while ((cmp(&pivot, &array[--len])) < (0))
                        {
                        }
                        if ((right) >= (len))
                        {
                            break;
                        }
                        tmp          = (nk_rp_rect)(array[right]);
                        array[right] = (nk_rp_rect)(array[len]);
                        array[len]   = (nk_rp_rect)(tmp);
                    }
                }
                if ((pos) == (0))
                {
                    break;
                }
                left = (uint)(len);
                len  = (uint)(stack[--pos]);
            }
        }