mirror of
https://github.com/Ardour/ardour.git
synced 2025-12-07 15:25:01 +01:00
Various fixes and improvements to editor summary widget.
git-svn-id: svn://localhost/ardour2/branches/3.0@5179 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
parent
b2d5840efb
commit
804da56531
13 changed files with 212 additions and 100 deletions
|
|
@ -277,8 +277,8 @@ Editor::Editor ()
|
||||||
|
|
||||||
snap_threshold = 5.0;
|
snap_threshold = 5.0;
|
||||||
bbt_beat_subdivision = 4;
|
bbt_beat_subdivision = 4;
|
||||||
canvas_width = 0;
|
_canvas_width = 0;
|
||||||
canvas_height = 0;
|
_canvas_height = 0;
|
||||||
last_autoscroll_x = 0;
|
last_autoscroll_x = 0;
|
||||||
last_autoscroll_y = 0;
|
last_autoscroll_y = 0;
|
||||||
autoscroll_active = false;
|
autoscroll_active = false;
|
||||||
|
|
@ -510,14 +510,14 @@ Editor::Editor ()
|
||||||
edit_packer.set_border_width (0);
|
edit_packer.set_border_width (0);
|
||||||
edit_packer.set_name ("EditorWindow");
|
edit_packer.set_name ("EditorWindow");
|
||||||
|
|
||||||
edit_packer.attach (ruler_label_event_box, 0, 1, 0, 1, FILL, SHRINK, 0, 0);
|
edit_packer.attach (*_summary, 1, 2, 0, 1, FILL|EXPAND, SHRINK, 0, 0);
|
||||||
|
edit_packer.attach (ruler_label_event_box, 0, 1, 1, 2, FILL, SHRINK, 0, 0);
|
||||||
|
|
||||||
edit_packer.attach (time_button_event_box, 0, 1, 1, 2, FILL, SHRINK, 0, 0);
|
edit_packer.attach (time_button_event_box, 0, 1, 2, 3, FILL, SHRINK, 0, 0);
|
||||||
edit_packer.attach (*_summary , 1, 2, 2, 3, FILL|EXPAND, SHRINK, 0, 0);
|
edit_packer.attach (time_canvas_event_box, 1, 2, 1, 2, FILL|EXPAND, FILL, 0, 0);
|
||||||
edit_packer.attach (time_canvas_event_box, 1, 2, 0, 1, FILL|EXPAND, FILL, 0, 0);
|
|
||||||
|
|
||||||
edit_packer.attach (controls_layout, 0, 1, 3, 4, FILL, FILL|EXPAND, 0, 0);
|
edit_packer.attach (controls_layout, 0, 1, 3, 4, FILL, FILL|EXPAND, 0, 0);
|
||||||
edit_packer.attach (track_canvas_event_box, 1, 2, 1, 4, FILL|EXPAND, FILL|EXPAND, 0, 0);
|
edit_packer.attach (track_canvas_event_box, 1, 2, 2, 4, FILL|EXPAND, FILL|EXPAND, 0, 0);
|
||||||
|
|
||||||
edit_packer.attach (zoom_box, 0, 1, 4, 5, FILL, FILL, 0, 0);
|
edit_packer.attach (zoom_box, 0, 1, 4, 5, FILL, FILL, 0, 0);
|
||||||
edit_packer.attach (edit_hscrollbar, 1, 2, 4, 5, FILL|EXPAND, FILL, 0, 0);
|
edit_packer.attach (edit_hscrollbar, 1, 2, 4, 5, FILL|EXPAND, FILL, 0, 0);
|
||||||
|
|
@ -993,14 +993,14 @@ Editor::zoom_adjustment_changed ()
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
double fpu = zoom_range_clock.current_duration() / canvas_width;
|
double fpu = zoom_range_clock.current_duration() / _canvas_width;
|
||||||
|
|
||||||
if (fpu < 1.0) {
|
if (fpu < 1.0) {
|
||||||
fpu = 1.0;
|
fpu = 1.0;
|
||||||
zoom_range_clock.set ((nframes64_t) floor (fpu * canvas_width));
|
zoom_range_clock.set ((nframes64_t) floor (fpu * _canvas_width));
|
||||||
} else if (fpu > session->current_end_frame() / canvas_width) {
|
} else if (fpu > session->current_end_frame() / _canvas_width) {
|
||||||
fpu = session->current_end_frame() / canvas_width;
|
fpu = session->current_end_frame() / _canvas_width;
|
||||||
zoom_range_clock.set ((nframes64_t) floor (fpu * canvas_width));
|
zoom_range_clock.set ((nframes64_t) floor (fpu * _canvas_width));
|
||||||
}
|
}
|
||||||
|
|
||||||
temporal_zoom (fpu);
|
temporal_zoom (fpu);
|
||||||
|
|
@ -1134,7 +1134,7 @@ Editor::map_position_change (nframes64_t frame)
|
||||||
void
|
void
|
||||||
Editor::center_screen (nframes64_t frame)
|
Editor::center_screen (nframes64_t frame)
|
||||||
{
|
{
|
||||||
double page = canvas_width * frames_per_unit;
|
double page = _canvas_width * frames_per_unit;
|
||||||
|
|
||||||
/* if we're off the page, then scroll.
|
/* if we're off the page, then scroll.
|
||||||
*/
|
*/
|
||||||
|
|
@ -1171,8 +1171,8 @@ Editor::handle_new_duration ()
|
||||||
horizontal_adjustment.set_upper (new_end / frames_per_unit);
|
horizontal_adjustment.set_upper (new_end / frames_per_unit);
|
||||||
horizontal_adjustment.set_page_size (current_page_frames()/frames_per_unit);
|
horizontal_adjustment.set_page_size (current_page_frames()/frames_per_unit);
|
||||||
|
|
||||||
if (horizontal_adjustment.get_value() + canvas_width > horizontal_adjustment.get_upper()) {
|
if (horizontal_adjustment.get_value() + _canvas_width > horizontal_adjustment.get_upper()) {
|
||||||
horizontal_adjustment.set_value (horizontal_adjustment.get_upper() - canvas_width);
|
horizontal_adjustment.set_value (horizontal_adjustment.get_upper() - _canvas_width);
|
||||||
}
|
}
|
||||||
//cerr << "Editor::handle_new_duration () called ha v:l:u:ps:lcf = " << horizontal_adjustment.get_value() << ":" << horizontal_adjustment.get_lower() << ":" << horizontal_adjustment.get_upper() << ":" << horizontal_adjustment.get_page_size() << ":" << endl;//DEBUG
|
//cerr << "Editor::handle_new_duration () called ha v:l:u:ps:lcf = " << horizontal_adjustment.get_value() << ":" << horizontal_adjustment.get_lower() << ":" << horizontal_adjustment.get_upper() << ":" << horizontal_adjustment.get_page_size() << ":" << endl;//DEBUG
|
||||||
}
|
}
|
||||||
|
|
@ -3645,7 +3645,7 @@ Editor::clamp_verbose_cursor_x (double x)
|
||||||
if (x < 0) {
|
if (x < 0) {
|
||||||
x = 0;
|
x = 0;
|
||||||
} else {
|
} else {
|
||||||
x = min (canvas_width - 200.0, x);
|
x = min (_canvas_width - 200.0, x);
|
||||||
}
|
}
|
||||||
return x;
|
return x;
|
||||||
}
|
}
|
||||||
|
|
@ -3656,7 +3656,7 @@ Editor::clamp_verbose_cursor_y (double y)
|
||||||
if (y < canvas_timebars_vsize) {
|
if (y < canvas_timebars_vsize) {
|
||||||
y = canvas_timebars_vsize;
|
y = canvas_timebars_vsize;
|
||||||
} else {
|
} else {
|
||||||
y = min (canvas_height - 50, y);
|
y = min (_canvas_height - 50, y);
|
||||||
}
|
}
|
||||||
return y;
|
return y;
|
||||||
}
|
}
|
||||||
|
|
@ -4518,6 +4518,12 @@ Editor::reset_x_origin (nframes64_t frame)
|
||||||
queue_visual_change (frame);
|
queue_visual_change (frame);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
Editor::reset_y_origin (double y)
|
||||||
|
{
|
||||||
|
queue_visual_change_y (y);
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
Editor::reset_zoom (double fpu)
|
Editor::reset_zoom (double fpu)
|
||||||
{
|
{
|
||||||
|
|
@ -4662,7 +4668,7 @@ Editor::post_zoom ()
|
||||||
|
|
||||||
// convert fpu to frame count
|
// convert fpu to frame count
|
||||||
|
|
||||||
nframes64_t frames = (nframes64_t) floor (frames_per_unit * canvas_width);
|
nframes64_t frames = (nframes64_t) floor (frames_per_unit * _canvas_width);
|
||||||
|
|
||||||
if (frames_per_unit != zoom_range_clock.current_duration()) {
|
if (frames_per_unit != zoom_range_clock.current_duration()) {
|
||||||
zoom_range_clock.set (frames);
|
zoom_range_clock.set (frames);
|
||||||
|
|
@ -4734,6 +4740,17 @@ Editor::queue_visual_change (double fpu)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
Editor::queue_visual_change_y (double y)
|
||||||
|
{
|
||||||
|
pending_visual_change.pending = VisualChange::Type (pending_visual_change.pending | VisualChange::YOrigin);
|
||||||
|
pending_visual_change.y_origin = y;
|
||||||
|
|
||||||
|
if (pending_visual_change.idle_handler_id < 0) {
|
||||||
|
pending_visual_change.idle_handler_id = g_idle_add ( _idle_visual_changer, this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
Editor::_idle_visual_changer (void* arg)
|
Editor::_idle_visual_changer (void* arg)
|
||||||
{
|
{
|
||||||
|
|
@ -4761,6 +4778,9 @@ Editor::idle_visual_changer ()
|
||||||
if (p & VisualChange::TimeOrigin) {
|
if (p & VisualChange::TimeOrigin) {
|
||||||
horizontal_adjustment.set_value (pending_visual_change.time_origin / frames_per_unit);
|
horizontal_adjustment.set_value (pending_visual_change.time_origin / frames_per_unit);
|
||||||
}
|
}
|
||||||
|
if (p & VisualChange::YOrigin) {
|
||||||
|
vertical_adjustment.set_value (pending_visual_change.y_origin);
|
||||||
|
}
|
||||||
|
|
||||||
nframes64_t csf=0, cef=0;
|
nframes64_t csf=0, cef=0;
|
||||||
nframes64_t current_time_origin = (nframes64_t) floor (horizontal_adjustment.get_value() * frames_per_unit);
|
nframes64_t current_time_origin = (nframes64_t) floor (horizontal_adjustment.get_value() * frames_per_unit);
|
||||||
|
|
@ -4788,6 +4808,9 @@ Editor::idle_visual_changer ()
|
||||||
update_fixed_rulers();
|
update_fixed_rulers();
|
||||||
redisplay_tempo (true);
|
redisplay_tempo (true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_summary->set_bounds_dirty ();
|
||||||
|
|
||||||
//cerr << "Editor::idle_visual_changer () called ha v:l:u:ps:fpu = " << horizontal_adjustment.get_value() << ":" << horizontal_adjustment.get_lower() << ":" << horizontal_adjustment.get_upper() << ":" << horizontal_adjustment.get_page_size() << ":" << frames_per_unit << endl;//DEBUG
|
//cerr << "Editor::idle_visual_changer () called ha v:l:u:ps:fpu = " << horizontal_adjustment.get_value() << ":" << horizontal_adjustment.get_lower() << ":" << horizontal_adjustment.get_upper() << ":" << horizontal_adjustment.get_page_size() << ":" << frames_per_unit << endl;//DEBUG
|
||||||
pending_visual_change.idle_handler_id = -1;
|
pending_visual_change.idle_handler_id = -1;
|
||||||
return 0; /* this is always a one-shot call */
|
return 0; /* this is always a one-shot call */
|
||||||
|
|
@ -5154,7 +5177,7 @@ Editor::end_resize_line_ops ()
|
||||||
need_resize_line = false;
|
need_resize_line = false;
|
||||||
|
|
||||||
if (old_resize_line_y >= 0) {
|
if (old_resize_line_y >= 0) {
|
||||||
Gdk::Rectangle r (0, old_resize_line_y, (int) canvas_width, 3);
|
Gdk::Rectangle r (0, old_resize_line_y, (int) _canvas_width, 3);
|
||||||
Glib::RefPtr<Gdk::Window> win = get_window();
|
Glib::RefPtr<Gdk::Window> win = get_window();
|
||||||
cerr << "Final invalidation at " << old_resize_line_y << endl;
|
cerr << "Final invalidation at " << old_resize_line_y << endl;
|
||||||
win->invalidate_rect (r, false);
|
win->invalidate_rect (r, false);
|
||||||
|
|
@ -5170,7 +5193,7 @@ Editor::queue_draw_resize_line (int at)
|
||||||
|
|
||||||
resize_line_y = at;
|
resize_line_y = at;
|
||||||
|
|
||||||
if (win && canvas_width) {
|
if (win && _canvas_width) {
|
||||||
|
|
||||||
int controls_width = controls_layout.get_width();
|
int controls_width = controls_layout.get_width();
|
||||||
int xroot, discard;
|
int xroot, discard;
|
||||||
|
|
@ -5182,15 +5205,15 @@ Editor::queue_draw_resize_line (int at)
|
||||||
/* redraw where it used to be */
|
/* redraw where it used to be */
|
||||||
|
|
||||||
|
|
||||||
Gdk::Rectangle r (0, old_resize_line_y - 1, controls_width + (int) canvas_width, 3);
|
Gdk::Rectangle r (0, old_resize_line_y - 1, controls_width + (int) _canvas_width, 3);
|
||||||
win->invalidate_rect (r, true);
|
win->invalidate_rect (r, true);
|
||||||
cerr << "invalidate " << xroot << "," << old_resize_line_y - 1 << ' '
|
cerr << "invalidate " << xroot << "," << old_resize_line_y - 1 << ' '
|
||||||
<< controls_width + canvas_width << " x 3\n";
|
<< controls_width + _canvas_width << " x 3\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
/* draw where it is */
|
/* draw where it is */
|
||||||
|
|
||||||
Gdk::Rectangle r (0, at - 1, controls_width + (int) canvas_width, 3);
|
Gdk::Rectangle r (0, at - 1, controls_width + (int) _canvas_width, 3);
|
||||||
win->invalidate_rect (r, true);
|
win->invalidate_rect (r, true);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
@ -5227,7 +5250,7 @@ Editor::on_expose_event (GdkEventExpose* ev)
|
||||||
|
|
||||||
lr.x = 0;
|
lr.x = 0;
|
||||||
lr.y = resize_line_y;
|
lr.y = resize_line_y;
|
||||||
lr.width = controls_width + (int) canvas_width;
|
lr.width = controls_width + (int) _canvas_width;
|
||||||
lr.height = 3;
|
lr.height = 3;
|
||||||
|
|
||||||
if (gdk_rectangle_intersect (&lr, &ev->area, &intersection)) {
|
if (gdk_rectangle_intersect (&lr, &ev->area, &intersection)) {
|
||||||
|
|
@ -5248,11 +5271,11 @@ Editor::on_expose_event (GdkEventExpose* ev)
|
||||||
gdk_draw_line (win, gc->gobj(),
|
gdk_draw_line (win, gc->gobj(),
|
||||||
0,
|
0,
|
||||||
resize_line_y,
|
resize_line_y,
|
||||||
(int) canvas_width + controls_width,
|
(int) _canvas_width + controls_width,
|
||||||
resize_line_y);
|
resize_line_y);
|
||||||
#if 0
|
#if 0
|
||||||
cerr << "drew line @ " << xroot << ", " << yroot + resize_line_y
|
cerr << "drew line @ " << xroot << ", " << yroot + resize_line_y
|
||||||
<< " to " << xroot + (int) canvas_width + controls_width
|
<< " to " << xroot + (int) _canvas_width + controls_width
|
||||||
<< ", " << yroot + resize_line_y
|
<< ", " << yroot + resize_line_y
|
||||||
<< endl;
|
<< endl;
|
||||||
#endif
|
#endif
|
||||||
|
|
@ -5320,3 +5343,9 @@ Editor::region_view_added (RegionView *)
|
||||||
{
|
{
|
||||||
_summary->set_dirty ();
|
_summary->set_dirty ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
Editor::streamview_height_changed ()
|
||||||
|
{
|
||||||
|
_summary->set_dirty ();
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -152,8 +152,13 @@ class Editor : public PublicEditor
|
||||||
virtual bool have_idled () const { return _have_idled; }
|
virtual bool have_idled () const { return _have_idled; }
|
||||||
|
|
||||||
nframes64_t leftmost_position() const { return leftmost_frame; }
|
nframes64_t leftmost_position() const { return leftmost_frame; }
|
||||||
|
|
||||||
nframes64_t current_page_frames() const {
|
nframes64_t current_page_frames() const {
|
||||||
return (nframes64_t) floor (canvas_width * frames_per_unit);
|
return (nframes64_t) floor (_canvas_width * frames_per_unit);
|
||||||
|
}
|
||||||
|
|
||||||
|
double canvas_height () const {
|
||||||
|
return _canvas_height;
|
||||||
}
|
}
|
||||||
|
|
||||||
void cycle_snap_mode ();
|
void cycle_snap_mode ();
|
||||||
|
|
@ -373,6 +378,7 @@ class Editor : public PublicEditor
|
||||||
void restore_editing_space();
|
void restore_editing_space();
|
||||||
|
|
||||||
void reset_x_origin (nframes64_t);
|
void reset_x_origin (nframes64_t);
|
||||||
|
void reset_y_origin (double);
|
||||||
void reset_zoom (double);
|
void reset_zoom (double);
|
||||||
void reposition_and_zoom (nframes64_t, double);
|
void reposition_and_zoom (nframes64_t, double);
|
||||||
|
|
||||||
|
|
@ -863,8 +869,8 @@ class Editor : public PublicEditor
|
||||||
bool hscrollbar_button_release (GdkEventButton*);
|
bool hscrollbar_button_release (GdkEventButton*);
|
||||||
void hscrollbar_allocate (Gtk::Allocation &alloc);
|
void hscrollbar_allocate (Gtk::Allocation &alloc);
|
||||||
|
|
||||||
double canvas_width;
|
double _canvas_width;
|
||||||
double canvas_height;
|
double _canvas_height;
|
||||||
double full_canvas_height;
|
double full_canvas_height;
|
||||||
|
|
||||||
bool track_canvas_map_handler (GdkEventAny*);
|
bool track_canvas_map_handler (GdkEventAny*);
|
||||||
|
|
@ -896,12 +902,14 @@ class Editor : public PublicEditor
|
||||||
struct VisualChange {
|
struct VisualChange {
|
||||||
enum Type {
|
enum Type {
|
||||||
TimeOrigin = 0x1,
|
TimeOrigin = 0x1,
|
||||||
ZoomLevel = 0x2
|
ZoomLevel = 0x2,
|
||||||
|
YOrigin = 0x4
|
||||||
};
|
};
|
||||||
|
|
||||||
Type pending;
|
Type pending;
|
||||||
nframes64_t time_origin;
|
nframes64_t time_origin;
|
||||||
double frames_per_unit;
|
double frames_per_unit;
|
||||||
|
double y_origin;
|
||||||
|
|
||||||
int idle_handler_id;
|
int idle_handler_id;
|
||||||
|
|
||||||
|
|
@ -916,6 +924,7 @@ class Editor : public PublicEditor
|
||||||
|
|
||||||
void queue_visual_change (nframes64_t);
|
void queue_visual_change (nframes64_t);
|
||||||
void queue_visual_change (double);
|
void queue_visual_change (double);
|
||||||
|
void queue_visual_change_y (double);
|
||||||
|
|
||||||
void end_location_changed (ARDOUR::Location*);
|
void end_location_changed (ARDOUR::Location*);
|
||||||
|
|
||||||
|
|
@ -2220,6 +2229,7 @@ public:
|
||||||
void region_view_added (RegionView *);
|
void region_view_added (RegionView *);
|
||||||
|
|
||||||
void update_canvas_now ();
|
void update_canvas_now ();
|
||||||
|
void streamview_height_changed ();
|
||||||
|
|
||||||
friend class Drag;
|
friend class Drag;
|
||||||
friend class RegionDrag;
|
friend class RegionDrag;
|
||||||
|
|
|
||||||
|
|
@ -321,10 +321,10 @@ Editor::track_canvas_allocate (Gtk::Allocation alloc)
|
||||||
bool
|
bool
|
||||||
Editor::track_canvas_size_allocated ()
|
Editor::track_canvas_size_allocated ()
|
||||||
{
|
{
|
||||||
bool height_changed = canvas_height != canvas_allocation.get_height();
|
bool height_changed = _canvas_height != canvas_allocation.get_height();
|
||||||
|
|
||||||
canvas_width = canvas_allocation.get_width();
|
_canvas_width = canvas_allocation.get_width();
|
||||||
canvas_height = canvas_allocation.get_height();
|
_canvas_height = canvas_allocation.get_height();
|
||||||
|
|
||||||
if (session) {
|
if (session) {
|
||||||
TrackViewList::iterator i;
|
TrackViewList::iterator i;
|
||||||
|
|
@ -340,21 +340,21 @@ Editor::track_canvas_size_allocated ()
|
||||||
|
|
||||||
if (height_changed) {
|
if (height_changed) {
|
||||||
if (playhead_cursor) {
|
if (playhead_cursor) {
|
||||||
playhead_cursor->set_length (canvas_height);
|
playhead_cursor->set_length (_canvas_height);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (MarkerSelection::iterator x = selection->markers.begin(); x != selection->markers.end(); ++x) {
|
for (MarkerSelection::iterator x = selection->markers.begin(); x != selection->markers.end(); ++x) {
|
||||||
(*x)->set_line_vpos (0, canvas_height);
|
(*x)->set_line_vpos (0, _canvas_height);
|
||||||
}
|
}
|
||||||
|
|
||||||
vertical_adjustment.set_page_size (canvas_height);
|
vertical_adjustment.set_page_size (_canvas_height);
|
||||||
last_trackview_group_vertical_offset = get_trackview_group_vertical_offset ();
|
last_trackview_group_vertical_offset = get_trackview_group_vertical_offset ();
|
||||||
if ((vertical_adjustment.get_value() + canvas_height) >= vertical_adjustment.get_upper()) {
|
if ((vertical_adjustment.get_value() + _canvas_height) >= vertical_adjustment.get_upper()) {
|
||||||
/*
|
/*
|
||||||
We're increasing the size of the canvas while the bottom is visible.
|
We're increasing the size of the canvas while the bottom is visible.
|
||||||
We scroll down to keep in step with the controls layout.
|
We scroll down to keep in step with the controls layout.
|
||||||
*/
|
*/
|
||||||
vertical_adjustment.set_value (full_canvas_height - canvas_height);
|
vertical_adjustment.set_value (full_canvas_height - _canvas_height);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -551,7 +551,7 @@ Editor::maybe_autoscroll (GdkEventMotion* event)
|
||||||
if (event->y < canvas_timebars_vsize) {
|
if (event->y < canvas_timebars_vsize) {
|
||||||
autoscroll_y = -1;
|
autoscroll_y = -1;
|
||||||
startit = true;
|
startit = true;
|
||||||
} else if (event->y > canvas_height) {
|
} else if (event->y > _canvas_height) {
|
||||||
autoscroll_y = 1;
|
autoscroll_y = 1;
|
||||||
startit = true;
|
startit = true;
|
||||||
}
|
}
|
||||||
|
|
@ -613,7 +613,7 @@ Editor::autoscroll_canvas ()
|
||||||
|
|
||||||
if (autoscroll_y_distance != 0) {
|
if (autoscroll_y_distance != 0) {
|
||||||
if (autoscroll_y > 0) {
|
if (autoscroll_y > 0) {
|
||||||
autoscroll_y_distance = (_drag->current_pointer_y() - (get_trackview_group_vertical_offset() + canvas_height)) / 3;
|
autoscroll_y_distance = (_drag->current_pointer_y() - (get_trackview_group_vertical_offset() + _canvas_height)) / 3;
|
||||||
} else if (autoscroll_y < 0) {
|
} else if (autoscroll_y < 0) {
|
||||||
|
|
||||||
autoscroll_y_distance = (vertical_adjustment.get_value () - _drag->current_pointer_y()) / 3;
|
autoscroll_y_distance = (vertical_adjustment.get_value () - _drag->current_pointer_y()) / 3;
|
||||||
|
|
@ -651,7 +651,7 @@ Editor::autoscroll_canvas ()
|
||||||
|
|
||||||
} else if (autoscroll_y > 0) {
|
} else if (autoscroll_y > 0) {
|
||||||
|
|
||||||
double top_of_bottom_of_canvas = full_canvas_height - canvas_height;
|
double top_of_bottom_of_canvas = full_canvas_height - _canvas_height;
|
||||||
|
|
||||||
if (vertical_pos > full_canvas_height - autoscroll_y_distance) {
|
if (vertical_pos > full_canvas_height - autoscroll_y_distance) {
|
||||||
new_pixel = full_canvas_height;
|
new_pixel = full_canvas_height;
|
||||||
|
|
@ -769,6 +769,10 @@ Editor::tie_vertical_scrolling ()
|
||||||
/* this will do an immediate redraw */
|
/* this will do an immediate redraw */
|
||||||
|
|
||||||
controls_layout.get_vadjustment()->set_value (vertical_adjustment.get_value());
|
controls_layout.get_vadjustment()->set_value (vertical_adjustment.get_value());
|
||||||
|
|
||||||
|
if (pending_visual_change.idle_handler_id < 0) {
|
||||||
|
_summary->set_bounds_dirty ();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
@ -790,7 +794,9 @@ Editor::scroll_canvas_horizontally ()
|
||||||
update_fixed_rulers ();
|
update_fixed_rulers ();
|
||||||
redisplay_tempo (true);
|
redisplay_tempo (true);
|
||||||
|
|
||||||
|
if (pending_visual_change.idle_handler_id < 0) {
|
||||||
_summary->set_bounds_dirty ();
|
_summary->set_bounds_dirty ();
|
||||||
|
}
|
||||||
|
|
||||||
#ifndef GTKOSX
|
#ifndef GTKOSX
|
||||||
if (!autoscroll_active) {
|
if (!autoscroll_active) {
|
||||||
|
|
|
||||||
|
|
@ -2994,7 +2994,7 @@ SelectionDrag::motion (GdkEvent* event, bool first_move)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (event->button.x >= _editor->horizontal_adjustment.get_value() + _editor->canvas_width) {
|
if (event->button.x >= _editor->horizontal_adjustment.get_value() + _editor->_canvas_width) {
|
||||||
_editor->start_canvas_autoscroll (1, 0);
|
_editor->start_canvas_autoscroll (1, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -3149,7 +3149,7 @@ RangeMarkerBarDrag::motion (GdkEvent* event, bool first_move)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (event->button.x >= _editor->horizontal_adjustment.get_value() + _editor->canvas_width) {
|
if (event->button.x >= _editor->horizontal_adjustment.get_value() + _editor->_canvas_width) {
|
||||||
_editor->start_canvas_autoscroll (1, 0);
|
_editor->start_canvas_autoscroll (1, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1188,7 +1188,7 @@ Editor::marker_selection_changed ()
|
||||||
}
|
}
|
||||||
|
|
||||||
for (MarkerSelection::iterator x = selection->markers.begin(); x != selection->markers.end(); ++x) {
|
for (MarkerSelection::iterator x = selection->markers.begin(); x != selection->markers.end(); ++x) {
|
||||||
(*x)->add_line (cursor_group, 0, canvas_height);
|
(*x)->add_line (cursor_group, 0, _canvas_height);
|
||||||
(*x)->show_line ();
|
(*x)->show_line ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1416,7 +1416,7 @@ void
|
||||||
Editor::scroll_backward (float pages)
|
Editor::scroll_backward (float pages)
|
||||||
{
|
{
|
||||||
nframes64_t frame;
|
nframes64_t frame;
|
||||||
nframes64_t one_page = (nframes64_t) rint (canvas_width * frames_per_unit);
|
nframes64_t one_page = (nframes64_t) rint (_canvas_width * frames_per_unit);
|
||||||
bool was_floating;
|
bool was_floating;
|
||||||
float prefix;
|
float prefix;
|
||||||
nframes64_t cnt;
|
nframes64_t cnt;
|
||||||
|
|
@ -1444,7 +1444,7 @@ void
|
||||||
Editor::scroll_forward (float pages)
|
Editor::scroll_forward (float pages)
|
||||||
{
|
{
|
||||||
nframes64_t frame;
|
nframes64_t frame;
|
||||||
nframes64_t one_page = (nframes64_t) rint (canvas_width * frames_per_unit);
|
nframes64_t one_page = (nframes64_t) rint (_canvas_width * frames_per_unit);
|
||||||
bool was_floating;
|
bool was_floating;
|
||||||
float prefix;
|
float prefix;
|
||||||
nframes64_t cnt;
|
nframes64_t cnt;
|
||||||
|
|
@ -1483,8 +1483,8 @@ Editor::scroll_tracks_down ()
|
||||||
|
|
||||||
double vert_value = vertical_adjustment.get_value() + (cnt *
|
double vert_value = vertical_adjustment.get_value() + (cnt *
|
||||||
vertical_adjustment.get_page_size());
|
vertical_adjustment.get_page_size());
|
||||||
if (vert_value > vertical_adjustment.get_upper() - canvas_height) {
|
if (vert_value > vertical_adjustment.get_upper() - _canvas_height) {
|
||||||
vert_value = vertical_adjustment.get_upper() - canvas_height;
|
vert_value = vertical_adjustment.get_upper() - _canvas_height;
|
||||||
}
|
}
|
||||||
vertical_adjustment.set_value (vert_value);
|
vertical_adjustment.set_value (vert_value);
|
||||||
}
|
}
|
||||||
|
|
@ -1512,8 +1512,8 @@ Editor::scroll_tracks_down_line ()
|
||||||
Gtk::Adjustment* adj = edit_vscrollbar.get_adjustment();
|
Gtk::Adjustment* adj = edit_vscrollbar.get_adjustment();
|
||||||
double vert_value = adj->get_value() + 60;
|
double vert_value = adj->get_value() + 60;
|
||||||
|
|
||||||
if (vert_value>adj->get_upper() - canvas_height) {
|
if (vert_value>adj->get_upper() - _canvas_height) {
|
||||||
vert_value = adj->get_upper() - canvas_height;
|
vert_value = adj->get_upper() - _canvas_height;
|
||||||
}
|
}
|
||||||
adj->set_value (vert_value);
|
adj->set_value (vert_value);
|
||||||
}
|
}
|
||||||
|
|
@ -1570,7 +1570,7 @@ Editor::temporal_zoom (gdouble fpu)
|
||||||
|
|
||||||
nfpu = fpu;
|
nfpu = fpu;
|
||||||
|
|
||||||
new_page_size = (nframes64_t) floor (canvas_width * nfpu);
|
new_page_size = (nframes64_t) floor (_canvas_width * nfpu);
|
||||||
half_page_size = new_page_size / 2;
|
half_page_size = new_page_size / 2;
|
||||||
|
|
||||||
switch (zoom_focus) {
|
switch (zoom_focus) {
|
||||||
|
|
@ -1713,7 +1713,7 @@ Editor::temporal_zoom_region (bool both_axes)
|
||||||
}
|
}
|
||||||
|
|
||||||
nframes64_t range = end - start;
|
nframes64_t range = end - start;
|
||||||
double new_fpu = (double)range / (double)canvas_width;
|
double new_fpu = (double)range / (double)_canvas_width;
|
||||||
nframes64_t extra_samples = (nframes64_t) floor (one_centimeter_in_pixels * new_fpu);
|
nframes64_t extra_samples = (nframes64_t) floor (one_centimeter_in_pixels * new_fpu);
|
||||||
|
|
||||||
if (start > extra_samples) {
|
if (start > extra_samples) {
|
||||||
|
|
@ -1739,7 +1739,7 @@ Editor::temporal_zoom_region (bool both_axes)
|
||||||
temporal_zoom_by_frame (start, end, "zoom to region");
|
temporal_zoom_by_frame (start, end, "zoom to region");
|
||||||
|
|
||||||
if (both_axes) {
|
if (both_axes) {
|
||||||
uint32_t per_track_height = (uint32_t) floor ((canvas_height - canvas_timebars_vsize - 10.0) / tracks.size());
|
uint32_t per_track_height = (uint32_t) floor ((_canvas_height - canvas_timebars_vsize - 10.0) / tracks.size());
|
||||||
|
|
||||||
/* set visible track heights appropriately */
|
/* set visible track heights appropriately */
|
||||||
|
|
||||||
|
|
@ -1814,9 +1814,9 @@ Editor::temporal_zoom_by_frame (nframes64_t start, nframes64_t end, const string
|
||||||
|
|
||||||
nframes64_t range = end - start;
|
nframes64_t range = end - start;
|
||||||
|
|
||||||
double new_fpu = (double)range / (double)canvas_width;
|
double new_fpu = (double)range / (double)_canvas_width;
|
||||||
|
|
||||||
nframes64_t new_page = (nframes64_t) floor (canvas_width * new_fpu);
|
nframes64_t new_page = (nframes64_t) floor (_canvas_width * new_fpu);
|
||||||
nframes64_t middle = (nframes64_t) floor( (double)start + ((double)range / 2.0f ));
|
nframes64_t middle = (nframes64_t) floor( (double)start + ((double)range / 2.0f ));
|
||||||
nframes64_t new_leftmost = (nframes64_t) floor( (double)middle - ((double)new_page/2.0f));
|
nframes64_t new_leftmost = (nframes64_t) floor( (double)middle - ((double)new_page/2.0f));
|
||||||
|
|
||||||
|
|
@ -4483,14 +4483,14 @@ Editor::reset_point_selection ()
|
||||||
void
|
void
|
||||||
Editor::center_playhead ()
|
Editor::center_playhead ()
|
||||||
{
|
{
|
||||||
float page = canvas_width * frames_per_unit;
|
float page = _canvas_width * frames_per_unit;
|
||||||
center_screen_internal (playhead_cursor->current_frame, page);
|
center_screen_internal (playhead_cursor->current_frame, page);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
Editor::center_edit_point ()
|
Editor::center_edit_point ()
|
||||||
{
|
{
|
||||||
float page = canvas_width * frames_per_unit;
|
float page = _canvas_width * frames_per_unit;
|
||||||
center_screen_internal (get_preferred_edit_position(), page);
|
center_screen_internal (get_preferred_edit_position(), page);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -6329,7 +6329,7 @@ Editor::fit_tracks ()
|
||||||
child_heights += (*t)->effective_height() - (*t)->current_height();
|
child_heights += (*t)->effective_height() - (*t)->current_height();
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t h = (uint32_t) floor ((canvas_height - child_heights - canvas_timebars_vsize)/selection->tracks.size());
|
uint32_t h = (uint32_t) floor ((_canvas_height - child_heights - canvas_timebars_vsize)/selection->tracks.size());
|
||||||
double first_y_pos = DBL_MAX;
|
double first_y_pos = DBL_MAX;
|
||||||
|
|
||||||
if (h < TimeAxisView::hSmall) {
|
if (h < TimeAxisView::hSmall) {
|
||||||
|
|
|
||||||
|
|
@ -131,6 +131,7 @@ Editor::handle_new_route (RouteList& routes)
|
||||||
|
|
||||||
route->gui_changed.connect (mem_fun(*this, &Editor::handle_gui_changes));
|
route->gui_changed.connect (mem_fun(*this, &Editor::handle_gui_changes));
|
||||||
tv->view()->RegionViewAdded.connect (mem_fun (*this, &Editor::region_view_added));
|
tv->view()->RegionViewAdded.connect (mem_fun (*this, &Editor::region_view_added));
|
||||||
|
tv->view()->HeightChanged.connect (mem_fun (*this, &Editor::streamview_height_changed));
|
||||||
|
|
||||||
tv->GoingAway.connect (bind (mem_fun(*this, &Editor::remove_route), tv));
|
tv->GoingAway.connect (bind (mem_fun(*this, &Editor::remove_route), tv));
|
||||||
}
|
}
|
||||||
|
|
@ -394,12 +395,12 @@ Editor::redisplay_route_list ()
|
||||||
|
|
||||||
full_canvas_height = position + canvas_timebars_vsize;
|
full_canvas_height = position + canvas_timebars_vsize;
|
||||||
vertical_adjustment.set_upper (full_canvas_height);
|
vertical_adjustment.set_upper (full_canvas_height);
|
||||||
if ((vertical_adjustment.get_value() + canvas_height) > vertical_adjustment.get_upper()) {
|
if ((vertical_adjustment.get_value() + _canvas_height) > vertical_adjustment.get_upper()) {
|
||||||
/*
|
/*
|
||||||
We're increasing the size of the canvas while the bottom is visible.
|
We're increasing the size of the canvas while the bottom is visible.
|
||||||
We scroll down to keep in step with the controls layout.
|
We scroll down to keep in step with the controls layout.
|
||||||
*/
|
*/
|
||||||
vertical_adjustment.set_value (full_canvas_height - canvas_height);
|
vertical_adjustment.set_value (full_canvas_height - _canvas_height);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!route_redisplay_does_not_reset_order_keys && !route_redisplay_does_not_sync_order_keys) {
|
if (!route_redisplay_does_not_reset_order_keys && !route_redisplay_does_not_sync_order_keys) {
|
||||||
|
|
|
||||||
|
|
@ -831,9 +831,9 @@ Editor::update_ruler_visibility ()
|
||||||
vertical_adjustment.set_upper(vertical_adjustment.get_upper() + vertical_pos_delta);
|
vertical_adjustment.set_upper(vertical_adjustment.get_upper() + vertical_pos_delta);
|
||||||
full_canvas_height += vertical_pos_delta;
|
full_canvas_height += vertical_pos_delta;
|
||||||
|
|
||||||
if (vertical_adjustment.get_value() != 0 && (vertical_adjustment.get_value() + canvas_height >= full_canvas_height)) {
|
if (vertical_adjustment.get_value() != 0 && (vertical_adjustment.get_value() + _canvas_height >= full_canvas_height)) {
|
||||||
/*if we're at the bottom of the canvas, don't move the _trackview_group*/
|
/*if we're at the bottom of the canvas, don't move the _trackview_group*/
|
||||||
vertical_adjustment.set_value (full_canvas_height - canvas_height + 1);
|
vertical_adjustment.set_value (full_canvas_height - _canvas_height + 1);
|
||||||
} else {
|
} else {
|
||||||
_trackview_group->property_y () = - get_trackview_group_vertical_offset ();
|
_trackview_group->property_y () = - get_trackview_group_vertical_offset ();
|
||||||
_background_group->property_y () = - get_trackview_group_vertical_offset ();
|
_background_group->property_y () = - get_trackview_group_vertical_offset ();
|
||||||
|
|
@ -842,7 +842,7 @@ Editor::update_ruler_visibility ()
|
||||||
last_trackview_group_vertical_offset = get_trackview_group_vertical_offset ();
|
last_trackview_group_vertical_offset = get_trackview_group_vertical_offset ();
|
||||||
}
|
}
|
||||||
|
|
||||||
gdouble bottom_track_pos = vertical_adjustment.get_value() + canvas_height - canvas_timebars_vsize;
|
gdouble bottom_track_pos = vertical_adjustment.get_value() + _canvas_height - canvas_timebars_vsize;
|
||||||
std::pair<TimeAxisView*, int> const p = trackview_by_y_position (bottom_track_pos);
|
std::pair<TimeAxisView*, int> const p = trackview_by_y_position (bottom_track_pos);
|
||||||
if (p.first) {
|
if (p.first) {
|
||||||
p.first->clip_to_viewport ();
|
p.first->clip_to_viewport ();
|
||||||
|
|
|
||||||
|
|
@ -255,7 +255,7 @@ void
|
||||||
Editor::get_onscreen_tracks (TrackViewList& tvl)
|
Editor::get_onscreen_tracks (TrackViewList& tvl)
|
||||||
{
|
{
|
||||||
for (TrackViewList::iterator i = track_views.begin(); i != track_views.end(); ++i) {
|
for (TrackViewList::iterator i = track_views.begin(); i != track_views.end(); ++i) {
|
||||||
if ((*i)->y_position() < canvas_height) {
|
if ((*i)->y_position() < _canvas_height) {
|
||||||
tvl.push_back (*i);
|
tvl.push_back (*i);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -20,7 +20,10 @@ EditorSummary::EditorSummary (Editor* e)
|
||||||
_regions_dirty (true),
|
_regions_dirty (true),
|
||||||
_width (512),
|
_width (512),
|
||||||
_height (64),
|
_height (64),
|
||||||
_pixels_per_frame (1)
|
_pixels_per_frame (1),
|
||||||
|
_vertical_scale (1),
|
||||||
|
_dragging (false)
|
||||||
|
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
@ -84,21 +87,21 @@ EditorSummary::on_expose_event (GdkEventExpose* event)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Render the view beginning and end markers */
|
/* Render the view rectangle */
|
||||||
|
|
||||||
|
pair<double, double> x;
|
||||||
|
pair<double, double> y;
|
||||||
|
editor_view (&x, &y);
|
||||||
|
|
||||||
cairo_t* cr = gdk_cairo_create (get_window()->gobj());
|
cairo_t* cr = gdk_cairo_create (get_window()->gobj());
|
||||||
|
|
||||||
cairo_set_source_rgb (cr, 0, 1, 0);
|
cairo_set_source_rgba (cr, 0, 1, 0, 0.5);
|
||||||
cairo_set_line_width (cr, 2);
|
|
||||||
|
|
||||||
double const s = (_editor->leftmost_position () - _session->current_start_frame ()) * _pixels_per_frame;
|
cairo_move_to (cr, x.first, y.first);
|
||||||
cairo_move_to (cr, s, 0);
|
cairo_line_to (cr, x.second, y.first);
|
||||||
cairo_line_to (cr, s, _height);
|
cairo_line_to (cr, x.second, y.second);
|
||||||
cairo_stroke (cr);
|
cairo_line_to (cr, x.first, y.second);
|
||||||
|
cairo_line_to (cr, x.first, y.first);
|
||||||
double const e = s + _editor->current_page_frames() * _pixels_per_frame;
|
|
||||||
cairo_move_to (cr, e, 0);
|
|
||||||
cairo_line_to (cr, e, _height);
|
|
||||||
cairo_stroke (cr);
|
cairo_stroke (cr);
|
||||||
|
|
||||||
cairo_destroy (cr);
|
cairo_destroy (cr);
|
||||||
|
|
@ -147,25 +150,25 @@ EditorSummary::render (cairo_t* cr)
|
||||||
|
|
||||||
int N = 0;
|
int N = 0;
|
||||||
|
|
||||||
/* count tracks to render */
|
/* compute total height of all tracks */
|
||||||
for (PublicEditor::TrackViewList::const_iterator i = _editor->track_views.begin(); i != _editor->track_views.end(); ++i) {
|
for (PublicEditor::TrackViewList::const_iterator i = _editor->track_views.begin(); i != _editor->track_views.end(); ++i) {
|
||||||
if ((*i)->view()) {
|
N += (*i)->effective_height ();
|
||||||
++N;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
nframes_t const start = _session->current_start_frame ();
|
nframes_t const start = _session->current_start_frame ();
|
||||||
_pixels_per_frame = static_cast<double> (_width) / (_session->current_end_frame() - start);
|
_pixels_per_frame = static_cast<double> (_width) / (_session->current_end_frame() - start);
|
||||||
double const track_height = static_cast<double> (_height) / N;
|
_vertical_scale = static_cast<double> (_height) / N;
|
||||||
|
|
||||||
cairo_set_line_width (cr, track_height);
|
|
||||||
|
|
||||||
/* render regions */
|
/* render regions */
|
||||||
|
|
||||||
int n = 0;
|
int n = 0;
|
||||||
|
double y = 0;
|
||||||
for (PublicEditor::TrackViewList::const_iterator i = _editor->track_views.begin(); i != _editor->track_views.end(); ++i) {
|
for (PublicEditor::TrackViewList::const_iterator i = _editor->track_views.begin(); i != _editor->track_views.end(); ++i) {
|
||||||
StreamView* s = (*i)->view ();
|
StreamView* s = (*i)->view ();
|
||||||
|
|
||||||
if (s) {
|
if (s) {
|
||||||
|
double const h = (*i)->effective_height () * _vertical_scale;
|
||||||
|
cairo_set_line_width (cr, h);
|
||||||
|
|
||||||
double const v = ((n % 2) == 0) ? 1 : 0.5;
|
double const v = ((n % 2) == 0) ? 1 : 0.5;
|
||||||
cairo_set_source_rgb (cr, v, v, v);
|
cairo_set_source_rgb (cr, v, v, v);
|
||||||
|
|
@ -174,9 +177,10 @@ EditorSummary::render (cairo_t* cr)
|
||||||
mem_fun (*this, &EditorSummary::render_region),
|
mem_fun (*this, &EditorSummary::render_region),
|
||||||
cr,
|
cr,
|
||||||
start,
|
start,
|
||||||
track_height * (n + 0.5)
|
y + h / 2
|
||||||
));
|
));
|
||||||
++n;
|
++n;
|
||||||
|
y += h;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -247,19 +251,71 @@ EditorSummary::on_button_press_event (GdkEventButton* ev)
|
||||||
{
|
{
|
||||||
if (ev->button == 1) {
|
if (ev->button == 1) {
|
||||||
|
|
||||||
/* centre the editor view around the mouse click */
|
pair<double, double> xr;
|
||||||
|
pair<double, double> yr;
|
||||||
|
editor_view (&xr, &yr);
|
||||||
|
|
||||||
nframes_t f = (ev->x / _pixels_per_frame) + _session->current_start_frame();
|
if (xr.first <= ev->x && ev->x <= xr.second && yr.first <= ev->y && ev->y <= yr.second) {
|
||||||
|
|
||||||
|
/* click inside the view rectangle: drag it */
|
||||||
|
_dragging = true;
|
||||||
|
_x_offset = ev->x - xr.first;
|
||||||
|
_y_offset = ev->y - yr.first;
|
||||||
|
|
||||||
nframes_t const h = _editor->current_page_frames () / 2;
|
|
||||||
if (f > h) {
|
|
||||||
f -= h;
|
|
||||||
} else {
|
} else {
|
||||||
f = 0;
|
/* click outside the view rectangle: centre the view around the mouse click */
|
||||||
|
|
||||||
|
nframes_t x = (ev->x / _pixels_per_frame) + _session->current_start_frame();
|
||||||
|
nframes_t const xh = _editor->current_page_frames () / 2;
|
||||||
|
if (x > xh) {
|
||||||
|
x -= xh;
|
||||||
|
} else {
|
||||||
|
x = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
_editor->reset_x_origin (f);
|
_editor->reset_x_origin (x);
|
||||||
|
|
||||||
|
double y = ev->y / _vertical_scale;
|
||||||
|
double const yh = _editor->canvas_height () / 2;
|
||||||
|
if (y > yh) {
|
||||||
|
y -= yh;
|
||||||
|
} else {
|
||||||
|
y = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
_editor->reset_y_origin (y);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
EditorSummary::editor_view (pair<double, double>* x, pair<double, double>* y) const
|
||||||
|
{
|
||||||
|
x->first = (_editor->leftmost_position () - _session->current_start_frame ()) * _pixels_per_frame;
|
||||||
|
x->second = x->first + _editor->current_page_frames() * _pixels_per_frame;
|
||||||
|
|
||||||
|
y->first = _editor->get_trackview_group_vertical_offset () * _vertical_scale;
|
||||||
|
y->second = y->first + _editor->canvas_height () * _vertical_scale;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool
|
||||||
|
EditorSummary::on_motion_notify_event (GdkEventMotion* ev)
|
||||||
|
{
|
||||||
|
if (!_dragging) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
_editor->reset_x_origin (((ev->x - _x_offset) / _pixels_per_frame) + _session->current_start_frame ());
|
||||||
|
_editor->reset_y_origin ((ev->y - _y_offset) / _vertical_scale);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool
|
||||||
|
EditorSummary::on_button_release_event (GdkEventButton* ev)
|
||||||
|
{
|
||||||
|
_dragging = false;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -27,10 +27,13 @@ private:
|
||||||
void on_size_request (Gtk::Requisition *);
|
void on_size_request (Gtk::Requisition *);
|
||||||
void on_size_allocate (Gtk::Allocation &);
|
void on_size_allocate (Gtk::Allocation &);
|
||||||
bool on_button_press_event (GdkEventButton *);
|
bool on_button_press_event (GdkEventButton *);
|
||||||
|
bool on_button_release_event (GdkEventButton *);
|
||||||
|
bool on_motion_notify_event (GdkEventMotion *);
|
||||||
|
|
||||||
void render (cairo_t *);
|
void render (cairo_t *);
|
||||||
GdkPixmap* get_pixmap (GdkDrawable *);
|
GdkPixmap* get_pixmap (GdkDrawable *);
|
||||||
void render_region (RegionView*, cairo_t*, nframes_t, double) const;
|
void render_region (RegionView*, cairo_t*, nframes_t, double) const;
|
||||||
|
void editor_view (std::pair<double, double> *, std::pair<double, double> *) const;
|
||||||
|
|
||||||
Editor* _editor; ///< our editor
|
Editor* _editor; ///< our editor
|
||||||
ARDOUR::Session* _session; ///< our session
|
ARDOUR::Session* _session; ///< our session
|
||||||
|
|
@ -39,6 +42,10 @@ private:
|
||||||
int _width; ///< pixmap width
|
int _width; ///< pixmap width
|
||||||
int _height; ///< pixmap height
|
int _height; ///< pixmap height
|
||||||
double _pixels_per_frame; ///< pixels per frame for the x axis of the pixmap
|
double _pixels_per_frame; ///< pixels per frame for the x axis of the pixmap
|
||||||
|
double _vertical_scale;
|
||||||
|
bool _dragging;
|
||||||
|
double _x_offset;
|
||||||
|
double _y_offset;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
||||||
|
|
@ -135,6 +135,9 @@ StreamView::set_height (double h)
|
||||||
height = h;
|
height = h;
|
||||||
canvas_rect->property_y2() = height;
|
canvas_rect->property_y2() = height;
|
||||||
update_contents_height ();
|
update_contents_height ();
|
||||||
|
|
||||||
|
HeightChanged ();
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -540,7 +543,6 @@ StreamView::child_height () const
|
||||||
void
|
void
|
||||||
StreamView::update_contents_height ()
|
StreamView::update_contents_height ()
|
||||||
{
|
{
|
||||||
|
|
||||||
const double h = child_height ();
|
const double h = child_height ();
|
||||||
|
|
||||||
for (RegionViewList::iterator i = region_views.begin(); i != region_views.end(); ++i) {
|
for (RegionViewList::iterator i = region_views.begin(); i != region_views.end(); ++i) {
|
||||||
|
|
|
||||||
|
|
@ -109,6 +109,7 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
sigc::signal<void,RegionView*> RegionViewAdded;
|
sigc::signal<void,RegionView*> RegionViewAdded;
|
||||||
|
sigc::signal<void> HeightChanged;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
StreamView (RouteTimeAxisView&, ArdourCanvas::Group* group = NULL);
|
StreamView (RouteTimeAxisView&, ArdourCanvas::Group* group = NULL);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue