summaryrefslogtreecommitdiff
path: root/gtk2_ardour
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2012-05-10 19:14:11 +0000
committerPaul Davis <paul@linuxaudiosystems.com>2012-05-10 19:14:11 +0000
commitc6d983bda5418fe3ba11a53768a756f22a6bde39 (patch)
treec57a9713d0776f5e29ba74fe0a532549297f35d7 /gtk2_ardour
parent762831633532afb117892741c5f4ab3129a97c1e (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.cc71
-rw-r--r--gtk2_ardour/editor.h4
-rw-r--r--gtk2_ardour/editor_drag.h2
-rw-r--r--gtk2_ardour/editor_mouse.cc10
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;