MyGUI
3.2.1
|
00001 /* 00002 * This source file is part of MyGUI. For the latest info, see http://mygui.info/ 00003 * Distributed under the MIT License 00004 * (See accompanying file COPYING.MIT or copy at http://opensource.org/licenses/MIT) 00005 */ 00006 00007 #ifndef __MYGUI_CANVAS_H__ 00008 #define __MYGUI_CANVAS_H__ 00009 00010 #include "MyGUI_Prerequest.h" 00011 #include "MyGUI_Widget.h" 00012 #include "MyGUI_ITexture.h" 00013 00014 namespace MyGUI 00015 { 00016 00021 class MYGUI_EXPORT Canvas : 00022 public Widget, 00023 public ITextureInvalidateListener 00024 { 00025 MYGUI_RTTI_DERIVED( Canvas ) 00026 00027 public: 00028 Canvas(); 00029 00030 struct Event 00031 { 00032 Event( bool _textureChanged, bool _widgetResized, bool _requested ) : 00033 textureChanged( _textureChanged ), 00034 widgetResized( _widgetResized ), 00035 requested( _requested ) 00036 { 00037 } 00038 00039 bool textureChanged; 00040 bool widgetResized; 00041 00043 bool requested; 00044 }; 00045 00046 typedef delegates::CMultiDelegate1<Canvas*> EventHandle_CanvasPtr; 00047 typedef delegates::CDelegate2<Canvas*, Event> EventHandle_CanvasPtrEvent; 00048 00053 enum TextureResizeMode 00054 { 00059 // Размер указаный при создании текстуры увеличиваеться до степени двойки и больше не меняется. 00060 // Текстура всегда растягиваеться во весь виджет. 00061 TRM_PT_CONST_SIZE, 00062 00071 // Размер указаный при создании текстуры игнорируется. 00072 // Текстура всегда больше размера окна и кратна степени двойки. 00073 // Если размер виджета становится больше чем размер текстуры, текстура пересоздается. 00074 // Текстура всегда отображатся пиксель в пиксель на виджет, образуя рабочую область текстуры. 00075 TRM_PT_VIEW_REQUESTED, 00076 00084 // Размер указаный при создании текстуры игнорируется. 00085 // Текстура всегда больше размера окна и кратна степени двойки. 00086 // Если размер виджета становится больше чем размер текстуры, текстура пересоздается. 00087 // Текстура всегда растягиваеться во весь виджет. 00088 TRM_PT_VIEW_ALL 00089 }; 00090 00091 public: 00093 void createTexture(TextureResizeMode _resizeMode, TextureUsage _usage = getDefaultTextureUsage(), PixelFormat _format = getDefaultTextureFormat()); 00094 00096 void createTexture(int _width, int _height, TextureResizeMode _resizeMode, TextureUsage _usage = getDefaultTextureUsage(), PixelFormat _format = getDefaultTextureFormat()); 00097 00099 void createTexture(const IntSize& _size, TextureResizeMode _resizeMode, TextureUsage _usage = getDefaultTextureUsage(), PixelFormat _format = getDefaultTextureFormat()); 00100 00102 void destroyTexture(); 00103 00105 void updateTexture(); 00106 00108 void* lock(TextureUsage _usage = TextureUsage::Write); 00109 00111 void unlock(); 00112 00114 bool isLocked() const; 00115 00117 int getTextureRealWidth() const; 00118 00120 int getTextureRealHeight() const; 00121 00123 IntSize getTextureRealSize() const; 00124 00126 int getTextureSrcWidth() const; 00127 00129 int getTextureSrcHeight() const; 00130 00132 IntSize getTextureSrcSize() const; 00133 00135 PixelFormat getTextureFormat() const; 00136 00138 const std::string& getTextureName() const; 00139 00141 virtual void setSize(const IntSize& _value); 00143 virtual void setCoord(const IntCoord& _value); 00144 00146 void setSize(int _width, int _height); 00148 void setCoord(int _left, int _top, int _width, int _height); 00149 00151 TextureResizeMode getResizeMode() const; 00152 00154 void setResizeMode(TextureResizeMode _value); 00155 00157 bool isTextureSrcSize() const; 00158 00160 bool isTextureCreated() const; 00161 00163 bool isTextureManaged() const; 00164 00166 ITexture* getTexture() const; 00167 00169 void setTextureManaged(bool _value); 00170 00172 static TextureUsage getDefaultTextureUsage(); 00173 00175 static PixelFormat getDefaultTextureFormat(); 00176 00177 /*events:*/ 00182 EventHandle_CanvasPtr eventPreTextureChanges; 00183 00189 EventHandle_CanvasPtrEvent requestUpdateCanvas; 00190 00191 protected: 00192 virtual void shutdownOverride(); 00193 virtual void initialiseOverride(); 00194 00196 void _destroyTexture(bool _sendEvent); 00197 00199 void validate(int& _width, int& _height, TextureUsage& _usage, PixelFormat& _format) const; 00200 00202 void createExactTexture(int _width, int _height, TextureUsage _usage, PixelFormat _format); 00203 00205 bool checkCreate(int _width, int _height) const; 00206 00208 void resize(const IntSize& _size); 00209 00211 void correctUV(); 00212 00214 void frameAdvise(bool _advise); 00215 00217 void frameEntered(float _time); 00218 00219 virtual void textureInvalidate(ITexture* _texture); 00220 00221 void _setUVSet(const FloatRect& _rect); 00222 00223 protected: 00225 ITexture* mTexture; 00226 00228 IntSize mReqTexSize; 00229 00231 std::string mGenTexName; 00232 00234 TextureResizeMode mTexResizeMode; 00235 00237 uint8* mTexData; 00238 00240 bool mTexManaged; 00241 00243 bool mFrameAdvise; 00244 00245 bool mInvalidateData; 00246 }; 00247 00248 } // namespace MyGUI 00249 00250 #endif // __MYGUI_CANVAS_H__