From 16ed24597734a952ed65432a4115fe8d5e841952 Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Wed, 20 Mar 2024 06:48:26 -0600 Subject: [PATCH] allow true boxy buttons for ArdourButtons Also add a default tweaks static member to force all buttons to a given tweak state --- libs/widgets/ardour_button.cc | 40 +++++++++++++++------------- libs/widgets/widgets/ardour_button.h | 3 +++ 2 files changed, 25 insertions(+), 18 deletions(-) diff --git a/libs/widgets/ardour_button.cc b/libs/widgets/ardour_button.cc index 6bace1247e..b965e56325 100644 --- a/libs/widgets/ardour_button.cc +++ b/libs/widgets/ardour_button.cc @@ -53,6 +53,7 @@ using namespace std; ArdourButton::Element ArdourButton::default_elements = ArdourButton::Element (ArdourButton::Edge|ArdourButton::Body|ArdourButton::Text); ArdourButton::Element ArdourButton::led_default_elements = ArdourButton::Element (ArdourButton::default_elements|ArdourButton::Indicator); ArdourButton::Element ArdourButton::just_led_default_elements = ArdourButton::Element (ArdourButton::Edge|ArdourButton::Body|ArdourButton::Indicator); +ArdourButton::Tweaks ArdourButton::default_tweaks = ArdourButton::Tweaks (0); ArdourButton::ArdourButton (Element e, bool toggle) : _markup (false) @@ -60,7 +61,7 @@ ArdourButton::ArdourButton (Element e, bool toggle) , _icon (ArdourIcon::NoIcon) , _icon_render_cb (0) , _icon_render_cb_data (0) - , _tweaks (Tweaks (0)) + , _tweaks (default_tweaks) , _char_pixel_width (0) , _char_pixel_height (0) , _char_avg_pixel_width (0) @@ -108,7 +109,7 @@ ArdourButton::ArdourButton (const std::string& str, Element e, bool toggle) : _markup (false) , _elements (e) , _icon (ArdourIcon::NoIcon) - , _tweaks (Tweaks (0)) + , _tweaks (default_tweaks) , _char_pixel_width (0) , _char_pixel_height (0) , _char_avg_pixel_width (0) @@ -300,22 +301,25 @@ ArdourButton::render (Cairo::RefPtr const& ctx, cairo_rectangle_ } void (*rounded_function)(cairo_t*, double, double, double, double, double); - - switch (_corner_mask) { - case 0x1: /* upper left only */ - rounded_function = Gtkmm2ext::rounded_top_left_rectangle; - break; - case 0x2: /* upper right only */ - rounded_function = Gtkmm2ext::rounded_top_right_rectangle; - break; - case 0x3: /* upper only */ - rounded_function = Gtkmm2ext::rounded_top_rectangle; - break; - /* should really have functions for lower right, lower left, - lower only, but for now, we don't - */ - default: - rounded_function = Gtkmm2ext::rounded_rectangle; + if (corner_radius) { + switch (_corner_mask) { + case 0x1: /* upper left only */ + rounded_function = Gtkmm2ext::rounded_top_left_rectangle; + break; + case 0x2: /* upper right only */ + rounded_function = Gtkmm2ext::rounded_top_right_rectangle; + break; + case 0x3: /* upper only */ + rounded_function = Gtkmm2ext::rounded_top_rectangle; + break; + /* should really have functions for lower right, lower left, + lower only, but for now, we don't + */ + default: + rounded_function = Gtkmm2ext::rounded_rectangle; + } + } else { + rounded_function = Gtkmm2ext::rectangle; } // draw edge (filling a rect underneath, rather than stroking a border on top, allows the corners to be lighter-weight. diff --git a/libs/widgets/widgets/ardour_button.h b/libs/widgets/widgets/ardour_button.h index 593a801939..ad998ebe6c 100644 --- a/libs/widgets/widgets/ardour_button.h +++ b/libs/widgets/widgets/ardour_button.h @@ -69,6 +69,9 @@ class LIBWIDGETS_API ArdourButton : public CairoWidget , public Gtkmm2ext::Activ ForceFlat = 0x20, }; + static Tweaks default_tweaks; + static void set_default_tweaks (Tweaks t) { default_tweaks = t; } + Tweaks tweaks() const { return _tweaks; } void set_tweaks (Tweaks);