public static nk_rp__findresult nk_rp__skyline_pack_rectangle(nk_rp_context *context, int width, int height) { nk_rp__findresult res = (nk_rp__findresult)(nk_rp__skyline_find_best_pos(context, (int)(width), (int)(height))); nk_rp_node * node; nk_rp_node * cur; if ((((res.prev_link) == (null)) || ((res.y + height) > (context->height))) || ((context->free_head) == (null))) { res.prev_link = null; return((nk_rp__findresult)(res)); } node = context->free_head; node->x = ((ushort)(res.x)); node->y = ((ushort)(res.y + height)); context->free_head = node->next; cur = *res.prev_link; if ((cur->x) < (res.x)) { nk_rp_node *next = cur->next; cur->next = node; cur = next; } else { *res.prev_link = node; } while (((cur->next) != null) && (cur->next->x <= res.x + width)) { nk_rp_node *next = cur->next; cur->next = context->free_head; context->free_head = cur; cur = next; } node->next = cur; if ((cur->x) < (res.x + width)) { cur->x = ((ushort)(res.x + width)); } return((nk_rp__findresult)(res)); }
public static int nk_rp__skyline_find_min_y(nk_rp_context *c, nk_rp_node *first, int x0, int width, int *pwaste) { nk_rp_node *node = first; int x1 = (int)(x0 + width); int min_y; int visited_width; int waste_area; min_y = (int)(0); waste_area = (int)(0); visited_width = (int)(0); while ((node->x) < (x1)) { if ((node->y) > (min_y)) { waste_area += (int)(visited_width * (node->y - min_y)); min_y = (int)(node->y); if ((node->x) < (x0)) { visited_width += (int)(node->next->x - x0); } else { visited_width += (int)(node->next->x - node->x); } } else { int under_width = (int)(node->next->x - node->x); if ((under_width + visited_width) > (width)) { under_width = (int)(width - visited_width); } waste_area += (int)(under_width * (min_y - node->y)); visited_width += (int)(under_width); } node = node->next; } *pwaste = (int)(waste_area); return((int)(min_y)); }
public static void nk_rp_init_target(nk_rp_context *context, int width, int height, nk_rp_node *nodes, int num_nodes) { int i; for (i = (int)(0); (i) < (num_nodes - 1); ++i) { nodes[i].next = &nodes[i + 1]; } nodes[i].next = null; context->init_mode = (int)(NK_RP__INIT_skyline); context->heuristic = (int)(NK_RP_HEURISTIC_Skyline_default); context->free_head = &nodes[0]; context->active_head = &context->extra_0; context->width = (int)(width); context->height = (int)(height); context->num_nodes = (int)(num_nodes); nk_rp_setup_allow_out_of_mem(context, (int)(0)); context->extra_0.x = (ushort)(0); context->extra_0.y = (ushort)(0); context->extra_0.next = &context->extra_1; context->extra_1.x = ((ushort)(width)); context->extra_1.y = (ushort)(65535); context->extra_1.next = null; }