mirror of
https://github.com/fltk/fltk.git
synced 2026-05-19 20:27:04 +08:00
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.
This commit is contained in:
+49
-1
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user