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)
This commit is contained in:
parent
e1a781717e
commit
191aeefc4a
@ -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.
|
||||
//
|
||||
@ -32,23 +32,90 @@ class FL_EXPORT Fl_Value_Slider : public Fl_Slider {
|
||||
Fl_Font textfont_;
|
||||
Fl_Fontsize textsize_;
|
||||
Fl_Color textcolor_;
|
||||
short value_width_;
|
||||
short value_height_;
|
||||
|
||||
protected:
|
||||
void draw();
|
||||
|
||||
public:
|
||||
int handle(int);
|
||||
Fl_Value_Slider(int x,int y,int w,int h, const char *l = 0);
|
||||
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_;}
|
||||
Fl_Font textfont() const { return textfont_; }
|
||||
|
||||
/** Sets the typeface of the text in the value box. */
|
||||
void textfont(Fl_Font s) {textfont_ = s;}
|
||||
void textfont(Fl_Font s) { textfont_ = s; }
|
||||
|
||||
/** Gets the size of the text in the value box. */
|
||||
Fl_Fontsize textsize() const {return textsize_;}
|
||||
Fl_Fontsize textsize() const { return textsize_; }
|
||||
|
||||
/** Sets the size of the text in the value box. */
|
||||
void textsize(Fl_Fontsize s) {textsize_ = s;}
|
||||
void textsize(Fl_Fontsize s) { textsize_ = s; }
|
||||
|
||||
/** Gets the color of the text in the value box. */
|
||||
Fl_Color textcolor() const {return textcolor_;}
|
||||
Fl_Color textcolor() const { return textcolor_; }
|
||||
|
||||
/** Sets the color of the text in the value box. */
|
||||
void textcolor(Fl_Color s) {textcolor_ = s;}
|
||||
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
|
||||
|
@ -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()));
|
||||
}
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user