From 60313085209a6213a7388e0b1070c10e83fe2a10 Mon Sep 17 00:00:00 2001 From: David Robillard Date: Tue, 16 Dec 2014 20:37:16 -0500 Subject: [PATCH] Use color modifiers for dynamic region styles. --- gtk2_ardour/automation_region_view.cc | 26 ++++++++++++++++++ gtk2_ardour/automation_region_view.h | 4 +++ gtk2_ardour/dark.colors | 24 ++++++++--------- gtk2_ardour/midi_region_view.cc | 39 +++++---------------------- gtk2_ardour/midi_region_view.h | 4 +-- gtk2_ardour/region_view.cc | 22 +++++---------- gtk2_ardour/region_view.h | 5 ++-- gtk2_ardour/time_axis_view_item.cc | 29 ++++---------------- gtk2_ardour/time_axis_view_item.h | 4 +-- 9 files changed, 65 insertions(+), 92 deletions(-) diff --git a/gtk2_ardour/automation_region_view.cc b/gtk2_ardour/automation_region_view.cc index ec1fa523a4..ca984ed128 100644 --- a/gtk2_ardour/automation_region_view.cc +++ b/gtk2_ardour/automation_region_view.cc @@ -29,6 +29,7 @@ #include "gtkmm2ext/keyboard.h" +#include "ardour_ui.h" #include "automation_region_view.h" #include "editing.h" #include "editor.h" @@ -57,6 +58,10 @@ AutomationRegionView::AutomationRegionView (ArdourCanvas::Container* } group->raise_to_top(); + + trackview.editor().MouseModeChanged.connect(_mouse_mode_connection, invalidator (*this), + boost::bind (&AutomationRegionView::mouse_mode_changed, this), + gui_context ()); } AutomationRegionView::~AutomationRegionView () @@ -97,6 +102,27 @@ AutomationRegionView::create_line (boost::shared_ptr lis _line->set_offset (_region->start ()); } +uint32_t +AutomationRegionView::get_fill_color() const +{ + const std::string mod_name = (_dragging ? "dragging region" : + trackview.editor().internal_editing() ? "editable region" : + "midi frame base"); + if (_selected) { + return ARDOUR_UI::config()->color_mod ("selected region base", mod_name); + } else if (high_enough_for_name || !ARDOUR_UI::config()->get_color_regions_using_track_color()) { + return ARDOUR_UI::config()->color_mod ("midi frame base", mod_name); + } + return ARDOUR_UI::config()->color_mod (fill_color, mod_name); +} + +void +AutomationRegionView::mouse_mode_changed () +{ + // Adjust frame colour (become more transparent for internal tools) + set_frame_color(); +} + bool AutomationRegionView::canvas_group_event (GdkEvent* ev) { diff --git a/gtk2_ardour/automation_region_view.h b/gtk2_ardour/automation_region_view.h index c9b7d47f18..76632901f7 100644 --- a/gtk2_ardour/automation_region_view.h +++ b/gtk2_ardour/automation_region_view.h @@ -70,6 +70,8 @@ public: // We are a ghost. Meta ghosts? Crazy talk. virtual GhostRegion* add_ghost(TimeAxisView&) { return 0; } + uint32_t get_fill_color() const; + void set_height (double); void reset_width_dependent_items(double pixel_width); @@ -79,6 +81,7 @@ protected: void region_resized (const PBD::PropertyChange&); bool canvas_group_event(GdkEvent* ev); void add_automation_event (GdkEvent* event, framepos_t when, double y, bool with_guard_points); + void mouse_mode_changed (); void entered(); void exited(); @@ -87,6 +90,7 @@ private: ARDOUR::DoubleBeatsFramesConverter _source_relative_time_converter; Evoral::Parameter _parameter; boost::shared_ptr _line; + PBD::ScopedConnection _mouse_mode_connection; }; #endif /* __gtk_ardour_automation_region_view_h__ */ diff --git a/gtk2_ardour/dark.colors b/gtk2_ardour/dark.colors index 8610e5d1ef..5c3e8bb719 100644 --- a/gtk2_ardour/dark.colors +++ b/gtk2_ardour/dark.colors @@ -1,18 +1,6 @@ - - - - - - - - - - - - @@ -116,6 +104,16 @@ + + + + + + + + + + @@ -481,6 +479,8 @@ + + diff --git a/gtk2_ardour/midi_region_view.cc b/gtk2_ardour/midi_region_view.cc index 787a997e7e..330a2204bf 100644 --- a/gtk2_ardour/midi_region_view.cc +++ b/gtk2_ardour/midi_region_view.cc @@ -426,8 +426,6 @@ MidiRegionView::enter_notify (GdkEventCrossing* ev) bool MidiRegionView::leave_notify (GdkEventCrossing*) { - _mouse_mode_connection.disconnect (); - leave_internal(); _entered = false; @@ -3242,40 +3240,17 @@ MidiRegionView::note_mouse_position (float x_fraction, float /*y_fraction*/, boo } uint32_t -MidiRegionView::fill_opacity() const +MidiRegionView::get_fill_color() const { - uint32_t a = RegionView::fill_opacity(); - if (trackview.editor().current_mouse_mode() == MouseDraw || - trackview.editor().current_mouse_mode() == MouseContent) { - /* Make rect more transparent when in an internal mode. This should - probably be configurable somehow. */ - a /= 2; - } - return a; -} - -void -MidiRegionView::set_frame_color() -{ - uint32_t f; - - TimeAxisViewItem::set_frame_color (); - - if (!frame) { - return; - } - + const std::string mod_name = (_dragging ? "dragging region" : + trackview.editor().internal_editing() ? "editable region" : + "midi frame base"); if (_selected) { - f = ARDOUR_UI::config()->color ("selected region base"); + return ARDOUR_UI::config()->color_mod ("selected region base", mod_name); } else if (high_enough_for_name || !ARDOUR_UI::config()->get_color_regions_using_track_color()) { - f = ARDOUR_UI::config()->color_mod ("midi frame base", "midi frame base"); - } else { - f = fill_color; + return ARDOUR_UI::config()->color_mod ("midi frame base", mod_name); } - - f = UINT_RGBA_CHANGE_A (f, fill_opacity()); - - frame->set_fill_color (f); + return ARDOUR_UI::config()->color_mod (fill_color, mod_name); } void diff --git a/gtk2_ardour/midi_region_view.h b/gtk2_ardour/midi_region_view.h index 74344380e0..d7c8c29058 100644 --- a/gtk2_ardour/midi_region_view.h +++ b/gtk2_ardour/midi_region_view.h @@ -106,11 +106,9 @@ public: inline ARDOUR::ColorMode color_mode() const { return midi_view()->color_mode(); } - void set_frame_color(); + uint32_t get_fill_color() const; void color_handler (); - uint32_t fill_opacity() const; - void show_step_edit_cursor (Evoral::MusicalTime pos); void move_step_edit_cursor (Evoral::MusicalTime pos); void hide_step_edit_cursor (); diff --git a/gtk2_ardour/region_view.cc b/gtk2_ardour/region_view.cc index bd80e27acb..c9c423e68a 100644 --- a/gtk2_ardour/region_view.cc +++ b/gtk2_ardour/region_view.cc @@ -510,18 +510,6 @@ RegionView::set_duration (framecnt_t frames, void *src) return true; } -uint32_t -RegionView::fill_opacity () const -{ - if (!_region->opaque()) { - return 60; - } - - uint32_t normal_tavi_opacity = TimeAxisViewItem::fill_opacity (); - - return normal_tavi_opacity; -} - void RegionView::set_colors () { @@ -534,10 +522,14 @@ RegionView::set_colors () } } -void -RegionView::set_frame_color () +uint32_t +RegionView::get_fill_color () const { - TimeAxisViewItem::set_frame_color (); + uint32_t f = TimeAxisViewItem::get_fill_color(); + if (_region->opaque()) { + f = UINT_RGBA_CHANGE_A (f, 255); + } + return f; } void diff --git a/gtk2_ardour/region_view.h b/gtk2_ardour/region_view.h index d39e75b759..551f8d93b0 100644 --- a/gtk2_ardour/region_view.h +++ b/gtk2_ardour/region_view.h @@ -85,6 +85,8 @@ class RegionView : public TimeAxisViewItem virtual void region_changed (const PBD::PropertyChange&); + uint32_t get_fill_color () const; + virtual GhostRegion* add_ghost (TimeAxisView&) = 0; void remove_ghost_in (TimeAxisView&); void remove_ghost (GhostRegion*); @@ -149,11 +151,8 @@ class RegionView : public TimeAxisViewItem void lock_toggle (); virtual void set_colors (); - virtual void set_frame_color (); virtual void reset_width_dependent_items (double pixel_width); - uint32_t fill_opacity () const; - virtual void color_handler () {} boost::shared_ptr _region; diff --git a/gtk2_ardour/time_axis_view_item.cc b/gtk2_ardour/time_axis_view_item.cc index 8c38293442..35a1e33138 100644 --- a/gtk2_ardour/time_axis_view_item.cc +++ b/gtk2_ardour/time_axis_view_item.cc @@ -691,49 +691,30 @@ TimeAxisViewItem::set_name_text_color () name_text->set_color (ArdourCanvas::contrasting_text_color (f)); } -uint32_t -TimeAxisViewItem::fill_opacity () const -{ - if (_dragging) { - return 130; - } - - uint32_t col = ARDOUR_UI::config()->color_mod (_fill_color_name, _fill_color_name); - return UINT_RGBA_A (col); -} - uint32_t TimeAxisViewItem::get_fill_color () const { uint32_t f; - uint32_t o = fill_opacity (); + const std::string mod_name = (_dragging ? "dragging region" : _fill_color_name); if (_selected) { - f = ARDOUR_UI::config()->color ("selected region base"); + f = ARDOUR_UI::config()->color_mod ("selected region base", mod_name); - if (o == 0) { - /* some condition of this item has set fill opacity to - * zero, but it has been selected, so use a mid-way - * alpha value to make it reasonably visible. - */ - o = 130; - } - } else { if (_recregion) { f = ARDOUR_UI::config()->color ("recording rect"); } else { if ((!Config->get_show_name_highlight() || high_enough_for_name) && !ARDOUR_UI::config()->get_color_regions_using_track_color()) { - f = ARDOUR_UI::config()->color_mod (_fill_color_name, _fill_color_name); + f = ARDOUR_UI::config()->color_mod (_fill_color_name, mod_name); } else { - f = fill_color; + f = ARDOUR_UI::config()->color_mod (fill_color, mod_name); } } } - return UINT_RGBA_CHANGE_A (f, o); + return f; } /** diff --git a/gtk2_ardour/time_axis_view_item.h b/gtk2_ardour/time_axis_view_item.h index 576e2ae76a..9229a3c791 100644 --- a/gtk2_ardour/time_axis_view_item.h +++ b/gtk2_ardour/time_axis_view_item.h @@ -76,7 +76,7 @@ class TimeAxisViewItem : public Selectable, public PBD::ScopedConnectionList void set_color (uint32_t); void set_name_text_color (); - uint32_t get_fill_color () const; + virtual uint32_t get_fill_color () const; ArdourCanvas::Item* get_canvas_frame(); ArdourCanvas::Item* get_canvas_group(); @@ -215,8 +215,6 @@ class TimeAxisViewItem : public Selectable, public PBD::ScopedConnectionList uint32_t fill_color; - virtual uint32_t fill_opacity() const; - uint32_t last_item_width; int name_text_width; bool wide_enough_for_name; -- 2.30.2