TLIBAPI TBOOL region_overlap(struct RectPool *pool, struct Region *region, TINT s[]) { struct TNode *next, *node = region->rg_Rects.rl_List.tlh_Head; for (; (next = node->tln_Succ); node = next) { struct RectNode *rn = (struct RectNode *) node; if (OVERLAPRECT(rn->rn_Rect, s)) return TTRUE; } return TFALSE; }
static TBOOL region_cutrect(struct RectPool *pool, struct RectList *list, const RECTINT d[4], const RECTINT s[4]) { TINT d0 = d[0]; TINT d1 = d[1]; TINT d2 = d[2]; TINT d3 = d[3]; if (!OVERLAPRECT(d, s)) return region_insertrect(pool, list, d[0], d[1], d[2], d[3]); for (;;) { if (d0 < s[0]) { if (!region_insertrect(pool, list, d0, d1, s[0] - 1, d3)) break; d0 = s[0]; } if (d1 < s[1]) { if (!region_insertrect(pool, list, d0, d1, d2, s[1] - 1)) break; d1 = s[1]; } if (d2 > s[2]) { if (!region_insertrect(pool, list, s[2] + 1, d1, d2, d3)) break; d2 = s[2]; } if (d3 > s[3]) { if (!region_insertrect(pool, list, d0, s[3] + 1, d2, d3)) break; } return TTRUE; } return TFALSE; }
static TBOOL cutrect(TAPTR exec, struct TList *list, const TINT d[4], const TINT s[4]) { TINT d0 = d[0]; TINT d1 = d[1]; TINT d2 = d[2]; TINT d3 = d[3]; if (!OVERLAPRECT(d, s)) return insertrect(exec, list, d[0], d[1], d[2], d[3]); for (;;) { if (d0 < s[0]) { if (!insertrect(exec, list, d0, d1, s[0] - 1, d3)) break; d0 = s[0]; } if (d1 < s[1]) { if (!insertrect(exec, list, d0, d1, d2, s[1] - 1)) break; d1 = s[1]; } if (d2 > s[2]) { if (!insertrect(exec, list, s[2] + 1, d1, d2, d3)) break; d2 = s[2]; } if (d3 > s[3]) { if (!insertrect(exec, list, d0, s[3] + 1, d2, d3)) break; } return TTRUE; } return TFALSE; }
static int region_checkoverlap(lua_State *L) { struct Region *region = luaL_checkudata(L, 1, TEK_CLASS_UI_REGION_NAME); struct TNode *next, *node; TINT s[4]; s[0] = luaL_checkinteger(L, 2); s[1] = luaL_checkinteger(L, 3); s[2] = luaL_checkinteger(L, 4); s[3] = luaL_checkinteger(L, 5); node = region->rg_List.tlh_Head; for (; (next = node->tln_Succ); node = next) { struct RectNode *rn = (struct RectNode *) node; if (OVERLAPRECT(rn->rn_Rect, s)) { lua_pushboolean(L, 1); return 1; } } lua_pushboolean(L, 1); return 1; }