From 0d82703f8ee26730f05353f282cf3e1819bb65c5 Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Thu, 7 Apr 2022 11:47:13 -0600 Subject: [PATCH] meterbridge: track size and position via configure events This allows ::get_state() to be const. --- gtk2_ardour/meterbridge.cc | 29 +++++++++++++++-------------- gtk2_ardour/meterbridge.h | 3 ++- 2 files changed, 17 insertions(+), 15 deletions(-) diff --git a/gtk2_ardour/meterbridge.cc b/gtk2_ardour/meterbridge.cc index 9be2d7d85b..7c12527f86 100644 --- a/gtk2_ardour/meterbridge.cc +++ b/gtk2_ardour/meterbridge.cc @@ -244,19 +244,10 @@ Meterbridge::set_window_pos_and_size () } } -void -Meterbridge::get_window_pos_and_size () const -{ -#warning CONSTIFICATION this really needs to work some other way, since this supposed to be const - get_position(m_root_x, m_root_y); - get_size(m_width, m_height); -} - bool Meterbridge::hide_window (GdkEventAny *ev) { if (!_visible) return 0; - get_window_pos_and_size(); _visible = false; return just_hide_it(ev, static_cast(this)); } @@ -495,11 +486,6 @@ XMLNode& Meterbridge::get_state () const { XMLNode* node = new XMLNode ("Meterbridge"); - - if (is_realized() && _visible) { - get_window_pos_and_size (); - } - XMLNode* geometry = new XMLNode ("geometry"); geometry->set_property(X_("x-size"), m_width); geometry->set_property(X_("y-size"), m_height); @@ -774,3 +760,18 @@ Meterbridge::on_theme_changed () { meter_clear_pattern_cache(); } + +bool +Meterbridge::on_configure_event (GdkEventConfigure* conf) +{ + bool ret = Gtk::Window::on_configure_event (conf); + + Glib::RefPtr win = get_window(); + + if (win) { + win->get_size (m_width, m_height); + win->get_position (m_root_x, m_root_y); + } + + return ret; +} diff --git a/gtk2_ardour/meterbridge.h b/gtk2_ardour/meterbridge.h index a98bf2ddcc..3b1254146f 100644 --- a/gtk2_ardour/meterbridge.h +++ b/gtk2_ardour/meterbridge.h @@ -133,7 +133,6 @@ private: mutable int m_root_x, m_root_y, m_width, m_height; void set_window_pos_and_size (); - void get_window_pos_and_size () const; bool on_key_press_event (GdkEventKey*); bool on_key_release_event (GdkEventKey*); @@ -153,6 +152,8 @@ private: int _mm_left, _mm_right; ARDOUR::MeterType _mt_left, _mt_right; + + bool on_configure_event (GdkEventConfigure* conf); }; #endif