From 9a9f9eb87831be1f24055c53f064ea752bec7fc0 Mon Sep 17 00:00:00 2001 From: Nikolay Date: Fri, 12 Dec 2014 11:03:16 +0200 Subject: [PATCH] [Summary] Allow to set waveform colour in the Preference Panel --- gtk2_ardour/ardour_ui_options.cc | 4 +- gtk2_ardour/audio_region_view.cc | 2 +- gtk2_ardour/editor.h | 1 + gtk2_ardour/editor_ops.cc | 8 +++ .../macosx/tracks.xcodeproj/project.pbxproj | 4 -- gtk2_ardour/public_editor.h | 1 + gtk2_ardour/region_view.cc | 6 +++ gtk2_ardour/region_view.h | 3 +- gtk2_ardour/route_time_axis.cc | 8 +++ gtk2_ardour/route_time_axis.h | 1 + gtk2_ardour/streamview.cc | 8 +++ gtk2_ardour/streamview.h | 1 + gtk2_ardour/time_axis_view.cc | 5 ++ gtk2_ardour/time_axis_view.h | 2 + gtk2_ardour/time_axis_view_item.cc | 6 +++ gtk2_ardour/time_axis_view_item.h | 1 + gtk2_ardour/tracks_control_panel.cc | 2 + gtk2_ardour/tracks_control_panel.h | 2 + gtk2_ardour/tracks_control_panel.logic.cc | 49 ++++++++++++++++++- gtk2_ardour/tracks_control_panel.logic.h | 2 + gtk2_ardour/ui/tracks_preferences.xml | 28 +++++++++++ 21 files changed, 136 insertions(+), 8 deletions(-) diff --git a/gtk2_ardour/ardour_ui_options.cc b/gtk2_ardour/ardour_ui_options.cc index 9d50d4513d..f883810ce9 100644 --- a/gtk2_ardour/ardour_ui_options.cc +++ b/gtk2_ardour/ardour_ui_options.cc @@ -432,7 +432,9 @@ ARDOUR_UI::parameter_changed (std::string p) ? ArdourCanvas::WaveView::Rectified : ArdourCanvas::WaveView::Normal); } else if (p == "show-waveform-clipping") { ArdourCanvas::WaveView::set_global_show_waveform_clipping (ARDOUR_UI::config()->get_show_waveform_clipping()); - } + } else if ( p == "waveform fill" ) { + the_editor ().update_waveform_color(); + } } void diff --git a/gtk2_ardour/audio_region_view.cc b/gtk2_ardour/audio_region_view.cc index c28384a9a3..df9d4142b5 100644 --- a/gtk2_ardour/audio_region_view.cc +++ b/gtk2_ardour/audio_region_view.cc @@ -1432,7 +1432,7 @@ AudioRegionView::set_some_waveform_colors (vector& wave } } - for (vector::iterator w = waves_to_color.begin(); w != waves_to_color.end(); ++w) { + for (vector::iterator w = waves_to_color.begin(); w != waves_to_color.end(); ++w) { (*w)->set_fill_color (fill); (*w)->set_outline_color (outline); (*w)->set_clip_color (clip); diff --git a/gtk2_ardour/editor.h b/gtk2_ardour/editor.h index cb82025f75..25825a9a6c 100644 --- a/gtk2_ardour/editor.h +++ b/gtk2_ardour/editor.h @@ -1227,6 +1227,7 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD void temporal_zoom_by_slider (); void wave_form_zoom (); void update_temporal_zoom_slider (); + void update_waveform_color (); void insert_region_list_selection (float times); diff --git a/gtk2_ardour/editor_ops.cc b/gtk2_ardour/editor_ops.cc index fff02ca3bb..f0aff35560 100644 --- a/gtk2_ardour/editor_ops.cc +++ b/gtk2_ardour/editor_ops.cc @@ -1905,6 +1905,14 @@ Editor::update_temporal_zoom_slider () _temporal_zoom_adjustment.set_value(value); } +void +Editor::update_waveform_color () +{ + for (TrackViewList::iterator i = track_views.begin(); i != track_views.end(); ++i) { + (*i)->update_waveform_color (); + } +} + bool Editor::choose_new_marker_name(string &name) { diff --git a/gtk2_ardour/macosx/tracks.xcodeproj/project.pbxproj b/gtk2_ardour/macosx/tracks.xcodeproj/project.pbxproj index a2f9373e29..75af5132f3 100644 --- a/gtk2_ardour/macosx/tracks.xcodeproj/project.pbxproj +++ b/gtk2_ardour/macosx/tracks.xcodeproj/project.pbxproj @@ -284,7 +284,6 @@ 95F9DFE01A35F3310007E953 /* waves_clean_up_dialog.xml in Resources */ = {isa = PBXBuildFile; fileRef = 95F9DFD81A35F3310007E953 /* waves_clean_up_dialog.xml */; }; 95F9DFE11A35F3310007E953 /* waves_connect_to_backend_error_dialog.xml in Resources */ = {isa = PBXBuildFile; fileRef = 95F9DFD91A35F3310007E953 /* waves_connect_to_backend_error_dialog.xml */; }; 95F9DFE21A35F3310007E953 /* waves_excessive_split_dialog.xml in Resources */ = {isa = PBXBuildFile; fileRef = 95F9DFDA1A35F3310007E953 /* waves_excessive_split_dialog.xml */; }; - 95F9DFE31A35F3310007E953 /* waves_export_dialog.xml in Resources */ = {isa = PBXBuildFile; fileRef = 95F9DFDB1A35F3310007E953 /* waves_export_dialog.xml */; }; 95F9DFE41A35F3310007E953 /* waves_file_exists_dialog.xml in Resources */ = {isa = PBXBuildFile; fileRef = 95F9DFDC1A35F3310007E953 /* waves_file_exists_dialog.xml */; }; 95F9DFE51A35F3310007E953 /* waves_how_to_import_dialog_1.xml in Resources */ = {isa = PBXBuildFile; fileRef = 95F9DFDD1A35F3310007E953 /* waves_how_to_import_dialog_1.xml */; }; 95F9DFE61A35F3310007E953 /* waves_how_to_import_dialog_2.xml in Resources */ = {isa = PBXBuildFile; fileRef = 95F9DFDE1A35F3310007E953 /* waves_how_to_import_dialog_2.xml */; }; @@ -1145,7 +1144,6 @@ 95F9DFD81A35F3310007E953 /* waves_clean_up_dialog.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = waves_clean_up_dialog.xml; sourceTree = ""; }; 95F9DFD91A35F3310007E953 /* waves_connect_to_backend_error_dialog.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = waves_connect_to_backend_error_dialog.xml; sourceTree = ""; }; 95F9DFDA1A35F3310007E953 /* waves_excessive_split_dialog.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = waves_excessive_split_dialog.xml; sourceTree = ""; }; - 95F9DFDB1A35F3310007E953 /* waves_export_dialog.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = waves_export_dialog.xml; sourceTree = ""; }; 95F9DFDC1A35F3310007E953 /* waves_file_exists_dialog.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = waves_file_exists_dialog.xml; sourceTree = ""; }; 95F9DFDD1A35F3310007E953 /* waves_how_to_import_dialog_1.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = waves_how_to_import_dialog_1.xml; sourceTree = ""; }; 95F9DFDE1A35F3310007E953 /* waves_how_to_import_dialog_2.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = waves_how_to_import_dialog_2.xml; sourceTree = ""; }; @@ -1842,7 +1840,6 @@ 95F9DFD81A35F3310007E953 /* waves_clean_up_dialog.xml */, 95F9DFD91A35F3310007E953 /* waves_connect_to_backend_error_dialog.xml */, 95F9DFDA1A35F3310007E953 /* waves_excessive_split_dialog.xml */, - 95F9DFDB1A35F3310007E953 /* waves_export_dialog.xml */, 95F9DFDC1A35F3310007E953 /* waves_file_exists_dialog.xml */, 95F9DFDD1A35F3310007E953 /* waves_how_to_import_dialog_1.xml */, 95F9DFDE1A35F3310007E953 /* waves_how_to_import_dialog_2.xml */, @@ -2428,7 +2425,6 @@ 432793A8194F003A003C9FEA /* resize_right_cursor.png in Resources */, 432793A9194F003A003C9FEA /* resize_top_cursor.png in Resources */, 432793AA194F003A003C9FEA /* resize_top_left_cursor.png in Resources */, - 95F9DFE31A35F3310007E953 /* waves_export_dialog.xml in Resources */, 432793AB194F003A003C9FEA /* resize_top_right_cursor.png in Resources */, 432793AC194F003A003C9FEA /* sae.png in Resources */, 432793AD194F003A003C9FEA /* sessionlock.png in Resources */, diff --git a/gtk2_ardour/public_editor.h b/gtk2_ardour/public_editor.h index d49a96112d..b0b7876b04 100644 --- a/gtk2_ardour/public_editor.h +++ b/gtk2_ardour/public_editor.h @@ -312,6 +312,7 @@ class PublicEditor : public Gtk::Window, public PBD::StatefulDestructible, publi virtual void set_video_timeline_height (const int h) = 0; virtual void embed_audio_from_video (std::string, framepos_t n = 0, bool lock_position_to_video = true) = 0; virtual void export_video (bool range = false) = 0; + virtual void update_waveform_color () = 0; virtual RouteTimeAxisView* get_route_view_by_route_id (const PBD::ID& id) const = 0; diff --git a/gtk2_ardour/region_view.cc b/gtk2_ardour/region_view.cc index 302f358c65..47075f1ca0 100644 --- a/gtk2_ardour/region_view.cc +++ b/gtk2_ardour/region_view.cc @@ -544,6 +544,12 @@ RegionView::set_colors () } } +void +RegionView::update_color () +{ + TimeAxisViewItem::update_color (); +} + void RegionView::set_frame_color () { diff --git a/gtk2_ardour/region_view.h b/gtk2_ardour/region_view.h index 0837c075f0..cccef5cb33 100644 --- a/gtk2_ardour/region_view.h +++ b/gtk2_ardour/region_view.h @@ -122,7 +122,8 @@ class RegionView : public TimeAxisViewItem void hide_silent_frames (); ARDOUR::frameoffset_t snap_frame_to_frame (ARDOUR::frameoffset_t) const; - + void update_color (); + protected: /** Allows derived types to specify their visibility requirements diff --git a/gtk2_ardour/route_time_axis.cc b/gtk2_ardour/route_time_axis.cc index bf5fc395c7..3460c92c51 100644 --- a/gtk2_ardour/route_time_axis.cc +++ b/gtk2_ardour/route_time_axis.cc @@ -2817,3 +2817,11 @@ RouteTimeAxisView::on_record_state_changed () if ( (_session->record_status()==Session::Recording) && (_route->record_enabled()) ) end_name_edit (RESPONSE_CANCEL); } + +void +RouteTimeAxisView::update_waveform_color () +{ + if (_view) { + _view->update_waveform_color (); + } +} diff --git a/gtk2_ardour/route_time_axis.h b/gtk2_ardour/route_time_axis.h index 9656d9e280..b51ba772a4 100644 --- a/gtk2_ardour/route_time_axis.h +++ b/gtk2_ardour/route_time_axis.h @@ -162,6 +162,7 @@ public: PBD::Signal3 relative_tracks_reorder_request; void route_rec_enable_changed(); + void update_waveform_color (); protected: friend class StreamView; diff --git a/gtk2_ardour/streamview.cc b/gtk2_ardour/streamview.cc index c2ad2aeed2..594dba865a 100644 --- a/gtk2_ardour/streamview.cc +++ b/gtk2_ardour/streamview.cc @@ -532,6 +532,14 @@ StreamView::set_selected_regionviews (RegionSelection& regions) } } +void +StreamView::update_waveform_color () +{ + for (list::iterator i = region_views.begin(); i != region_views.end(); ++i) { + (*i)->update_color (); + } +} + /** Get selectable things within a given range. * @param start Start time in session frames. diff --git a/gtk2_ardour/streamview.h b/gtk2_ardour/streamview.h index f058a4a8ee..510d1807bc 100644 --- a/gtk2_ardour/streamview.h +++ b/gtk2_ardour/streamview.h @@ -100,6 +100,7 @@ public: void foreach_selected_regionview (sigc::slot slot); void set_selected_regionviews (RegionSelection&); + void update_waveform_color (); void get_selectables (ARDOUR::framepos_t, ARDOUR::framepos_t, double, double, std::list&); void get_inverted_selectables (Selection&, std::list& results); diff --git a/gtk2_ardour/time_axis_view.cc b/gtk2_ardour/time_axis_view.cc index cdcd5547ab..cb4a3924bd 100644 --- a/gtk2_ardour/time_axis_view.cc +++ b/gtk2_ardour/time_axis_view.cc @@ -1299,3 +1299,8 @@ TrackViewList::filter_to_unique_playlists () } return ts; } + +void +TimeAxisView::update_waveform_color () { + +} diff --git a/gtk2_ardour/time_axis_view.h b/gtk2_ardour/time_axis_view.h index 29bcd44edd..20c74d5536 100644 --- a/gtk2_ardour/time_axis_view.h +++ b/gtk2_ardour/time_axis_view.h @@ -205,6 +205,8 @@ class TimeAxisView : public virtual AxisView SelectionRect* get_selection_rect(uint32_t id); static uint32_t preset_height (Height); + + virtual void update_waveform_color (); protected: /* The Standard LHS Controls */ diff --git a/gtk2_ardour/time_axis_view_item.cc b/gtk2_ardour/time_axis_view_item.cc index 050ae0baf7..eb152e216e 100644 --- a/gtk2_ardour/time_axis_view_item.cc +++ b/gtk2_ardour/time_axis_view_item.cc @@ -673,6 +673,12 @@ TimeAxisViewItem::set_colors() set_trim_handle_colors(); } +void +TimeAxisViewItem::update_color() +{ + set_colors (); +} + void TimeAxisViewItem::set_name_text_color () { diff --git a/gtk2_ardour/time_axis_view_item.h b/gtk2_ardour/time_axis_view_item.h index 7a5199ffb6..ff9d2f42f5 100644 --- a/gtk2_ardour/time_axis_view_item.h +++ b/gtk2_ardour/time_axis_view_item.h @@ -188,6 +188,7 @@ class TimeAxisViewItem : public Selectable, public PBD::ScopedConnectionList virtual void set_colors(); virtual void set_frame_color(); + virtual void update_color(); virtual void set_frame_gradient (); void set_trim_handle_colors(); diff --git a/gtk2_ardour/tracks_control_panel.cc b/gtk2_ardour/tracks_control_panel.cc index 13e6206eba..b1d8bfc974 100644 --- a/gtk2_ardour/tracks_control_panel.cc +++ b/gtk2_ardour/tracks_control_panel.cc @@ -59,6 +59,8 @@ TracksControlPanel::TracksControlPanel () , _stereo_out_button(get_waves_button ("stereo_out_button")) , _name_tracks_after_driver(get_waves_button ("name_tracks_after_driver_button")) , _reset_tracks_name_to_default(get_waves_button ("reset_tracks_name_to_default_button")) + , _color_adjustment(get_adjustment ("color_adjustment")) + , _color_box(get_container ("color_box")) , _obey_mmc_commands_button (get_waves_button ("obey_mmc_commands_button")) , _send_mmc_commands_button (get_waves_button ("send_mmc_commands_button")) , _dc_bias_against_denormals_button (get_waves_button ("dc_bias_against_denormals_button")) diff --git a/gtk2_ardour/tracks_control_panel.h b/gtk2_ardour/tracks_control_panel.h index 9761bcae40..52bf2a05e5 100644 --- a/gtk2_ardour/tracks_control_panel.h +++ b/gtk2_ardour/tracks_control_panel.h @@ -71,6 +71,8 @@ class TracksControlPanel : public WavesDialog, public PBD::ScopedConnectionList WavesButton& _browse_button; WavesButton& _name_tracks_after_driver; WavesButton& _reset_tracks_name_to_default; + Gtk::Adjustment& _color_adjustment; + Gtk::Container& _color_box; WavesButton& _obey_mmc_commands_button; WavesButton& _send_mmc_commands_button; WavesButton& _dc_bias_against_denormals_button; diff --git a/gtk2_ardour/tracks_control_panel.logic.cc b/gtk2_ardour/tracks_control_panel.logic.cc index 293be82d76..102fd4dd27 100644 --- a/gtk2_ardour/tracks_control_panel.logic.cc +++ b/gtk2_ardour/tracks_control_panel.logic.cc @@ -158,6 +158,7 @@ TracksControlPanel::init () populate_output_channels (); populate_midi_ports (); populate_default_session_path (); + display_waveform_color_fader (); // Init session Settings populate_bit_depth_dropdown(); @@ -549,6 +550,37 @@ TracksControlPanel::populate_pre_record_buffer_dropdown() _pre_record_buffer_dropdown.set_text( str_time ); } +#define UINT_TO_RGB(u,r,g,b) { (*(r)) = ((u)>>16)&0xff; (*(g)) = ((u)>>8)&0xff; (*(b)) = (u)&0xff; } +#define UINT_TO_RGBA(u,r,g,b,a) { UINT_TO_RGB(((u)>>8),r,g,b); (*(a)) = (u)&0xff; } + +void +TracksControlPanel::display_waveform_color_fader () +{ + // get waveform color from preferences + uint32_t color_uint32 = ARDOUR_UI::config()->get_canvasvar_WaveFormFill(); // rgba + + uint32_t r,g,b, a; + UINT_TO_RGBA(color_uint32, &r, &g, &b, &a); + uint32_t grey = round (0.21*r + 0.72*g + 0.07*b); + + Gdk::Color color; // 8 bytes + color.set_grey_p ( (double)grey/255 ); + + _color_box.modify_bg (Gtk::STATE_NORMAL, color ); + _color_adjustment.set_value (grey); + + _color_adjustment.signal_value_changed().connect (mem_fun (*this, &TracksControlPanel::color_adjustment_changed)); +} + +void +TracksControlPanel::color_adjustment_changed () +{ + int grey = _color_adjustment.get_value(); // 0..255 + Gdk::Color color; // 8 bytes + color.set_grey_p ( (double)grey/255 ); + _color_box.modify_bg (Gtk::STATE_NORMAL, color ); +} + void TracksControlPanel::refresh_session_settings_info() { @@ -1094,6 +1126,9 @@ TracksControlPanel::display_general_preferences () display_denormal_protection (); } +#define RGB_TO_UINT(r,g,b) ((((guint)(r))<<16)|(((guint)(g))<<8)|((guint)(b))) +#define RGB_TO_RGBA(x,a) (((x) << 8) | ((((guint)a) & 0xff))) +#define RGBA_TO_UINT(r,g,b,a) RGB_TO_RGBA(RGB_TO_UINT(r,g,b), a) void TracksControlPanel::save_general_preferences () { @@ -1109,6 +1144,16 @@ TracksControlPanel::save_general_preferences () dbg_msg ("TracksControlPanel::general_preferences ():\nUnexpected WaveFormShape !"); break; } + + uint32_t grey = _color_adjustment.get_value(); +// uint32_t color_uint32 = (value<<24)+(value<<16)+(value<<8)+255; + uint32_t color_uint32 = RGBA_TO_UINT(grey, grey, grey, 255); + + // Do not change order. + ARDOUR_UI::config()->set_canvasvar_RecWaveFormFill (color_uint32); + ARDOUR_UI::config()->set_canvasvar_SelectedWaveFormFill (color_uint32); + ARDOUR_UI::config()->set_canvasvar_ZeroLine (color_uint32); + ARDOUR_UI::config()->set_canvasvar_WaveFormFill (color_uint32); // Must be the last! because it triggers waveform update in ARDOUR_UI selected_item = _peak_hold_time_dropdown.get_current_item (); switch (selected_item) { @@ -1722,7 +1767,9 @@ TracksControlPanel::on_parameter_changed (const std::string& parameter_name) display_history_depth (); } else if (parameter_name == "save-history-depth") { display_saved_history_depth (); - } + } else if (parameter_name == "waveform fill") { + display_waveform_color_fader (); + } } void diff --git a/gtk2_ardour/tracks_control_panel.logic.h b/gtk2_ardour/tracks_control_panel.logic.h index ba40f12087..202e08fe2b 100644 --- a/gtk2_ardour/tracks_control_panel.logic.h +++ b/gtk2_ardour/tracks_control_panel.logic.h @@ -96,6 +96,8 @@ void populate_output_channels(); void populate_midi_ports(); void populate_default_session_path(); + void display_waveform_color_fader(); + void color_adjustment_changed(); // Session Settings void populate_file_type_dropdown(); diff --git a/gtk2_ardour/ui/tracks_preferences.xml b/gtk2_ardour/ui/tracks_preferences.xml index 4d2cf2de5c..6f18073e5d 100644 --- a/gtk2_ardour/ui/tracks_preferences.xml +++ b/gtk2_ardour/ui/tracks_preferences.xml @@ -864,6 +864,34 @@ data="1"/> + + +