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 FXCOLORRING_H
00025 #define FXCOLORRING_H
00026
00027 #ifndef FXFRAME_H
00028 #include "FXFrame.h"
00029 #endif
00030
00031 namespace FX {
00032
00033
00034 class FXImage;
00035
00036
00045 class FXAPI FXColorRing : public FXFrame {
00046 FXDECLARE(FXColorRing)
00047 protected:
00048 FXImage *dial;
00049 FXfloat hsv[3];
00050 FXint ringwidth;
00051 FXint ringouter;
00052 FXint ringinner;
00053 FXint dialx;
00054 FXint dialy;
00055 FXint satvalx;
00056 FXint satvaly;
00057 FXint huex;
00058 FXint huey;
00059 FXint clrx;
00060 FXint clry;
00061 FXint blkx;
00062 FXint blky;
00063 FXint whtx;
00064 FXint whty;
00065 FXString tip;
00066 FXString help;
00067 FXuchar mode;
00068 protected:
00069 FXColorRing();
00070 void updatering();
00071 FXfloat hueFromXY(FXint x,FXint y) const;
00072 void hueToXY(FXint& x,FXint& y,FXfloat hue) const;
00073 void satValToXY(FXint& x,FXint& y,FXfloat s,FXfloat v) const;
00074 void satValFromXY(FXfloat& s,FXfloat& v,FXint x,FXint y) const;
00075 FXbool inCorner(FXint x,FXint y) const;
00076 FXbool inHueRing(FXint x,FXint y) const;
00077 FXbool inTriangle(FXint x,FXint y) const;
00078 protected:
00079 enum {
00080 MOUSE_NONE,
00081 MOUSE_HUE,
00082 MOUSE_SATVAL
00083 };
00084 private:
00085 FXColorRing(const FXColorRing&);
00086 FXColorRing &operator=(const FXColorRing&);
00087 public:
00088 long onPaint(FXObject*,FXSelector,void*);
00089 long onLeftBtnPress(FXObject*,FXSelector,void*);
00090 long onLeftBtnRelease(FXObject*,FXSelector,void*);
00091 long onMotion(FXObject*,FXSelector,void*);
00092 long onMouseWheel(FXObject*,FXSelector,void*);
00093 long onCmdSetHelp(FXObject*,FXSelector,void*);
00094 long onCmdGetHelp(FXObject*,FXSelector,void*);
00095 long onCmdSetTip(FXObject*,FXSelector,void*);
00096 long onCmdGetTip(FXObject*,FXSelector,void*);
00097 long onQueryHelp(FXObject*,FXSelector,void*);
00098 long onQueryTip(FXObject*,FXSelector,void*);
00099 public:
00100
00102 FXColorRing(FXComposite* p,FXObject* tgt=NULL,FXSelector sel=0,FXuint opts=FRAME_NORMAL,FXint x=0,FXint y=0,FXint w=0,FXint h=0,FXint pl=DEFAULT_PAD,FXint pr=DEFAULT_PAD,FXint pt=DEFAULT_PAD,FXint pb=DEFAULT_PAD);
00103
00105 virtual void create();
00106
00108 virtual void detach();
00109
00111 virtual void layout();
00112
00114 virtual FXint getDefaultWidth();
00115
00117 virtual FXint getDefaultHeight();
00118
00120 void setHue(FXfloat h);
00121
00123 FXfloat getHue() const { return hsv[0]; }
00124
00126 void setSat(FXfloat s);
00127
00129 FXfloat getSat() const { return hsv[1]; }
00130
00132 void setVal(FXfloat v);
00133
00135 FXfloat getVal() const { return hsv[2]; }
00136
00138 void setHueSatVal(FXfloat h,FXfloat s,FXfloat v);
00139
00141 void setRingWidth(FXint rw);
00142
00144 FXint getRingWidth() const { return ringwidth; }
00145
00147 void setHelpText(const FXString& text){ help=text; }
00148
00150 const FXString& getHelpText() const { return help; }
00151
00153 void setTipText(const FXString& text){ tip=text; }
00154
00156 const FXString& getTipText() const { return tip; }
00157
00159 virtual void save(FXStream& store) const;
00160
00162 virtual void load(FXStream& store);
00163
00165 virtual ~FXColorRing();
00166 };
00167
00168 }
00169
00170 #endif