22 inline float len(
float x,
float y)
24 return std::sqrt(x * x + y * y);
32 mResultVerticiesPos.clear();
33 mResultVerticiesUV.clear();
45 for (
const auto& point :
_points)
57#ifdef MYGUI_NO_POLYGONAL_SKIN_CROPPING
65 if (count > mVertexCount)
68 if (
nullptr != mRenderItem)
93 mGeometryOutdated =
true;
102 mCurrentColour = (mCurrentColour & 0x00FFFFFF) | (alpha & 0xFF000000);
104 if (
nullptr != mNode)
110 mGeometryOutdated =
true;
112 if (
nullptr != mNode)
163 mGeometryOutdated =
true;
178 if (
nullptr != mNode)
194 if (
nullptr != mNode)
200 MYGUI_ASSERT(!mRenderItem,
"mRenderItem must be nullptr");
209 MYGUI_ASSERT(mRenderItem,
"mRenderItem must be not nullptr");
213 mRenderItem =
nullptr;
223 mGeometryOutdated =
true;
229 if (mGeometryOutdated)
234 size_t size = mResultVerticiesPos.size();
236 for (
size_t i = 0;
i < size; ++
i)
239 mResultVerticiesPos[
i].left,
240 mResultVerticiesPos[
i].top,
242 mResultVerticiesUV[
i].left,
243 mResultVerticiesUV[
i].top,
253 mCurrentColour = (colour & 0x00FFFFFF) | (mCurrentColour & 0xFF000000);
255 if (
nullptr != mNode)
266 mCurrentTexture =
_rect;
268 mGeometryOutdated =
true;
270 if (
nullptr != mNode)
276 if (mLinePoints.size() < 2)
281 mGeometryOutdated =
false;
296 mResultVerticiesPos.clear();
297 mResultVerticiesUV.clear();
309 for (
size_t i = 1;
i < mLinePoints.size(); ++
i)
311 if (mLineStroke != 0)
314 if (
stroke == mLineStroke)
322 len(mLinePoints[
i - 1].left - mLinePoints[
i].left, mLinePoints[
i - 1].top - mLinePoints[
i].top);
325 if (
i != mLinePoints.size() - 1)
355 mResultVerticiesPos.push_back(
points[0]);
356 mResultVerticiesPos.push_back(
points[1]);
357 mResultVerticiesPos.push_back(mLinePoints[
i] +
normal);
358 mResultVerticiesUV.push_back(
pointsUV[0]);
359 mResultVerticiesUV.push_back(
pointsUV[1]);
362 mResultVerticiesPos.push_back(
points[1]);
363 mResultVerticiesPos.push_back(mLinePoints[
i] -
normal);
364 mResultVerticiesPos.push_back(mLinePoints[
i] +
normal);
365 mResultVerticiesUV.push_back(
pointsUV[1]);
386 lineDir = mLinePoints[
i] - mLinePoints[
i - 1];
402 lineDir = mLinePoints[
i - 1] - mLinePoints[
i];
415 mResultVerticiesPos.push_back(
points[0]);
416 mResultVerticiesPos.push_back(mLinePoints[
i] +
normal);
417 mResultVerticiesPos.push_back(mLinePoints[
i]);
418 mResultVerticiesUV.push_back(
pointsUV[0]);
422 mResultVerticiesPos.push_back(mLinePoints[
i] +
normal);
423 mResultVerticiesPos.push_back(mLinePoints[
i] +
normal2);
424 mResultVerticiesPos.push_back(mLinePoints[
i]);
438#ifndef MYGUI_NO_POLYGONAL_SKIN_CROPPING
446 for (
size_t i = 0;
i < mResultVerticiesPos.size();
i += 3)
451 FloatPoint v0 = mResultVerticiesUV[
i + 2] - mResultVerticiesUV[
i];
452 FloatPoint v1 = mResultVerticiesUV[
i + 1] - mResultVerticiesUV[
i];
464 mResultVerticiesPos[
i],
465 mResultVerticiesPos[
i + 1],
466 mResultVerticiesPos[
i + 2]);
471 mResultVerticiesPos[
i],
472 mResultVerticiesPos[
i + 1],
473 mResultVerticiesPos[
i + 2]);
478 mResultVerticiesPos[
i],
479 mResultVerticiesPos[
i + 1],
480 mResultVerticiesPos[
i + 2]);
497 for (
auto&
pos : mResultVerticiesPos)
512 result.left *= mLineWidth / 2;
513 result.top *= mLineWidth / 2;
526 line1.left /= length;
529 line2.left /= length;
545 if (std::fabs(
angle) < 1e-6f )
548 float width = mLineWidth / 2 / std::sin(
angle);
#define MYGUI_ASSERT(exp, dest)
int getAbsoluteLeft() const
bool _checkOutside() const
ICroppedRectangle * mCroppedParent
int getAbsoluteTop() const
int _getViewWidth() const
int _getViewHeight() const
virtual float getNodeDepth() const =0
virtual void outOfDate(RenderItem *_item)=0
virtual RenderItem * addToRenderItem(ITexture *_texture, bool _firstQueue, bool _separate)=0
virtual const RenderTargetInfo & getInfo() const =0
FloatPoint _getMiddleLine(const FloatPoint &_point1, const FloatPoint &_point2, const FloatPoint &_point3) const
void _correctView() override
void destroyDrawItem() override
void createDrawItem(ITexture *_texture, ILayerNode *_node) override
void _setAlign(const IntSize &_oldsize) override
FloatPoint _getPerpendicular(const FloatPoint &_point1, const FloatPoint &_point2) const
void setPoints(const std::vector< FloatPoint > &_points)
void setStateData(IStateInfo *_data) override
void setVisible(bool _visible) override
void setAlpha(float _alpha) override
void _setUVSet(const FloatRect &_rect) override
void setWidth(float _width)
void _updateView() override
void _setColour(const Colour &_value) override
void setStroke(size_t _value)
void addDrawItem(ISubWidget *_item, size_t _count)
bool getCurrentUpdate() const
IRenderTarget * getRenderTarget()
void reallockDrawItem(ISubWidget *_item, size_t _count)
void removeDrawItem(ISubWidget *_item)
Vertex * getCurrentVertexBuffer() const
void setLastVertexCount(size_t _count)
static RenderManager & getInstance()
const FloatRect & getRect() const
FloatPoint getUVFromPositionInsideRect(const FloatPoint &_point, const FloatPoint &_v0, const FloatPoint &_v1, const FloatPoint &_baseUV)
FloatPoint getPositionInsideRect(const FloatPoint &_point, const FloatPoint &_corner0, const FloatPoint &_corner1, const FloatPoint &_corner2)
VectorFloatPoint cropPolygon(FloatPoint *_baseVerticiesPos, size_t _size, const IntCoord &_cropRectangle)
uint32 toNativeColour(const Colour &_colour, VertexColourType _format)
Convert Colour to 32-bit representation.
types::TPoint< float > FloatPoint
std::vector< FloatPoint > VectorFloatPoint
float len(float x, float y)