| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198 |
- //
- // "$Id: Fl_Color_Chooser.H 8864 2011-07-19 04:49:30Z greg.ercolano $"
- //
- // Color chooser header file for the Fast Light Tool Kit (FLTK).
- //
- // Copyright 1998-2010 by Bill Spitzak and others.
- //
- // This library is free software. Distribution and use rights are outlined in
- // the file "COPYING" which should have been included with this file. If this
- // file is missing or damaged, see the license at:
- //
- // http://www.fltk.org/COPYING.php
- //
- // Please report all bugs and problems on the following page:
- //
- // http://www.fltk.org/str.php
- //
- /** \file
- Fl_Color_Chooser widget . */
- // The color chooser object and the color chooser popup. The popup
- // is just a window containing a single color chooser and some boxes
- // to indicate the current and cancelled color.
- #ifndef Fl_Color_Chooser_H
- #define Fl_Color_Chooser_H
- #include <FL/Fl_Group.H>
- #include <FL/Fl_Box.H>
- #include <FL/Fl_Return_Button.H>
- #include <FL/Fl_Choice.H>
- #include <FL/Fl_Value_Input.H>
- #ifndef FL_DOXYGEN
- /** For internal use only */
- class FL_EXPORT Flcc_HueBox : public Fl_Widget {
- int px, py;
- protected:
- void draw();
- int handle_key(int);
- public:
- int handle(int);
- Flcc_HueBox(int X, int Y, int W, int H) : Fl_Widget(X,Y,W,H) {
- px = py = 0;}
- DECLARE_CLASS_CHEAP_RTTI_2(Flcc_HueBox, Fl_Widget)
- };
- /** For internal use only */
- class FL_EXPORT Flcc_ValueBox : public Fl_Widget {
- int py;
- protected:
- void draw();
- int handle_key(int);
- public:
- int handle(int);
- Flcc_ValueBox(int X, int Y, int W, int H) : Fl_Widget(X,Y,W,H) {
- py = 0;}
- DECLARE_CLASS_CHEAP_RTTI_2(Flcc_ValueBox, Fl_Widget)
- };
- /** For internal use only */
- class FL_EXPORT Flcc_Value_Input : public Fl_Value_Input {
- public:
- int format(char*);
- Flcc_Value_Input(int X, int Y, int W, int H) : Fl_Value_Input(X,Y,W,H) {}
- DECLARE_CLASS_CHEAP_RTTI_2(Flcc_Value_Input, Fl_Value_Input)
- };
- #endif // !FL_DOXYGEN
- /** \addtogroup group_comdlg
- @{ */
- /**
- \class Fl_Color_Chooser
- \brief The Fl_Color_Chooser widget provides a standard RGB color chooser.
- \image html fl_color_chooser.jpg
- \image latex fl_color_chooser.jpg "fl_color_chooser()" width=5cm
- You can place any number of the widgets into a panel of your own design.
- The diagram shows the widget as part of a color chooser dialog created by
- the fl_color_chooser() function. The Fl_Color_Chooser widget contains the
- hue box, value slider, and rgb input fields from the above diagram (it
- does not have the color chips or the Cancel or OK buttons).
- The callback is done every time the user changes the rgb value. It is not
- done if they move the hue control in a way that produces the \e same rgb
- value, such as when saturation or value is zero.
- The fl_color_chooser() function pops up a window to let the user pick an
- arbitrary RGB color. They can pick the hue and saturation in the "hue box"
- on the left (hold down CTRL to just change the saturation), and the
- brightness using the vertical slider. Or they can type the 8-bit numbers
- into the RGB Fl_Value_Input fields, or drag the mouse across them to adjust
- them. The pull-down menu lets the user set the input fields to show RGB,
- HSV, or 8-bit RGB (0 to 255).
- fl_color_chooser() returns non-zero if the user picks ok, and updates the
- RGB values. If the user picks cancel or closes the window this returns
- zero and leaves RGB unchanged.
- If you use the color chooser on an 8-bit screen, it will allocate all the
- available colors, leaving you no space to exactly represent the color the
- user picks! You can however use fl_rectf() to fill a region with a simulated
- color using dithering.
- */
- /** @} */
- class FL_EXPORT Fl_Color_Chooser : public Fl_Group {
- Flcc_HueBox huebox;
- Flcc_ValueBox valuebox;
- Fl_Choice choice;
- Flcc_Value_Input rvalue;
- Flcc_Value_Input gvalue;
- Flcc_Value_Input bvalue;
- Fl_Box resize_box;
- double hue_, saturation_, value_;
- double r_, g_, b_;
- void set_valuators();
- static void rgb_cb(Fl_Widget*, void*);
- static void mode_cb(Fl_Widget*, void*);
- public:
-
- /**
- Returns which Fl_Color_Chooser variant is currently active
- \return color modes are rgb(0), byte(1), hex(2), or hsv(3)
- */
- int mode() {return choice.value();}
-
- /**
- Set which Fl_Color_Chooser variant is currently active
- \param[in] newMode color modes are rgb(0), byte(1), hex(2), or hsv(3)
- */
- void mode(int newMode);
-
- /**
- Returns the current hue.
- 0 <= hue < 6. Zero is red, one is yellow, two is green, etc.
- <em>This value is convenient for the internal calculations - some other
- systems consider hue to run from zero to one, or from 0 to 360.</em>
- */
- double hue() const {return hue_;}
- /**
- Returns the saturation.
- 0 <= saturation <= 1.
- */
- double saturation() const {return saturation_;}
- /**
- Returns the value/brightness.
- 0 <= value <= 1.
- */
- double value() const {return value_;}
- /**
- Returns the current red value.
- 0 <= r <= 1.
- */
- double r() const {return r_;}
- /**
- Returns the current green value.
- 0 <= g <= 1.
- */
- double g() const {return g_;}
- /**
- Returns the current blue value.
- 0 <= b <= 1.
- */
- double b() const {return b_;}
- int hsv(double H, double S, double V);
- int rgb(double R, double G, double B);
- static void hsv2rgb(double H, double S, double V, double& R, double& G, double& B);
- static void rgb2hsv(double R, double G, double B, double& H, double& S, double& V);
- Fl_Color_Chooser(int X, int Y, int W, int H, const char *L = 0);
- DECLARE_CLASS_CHEAP_RTTI_2(Fl_Color_Chooser, Fl_Group)
- };
- FL_EXPORT int fl_color_chooser(const char* name, double& r, double& g, double& b, int m=-1);
- FL_EXPORT int fl_color_chooser(const char* name, uchar& r, uchar& g, uchar& b, int m=-1);
- #endif
- //
- // End of "$Id: Fl_Color_Chooser.H 8864 2011-07-19 04:49:30Z greg.ercolano $".
- //
|