From b16309f13e732e566c1beb4a02a2165ebb3ab4ab Mon Sep 17 00:00:00 2001 From: Matthias Melcher Date: Thu, 24 Nov 2022 12:47:49 +0100 Subject: Refactor code to make rounded rectangles accessible (#553) This adds fl_rounded_rect and fl_rounded_rectf so the user can draw rounded rectangles. This uses existing and optimised code that is rearranged. --- FL/Fl_Graphics_Driver.H | 3 +++ FL/fl_draw.H | 17 +++++++++++++++++ 2 files changed, 20 insertions(+) (limited to 'FL') diff --git a/FL/Fl_Graphics_Driver.H b/FL/Fl_Graphics_Driver.H index 5de983554..0f25756d6 100644 --- a/FL/Fl_Graphics_Driver.H +++ b/FL/Fl_Graphics_Driver.H @@ -264,6 +264,9 @@ public: virtual void rect(int x, int y, int w, int h); virtual void focus_rect(int x, int y, int w, int h); virtual void rectf(int x, int y, int w, int h); + virtual void _rbox(int fill, int x, int y, int w, int h, int r); + virtual void rounded_rect(int x, int y, int w, int h, int r); + virtual void rounded_rectf(int x, int y, int w, int h, int r); // the default implementation is most likely enough virtual void colored_rectf(int x, int y, int w, int h, uchar r, uchar g, uchar b); virtual void line(int x, int y, int x1, int y1); diff --git a/FL/fl_draw.H b/FL/fl_draw.H index 359405b7d..fc3e401ca 100644 --- a/FL/fl_draw.H +++ b/FL/fl_draw.H @@ -290,6 +290,15 @@ inline void fl_rect(int x, int y, int w, int h) { fl_graphics_driver->rect(x, y, w, h); } +/** + Draw a 1-pixel rounded border \e inside the given bounding box. + The radius code is optimized for speed and works best for values between + 5 and 15 units. + */ +inline void fl_rounded_rect(int x, int y, int w, int h, int r) { + fl_graphics_driver->rounded_rect(x, y, w, h, r); +} + /** Draw a 1-pixel border \e inside the given bounding box. This is the same as fl_rect(int x, int y, int w, int h) but with @@ -320,6 +329,14 @@ inline void fl_rectf(int x, int y, int w, int h) { fl_graphics_driver->rectf(x, y, w, h); } +/** Color with current color a rounded rectangle that exactly fills the given bounding box. + The radius code is optimized for speed and works best for values between + 5 and 15 units. +*/ +inline void fl_rounded_rectf(int x, int y, int w, int h, int r) { + fl_graphics_driver->rounded_rectf(x, y, w, h, r); +} + /** Color with passed color a rectangle that exactly fills the given bounding box. */ inline void fl_rectf(int x, int y, int w, int h, Fl_Color c) { fl_color(c); -- cgit v1.2.3