From b65d3a249d4db1ada6d0bc96031e55459e0d6381 Mon Sep 17 00:00:00 2001 From: Albrecht Schlosser Date: Tue, 1 Sep 2020 12:33:11 +0200 Subject: [PATCH] Customize corner radius for rounded box/frame (#130) Make maximum box corner radius and shadow width configurable. See Fl::box_border_radius_max() and Fl::box_shadow_width(). Documentation: update image of box types. Fixes #130 --- CHANGES.txt | 3 +++ FL/Fl.H | 30 ++++++++++++++++++++++++++++++ documentation/src/boxtypes.png | Bin 6758 -> 17302 bytes src/fl_boxtype.cxx | 5 ++++- src/fl_oval_box.cxx | 10 +++++++--- src/fl_rounded_box.cxx | 10 +++++----- src/fl_shadow_box.cxx | 5 ++++- test/boxtype.cxx | 6 +++++- 8 files changed, 58 insertions(+), 11 deletions(-) diff --git a/CHANGES.txt b/CHANGES.txt index 97f0a2828..f25859da1 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -18,6 +18,9 @@ Changes in FLTK 1.4.0 Released: ??? ?? 2020 New Features and Extensions - (add new items here) + - The border radius of "rounded" box types can be limited and + the shadow width of "shadow" box types can be configured (issue #130). + See Fl::box_border_radius_max() and Fl::box_shadow_width(). - New classes Fl_SVG_File_Surface and Fl_EPS_File_Surface to save any FLTK graphics to SVG or EPS files, respectively. - New fl_putenv() is a cross-platform putenv() wrapper (see docs). diff --git a/FL/Fl.H b/FL/Fl.H index 4221d9588..fae394012 100644 --- a/FL/Fl.H +++ b/FL/Fl.H @@ -133,6 +133,8 @@ private: static int use_high_res_GL_; static int draw_GL_text_with_textures_; + static int box_shadow_width_; + static int box_border_radius_max_; public: @@ -141,6 +143,34 @@ public: static void reset_marked_text(); // resets marked text static void insertion_point_location(int x, int y, int height); // sets window coordinates & height of insertion point + /** Get the box shadow width of all "shadow" boxtypes in pixels. + \since 1.4.0 + */ + static int box_shadow_width() { return box_shadow_width_; } + /** Set the box shadow width of all "shadow" boxtypes in pixels. + Must be at least 1, default = 3. There is no upper limit. + \since 1.4.0 + */ + static void box_shadow_width(int W) { box_shadow_width_ = W < 1 ? 1 : W; } + + /** Get the maximum border radius of all "rounded" boxtypes in pixels. + \since 1.4.0 + */ + static int box_border_radius_max() { return box_border_radius_max_; } + /** Set the maximum border radius of all "rounded" boxtypes in pixels. + Must be at least 5, default = 15. + + \note This does \b not apply to the "round" boxtypes which have really round sides + (i.e. composed of half circles) as opposed to "rounded" boxtypes that have only + rounded corners with a straight border between corners. + + The box border radius of "rounded" boxtypes is typically calculated as about 2/5 of + the box height or width, whichever is smaller. The upper limit can be set by this + method for all "rounded" boxtypes. + \since 1.4.0 + */ + static void box_border_radius_max(int R) { box_border_radius_max_ = R < 5 ? 5 : R; } + public: // run time information about compile time configuration /** \defgroup cfg_gfx runtime graphics driver configuration */ /** @{ */ diff --git a/documentation/src/boxtypes.png b/documentation/src/boxtypes.png index a64ccaaee0619c7dc9a3f58ec13c0216a9c8e3ae..8708f14c1b0491213e0f9a0e81904aa3d43a4552 100644 GIT binary patch literal 17302 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 BL-+sy literal 6758 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 #include +// Global parameters for box drawing algorithm: +// +// BW = box shadow width +#define BW (Fl::box_shadow_width()) + static void fl_oval_flat_box(int x, int y, int w, int h, Fl_Color c) { Fl::set_box_color(c); fl_pie(x, y, w, h, 0, 360); @@ -37,7 +41,7 @@ static void fl_oval_box(int x, int y, int w, int h, Fl_Color c) { } static void fl_oval_shadow_box(int x, int y, int w, int h, Fl_Color c) { - fl_oval_flat_box(x+3,y+3,w,h,FL_DARK3); + fl_oval_flat_box(x+BW,y+BW,w,h,FL_DARK3); fl_oval_box(x,y,w,h,c); } diff --git a/src/fl_rounded_box.cxx b/src/fl_rounded_box.cxx index 4c1eb6aae..df41b4f6e 100644 --- a/src/fl_rounded_box.cxx +++ b/src/fl_rounded_box.cxx @@ -1,7 +1,7 @@ // // Rounded box drawing routines for the Fast Light Tool Kit (FLTK). // -// Copyright 1998-2016 by Bill Spitzak and others. +// Copyright 1998-2020 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 @@ -17,15 +17,15 @@ #include #include -// Constants for rounded corner drawing algorithm: +// Global parameters for rounded corner drawing algorithm: // // RN = number of segments per corner (must match offset array size) // RS = max. corner radius // BW = box shadow width -#define RN 5 -#define RS 15 -#define BW 3 +#define RN 5 +#define RS (Fl::box_border_radius_max()) +#define BW (Fl::box_shadow_width()) static double offset[RN] = { 0.0, 0.07612, 0.29289, 0.61732, 1.0}; diff --git a/src/fl_shadow_box.cxx b/src/fl_shadow_box.cxx index 1084da3a4..d89d09b68 100644 --- a/src/fl_shadow_box.cxx +++ b/src/fl_shadow_box.cxx @@ -17,7 +17,10 @@ #include #include -#define BW 3 +// Global parameters for box drawing algorithm: +// +// BW = box shadow width +#define BW (Fl::box_shadow_width()) static void fl_shadow_frame(int x, int y, int w, int h, Fl_Color c) { fl_color(FL_DARK3); diff --git a/test/boxtype.cxx b/test/boxtype.cxx index 8bcd1b0ed..9f67f0784 100644 --- a/test/boxtype.cxx +++ b/test/boxtype.cxx @@ -103,9 +103,13 @@ int main(int argc, char ** argv) { #else // this code uses the nice bright blue background to show box vs. frame types Fl::args(argc, argv); Fl::get_system_colors(); - window->color(12);// light blue + window->color(fl_rgb_color(51, 173, 255)); // light blue (#33adff) #endif + // TEST: set box shadow width and max. border radius (should be commented out) + // Fl::box_border_radius_max(5); // default: 15 (see documentation) + // Fl::box_shadow_width(6); // default: 3 (see documentation) + // set window title to show active scheme Fl::scheme(Fl::scheme()); // init scheme char title[100];