FLTK logo

[master] fa6d95a - Enhance Fl_Rect: add inset() and new constructor

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] fa6d95a - Enhance Fl_Rect: add inset() and new constructor "Albrecht Schlosser" Nov 22, 2022  
 
commit fa6d95a7932e4192671b5d1ca294131380e08374
Author:     Albrecht Schlosser <albrechts.fltk@online.de>
AuthorDate: Sat Jan 22 18:36:58 2022 +0100
Commit:     Albrecht Schlosser <albrechts.fltk@online.de>
CommitDate: Tue Nov 22 19:01:39 2022 +0100

    Enhance Fl_Rect: add inset() and new constructor
    
    These new features can be used by widgets that draw inside a rectangle
    taking the border width into account.

 FL/Fl_Rect.H | 50 +++++++++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 49 insertions(+), 1 deletion(-)

diff --git FL/Fl_Rect.H FL/Fl_Rect.H
index 32ce01f..a73a0e7 100644
--- FL/Fl_Rect.H
+++ FL/Fl_Rect.H
@@ -1,7 +1,7 @@
 //
 // Fl_Rect header file for the Fast Light Tool Kit (FLTK).
 //
-// Copyright 1998-2018 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
@@ -50,6 +50,17 @@ public:
   Fl_Rect(int X, int Y, int W, int H)
           : x_(X), y_(Y), w_(W), h_(H) {}
 
+  /** This constructor creates a rectangle with the given x,y coordinates
+    and the given width and height reduced by the box frame size.
+
+    This is the same as using the constructor w/o \p bt and subsequently
+    calling inset(\p bt).
+  */
+  Fl_Rect(int X, int Y, int W, int H, Fl_Boxtype bt)
+          : x_(X), y_(Y), w_(W), h_(H) {
+    inset(bt);
+  }
+
   /** This constructor creates a rectangle based on a widget's position and size. */
   Fl_Rect (const Fl_Widget& widget)
           : x_(widget.x()), y_(widget.y()), w_(widget.w()), h_(widget.h()) {}
@@ -77,6 +88,43 @@ public:
   void w(int W) { w_ = W; }             ///< sets the width
   void h(int H) { h_ = H; }             ///< sets the height
 
+  /** Move all edges in by \p d.
+
+    Shrinks the rectangle by \p d at all sides keeping the center of the
+    rectangle at the same spot.
+
+    If \p d is negative, the rectangle is enlarged.
+
+    If \p d \>= w() or h() the result is undefined, i.e. an
+    invalid or empty rectangle.
+  */
+  void inset(int d) {
+    x_ += d;
+    y_ += d;
+    w_ -= 2 * d;
+    h_ -= 2 * d;
+  }
+
+  /** Move all edges in by the frame size of box type \p bt.
+
+    Shrinks the rectangle at all sides by the frame width or height of the
+    given box type \p bt.
+
+    This method uses the frame sizes given by the box type \p bt using
+    - Fl::box_dx(bt)
+    - Fl::box_dy(bt)
+    - Fl::box_dw(bt)
+    - Fl::box_dh(bt)
+
+    If the rectangle is smaller than the frame sizes the result is undefined,
+    i.e. an invalid or empty rectangle.
+  */
+  void inset(Fl_Boxtype bt) {
+    x_ += Fl::box_dx(bt);
+    y_ += Fl::box_dy(bt);
+    w_ -= Fl::box_dw(bt);
+    h_ -= Fl::box_dh(bt);
+  }
 }; // class Fl_Rect
 
 #endif // Fl_Rect_H
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'.