|
commit 191aeefc4a4161cb132065625a5e5eacb567688a
Author: Albrecht Schlosser <albrechts.fltk@online.de>
AuthorDate: Sat Nov 26 19:54:48 2022 +0100
Commit: Albrecht Schlosser <albrechts.fltk@online.de>
CommitDate: Sat Nov 26 19:56:32 2022 +0100
Make the value box size of Fl_Value_Slider user settable (STR 3222)
For a very simple test program see STR 3222, File 2:
https://www.fltk.org/strfiles/3222/value_slider.cxx
Known issues:
- range checking of the value box size is very limited
- resizing the widget does not change the value box size
- drawing issues are possible if the value box size and the widget
size are not compatible (e.g. value box too large)
FL/Fl_Value_Slider.H | 109 ++++++++++++++++++++++++++++++++++++++----------
src/Fl_Value_Slider.cxx | 30 +++++++------
2 files changed, 106 insertions(+), 33 deletions(-)
diff --git FL/Fl_Value_Slider.H FL/Fl_Value_Slider.H
index 53d264d..e49b046 100644
--- FL/Fl_Value_Slider.H
+++ FL/Fl_Value_Slider.H
@@ -1,5 +1,5 @@
//
-// Value slider header file for the Fast Light Tool Kit (FLTK).
+// Value Slider header file for the Fast Light Tool Kit (FLTK).
//
// Copyright 1998-2022 by Bill Spitzak and others.
//
@@ -25,30 +25,97 @@
/**
The Fl_Value_Slider widget is a Fl_Slider widget
with a box displaying the current value.
- \image html value_slider.png
- \image latex value_slider.png "Fl_Value_Slider" width=4cm
+ \image html value_slider.png
+ \image latex value_slider.png "Fl_Value_Slider" width=4cm
*/
class FL_EXPORT Fl_Value_Slider : public Fl_Slider {
- Fl_Font textfont_;
- Fl_Fontsize textsize_;
- Fl_Color textcolor_;
+ Fl_Font textfont_;
+ Fl_Fontsize textsize_;
+ Fl_Color textcolor_;
+ short value_width_;
+ short value_height_;
+
protected:
- void draw();
+ void draw();
+
public:
- int handle(int);
- Fl_Value_Slider(int x,int y,int w,int h, const char *l = 0);
- /** Gets the typeface of the text in the value box. */
- Fl_Font textfont() const {return textfont_;}
- /** Sets the typeface of the text in the value box. */
- void textfont(Fl_Font s) {textfont_ = s;}
- /** Gets the size of the text in the value box. */
- Fl_Fontsize textsize() const {return textsize_;}
- /** Sets the size of the text in the value box. */
- void textsize(Fl_Fontsize s) {textsize_ = s;}
- /** Gets the color of the text in the value box. */
- Fl_Color textcolor() const {return textcolor_;}
- /** Sets the color of the text in the value box. */
- void textcolor(Fl_Color s) {textcolor_ = s;}
+ int handle(int);
+ Fl_Value_Slider(int x, int y, int w, int h, const char *l = 0);
+
+ /** Gets the typeface of the text in the value box. */
+ Fl_Font textfont() const { return textfont_; }
+
+ /** Sets the typeface of the text in the value box. */
+ void textfont(Fl_Font s) { textfont_ = s; }
+
+ /** Gets the size of the text in the value box. */
+ Fl_Fontsize textsize() const { return textsize_; }
+
+ /** Sets the size of the text in the value box. */
+ void textsize(Fl_Fontsize s) { textsize_ = s; }
+
+ /** Gets the color of the text in the value box. */
+ Fl_Color textcolor() const { return textcolor_; }
+
+ /** Sets the color of the text in the value box. */
+ void textcolor(Fl_Color s) { textcolor_ = s; }
+
+ /** Sets the width of the value box in pixels (horizontal mode only).
+
+ Limited range checking is applied but drawing errors may occur if
+ the size \p s is set too high or too low, particularly if the widget
+ is resized (later).
+
+ The programmer is responsible for setting sensible values and
+ widget sizes.
+
+ The default value set by the constructor is 35.
+
+ \param[in] s new width of the value box
+
+ \since 1.4.0
+ */
+ void value_width(int s) {
+ if (s > w() - 10)
+ s = w() - 10;
+ if (s < 10)
+ s = 10;
+ value_width_ = (short)s;
+ }
+
+ /** Gets the width of the value box in pixels (horizontal mode only).
+
+ \since 1.4.0
+ */
+ int value_width() const { return (value_width_); }
+
+ /** Sets the height of the value box in pixels (vertical mode only).
+
+ Limited range checking is applied but drawing errors may occur if
+ the size \p s is set too high or too low, particularly if the widget
+ is resized (later).
+
+ The programmer is responsible for setting sensible values and
+ widget sizes.
+
+ The default value set by the constructor is 25.
+
+ \param[in] s new height of the value box
+
+ \since 1.4.0
+ */
+ void value_height(int s) {
+ if (s > h() - 10)
+ s = h() - 10;
+ if (s < 10)
+ s = 10;
+ value_height_ = (short)s;
+ }
+ /** Gets the height of the value box in pixels (vertical mode only).
+
+ \since 1.4.0
+ */
+ int value_height() const { return (value_height_); }
};
#endif
diff --git src/Fl_Value_Slider.cxx src/Fl_Value_Slider.cxx
index 8406519..918d077 100644
--- src/Fl_Value_Slider.cxx
+++ src/Fl_Value_Slider.cxx
@@ -1,7 +1,7 @@
//
-// Value slider widget for the Fast Light Tool Kit (FLTK).
+// Value Slider widget for the Fast Light Tool Kit (FLTK).
//
-// Copyright 1998-2010 by Bill Spitzak and others.
+// Copyright 1998-2022 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
@@ -30,17 +30,24 @@ Fl_Value_Slider::Fl_Value_Slider(int X, int Y, int W, int H, const char*l)
textfont_ = FL_HELVETICA;
textsize_ = 10;
textcolor_ = FL_FOREGROUND_COLOR;
+ value_width_ = 35;
+ value_height_ = 25;
}
void Fl_Value_Slider::draw() {
int sxx = x(), syy = y(), sww = w(), shh = h();
int bxx = x(), byy = y(), bww = w(), bhh = h();
if (horizontal()) {
- bww = 35; sxx += 35; sww -= 35;
+ bww = value_width();
+ sxx += value_width();
+ sww -= value_width();
} else {
- syy += 25; bhh = 25; shh -= 25;
+ syy += value_height();
+ bhh = value_height();
+ shh -= value_height();
}
- if (damage()&FL_DAMAGE_ALL) draw_box(box(),sxx,syy,sww,shh,color());
+ if (damage() & FL_DAMAGE_ALL)
+ draw_box(box(), sxx, syy, sww, shh, color());
Fl_Slider::draw(sxx+Fl::box_dx(box()),
syy+Fl::box_dy(box()),
sww-Fl::box_dw(box()),
@@ -60,15 +67,14 @@ int Fl_Value_Slider::handle(int event) {
}
int sxx = x(), syy = y(), sww = w(), shh = h();
if (horizontal()) {
- sxx += 35; sww -= 35;
+ sxx += value_width();
+ sww -= value_width();
} else {
- syy += 25; shh -= 25;
+ syy += value_height();
+ shh -= value_height();
}
- return Fl_Slider::handle(event,
- sxx+Fl::box_dx(box()),
- syy+Fl::box_dy(box()),
- sww-Fl::box_dw(box()),
- shh-Fl::box_dh(box()));
+ return Fl_Slider::handle(event, sxx + Fl::box_dx(box()), syy + Fl::box_dy(box()),
+ sww - Fl::box_dw(box()), shh - Fl::box_dh(box()));
}
[ Direct Link to Message ] | |