diff --git a/CHANGES b/CHANGES index 71ee11436..09f4d331f 100644 --- a/CHANGES +++ b/CHANGES @@ -100,6 +100,8 @@ CHANGES IN FLTK 1.3.4 RELEASED: ??? ?? 2016 Bug fixes + - Fl_Browser now correctly adjusts its scrollbars when the default + text size is changed with textsize(int) (STR #3057). - Fixed Fl_Text_Display/Fl_Text_Editor slow scrolling, line number display, wrap mode "hiding" text behind scrollbars, and more scrollbar handling (alignment) (STR #3272). diff --git a/FL/Fl_Browser.H b/FL/Fl_Browser.H index 4c4521d72..467c6bf0c 100644 --- a/FL/Fl_Browser.H +++ b/FL/Fl_Browser.H @@ -3,7 +3,7 @@ // // Browser header file for the Fast Light Tool Kit (FLTK). // -// Copyright 1998-2011 by Bill Spitzak and others. +// Copyright 1998-2016 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 @@ -141,6 +141,17 @@ public: int size() const { return lines; } void size(int W, int H) { Fl_Widget::size(W, H); } + /** + Gets the default text size (in pixels) for the lines in the browser. + */ + Fl_Fontsize textsize() const { return Fl_Browser_::textsize(); } + + /* + Sets the default text size for the lines in the browser to newSize. + Defined and documented in Fl_Browser.cxx + */ + void textsize(Fl_Fontsize newSize); + int topline() const ; /** For internal use only? */ enum Fl_Line_Position { TOP, BOTTOM, MIDDLE }; diff --git a/src/Fl_Browser.cxx b/src/Fl_Browser.cxx index c81c88edc..e8c00174a 100644 --- a/src/Fl_Browser.cxx +++ b/src/Fl_Browser.cxx @@ -3,7 +3,7 @@ // // Browser widget for the Fast Light Tool Kit (FLTK). // -// Copyright 1998-2010 by Bill Spitzak and others. +// Copyright 1998-2016 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 @@ -650,6 +650,29 @@ int Fl_Browser::topline() const { return lineno(top()); } +/** + Sets the default text size (in pixels) for the lines in the browser to \p newSize. + + This method recalculates all item heights and caches the total height + internally for optimization of later item changes. This can be slow + if there are many items in the browser. + + You \e may need to call redraw() to see the effect and to have the + scrollbar positions recalculated. + + You should set the text size \e before populating the browser with items + unless you really need to \e change the size later. +*/ +void Fl_Browser::textsize(Fl_Fontsize newSize) { + Fl_Browser_::textsize(newSize); + new_list(); + full_height_ = 0; + if (lines == 0) return; + for (FL_BLINE* itm=(FL_BLINE *)item_first(); itm; itm=(FL_BLINE *)item_next(itm)) { + full_height_ += item_height(itm); + } +} + /** Removes all the lines in the browser. \see add(), insert(), remove(), swap(int,int), clear() diff --git a/src/Fl_Browser_.cxx b/src/Fl_Browser_.cxx index a85fc0153..fbbc3bfa5 100644 --- a/src/Fl_Browser_.cxx +++ b/src/Fl_Browser_.cxx @@ -113,6 +113,7 @@ void Fl_Browser_::resize(int X, int Y, int W, int H) { hscrollbar.resize( X, scrollbar.align()&FL_ALIGN_TOP ? Y-scrollsize : Y+H, W, scrollsize); + max_width = 0; } // Cause minimal update to redraw the given item: