33 mGeometryOutdated(false),
36 mCurrentColour(0xFFFFFFFF),
50 mGeometryOutdated =
true;
59 mGeometryOutdated =
true;
76 mGeometryOutdated =
true;
85 mCurrentColour = (mCurrentColour & 0x00FFFFFF) | (alpha & 0xFF000000);
93 mGeometryOutdated =
true;
102 bool need_update =
true;
156 mGeometryOutdated =
true;
158 if (
nullptr != mNode)
164 MYGUI_ASSERT(!mRenderItem,
"mRenderItem must be nullptr");
168 mRenderItem->
addDrawItem(
this, (GEOMETRY_VERTICIES_TOTAL_COUNT - 2) * 3);
173 MYGUI_ASSERT(mRenderItem,
"mRenderItem must be not nullptr");
177 mRenderItem =
nullptr;
191 if (mGeometryOutdated)
194 mGeometryOutdated =
false;
197 for (
int i = 1; i < GEOMETRY_VERTICIES_TOTAL_COUNT - 1; ++i)
199 verticies[3 * i - 3].
set(mResultVerticiesPos[0].left, mResultVerticiesPos[0].top, vertex_z, mResultVerticiesUV[0].left, mResultVerticiesUV[0].top, mCurrentColour);
200 verticies[3 * i - 2].
set(mResultVerticiesPos[i].left, mResultVerticiesPos[i].top, vertex_z, mResultVerticiesUV[i].left, mResultVerticiesUV[i].top, mCurrentColour);
201 verticies[3 * i - 1].
set(mResultVerticiesPos[i + 1].left, mResultVerticiesPos[i + 1].top, vertex_z, mResultVerticiesUV[i + 1].left, mResultVerticiesUV[i + 1].top, mCurrentColour);
211 mCurrentColour = (colour & 0x00FFFFFF) | (mCurrentColour & 0xFF000000);
213 if (
nullptr != mNode)
224 mCurrentTexture = _rect;
226 mGeometryOutdated =
true;
228 if (
nullptr != mNode)
232 inline float len(
float x,
float y)
234 return sqrt(x * x + y * y);
244 const float M_PI = 3.141593f;
247 float width_base = (float)mCurrentCoord.
width;
248 float height_base = (
float)mCurrentCoord.
height;
251 float baseAngles[RECT_VERTICIES_COUNT];
252 baseAngles[0] = atan2( (
float)mCenterPos.
left, (
float)mCenterPos.
top) + M_PI / 2;
253 baseAngles[1] = atan2( - width_base + (
float)mCenterPos.
left, (
float)mCenterPos.
top) + M_PI / 2;
254 baseAngles[2] = atan2( - width_base + (
float)mCenterPos.
left, - height_base + (
float)mCenterPos.
top) + M_PI / 2;
255 baseAngles[3] = atan2( (
float)mCenterPos.
left, - height_base + (
float)mCenterPos.
top) + M_PI / 2;
258 float baseDistances[RECT_VERTICIES_COUNT];
259 baseDistances[0] =
len( (
float)mCenterPos.
left, (
float)mCenterPos.
top);
260 baseDistances[1] =
len( - width_base + (
float)mCenterPos.
left, (
float)mCenterPos.
top);
261 baseDistances[2] =
len( - width_base + (
float)mCenterPos.
left, - height_base + (
float)mCenterPos.
top);
262 baseDistances[3] =
len( (
float)mCenterPos.
left, - height_base + (
float)mCenterPos.
top);
266 FloatPoint baseVerticiesPos[RECT_VERTICIES_COUNT];
268 int offsetX = mCenterPos.
left;
269 int offsetY = mCenterPos.
top;
271 for (
int i = 0; i < RECT_VERTICIES_COUNT; ++i)
273 baseVerticiesPos[i].
left = offsetX + cos(-mAngle + baseAngles[i]) * baseDistances[i];
274 baseVerticiesPos[i].
top = offsetY - sin(-mAngle + baseAngles[i]) * baseDistances[i];
278 FloatPoint baseVerticiesUV[RECT_VERTICIES_COUNT] =
293 size_t size = RECT_VERTICIES_COUNT;
296 for (
int i = 0; i < RECT_VERTICIES_COUNT; ++i)
298 mResultVerticiesPos[i] = baseVerticiesPos[i];
299 mResultVerticiesUV[i] = baseVerticiesUV[i];
308 RECT_VERTICIES_COUNT,
317 for (
size_t i = 0; i < resultVerticiesPos.size(); ++i)
319 mResultVerticiesPos[i] = resultVerticiesPos[i];
322 size = resultVerticiesPos.size();
325 FloatPoint v0 = baseVerticiesUV[3] - baseVerticiesUV[0];
326 FloatPoint v1 = baseVerticiesUV[1] - baseVerticiesUV[0];
327 for (
size_t i = 0; i < GEOMETRY_VERTICIES_TOTAL_COUNT; ++i)
337 mResultVerticiesUV[i] = mResultVerticiesUV[size - 1];
348 for (
size_t i = 0; i < GEOMETRY_VERTICIES_TOTAL_COUNT; ++i)
352 mResultVerticiesPos[i].
left = vertex_left_base + mResultVerticiesPos[i].
left * info.
pixScaleX * 2;
353 mResultVerticiesPos[i].
top = vertex_top_base + mResultVerticiesPos[i].
top * info.
pixScaleY * -2;
358 mResultVerticiesPos[i] = mResultVerticiesPos[size - 1];