diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2013-04-26 14:20:11 -0400 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2013-04-26 14:20:11 -0400 |
commit | 54bf06e63cee78dfa218f604d862e577d0f5754c (patch) | |
tree | 0704568dd2b154cc10e52b16b36d54cdb187d5d8 | |
parent | 41d68e780f13df893992a5842a44ed51a094ee87 (diff) | |
parent | db34831b183d511d76ea1f29606e1933e5ad4caf (diff) |
Merge branch 'master' into cairocanvas
-rw-r--r-- | gtk2_ardour/ardour.menus.in | 2 | ||||
-rw-r--r-- | gtk2_ardour/ardour_ui.h | 2 | ||||
-rw-r--r-- | gtk2_ardour/ardour_ui_dependents.cc | 50 | ||||
-rw-r--r-- | gtk2_ardour/ardour_ui_ed.cc | 2 | ||||
-rw-r--r-- | gtk2_ardour/editor.cc | 3 | ||||
-rw-r--r-- | gtk2_ardour/editor.h | 3 | ||||
-rw-r--r-- | gtk2_ardour/mixer_ui.cc | 1 | ||||
-rw-r--r-- | gtk2_ardour/mixer_ui.h | 4 | ||||
-rw-r--r-- | gtk2_ardour/mnemonic-us.bindings.in | 2 | ||||
-rw-r--r-- | libs/gtkmm2ext/gtkmm2ext/visibility_tracker.h | 4 | ||||
-rw-r--r-- | libs/gtkmm2ext/visibility_tracker.cc | 19 | ||||
-rwxr-xr-x | tools/linux_packaging/build | 6 | ||||
-rwxr-xr-x | tools/videotimeline/install_video_tools.sh | 146 |
13 files changed, 224 insertions, 20 deletions
diff --git a/gtk2_ardour/ardour.menus.in b/gtk2_ardour/ardour.menus.in index 10881a0fb0..0279384fb5 100644 --- a/gtk2_ardour/ardour.menus.in +++ b/gtk2_ardour/ardour.menus.in @@ -506,7 +506,7 @@ </menu> <menu action = 'WindowMenu'> <menuitem action='toggle-mixer'/> - <menuitem action='toggle-mixer-on-top'/> + <menuitem action='toggle-editor-mixer'/> <separator/> diff --git a/gtk2_ardour/ardour_ui.h b/gtk2_ardour/ardour_ui.h index a24fe16a7c..42ce5d5863 100644 --- a/gtk2_ardour/ardour_ui.h +++ b/gtk2_ardour/ardour_ui.h @@ -309,7 +309,7 @@ class ARDOUR_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr void goto_editor_window (); void goto_mixer_window (); void toggle_mixer_window (); - void toggle_mixer_on_top (); + void toggle_editor_mixer (); int setup_windows (); void setup_transport (); diff --git a/gtk2_ardour/ardour_ui_dependents.cc b/gtk2_ardour/ardour_ui_dependents.cc index b9b0cdb6a2..7438fab9f0 100644 --- a/gtk2_ardour/ardour_ui_dependents.cc +++ b/gtk2_ardour/ardour_ui_dependents.cc @@ -150,21 +150,49 @@ ARDOUR_UI::toggle_mixer_window () } void -ARDOUR_UI::toggle_mixer_on_top () +ARDOUR_UI::toggle_editor_mixer () { + if (editor && mixer) { - if (gtk_window_is_active(Mixer_UI::instance()->gobj())) { + if (editor->get_screen() != mixer->get_screen()) { + // different screens, so don't do anything + return; + } + + /* See if they are obscuring each other */ + + gint ex, ey, ew, eh; + gint mx, my, mw, mh; + + editor->get_position (ex, ey); + editor->get_size (ew, eh); + + mixer->get_position (mx, my); + mixer->get_size (mw, mh); + + GdkRectangle e; + GdkRectangle m; + GdkRectangle r; + + e.x = ex; + e.y = ey; + e.width = ew; + e.height = eh; + + m.x = mx; + m.y = my; + m.width = mw; + m.height = mh; + + if (!gdk_rectangle_intersect (&e, &m, &r)) { + /* they do not intersect so do not toggle */ + return; + } + } + + if (mixer && mixer->fully_visible()) { goto_editor_window (); } else { - Glib::RefPtr<Action> act = ActionManager::get_action (X_("Common"), X_("toggle-mixer")); - if (act) { - Glib::RefPtr<ToggleAction> tact = Glib::RefPtr<ToggleAction>::cast_dynamic (act); - - /* Toggle the mixer to `visible' if required */ - if (!tact->get_active ()) { - tact->set_active (true); - } - } goto_mixer_window (); } } diff --git a/gtk2_ardour/ardour_ui_ed.cc b/gtk2_ardour/ardour_ui_ed.cc index 2d279385ae..66335bb55b 100644 --- a/gtk2_ardour/ardour_ui_ed.cc +++ b/gtk2_ardour/ardour_ui_ed.cc @@ -239,7 +239,7 @@ ARDOUR_UI::install_actions () ActionManager::session_sensitive_actions.push_back (act); ActionManager::register_toggle_action (common_actions, X_("toggle-mixer"), S_("Window|Mixer"), sigc::mem_fun(*this, &ARDOUR_UI::toggle_mixer_window)); - ActionManager::register_action (common_actions, X_("toggle-mixer-on-top"), _("Mixer on Top"), sigc::mem_fun(*this, &ARDOUR_UI::toggle_mixer_on_top)); + ActionManager::register_action (common_actions, X_("toggle-editor-mixer"), _("Toggle Editor+Mixer"), sigc::mem_fun(*this, &ARDOUR_UI::toggle_editor_mixer)); ActionManager::register_toggle_action (common_actions, X_("ToggleRCOptionsEditor"), _("Preferences"), sigc::mem_fun(*this, &ARDOUR_UI::toggle_rc_options_window)); ActionManager::register_toggle_action (common_actions, X_("ToggleSessionOptionsEditor"), _("Properties"), sigc::mem_fun(*this, &ARDOUR_UI::toggle_session_options_window)); act = ActionManager::register_toggle_action (common_actions, X_("ToggleInspector"), _("Tracks and Busses"), sigc::mem_fun(*this, &ARDOUR_UI::toggle_route_params_window)); diff --git a/gtk2_ardour/editor.cc b/gtk2_ardour/editor.cc index 3f06a5b87b..bad7fb06ca 100644 --- a/gtk2_ardour/editor.cc +++ b/gtk2_ardour/editor.cc @@ -233,7 +233,8 @@ pane_size_watcher (Paned* pane) } Editor::Editor () - : _join_object_range_state (JOIN_OBJECT_RANGE_NONE) + : VisibilityTracker (*((Gtk::Window*) this)) + , _join_object_range_state (JOIN_OBJECT_RANGE_NONE) /* time display buttons */ , minsec_label (_("Mins:Secs")) diff --git a/gtk2_ardour/editor.h b/gtk2_ardour/editor.h index 160400c22b..f9bbd6ef1a 100644 --- a/gtk2_ardour/editor.h +++ b/gtk2_ardour/editor.h @@ -37,6 +37,7 @@ #include "gtkmm2ext/dndtreeview.h" #include "gtkmm2ext/stateful_button.h" #include "gtkmm2ext/bindings.h" +#include "gtkmm2ext/visibility_tracker.h" #include "pbd/stateful.h" #include "pbd/signals.h" @@ -135,7 +136,7 @@ class ImageFrameSocketHandler ; class TimeAxisViewItem ; /* </CMT Additions> */ -class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARDOUR::SessionHandlePtr +class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARDOUR::SessionHandlePtr, public Gtkmm2ext::VisibilityTracker { public: Editor (); diff --git a/gtk2_ardour/mixer_ui.cc b/gtk2_ardour/mixer_ui.cc index 74556c8eda..e3a97daa6f 100644 --- a/gtk2_ardour/mixer_ui.cc +++ b/gtk2_ardour/mixer_ui.cc @@ -83,6 +83,7 @@ Mixer_UI::instance () Mixer_UI::Mixer_UI () : Window (Gtk::WINDOW_TOPLEVEL) + , VisibilityTracker (*((Gtk::Window*) this)) , _visible (false) , no_track_list_redisplay (false) , in_group_row_change (false) diff --git a/gtk2_ardour/mixer_ui.h b/gtk2_ardour/mixer_ui.h index 2946d0ae59..8a293f7f9f 100644 --- a/gtk2_ardour/mixer_ui.h +++ b/gtk2_ardour/mixer_ui.h @@ -40,6 +40,8 @@ #include "ardour/types.h" #include "ardour/session_handle.h" +#include "gtkmm2ext/visibility_tracker.h" + #include "enums.h" #include "mixer_actor.h" @@ -53,7 +55,7 @@ class PluginSelector; class MixerGroupTabs; class MonitorSection; -class Mixer_UI : public Gtk::Window, public PBD::ScopedConnectionList, public ARDOUR::SessionHandlePtr, public MixerActor +class Mixer_UI : public Gtk::Window, public PBD::ScopedConnectionList, public ARDOUR::SessionHandlePtr, public MixerActor, public Gtkmm2ext::VisibilityTracker { public: static Mixer_UI* instance(); diff --git a/gtk2_ardour/mnemonic-us.bindings.in b/gtk2_ardour/mnemonic-us.bindings.in index 0f0415c983..ef596478fc 100644 --- a/gtk2_ardour/mnemonic-us.bindings.in +++ b/gtk2_ardour/mnemonic-us.bindings.in @@ -219,7 +219,7 @@ This mode provides many different operations on both regions and control points, @sess|Main/AddTrackBus|<@PRIMARY@><@TERTIARY@>n|add track(s) or bus(ses) @sess|Main/New|<@PRIMARY@>n|open a new session @rop|Region/toggle-region-mute|<@PRIMARY@>m|mute/unmute -@wvis|Common/toggle-mixer-on-top|<@WINDOW@>m|rotate editor \& mixer window +@wvis|Common/toggle-editor-mixer|<@WINDOW@>m|rotate editor \& mixer window ;; arrow keys, navigation etc. diff --git a/libs/gtkmm2ext/gtkmm2ext/visibility_tracker.h b/libs/gtkmm2ext/gtkmm2ext/visibility_tracker.h index 6415dd6d2b..f4ed62bb21 100644 --- a/libs/gtkmm2ext/gtkmm2ext/visibility_tracker.h +++ b/libs/gtkmm2ext/gtkmm2ext/visibility_tracker.h @@ -35,6 +35,10 @@ class VisibilityTracker { void cycle_visibility (); + bool fully_visible() const; + bool not_visible() const; + bool partially_visible() const; + private: Gtk::Window& window; GdkVisibilityState _visibility; diff --git a/libs/gtkmm2ext/visibility_tracker.cc b/libs/gtkmm2ext/visibility_tracker.cc index c0aabdfca6..d5a020d370 100644 --- a/libs/gtkmm2ext/visibility_tracker.cc +++ b/libs/gtkmm2ext/visibility_tracker.cc @@ -41,10 +41,27 @@ VisibilityTracker::handle_visibility_notify_event (GdkEventVisibility* ev) void VisibilityTracker::cycle_visibility () { - if (window.is_mapped() && (_visibility == GDK_VISIBILITY_UNOBSCURED)) { + if (fully_visible ()) { window.hide (); } else { window.present (); } } +bool +VisibilityTracker::fully_visible () const +{ + return window.is_mapped() && (_visibility == GDK_VISIBILITY_UNOBSCURED); +} + +bool +VisibilityTracker::not_visible () const +{ + return !window.is_mapped() || (_visibility == GDK_VISIBILITY_FULLY_OBSCURED); +} + +bool +VisibilityTracker::partially_visible () const +{ + return window.is_mapped() && (_visibility == GDK_VISIBILITY_PARTIAL); +} diff --git a/tools/linux_packaging/build b/tools/linux_packaging/build index b332365407..9f70f95eb2 100755 --- a/tools/linux_packaging/build +++ b/tools/linux_packaging/build @@ -530,9 +530,13 @@ done if test x$WITH_HARVID != x ; then cd $APPBIN - HARVID_VERSION=$(curl http://ardour.org/files/video-tools/latest_version_numer.txt) + HARVID_VERSION=$(curl http://ardour.org/files/video-tools/harvid_version.txt) curl -L http://ardour.org/files/video-tools/harvid-${MULTIARCH}-${HARVID_VERSION}.tgz \ | tar -x -z --exclude=README --exclude=harvid.1 --strip-components=1 || exit 1 + XJADEO_VERSION=$(curl http://ardour.org/files/video-tools/xjadeo_version.txt) + curl -L http://ardour.org/files/video-tools/xjadeo-${MULTIARCH}-${XJADEO_VERSION}.tgz \ + | tar -x -z --exclude=README --exclude=xjadeo.1 --strip-components=1 || exit 1 + mv xjadeo xjremote cd - fi diff --git a/tools/videotimeline/install_video_tools.sh b/tools/videotimeline/install_video_tools.sh new file mode 100755 index 0000000000..8ad900a99e --- /dev/null +++ b/tools/videotimeline/install_video_tools.sh @@ -0,0 +1,146 @@ +#!/bin/sh +TARGETDIR="$1" + +if test -z "$(which curl)"; then + echo "This script requires 'curl' - please install it" >&2 + exit 1 +fi + +############################################################################### +### look-up architecture + +case $(uname -m) in + i[3456789]86|x86|i86pc) + echo "Architecture is x86" + MULTIARCH="i386" + ;; + x86_64|amd64|AMD64) + echo "Architecture is x86_64" + MULTIARCH="x86_64" + ;; + *) + echo + echo "ERROR: Unknown architecture `uname -m`" >&2 + exit 1 + ;; +esac + +case $(uname) in + Linux|linux) + MULTIARCH="${MULTIARCH}-linux-gnu" + ;; + *) + echo + echo "ERROR: Platform `uname` is not supported by this script" >&2 + exit 1 + ;; +esac + +echo "Multiarch triplet is '$MULTIARCH'" + + +############################################################################### +### install target directory + +checkdir () { + DUT="$1" + CHECKPATH="${2:-yes}" + ECHO="${3:-echo}" + + if test -z "$DUT"; then + echo "-1" + return + fi + + if test ! -d "$DUT"; then + $ECHO "ERROR: '$DUT' is not a directory'"; >&2 + echo "-1" + return + fi + + if test ! -w "$DUT"; then + $ECHO "ERROR: no write permissions for '$DUT'" >&2 + echo "-1" + return + fi + + echo $PATH | grep -q "$DUT" + if test $? != 0; then + if test "$CHECKPATH" != "yes"; then + $ECHO "WARNING: '$DUT' is not in \$PATH" >&2 + else + $ECHO "ERROR: '$DUT' is not in \$PATH" >&2 + echo "-1" + return + fi + fi + + echo 0 +} + +while test $(checkdir "$TARGETDIR" no) != 0 ; do + + ARDOUR=$(ls -td /opt/Ardour* 2>/dev/null | head -n 1) + if test -n "${ARDOUR}" -a $(checkdir "${ARDOUR}/bin" no true) = 0; then + echo -n "found ardour installation in '${ARDOUR}/bin'. Install there? [Y|n] " + read a; + if test "$a" != "n" -a "$a" != "N"; then + TARGETDIR="${ARDOUR}/bin" + continue + fi + fi + + if test $(checkdir "/usr/bin" yes true) = 0; then + echo -n "Can write to '/usr/bin' Install there? [Y|n] " + read a; + if test "$a" != "n" -a "$a" != "N"; then + TARGETDIR="/usr/bin" + continue + fi + fi + + if test $(checkdir "${HOME}/bin" yes true) = 0; then + echo -n "Found '${HOME}/bin' in PATH. Install there? [Y|n] " + read a; + if test "$a" != "n" -a "$a" != "N"; then + TARGETDIR="${HOME}/bin" + continue + fi + fi + + if test $(checkdir "/usr/local/bin" yes true) = 0; then + echo -n "Can write to '/usr/local/bin' Install there? [Y|n] " + read a; + if test "$a" != "n" -a "$a" != "N"; then + TARGETDIR="/usr/local/bin" + continue + fi + fi + + echo + echo "ERROR: Cannot find a suitable installation directory" >&2 + echo "run: $0 /install/path/bin" >&2 + echo "'/install/path/bin' must be an existing directory and should be in \$PATH" >&2 + exit 1 +done + +############################################################################### +### actual install procedure + +echo "installing video-tools to '${TARGETDIR}'." +cd "$TARGETDIR" || exit 1 + +HARVID_VERSION=$(curl -s http://ardour.org/files/video-tools/harvid_version.txt) +echo "Downloading harvid-${MULTIARCH}-${HARVID_VERSION}." +curl -L --progress-bar \ + http://ardour.org/files/video-tools/harvid-${MULTIARCH}-${HARVID_VERSION}.tgz \ + | tar -x -z --exclude=README --exclude=harvid.1 --strip-components=1 || exit 1 + +XJADEO_VERSION=$(curl -s http://ardour.org/files/video-tools/xjadeo_version.txt) +echo "Downloading xjadeo-${MULTIARCH}-${XJADEO_VERSION}." +curl -L --progress-bar \ + http://ardour.org/files/video-tools/xjadeo-${MULTIARCH}-${XJADEO_VERSION}.tgz \ + | tar -x -z --exclude=README --exclude=xjadeo.1 --strip-components=1 || exit 1 +mv xjadeo xjremote + +echo "ardour video tools installed successfully." |