1 /* 2 * This source file is part of MyGUI. For the latest info, see http://mygui.info/ 3 * Distributed under the MIT License 4 * (See accompanying file COPYING.MIT or copy at http://opensource.org/licenses/MIT) 5 */ 6 7 #ifndef MYGUI_POLYGONAL_SKIN_H_ 8 #define MYGUI_POLYGONAL_SKIN_H_ 9 10 #include "MyGUI_Prerequest.h" 11 #include "MyGUI_Types.h" 12 #include "MyGUI_ISubWidgetRect.h" 13 #include "MyGUI_RenderFormat.h" 14 15 namespace MyGUI 16 { 17 18 class MYGUI_EXPORT PolygonalSkin : 19 public ISubWidgetRect 20 { 21 MYGUI_RTTI_DERIVED( PolygonalSkin ) 22 23 public: 24 PolygonalSkin(); 25 26 /** Set line points. */ 27 void setPoints(const std::vector<FloatPoint>& _points); 28 29 /** Set line width in pixels. */ 30 void setWidth(float _width); 31 32 /** Set line stroke step. 0 to disable stroke. */ 33 void setStroke(size_t _value); 34 35 void setAlpha(float _alpha) override; 36 37 void setVisible(bool _visible) override; 38 39 void setStateData(IStateInfo* _data) override; 40 41 void createDrawItem(ITexture* _texture, ILayerNode* _node) override; 42 void destroyDrawItem() override; 43 44 // метод для отрисовки себя 45 void doRender() override; 46 47 /*internal:*/ 48 void _updateView() override; 49 void _correctView() override; 50 51 void _setAlign(const IntSize& _oldsize) override; 52 53 void _setUVSet(const FloatRect& _rect) override; 54 void _setColour(const Colour& _value) override; 55 56 protected: 57 void _rebuildGeometry(); 58 FloatPoint _getPerpendicular(const FloatPoint& _point1, const FloatPoint& _point2); 59 // line from center of p1-p2 line to p3 60 FloatPoint _getMiddleLine(const FloatPoint& _point1, const FloatPoint& _point2, const FloatPoint& _point3); 61 62 private: 63 bool mGeometryOutdated; 64 65 float mLineWidth; 66 size_t mLineStroke; 67 std::vector<FloatPoint> mLinePoints; 68 float mLineLength; 69 70 std::vector<FloatPoint> mResultVerticiesPos; 71 std::vector<FloatPoint> mResultVerticiesUV; 72 73 size_t mVertexCount; 74 75 bool mEmptyView; 76 77 VertexColourType mVertexFormat; 78 uint32 mCurrentColour; 79 80 FloatRect mCurrentTexture; 81 IntCoord mCurrentCoord; 82 83 ILayerNode* mNode; 84 RenderItem* mRenderItem; 85 }; 86 87 } // namespace MyGUI 88 89 #endif // MYGUI_POLYGONAL_SKIN_H_ 90