summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gtk2_ardour/editor.cc12
-rw-r--r--gtk2_ardour/mixer_strip.cc37
-rw-r--r--gtk2_ardour/route_ui.cc4
-rw-r--r--libs/gtkmm2ext/gtkmm2ext/utils.h11
-rw-r--r--libs/gtkmm2ext/utils.cc61
5 files changed, 115 insertions, 10 deletions
diff --git a/gtk2_ardour/editor.cc b/gtk2_ardour/editor.cc
index 7a864b8283..692f4efff0 100644
--- a/gtk2_ardour/editor.cc
+++ b/gtk2_ardour/editor.cc
@@ -219,6 +219,8 @@ static const gchar *_rb_opt_strings[] = {
};
#endif
+static const gchar *_combo_pad_string = "mm"; ///< ~2em
+
static void
pane_size_watcher (Paned* pane)
{
@@ -3063,7 +3065,7 @@ Editor::build_edit_point_menu ()
edit_point_selector.AddMenuElem (MenuElem ( edit_point_strings[(int)EditAtSelectedMarker], sigc::bind (sigc::mem_fun(*this, &Editor::edit_point_selection_done), (EditPoint) EditAtSelectedMarker)));
edit_point_selector.AddMenuElem (MenuElem ( edit_point_strings[(int)EditAtMouse], sigc::bind (sigc::mem_fun(*this, &Editor::edit_point_selection_done), (EditPoint) EditAtMouse)));
- set_size_request_to_display_given_text (edit_point_selector, edit_point_strings, 30, 2);
+ set_size_request_to_display_given_text (edit_point_selector, edit_point_strings, _combo_pad_string, 2);
}
void
@@ -3076,7 +3078,7 @@ Editor::build_edit_mode_menu ()
edit_mode_selector.AddMenuElem (MenuElem ( edit_mode_strings[(int)Ripple], sigc::bind (sigc::mem_fun(*this, &Editor::edit_mode_selection_done), (EditMode) Ripple)));
edit_mode_selector.AddMenuElem (MenuElem ( edit_mode_strings[(int)Lock], sigc::bind (sigc::mem_fun(*this, &Editor::edit_mode_selection_done), (EditMode) Lock)));
- set_size_request_to_display_given_text (edit_mode_selector, edit_mode_strings, 30, 2);
+ set_size_request_to_display_given_text (edit_mode_selector, edit_mode_strings, _combo_pad_string, 2);
}
void
@@ -3088,7 +3090,7 @@ Editor::build_snap_mode_menu ()
snap_mode_selector.AddMenuElem (MenuElem ( snap_mode_strings[(int)SnapNormal], sigc::bind (sigc::mem_fun(*this, &Editor::snap_mode_selection_done), (SnapMode) SnapNormal)));
snap_mode_selector.AddMenuElem (MenuElem ( snap_mode_strings[(int)SnapMagnetic], sigc::bind (sigc::mem_fun(*this, &Editor::snap_mode_selection_done), (SnapMode) SnapMagnetic)));
- set_size_request_to_display_given_text (snap_mode_selector, snap_mode_strings, 30, 2);
+ set_size_request_to_display_given_text (snap_mode_selector, snap_mode_strings, _combo_pad_string, 2);
}
void
@@ -3127,7 +3129,7 @@ Editor::build_snap_type_menu ()
snap_type_selector.AddMenuElem (MenuElem ( snap_type_strings[(int)SnapToRegionSync], sigc::bind (sigc::mem_fun(*this, &Editor::snap_type_selection_done), (SnapType) SnapToRegionSync)));
snap_type_selector.AddMenuElem (MenuElem ( snap_type_strings[(int)SnapToRegionBoundary], sigc::bind (sigc::mem_fun(*this, &Editor::snap_type_selection_done), (SnapType) SnapToRegionBoundary)));
- set_size_request_to_display_given_text (snap_type_selector, snap_type_strings, 30, 2);
+ set_size_request_to_display_given_text (snap_type_selector, snap_type_strings, _combo_pad_string, 2);
}
@@ -3473,7 +3475,7 @@ Editor::build_zoom_focus_menu ()
zoom_focus_selector.AddMenuElem (MenuElem ( zoom_focus_strings[(int)ZoomFocusMouse], sigc::bind (sigc::mem_fun(*this, &Editor::zoom_focus_selection_done), (ZoomFocus) ZoomFocusMouse)));
zoom_focus_selector.AddMenuElem (MenuElem ( zoom_focus_strings[(int)ZoomFocusEdit], sigc::bind (sigc::mem_fun(*this, &Editor::zoom_focus_selection_done), (ZoomFocus) ZoomFocusEdit)));
- set_size_request_to_display_given_text (zoom_focus_selector, longest (zoom_focus_strings), 30, 2);
+ set_size_request_to_display_given_text (zoom_focus_selector, zoom_focus_strings, _combo_pad_string, 2);
}
void
diff --git a/gtk2_ardour/mixer_strip.cc b/gtk2_ardour/mixer_strip.cc
index 7b91611cb0..ae2a1bef3b 100644
--- a/gtk2_ardour/mixer_strip.cc
+++ b/gtk2_ardour/mixer_strip.cc
@@ -80,6 +80,8 @@ MixerStrip* MixerStrip::_entered_mixer_strip;
PBD::Signal1<void,MixerStrip*> MixerStrip::CatchDeletion;
+static const int _button_vpad = 2;
+
MixerStrip::MixerStrip (Mixer_UI& mx, Session* sess, bool in_mixer)
: AxisView(sess)
, RouteUI (sess)
@@ -167,10 +169,12 @@ MixerStrip::init ()
input_button.set_name ("mixer strip button");
input_button.set_size_request (-1, 20);
input_button_box.pack_start (input_button, true, true);
+ Gtkmm2ext::set_height_request_to_display_any_text (input_button, _button_vpad);
output_button.set_text (_("Output"));
output_button.set_name ("mixer strip button");
Gtkmm2ext::set_size_request_to_display_given_text (output_button, longest_label.c_str(), 4, 4);
+ Gtkmm2ext::set_height_request_to_display_any_text (output_button, _button_vpad);
ARDOUR_UI::instance()->set_tip (&meter_point_button, _("Click to select metering point"), "");
meter_point_button.set_name ("mixer strip button");
@@ -178,7 +182,7 @@ MixerStrip::init ()
/* TRANSLATORS: this string should be longest of the strings
used to describe meter points. In english, it's "input".
*/
- set_size_request_to_display_given_text (meter_point_button, _("tupni"), 5, 5);
+ set_size_request_to_display_given_text_width (meter_point_button, _("tupni"), 2, _button_vpad);
bottom_button_table.attach (meter_point_button, 2, 3, 0, 1);
@@ -276,15 +280,16 @@ MixerStrip::init ()
name_button.set_text (""); /* back to empty */
name_button.layout()->set_ellipsize (Pango::ELLIPSIZE_END);
name_button.signal_size_allocate().connect (sigc::mem_fun (*this, &MixerStrip::name_button_resized));
- Gtkmm2ext::set_size_request_to_display_given_text (name_button, longest_label.c_str(), 2, 2);
name_button.set_size_request (-1, 20);
+ Gtkmm2ext::set_height_request_to_display_any_text (name_button, _button_vpad);
ARDOUR_UI::instance()->set_tip (&group_button, _("Mix group"), "");
group_button.set_name ("mixer strip button");
- Gtkmm2ext::set_size_request_to_display_given_text (group_button, "Grp", 2, 2);
+ Gtkmm2ext::set_size_request_to_display_given_text_width (group_button, "Grp", 2, _button_vpad);
_comment_button.set_name (X_("mixer strip button"));
_comment_button.signal_clicked.connect (sigc::mem_fun (*this, &RouteUI::toggle_comment_editor));
+ Gtkmm2ext::set_size_request_to_display_given_text_width (_comment_button, "Cmt", 2, _button_vpad);
global_vpacker.set_border_width (0);
global_vpacker.set_spacing (0);
@@ -733,7 +738,7 @@ MixerStrip::set_width_enum (Width w, void* owner)
}
- Gtkmm2ext::set_size_request_to_display_given_text (name_button, longest_label.c_str(), 2, 2);
+ Gtkmm2ext::set_size_request_to_display_given_text_width (name_button, longest_label.c_str(), 2, _button_vpad);
set_size_request (-1, -1);
break;
@@ -756,7 +761,7 @@ MixerStrip::set_width_enum (Width w, void* owner)
panners.short_astate_string(_route->panner()->automation_state()));
}
- Gtkmm2ext::set_size_request_to_display_given_text (name_button, "long", 2, 2);
+ Gtkmm2ext::set_size_request_to_display_given_text_width (name_button, "long", 2, _button_vpad);
set_size_request (max (50, gpm.get_gm_width()), -1);
break;
}
@@ -1438,6 +1443,9 @@ MixerStrip::setup_comment_button ()
ARDOUR_UI::instance()->set_tip (
_comment_button, _route->comment().empty() ? _("Click to Add/Edit Comments") : _route->comment()
);
+
+ Gtkmm2ext::set_size_request_to_display_given_text_width (
+ _comment_button, _comment_button.get_text().c_str(), 2, _button_vpad);
}
bool
@@ -1638,6 +1646,9 @@ MixerStrip::name_changed ()
break;
}
+ Gtkmm2ext::set_size_request_to_display_given_text_width (
+ name_button, name_button.get_text().c_str(), 2, _button_vpad);
+
ARDOUR_UI::instance()->set_tip (name_button, _route->name());
}
@@ -2043,6 +2054,22 @@ MixerStrip::set_button_names ()
} else {
meter_point_button.set_text ("");
}
+
+ // Update size request of changed buttons
+ Gtkmm2ext::set_size_request_to_display_given_text_width (
+ *rec_enable_button, rec_enable_button->get_text().c_str(), 2, _button_vpad);
+ Gtkmm2ext::set_size_request_to_display_given_text_width (
+ *mute_button, mute_button->get_text().c_str(), 2, _button_vpad);
+ Gtkmm2ext::set_size_request_to_display_given_text_width (
+ *monitor_input_button, monitor_input_button->get_text().c_str(), 2, _button_vpad);
+ Gtkmm2ext::set_size_request_to_display_given_text_width (
+ *monitor_disk_button, monitor_disk_button->get_text().c_str(), 2, _button_vpad);
+ Gtkmm2ext::set_size_request_to_display_given_text_width (
+ *solo_button, solo_button->get_text().c_str(), 2, _button_vpad);
+ Gtkmm2ext::set_size_request_to_display_given_text_width (
+ *solo_isolated_led, solo_isolated_led->get_text().c_str(), 2, _button_vpad);
+ Gtkmm2ext::set_size_request_to_display_given_text_width (
+ *solo_safe_led, solo_safe_led->get_text().c_str(), 2, _button_vpad);
}
PluginSelector*
diff --git a/gtk2_ardour/route_ui.cc b/gtk2_ardour/route_ui.cc
index 0de1f81dac..3998ea3717 100644
--- a/gtk2_ardour/route_ui.cc
+++ b/gtk2_ardour/route_ui.cc
@@ -23,6 +23,7 @@
#include <gtkmm2ext/bindable_button.h>
#include <gtkmm2ext/barcontroller.h>
#include <gtkmm2ext/gtk_ui.h>
+#include <gtkmm2ext/utils.h>
#include "ardour/route_group.h"
#include "ardour/dB.h"
@@ -65,6 +66,8 @@ uint32_t RouteUI::_max_invert_buttons = 3;
PBD::Signal1<void, boost::shared_ptr<Route> > RouteUI::BusSendDisplayChanged;
boost::weak_ptr<Route> RouteUI::_showing_sends_to;
+static const int _button_vpad = 2;
+
RouteUI::RouteUI (ARDOUR::Session* sess)
: AxisView(sess)
, mute_menu(0)
@@ -1935,6 +1938,7 @@ RouteUI::setup_invert_buttons ()
for (uint32_t i = 0; i < to_add; ++i) {
ArdourButton* b = manage (new ArdourButton);
b->set_size_request(20,20);
+ Gtkmm2ext::set_height_request_to_display_any_text (*b, _button_vpad);
b->signal_button_press_event().connect (sigc::mem_fun (*this, &RouteUI::invert_press));
b->signal_button_release_event().connect (sigc::bind (sigc::mem_fun (*this, &RouteUI::invert_release), i));
diff --git a/libs/gtkmm2ext/gtkmm2ext/utils.h b/libs/gtkmm2ext/gtkmm2ext/utils.h
index bad9ca75d6..799d3970c2 100644
--- a/libs/gtkmm2ext/gtkmm2ext/utils.h
+++ b/libs/gtkmm2ext/gtkmm2ext/utils.h
@@ -65,6 +65,13 @@ namespace Gtkmm2ext {
gint hpadding,
gint vpadding);
+ LIBGTKMM2EXT_API void set_size_request_to_display_given_text_width (Gtk::Widget& w,
+ const gchar* htext,
+ gint hpadding,
+ gint vpadding);
+
+ LIBGTKMM2EXT_API void set_height_request_to_display_any_text (Gtk::Widget& w, gint vpadding);
+
LIBGTKMM2EXT_API void set_size_request_to_display_given_text (Gtk::Widget &w,
std::string const & text,
gint hpadding,
@@ -73,6 +80,10 @@ namespace Gtkmm2ext {
const std::vector<std::string>&,
gint hpadding,
gint vpadding);
+ LIBGTKMM2EXT_API void set_size_request_to_display_given_text (Gtk::Widget &w,
+ const std::vector<std::string>&,
+ const std::string& hpadding,
+ gint vpadding);
LIBGTKMM2EXT_API Glib::RefPtr<Gdk::Pixbuf> pixbuf_from_string (const std::string& name,
diff --git a/libs/gtkmm2ext/utils.cc b/libs/gtkmm2ext/utils.cc
index 37ed4ba66b..f3c5b6795f 100644
--- a/libs/gtkmm2ext/utils.cc
+++ b/libs/gtkmm2ext/utils.cc
@@ -76,6 +76,40 @@ Gtkmm2ext::set_size_request_to_display_given_text (Gtk::Widget &w, const gchar *
w.set_size_request(width + hpadding, height + vpadding);
}
+/** Set width request to display given text, and height to display anything.
+ This is useful for setting many widgets to the same height for consistency. */
+void
+Gtkmm2ext::set_size_request_to_display_given_text_width (Gtk::Widget& w,
+ const gchar* htext,
+ gint hpadding,
+ gint vpadding)
+{
+ static const gchar* vtext = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
+
+ w.ensure_style ();
+
+ int hwidth, hheight;
+ get_pixel_size (w.create_pango_layout (htext), hwidth, hheight);
+
+ int vwidth, vheight;
+ get_pixel_size (w.create_pango_layout (vtext), vwidth, vheight);
+
+ w.set_size_request(hwidth + hpadding, vheight + vpadding);
+}
+
+void
+Gtkmm2ext::set_height_request_to_display_any_text (Gtk::Widget& w, gint vpadding)
+{
+ static const gchar* vtext = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
+
+ w.ensure_style ();
+
+ int width, height;
+ get_pixel_size (w.create_pango_layout (vtext), width, height);
+
+ w.set_size_request(-1, height + vpadding);
+}
+
void
Gtkmm2ext::set_size_request_to_display_given_text (Gtk::Widget &w, std::string const & text,
gint hpadding, gint vpadding)
@@ -125,6 +159,33 @@ Gtkmm2ext::set_size_request_to_display_given_text (Gtk::Widget &w,
w.set_size_request(width_max + hpadding, height_max + vpadding);
}
+/** This version specifies horizontal padding in text to avoid assumptions
+ about font size. Should be used anywhere padding is used to avoid text,
+ like combo boxes. */
+void
+Gtkmm2ext::set_size_request_to_display_given_text (Gtk::Widget& w,
+ const std::vector<std::string>& strings,
+ const std::string& hpadding,
+ gint vpadding)
+{
+ int width_max = 0;
+ int height_max = 0;
+ w.ensure_style ();
+
+ for (vector<string>::const_iterator i = strings.begin(); i != strings.end(); ++i) {
+ int width, height;
+ get_pixel_size (w.create_pango_layout (*i), width, height);
+ width_max = max(width_max,width);
+ height_max = max(height_max, height);
+ }
+
+ int pad_width;
+ int pad_height;
+ get_pixel_size (w.create_pango_layout (hpadding), pad_width, pad_height);
+
+ w.set_size_request(width_max + pad_width, height_max + vpadding);
+}
+
static inline guint8
demultiply_alpha (guint8 src,
guint8 alpha)