45 void C4TargetRect::Set(int32_t iX, int32_t iY, int32_t iWdt, int32_t iHgt, int32_t iTX, int32_t iTY)
55 if ((d =
x - rClip.
x) < 0) {
Wdt += d;
x = rClip.
x; }
58 if ((d =
y - rClip.
y) < 0) {
Hgt += d;
y = rClip.
y; }
61 if ((d = (
x+
Wdt - rClip.
x-rClip.
Wdt)) > 0)
Wdt -= d;
63 if ((d = (
y+
Hgt - rClip.
y-rClip.
Hgt)) > 0)
Hgt -= d;
65 if (
Wdt <= 0 ||
Hgt <= 0)
return false;
86 void C4Rect::Set(int32_t iX, int32_t iY, int32_t iWdt, int32_t iHgt)
93 if (
x+
Wdt<=rTarget.
x)
return false;
94 if (
x>=rTarget.
x+rTarget.
Wdt)
return false;
95 if (
y+
Hgt<=rTarget.
y)
return false;
96 if (
y>=rTarget.
y+rTarget.
Hgt)
return false;
107 {
Wdt -= (r2.
x -
x);
x = r2.
x; }
114 {
Hgt -= (r2.
y -
y);
y = r2.
y; }
126 if (
Contains(iX2, iY2))
return true;
127 if (iX <
x && iX2 <
x)
return false;
128 if (iY <
y && iY2 <
y)
return false;
129 if (iX >=
x+
Wdt && iX2 >=
x+
Wdt)
return false;
130 if (iY >=
y+
Hgt && iY2 >=
y+
Hgt)
return false;
132 if (iX == iX2 || iY == iY2)
return true;
135 iXI = (iX <
x ?
x :
x+
Wdt);
136 iYI = iY + (iY2 - iY) * (iXI - iX) / (iX2 - iX);
137 if (iYI >=
y && iYI <
y+
Hgt)
return true;
139 iYI = (iY <
y ?
y :
y+
Hgt);
140 iXI = iX + (iX2 - iX) * (iYI - iY) / (iY2 - iY);
141 return iXI >=
x && iXI <
x+
Wdt;
147 if (!r2.
Wdt || !r2.
Hgt)
return;
158 {
Wdt += (
x - r2.
x);
x = r2.
x; }
165 {
Hgt += (
y - r2.
y);
y = r2.
y; }
176 for (
size_t i = 0; i <
GetCount(); ++i)
180 if (rClip.
x+rClip.
Wdt <= pTarget->
x)
continue;
181 if (rClip.
y+rClip.
Hgt <= pTarget->
y)
continue;
182 if (rClip.
x >= pTarget->
x+pTarget->
Wdt)
continue;
183 if (rClip.
y >= pTarget->
y+pTarget->
Hgt)
continue;
187 int32_t iSplitCount = 0, iOver;
C4Rect rcThis(*pTarget);
189 if ((iOver=rcThis.
x+rcThis.
Wdt-rClip.
x-rClip.
Wdt)>0)
191 pTarget->
x += pTarget->
Wdt - iOver; pTarget->
Wdt = iOver; rcThis.
Wdt -= iOver;
195 if ((iOver=rcThis.
y+rcThis.
Hgt-rClip.
y-rClip.
Hgt)>0)
198 pTarget->
y += pTarget->
Hgt - iOver; pTarget->
Hgt = iOver; rcThis.
Hgt -= iOver;
202 if ((iOver=rClip.
x-rcThis.
x)>0)
205 pTarget->
Wdt = iOver; rcThis.
Wdt -= iOver; rcThis.
x = rClip.
x;
209 if ((iOver=rClip.
y-rcThis.
y)>0)
213 pTarget->
Hgt = iOver;
227 for (
size_t i = 0, cnt=
GetCount(); i < cnt && fDone; ++i)
230 for (
size_t j = i+1; j < cnt; ++j)
233 if (rc1.
y == rc2.
y && rc1.
Hgt == rc2.
Hgt)
235 if (rc1.
x + rc1.
Wdt == rc2.
x)
239 else if (rc2.
x + rc2.
Wdt == rc1.
x)
244 else if (rc1.
x == rc2.
x && rc1.
Wdt == rc2.
Wdt)
246 if (rc1.
y + rc1.
Hgt == rc2.
y)
250 else if (rc2.
y + rc2.
Hgt == rc1.
y)
StdDefaultAdapt< T, D > mkDefaultAdapt(T &&rValue, const D &rDefault)
bool Overlap(C4Rect &rTarget)
void CompileFunc(StdCompiler *pComp)
bool IntersectsLine(int32_t iX, int32_t iY, int32_t iX2, int32_t iY2)
void Intersect(const C4Rect &r2)
void Add(const C4Rect &r2)
bool Contains(int32_t iX, int32_t iY) const
void Set(int32_t iX, int32_t iY, int32_t iWdt, int32_t iHgt)
void AddRect(const C4Rect &rNewRect)
void ClipByRect(const C4Rect &rClip)
void RemoveIndexedRect(int32_t idx)
void Set(int32_t iX, int32_t iY, int32_t iWdt, int32_t iHgt, int32_t iTX, int32_t iTY)
bool ClipBy(C4TargetRect &rClip)
void CompileFunc(StdCompiler *pComp)
virtual bool Separator(Sep eSep=SEP_SEP)
void Value(const T &rStruct)