From 37c833ba1f5d3e45fa760deabbc057ffb0802966 Mon Sep 17 00:00:00 2001 From: Greg Ercolano Date: Thu, 2 Apr 2009 22:02:19 +0000 Subject: Fl_Help_View mods for scrollbar sizing 1) Introduced new scrollbar_size() methods with global fallback behavior 2) Added int scrollbar_size_ 3) Mods to code to make use of the above 4) Doxygen docs for the above git-svn-id: file:///fltk/svn/fltk/branches/branch-1.3@6740 ea41ed52-d2ee-0310-a9c1-e6b18d33e121 --- src/Fl_Help_View.cxx | 77 ++++++++++++++++++++++++++++++++-------------------- 1 file changed, 48 insertions(+), 29 deletions(-) (limited to 'src/Fl_Help_View.cxx') diff --git a/src/Fl_Help_View.cxx b/src/Fl_Help_View.cxx index c0780deba..8c93205a8 100644 --- a/src/Fl_Help_View.cxx +++ b/src/Fl_Help_View.cxx @@ -452,27 +452,40 @@ Fl_Help_View::draw() xtra_ww; // Extra width for underlined space between words // Draw the scrollbar(s) and box first... - ww = w() ; + ww = w(); hh = h(); i = 0; draw_box(b, x(), y(), ww, hh, bgcolor_); - int ss = Fl::scrollbar_size(); - if (hscrollbar_.visible()) { - draw_child(hscrollbar_); - hh -= ss; - i ++; - } - if (scrollbar_.visible()) { - draw_child(scrollbar_); - ww -= ss; - i ++; - } - if (i == 2) { - fl_color(FL_GRAY); - fl_rectf(x() + ww - Fl::box_dw(b) + Fl::box_dx(b), - y() + hh - Fl::box_dh(b) + Fl::box_dy(b), ss, ss); + if ( hscrollbar_.visible() || scrollbar_.visible() ) { + int scrollsize = scrollbar_size_ ? scrollbar_size_ : Fl::scrollbar_size(); + int hor_vis = hscrollbar_.visible(); + int ver_vis = scrollbar_.visible(); + // Scrollbar corner + int scorn_x = x() + ww - (ver_vis?scrollsize:0) - Fl::box_dw(b) + Fl::box_dx(b); + int scorn_y = y() + hh - (hor_vis?scrollsize:0) - Fl::box_dh(b) + Fl::box_dy(b); + if ( hor_vis ) { + if ( hscrollbar_.h() != scrollsize ) { // scrollsize changed? + hscrollbar_.resize(x(), scorn_y, scorn_x - x(), scrollsize); + init_sizes(); + } + draw_child(hscrollbar_); + hh -= scrollsize; + } + if ( ver_vis ) { + if ( scrollbar_.w() != scrollsize ) { // scrollsize changed? + scrollbar_.resize(scorn_x, y(), scrollsize, scorn_y - y()); + init_sizes(); + } + draw_child(scrollbar_); + ww -= scrollsize; + } + if ( hor_vis && ver_vis ) { + // Both scrollbars visible? Draw little gray box in corner + fl_color(FL_GRAY); + fl_rectf(scorn_x, scorn_y, scrollsize, scrollsize); + } } if (!value_) @@ -1078,7 +1091,8 @@ void Fl_Help_View::format() { // Reset document width... - hsize_ = w() - Fl::scrollbar_size() - Fl::box_dw(b); + int scrollsize = scrollbar_size_ ? scrollbar_size_ : Fl::scrollbar_size(); + hsize_ = w() - scrollsize - Fl::box_dw(b); done = 0; while (!done) @@ -1803,7 +1817,7 @@ void Fl_Help_View::format() { int dx = Fl::box_dw(b) - Fl::box_dx(b); int dy = Fl::box_dh(b) - Fl::box_dy(b); - int ss = Fl::scrollbar_size(); + int ss = scrollbar_size_ ? scrollbar_size_ : Fl::scrollbar_size(); int dw = Fl::box_dw(b) + ss; int dh = Fl::box_dh(b); @@ -2221,8 +2235,9 @@ Fl_Help_View::format_table(int *table_width, // O - Total table width // Adjust the width if needed... int scale_width = *table_width; + int scrollsize = scrollbar_size_ ? scrollbar_size_ : Fl::scrollbar_size(); if (scale_width == 0) { - if (width > (hsize_ - Fl::scrollbar_size())) scale_width = hsize_ - Fl::scrollbar_size(); + if (width > (hsize_ - scrollsize)) scale_width = hsize_ - scrollsize; else scale_width = width; } @@ -2600,7 +2615,8 @@ Fl_Help_View::get_length(const char *l) { // I - Value if (val > 100) val = 100; else if (val < 0) val = 0; - val = val * (hsize_ - Fl::scrollbar_size()) / 100; + int scrollsize = scrollbar_size_ ? scrollbar_size_ : Fl::scrollbar_size(); + val = val * (hsize_ - scrollsize) / 100; } return val; @@ -3000,6 +3016,7 @@ Fl_Help_View::Fl_Help_View(int xx, // I - Left position leftline_ = 0; size_ = 0; hsize_ = 0; + scrollbar_size_ = 0; scrollbar_.value(0, hh, 0, 1); scrollbar_.step(8.0); @@ -3167,12 +3184,12 @@ Fl_Help_View::resize(int xx, // I - New left position Fl_Widget::resize(xx, yy, ww, hh); - int ss = Fl::scrollbar_size(); - scrollbar_.resize(x() + w() - ss - Fl::box_dw(b) + Fl::box_dx(b), - y() + Fl::box_dy(b), ss, h() - ss - Fl::box_dh(b)); + int scrollsize = scrollbar_size_ ? scrollbar_size_ : Fl::scrollbar_size(); + scrollbar_.resize(x() + w() - scrollsize - Fl::box_dw(b) + Fl::box_dx(b), + y() + Fl::box_dy(b), scrollsize, h() - scrollsize - Fl::box_dh(b)); hscrollbar_.resize(x() + Fl::box_dx(b), - y() + h() - ss - Fl::box_dh(b) + Fl::box_dy(b), - w() - ss - Fl::box_dw(b), ss); + y() + h() - scrollsize - Fl::box_dh(b) + Fl::box_dy(b), + w() - scrollsize - Fl::box_dw(b), scrollsize); format(); } @@ -3207,14 +3224,15 @@ Fl_Help_View::topline(int t) // I - Top line number if (!value_) return; - if (size_ < (h() - Fl::scrollbar_size()) || t < 0) + int scrollsize = scrollbar_size_ ? scrollbar_size_ : Fl::scrollbar_size(); + if (size_ < (h() - scrollsize) || t < 0) t = 0; else if (t > size_) t = size_; topline_ = t; - scrollbar_.value(topline_, h() - Fl::scrollbar_size(), 0, size_); + scrollbar_.value(topline_, h() - scrollsize, 0, size_); do_callback(); @@ -3231,14 +3249,15 @@ Fl_Help_View::leftline(int l) // I - Left position if (!value_) return; - if (hsize_ < (w() - Fl::scrollbar_size()) || l < 0) + int scrollsize = scrollbar_size_ ? scrollbar_size_ : Fl::scrollbar_size(); + if (hsize_ < (w() - scrollsize) || l < 0) l = 0; else if (l > hsize_) l = hsize_; leftline_ = l; - hscrollbar_.value(leftline_, w() - Fl::scrollbar_size(), 0, hsize_); + hscrollbar_.value(leftline_, w() - scrollsize, 0, hsize_); redraw(); } -- cgit v1.2.3