editor window layout changes, and lots more
git-svn-id: svn://localhost/trunk/ardour2@187 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
parent
088a5289dc
commit
3733c995c5
|
@ -2,10 +2,16 @@
|
|||
|
||||
(gtk_accel_path "<Actions>/Common/Quit" "<Control>q")
|
||||
(gtk_accel_path "<Actions>/Common/Save" "<Control>s")
|
||||
(gtk_accel_path "<Actions>/Editor/toggle-playback" "space")
|
||||
(gtk_accel_path "<Actions>/Common/TransportForward" "Right")
|
||||
(gtk_accel_path "<Actions>/Common/TransportRewind" "Left")
|
||||
(gtk_accel_path "<Actions>/Common/TransportRecord" "R")
|
||||
(gtk_accel_path "<Actions>/Common/TransportGotoStart" "<Control>a")
|
||||
(gtk_accel_path "<Actions>/Common/TransportGotoEnd" "<Control>e")
|
||||
|
||||
(gtk_accel_path "<Actions>/Editor/toggle-playback" "space")
|
||||
(gtk_accel_path "<Actions>/Editor/set-playhead" "p")
|
||||
(gtk_accel_path "<Actions>/Editor/set-edit-cursor" "e")
|
||||
(gtk_accel_path "<Actions>/Editor/undo" "<Control>z")
|
||||
(gtk_accel_path "<Actions>/Editor/redo" "<Control>r")
|
||||
|
||||
|
||||
|
|
|
@ -511,6 +511,13 @@ style "track_name_display"
|
|||
bg[ACTIVE] = { 0.26, 0.26, 0.26 }
|
||||
}
|
||||
|
||||
style "active_track_name_display"
|
||||
{
|
||||
font_name = "sans medium 10"
|
||||
text[NORMAL] = { 0.26, 0.26, 0.26 }
|
||||
base[NORMAL] = { 0.89, 0.89, 0.89 }
|
||||
}
|
||||
|
||||
style "track_separator"
|
||||
{
|
||||
bg[NORMAL] = { 0.40, 0.40, 0.40 }
|
||||
|
@ -993,6 +1000,8 @@ widget "*TrackEditIndicator6*" style "edit_group_3"
|
|||
widget "*TrackEditIndicator7*" style "edit_group_3"
|
||||
widget "*EditorTrackNameDisplay" style "track_name_display"
|
||||
widget "*EditorTrackNameDisplay*" style "track_name_display"
|
||||
widget "*EditorActiveTrackNameDisplay" style "active_track_name_display"
|
||||
widget "*EditorActiveTrackNameDisplay*" style "active_track_name_display"
|
||||
widget "*EditorRegionList" style "region_list_display"
|
||||
widget "*CrossfadeEditAuditionButton" style "red_when_active"
|
||||
widget "*CrossfadeEditAuditionButton*" style "red_when_active"
|
||||
|
|
|
@ -358,10 +358,7 @@ ARDOUR_UI::setup_transport ()
|
|||
ARDOUR_UI::Clock.connect (bind (mem_fun (secondary_clock, &AudioClock::set), false));
|
||||
|
||||
primary_clock.set_mode (AudioClock::SMPTE);
|
||||
primary_clock.set_name ("TransportClockDisplay");
|
||||
secondary_clock.set_mode (AudioClock::BBT);
|
||||
secondary_clock.set_name ("TransportClockDisplay");
|
||||
|
||||
|
||||
primary_clock.ValueChanged.connect (mem_fun(*this, &ARDOUR_UI::primary_clock_value_changed));
|
||||
secondary_clock.ValueChanged.connect (mem_fun(*this, &ARDOUR_UI::secondary_clock_value_changed));
|
||||
|
|
|
@ -296,23 +296,39 @@ AudioClock::setup_events ()
|
|||
ms_hours_ebox.signal_focus_out_event().connect (bind (mem_fun(*this, &AudioClock::field_focus_out_event), MS_Hours));
|
||||
ms_minutes_ebox.signal_focus_out_event().connect (bind (mem_fun(*this, &AudioClock::field_focus_out_event), MS_Minutes));
|
||||
ms_seconds_ebox.signal_focus_out_event().connect (bind (mem_fun(*this, &AudioClock::field_focus_out_event), MS_Seconds));
|
||||
|
||||
Gtkmm2ext::set_size_request_to_display_given_text (hours_label, "-88", 0, 2);
|
||||
Gtkmm2ext::set_size_request_to_display_given_text (minutes_label, "88", 0, 2);
|
||||
Gtkmm2ext::set_size_request_to_display_given_text (seconds_label, "88", 0, 2);
|
||||
Gtkmm2ext::set_size_request_to_display_given_text (frames_label, "88", 0, 2);
|
||||
|
||||
Gtkmm2ext::set_size_request_to_display_given_text (bars_label, "-888", 0, 2);
|
||||
Gtkmm2ext::set_size_request_to_display_given_text (beats_label, "88", 0, 2);
|
||||
Gtkmm2ext::set_size_request_to_display_given_text (ticks_label, "8888", 0, 2);
|
||||
|
||||
Gtkmm2ext::set_size_request_to_display_given_text (audio_frames_label, "4294967296", 0, 2);
|
||||
}
|
||||
|
||||
void
|
||||
AudioClock::on_realize ()
|
||||
{
|
||||
HBox::on_realize ();
|
||||
|
||||
/* styles are not available until the widgets are bound to a window */
|
||||
|
||||
switch (_mode) {
|
||||
case SMPTE:
|
||||
Gtkmm2ext::set_size_request_to_display_given_text (hours_label, "-88", 0, 2);
|
||||
Gtkmm2ext::set_size_request_to_display_given_text (minutes_label, "88", 0, 2);
|
||||
Gtkmm2ext::set_size_request_to_display_given_text (seconds_label, "88", 0, 2);
|
||||
Gtkmm2ext::set_size_request_to_display_given_text (frames_label, "88", 0, 2);
|
||||
break;
|
||||
|
||||
case BBT:
|
||||
Gtkmm2ext::set_size_request_to_display_given_text (bars_label, "-888", 0, 2);
|
||||
Gtkmm2ext::set_size_request_to_display_given_text (beats_label, "88", 0, 2);
|
||||
Gtkmm2ext::set_size_request_to_display_given_text (ticks_label, "8888", 0, 2);
|
||||
break;
|
||||
|
||||
case MinSec:
|
||||
Gtkmm2ext::set_size_request_to_display_given_text (ms_hours_label, "99", 0, 2);
|
||||
Gtkmm2ext::set_size_request_to_display_given_text (ms_minutes_label, "99", 0, 2);
|
||||
Gtkmm2ext::set_size_request_to_display_given_text (ms_seconds_label, "99", 0, 2);
|
||||
break;
|
||||
|
||||
case Frames:
|
||||
Gtkmm2ext::set_size_request_to_display_given_text (audio_frames_label, "4294967296", 0, 2);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -469,7 +485,7 @@ AudioClock::set_session (Session *s)
|
|||
}
|
||||
}
|
||||
|
||||
gint
|
||||
bool
|
||||
AudioClock::field_key_release_event (GdkEventKey *ev, Field field)
|
||||
{
|
||||
Label *label = 0;
|
||||
|
@ -693,7 +709,7 @@ AudioClock::field_key_release_event (GdkEventKey *ev, Field field)
|
|||
return TRUE;
|
||||
}
|
||||
|
||||
gint
|
||||
bool
|
||||
AudioClock::field_focus_in_event (GdkEventFocus *ev, Field field)
|
||||
{
|
||||
key_entry_state = 0;
|
||||
|
@ -750,7 +766,7 @@ AudioClock::field_focus_in_event (GdkEventFocus *ev, Field field)
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
gint
|
||||
bool
|
||||
AudioClock::field_focus_out_event (GdkEventFocus *ev, Field field)
|
||||
{
|
||||
switch (field) {
|
||||
|
@ -807,7 +823,7 @@ AudioClock::field_focus_out_event (GdkEventFocus *ev, Field field)
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
gint
|
||||
bool
|
||||
AudioClock::field_button_release_event (GdkEventButton *ev, Field field)
|
||||
{
|
||||
|
||||
|
@ -887,7 +903,7 @@ AudioClock::field_button_release_event (GdkEventButton *ev, Field field)
|
|||
return TRUE;
|
||||
}
|
||||
|
||||
gint
|
||||
bool
|
||||
AudioClock::field_button_press_event (GdkEventButton *ev, Field field)
|
||||
{
|
||||
if (session == 0) return FALSE;
|
||||
|
@ -964,7 +980,7 @@ AudioClock::field_button_press_event (GdkEventButton *ev, Field field)
|
|||
return TRUE;
|
||||
}
|
||||
|
||||
gint
|
||||
bool
|
||||
AudioClock::field_motion_notify_event (GdkEventMotion *ev, Field field)
|
||||
{
|
||||
if (session == 0 || !dragging) {
|
||||
|
@ -1675,20 +1691,36 @@ AudioClock::set_mode (Mode m)
|
|||
switch (_mode) {
|
||||
case SMPTE:
|
||||
clock_base.add (smpte_packer_hbox);
|
||||
Gtkmm2ext::set_size_request_to_display_given_text (hours_label, "-88", 0, 2);
|
||||
Gtkmm2ext::set_size_request_to_display_given_text (minutes_label, "88", 0, 2);
|
||||
Gtkmm2ext::set_size_request_to_display_given_text (seconds_label, "88", 0, 2);
|
||||
Gtkmm2ext::set_size_request_to_display_given_text (frames_label, "88", 0, 2);
|
||||
break;
|
||||
|
||||
case BBT:
|
||||
clock_base.add (bbt_packer_hbox);
|
||||
Gtkmm2ext::set_size_request_to_display_given_text (bars_label, "-888", 0, 2);
|
||||
Gtkmm2ext::set_size_request_to_display_given_text (beats_label, "88", 0, 2);
|
||||
Gtkmm2ext::set_size_request_to_display_given_text (ticks_label, "8888", 0, 2);
|
||||
break;
|
||||
|
||||
case MinSec:
|
||||
clock_base.add (minsec_packer_hbox);
|
||||
Gtkmm2ext::set_size_request_to_display_given_text (ms_hours_label, "99", 0, 2);
|
||||
Gtkmm2ext::set_size_request_to_display_given_text (ms_minutes_label, "99", 0, 2);
|
||||
Gtkmm2ext::set_size_request_to_display_given_text (ms_seconds_label, "99", 0, 2);
|
||||
break;
|
||||
|
||||
case Frames:
|
||||
clock_base.add (frames_packer_hbox);
|
||||
Gtkmm2ext::set_size_request_to_display_given_text (audio_frames_label, "4294967296", 0, 2);
|
||||
|
||||
case Off:
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
set (last_when, true);
|
||||
clock_base.show_all ();
|
||||
key_entry_state = 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -150,12 +150,12 @@ class AudioClock : public Gtk::HBox
|
|||
|
||||
void on_realize ();
|
||||
|
||||
gint field_motion_notify_event (GdkEventMotion *ev, Field);
|
||||
gint field_button_press_event (GdkEventButton *ev, Field);
|
||||
gint field_button_release_event (GdkEventButton *ev, Field);
|
||||
gint field_key_release_event (GdkEventKey *, Field);
|
||||
gint field_focus_in_event (GdkEventFocus *, Field);
|
||||
gint field_focus_out_event (GdkEventFocus *, Field);
|
||||
bool field_motion_notify_event (GdkEventMotion *ev, Field);
|
||||
bool field_button_press_event (GdkEventButton *ev, Field);
|
||||
bool field_button_release_event (GdkEventButton *ev, Field);
|
||||
bool field_key_release_event (GdkEventKey *, Field);
|
||||
bool field_focus_in_event (GdkEventFocus *, Field);
|
||||
bool field_focus_out_event (GdkEventFocus *, Field);
|
||||
|
||||
void set_smpte (jack_nframes_t, bool);
|
||||
void set_bbt (jack_nframes_t, bool);
|
||||
|
|
|
@ -168,11 +168,6 @@ AudioTimeAxisView::AudioTimeAxisView (PublicEditor& ed, Session& sess, Route& rt
|
|||
visual_button.signal_clicked().connect (mem_fun(*this, &AudioTimeAxisView::visual_click));
|
||||
hide_button.signal_clicked().connect (mem_fun(*this, &AudioTimeAxisView::hide_click));
|
||||
|
||||
name_entry.signal_activate().connect (mem_fun(*this, &AudioTimeAxisView::name_entry_activated));
|
||||
name_entry.signal_button_press_event().connect (mem_fun(*this, &AudioTimeAxisView::name_entry_button_press_handler));
|
||||
name_entry.signal_button_release_event().connect (mem_fun(*this, &AudioTimeAxisView::name_entry_button_release_handler));
|
||||
name_entry.signal_key_release_event().connect (mem_fun(*this, &AudioTimeAxisView::name_entry_key_release_handler));
|
||||
|
||||
if (is_audio_track()) {
|
||||
controls_table.attach (*rec_enable_button, 6, 7, 0, 1, Gtk::FILL|Gtk::EXPAND, Gtk::FILL|Gtk::EXPAND, 0, 0);
|
||||
}
|
||||
|
@ -1090,45 +1085,6 @@ AudioTimeAxisView::playlist () const
|
|||
}
|
||||
}
|
||||
|
||||
gint
|
||||
AudioTimeAxisView::name_entry_button_press_handler (GdkEventButton *ev)
|
||||
{
|
||||
if (ev->button == 3) {
|
||||
return stop_signal (name_entry, "button_press_event");
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
gint
|
||||
AudioTimeAxisView::name_entry_button_release_handler (GdkEventButton *ev)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
gint
|
||||
AudioTimeAxisView::name_entry_key_release_handler (GdkEventKey* ev)
|
||||
{
|
||||
switch (ev->keyval) {
|
||||
case GDK_Tab:
|
||||
case GDK_Up:
|
||||
case GDK_Down:
|
||||
name_entry_changed ();
|
||||
return TRUE;
|
||||
|
||||
default:
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
AudioTimeAxisView::name_entry_activated ()
|
||||
{
|
||||
/* this should drop focus from the entry,
|
||||
and cause a call to name_entry_changed()
|
||||
*/
|
||||
controls_ebox.grab_focus();
|
||||
}
|
||||
|
||||
void
|
||||
AudioTimeAxisView::name_entry_changed ()
|
||||
{
|
||||
|
|
|
@ -178,11 +178,8 @@ class AudioTimeAxisView : public RouteUI, public TimeAxisView
|
|||
|
||||
void take_name_changed (void *);
|
||||
void route_name_changed (void *);
|
||||
void name_entry_activated ();
|
||||
void name_entry_changed ();
|
||||
gint name_entry_key_release_handler (GdkEventKey*);
|
||||
gint name_entry_button_release_handler (GdkEventButton*);
|
||||
gint name_entry_button_press_handler (GdkEventButton*);
|
||||
|
||||
void on_area_realize ();
|
||||
|
||||
virtual void label_view ();
|
||||
|
|
|
@ -147,6 +147,66 @@ Gdk::Cursor* Editor::speaker_cursor = 0;
|
|||
Gdk::Cursor* Editor::wait_cursor = 0;
|
||||
Gdk::Cursor* Editor::timebar_cursor = 0;
|
||||
|
||||
bool
|
||||
Editor::on_key_press_event (GdkEventKey* ev)
|
||||
{
|
||||
GtkWindow* win = gobj();
|
||||
|
||||
/* This exists to allow us to override the way GTK handles
|
||||
key events. The normal sequence is:
|
||||
|
||||
a) event is delivered to a GtkWindow
|
||||
b) accelerators/mnemonics are activated
|
||||
c) if (b) didn't handle the event, propagate to
|
||||
the focus widget and/or focus chain
|
||||
|
||||
The problem with this is that if the accelerators include
|
||||
keys without modifiers, such as the space bar or the
|
||||
letter "e", then pressing the key while typing into
|
||||
a text entry widget results in the accelerator being
|
||||
activated, instead of the desired letter appearing
|
||||
in the text entry.
|
||||
|
||||
There is no good way of fixing this, but this
|
||||
represents a compromise. The idea is that
|
||||
key events involving modifiers (not Shift)
|
||||
get routed into the activation pathway first, then
|
||||
get propagated to the focus widget if necessary.
|
||||
|
||||
If the key event doesn't involve modifiers,
|
||||
we deliver to the focus widget first, thus allowing
|
||||
it to get "normal text" without interference
|
||||
from acceleration.
|
||||
|
||||
Of course, this can also be problematic: if there
|
||||
is a widget with focus, then it will swallow
|
||||
all "normal text" accelerators.
|
||||
*/
|
||||
|
||||
if (ev->state & ~Gdk::SHIFT_MASK) {
|
||||
/* modifiers in effect, accelerate first */
|
||||
if (!gtk_window_activate_key (win, ev)) {
|
||||
return gtk_window_propagate_key_event (win, ev);
|
||||
} else {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
/* no modifiers, propagate first */
|
||||
|
||||
if (!gtk_window_propagate_key_event (win, ev)) {
|
||||
return gtk_window_activate_key (win, ev);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void
|
||||
show_me_the_size (Requisition* r, const char* what)
|
||||
{
|
||||
cerr << "size of " << what << " = " << r->width << " x " << r->height << endl;
|
||||
}
|
||||
|
||||
Editor::Editor (AudioEngine& eng)
|
||||
: engine (eng),
|
||||
|
||||
|
@ -163,8 +223,13 @@ Editor::Editor (AudioEngine& eng)
|
|||
transport_mark_label (_("Loop/Punch Ranges")),
|
||||
|
||||
edit_packer (3, 3, false),
|
||||
edit_hscroll_left_arrow (Gtk::ARROW_LEFT, Gtk::SHADOW_OUT),
|
||||
edit_hscroll_right_arrow (Gtk::ARROW_RIGHT, Gtk::SHADOW_OUT),
|
||||
|
||||
/* the values here don't matter: layout widgets
|
||||
reset them as needed.
|
||||
*/
|
||||
|
||||
vertical_adjustment (0.0, 0.0, 400.0, 10),
|
||||
horizontal_adjustment (0.0, 0.0, 1200.0, 20),
|
||||
|
||||
/* tool bar related */
|
||||
|
||||
|
@ -262,6 +327,7 @@ Editor::Editor (AudioEngine& eng)
|
|||
_xfade_visibility = true;
|
||||
editor_ruler_menu = 0;
|
||||
no_ruler_shown_update = false;
|
||||
edit_hscroll_dragging = false;
|
||||
edit_group_list_menu = 0;
|
||||
route_list_menu = 0;
|
||||
region_list_menu = 0;
|
||||
|
@ -277,7 +343,6 @@ Editor::Editor (AudioEngine& eng)
|
|||
region_edit_menu_split_item = 0;
|
||||
temp_location = 0;
|
||||
region_edit_menu_split_multichannel_item = 0;
|
||||
edit_hscroll_dragging = false;
|
||||
leftmost_frame = 0;
|
||||
ignore_mouse_mode_toggle = false;
|
||||
current_stepping_trackview = 0;
|
||||
|
@ -309,45 +374,30 @@ Editor::Editor (AudioEngine& eng)
|
|||
initialize_rulers ();
|
||||
initialize_canvas ();
|
||||
|
||||
track_canvas_scroller.add (track_canvas);
|
||||
track_canvas_scroller.set_policy (POLICY_NEVER, POLICY_NEVER);
|
||||
track_canvas_scroller.set_name ("TrackCanvasScroller");
|
||||
|
||||
track_canvas_scroller.get_vadjustment()->signal_value_changed().connect (mem_fun(*this, &Editor::tie_vertical_scrolling));
|
||||
track_canvas_scroller.get_vadjustment()->set_step_increment (10.0);
|
||||
|
||||
track_canvas_scroller.get_hadjustment()->set_lower (0.0);
|
||||
track_canvas_scroller.get_hadjustment()->set_upper (1200.0);
|
||||
track_canvas_scroller.get_hadjustment()->set_step_increment (20.0);
|
||||
track_canvas_scroller.get_hadjustment()->signal_value_changed().connect (mem_fun(*this, &Editor::canvas_horizontally_scrolled));
|
||||
|
||||
edit_vscrollbar.set_adjustment(*track_canvas_scroller.get_vadjustment());
|
||||
edit_hscrollbar.set_adjustment(*track_canvas_scroller.get_hadjustment());
|
||||
|
||||
edit_hscrollbar.signal_button_press_event().connect (mem_fun(*this, &Editor::hscroll_slider_button_press));
|
||||
edit_hscrollbar.signal_button_release_event().connect (mem_fun(*this, &Editor::hscroll_slider_button_release));
|
||||
edit_hscrollbar.signal_size_allocate().connect (mem_fun(*this, &Editor::hscroll_slider_allocate));
|
||||
|
||||
time_canvas_scroller.add (time_canvas);
|
||||
time_canvas_scroller.set_policy (POLICY_NEVER, POLICY_NEVER);
|
||||
time_canvas_scroller.set_hadjustment (*track_canvas_scroller.get_hadjustment());
|
||||
time_canvas_scroller.set_name ("TimeCanvasScroller");
|
||||
|
||||
track_canvas_scroller.signal_map_event().connect (mem_fun (*this, &Editor::track_canvas_map_handler));
|
||||
time_canvas_scroller.signal_map_event().connect (mem_fun (*this, &Editor::time_canvas_map_handler));
|
||||
|
||||
edit_controls_vbox.set_spacing (track_spacing);
|
||||
edit_controls_hbox.pack_start (edit_controls_vbox, true, true);
|
||||
edit_controls_scroller.add (edit_controls_hbox);
|
||||
edit_controls_scroller.set_name ("EditControlsBase");
|
||||
edit_controls_scroller.set_policy (Gtk::POLICY_NEVER, Gtk::POLICY_NEVER);
|
||||
horizontal_adjustment.signal_value_changed().connect (mem_fun(*this, &Editor::canvas_horizontally_scrolled));
|
||||
vertical_adjustment.signal_value_changed().connect (mem_fun(*this, &Editor::tie_vertical_scrolling));
|
||||
|
||||
track_canvas.set_hadjustment (horizontal_adjustment);
|
||||
track_canvas.set_vadjustment (vertical_adjustment);
|
||||
time_canvas.set_hadjustment (horizontal_adjustment);
|
||||
|
||||
Viewport* viewport = static_cast<Viewport*> (edit_controls_scroller.get_child());
|
||||
track_canvas.signal_map_event().connect (mem_fun (*this, &Editor::track_canvas_map_handler));
|
||||
time_canvas.signal_map_event().connect (mem_fun (*this, &Editor::time_canvas_map_handler));
|
||||
|
||||
// edit_controls_hbox.pack_start (edit_controls_vbox, true, true);
|
||||
controls_layout.add (edit_controls_vbox);
|
||||
controls_layout.set_name ("EditControlsBase");
|
||||
|
||||
controls_layout.add_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK|Gdk::ENTER_NOTIFY_MASK|Gdk::LEAVE_NOTIFY_MASK);
|
||||
controls_layout.signal_button_release_event().connect (mem_fun(*this, &Editor::edit_controls_button_release));
|
||||
|
||||
viewport->set_shadow_type (Gtk::SHADOW_NONE);
|
||||
viewport->set_name ("EditControlsBase");
|
||||
viewport->add_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK|Gdk::ENTER_NOTIFY_MASK|Gdk::LEAVE_NOTIFY_MASK);
|
||||
viewport->signal_button_release_event().connect (mem_fun(*this, &Editor::edit_controls_button_release));
|
||||
edit_vscrollbar.set_adjustment (vertical_adjustment);
|
||||
edit_hscrollbar.set_adjustment (horizontal_adjustment);
|
||||
|
||||
edit_hscrollbar.signal_button_press_event().connect (mem_fun(*this, &Editor::hscrollbar_button_press));
|
||||
edit_hscrollbar.signal_button_release_event().connect (mem_fun(*this, &Editor::hscrollbar_button_release));
|
||||
edit_hscrollbar.signal_size_allocate().connect (mem_fun(*this, &Editor::hscrollbar_allocate));
|
||||
|
||||
build_cursors ();
|
||||
setup_toolbar ();
|
||||
|
@ -358,7 +408,7 @@ Editor::Editor (AudioEngine& eng)
|
|||
time_canvas_vbox.pack_start (*smpte_ruler, false, false);
|
||||
time_canvas_vbox.pack_start (*frames_ruler, false, false);
|
||||
time_canvas_vbox.pack_start (*bbt_ruler, false, false);
|
||||
time_canvas_vbox.pack_start (time_canvas_scroller, true, true);
|
||||
time_canvas_vbox.pack_start (time_canvas, true, true);
|
||||
time_canvas_vbox.set_size_request (-1, (int)(timebar_height * visible_timebars));
|
||||
|
||||
bbt_label.set_name ("EditorTimeButton");
|
||||
|
@ -416,25 +466,24 @@ Editor::Editor (AudioEngine& eng)
|
|||
for the canvas areas.
|
||||
*/
|
||||
|
||||
track_canvas_event_box.add (track_canvas_scroller);
|
||||
track_canvas_event_box.add (track_canvas);
|
||||
|
||||
time_canvas_event_box.add (time_canvas_vbox);
|
||||
time_canvas_event_box.set_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK|Gdk::POINTER_MOTION_MASK);
|
||||
|
||||
|
||||
edit_packer.set_col_spacings (0);
|
||||
edit_packer.set_row_spacings (0);
|
||||
edit_packer.set_homogeneous (false);
|
||||
edit_packer.set_name ("EditorWindow");
|
||||
|
||||
edit_packer.attach (edit_hscrollbar, 1, 2, 0, 1, FILL|EXPAND, FILL, 0, 0);
|
||||
edit_packer.attach (edit_hscrollbar, 1, 2, 0, 1, FILL|EXPAND, FILL, 0, 0);
|
||||
|
||||
edit_packer.attach (time_button_event_box, 0, 1, 1, 2, FILL, FILL, 0, 0);
|
||||
edit_packer.attach (time_canvas_event_box, 1, 2, 1, 2, FILL|EXPAND, FILL, 0, 0);
|
||||
edit_packer.attach (time_button_event_box, 0, 1, 1, 2, FILL, FILL, 0, 0);
|
||||
edit_packer.attach (time_canvas_event_box, 1, 2, 1, 2, FILL|EXPAND, FILL, 0, 0);
|
||||
|
||||
edit_packer.attach (edit_controls_scroller, 0, 1, 2, 3, FILL,FILL, 0, 0);
|
||||
edit_packer.attach (track_canvas_event_box, 1, 2, 2, 3, FILL|EXPAND, FILL|EXPAND, 0, 0);
|
||||
edit_packer.attach (edit_vscrollbar, 2, 3, 2, 3, FILL, FILL|EXPAND, 0, 0);
|
||||
edit_packer.attach (controls_layout, 0, 1, 2, 3, FILL, FILL, 0, 0);
|
||||
edit_packer.attach (track_canvas_event_box, 1, 2, 2, 3, FILL|EXPAND, FILL|EXPAND, 0, 0);
|
||||
edit_packer.attach (edit_vscrollbar, 2, 3, 2, 3, FILL, FILL|EXPAND, 0, 0);
|
||||
|
||||
edit_frame.set_name ("BaseFrame");
|
||||
edit_frame.set_shadow_type (SHADOW_IN);
|
||||
|
@ -761,9 +810,9 @@ Editor::show_window ()
|
|||
void
|
||||
Editor::tie_vertical_scrolling ()
|
||||
{
|
||||
edit_controls_scroller.get_vadjustment()->set_value (track_canvas_scroller.get_vadjustment()->get_value());
|
||||
double y1 = vertical_adjustment.get_value();
|
||||
controls_layout.get_vadjustment()->set_value (y1);
|
||||
|
||||
float y1 = track_canvas_scroller.get_vadjustment()->get_value();
|
||||
playhead_cursor->set_y_axis(y1);
|
||||
edit_cursor->set_y_axis(y1);
|
||||
}
|
||||
|
@ -804,12 +853,11 @@ Editor::set_frames_per_unit (double fpu)
|
|||
*/
|
||||
|
||||
if (session) {
|
||||
track_canvas_scroller.get_hadjustment()->set_upper (session->current_end_frame() / frames_per_unit);
|
||||
horizontal_adjustment.set_upper (session->current_end_frame() / frames_per_unit);
|
||||
}
|
||||
|
||||
if (!no_zoom_repos_update) {
|
||||
track_canvas_scroller.get_hadjustment()->set_value (leftmost_frame/frames_per_unit);
|
||||
update_hscroller ();
|
||||
horizontal_adjustment.set_value (leftmost_frame/frames_per_unit);
|
||||
update_fixed_rulers ();
|
||||
tempo_map_changed (Change (0));
|
||||
}
|
||||
|
@ -849,10 +897,10 @@ Editor::reposition_x_origin (jack_nframes_t frame)
|
|||
if (frame != leftmost_frame) {
|
||||
leftmost_frame = frame;
|
||||
double pixel = frame_to_pixel (frame);
|
||||
if (pixel >= track_canvas_scroller.get_hadjustment()->get_upper()) {
|
||||
track_canvas_scroller.get_hadjustment()->set_upper (frame_to_pixel (frame + (current_page_frames())));
|
||||
if (pixel >= horizontal_adjustment.get_upper()) {
|
||||
horizontal_adjustment.set_upper (frame_to_pixel (frame + (current_page_frames())));
|
||||
}
|
||||
track_canvas_scroller.get_hadjustment()->set_value (frame/frames_per_unit);
|
||||
horizontal_adjustment.set_value (frame/frames_per_unit);
|
||||
XOriginChanged (); /* EMIT_SIGNAL */
|
||||
}
|
||||
}
|
||||
|
@ -889,14 +937,8 @@ Editor::zoom_adjustment_changed ()
|
|||
void
|
||||
Editor::canvas_horizontally_scrolled ()
|
||||
{
|
||||
/* XXX note the potential loss of accuracy here caused by
|
||||
adjustments being 32bit floats with only a 24 bit mantissa,
|
||||
whereas jack_nframes_t is at least a 32 bit uint32_teger.
|
||||
*/
|
||||
leftmost_frame = (jack_nframes_t) floor (horizontal_adjustment.get_value() * frames_per_unit);
|
||||
|
||||
leftmost_frame = (jack_nframes_t) floor (track_canvas_scroller.get_hadjustment()->get_value() * frames_per_unit);
|
||||
|
||||
update_hscroller ();
|
||||
update_fixed_rulers ();
|
||||
|
||||
if (!edit_hscroll_dragging) {
|
||||
|
@ -1060,11 +1102,9 @@ Editor::handle_new_duration ()
|
|||
reset_scrolling_region ();
|
||||
|
||||
if (session) {
|
||||
track_canvas_scroller.get_hadjustment()->set_upper (session->current_end_frame() / frames_per_unit);
|
||||
track_canvas_scroller.get_hadjustment()->set_value (leftmost_frame/frames_per_unit);
|
||||
horizontal_adjustment.set_upper (session->current_end_frame() / frames_per_unit);
|
||||
horizontal_adjustment.set_value (leftmost_frame/frames_per_unit);
|
||||
}
|
||||
|
||||
update_hscroller ();
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -1231,10 +1271,9 @@ Editor::connect_to_session (Session *t)
|
|||
|
||||
leftmost_frame = 0;
|
||||
|
||||
track_canvas_scroller.get_hadjustment()->set_upper (session->current_end_frame() / frames_per_unit);
|
||||
track_canvas_scroller.get_hadjustment()->set_value (0);
|
||||
horizontal_adjustment.set_upper (session->current_end_frame() / frames_per_unit);
|
||||
horizontal_adjustment.set_value (0);
|
||||
|
||||
update_hscroller ();
|
||||
restore_ruler_visibility ();
|
||||
tempo_map_changed (Change (0));
|
||||
|
||||
|
@ -2047,8 +2086,7 @@ Editor::set_state (const XMLNode& node)
|
|||
}
|
||||
|
||||
set_default_size(width, height);
|
||||
// GTK2FIX
|
||||
// set_position(x, y-yoff);
|
||||
move (x, y-yoff);
|
||||
|
||||
if ((prop = node.property ("zoom-focus"))) {
|
||||
set_zoom_focus ((ZoomFocus) atoi (prop->value()));
|
||||
|
@ -3584,27 +3622,6 @@ Editor::point_selection_changed ()
|
|||
}
|
||||
}
|
||||
|
||||
void
|
||||
Editor::run_sub_event_loop ()
|
||||
{
|
||||
sub_event_loop_status = 0;
|
||||
Main::run ();
|
||||
}
|
||||
|
||||
void
|
||||
Editor::finish_sub_event_loop (int status)
|
||||
{
|
||||
Main::quit ();
|
||||
sub_event_loop_status = status;
|
||||
}
|
||||
|
||||
gint
|
||||
Editor::finish_sub_event_loop_on_delete (GdkEventAny *ignored, int32_t status)
|
||||
{
|
||||
finish_sub_event_loop (status);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
gint
|
||||
Editor::mouse_select_button_release (GdkEventButton* ev)
|
||||
{
|
||||
|
@ -3816,7 +3833,7 @@ void
|
|||
Editor::end_location_changed (Location* location)
|
||||
{
|
||||
ENSURE_GUI_THREAD (bind (mem_fun(*this, &Editor::end_location_changed), location));
|
||||
track_canvas_scroller.get_hadjustment()->set_upper (location->end() / frames_per_unit);
|
||||
horizontal_adjustment.set_upper (location->end() / frames_per_unit);
|
||||
}
|
||||
|
||||
int
|
||||
|
|
|
@ -638,49 +638,21 @@ class Editor : public PublicEditor
|
|||
Gtk::Frame edit_frame;
|
||||
Gtk::VScrollbar edit_vscrollbar;
|
||||
|
||||
/* the horizontal scroller works in a rather different way
|
||||
than a regular scrollbar, since its used for
|
||||
zoom control/indication as well. But more importantly,
|
||||
its different components (slider, left arrow, right arrow)
|
||||
have to be packed separately into the edit_packer.
|
||||
*/
|
||||
Gtk::Adjustment vertical_adjustment;
|
||||
Gtk::Adjustment horizontal_adjustment;
|
||||
|
||||
Gtk::Layout controls_layout;
|
||||
|
||||
Gtk::HScrollbar edit_hscrollbar;
|
||||
Gtk::DrawingArea edit_hscroll_slider;
|
||||
Gtk::Arrow edit_hscroll_left_arrow;
|
||||
Gtk::Arrow edit_hscroll_right_arrow;
|
||||
Gtk::EventBox edit_hscroll_left_arrow_event;
|
||||
Gtk::EventBox edit_hscroll_right_arrow_event;
|
||||
gint edit_hscroll_slider_width;
|
||||
gint edit_hscroll_slider_height;
|
||||
static const gint edit_hscroll_edge_width = 3;
|
||||
bool edit_hscroll_dragging;
|
||||
double edit_hscroll_drag_last;
|
||||
|
||||
void hscroll_slider_allocate (Gtk::Allocation &);
|
||||
gint hscroll_slider_expose (GdkEventExpose*);
|
||||
gint hscroll_slider_button_press (GdkEventButton*);
|
||||
gint hscroll_slider_button_release (GdkEventButton*);
|
||||
gint hscroll_slider_motion (GdkEventMotion*);
|
||||
bool hscrollbar_button_press (GdkEventButton*);
|
||||
bool hscrollbar_button_release (GdkEventButton*);
|
||||
void hscrollbar_allocate (Gtk::Allocation &alloc);
|
||||
|
||||
gint hscroll_trough_expose (GdkEventExpose*);
|
||||
gint hscroll_trough_button_press (GdkEventButton*);
|
||||
gint hscroll_trough_button_release (GdkEventButton*);
|
||||
|
||||
void update_hscroller ();
|
||||
|
||||
gint hscroll_left_arrow_button_press (GdkEventButton *);
|
||||
gint hscroll_left_arrow_button_release (GdkEventButton *);
|
||||
gint hscroll_right_arrow_button_press (GdkEventButton *);
|
||||
gint hscroll_right_arrow_button_release (GdkEventButton *);
|
||||
|
||||
double canvas_width;
|
||||
double canvas_height;
|
||||
|
||||
Gtk::ScrolledWindow track_canvas_scroller;
|
||||
Gtk::ScrolledWindow time_canvas_scroller;
|
||||
Gtk::ScrolledWindow edit_controls_scroller;
|
||||
|
||||
bool track_canvas_map_handler (GdkEventAny*);
|
||||
bool time_canvas_map_handler (GdkEventAny*);
|
||||
|
||||
|
@ -1134,9 +1106,6 @@ class Editor : public PublicEditor
|
|||
|
||||
/* Canvas event handlers */
|
||||
|
||||
// FIXED FOR GTK2
|
||||
|
||||
|
||||
bool canvas_control_point_event (GdkEvent* event,ArdourCanvas::Item*, ControlPoint*);
|
||||
bool canvas_line_event (GdkEvent* event,ArdourCanvas::Item*, AutomationLine*);
|
||||
bool canvas_selection_rect_event (GdkEvent* event,ArdourCanvas::Item*, SelectionRect*);
|
||||
|
@ -1208,13 +1177,6 @@ class Editor : public PublicEditor
|
|||
void reset_scrolling_region (Gtk::Allocation* alloc = 0);
|
||||
void scroll_canvas ();
|
||||
|
||||
/* sub-event loop handling */
|
||||
|
||||
int32_t sub_event_loop_status;
|
||||
void run_sub_event_loop ();
|
||||
void finish_sub_event_loop (int status);
|
||||
gint finish_sub_event_loop_on_delete (GdkEventAny*, int32_t status);
|
||||
|
||||
/* display control */
|
||||
|
||||
bool _show_measures;
|
||||
|
@ -1586,10 +1548,9 @@ class Editor : public PublicEditor
|
|||
ExportDialog *export_dialog;
|
||||
void export_range (jack_nframes_t start, jack_nframes_t end);
|
||||
|
||||
int write_region_selection(AudioRegionSelection&);
|
||||
int write_region_selection(AudioRegionSelection&);
|
||||
bool write_region (string path, ARDOUR::AudioRegion&);
|
||||
void export_region ();
|
||||
void write_a_region ();
|
||||
void bounce_region_selection ();
|
||||
void bounce_range_selection ();
|
||||
void external_edit_region ();
|
||||
|
@ -1808,6 +1769,8 @@ class Editor : public PublicEditor
|
|||
|
||||
typedef std::map<Editing::ColorID,std::string> ColorStyleMap;
|
||||
void init_colormap ();
|
||||
|
||||
bool on_key_press_event (GdkEventKey*);
|
||||
};
|
||||
|
||||
#endif /* __ardour_editor_h__ */
|
||||
|
|
|
@ -89,8 +89,8 @@ Editor::register_actions ()
|
|||
ActionManager::register_action (editor_actions, "set-playhead", _("set playhead"), mem_fun(*this, &Editor::kbd_set_playhead_cursor));
|
||||
ActionManager::register_action (editor_actions, "set-edit-cursor", _("set edit cursor"), mem_fun(*this, &Editor::kbd_set_edit_cursor));
|
||||
|
||||
ActionManager::register_action (editor_actions, "set-undo", _("set undo"), bind (mem_fun(*this, &Editor::undo), 1U));
|
||||
ActionManager::register_action (editor_actions, "set-redo", _("set redo"), bind (mem_fun(*this, &Editor::redo), 1U));
|
||||
ActionManager::register_action (editor_actions, "undo", _("undo"), bind (mem_fun(*this, &Editor::undo), 1U));
|
||||
ActionManager::register_action (editor_actions, "redo", _("redo"), bind (mem_fun(*this, &Editor::redo), 1U));
|
||||
|
||||
ActionManager::register_action (editor_actions, "export-session", _("export session"), mem_fun(*this, &Editor::export_session));
|
||||
ActionManager::register_action (editor_actions, "export-range", _("export range"), mem_fun(*this, &Editor::export_selection));
|
||||
|
|
|
@ -304,10 +304,7 @@ Editor::track_canvas_allocate (Gtk::Allocation alloc)
|
|||
edit_cursor->set_position (edit_cursor->current_frame);
|
||||
playhead_cursor->set_position (playhead_cursor->current_frame);
|
||||
|
||||
double last_canvas_unit = ceil ((double) max_frames / frames_per_unit);
|
||||
|
||||
track_canvas.set_scroll_region ( 0.0, 0.0, max (last_canvas_unit, canvas_width), canvas_height);
|
||||
time_canvas.set_scroll_region ( 0.0, 0.0, max (last_canvas_unit, canvas_width), canvas_height);
|
||||
reset_scrolling_region ();
|
||||
|
||||
if (edit_cursor) edit_cursor->set_length (canvas_height);
|
||||
if (playhead_cursor) playhead_cursor->set_length (canvas_height);
|
||||
|
@ -357,19 +354,41 @@ Editor::track_canvas_allocate (Gtk::Allocation alloc)
|
|||
void
|
||||
Editor::reset_scrolling_region (Gtk::Allocation* alloc)
|
||||
{
|
||||
TreeModel::Children rows = route_display_model->children();
|
||||
TreeModel::Children::iterator i;
|
||||
double pos;
|
||||
|
||||
for (pos = 0, i = rows.begin(); i != rows.end(); ++i) {
|
||||
TimeAxisView *tv = (*i)[route_display_columns.tv];
|
||||
pos += tv->effective_height;
|
||||
}
|
||||
|
||||
RefPtr<Gdk::Screen> screen = get_screen();
|
||||
|
||||
if (!screen) {
|
||||
screen = Gdk::Screen::get_default();
|
||||
}
|
||||
|
||||
edit_controls_hbox.set_size_request (-1, min ((gint) pos, (screen->get_height() - 400)));
|
||||
edit_controls_vbox.set_size_request (-1, min ((gint) pos, (screen->get_height() - 400)));
|
||||
double last_canvas_unit = ceil ((double) max_frames / frames_per_unit);
|
||||
track_canvas.set_scroll_region (0.0, 0.0, max (last_canvas_unit, canvas_width), pos);
|
||||
|
||||
// XXX what is the correct height value for the time canvas ? this overstates it
|
||||
time_canvas.set_scroll_region ( 0.0, 0.0, max (last_canvas_unit, canvas_width), canvas_height);
|
||||
}
|
||||
|
||||
bool
|
||||
Editor::track_canvas_map_handler (GdkEventAny* ev)
|
||||
{
|
||||
track_canvas_scroller.get_window()->set_cursor (*current_canvas_cursor);
|
||||
track_canvas.get_window()->set_cursor (*current_canvas_cursor);
|
||||
return false;
|
||||
}
|
||||
|
||||
bool
|
||||
Editor::time_canvas_map_handler (GdkEventAny* ev)
|
||||
{
|
||||
time_canvas_scroller.get_window()->set_cursor (*timebar_cursor);
|
||||
time_canvas.get_window()->set_cursor (*timebar_cursor);
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
|
@ -94,33 +94,6 @@ Editor::export_region ()
|
|||
dialog->start_export();
|
||||
}
|
||||
|
||||
void
|
||||
Editor::write_a_region ()
|
||||
{
|
||||
if (clicked_regionview == 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
FileSelection file_selector;
|
||||
|
||||
file_selector.get_selection_entry()->signal_activate().connect (sigc::bind (mem_fun(*this, &Editor::finish_sub_event_loop), 1));
|
||||
file_selector.get_cancel_button()->signal_clicked().connect (bind (mem_fun(*this, &Editor::finish_sub_event_loop), -1));
|
||||
file_selector.get_ok_button()->signal_clicked().connect (bind (mem_fun(*this, &Editor::finish_sub_event_loop), 1));
|
||||
file_selector.signal_delete_event().connect (bind (mem_fun(*this, &Editor::finish_sub_event_loop_on_delete), -1));
|
||||
|
||||
file_selector.show_all();
|
||||
|
||||
run_sub_event_loop ();
|
||||
|
||||
if (sub_event_loop_status == 1) {
|
||||
string path = file_selector.get_filename();
|
||||
printf ("got region: %s\n", path.c_str());
|
||||
if (path.length()) {
|
||||
write_region (path, clicked_regionview->region);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int
|
||||
Editor::write_region_selection (AudioRegionSelection& regions)
|
||||
{
|
||||
|
|
|
@ -26,244 +26,32 @@ using namespace std;
|
|||
using namespace ARDOUR;
|
||||
|
||||
void
|
||||
Editor::hscroll_slider_allocate (Gtk::Allocation &alloc)
|
||||
Editor::hscrollbar_allocate (Gtk::Allocation &alloc)
|
||||
{
|
||||
//edit_hscroll_slider_width = alloc->width;
|
||||
//edit_hscroll_slider_height = alloc->height ;
|
||||
|
||||
if (session) {
|
||||
track_canvas_scroller.get_hadjustment()->set_upper (session->current_end_frame() / frames_per_unit);
|
||||
horizontal_adjustment.set_upper (session->current_end_frame() / frames_per_unit);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
gint
|
||||
Editor::hscroll_slider_expose (GdkEventExpose *ev)
|
||||
bool
|
||||
Editor::hscrollbar_button_press (GdkEventButton *ev)
|
||||
{
|
||||
GdkRectangle draw_rect;
|
||||
GdkRectangle bar_rect;
|
||||
gint bar_max = edit_hscroll_slider_width - 2;
|
||||
|
||||
bar_rect.y = 1;
|
||||
bar_rect.height = edit_hscroll_slider_height - 2;
|
||||
|
||||
if (session) {
|
||||
bar_rect.width = (gint) floor (bar_max * ((canvas_width * frames_per_unit) / session->current_end_frame()));
|
||||
|
||||
if (bar_rect.width > bar_max) {
|
||||
bar_rect.x = 1;
|
||||
bar_rect.width = bar_max;
|
||||
} else {
|
||||
bar_rect.x = 1 + (gint) floor (bar_max * ((double) leftmost_frame / session->current_end_frame()));
|
||||
}
|
||||
|
||||
} else {
|
||||
bar_rect.x = 1;
|
||||
bar_rect.width = bar_max;
|
||||
}
|
||||
|
||||
/* make sure we can see the bar at all times, and have enough to do zoom-trim on */
|
||||
|
||||
bar_rect.width = max ((guint16) (edit_hscroll_edge_width+5), (guint16) bar_rect.width);
|
||||
|
||||
gdk_rectangle_intersect (&ev->area, &bar_rect, &draw_rect);
|
||||
|
||||
gtk_paint_box (edit_hscroll_slider.get_style()->gobj(),
|
||||
edit_hscroll_slider.get_window()->gobj(),
|
||||
GTK_STATE_ACTIVE,
|
||||
GTK_SHADOW_IN,
|
||||
&ev->area,
|
||||
GTK_WIDGET(edit_hscroll_slider.gobj()),
|
||||
"trough",
|
||||
0, 0, -1, -1);
|
||||
|
||||
gtk_paint_box (edit_hscroll_slider.get_style()->gobj(),
|
||||
edit_hscroll_slider.get_window()->gobj(),
|
||||
GTK_STATE_NORMAL,
|
||||
GTK_SHADOW_OUT,
|
||||
&draw_rect,
|
||||
GTK_WIDGET(edit_hscroll_slider.gobj()),
|
||||
"hscale",
|
||||
bar_rect.x, bar_rect.y, bar_rect.width, bar_rect.height);
|
||||
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
gint
|
||||
Editor::hscroll_slider_button_press (GdkEventButton *ev)
|
||||
{
|
||||
if (!session) {
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
edit_hscroll_dragging = true;
|
||||
//cerr << "PRESS" << endl;
|
||||
|
||||
return TRUE;
|
||||
|
||||
gint start;
|
||||
gint width;
|
||||
gint end;
|
||||
gint x;
|
||||
|
||||
start = (gint) floor (edit_hscroll_slider_width * ((double) leftmost_frame / session->current_end_frame()));
|
||||
width = (gint) floor (edit_hscroll_slider_width * ((canvas_width * frames_per_unit) / session->current_end_frame()));
|
||||
|
||||
end = start + width - 1;
|
||||
x = (gint) max (0.0, ev->x);
|
||||
|
||||
if (x >= start && x <= end) {
|
||||
|
||||
edit_hscroll_drag_last = x;
|
||||
edit_hscroll_dragging = true;
|
||||
edit_hscroll_slider.add_modal_grab();
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
gint
|
||||
Editor::hscroll_slider_button_release (GdkEventButton *ev)
|
||||
bool
|
||||
Editor::hscrollbar_button_release (GdkEventButton *ev)
|
||||
{
|
||||
if (!session) {
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
gint start;
|
||||
gint width;
|
||||
gint end;
|
||||
gint x;
|
||||
gint bar_max = edit_hscroll_slider_width - 2;
|
||||
jack_nframes_t new_leftmost = 0;
|
||||
|
||||
//cerr << "RELESAE" << endl;
|
||||
|
||||
if (edit_hscroll_dragging) {
|
||||
// lets do a tempo redisplay now only, because it is dog slow
|
||||
tempo_map_changed (Change (0));
|
||||
edit_hscroll_dragging = false;
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
|
||||
start = (gint) floor (bar_max * ((double) leftmost_frame / session->current_end_frame()));
|
||||
width = (gint) floor (bar_max * ((canvas_width * frames_per_unit) / session->current_end_frame()));
|
||||
|
||||
end = start + width - 1;
|
||||
x = (gint) max (0.0, ev->x);
|
||||
|
||||
if (!edit_hscroll_dragging) {
|
||||
|
||||
new_leftmost = (jack_nframes_t) floor (((double) x/bar_max) * session->current_end_frame());
|
||||
reposition_x_origin (new_leftmost);
|
||||
}
|
||||
|
||||
if (edit_hscroll_dragging) {
|
||||
// lets do a tempo redisplay now only, because it is dog slow
|
||||
tempo_map_changed (Change (0));
|
||||
edit_hscroll_dragging = false;
|
||||
edit_hscroll_slider.remove_modal_grab();
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
gint
|
||||
Editor::hscroll_slider_motion (GdkEventMotion *ev)
|
||||
{
|
||||
gint x, y;
|
||||
Gdk::ModifierType state;
|
||||
gint bar_max = edit_hscroll_slider_width - 2;
|
||||
|
||||
if (!session || !edit_hscroll_dragging) {
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
edit_hscroll_slider.get_window()->get_pointer (x, y, state);
|
||||
|
||||
jack_nframes_t new_frame;
|
||||
jack_nframes_t frames;
|
||||
double distance;
|
||||
double fract;
|
||||
|
||||
distance = x - edit_hscroll_drag_last;
|
||||
fract = fabs (distance) / bar_max;
|
||||
frames = (jack_nframes_t) floor (session->current_end_frame() * fract);
|
||||
|
||||
if (distance < 0) {
|
||||
if (leftmost_frame < frames) {
|
||||
new_frame = 0;
|
||||
} else {
|
||||
new_frame = leftmost_frame - frames;
|
||||
}
|
||||
} else {
|
||||
if (leftmost_frame > max_frames - frames) {
|
||||
new_frame = max_frames;
|
||||
} else {
|
||||
new_frame = leftmost_frame + frames;
|
||||
if (session) {
|
||||
if (edit_hscroll_dragging) {
|
||||
// lets do a tempo redisplay only on button release, because it is dog slow
|
||||
tempo_map_changed (Change (0));
|
||||
edit_hscroll_dragging = false;
|
||||
}
|
||||
}
|
||||
|
||||
if (new_frame != leftmost_frame) {
|
||||
reposition_x_origin (new_frame);
|
||||
}
|
||||
|
||||
edit_hscroll_drag_last = x;
|
||||
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
void
|
||||
Editor::update_hscroller ()
|
||||
{
|
||||
//edit_hscroll_slider.queue_draw ();
|
||||
// if (session) {
|
||||
// track_canvas_scroller.get_hadjustment()->set_upper (session->current_end_frame() / frames_per_unit);
|
||||
// track_canvas_scroller.get_hadjustment()->set_value (leftmost_frame/frames_per_unit);
|
||||
// }
|
||||
}
|
||||
|
||||
gint
|
||||
Editor::hscroll_left_arrow_button_press (GdkEventButton *ev)
|
||||
{
|
||||
if (!session) {
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
start_canvas_autoscroll (-1);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
gint
|
||||
Editor::hscroll_right_arrow_button_press (GdkEventButton *ev)
|
||||
{
|
||||
if (!session) {
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
start_canvas_autoscroll (1);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
gint
|
||||
Editor::hscroll_left_arrow_button_release (GdkEventButton *ev)
|
||||
{
|
||||
if (!session) {
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
stop_canvas_autoscroll ();
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
gint
|
||||
Editor::hscroll_right_arrow_button_release (GdkEventButton *ev)
|
||||
{
|
||||
if (!session) {
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
stop_canvas_autoscroll ();
|
||||
return TRUE;
|
||||
}
|
||||
|
|
|
@ -94,8 +94,10 @@ Editor::connect_to_image_compositor()
|
|||
void
|
||||
Editor::scroll_timeaxis_to_imageframe_item(const TimeAxisViewItem* item)
|
||||
{
|
||||
jack_nframes_t offset = static_cast<jack_nframes_t>(frames_per_unit * (edit_hscroll_slider_width/2)) ;
|
||||
|
||||
// GTK2FIX
|
||||
//jack_nframes_t offset = static_cast<jack_nframes_t>(frames_per_unit * (edit_hscroll_slider_width/2)) ;
|
||||
jack_nframes_t offset = 0;
|
||||
|
||||
jack_nframes_t x_pos = 0 ;
|
||||
if(item->get_position() < offset)
|
||||
{
|
||||
|
|
|
@ -34,10 +34,14 @@ Editor::kbd_driver (sigc::slot<void,GdkEvent*> theslot, bool use_track_canvas, b
|
|||
Glib::RefPtr<Gdk::Window> evw = track_canvas.get_window()->get_pointer (x, y, mask);
|
||||
bool doit = false;
|
||||
|
||||
cerr << "editor keyboard driver\n";
|
||||
|
||||
if (use_track_canvas && track_canvas_event_box.get_window()->get_pointer(x, y, mask) != 0) {
|
||||
cerr << "in track canvas\n";
|
||||
doit = true;
|
||||
|
||||
} else if (use_time_canvas && time_canvas_event_box.get_window()->get_pointer(x, y, mask)!= 0) {
|
||||
cerr << "in time canvas\n";
|
||||
doit = true;
|
||||
}
|
||||
|
||||
|
|
|
@ -730,8 +730,6 @@ Editor::marker_menu_rename ()
|
|||
|
||||
Dialog dialog;
|
||||
Entry entry;
|
||||
Button ok_button (_("OK"));
|
||||
Button cancel_button (_("Cancel"));
|
||||
|
||||
if (loc->is_mark()) {
|
||||
dialog.set_title (_("ardour: rename mark"));
|
||||
|
@ -744,35 +742,24 @@ Editor::marker_menu_rename ()
|
|||
dialog.set_position (Gtk::WIN_POS_MOUSE);
|
||||
dialog.set_modal (true);
|
||||
|
||||
dialog.get_vbox()->set_border_width (10);
|
||||
dialog.get_vbox()->pack_start (entry);
|
||||
dialog.get_action_area()->pack_start (ok_button);
|
||||
dialog.get_action_area()->pack_start (cancel_button);
|
||||
dialog.add_action_widget (entry, RESPONSE_ACCEPT);
|
||||
dialog.add_button (Stock::OK, RESPONSE_ACCEPT);
|
||||
dialog.add_button (Stock::CANCEL, RESPONSE_ACCEPT);
|
||||
|
||||
entry.set_text (loc->name());
|
||||
entry.set_name ("MarkerNameDisplay");
|
||||
ok_button.set_name ("EditorGTKButton");
|
||||
cancel_button.set_name ("EditorGTKButton");
|
||||
|
||||
entry.signal_activate().connect (bind (mem_fun(*this, &Editor::finish_sub_event_loop), 1));
|
||||
cancel_button.signal_clicked().connect (bind (mem_fun(*this, &Editor::finish_sub_event_loop), -1));
|
||||
ok_button.signal_clicked().connect (bind (mem_fun(*this, &Editor::finish_sub_event_loop), 1));
|
||||
dialog.signal_delete_event().connect (bind (mem_fun(*this, &Editor::finish_sub_event_loop_on_delete), -1));
|
||||
|
||||
dialog.show_all ();
|
||||
entry.grab_focus ();
|
||||
|
||||
run_sub_event_loop ();
|
||||
|
||||
if (sub_event_loop_status == 1) {
|
||||
|
||||
Location* l;
|
||||
bool is_start;
|
||||
|
||||
if ((l = find_location_from_marker (marker, is_start)) != 0) {
|
||||
l->set_name (entry.get_text());
|
||||
}
|
||||
switch (dialog.run ()) {
|
||||
case RESPONSE_ACCEPT:
|
||||
break;
|
||||
default:
|
||||
return;
|
||||
}
|
||||
|
||||
loc->set_name (entry.get_text());
|
||||
}
|
||||
|
||||
gint
|
||||
|
|
|
@ -242,7 +242,7 @@ Editor::set_mouse_mode (MouseMode m, bool force)
|
|||
ignore_mouse_mode_toggle = false;
|
||||
|
||||
if (is_drawable()) {
|
||||
track_canvas_scroller.get_window()->set_cursor(*current_canvas_cursor);
|
||||
track_canvas.get_window()->set_cursor(*current_canvas_cursor);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1141,7 +1141,7 @@ Editor::enter_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_
|
|||
show_verbose_canvas_cursor ();
|
||||
|
||||
if (is_drawable()) {
|
||||
track_canvas_scroller.get_window()->set_cursor (*fader_cursor);
|
||||
track_canvas.get_window()->set_cursor (*fader_cursor);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
@ -1165,7 +1165,7 @@ Editor::enter_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_
|
|||
show_verbose_canvas_cursor ();
|
||||
|
||||
if (is_drawable()) {
|
||||
track_canvas_scroller.get_window()->set_cursor (*fader_cursor);
|
||||
track_canvas.get_window()->set_cursor (*fader_cursor);
|
||||
}
|
||||
break;
|
||||
|
||||
|
@ -1175,7 +1175,7 @@ Editor::enter_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_
|
|||
if (line)
|
||||
line->property_fill_color_rgba() = color_map[cEnteredGainLine];
|
||||
if (is_drawable()) {
|
||||
track_canvas_scroller.get_window()->set_cursor (*fader_cursor);
|
||||
track_canvas.get_window()->set_cursor (*fader_cursor);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
@ -1189,13 +1189,13 @@ Editor::enter_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_
|
|||
line->property_fill_color_rgba() = color_map[cEnteredAutomationLine];
|
||||
}
|
||||
if (is_drawable()) {
|
||||
track_canvas_scroller.get_window()->set_cursor (*fader_cursor);
|
||||
track_canvas.get_window()->set_cursor (*fader_cursor);
|
||||
}
|
||||
break;
|
||||
|
||||
case AudioRegionViewNameHighlight:
|
||||
if (is_drawable() && mouse_mode == MouseObject) {
|
||||
track_canvas_scroller.get_window()->set_cursor (*trimmer_cursor);
|
||||
track_canvas.get_window()->set_cursor (*trimmer_cursor);
|
||||
}
|
||||
break;
|
||||
|
||||
|
@ -1209,14 +1209,14 @@ Editor::enter_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_
|
|||
/* </CMT Additions> */
|
||||
|
||||
if (is_drawable()) {
|
||||
track_canvas_scroller.get_window()->set_cursor (*trimmer_cursor);
|
||||
track_canvas.get_window()->set_cursor (*trimmer_cursor);
|
||||
}
|
||||
break;
|
||||
|
||||
case EditCursorItem:
|
||||
case PlayheadCursorItem:
|
||||
if (is_drawable()) {
|
||||
track_canvas_scroller.get_window()->set_cursor (*grabber_cursor);
|
||||
track_canvas.get_window()->set_cursor (*grabber_cursor);
|
||||
}
|
||||
break;
|
||||
|
||||
|
@ -1226,7 +1226,7 @@ Editor::enter_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_
|
|||
|
||||
if (!reinterpret_cast<AudioRegionView *> (item->get_data ("regionview"))->name_active()) {
|
||||
if (mouse_mode == MouseObject && is_drawable()) {
|
||||
track_canvas_scroller.get_window()->set_cursor (*trimmer_cursor);
|
||||
track_canvas.get_window()->set_cursor (*trimmer_cursor);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
@ -1247,7 +1247,7 @@ Editor::enter_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_
|
|||
break;
|
||||
}
|
||||
|
||||
track_canvas_scroller.get_window()->set_cursor (*cursor);
|
||||
track_canvas.get_window()->set_cursor (*cursor);
|
||||
|
||||
AutomationTimeAxisView* atv;
|
||||
if ((atv = static_cast<AutomationTimeAxisView*>(item->get_data ("trackview"))) != 0) {
|
||||
|
@ -1263,7 +1263,7 @@ Editor::enter_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_
|
|||
case MeterBarItem:
|
||||
case TempoBarItem:
|
||||
if (is_drawable()) {
|
||||
time_canvas_scroller.get_window()->set_cursor (*timebar_cursor);
|
||||
time_canvas.get_window()->set_cursor (*timebar_cursor);
|
||||
}
|
||||
break;
|
||||
|
||||
|
@ -1276,7 +1276,7 @@ Editor::enter_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_
|
|||
case MeterMarkerItem:
|
||||
case TempoMarkerItem:
|
||||
if (is_drawable()) {
|
||||
time_canvas_scroller.get_window()->set_cursor (*timebar_cursor);
|
||||
time_canvas.get_window()->set_cursor (*timebar_cursor);
|
||||
}
|
||||
break;
|
||||
case FadeInHandleItem:
|
||||
|
@ -1345,7 +1345,7 @@ Editor::leave_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_
|
|||
}
|
||||
|
||||
if (is_drawable()) {
|
||||
track_canvas_scroller.get_window()->set_cursor (*current_canvas_cursor);
|
||||
track_canvas.get_window()->set_cursor (*current_canvas_cursor);
|
||||
}
|
||||
|
||||
hide_verbose_canvas_cursor ();
|
||||
|
@ -1363,7 +1363,7 @@ Editor::leave_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_
|
|||
case MarkerViewHandleEndItem:
|
||||
/* </CMT Additions> */
|
||||
if (is_drawable()) {
|
||||
track_canvas_scroller.get_window()->set_cursor (*current_canvas_cursor);
|
||||
track_canvas.get_window()->set_cursor (*current_canvas_cursor);
|
||||
}
|
||||
break;
|
||||
|
||||
|
@ -1378,7 +1378,7 @@ Editor::leave_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_
|
|||
line->property_fill_color_rgba() = al->get_line_color();
|
||||
}
|
||||
if (is_drawable()) {
|
||||
track_canvas_scroller.get_window()->set_cursor (*current_canvas_cursor);
|
||||
track_canvas.get_window()->set_cursor (*current_canvas_cursor);
|
||||
}
|
||||
break;
|
||||
|
||||
|
@ -1386,7 +1386,7 @@ Editor::leave_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_
|
|||
/* see enter_handler() for notes */
|
||||
if (!reinterpret_cast<AudioRegionView *> (item->get_data ("regionview"))->name_active()) {
|
||||
if (is_drawable() && mouse_mode == MouseObject) {
|
||||
track_canvas_scroller.get_window()->set_cursor (*current_canvas_cursor);
|
||||
track_canvas.get_window()->set_cursor (*current_canvas_cursor);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
@ -1397,7 +1397,7 @@ Editor::leave_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_
|
|||
case TempoBarItem:
|
||||
case MarkerBarItem:
|
||||
if (is_drawable()) {
|
||||
time_canvas_scroller.get_window()->set_cursor (*timebar_cursor);
|
||||
time_canvas.get_window()->set_cursor (*timebar_cursor);
|
||||
}
|
||||
break;
|
||||
|
||||
|
@ -1412,7 +1412,7 @@ Editor::leave_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_
|
|||
case TempoMarkerItem:
|
||||
|
||||
if (is_drawable()) {
|
||||
time_canvas_scroller.get_window()->set_cursor (*timebar_cursor);
|
||||
time_canvas.get_window()->set_cursor (*timebar_cursor);
|
||||
}
|
||||
|
||||
break;
|
||||
|
@ -1431,7 +1431,7 @@ Editor::leave_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_
|
|||
|
||||
case AutomationTrackItem:
|
||||
if (is_drawable()) {
|
||||
track_canvas_scroller.get_window()->set_cursor (*current_canvas_cursor);
|
||||
track_canvas.get_window()->set_cursor (*current_canvas_cursor);
|
||||
clear_entered_track = true;
|
||||
Glib::signal_idle().connect (mem_fun(*this, &Editor::left_automation_track));
|
||||
}
|
||||
|
@ -3651,7 +3651,7 @@ Editor::drag_selection (ArdourCanvas::Item* item, GdkEvent* event)
|
|||
break;
|
||||
}
|
||||
|
||||
if (event->button.x >= track_canvas_scroller.get_hadjustment()->get_value() + canvas_width) {
|
||||
if (event->button.x >= horizontal_adjustment.get_value() + canvas_width) {
|
||||
start_canvas_autoscroll (1);
|
||||
}
|
||||
|
||||
|
@ -4183,7 +4183,7 @@ Editor::drag_range_markerbar_op (ArdourCanvas::Item* item, GdkEvent* event)
|
|||
break;
|
||||
}
|
||||
|
||||
if (event->button.x >= track_canvas_scroller.get_hadjustment()->get_value() + canvas_width) {
|
||||
if (event->button.x >= horizontal_adjustment.get_value() + canvas_width) {
|
||||
start_canvas_autoscroll (1);
|
||||
}
|
||||
|
||||
|
|
|
@ -973,8 +973,7 @@ Editor::scroll_tracks_down ()
|
|||
cnt = (int) floor (prefix);
|
||||
}
|
||||
|
||||
Gtk::Adjustment *adj = track_canvas_scroller.get_vadjustment();
|
||||
adj->set_value (adj->get_value() + (cnt * adj->get_page_size()));
|
||||
vertical_adjustment.set_value (vertical_adjustment.get_value() + (cnt * vertical_adjustment.get_page_size()));
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -990,8 +989,7 @@ Editor::scroll_tracks_up ()
|
|||
cnt = (int) floor (prefix);
|
||||
}
|
||||
|
||||
Gtk::Adjustment *adj = track_canvas_scroller.get_vadjustment();
|
||||
adj->set_value (adj->get_value() - (cnt * adj->get_page_size()));
|
||||
vertical_adjustment.set_value (vertical_adjustment.get_value() - (cnt * vertical_adjustment.get_page_size()));
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -2101,7 +2099,7 @@ Editor::embed_sndfile (string path, bool split, bool multiple_files, bool& check
|
|||
}
|
||||
}
|
||||
|
||||
track_canvas_scroller.get_window()->set_cursor (Gdk::Cursor (Gdk::WATCH));
|
||||
track_canvas.get_window()->set_cursor (Gdk::Cursor (Gdk::WATCH));
|
||||
ARDOUR_UI::instance()->flush_pending ();
|
||||
|
||||
/* make the proper number of channels in the region */
|
||||
|
@ -2149,7 +2147,7 @@ Editor::embed_sndfile (string path, bool split, bool multiple_files, bool& check
|
|||
}
|
||||
|
||||
out:
|
||||
track_canvas_scroller.get_window()->set_cursor (*current_canvas_cursor);
|
||||
track_canvas.get_window()->set_cursor (*current_canvas_cursor);
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -2287,7 +2285,7 @@ Editor::insert_sndfile_into (string path, bool multi, AudioTimeAxisView* tv, jac
|
|||
return;
|
||||
}
|
||||
|
||||
track_canvas_scroller.get_window()->set_cursor (Gdk::Cursor (Gdk::WATCH));
|
||||
track_canvas.get_window()->set_cursor (Gdk::Cursor (Gdk::WATCH));
|
||||
ARDOUR_UI::instance()->flush_pending ();
|
||||
|
||||
/* make the proper number of channels in the region */
|
||||
|
@ -2330,7 +2328,7 @@ Editor::insert_sndfile_into (string path, bool multi, AudioTimeAxisView* tv, jac
|
|||
}
|
||||
|
||||
out:
|
||||
track_canvas_scroller.get_window()->set_cursor (*current_canvas_cursor);
|
||||
track_canvas.get_window()->set_cursor (*current_canvas_cursor);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -2918,7 +2916,7 @@ Editor::freeze_route ()
|
|||
|
||||
pthread_create (&itt.thread, 0, _freeze_thread, this);
|
||||
|
||||
track_canvas_scroller.get_window()->set_cursor (Gdk::Cursor (Gdk::WATCH));
|
||||
track_canvas.get_window()->set_cursor (Gdk::Cursor (Gdk::WATCH));
|
||||
|
||||
while (!itt.done && !itt.cancel) {
|
||||
gtk_main_iteration ();
|
||||
|
@ -2927,7 +2925,7 @@ Editor::freeze_route ()
|
|||
interthread_progress_connection.disconnect ();
|
||||
interthread_progress_window->hide_all ();
|
||||
current_interthread_info = 0;
|
||||
track_canvas_scroller.get_window()->set_cursor (*current_canvas_cursor);
|
||||
track_canvas.get_window()->set_cursor (*current_canvas_cursor);
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -3458,7 +3456,7 @@ Editor::normalize_region ()
|
|||
|
||||
begin_reversible_command (_("normalize"));
|
||||
|
||||
track_canvas_scroller.get_window()->set_cursor (*wait_cursor);
|
||||
track_canvas.get_window()->set_cursor (*wait_cursor);
|
||||
gdk_flush ();
|
||||
|
||||
for (AudioRegionSelection::iterator r = selection->audio_regions.begin(); r != selection->audio_regions.end(); ++r) {
|
||||
|
@ -3468,7 +3466,7 @@ Editor::normalize_region ()
|
|||
}
|
||||
|
||||
commit_reversible_command ();
|
||||
track_canvas_scroller.get_window()->set_cursor (*current_canvas_cursor);
|
||||
track_canvas.get_window()->set_cursor (*current_canvas_cursor);
|
||||
}
|
||||
|
||||
|
||||
|
@ -3515,7 +3513,7 @@ Editor::apply_filter (AudioFilter& filter, string command)
|
|||
|
||||
begin_reversible_command (command);
|
||||
|
||||
track_canvas_scroller.get_window()->set_cursor (*wait_cursor);
|
||||
track_canvas.get_window()->set_cursor (*wait_cursor);
|
||||
gdk_flush ();
|
||||
|
||||
for (AudioRegionSelection::iterator r = selection->audio_regions.begin(); r != selection->audio_regions.end(); ) {
|
||||
|
@ -3544,7 +3542,7 @@ Editor::apply_filter (AudioFilter& filter, string command)
|
|||
selection->audio_regions.clear ();
|
||||
|
||||
out:
|
||||
track_canvas_scroller.get_window()->set_cursor (*current_canvas_cursor);
|
||||
track_canvas.get_window()->set_cursor (*current_canvas_cursor);
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
@ -155,7 +155,7 @@ Editor::route_display_selection_changed ()
|
|||
|
||||
for (i = rows.begin(); i != rows.end(); ++i) {
|
||||
tv = (*i)[route_display_columns.tv];
|
||||
if (selection->is_selected (i)) {
|
||||
if (!selection->is_selected (i)) {
|
||||
tv->set_marked_for_display (false);
|
||||
} else {
|
||||
AudioTimeAxisView *atv;
|
||||
|
@ -225,7 +225,7 @@ Editor::route_list_reordered ()
|
|||
TreeModel::Children rows = route_display_model->children();
|
||||
TreeModel::Children::iterator i;
|
||||
long order;
|
||||
int n;
|
||||
int n;
|
||||
|
||||
for (n = 0, order = 0, i = rows.begin(); i != rows.end(); ++i, ++order) {
|
||||
TimeAxisView *tv = (*i)[route_display_columns.tv];
|
||||
|
@ -250,7 +250,8 @@ int n;
|
|||
n++;
|
||||
|
||||
}
|
||||
edit_controls_scroller.queue_resize ();
|
||||
|
||||
// controls_layout.queue_resize ();
|
||||
reset_scrolling_region ();
|
||||
return FALSE;
|
||||
}
|
||||
|
|
|
@ -520,7 +520,7 @@ Editor::update_ruler_visibility ()
|
|||
|
||||
lab_children.clear();
|
||||
|
||||
// leave the last one (the time_canvas_scroller) intact
|
||||
// leave the last one (the time_canvas) intact
|
||||
while (ruler_children.size() > 1) {
|
||||
ruler_children.pop_front();
|
||||
}
|
||||
|
|
|
@ -116,20 +116,6 @@ ImageFrameTimeAxis::~ImageFrameTimeAxis ()
|
|||
image_action_menu = 0 ;
|
||||
}
|
||||
|
||||
for(list<SelectionRect*>::iterator i = free_selection_rects.begin(); i != free_selection_rects.end(); ++i)
|
||||
{
|
||||
delete (*i)->rect;
|
||||
delete (*i)->start_trim;
|
||||
delete (*i)->end_trim;
|
||||
}
|
||||
|
||||
for(list<SelectionRect*>::iterator i = used_selection_rects.begin(); i != used_selection_rects.end(); ++i)
|
||||
{
|
||||
delete (*i)->rect;
|
||||
delete (*i)->start_trim;
|
||||
delete (*i)->end_trim;
|
||||
}
|
||||
|
||||
if (selection_group)
|
||||
{
|
||||
delete selection_group;
|
||||
|
|
|
@ -246,6 +246,7 @@ Marker::Marker (PublicEditor& ed, ArdourCanvas::Group& parent, guint32 rgba, con
|
|||
mark->property_points() = *points;
|
||||
mark->property_fill_color_rgba() = rgba;
|
||||
mark->property_outline_color() = "black";
|
||||
mark->property_width_pixels() = 1;
|
||||
|
||||
Pango::FontDescription font = get_font_for_style (N_("MarkerText"));
|
||||
|
||||
|
|
|
@ -92,27 +92,7 @@ MarkerTimeAxis::MarkerTimeAxis (PublicEditor& ed, ARDOUR::Session& sess, Canvas&
|
|||
*/
|
||||
MarkerTimeAxis::~MarkerTimeAxis()
|
||||
{
|
||||
GoingAway() ; /* EMIT_SIGNAL */
|
||||
|
||||
for (list<SelectionRect*>::iterator i = free_selection_rects.begin(); i != free_selection_rects.end(); ++i)
|
||||
{
|
||||
delete (*i)->rect;
|
||||
delete (*i)->start_trim;
|
||||
delete (*i)->end_trim;
|
||||
}
|
||||
|
||||
for (list<SelectionRect*>::iterator i = used_selection_rects.begin(); i != used_selection_rects.end(); ++i)
|
||||
{
|
||||
delete (*i)->rect;
|
||||
delete (*i)->start_trim;
|
||||
delete (*i)->end_trim;
|
||||
}
|
||||
|
||||
if(selection_group)
|
||||
{
|
||||
delete selection_group;
|
||||
selection_group = 0 ;
|
||||
}
|
||||
GoingAway() ; /* EMIT_SIGNAL */
|
||||
|
||||
// destroy the view helper
|
||||
// this handles removing and destroying individual marker items
|
||||
|
|
|
@ -435,14 +435,11 @@ Mixer_UI::show_strip (MixerStrip* ms)
|
|||
|
||||
if (ms->route().master() || ms->route().control()) {
|
||||
out_packer.pack_start (*ms, false, false);
|
||||
cerr << "Packed master strip @ " << ms << endl;
|
||||
} else {
|
||||
strip_packer.pack_start (*ms, false, false);
|
||||
cerr << "Packed strip @ " << ms << endl;
|
||||
strip_packer.pack_start (*ms, false, false);
|
||||
}
|
||||
ms->set_packed (true);
|
||||
ms->show ();
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -78,6 +78,7 @@ TimeAxisView::TimeAxisView (ARDOUR::Session& sess, PublicEditor& ed, TimeAxisVie
|
|||
effective_height = 0;
|
||||
parent = rent;
|
||||
_has_state = false;
|
||||
last_name_entry_key_press_event = 0;
|
||||
|
||||
/*
|
||||
Create the standard LHS Controls
|
||||
|
@ -88,7 +89,10 @@ TimeAxisView::TimeAxisView (ARDOUR::Session& sess, PublicEditor& ed, TimeAxisVie
|
|||
name_entry.set_name ("EditorTrackNameDisplay");
|
||||
name_entry.signal_button_release_event().connect (mem_fun (*this, &TimeAxisView::name_entry_button_release));
|
||||
name_entry.signal_button_press_event().connect (mem_fun (*this, &TimeAxisView::name_entry_button_press));
|
||||
|
||||
name_entry.signal_key_release_event().connect (mem_fun (*this, &TimeAxisView::name_entry_key_release));
|
||||
name_entry.signal_activate().connect (mem_fun(*this, &TimeAxisView::name_entry_activated));
|
||||
name_entry.signal_focus_in_event().connect (mem_fun (*this, &TimeAxisView::name_entry_focus_in));
|
||||
name_entry.signal_focus_out_event().connect (mem_fun (*this, &TimeAxisView::name_entry_focus_out));
|
||||
Gtkmm2ext::set_size_request_to_display_given_text (name_entry, N_("gTortnam"), 10, 10); // just represents a short name
|
||||
|
||||
name_label.set_name ("TrackLabel");
|
||||
|
@ -355,6 +359,86 @@ TimeAxisView::set_height (TrackHeight h)
|
|||
|
||||
}
|
||||
|
||||
bool
|
||||
TimeAxisView::name_entry_key_release (GdkEventKey* ev)
|
||||
{
|
||||
switch (ev->keyval) {
|
||||
case GDK_Tab:
|
||||
case GDK_Up:
|
||||
case GDK_Down:
|
||||
name_entry_changed ();
|
||||
return true;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
#ifdef TIMEOUT_NAME_EDIT
|
||||
/* adapt the timeout to reflect the user's typing speed */
|
||||
|
||||
guint32 name_entry_timeout;
|
||||
|
||||
if (last_name_entry_key_press_event) {
|
||||
/* timeout is 1/2 second or 5 times their current inter-char typing speed */
|
||||
name_entry_timeout = std::max (500U, (5 * (ev->time - last_name_entry_key_press_event)));
|
||||
} else {
|
||||
/* start with a 1 second timeout */
|
||||
name_entry_timeout = 1000;
|
||||
}
|
||||
|
||||
last_name_entry_key_press_event = ev->time;
|
||||
|
||||
/* wait 1 seconds and if no more keys are pressed, act as if they pressed enter */
|
||||
|
||||
name_entry_key_timeout.disconnect();
|
||||
name_entry_key_timeout = Glib::signal_timeout().connect (mem_fun (*this, &TimeAxisView::name_entry_key_timed_out), name_entry_timeout);
|
||||
#endif
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
bool
|
||||
TimeAxisView::name_entry_focus_in (GdkEventFocus* ev)
|
||||
{
|
||||
name_entry.select_region (0, -1);
|
||||
name_entry.set_name ("EditorActiveTrackNameDisplay");
|
||||
return false;
|
||||
}
|
||||
|
||||
bool
|
||||
TimeAxisView::name_entry_focus_out (GdkEventFocus* ev)
|
||||
{
|
||||
/* clean up */
|
||||
|
||||
last_name_entry_key_press_event = 0;
|
||||
name_entry_key_timeout.disconnect ();
|
||||
name_entry.set_name ("EditorTrackNameDisplay");
|
||||
|
||||
/* do the real stuff */
|
||||
|
||||
name_entry_changed ();
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
bool
|
||||
TimeAxisView::name_entry_key_timed_out ()
|
||||
{
|
||||
name_entry_activated();
|
||||
return false;
|
||||
}
|
||||
|
||||
void
|
||||
TimeAxisView::name_entry_activated ()
|
||||
{
|
||||
controls_ebox.grab_focus();
|
||||
}
|
||||
|
||||
void
|
||||
TimeAxisView::name_entry_changed ()
|
||||
{
|
||||
}
|
||||
|
||||
bool
|
||||
TimeAxisView::name_entry_button_press (GdkEventButton *ev)
|
||||
{
|
||||
|
|
|
@ -199,19 +199,19 @@ class TimeAxisView : public virtual AxisView
|
|||
string controls_base_unselected_name;
|
||||
string controls_base_selected_name;
|
||||
|
||||
/**
|
||||
* Handle mouse press on our LHS control name entry.
|
||||
*
|
||||
* @param ev the event
|
||||
*/
|
||||
virtual bool name_entry_button_press (GdkEventButton *ev);
|
||||
bool name_entry_button_press (GdkEventButton *ev);
|
||||
bool name_entry_button_release (GdkEventButton *ev);
|
||||
bool name_entry_key_release (GdkEventKey *ev);
|
||||
void name_entry_activated ();
|
||||
sigc::connection name_entry_key_timeout;
|
||||
bool name_entry_key_timed_out ();
|
||||
guint32 last_name_entry_key_press_event;
|
||||
|
||||
/* derived classes can override these */
|
||||
|
||||
/**
|
||||
* Handle mouse relaese on our LHS control name entry.
|
||||
*
|
||||
*@ param ev the event
|
||||
*/
|
||||
virtual bool name_entry_button_release (GdkEventButton *ev);
|
||||
virtual void name_entry_changed ();
|
||||
virtual bool name_entry_focus_in (GdkEventFocus *ev);
|
||||
virtual bool name_entry_focus_out (GdkEventFocus *ev);
|
||||
|
||||
/**
|
||||
* Handle mouse relaese on our LHS control name ebox.
|
||||
|
|
Loading…
Reference in New Issue
Block a user