FLTK logo

[master] 38af0c8 - Add Fl_Terminal to "Scrollbar Size" unittest (#931)

FLTK matrix user chat room
(using Element browser app)   FLTK gitter user chat room   GitHub FLTK Project   FLTK News RSS Feed  
  FLTK Apps      FLTK Library      Forums      Links     Login 
 All Forums  |  Back to fltk.commit  ]
 
Previous Message ]Next Message ]

[master] 38af0c8 - Add Fl_Terminal to "Scrollbar Size" unittest (#931) "Greg Ercolano" 13:32 Mar 11  
 
commit 38af0c823b6338637bccf7d0b70c88d3a861fe6a
Author:     Greg Ercolano <erco@seriss.com>
AuthorDate: Mon Mar 11 13:20:17 2024 -0700
Commit:     Greg Ercolano <erco@seriss.com>
CommitDate: Mon Mar 11 13:20:17 2024 -0700

    Add Fl_Terminal to "Scrollbar Size" unittest (#931)
    
    This involved enlarging the unittest main window to make room
    for the additional test.
    
    Adding this test revealed a problem in Fl_Terminal's global
    scrollbar size handling, which is fixed here as well.
    
    Also fixed a small issue in the demo's debugging terminal
    with the horiz scrollbar.

 src/Fl_Terminal.cxx             |  6 +++
 test/demo.cxx                   |  2 +-
 test/unittest_scrollbarsize.cxx | 83 ++++++++++++++++++++++++++++-------------
 test/unittests.h                |  2 +-
 4 files changed, 66 insertions(+), 27 deletions(-)

diff --git src/Fl_Terminal.cxx src/Fl_Terminal.cxx
index 2cd99e9..566cb08 100644
--- src/Fl_Terminal.cxx
+++ src/Fl_Terminal.cxx
@@ -3657,6 +3657,12 @@ void Fl_Terminal::draw(void) {
     current_style_->update();   // do deferred update here
     update_screen(true);        // update fonts
   }
+  // Detect if Fl::scrollbar_size() was changed in size, recalc if so
+  if (scrollbar_size_ == 0 &&
+      (  scrollbar->visible() &&  scrollbar->w() != Fl::scrollbar_size() ||
+        hscrollbar->visible() && hscrollbar->h() != Fl::scrollbar_size())) {
+    update_scrollbar();
+  }
   // Draw group first, terminal last
   Fl_Group::draw();
   // Draw that little square between the scrollbars:
diff --git test/demo.cxx test/demo.cxx
index 0cb691b..a960976 100644
--- test/demo.cxx
+++ test/demo.cxx
@@ -91,7 +91,7 @@
 
 #define FORM_W 350
 #define FORM_H 440
-#define TTY_W  700
+#define TTY_W  780
 #define TTY_H  200
 
 /* The form description */
diff --git test/unittest_scrollbarsize.cxx test/unittest_scrollbarsize.cxx
index 7fb4dab..b964fce 100644
--- test/unittest_scrollbarsize.cxx
+++ test/unittest_scrollbarsize.cxx
@@ -23,6 +23,7 @@
 #include <FL/Fl_Table.H>
 #include <FL/Fl_Text_Display.H>
 #include <FL/Fl_Value_Slider.H>
+#include <FL/Fl_Terminal.H>
 
 //
 // Test new 1.3.x global vs. local scrollbar sizing
@@ -80,12 +81,15 @@ static const char *phonetics[] = {
 class Ut_Scrollbar_Size_Test : public Fl_Group {
     Fl_Browser      *brow_a, *brow_b, *brow_c;
     Fl_Tree         *tree_a, *tree_b, *tree_c;
-    Ut_Table         *table_a,*table_b,*table_c;
+    Ut_Table        *table_a,*table_b,*table_c;
     Fl_Text_Display *text_a, *text_b, *text_c;
+    Fl_Terminal     *term_a, *term_b, *term_c;
 
     Fl_Browser *makebrowser(int X,int Y,int W,int H,const char*L=0) {
         Fl_Browser *b = new Fl_Browser(X,Y,W,H,L);
         b->type(FL_MULTI_BROWSER);
+        b->labelsize(10);
+        b->textsize(10);
         b->align(FL_ALIGN_TOP);
         for (int t=0; phonetics[t]; t++ ) {
           b->add(phonetics[t]);
@@ -95,6 +99,8 @@ class Ut_Scrollbar_Size_Test : public Fl_Group {
     }
     Fl_Tree *maketree(int X,int Y,int W,int H,const char*L=0) {
         Fl_Tree *b = new Fl_Tree(X,Y,W,H,L);
+        b->labelsize(10);
+        b->item_labelsize(10);
         b->type(FL_TREE_SELECT_MULTI);
         b->align(FL_ALIGN_TOP);
         for (int t=0; phonetics[t]; t++ ) {
@@ -105,6 +111,7 @@ class Ut_Scrollbar_Size_Test : public Fl_Group {
     }
     Ut_Table *maketable(int X,int Y,int W,int H,const char*L=0) {
         Ut_Table *mta = new Ut_Table(X,Y,W,H,L);
+        mta->labelsize(10);
         mta->align(FL_ALIGN_TOP);
         mta->end();
         return(mta);
@@ -112,6 +119,8 @@ class Ut_Scrollbar_Size_Test : public Fl_Group {
     Fl_Text_Display *maketextdisplay(int X,int Y,int W,int H,const char*L=0) {
         Fl_Text_Display *dpy = new Fl_Text_Display(X,Y,W,H,L);
         Fl_Text_Buffer  *buf = new Fl_Text_Buffer();
+        dpy->labelsize(10);
+        dpy->textsize(10);
         dpy->buffer(buf);
         for (int t=0; phonetics[t]; t++ ) {
           buf->printf("%s\n", phonetics[t]);
@@ -119,6 +128,15 @@ class Ut_Scrollbar_Size_Test : public Fl_Group {
         }
         return(dpy);
     }
+    Fl_Terminal *maketerm(int X,int Y,int W,int H,const char*L=0) {
+        Fl_Terminal *term = new Fl_Terminal(X,Y,W,H,L);
+        term->labelsize(8);
+        term->textsize(8);
+        term->end();
+        term->display_columns(40); // force wider than normal to show hscroll
+        term->printf("Long entry will show h-bar\n");
+        return(term);
+    }
     void slide_cb2(Fl_Value_Slider *in) {
         const char *label = in->label();
         int val = int(in->value());
@@ -128,6 +146,7 @@ class Ut_Scrollbar_Size_Test : public Fl_Group {
             tree_a->scrollbar_size(val);
             table_a->scrollbar_size(val);
             text_a->scrollbar_size(val);
+            term_a->scrollbar_size(val);
         } else {
             Fl::scrollbar_size(val);
         }
@@ -148,35 +167,44 @@ public:
       begin();
         //      _____________    _______________
         //     |_____________|  |_______________|
-        //                                                ---   -----  <-- tgrpy
-        //       brow_a      brow_b      brow_c            | 14   |
-        //     ----------  ----------  ----------         ---     |    <-- browy
-        //     |        |  |        |  |        |          |browh |
-        //     |        |  |        |  |        |          |      |
-        //     ----------  ----------  ----------         ---   tgrph
-        //                                                 |      |
-        //       tree_a      tree_b      tree_c            | 20   |
-        //     ----------  ----------  ----------         ---     |    <-- treey
-        //     |        |  |        |  |        |          |treeh |
-        //     |        |  |        |  |        |          |      |
-        //     ----------  ----------  ----------         ---     |
-        //                                                 |      |
-        //      table_a     table_b     table_c            | 20   |
-        //     ----------  ----------  ----------         ---     |    <-- tabley
-        //     |        |  |        |  |        |          |tableh|
-        //     |        |  |        |  |        |          |      |
-        //     ----------  ----------  ----------         ---  ------
+        //                                                ---     -----  <-- tgrpy
+        //       brow_a      brow_b      brow_c            â?? 14     â??
+        //     ----------  ----------  ----------         ---       |    <-- browy
+        //     |        |  |        |  |        |          â?? browh  |
+        //     |        |  |        |  |        |          â??        |
+        //     ----------  ----------  ----------         ---     tgrph
+        //                                                 â??        |
+        //       tree_a      tree_b      tree_c            â?? 20     |
+        //     ----------  ----------  ----------         ---       |    <-- treey
+        //     |        |  |        |  |        |          â?? treeh  |
+        //     |        |  |        |  |        |          â??        |
+        //     ----------  ----------  ----------         ---       |
+        //                                                 â??        |
+        //      table_a     table_b     table_c            â?? 20     |
+        //     ----------  ----------  ----------         ---       |    <-- tabley
+        //     |        |  |        |  |        |          â?? tableh |
+        //     |        |  |        |  |        |          â??        |
+        //     ----------  ----------  ----------         ---       |
+        //                                                 â??        |
+        //      term_a      term_b      term_c             â?? 20     |
+        //     ----------  ----------  ----------         ---       |    <-- termy
+        //     |        |  |        |  |        |          â?? termh  |
+        //     |        |  |        |  |        |          â??        â??
+        //     ----------  ----------  ----------         ---     ------
         //  etc..
         int tgrpy = Y+30;
-        int tgrph = H-130;
+        int tgrph = H-30;
+        int ysep  = 20;                 // y separation between widgets
         int browy = tgrpy+14;
-        int browh = tgrph/3 - 20;
-        int treey = browy + browh + 20;
+        int browh = tgrph/5 - 20;       // 5: number of widgets vertically
+        int treey = browy + browh + ysep;
         int treeh = browh;
-        int tabley = treey + treeh + 20;
+        int tabley = treey + treeh + ysep;
         int tableh = browh;
-        int texty = tabley + tableh + 20;
+        int texty = tabley + tableh + ysep;
         int texth = browh;
+        int termy = texty + texth + ysep;
+        int termh = texth;
         brow_a = makebrowser(X+ 10,browy,100,browh,"Browser A");
         brow_b = makebrowser(X+120,browy,100,browh,"Browser B");
         brow_c = makebrowser(X+230,browy,100,browh,"Browser C");
@@ -189,6 +217,9 @@ public:
         text_a = maketextdisplay(X+ 10,texty,100,texth,"Text Display A");
         text_b = maketextdisplay(X+120,texty,100,texth,"Text Display B");
         text_c = maketextdisplay(X+230,texty,100,texth,"Text Display C");
+        term_a = maketerm(X+ 10,termy,100,texth,"Term A");
+        term_b = maketerm(X+120,termy,100,texth,"Term B");
+        term_c = maketerm(X+230,termy,100,texth,"Term C");
         Fl_Value_Slider *slide_glob = new Fl_Value_Slider(X+100,Y,100,18,"Global Scroll Size");
         slide_glob->value(16);
         slide_glob->type(FL_HORIZONTAL);
@@ -206,8 +237,10 @@ public:
         slide_browa->callback(slide_cb, (void*)this);
         slide_browa->labelsize(12);
         int msgbox_x = brow_c->x() + brow_c->w() + 20;
+        int msgbox_y = tgrpy;
         int msgbox_w = W-(msgbox_x-X);
-        Fl_Box *msgbox = new Fl_Box(msgbox_x,browy,msgbox_w,H-Y-48);
+        int msgbox_h = tgrph;
+        Fl_Box *msgbox = new Fl_Box(msgbox_x,msgbox_y,msgbox_w,msgbox_h);
         msgbox->label("\nVerify global scrollbar sizing and per-widget scrollbar sizing. "
                       "Scrollbar's size should change interactively as size sliders are changed. "
                       "Changing 'Global Scroll Size' should affect all scrollbars AS LONG AS the "
diff --git test/unittests.h test/unittests.h
index ab55c48..006e9c5 100644
--- test/unittests.h
+++ test/unittests.h
@@ -26,7 +26,7 @@ class Fl_Terminal;
 
 // WINDOW/WIDGET SIZES
 const int UT_MAINWIN_W  = 700;                                // main window w()
-const int UT_MAINWIN_H  = 400;                                // main window h()
+const int UT_MAINWIN_H  = 600;                                // main window h()
 const int UT_BROWSER_X  = 10;                                 // browser x()
 const int UT_BROWSER_Y  = 25;                                 // browser y()
 const int UT_BROWSER_W  = 150;                                // browser w()
Direct Link to Message ]
 
     
Previous Message ]Next Message ]
 
 

Comments are owned by the poster. All other content is copyright 1998-2024 by Bill Spitzak and others. This project is hosted by The FLTK Team. Please report site problems to 'erco@seriss.com'.