diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2012-05-10 19:14:11 +0000 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2012-05-10 19:14:11 +0000 |
commit | c6d983bda5418fe3ba11a53768a756f22a6bde39 (patch) | |
tree | c57a9713d0776f5e29ba74fe0a532549297f35d7 /gtk2_ardour | |
parent | 762831633532afb117892741c5f4ab3129a97c1e (diff) |
incorrect but visible context menu for xfades
git-svn-id: svn://localhost/ardour2/branches/3.0@12243 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour')
-rw-r--r-- | gtk2_ardour/editor.cc | 71 | ||||
-rw-r--r-- | gtk2_ardour/editor.h | 4 | ||||
-rw-r--r-- | gtk2_ardour/editor_drag.h | 2 | ||||
-rw-r--r-- | gtk2_ardour/editor_mouse.cc | 10 |
4 files changed, 82 insertions, 5 deletions
diff --git a/gtk2_ardour/editor.cc b/gtk2_ardour/editor.cc index 1bee0719ed..4a358ff114 100644 --- a/gtk2_ardour/editor.cc +++ b/gtk2_ardour/editor.cc @@ -1341,6 +1341,67 @@ Editor::action_pre_activated (Glib::RefPtr<Action> const & a) } } +/** Pop up a context menu for when the user clicks on a crossfade */ +void +Editor::popup_xfade_context_menu (int button, int32_t time, ArdourCanvas::Item* item, ItemType item_type) +{ + using namespace Menu_Helpers; + + MenuList& items (xfade_context_menu.items()); + + if (items.empty()) { + items.push_back ( + ImageMenuElem ( + _("Linear (for highly correlated material)"), + *_xfade_images[FadeLinear], + sigc::bind (sigc::mem_fun (*this, &Editor::set_fade_in_shape), FadeLinear) + ) + ); + + dynamic_cast<ImageMenuItem*>(&items.back())->set_always_show_image (); + + items.push_back ( + ImageMenuElem ( + _("ConstantPower (-6dB)"), + *_xfade_images[FadeFast], + sigc::bind (sigc::mem_fun (*this, &Editor::set_fade_in_shape), FadeFast) + )); + + dynamic_cast<ImageMenuItem*>(&items.back())->set_always_show_image (); + + items.push_back ( + ImageMenuElem ( + _("Linear-dB"), + *_xfade_images[FadeSlow], + sigc::bind (sigc::mem_fun (*this, &Editor::set_fade_in_shape), FadeSlow) + ) + ); + + dynamic_cast<ImageMenuItem*>(&items.back())->set_always_show_image (); + + items.push_back ( + ImageMenuElem ( + _("Smooth"), + *_xfade_images[FadeLogB], + sigc::bind (sigc::mem_fun (*this, &Editor::set_fade_in_shape), FadeLogB) + )); + + dynamic_cast<ImageMenuItem*>(&items.back())->set_always_show_image (); + + items.push_back ( + ImageMenuElem ( + _("Fast"), + *_xfade_images[FadeLogA], + sigc::bind (sigc::mem_fun (*this, &Editor::set_fade_in_shape), FadeLogA) + )); + + dynamic_cast<ImageMenuItem*>(&items.back())->set_always_show_image (); + } + + xfade_context_menu.popup (button, time); +} + + /** Pop up a context menu for when the user clicks on a fade in or fade out */ void Editor::popup_fade_context_menu (int button, int32_t time, ArdourCanvas::Item* item, ItemType item_type) @@ -1358,9 +1419,6 @@ Editor::popup_fade_context_menu (int button, int32_t time, ArdourCanvas::Item* i items.clear (); switch (item_type) { - case StartCrossFadeItem: - case EndCrossFadeItem: - break; case FadeInItem: case FadeInHandleItem: if (arv->audio_region()->fade_in_active()) { @@ -5297,6 +5355,13 @@ Editor::setup_fade_images () _fade_out_images[FadeLogB] = new Gtk::Image (get_icon_path (X_("crossfade-out-slow-cut"))); _fade_out_images[FadeLogA] = new Gtk::Image (get_icon_path (X_("crossfade-out-fast-cut"))); _fade_out_images[FadeSlow] = new Gtk::Image (get_icon_path (X_("crossfade-out-long-cut"))); + + _xfade_images[FadeLinear] = new Gtk::Image (get_icon_path (X_("crossfade-out-linear"))); + _xfade_images[FadeFast] = new Gtk::Image (get_icon_path (X_("crossfade-out-short-cut"))); + _xfade_images[FadeLogB] = new Gtk::Image (get_icon_path (X_("crossfade-out-slow-cut"))); + _xfade_images[FadeLogA] = new Gtk::Image (get_icon_path (X_("crossfade-out-fast-cut"))); + _xfade_images[FadeSlow] = new Gtk::Image (get_icon_path (X_("crossfade-out-long-cut"))); + } /** @return Gtk::manage()d menu item for a given action from `editor_actions' */ diff --git a/gtk2_ardour/editor.h b/gtk2_ardour/editor.h index 82fa3c41af..3c1ebdbd49 100644 --- a/gtk2_ardour/editor.h +++ b/gtk2_ardour/editor.h @@ -1337,6 +1337,9 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD Gtk::Menu fade_context_menu; void popup_fade_context_menu (int, int, ArdourCanvas::Item*, ItemType); + Gtk::Menu xfade_context_menu; + void popup_xfade_context_menu (int, int, ArdourCanvas::Item*, ItemType); + void set_fade_in_shape (ARDOUR::FadeShape); void set_fade_out_shape (ARDOUR::FadeShape); @@ -2059,6 +2062,7 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD void setup_fade_images (); std::map<ARDOUR::FadeShape, Gtk::Image*> _fade_in_images; std::map<ARDOUR::FadeShape, Gtk::Image*> _fade_out_images; + std::map<ARDOUR::FadeShape, Gtk::Image*> _xfade_images; Gtk::MenuItem& action_menu_item (std::string const &); void action_pre_activated (Glib::RefPtr<Gtk::Action> const &); diff --git a/gtk2_ardour/editor_drag.h b/gtk2_ardour/editor_drag.h index 724c2eb355..2f81e06efc 100644 --- a/gtk2_ardour/editor_drag.h +++ b/gtk2_ardour/editor_drag.h @@ -989,7 +989,7 @@ class CrossfadeEdgeDrag : public Drag } virtual std::pair<ARDOUR::framecnt_t, int> move_threshold () const { - return std::make_pair (1, 1); + return std::make_pair (4, 4); } private: diff --git a/gtk2_ardour/editor_mouse.cc b/gtk2_ardour/editor_mouse.cc index 302387efc7..1724666976 100644 --- a/gtk2_ardour/editor_mouse.cc +++ b/gtk2_ardour/editor_mouse.cc @@ -1483,6 +1483,14 @@ Editor::button_release_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemT popup_fade_context_menu (1, event->button.time, item, item_type); break; + case StartCrossFadeItem: + popup_xfade_context_menu (1, event->button.time, item, item_type); + break; + + case EndCrossFadeItem: + popup_xfade_context_menu (1, event->button.time, item, item_type); + break; + case StreamItem: popup_track_context_menu (1, event->button.time, item_type, false); break; @@ -1498,7 +1506,7 @@ Editor::button_release_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemT case SelectionItem: popup_track_context_menu (1, event->button.time, item_type, true); break; - + case AutomationTrackItem: popup_track_context_menu (1, event->button.time, item_type, false); break; |