00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #ifndef _SO_QT_COLOR_WHEEL_
00025 #define _SO_QT_COLOR_WHEEL_
00026
00027 #include <Inventor/Qt/OivQtCompat.h>
00028 #include <Inventor/SbColor.h>
00029 #include <Inventor/SbLinear.h>
00030 #include <Inventor/Qt/SoQtGLWidget.h>
00031 #include <Inventor/misc/SoCallbackList.h>
00032
00033
00034 class SoQtMouse;
00035
00036
00037 typedef void SoQtColorWheelCB(void *userData, const float hsv[3]);
00038
00040
00041
00042
00043
00044
00045
00046
00047
00049
00050
00051 {
00052 Q_OBJECT
00053
00054 public:
00055
00056 SoQtColorWheel(QWidget* parent = NULL,
00057 const char *name = NULL,
00058 SbBool buildInsideParent = TRUE);
00059 ~SoQtColorWheel();
00060
00061
00062
00063
00064
00065
00066
00067 void setBaseColor(const float hsv[3]);
00068 const float *getBaseColor() { return hsvColor; }
00069
00070
00071
00072
00073
00074
00075 void setWYSIWYG(SbBool trueOrFalse);
00076 SbBool isWYSIWYG() { return WYSIWYGmode; }
00077
00078
00079
00080
00081
00082
00083
00084
00085 void addStartCallback(
00086 SoQtColorWheelCB *f,
00087 void *userData = NULL)
00088 { startCallbacks->addCallback((SoCallbackListCB *) f, userData); }
00089
00090 void addValueChangedCallback(
00091 SoQtColorWheelCB *f,
00092 void *userData = NULL)
00093 { changedCallbacks->addCallback((SoCallbackListCB *) f, userData); }
00094
00095 void addFinishCallback(
00096 SoQtColorWheelCB *f,
00097 void *userData = NULL)
00098 { finishCallbacks->addCallback((SoCallbackListCB *) f, userData); }
00099
00100 void removeStartCallback(
00101 SoQtColorWheelCB *f,
00102 void *userData = NULL)
00103 { startCallbacks->removeCallback((SoCallbackListCB *) f, userData); }
00104
00105 void removeValueChangedCallback(
00106 SoQtColorWheelCB *f,
00107 void *userData = NULL)
00108 { changedCallbacks->removeCallback((SoCallbackListCB *) f, userData); }
00109
00110 void removeFinishCallback(
00111 SoQtColorWheelCB *f,
00112 void *userData = NULL)
00113 { finishCallbacks->removeCallback((SoCallbackListCB *) f, userData); }
00114
00115
00116
00117 SbBool isInteractive() { return interactive; }
00118
00119 private:
00120
00121
00122
00123
00124 SoEXTENDER
00125 SoQtColorWheel(
00126 QWidget* parent,
00127 const char *name,
00128 SbBool buildInsideParent,
00129 SbBool buildNow);
00130
00131 QWidget* buildWidget(QWidget* parent);
00132
00133 private:
00134
00135
00136 virtual void redraw();
00137 virtual void redrawOverlay();
00138 virtual void processEvent(QEvent *anyevent);
00139 virtual void sizeChanged(const SbVec2s &newSize);
00140
00141
00142 SbBool WYSIWYGmode;
00143 SbBool blackMarker;
00144 float hsvColor[3];
00145 int cx, cy, radius;
00146 SbColor *defaultColors, *colors;
00147 SbVec2f *geometry;
00148 SoQtMouse *mouse;
00149
00150
00151 SoCallbackList *startCallbacks;
00152 SoCallbackList *changedCallbacks;
00153 SoCallbackList *finishCallbacks;
00154 SbBool interactive;
00155
00156
00157 void makeWheelGeometry();
00158 void makeWheelColors(SbColor *col, float intensity);
00159 void drawWheelSurrounding();
00160 void drawWheelColors();
00161 void checkMarkerColor();
00162 void drawWheelMarker();
00163 void moveWheelMarker(short x, short y);
00164
00165
00166 void constructorCommon(SbBool buildNow);
00167 #ifdef _WIN32
00168 void SaveUnder(short x,short y);
00169 void RestoreUnder();
00170
00171 SbBool nSaved;
00172 short nSaveX, nSaveY;
00173 # ifndef GDISAVE
00174 unsigned long *pSaveBuf;
00175 # else
00176 HBITMAP hSaveBits;
00177 HDC hSaveDC;
00178 # endif
00179 #endif
00180 #if defined(__APPLE__) || defined(_WIN32)
00181 int nMarkR, nMarkG, nMarkB;
00182 #endif
00183 };
00184
00185 #endif
00186
00187
00188