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