mirror of
https://github.com/Ardour/ardour.git
synced 2025-12-08 07:45:00 +01:00
Merge branch 'master' into cairocanvas
This commit is contained in:
commit
54bf06e63c
13 changed files with 224 additions and 20 deletions
|
|
@ -506,7 +506,7 @@
|
||||||
</menu>
|
</menu>
|
||||||
<menu action = 'WindowMenu'>
|
<menu action = 'WindowMenu'>
|
||||||
<menuitem action='toggle-mixer'/>
|
<menuitem action='toggle-mixer'/>
|
||||||
<menuitem action='toggle-mixer-on-top'/>
|
<menuitem action='toggle-editor-mixer'/>
|
||||||
|
|
||||||
<separator/>
|
<separator/>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -309,7 +309,7 @@ class ARDOUR_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr
|
||||||
void goto_editor_window ();
|
void goto_editor_window ();
|
||||||
void goto_mixer_window ();
|
void goto_mixer_window ();
|
||||||
void toggle_mixer_window ();
|
void toggle_mixer_window ();
|
||||||
void toggle_mixer_on_top ();
|
void toggle_editor_mixer ();
|
||||||
|
|
||||||
int setup_windows ();
|
int setup_windows ();
|
||||||
void setup_transport ();
|
void setup_transport ();
|
||||||
|
|
|
||||||
|
|
@ -150,21 +150,49 @@ ARDOUR_UI::toggle_mixer_window ()
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
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 ();
|
goto_editor_window ();
|
||||||
} else {
|
} 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 ();
|
goto_mixer_window ();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -239,7 +239,7 @@ ARDOUR_UI::install_actions ()
|
||||||
ActionManager::session_sensitive_actions.push_back (act);
|
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_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_("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));
|
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));
|
act = ActionManager::register_toggle_action (common_actions, X_("ToggleInspector"), _("Tracks and Busses"), sigc::mem_fun(*this, &ARDOUR_UI::toggle_route_params_window));
|
||||||
|
|
|
||||||
|
|
@ -233,7 +233,8 @@ pane_size_watcher (Paned* pane)
|
||||||
}
|
}
|
||||||
|
|
||||||
Editor::Editor ()
|
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 */
|
/* time display buttons */
|
||||||
, minsec_label (_("Mins:Secs"))
|
, minsec_label (_("Mins:Secs"))
|
||||||
|
|
|
||||||
|
|
@ -37,6 +37,7 @@
|
||||||
#include "gtkmm2ext/dndtreeview.h"
|
#include "gtkmm2ext/dndtreeview.h"
|
||||||
#include "gtkmm2ext/stateful_button.h"
|
#include "gtkmm2ext/stateful_button.h"
|
||||||
#include "gtkmm2ext/bindings.h"
|
#include "gtkmm2ext/bindings.h"
|
||||||
|
#include "gtkmm2ext/visibility_tracker.h"
|
||||||
|
|
||||||
#include "pbd/stateful.h"
|
#include "pbd/stateful.h"
|
||||||
#include "pbd/signals.h"
|
#include "pbd/signals.h"
|
||||||
|
|
@ -135,7 +136,7 @@ class ImageFrameSocketHandler ;
|
||||||
class TimeAxisViewItem ;
|
class TimeAxisViewItem ;
|
||||||
/* </CMT Additions> */
|
/* </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:
|
public:
|
||||||
Editor ();
|
Editor ();
|
||||||
|
|
|
||||||
|
|
@ -83,6 +83,7 @@ Mixer_UI::instance ()
|
||||||
|
|
||||||
Mixer_UI::Mixer_UI ()
|
Mixer_UI::Mixer_UI ()
|
||||||
: Window (Gtk::WINDOW_TOPLEVEL)
|
: Window (Gtk::WINDOW_TOPLEVEL)
|
||||||
|
, VisibilityTracker (*((Gtk::Window*) this))
|
||||||
, _visible (false)
|
, _visible (false)
|
||||||
, no_track_list_redisplay (false)
|
, no_track_list_redisplay (false)
|
||||||
, in_group_row_change (false)
|
, in_group_row_change (false)
|
||||||
|
|
|
||||||
|
|
@ -40,6 +40,8 @@
|
||||||
#include "ardour/types.h"
|
#include "ardour/types.h"
|
||||||
#include "ardour/session_handle.h"
|
#include "ardour/session_handle.h"
|
||||||
|
|
||||||
|
#include "gtkmm2ext/visibility_tracker.h"
|
||||||
|
|
||||||
#include "enums.h"
|
#include "enums.h"
|
||||||
#include "mixer_actor.h"
|
#include "mixer_actor.h"
|
||||||
|
|
||||||
|
|
@ -53,7 +55,7 @@ class PluginSelector;
|
||||||
class MixerGroupTabs;
|
class MixerGroupTabs;
|
||||||
class MonitorSection;
|
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:
|
public:
|
||||||
static Mixer_UI* instance();
|
static Mixer_UI* instance();
|
||||||
|
|
|
||||||
|
|
@ -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/AddTrackBus|<@PRIMARY@><@TERTIARY@>n|add track(s) or bus(ses)
|
||||||
@sess|Main/New|<@PRIMARY@>n|open a new session
|
@sess|Main/New|<@PRIMARY@>n|open a new session
|
||||||
@rop|Region/toggle-region-mute|<@PRIMARY@>m|mute/unmute
|
@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.
|
;; arrow keys, navigation etc.
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -35,6 +35,10 @@ class VisibilityTracker {
|
||||||
|
|
||||||
void cycle_visibility ();
|
void cycle_visibility ();
|
||||||
|
|
||||||
|
bool fully_visible() const;
|
||||||
|
bool not_visible() const;
|
||||||
|
bool partially_visible() const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Gtk::Window& window;
|
Gtk::Window& window;
|
||||||
GdkVisibilityState _visibility;
|
GdkVisibilityState _visibility;
|
||||||
|
|
|
||||||
|
|
@ -41,10 +41,27 @@ VisibilityTracker::handle_visibility_notify_event (GdkEventVisibility* ev)
|
||||||
void
|
void
|
||||||
VisibilityTracker::cycle_visibility ()
|
VisibilityTracker::cycle_visibility ()
|
||||||
{
|
{
|
||||||
if (window.is_mapped() && (_visibility == GDK_VISIBILITY_UNOBSCURED)) {
|
if (fully_visible ()) {
|
||||||
window.hide ();
|
window.hide ();
|
||||||
} else {
|
} else {
|
||||||
window.present ();
|
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);
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -530,9 +530,13 @@ done
|
||||||
|
|
||||||
if test x$WITH_HARVID != x ; then
|
if test x$WITH_HARVID != x ; then
|
||||||
cd $APPBIN
|
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 \
|
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
|
| 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 -
|
cd -
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
|
||||||
146
tools/videotimeline/install_video_tools.sh
Executable file
146
tools/videotimeline/install_video_tools.sh
Executable file
|
|
@ -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."
|
||||||
Loading…
Add table
Add a link
Reference in a new issue