X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Fmono_panner.cc;h=c106bd958229ef15789da80b7d7e33bd89389eef;hb=14c390ed027b3ba1c48084502677d1a1287bfc05;hp=1a2b685aebd1f57362d974072cfb3d73722fc196;hpb=59631acc5f41153a294c97ab820a4b41a886e24c;p=ardour.git diff --git a/gtk2_ardour/mono_panner.cc b/gtk2_ardour/mono_panner.cc index 1a2b685aeb..c106bd9582 100644 --- a/gtk2_ardour/mono_panner.cc +++ b/gtk2_ardour/mono_panner.cc @@ -25,7 +25,6 @@ #include #include -#include "pbd/controllable.h" #include "pbd/compose.h" #include "gtkmm2ext/gui_thread.h" @@ -38,23 +37,20 @@ #include "ardour/panner.h" #include "ardour/panner_shell.h" -#include "ardour_ui.h" -#include "global_signals.h" #include "mono_panner.h" #include "mono_panner_editor.h" #include "rgb_macros.h" +#include "ui_config.h" #include "utils.h" -#include "i18n.h" +#include "pbd/i18n.h" using namespace std; using namespace Gtk; using namespace Gtkmm2ext; +using namespace ARDOUR_UI_UTILS; -static const int pos_box_size = 9; -static const int lr_box_size = 15; -static const int step_down = 10; -static const int top_step = 2; +using PBD::Controllable; MonoPanner::ColorScheme MonoPanner::colors; bool MonoPanner::have_colors = false; @@ -80,26 +76,25 @@ MonoPanner::MonoPanner (boost::shared_ptr p) if (!have_font) { Pango::FontDescription font; Pango::AttrFontDesc* font_attr; - font = Pango::FontDescription ("ArdourMono"); - font.set_weight (Pango::WEIGHT_BOLD); - font.set_size(9 * PANGO_SCALE); + font = Pango::FontDescription (UIConfiguration::instance().get_SmallBoldMonospaceFont()); font_attr = new Pango::AttrFontDesc (Pango::Attribute::create_attr_font_desc (font)); panner_font_attributes.change(*font_attr); delete font_attr; have_font = true; } - position_control->Changed.connect (connections, invalidator(*this), boost::bind (&MonoPanner::value_change, this), gui_context()); + position_control->Changed.connect (panvalue_connections, invalidator(*this), boost::bind (&MonoPanner::value_change, this), gui_context()); - _panner_shell->Changed.connect (connections, invalidator (*this), boost::bind (&MonoPanner::bypass_handler, this), gui_context()); - ColorsChanged.connect (sigc::mem_fun (*this, &MonoPanner::color_handler)); + _panner_shell->Changed.connect (panshell_connections, invalidator (*this), boost::bind (&MonoPanner::bypass_handler, this), gui_context()); + _panner_shell->PannableChanged.connect (panshell_connections, invalidator (*this), boost::bind (&MonoPanner::pannable_handler, this), gui_context()); + UIConfiguration::instance().ColorsChanged.connect (sigc::mem_fun (*this, &MonoPanner::color_handler)); set_tooltip (); } MonoPanner::~MonoPanner () { - + } void @@ -136,11 +131,16 @@ MonoPanner::on_expose_event (GdkEventExpose*) int width, height; double pos = position_control->get_value (); /* 0..1 */ uint32_t o, f, t, b, pf, po; - const double corner_radius = 5; width = get_width(); height = get_height (); + const int step_down = rint(height / 3.5); + const int lr_box_size = height - 2 * step_down; + const int pos_box_size = (int)(rint(step_down * .8)) | 1; + const int top_step = step_down - pos_box_size; + const double corner_radius = 5 * UIConfiguration::instance().get_ui_scale(); + o = colors.outline; f = colors.fill; t = colors.text; @@ -157,12 +157,14 @@ MonoPanner::on_expose_event (GdkEventExpose*) t = 0x606060ff; } + if (_send_mode) { + b = UIConfiguration::instance().color ("send bg"); + } /* background */ context->set_source_rgba (UINT_RGBA_R_FLT(b), UINT_RGBA_G_FLT(b), UINT_RGBA_B_FLT(b), UINT_RGBA_A_FLT(b)); context->rectangle (0, 0, width, height); context->fill (); - double usable_width = width - pos_box_size; /* compute the centers of the L/R boxes based on the current stereo width */ @@ -170,8 +172,8 @@ MonoPanner::on_expose_event (GdkEventExpose*) usable_width -= 1.0; } const double half_lr_box = lr_box_size/2.0; - const double left = 4 + half_lr_box; // center of left box - const double right = width - 4 - half_lr_box; // center of right box + const double left = pos_box_size * .5 + half_lr_box; // center of left box + const double right = width - pos_box_size * .5 - half_lr_box; // center of right box /* center line */ context->set_source_rgba (UINT_RGBA_R_FLT(o), UINT_RGBA_G_FLT(o), UINT_RGBA_B_FLT(o), UINT_RGBA_A_FLT(o)); @@ -197,7 +199,7 @@ MonoPanner::on_expose_event (GdkEventExpose*) Glib::RefPtr layout = Pango::Layout::create(get_pango_context()); layout->set_attributes (panner_font_attributes); - layout->set_text (_("L")); + layout->set_text (S_("Panner|L")); layout->get_pixel_size(tw, th); context->move_to (rint(left - tw/2), rint(lr_box_size + step_down - th/2)); context->set_source_rgba (UINT_RGBA_R_FLT(t), UINT_RGBA_G_FLT(t), UINT_RGBA_B_FLT(t), UINT_RGBA_A_FLT(t)); @@ -214,7 +216,7 @@ MonoPanner::on_expose_event (GdkEventExpose*) context->stroke(); /* add text */ - layout->set_text (_("R")); + layout->set_text (S_("Panner|R")); layout->get_pixel_size(tw, th); context->move_to (rint(right - tw/2), rint(lr_box_size + step_down - th/2)); context->set_source_rgba (UINT_RGBA_R_FLT(t), UINT_RGBA_G_FLT(t), UINT_RGBA_B_FLT(t), UINT_RGBA_A_FLT(t)); @@ -252,8 +254,8 @@ MonoPanner::on_expose_event (GdkEventExpose*) context->set_line_width (2.0); context->move_to (spos + (pos_box_size/2.0), top_step); /* top right */ context->rel_line_to (0.0, pos_box_size); /* lower right */ - context->rel_line_to (-pos_box_size/2.0, 4.0); /* bottom point */ - context->rel_line_to (-pos_box_size/2.0, -4.0); /* lower left */ + context->rel_line_to (-pos_box_size/2.0, 4.0 * UIConfiguration::instance().get_ui_scale()); /* bottom point */ + context->rel_line_to (-pos_box_size/2.0, -4.0 * UIConfiguration::instance().get_ui_scale()); /* lower left */ context->rel_line_to (0.0, -pos_box_size); /* upper left */ context->close_path (); @@ -265,8 +267,8 @@ MonoPanner::on_expose_event (GdkEventExpose*) /* marker line */ context->set_line_width (1.0); - context->move_to (spos, pos_box_size + 5); - context->rel_line_to (0, half_lr_box+step_down); + context->move_to (spos, 1 + top_step + pos_box_size + 4.0 * UIConfiguration::instance().get_ui_scale()); + context->line_to (spos, half_lr_box + step_down + lr_box_size - 1); context->set_source_rgba (UINT_RGBA_R_FLT(po), UINT_RGBA_G_FLT(po), UINT_RGBA_B_FLT(po), UINT_RGBA_A_FLT(po)); context->stroke (); @@ -317,11 +319,11 @@ MonoPanner::on_button_press_event (GdkEventButton* ev) if (ev->x <= width/3) { /* left side dbl click */ - position_control->set_value (0); + position_control->set_value (0, Controllable::NoGroup); } else if (ev->x > 2*width/3) { - position_control->set_value (1.0); + position_control->set_value (1.0, Controllable::NoGroup); } else { - position_control->set_value (0.5); + position_control->set_value (0.5, Controllable::NoGroup); } _dragging = false; @@ -392,12 +394,12 @@ MonoPanner::on_scroll_event (GdkEventScroll* ev) case GDK_SCROLL_UP: case GDK_SCROLL_LEFT: pv -= step; - position_control->set_value (pv); + position_control->set_value (pv, Controllable::NoGroup); break; case GDK_SCROLL_DOWN: case GDK_SCROLL_RIGHT: pv += step; - position_control->set_value (pv); + position_control->set_value (pv, Controllable::NoGroup); break; } @@ -422,7 +424,7 @@ MonoPanner::on_motion_notify_event (GdkEventMotion* ev) if (!detented && ARDOUR::Panner::equivalent (position_control->get_value(), 0.5)) { detented = true; /* snap to center */ - position_control->set_value (0.5); + position_control->set_value (0.5, Controllable::NoGroup); } if (detented) { @@ -431,13 +433,13 @@ MonoPanner::on_motion_notify_event (GdkEventMotion* ev) /* have we pulled far enough to escape ? */ if (fabs (accumulated_delta) >= 0.025) { - position_control->set_value (position_control->get_value() + accumulated_delta); + position_control->set_value (position_control->get_value() + accumulated_delta, Controllable::NoGroup); detented = false; accumulated_delta = false; } } else { double pv = position_control->get_value(); // 0..1.0 ; 0 = left - position_control->set_value (pv + delta); + position_control->set_value (pv + delta, Controllable::NoGroup); } last_drag_x = ev->x; @@ -464,15 +466,15 @@ MonoPanner::on_key_press_event (GdkEventKey* ev) switch (ev->keyval) { case GDK_Left: pv -= step; - position_control->set_value (pv); + position_control->set_value (pv, Controllable::NoGroup); break; case GDK_Right: pv += step; - position_control->set_value (pv); + position_control->set_value (pv, Controllable::NoGroup); break; case GDK_0: case GDK_KP_0: - position_control->set_value (0.0); + position_control->set_value (0.0, Controllable::NoGroup); break; default: return false; @@ -484,12 +486,12 @@ MonoPanner::on_key_press_event (GdkEventKey* ev) void MonoPanner::set_colors () { - colors.fill = ARDOUR_UI::config()->get_canvasvar_MonoPannerFill(); - colors.outline = ARDOUR_UI::config()->get_canvasvar_MonoPannerOutline(); - colors.text = ARDOUR_UI::config()->get_canvasvar_MonoPannerText(); - colors.background = ARDOUR_UI::config()->get_canvasvar_MonoPannerBackground(); - colors.pos_outline = ARDOUR_UI::config()->get_canvasvar_MonoPannerPositionOutline(); - colors.pos_fill = ARDOUR_UI::config()->get_canvasvar_MonoPannerPositionFill(); + colors.fill = UIConfiguration::instance().color_mod ("mono panner fill", "panner fill"); + colors.outline = UIConfiguration::instance().color ("mono panner outline"); + colors.text = UIConfiguration::instance().color ("mono panner text"); + colors.background = UIConfiguration::instance().color ("mono panner bg"); + colors.pos_outline = UIConfiguration::instance().color ("mono panner position outline"); + colors.pos_fill = UIConfiguration::instance().color_mod ("mono panner position fill", "mono panner position fill"); } void @@ -505,6 +507,16 @@ MonoPanner::bypass_handler () queue_draw (); } +void +MonoPanner::pannable_handler () +{ + panvalue_connections.drop_connections(); + position_control = _panner->pannable()->pan_azimuth_control; + position_binder.set_controllable(position_control); + position_control->Changed.connect (panvalue_connections, invalidator(*this), boost::bind (&MonoPanner::value_change, this), gui_context()); + queue_draw (); +} + PannerEditor* MonoPanner::editor () {