From ccf3addf5a63cee5090b0e23a0408a4d7db45124 Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Tue, 10 Jun 2025 20:27:41 +0200 Subject: [PATCH] Add spacer widget to maintain size with GUI scaling This is intended for the (Mixbus) Group Bar --- libs/widgets/ardour_spacer.cc | 8 ++++++++ libs/widgets/widgets/ardour_spacer.h | 23 +++++++++++++++++++++++ 2 files changed, 31 insertions(+) diff --git a/libs/widgets/ardour_spacer.cc b/libs/widgets/ardour_spacer.cc index ad5406a05b..6058c89646 100644 --- a/libs/widgets/ardour_spacer.cc +++ b/libs/widgets/ardour_spacer.cc @@ -21,6 +21,14 @@ using namespace ArdourWidgets; +ArdourScalingSpacer::ArdourScalingSpacer (int natural_width, int natural_height) + : CairoWidget () + , _natural_width (natural_width) + , _natural_height (natural_height) +{ +} + + ArdourVSpacer::ArdourVSpacer (float r) : CairoWidget () , ratio (r) diff --git a/libs/widgets/widgets/ardour_spacer.h b/libs/widgets/widgets/ardour_spacer.h index 4b2f8b1f2a..7d078c6e97 100644 --- a/libs/widgets/widgets/ardour_spacer.h +++ b/libs/widgets/widgets/ardour_spacer.h @@ -29,6 +29,29 @@ namespace ArdourWidgets { +class LIBWIDGETS_API ArdourScalingSpacer : public CairoWidget +{ +public: + ArdourScalingSpacer (int natural_width = 16, int natural_height = 16); + +protected: + void render (Cairo::RefPtr const& ctx, cairo_rectangle_t*) {} + + void on_size_request (Gtk::Requisition* req) { + if (_natural_width > 0) { + req->width = _natural_width * UIConfigurationBase::instance().get_ui_scale (); + } + if (_natural_height > 0) { + req->height = _natural_height * UIConfigurationBase::instance().get_ui_scale (); + } + CairoWidget::on_size_request (req); + } + +private: + int _natural_width; + int _natural_height; +}; + class LIBWIDGETS_API ArdourVSpacer : public CairoWidget { public: