FLTK logo

[master] 81d07af - Fluid: convert Fl_Group::forms_end() to a static function

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] 81d07af - Fluid: convert Fl_Group::forms_end() to a static function "Albrecht Schlosser" Dec 13, 2021  
 
commit 81d07af93a4ace78c0c6abfd912fc0a509dbfcec
Author:     Albrecht Schlosser <albrechts.fltk@online.de>
AuthorDate: Mon Dec 13 21:55:03 2021 +0100
Commit:     Albrecht Schlosser <albrechts.fltk@online.de>
CommitDate: Mon Dec 13 21:55:03 2021 +0100

    Fluid: convert Fl_Group::forms_end() to a static function
    
    ... just in case we disable forms compatibility in the future and
    remove Fl_Group::forms_end().
    
    Also: improve doxygen docs, fix some typos.

 fluid/Shortcut_Button.cxx |  2 ++
 fluid/file.cxx            | 64 +++++++++++++++++++++++++++--------------------
 2 files changed, 39 insertions(+), 27 deletions(-)

diff --git fluid/Shortcut_Button.cxx fluid/Shortcut_Button.cxx
index 4d8665b..b22d385 100644
--- fluid/Shortcut_Button.cxx
+++ fluid/Shortcut_Button.cxx
@@ -190,3 +190,5 @@ int Widget_Bin_Window_Button::handle(int inEvent)
   }
   return Fl_Button::handle(inEvent);
 }
+
+/// \}
diff --git fluid/file.cxx fluid/file.cxx
index 87125bd..1efbf64 100644
--- fluid/file.cxx
+++ fluid/file.cxx
@@ -6,7 +6,7 @@
 // They are somewhat similar to tcl, using matching { and }
 // to quote strings.
 //
-// Copyright 1998-2016 by Bill Spitzak and others.
+// Copyright 1998-2021 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
@@ -44,9 +44,9 @@
 /// \defgroup flfile .fl Design File Operations
 /// \{
 
-// This file contains code to read and write .fl file.
+// This file contains code to read and write .fl files.
 // TODO: there is a name confusion with routines that write to the C and Header
-// TODO: files vs. thos the write to th fl file which should be fixed.
+// TODO: files vs. those that write to the .fl file which should be fixed.
 
 static FILE *fout;
 static FILE *fin;
@@ -78,7 +78,7 @@ static int open_write(const char *s) {
 }
 
 /**
- Close the .fl desing file.
+ Close the .fl design file.
  Don't close, if data was sent to stdout.
  */
 static int close_write() {
@@ -272,7 +272,7 @@ static int buflen;
 
 /**
  A simple growing buffer.
- Oh how I wish sometimes we would upgrade to moder C++.
+ Oh how I wish sometimes we would upgrade to modern C++.
  */
 static void expand_buffer(int length) {
   if (length >= buflen) {
@@ -712,41 +712,52 @@ static const char *class_matcher[] = {
 
 
 /**
- Copied from forms_compatibility.cxx so we don't have to link to fltk_forms.
- */
-void Fl_Group::forms_end() {
-  // set the dimensions of a group to surround contents
-  if (children() && !w()) {
-    Fl_Widget*const* a = array();
+  Finish a group of widgets and optionally transform its children's coordinates.
+
+  Implements the same functionality as Fl_Group::forms_end() from the forms
+  compatibility library would have done:
+
+  - resize the group to surround its children if the group's w() == 0
+  - optionally flip the \p y coordinates of all children relative to the group's window
+  - Fl_Group::end() the group
+
+  \note Copied from forms_compatibility.cxx and modified as a static fluid
+    function so we don't have to link to fltk_forms.
+
+  \param[in]  g     the Fl_Group widget
+  \param[in]  flip  flip children's \p y coordinates if true (non-zero)
+*/
+static void forms_end(Fl_Group *g, int flip) {
+  // set the dimensions of a group to surround its contents
+  const int nc = g->children();
+  if (nc && !g->w()) {
+    Fl_Widget*const* a = g->array();
     Fl_Widget* o = *a++;
     int rx = o->x();
     int ry = o->y();
     int rw = rx+o->w();
     int rh = ry+o->h();
-    for (int i=children_-1; i--;) {
+    for (int i = nc - 1; i--;) {
       o = *a++;
       if (o->x() < rx) rx = o->x();
       if (o->y() < ry) ry = o->y();
-      if (o->x()+o->w() > rw) rw = o->x()+o->w();
-      if (o->y()+o->h() > rh) rh = o->y()+o->h();
+      if (o->x() + o->w() > rw) rw = o->x() + o->w();
+      if (o->y() + o->h() > rh) rh = o->y() + o->h();
     }
-    x(rx);
-    y(ry);
-    w(rw-rx);
-    h(rh-ry);
+    g->Fl_Widget::resize(rx, ry, rw-rx, rh-ry);
   }
   // flip all the children's coordinate systems:
-  if (fdesign_flip) {
-    Fl_Widget* o = (type()>=FL_WINDOW) ? this : window();
+  if (nc && flip) {
+    Fl_Widget* o = (g->as_window()) ? g : g->window();
     int Y = o->h();
-    Fl_Widget*const* a = array();
-    for (int i=children(); i--;) {
+    Fl_Widget*const* a = g->array();
+    for (int i = nc; i--;) {
       Fl_Widget* ow = *a++;
-      int newy = Y-ow->y()-ow->h();
-      ow->y(newy);
+      int newy = Y - ow->y() - ow->h();
+      ow->Fl_Widget::resize(ow->x(), newy, ow->w(), ow->h());
     }
   }
-  end();
+  g->end();
 }
 
 /**
@@ -788,7 +799,7 @@ void read_fdesign() {
         if (group) {
           Fl_Group* g = (Fl_Group*)(group->o);
           g->begin();
-          g->forms_end();
+          forms_end(g, fdesign_flip);
           Fl_Group::current(0);
         }
         group = widget = 0;
@@ -812,4 +823,3 @@ void read_fdesign() {
 }
 
 /// \}
-
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'.