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:
Paul Davis 2005-12-12 20:54:55 +00:00
parent 088a5289dc
commit 3733c995c5
26 changed files with 390 additions and 593 deletions

View File

@ -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")

View File

@ -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"

View File

@ -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));

View File

@ -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;
}

View File

@ -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);

View File

@ -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 ()
{

View File

@ -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 ();

View File

@ -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

View File

@ -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__ */

View File

@ -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));

View File

@ -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;
}

View File

@ -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)
{

View File

@ -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;
}

View File

@ -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)
{

View File

@ -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;
}

View File

@ -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

View File

@ -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);
}

View File

@ -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

View File

@ -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;
}

View File

@ -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();
}

View File

@ -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;

View File

@ -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"));

View File

@ -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

View File

@ -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 ();
}
}

View File

@ -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)
{

View File

@ -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.