![]() |
VR-Forces 4.0.4 Class Documentation
|
00001 /****************************************************************************** 00002 ** Copyright (c) 2010 MAK Technologies, Inc. 00003 ** All rights reserved. 00004 ******************************************************************************/ 00005 00007 #pragma once 00008 #include <vrvGraphics/vrvGraphics.h> 00009 #include <boost/unordered_map.hpp> 00010 00011 namespace makVrv 00012 { 00013 class DtFrameBufferObject; 00014 class DtLineRenderer; 00015 class DtLineSegment; 00016 class DtOverlayResourceProvider; 00017 class DtPickableTriangle; 00018 class DtPickableWidget; 00019 class DtPixelBufferObject; 00020 class DtQuad; 00021 class DtQuadRenderer; 00022 class DtTextureObject; 00023 class DtTriangleProxy; 00024 class DtTriangleRenderer; 00025 class DtPickableWidget; 00026 class DtPickableQuad; 00027 class DtPickableLine; 00028 class DtPickableTriangle; 00029 00032 class DT_DLL_VRVGRAPHICS DtWidgetPicker 00033 { 00034 public: 00035 00036 enum MousePickType 00037 { 00038 NO_EVENT = 0, 00039 LEFT_MOUSE_PRESS, 00040 LEFT_MOUSE_RELEASE, 00041 LEFT_MOUSE_DOUBLECLICK, 00042 MIDDLE_MOUSE_PRESS, 00043 MIDDLE_MOUSE_RELEASE, 00044 MIDDLE_MOUSE_DOUBLECLICK, 00045 RIGHT_MOUSE_PRESS, 00046 RIGHT_MOUSE_RELEASE, 00047 RIGHT_MOUSE_DOUBLECLICK, 00048 MOUSE_MOVE, 00049 MOUSE_WHEEL 00050 }; 00051 00052 struct MousePickRecord 00053 { 00054 MousePickType type; 00055 int x; 00056 int y; 00057 int wheel; 00058 }; 00059 00060 00061 friend class DtPickableWidget; 00062 friend class DtPickableQuad; 00063 friend class DtPickableLine; 00064 friend class DtPickableTriangle; 00065 00066 DtWidgetPicker(DtOverlayResourceProvider& provider); 00067 ~DtWidgetPicker(); 00068 00070 unsigned int numberOfWidgets() const; 00071 00073 void releaseResources(); 00074 00076 DtPickableQuad* allocatePickableQuad(); 00077 00079 DtPickableTriangle* allocatePickableTriangle(); 00080 00082 DtPickableLine* allocatePickableLine(); 00083 00086 void pick(const MousePickRecord& rec,int w, int h, 00087 bool geocentric, double cameraPosition[3] = 0, 00088 double cameraMatrix[16] = 0); 00089 00091 const DtPickableWidget* findWidgetFromLastPick() const; 00092 00094 bool signalEvents(); 00095 00097 void clearEvents(); 00098 00099 protected: 00100 00103 DtPickableWidget* calculateWidgetFromLastPick(); 00104 00105 void debugRender(); 00106 00108 DtQuad* allocateQuad(); 00109 00111 DtLineSegment* allocateLine(); 00112 00114 DtTriangleProxy* allocateTriangle(); 00115 00117 unsigned int widgetCreated(DtPickableWidget*); 00118 00120 void widgetToBeDeleted(DtPickableWidget*); 00121 00122 bool allocateResources(); 00123 00124 protected: 00125 00126 DtOverlayResourceProvider& myProvider; 00127 DtFrameBufferObject* myFrameBuffer; 00128 DtPixelBufferObject* myPixelBuffer; 00129 DtTextureObject* mySampleTexture; 00130 DtQuadRenderer* myQuadRenderer; 00131 DtLineRenderer* myLineRenderer; 00132 DtTriangleRenderer* myTriangleRenderer; 00133 00134 int myDesiredWidth; 00135 int myDesiredHeight; 00136 00137 bool myPendingEventFlag; 00138 MousePickRecord myPendingEvent; 00139 00140 DtPickableWidget* myMouseFocusWidget; 00141 00142 typedef boost::unordered_map<unsigned int, DtPickableWidget*> WidgetIdMap; 00143 WidgetIdMap myWidgetIds; 00144 00145 unsigned int myFreeId; 00146 00147 }; 00148 } 00149