コード例 #1
0
ファイル: region.c プロジェクト: technosaurus/tekui
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;
}
コード例 #2
0
ファイル: region.c プロジェクト: technosaurus/tekui
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;
}
コード例 #3
0
ファイル: region.c プロジェクト: AntonioModer/tekui
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;
}
コード例 #4
0
ファイル: region.c プロジェクト: AntonioModer/tekui
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;
}