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_XT_COLOR_WHEEL_
00025 #define _SO_XT_COLOR_WHEEL_
00026
00027 #ifdef SOQT
00028 # include <Inventor/Qt/SoQtColorWheel.h>
00029 #elif defined(_WIN32) && !defined(SOWX)
00030 # include <Inventor/Win/SoWinColorWheel.h>
00031 #elif !defined(SOWX)
00032
00033
00034 #include <Inventor/SbColor.h>
00035 #include <Inventor/SbLinear.h>
00036 #include <Inventor/misc/SoCallbackList.h>
00037 #include <Inventor/Xt/SoXtGLWidget.h>
00038
00039 class SoXtMouse;
00040
00041
00042 typedef void SoXtColorWheelCB(void *userData, const float hsv[3]);
00043
00045
00046
00047
00048
00049
00050
00051
00052
00054
00055 {
00056
00057 public:
00058
00059 SoXtColorWheel(
00060 SoWidget parent = NULL,
00061 const char *name = NULL,
00062 SbBool buildInsideParent = TRUE);
00063 ~SoXtColorWheel();
00064
00065
00066
00067
00068
00069
00070
00071 void setBaseColor(const float hsv[3]);
00072 const float *getBaseColor() { return hsvColor; }
00073
00074
00075
00076
00077
00078
00079 void setWYSIWYG(SbBool trueOrFalse);
00080 SbBool isWYSIWYG() { return WYSIWYGmode; }
00081
00082
00083
00084
00085
00086
00087
00088
00089 void addStartCallback(
00090 SoXtColorWheelCB *f,
00091 void *userData = NULL)
00092 { startCallbacks->addCallback((SoCallbackListCB *) f, userData); }
00093
00094 void addValueChangedCallback(
00095 SoXtColorWheelCB *f,
00096 void *userData = NULL)
00097 { changedCallbacks->addCallback((SoCallbackListCB *) f, userData); }
00098
00099 void addFinishCallback(
00100 SoXtColorWheelCB *f,
00101 void *userData = NULL)
00102 { finishCallbacks->addCallback((SoCallbackListCB *) f, userData); }
00103
00104 void removeStartCallback(
00105 SoXtColorWheelCB *f,
00106 void *userData = NULL)
00107 { startCallbacks->removeCallback((SoCallbackListCB *) f, userData); }
00108
00109 void removeValueChangedCallback(
00110 SoXtColorWheelCB *f,
00111 void *userData = NULL)
00112 { changedCallbacks->removeCallback((SoCallbackListCB *) f, userData); }
00113
00114 void removeFinishCallback(
00115 SoXtColorWheelCB *f,
00116 void *userData = NULL)
00117 { finishCallbacks->removeCallback((SoCallbackListCB *) f, userData); }
00118
00119
00120
00121 SbBool isInteractive() { return interactive; }
00122
00123 private:
00124
00125
00126
00127
00128 SoEXTENDER
00129 SoXtColorWheel( SoWidget parent,
00130 const char *name,
00131 SbBool buildInsideParent,
00132 SbBool buildNow);
00133
00134 SoWidget buildWidget(SoWidget parent);
00135
00136 private:
00137
00138
00139 virtual void redraw();
00140 virtual void processEvent(XAnyEvent *anyevent);
00141 virtual void sizeChanged(const SbVec2s &newSize);
00142
00143
00144 SbBool WYSIWYGmode;
00145 SbBool blackMarker;
00146 float hsvColor[3];
00147 short cx, cy, radius;
00148 SbColor *defaultColors, *colors;
00149 SbVec2f *geometry;
00150 SoXtMouse *mouse;
00151
00152
00153 SoCallbackList *startCallbacks;
00154 SoCallbackList *changedCallbacks;
00155 SoCallbackList *finishCallbacks;
00156 SbBool interactive;
00157
00158
00159 void makeWheelGeometry();
00160 void makeWheelColors(SbColor *col, float intensity);
00161 void drawWheelSurrounding();
00162 void drawWheelColors();
00163 void moveWheelMarker(short x, short y);
00164
00165
00166 void constructorCommon(SbBool buildNow);
00167 };
00168
00169 #endif
00170
00171 #endif
00172
00173
00174