00001
00074 #ifndef INC_MGUI_CANVAS_H
00075 #define INC_MGUI_CANVAS_H
00076
00077 #ifndef INC_MGUI_CTRL_H
00078 #include <mgui/ctrl.h>
00079 #endif
00080
00081 #ifndef INC_MGUI_KEYCODE_H
00082 #include <mgui/keycode.h>
00083 #endif
00084
00085 #ifndef INC_MGUI_CURSORID_H
00086 #include <mgui/cursorid.h>
00087 #endif
00088
00089 #ifndef INC_MGUI_POINTERBUTTON_H
00090 #include <mgui/pointerbutton.h>
00091 #endif
00092
00093 #ifndef INC_MI32_STEREOVIEW_H
00094 #include <mi32/stereoview.h>
00095 #endif
00096
00097
00098 #ifndef GENERATING_DOXYGEN_OUTPUT
00099
00100 class STEREODEVICE;
00101 namespace MGD {
00102 class DEVICE;
00103 class CONTEXT;
00104 }
00105 #endif
00106
00107
00108 namespace MGUI {
00109
00110
00112 class CANVAS : public CTRL {
00113 public:
00114
00115 enum DEVICETYPE {
00116 DEVICETYPE_Screen,
00117 DEVICETYPE_Pixmap,
00118 DEVICETYPE_Memory,
00119 DEVICETYPE_Stereo,
00120 };
00121
00122 enum STYLE {
00123 STYLE_Default = 0x00,
00124 STYLE_UsePixmap = 0x01,
00125 STYLE_UseMemory = 0x02,
00126 STYLE_NoBuffer = 0x04,
00127 STYLE_NoDelayResize = 0x08,
00128 STYLE_NotifyExpose = 0x10,
00129 STYLE_TraverseToOnPointerEnter = 0x20,
00130 };
00131
00132 typedef fastdelegate::FastDelegate<bool(MGUI::POINT,MGUI::KEYCODE,MGUI::KEYSTATE)> DELEGATE_ONKEY;
00133 typedef fastdelegate::FastDelegate<bool(MGUI::POINT,MGUI::POINTERBUTTON,MGUI::KEYSTATE)> DELEGATE_ONPOINTER;
00134 typedef fastdelegate::FastDelegate<bool(MGUI::POINT,MGUI::POINTERBUTTON,MGUI::KEYSTATE,bool)> DELEGATE_ONPOINTERMOVE;
00135 typedef fastdelegate::FastDelegate<void(MGD::CONTEXT*)> DELEGATE_ONPAINT;
00136 typedef fastdelegate::FastDelegate<void(const LRECT2D&)> DELEGATE_ONUPDATERECT;
00137 typedef fastdelegate::FastDelegate<void(INT32)> DELEGATE_ONWHEEL;
00138
00140 CANVAS (
00141 STYLE style = STYLE_Default
00142 );
00143
00145 virtual ~CANVAS ();
00146
00150 void AddDelegateOnPointerButtonDown (
00151 POINTERBUTTON buttons,
00152 DELEGATE_ONPOINTER delegate
00153 );
00154
00158 void AddDelegateOnPointerButtonUp (
00159 POINTERBUTTON buttons,
00160 DELEGATE_ONPOINTER delegate
00161 );
00162
00164 void Create (
00165 LAYOUT_PANE_BASE& ParentPane,
00166 int width,
00167 int height,
00168 LAYOUT_SIZEALIGN sizealign,
00169 CANVAS::STYLE style = STYLE_Default
00170 );
00171
00173 void CursorSetVisible (
00174 bool visible
00175 );
00176
00178 void Erase (
00179 const COLOR& color
00180 );
00181
00183 CURSORID GetCursor () const;
00184
00186 MDLGPARENT GetDlgParent () const;
00187
00192 MGD::CONTEXT* GetDrawingContext (
00193 DEVICETYPE DeviceType,
00194 STEREOVIEW StereoView = STEREOVIEW_None
00195 ) const;
00196
00199 MGD::DEVICE* GetDrawingDevice (
00200 DEVICETYPE DeviceType = DEVICETYPE_Memory
00201 );
00202
00205 MGD::DEVICE* GetDrawingDevice (
00206 DEVICETYPE DeviceType,
00207 bool AllowStereo
00208 );
00209
00211 INT16 GetHeight () const;
00212
00216 bool GetPointerLocation (
00217 MGUI::POINT& ptCanvas
00218 ) const;
00219
00221 void GetSize (
00222 INT16& width,
00223 INT16& height
00224 ) const;
00225
00227 STYLE GetStyle () const;
00228
00230 INT16 GetWidth () const;
00231
00233 bool IsPointerCaptured () const;
00234
00237 void PanFromBuffer (
00238 INT32 dx,
00239 INT32 dy,
00240 const COLOR *pColorBG
00241 );
00242
00245 void ReleaseCapture ();
00246
00248 void Resize (
00249 INT16 width,
00250 INT16 height
00251 );
00252
00255 void RestoreFromBuffer (
00256 DEVICETYPE devtype,
00257 bool UpdateNow = false
00258 );
00259
00263 void RestoreFromBuffer (
00264 DEVICETYPE devtype,
00265 const LRECT2D& rect,
00266 bool UpdateNow = false
00267 );
00268
00270 void SetCursor (
00271 CURSORID cursorid
00272 );
00273
00277 void SetDelegateOnKey (
00278 DELEGATE_ONKEY delegate
00279 );
00280
00285 void SetDelegateOnPaint (
00286 DELEGATE_ONPAINT delegate
00287 );
00288
00290 void SetDelegateOnPointerDoubleClick (
00291 DELEGATE_ONPOINTER delegate
00292 );
00293
00295 void SetDelegateOnPointerEnter (
00296 DELEGATE_VOID_NOPARMS delegate
00297 );
00298
00300 void SetDelegateOnPointerLeave (
00301 DELEGATE_VOID_NOPARMS delegate
00302 );
00303
00306 void SetDelegateOnPointerMove (
00307 DELEGATE_ONPOINTERMOVE delegate
00308 );
00309
00313 void SetDelegateOnPointerWheel (
00314 DELEGATE_ONWHEEL delegate
00315 );
00316
00321 void SetDelegateOnSize (
00322 DELEGATE_ONSIZE delegate
00323 );
00324
00327 void SetDelegateOnUpdatePixmap (
00328 DELEGATE_ONUPDATERECT delegate
00329 );
00330
00332 void StereoDisable ();
00333
00335 void StereoDrawCursor (
00336 MGUI::POINT ptCanvasL,
00337 MGUI::POINT ptCanvasR,
00338 LRECT2D& CursorRectL,
00339 LRECT2D& CursorRectR
00340 );
00341
00343 void StereoEnable (
00344 const STEREODEVICE& StereoDevice
00345 );
00346
00349 const STEREODEVICE* StereoGetDeviceHW () const;
00350
00352 bool StereoIsEnabled () const;
00353
00355 void StereoUpdateFromBuffer ();
00356
00358 void UpdateFromBuffer (
00359 DEVICETYPE DevTarget,
00360 DEVICETYPE DevSource,
00361 const LRECT2D *pRectSource = 0
00362 );
00363
00364 protected:
00365
00368 virtual void v_OnCaptureChanged ();
00369
00374 virtual bool v_OnKey (
00375 MGUI::POINT point,
00376 MGUI::KEYCODE keycode,
00377 MGUI::KEYSTATE keystate
00378 );
00379
00385 virtual void v_OnPaint (
00386 MGD::CONTEXT *gc
00387 );
00388
00392 virtual void v_OnPointerButtonDown (
00393 MGUI::POINT point,
00394 POINTERBUTTON button,
00395 KEYSTATE keystate
00396 );
00397
00401 virtual void v_OnPointerButtonUp (
00402 MGUI::POINT point,
00403 POINTERBUTTON button,
00404 KEYSTATE keystate
00405 );
00406
00410 virtual void v_OnPointerEnter ();
00411
00415 virtual void v_OnPointerLeave ();
00416
00420 virtual void v_OnPointerMove (
00421 MGUI::POINT point,
00422 POINTERBUTTON button,
00423 KEYSTATE keystate,
00424 bool hasmore
00425 );
00426
00430 virtual void v_OnPointerWheel (
00431 INT32 direction
00432 );
00433
00439 virtual void v_OnSize (
00440 int width,
00441 int height
00442 );
00443
00444 private:
00445 #ifndef GENERATING_DOXYGEN_OUTPUT
00446 class PRIV;
00447 PRIV *m_pPriv;
00448
00449 CANVAS (const CANVAS&);
00450 CANVAS& operator= (const CANVAS&);
00451 #endif // GENERATING_DOXYGEN_OUTPUT
00452
00456 virtual void v_OnUpdatePixmap (
00457 const LRECT2D& rect
00458 );
00459
00460 };
00461
00462 #ifndef GENERATING_DOXYGEN_OUTPUT
00463 DEFINE_ENUM_OP_BITWISE(CANVAS::STYLE)
00464 #endif
00465
00466
00467
00468 }
00469
00470
00471 #endif // INC_MGUI_CANVAS_H