Skip to content

Commit

Permalink
Make the value box size of Fl_Value_Slider user settable (STR 3222)
Browse files Browse the repository at this point in the history
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)
  • Loading branch information
Albrecht Schlosser committed Nov 26, 2022
1 parent e1a7817 commit 191aeef
Show file tree
Hide file tree
Showing 2 changed files with 106 additions and 33 deletions.
109 changes: 88 additions & 21 deletions FL/Fl_Value_Slider.H
Original file line number Diff line number Diff line change
@@ -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.
//
Expand All @@ -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
30 changes: 18 additions & 12 deletions src/Fl_Value_Slider.cxx
Original file line number Diff line number Diff line change
@@ -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
Expand Down Expand Up @@ -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()),
Expand All @@ -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()));
}


Expand Down

0 comments on commit 191aeef

Please sign in to comment.