summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gtk2_ardour/ardour-sae.menus29
-rw-r--r--gtk2_ardour/ardour_ui.h1
-rw-r--r--gtk2_ardour/ardour_ui_ed.cc3
-rw-r--r--gtk2_ardour/ardour_ui_options.cc11
-rw-r--r--gtk2_ardour/audio_clock.cc28
-rw-r--r--gtk2_ardour/canvas-imageframe.c2
-rw-r--r--gtk2_ardour/canvas-simpleline.c54
-rw-r--r--gtk2_ardour/canvas-simplerect.c112
-rw-r--r--gtk2_ardour/canvas-waveview.c222
-rw-r--r--gtk2_ardour/canvas.h1
-rw-r--r--gtk2_ardour/editor.cc29
-rw-r--r--gtk2_ardour/editor.h8
-rw-r--r--gtk2_ardour/editor_actions.cc2
-rw-r--r--gtk2_ardour/editor_audio_import.cc10
-rw-r--r--gtk2_ardour/editor_audiotrack.cc2
-rw-r--r--gtk2_ardour/editor_canvas.cc106
-rw-r--r--gtk2_ardour/editor_canvas_events.cc16
-rw-r--r--gtk2_ardour/editor_imageframe.cc4
-rw-r--r--gtk2_ardour/editor_keyboard.cc4
-rw-r--r--gtk2_ardour/editor_markers.cc2
-rw-r--r--gtk2_ardour/editor_mouse.cc89
-rw-r--r--gtk2_ardour/editor_ops.cc15
-rw-r--r--gtk2_ardour/editor_route_list.cc2
-rw-r--r--gtk2_ardour/editor_rulers.cc5
-rw-r--r--gtk2_ardour/editor_tempodisplay.cc4
-rw-r--r--gtk2_ardour/main.cc2
-rw-r--r--gtk2_ardour/marker.cc1
-rw-r--r--gtk2_ardour/region_view.cc2
-rw-r--r--libs/ardour/ardour/session.h1
-rw-r--r--libs/ardour/session_butler.cc2
-rw-r--r--libs/ardour/session_events.cc3
-rw-r--r--libs/ardour/session_transport.cc12
32 files changed, 607 insertions, 177 deletions
diff --git a/gtk2_ardour/ardour-sae.menus b/gtk2_ardour/ardour-sae.menus
index 7bf6135925..dbfdeb2607 100644
--- a/gtk2_ardour/ardour-sae.menus
+++ b/gtk2_ardour/ardour-sae.menus
@@ -50,18 +50,24 @@
<menuitem action='set-punch-from-region'/>
</menu>
+ <separator/>
<menuitem action='Forward'/>
<menuitem action='Rewind'/>
<menuitem action='TransitionToRoll'/>
<menuitem action='TransitionToReverse'/>
- <menuitem action='nudge-playhead-forward'/>
- <menuitem action='nudge-playhead-backward'/>
+ <separator/>
+
+
+ <menuitem action='set-playhead'/>
<menu action="MovePlayHeadMenu">
- <menuitem action='set-playhead'/>
+
<menuitem action='playhead-to-edit'/>
<menuitem action='center-playhead'/>
<separator/>
+ <menuitem action='nudge-playhead-forward'/>
+ <menuitem action='nudge-playhead-backward'/>
+ <separator/>
<menuitem action='tab-to-transient-forwards'/>
<menuitem action='tab-to-transient-backwards'/>
<separator/>
@@ -126,11 +132,14 @@
<menuitem action='editor-separate'/>
<menuitem action='separate-from-loop'/>
<menuitem action='separate-from-punch'/>
+ <separator/>
+ <menuitem action='split-region-at-transients'/>
</menu>
<separator/>
<menuitem action='duplicate-region'/>
<menuitem action='multi-duplicate-region'/>
<menuitem action='region-fill-track'/>
+ <separator/>
<menu action="AlignMenu">
<menuitem action='align-regions-start'/>
<menuitem action='align-regions-start-relative'/>
@@ -200,16 +209,13 @@
<menuitem action='remove-region-sync'/>
<menuitem action='mute-unmute-region'/>
<separator/>
- <menuitem action='monoize-region'/>
+ <menuitem action='reverse-region'/>
+ <menuitem action='monoize-region'/>
<menuitem action='normalize-region'/>
- <menuitem action='split-region-at-transients'/>
- <separator/>
- <menu action="RegionGainMenu">
- <menuitem action='boost-region-gain'/>
- <menuitem action='cut-region-gain'/>
- </menu>
+ <menuitem action='boost-region-gain'/>
+ <menuitem action='cut-region-gain'/>
<menuitem action='pitch-shift-region'/>
- <menuitem action='reverse-region'/>
+
</menu>
<menu name='View' action = 'View'>
@@ -217,6 +223,7 @@
<menuitem action='show-editor-mixer'/>
<menuitem action='ToggleMeasureVisibility'/>
<menuitem action='ToggleLogoVisibility'/>
+ <separator/>
<menu action="PrimaryClockMenu">
<menuitem action="primary-clock-bbt"/>
<menuitem action="primary-clock-minsec"/>
diff --git a/gtk2_ardour/ardour_ui.h b/gtk2_ardour/ardour_ui.h
index 1a6c8dbc4d..3e58e98c38 100644
--- a/gtk2_ardour/ardour_ui.h
+++ b/gtk2_ardour/ardour_ui.h
@@ -239,6 +239,7 @@ class ARDOUR_UI : public Gtkmm2ext::UI
void toggle_clocking ();
void toggle_auto_play ();
void toggle_auto_input ();
+ void toggle_punch ();
void toggle_punch_in ();
void toggle_punch_out ();
void toggle_auto_return ();
diff --git a/gtk2_ardour/ardour_ui_ed.cc b/gtk2_ardour/ardour_ui_ed.cc
index c215157ef1..f0d5e11a32 100644
--- a/gtk2_ardour/ardour_ui_ed.cc
+++ b/gtk2_ardour/ardour_ui_ed.cc
@@ -329,6 +329,9 @@ ARDOUR_UI::install_actions ()
act = ActionManager::register_toggle_action (transport_actions, X_("TogglePunchOut"), _("Punch Out"), mem_fun(*this, &ARDOUR_UI::toggle_punch_out));
ActionManager::session_sensitive_actions.push_back (act);
ActionManager::transport_sensitive_actions.push_back (act);
+ act = ActionManager::register_toggle_action (transport_actions, X_("TogglePunch"), _("Punch In/Out"), mem_fun(*this, &ARDOUR_UI::toggle_punch));
+ ActionManager::session_sensitive_actions.push_back (act);
+ ActionManager::transport_sensitive_actions.push_back (act);
act = ActionManager::register_toggle_action (transport_actions, X_("ToggleClick"), _("Click"), mem_fun(*this, &ARDOUR_UI::toggle_click));
ActionManager::session_sensitive_actions.push_back (act);
ActionManager::transport_sensitive_actions.push_back (act);
diff --git a/gtk2_ardour/ardour_ui_options.cc b/gtk2_ardour/ardour_ui_options.cc
index 4cd01152b2..4fd45e327f 100644
--- a/gtk2_ardour/ardour_ui_options.cc
+++ b/gtk2_ardour/ardour_ui_options.cc
@@ -388,6 +388,17 @@ ARDOUR_UI::toggle_session_auto_loop ()
}
void
+ARDOUR_UI::toggle_punch ()
+{
+ Glib::RefPtr<Action> act = ActionManager::get_action ("Transport", "TogglePunchIn");
+ if (act) {
+ Glib::RefPtr<ToggleAction> tact = Glib::RefPtr<ToggleAction>::cast_dynamic(act);
+ Config->set_punch_in (tact->get_active());
+ Config->set_punch_out (tact->get_active());
+ }
+}
+
+void
ARDOUR_UI::toggle_punch_in ()
{
ActionManager::toggle_config_state ("Transport", "TogglePunchIn", &Configuration::set_punch_in, &Configuration::get_punch_in);
diff --git a/gtk2_ardour/audio_clock.cc b/gtk2_ardour/audio_clock.cc
index c05f2a00c0..b00a4c9214 100644
--- a/gtk2_ardour/audio_clock.cc
+++ b/gtk2_ardour/audio_clock.cc
@@ -501,15 +501,21 @@ AudioClock::set_frames (nframes_t when, bool force)
sprintf (buf, "%.3fK", rate/1000.0f);
}
- frames_upper_info_label->set_text (buf);
+ if (frames_upper_info_label->get_text() != buf) {
+ frames_upper_info_label->set_text (buf);
+ }
float vid_pullup = Config->get_video_pullup();
if (vid_pullup == 0.0) {
- frames_lower_info_label->set_text(_("none"));
+ if (frames_lower_info_label->get_text () != _("none")) {
+ frames_lower_info_label->set_text(_("none"));
+ }
} else {
sprintf (buf, "%-6.4f", vid_pullup);
- frames_lower_info_label->set_text (buf);
+ if (frames_lower_info_label->get_text() != buf) {
+ frames_lower_info_label->set_text (buf);
+ }
}
}
}
@@ -599,7 +605,9 @@ AudioClock::set_smpte (nframes_t when, bool force)
sprintf (buf, "%.2f", smpte_frames);
}
- smpte_upper_info_label->set_text (buf);
+ if (smpte_upper_info_label->get_text() != buf) {
+ smpte_upper_info_label->set_text (buf);
+ }
if ((fabs(smpte_frames - 29.97) < 0.0001) || smpte_frames == 30) {
if (session->smpte_drop_frames()) {
@@ -612,7 +620,9 @@ AudioClock::set_smpte (nframes_t when, bool force)
buf[0] = '\0';
}
- smpte_lower_info_label->set_text (buf);
+ if (smpte_lower_info_label->get_text() != buf) {
+ smpte_lower_info_label->set_text (buf);
+ }
}
}
@@ -633,9 +643,13 @@ AudioClock::set_bbt (nframes_t when, bool force)
if (bbt_upper_info_label) {
TempoMap::Metric m (session->tempo_map().metric_at (when));
sprintf (buf, "%-5.2f", m.tempo().beats_per_minute());
- bbt_lower_info_label->set_text (buf);
+ if (bbt_lower_info_label->get_text() != buf) {
+ bbt_lower_info_label->set_text (buf);
+ }
sprintf (buf, "%g|%g", m.meter().beats_per_bar(), m.meter().note_divisor());
- bbt_upper_info_label->set_text (buf);
+ if (bbt_upper_info_label->get_text() != buf) {
+ bbt_upper_info_label->set_text (buf);
+ }
}
}
diff --git a/gtk2_ardour/canvas-imageframe.c b/gtk2_ardour/canvas-imageframe.c
index e0f0f2f743..1f0e7e877b 100644
--- a/gtk2_ardour/canvas-imageframe.c
+++ b/gtk2_ardour/canvas-imageframe.c
@@ -456,8 +456,6 @@ static void
gnome_canvas_imageframe_draw (GnomeCanvasItem *item, GdkDrawable *drawable,
int x, int y, int width, int height)
{
- fprintf(stderr, "please don't use the CanvasImageFrame item in a non-aa Canvas\n") ;
- abort() ;
}
static double
diff --git a/gtk2_ardour/canvas-simpleline.c b/gtk2_ardour/canvas-simpleline.c
index b65693a548..576eedc369 100644
--- a/gtk2_ardour/canvas-simpleline.c
+++ b/gtk2_ardour/canvas-simpleline.c
@@ -1,5 +1,6 @@
#include <stdio.h>
#include <math.h>
+#include <cairo.h>
#include <libgnomecanvas/libgnomecanvas.h>
#include "canvas-simpleline.h"
@@ -400,15 +401,54 @@ gnome_canvas_simpleline_draw (GnomeCanvasItem *item,
int width, int height)
{
GnomeCanvasSimpleLine *simpleline;
+ cairo_t* cr;
+ double ulx;
+ double uly;
+ double lrx;
+ double lry;
simpleline = GNOME_CANVAS_SIMPLELINE (item);
- if (parent_class->draw) {
- (* parent_class->draw) (item, drawable, x, y, width, height);
+ cr = gdk_cairo_create (drawable);
+
+ if (x > simpleline->bbox_ulx) {
+ ulx = x;
+ } else {
+ ulx = simpleline->bbox_ulx;
+ }
+
+ if (y > simpleline->bbox_uly) {
+ uly = y;
+ } else {
+ uly = simpleline->bbox_uly;
+ }
+
+ if (x + width > simpleline->bbox_lrx) {
+ lrx = simpleline->bbox_lrx;
+ } else {
+ lrx = x + width;
+ }
+
+ if (y + height > simpleline->bbox_lry) {
+ lry = simpleline->bbox_lry;
+ } else {
+ lry = y + height;
}
- fprintf (stderr, "please don't use the CanvasSimpleLine item in a non-aa Canvas\n");
- abort ();
+ ulx -= x;
+ uly -= y;
+ lrx -= x;
+ lry -= y;
+
+ cairo_set_source_rgba (cr,
+ simpleline->r/255.0,
+ simpleline->g/255.0,
+ simpleline->b/255.0,
+ simpleline->a/255.0);
+ cairo_set_line_width (cr, 1);
+ cairo_move_to (cr, ulx+0.5, uly+0.5);
+ cairo_line_to (cr, lrx+0.5, lry+0.5);
+ cairo_stroke (cr);
}
static void
@@ -433,17 +473,17 @@ gnome_canvas_simpleline_point (GnomeCanvasItem *item, double x, double y, int cx
*actual_item = item;
- /* Find the bounds for the rectangle plus its outline width */
+ /* Find the bounds for the line plus its outline width */
gnome_canvas_simpleline_bounds (item, &x1, &y1, &x2, &y2);
- /* Is point inside rectangle */
+ /* Is point inside line */
if ((x >= x1) && (y >= y1) && (x <= x2) && (y <= y2)) {
return 0.0;
}
- /* Point is outside rectangle */
+ /* Point is outside line */
if (x < x1)
dx = x1 - x;
diff --git a/gtk2_ardour/canvas-simplerect.c b/gtk2_ardour/canvas-simplerect.c
index d50943f0c3..91649b64bb 100644
--- a/gtk2_ardour/canvas-simplerect.c
+++ b/gtk2_ardour/canvas-simplerect.c
@@ -1,5 +1,6 @@
#include <stdio.h>
#include <math.h>
+#include <cairo.h>
#include <libgnomecanvas/libgnomecanvas.h>
#include "canvas-simplerect.h"
@@ -287,7 +288,7 @@ gnome_canvas_simplerect_reset_bounds (GnomeCanvasItem *item)
gnome_canvas_w2c (GNOME_CANVAS(item->canvas), x1, y1, &simplerect->bbox_ulx, &simplerect->bbox_uly);
gnome_canvas_w2c (GNOME_CANVAS(item->canvas), x2, y2, &simplerect->bbox_lrx, &simplerect->bbox_lry);
- /* now queue redraws for changed areas */
+ /* now queue redraws for changed areas */
if (item->x1 == old_x1 && item->x2 == old_x2) {
@@ -714,12 +715,111 @@ gnome_canvas_simplerect_render (GnomeCanvasItem *item,
static void
gnome_canvas_simplerect_draw (GnomeCanvasItem *item,
- GdkDrawable *drawable,
- int x, int y,
- int width, int height)
+ GdkDrawable *drawable,
+ int x, int y,
+ int width, int height)
{
- fprintf (stderr, "please don't use the CanvasSimpleRect item in a non-aa Canvas\n");
- abort ();
+ GnomeCanvasSimpleRect *simplerect;
+ cairo_t* cr;
+ double ulx;
+ double uly;
+ double lrx;
+ double lry;
+
+ simplerect = GNOME_CANVAS_SIMPLERECT (item);
+
+ cr = gdk_cairo_create (drawable);
+
+ if (x > simplerect->bbox_ulx) {
+ ulx = x;
+ } else {
+ ulx = simplerect->bbox_ulx;
+ }
+
+ if (y > simplerect->bbox_uly) {
+ uly = y;
+ } else {
+ uly = simplerect->bbox_uly;
+ }
+
+ if (x + width > simplerect->bbox_lrx) {
+ lrx = simplerect->bbox_lrx;
+ } else {
+ lrx = x + width;
+ }
+
+ if (y + height > simplerect->bbox_lry) {
+ lry = simplerect->bbox_lry;
+ } else {
+ lry = y + height;
+ }
+
+ ulx -= x;
+ uly -= y;
+ lrx -= x;
+ lry -= y;
+
+ cairo_rectangle (cr, ulx, uly, lrx - ulx, lry - uly);
+
+ if (simplerect->fill) {
+ cairo_set_source_rgba (cr,
+ simplerect->fill_r/255.0,
+ simplerect->fill_g/255.0,
+ simplerect->fill_b/255.0,
+ simplerect->fill_a/255.0);
+ cairo_fill (cr);
+ }
+
+ if (simplerect->outline_what && simplerect->outline_pixels) {
+
+#define x_in_range(a) (x <= (a) && (a) < x + width)
+#define y_in_range(a) (y <= (a) && (a) < y + height)
+
+ cairo_set_line_width (cr, simplerect->outline_pixels);
+
+ cairo_set_source_rgb (cr,
+ simplerect->outline_r/255.0,
+ simplerect->outline_g/255.0,
+ simplerect->outline_b/255.0);
+
+ if (simplerect->outline_what & 0x1) {
+ /* left edge, if visible */
+ if (x_in_range (simplerect->bbox_ulx)) {
+ cairo_move_to (cr, ulx+0.5, uly+0.5);
+ cairo_line_to (cr, ulx+0.5, lry+0.5);
+ cairo_stroke (cr);
+ }
+ }
+
+ if (simplerect->outline_what & 0x2) {
+ /* right edge, if visible */
+ if (x_in_range (simplerect->bbox_lrx)) {
+ cairo_move_to (cr, lrx+0.5, uly+0.5);
+ cairo_line_to (cr, lrx+0.5, lry+0.5);
+ cairo_stroke (cr);
+ }
+ }
+
+ if (simplerect->outline_what & 0x4) {
+ /* top edge */
+ if (y_in_range (simplerect->bbox_uly)) {
+ cairo_move_to (cr, ulx+0.5, uly+0.5);
+ cairo_line_to (cr, lrx+0.5, uly+0.5);
+ cairo_stroke (cr);
+ }
+ }
+
+ if (simplerect->outline_what & 0x8) {
+ /* bottom edge */
+ if (y_in_range (simplerect->bbox_lry)) {
+ cairo_move_to (cr, ulx+0.5, lry+0.5);
+ cairo_line_to (cr, lrx+0.5, lry+0.5);
+ cairo_stroke (cr);
+ }
+ }
+ }
+
+ cairo_destroy (cr);
}
static double
diff --git a/gtk2_ardour/canvas-waveview.c b/gtk2_ardour/canvas-waveview.c
index 2f721dc8d6..bafaf12a27 100644
--- a/gtk2_ardour/canvas-waveview.c
+++ b/gtk2_ardour/canvas-waveview.c
@@ -21,6 +21,7 @@
#include <stdio.h>
#include <math.h>
#include <libgnomecanvas/libgnomecanvas.h>
+#include <cairo.h>
#include <string.h>
#include <limits.h>
@@ -1600,22 +1601,229 @@ gnome_canvas_waveview_render (GnomeCanvasItem *item,
static void
gnome_canvas_waveview_draw (GnomeCanvasItem *item,
- GdkDrawable *drawable,
- int x, int y,
- int width, int height)
+ GdkDrawable *drawable,
+ int x, int y,
+ int width, int height)
{
GnomeCanvasWaveView *waveview;
+ cairo_t* cr;
+ gulong s1, s2;
+ int cache_index;
+ double zbegin, zend;
+ gboolean rectify;
+ double n;
+ double origin;
+ double clip_length;
+ double xoff;
+ double yoff;
+ double ulx;
+ double uly;
+ double lrx;
+ double lry;
waveview = GNOME_CANVAS_WAVEVIEW (item);
- if (parent_class->draw) {
- (* parent_class->draw) (item, drawable, x, y, width, height);
+ /* compute intersection of Drawable area and waveview,
+ in canvas coordinate space
+ */
+
+ if (x > waveview->bbox_ulx) {
+ ulx = x;
+ zbegin = ulx;
+ } else {
+ ulx = waveview->bbox_ulx;
+ zbegin = ulx + 1;
+ }
+
+ if (y > waveview->bbox_uly) {
+ uly = y;
+ } else {
+ uly = waveview->bbox_uly;
+ }
+
+ if (x + width > waveview->bbox_lrx) {
+ lrx = waveview->bbox_lrx;
+ zend = lrx - 1;
+ } else {
+ lrx = x + width;
+ zend = lrx;
+ }
+
+ if (y + height > waveview->bbox_lry) {
+ lry = waveview->bbox_lry;
+ } else {
+ lry = y + height;
+ }
+
+ /* figure out which samples we need for the resulting intersection */
+
+ s1 = floor ((ulx - waveview->bbox_ulx) * waveview->samples_per_unit) ;
+
+ if (lrx == waveview->bbox_lrx) {
+ /* This avoids minor rounding errors when we have the
+ entire region visible.
+ */
+ s2 = waveview->samples;
+ } else {
+ s2 = s1 + floor ((lrx - ulx) * waveview->samples_per_unit);
+ }
+
+ /* translate back to buffer coordinate space */
+
+ ulx -= x;
+ uly -= y;
+ lrx -= x;
+ lry -= y;
+ zbegin -= x;
+ zend -= x;
+
+ /* don't rectify at single-sample zoom */
+ if(waveview->rectified && waveview->samples_per_unit > 1.0) {
+ rectify = TRUE;
+ } else {
+ rectify = FALSE;
+ }
+
+ clip_length = MIN(5,(waveview->height/4));
+
+ cr = gdk_cairo_create (drawable);
+ cairo_set_line_width (cr, 0.5);
+
+ origin = waveview->bbox_uly - y + waveview->half_height;
+
+ cairo_rectangle (cr, ulx, uly, lrx - ulx, lry - uly);
+ cairo_clip (cr);
+
+ if (waveview->cache_updater && waveview->reload_cache_in_render) {
+ waveview->cache->start = 0;
+ waveview->cache->end = 0;
+ waveview->reload_cache_in_render = FALSE;
+ }
+
+ cache_index = gnome_canvas_waveview_ensure_cache (waveview, s1, s2);
+
+#if 0
+ printf ("%p r (%d,%d)(%d,%d)[%d x %d] bbox (%d,%d)(%d,%d)[%d x %d]"
+ " draw (%.1f,%.1f)(%.1f,%.1f)[%.1f x %.1f] s= %lu..%lu\n",
+ waveview,
+ x, y,
+ x + width,
+ y + height,
+ width,
+ height,
+ waveview->bbox_ulx,
+ waveview->bbox_uly,
+ waveview->bbox_lrx,
+ waveview->bbox_lry,
+ waveview->bbox_lrx - waveview->bbox_ulx,
+ waveview->bbox_lry - waveview->bbox_uly,
+ ulx, uly,
+ lrx, lry,
+ lrx - ulx,
+ lry - uly,
+ s1, s2);
+#endif
+
+ /* draw the top half */
+
+ for (xoff = ulx; xoff < lrx; xoff++) {
+ double max, min;
+
+ max = waveview->cache->data[cache_index].max;
+ min = waveview->cache->data[cache_index].min;
+
+ if (min <= -1.0) {
+ min = -1.0;
+ }
+
+ if (max >= 1.0) {
+ max = 1.0;
+ }
+
+ if (rectify) {
+ if (fabs (min) > fabs (max)) {
+ max = fabs (min);
+ }
+ }
+
+ yoff = origin - (waveview->half_height * max) + 0.5;
+
+ if (n == ulx) {
+ cairo_move_to (cr, xoff+0.5, yoff);
+ } else {
+ cairo_line_to (cr, xoff+0.5, yoff);
+ }
+
+ cache_index++;
}
- fprintf (stderr, "please don't use the CanvasWaveView item in a non-aa Canvas\n");
- abort ();
+ /* from the final top point, move out of the clip zone */
+
+ cairo_line_to (cr, xoff + 10, yoff);
+
+ /* now draw the bottom half */
+
+ for (--xoff, --cache_index; xoff >= ulx; --xoff) {
+ double min;
+ int clip_min;
+
+ min = waveview->cache->data[cache_index].min;
+
+ if (min <= -1.0) {
+ min = -1.0;
+ }
+
+ yoff = origin - (waveview->half_height * min) + 0.5;
+
+ cairo_line_to (cr, xoff+0.5, yoff);
+ cache_index--;
+ }
+
+ /* from the final lower point, move out of the clip zone */
+
+ cairo_line_to (cr, xoff - 10, yoff);
+
+ /* close path to fill */
+
+ cairo_close_path (cr);
+
+ /* fill and stroke */
+
+ cairo_set_source_rgba (cr,
+ (waveview->fill_r/255.0),
+ (waveview->fill_g/255.0),
+ (waveview->fill_b/255.0),
+ (waveview->fill_a/255.0));
+ cairo_fill_preserve (cr);
+ cairo_set_source_rgba (cr,
+ (waveview->wave_r/255.0),
+ (waveview->wave_g/255.0),
+ (waveview->wave_b/255.0),
+ (waveview->wave_a/255.0));
+ cairo_stroke (cr);
+
+ cairo_destroy (cr);
}
+#if 0
+ if (clip_max || clip_min) {
+ cairo_set_source_rgba (cr, waveview->clip_r, waveview->clip_g, waveview->clip_b, waveview->clip_a);
+ }
+
+ if (clip_max) {
+ cairo_move_to (cr, xoff, yoff1);
+ cairo_line_to (cr, xoff, yoff1 + clip_length);
+ cairo_stroke (cr);
+ }
+
+ if (clip_min) {
+ cairo_move_to (cr, xoff, yoff2);
+ cairo_line_to (cr, xoff, yoff2 - clip_length);
+ cairo_stroke (cr);
+ }
+
+#endif
+
static void
gnome_canvas_waveview_bounds (GnomeCanvasItem *item, double *x1, double *y1, double *x2, double *y2)
{
diff --git a/gtk2_ardour/canvas.h b/gtk2_ardour/canvas.h
index 75cb7157a9..58bb5fcb5a 100644
--- a/gtk2_ardour/canvas.h
+++ b/gtk2_ardour/canvas.h
@@ -25,6 +25,7 @@ namespace Gnome {
class Item;
class Group;
class Canvas;
+ class Rect;
class SimpleRect;
class SimpleLine;
class Polygon;
diff --git a/gtk2_ardour/editor.cc b/gtk2_ardour/editor.cc
index 40030bb201..6a6b7bdb6d 100644
--- a/gtk2_ardour/editor.cc
+++ b/gtk2_ardour/editor.cc
@@ -368,12 +368,12 @@ Editor::Editor ()
horizontal_adjustment.signal_value_changed().connect (mem_fun(*this, &Editor::canvas_horizontally_scrolled), false);
vertical_adjustment.signal_value_changed().connect (mem_fun(*this, &Editor::tie_vertical_scrolling), true);
- track_canvas.set_hadjustment (horizontal_adjustment);
- track_canvas.set_vadjustment (vertical_adjustment);
- time_canvas.set_hadjustment (horizontal_adjustment);
+ track_canvas->set_hadjustment (horizontal_adjustment);
+ track_canvas->set_vadjustment (vertical_adjustment);
+ time_canvas->set_hadjustment (horizontal_adjustment);
- 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));
+ 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));
controls_layout.add (edit_controls_vbox);
controls_layout.set_name ("EditControlsBase");
@@ -403,7 +403,7 @@ Editor::Editor ()
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, true, true);
+ time_canvas_vbox.pack_start (*time_canvas, true, true);
time_canvas_vbox.set_size_request (-1, (int)(timebar_height * visible_timebars) + 2);
bbt_label.set_name ("EditorTimeButton");
@@ -468,7 +468,7 @@ Editor::Editor ()
for the canvas areas.
*/
- track_canvas_event_box.add (track_canvas);
+ 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);
@@ -807,6 +807,16 @@ Editor::~Editor()
image_socket_listener = 0 ;
}
/* </CMT Additions> */
+
+ if (track_canvas) {
+ delete track_canvas;
+ track_canvas = 0;
+ }
+
+ if (time_canvas) {
+ delete time_canvas;
+ time_canvas = 0;
+ }
}
void
@@ -4292,14 +4302,15 @@ Editor::set_loop_range (nframes_t start, nframes_t end, string cmd)
Location* tll;
if ((tll = transport_loop_location()) == 0) {
+ cerr << "Set new\n";
Location* loc = new Location (start, end, _("Loop"), Location::IsAutoLoop);
XMLNode &before = session->locations()->get_state();
session->locations()->add (loc, true);
session->set_auto_loop_location (loc);
XMLNode &after = session->locations()->get_state();
session->add_command (new MementoCommand<Locations>(*(session->locations()), &before, &after));
- }
- else {
+ } else {
+ cerr << "Set existing\n";
XMLNode &before = tll->get_state();
tll->set_hidden (false, this);
tll->set (start, end);
diff --git a/gtk2_ardour/editor.h b/gtk2_ardour/editor.h
index 8951bde7ac..ed87e470f8 100644
--- a/gtk2_ardour/editor.h
+++ b/gtk2_ardour/editor.h
@@ -219,14 +219,14 @@ class Editor : public PublicEditor
*/
if (pixel >= 0) {
- return (nframes_t) rint (pixel * frames_per_unit * GNOME_CANVAS(track_canvas.gobj())->pixels_per_unit);
+ return (nframes_t) rint (pixel * frames_per_unit * GNOME_CANVAS(track_canvas->gobj())->pixels_per_unit);
} else {
return 0;
}
}
gulong frame_to_pixel (nframes64_t frame) const {
- return (gulong) rint ((frame / (frames_per_unit * GNOME_CANVAS(track_canvas.gobj())->pixels_per_unit)));
+ return (gulong) rint ((frame / (frames_per_unit * GNOME_CANVAS(track_canvas->gobj())->pixels_per_unit)));
}
void flush_canvas ();
@@ -542,8 +542,8 @@ class Editor : public PublicEditor
void set_canvas_cursor ();
Gdk::Cursor* which_grabber_cursor ();
- ArdourCanvas::CanvasAA track_canvas;
- ArdourCanvas::CanvasAA time_canvas;
+ ArdourCanvas::Canvas* track_canvas;
+ ArdourCanvas::Canvas* time_canvas;
ArdourCanvas::Text* first_action_message;
ArdourCanvas::Text* verbose_canvas_cursor;
diff --git a/gtk2_ardour/editor_actions.cc b/gtk2_ardour/editor_actions.cc
index f12e6a6978..662cfeee73 100644
--- a/gtk2_ardour/editor_actions.cc
+++ b/gtk2_ardour/editor_actions.cc
@@ -1656,5 +1656,5 @@ Editor::parameter_changed (const char* parameter_name)
void
Editor::reset_focus ()
{
- track_canvas.grab_focus();
+ track_canvas->grab_focus();
}
diff --git a/gtk2_ardour/editor_audio_import.cc b/gtk2_ardour/editor_audio_import.cc
index 199eaac489..f37659093e 100644
--- a/gtk2_ardour/editor_audio_import.cc
+++ b/gtk2_ardour/editor_audio_import.cc
@@ -495,7 +495,7 @@ Editor::import_sndfiles (vector<ustring> paths, ImportMode mode, SrcQuality qual
interthread_progress_connection = Glib::signal_timeout().connect
(bind (mem_fun(*this, &Editor::import_progress_timeout), (gpointer) 0), 100);
- track_canvas.get_window()->set_cursor (Gdk::Cursor (Gdk::WATCH));
+ track_canvas->get_window()->set_cursor (Gdk::Cursor (Gdk::WATCH));
ARDOUR_UI::instance()->flush_pending ();
/* start import thread for this spec. this will ultimately call Session::import_audiofile()
@@ -527,7 +527,7 @@ Editor::import_sndfiles (vector<ustring> paths, ImportMode mode, SrcQuality qual
}
out:
- track_canvas.get_window()->set_cursor (*current_canvas_cursor);
+ track_canvas->get_window()->set_cursor (*current_canvas_cursor);
return 0;
}
@@ -542,7 +542,7 @@ Editor::embed_sndfiles (vector<Glib::ustring> paths, bool multifile,
SoundFileInfo finfo;
int ret = 0;
- track_canvas.get_window()->set_cursor (Gdk::Cursor (Gdk::WATCH));
+ track_canvas->get_window()->set_cursor (Gdk::Cursor (Gdk::WATCH));
ARDOUR_UI::instance()->flush_pending ();
for (vector<Glib::ustring>::iterator p = paths.begin(); p != paths.end(); ++p) {
@@ -643,7 +643,7 @@ Editor::embed_sndfiles (vector<Glib::ustring> paths, bool multifile,
}
}
- track_canvas.get_window()->set_cursor (Gdk::Cursor (Gdk::WATCH));
+ track_canvas->get_window()->set_cursor (Gdk::Cursor (Gdk::WATCH));
for (int n = 0; n < finfo.channels; ++n) {
try {
@@ -682,7 +682,7 @@ Editor::embed_sndfiles (vector<Glib::ustring> paths, bool multifile,
ret = add_sources (paths, sources, pos, mode, target_regions, target_tracks, track, true);
out:
- track_canvas.get_window()->set_cursor (*current_canvas_cursor);
+ track_canvas->get_window()->set_cursor (*current_canvas_cursor);
return ret;
}
diff --git a/gtk2_ardour/editor_audiotrack.cc b/gtk2_ardour/editor_audiotrack.cc
index c88ff34ee3..7ecbf843b5 100644
--- a/gtk2_ardour/editor_audiotrack.cc
+++ b/gtk2_ardour/editor_audiotrack.cc
@@ -110,7 +110,7 @@ Editor::toggle_meter_updating()
} else {
stop_updating ();
}
- track_canvas_allocate(track_canvas.get_allocation());
+ track_canvas_allocate(track_canvas->get_allocation());
}
void
diff --git a/gtk2_ardour/editor_canvas.cc b/gtk2_ardour/editor_canvas.cc
index 7d9a81afae..2d034f5308 100644
--- a/gtk2_ardour/editor_canvas.cc
+++ b/gtk2_ardour/editor_canvas.cc
@@ -87,28 +87,36 @@ static void ardour_canvas_type_init()
void
Editor::initialize_canvas ()
{
+ if (getenv ("ARDOUR_NON_AA_CANVAS")) {
+ track_canvas = new ArdourCanvas::Canvas ();
+ time_canvas = new ArdourCanvas::Canvas ();
+ } else {
+ track_canvas = new ArdourCanvas::CanvasAA ();
+ time_canvas = new ArdourCanvas::CanvasAA ();
+ }
+
ArdourCanvas::init ();
ardour_canvas_type_init ();
/* don't try to center the canvas */
- track_canvas.set_center_scroll_region (false);
- track_canvas.set_dither (Gdk::RGB_DITHER_NONE);
+ track_canvas->set_center_scroll_region (false);
+ track_canvas->set_dither (Gdk::RGB_DITHER_NONE);
/* need to handle 4 specific types of events as catch-alls */
- track_canvas.signal_scroll_event().connect (mem_fun (*this, &Editor::track_canvas_scroll_event));
- track_canvas.signal_motion_notify_event().connect (mem_fun (*this, &Editor::track_canvas_motion_notify_event));
- track_canvas.signal_button_press_event().connect (mem_fun (*this, &Editor::track_canvas_button_press_event));
- track_canvas.signal_button_release_event().connect (mem_fun (*this, &Editor::track_canvas_button_release_event));
+ track_canvas->signal_scroll_event().connect (mem_fun (*this, &Editor::track_canvas_scroll_event));
+ track_canvas->signal_motion_notify_event().connect (mem_fun (*this, &Editor::track_canvas_motion_notify_event));
+ track_canvas->signal_button_press_event().connect (mem_fun (*this, &Editor::track_canvas_button_press_event));
+ track_canvas->signal_button_release_event().connect (mem_fun (*this, &Editor::track_canvas_button_release_event));
/* just scroll stuff for the timecanvas */
- time_canvas.signal_scroll_event().connect (mem_fun (*this, &Editor::time_canvas_scroll_event));
+ time_canvas->signal_scroll_event().connect (mem_fun (*this, &Editor::time_canvas_scroll_event));
- track_canvas.set_name ("EditorMainCanvas");
- track_canvas.add_events (Gdk::POINTER_MOTION_HINT_MASK|Gdk::SCROLL_MASK);
- track_canvas.signal_leave_notify_event().connect (mem_fun(*this, &Editor::left_track_canvas));
- track_canvas.set_flags (CAN_FOCUS);
+ track_canvas->set_name ("EditorMainCanvas");
+ track_canvas->add_events (Gdk::POINTER_MOTION_HINT_MASK|Gdk::SCROLL_MASK);
+ track_canvas->signal_leave_notify_event().connect (mem_fun(*this, &Editor::left_track_canvas));
+ track_canvas->set_flags (CAN_FOCUS);
/* set up drag-n-drop */
@@ -121,14 +129,14 @@ Editor::initialize_canvas ()
target_table.push_back (TargetEntry ("text/uri-list"));
target_table.push_back (TargetEntry ("application/x-rootwin-drop"));
- track_canvas.drag_dest_set (target_table);
- track_canvas.signal_drag_data_received().connect (mem_fun(*this, &Editor::track_canvas_drag_data_received));
+ track_canvas->drag_dest_set (target_table);
+ track_canvas->signal_drag_data_received().connect (mem_fun(*this, &Editor::track_canvas_drag_data_received));
/* stuff for the verbose canvas cursor */
Pango::FontDescription* font = get_font_for_style (N_("VerboseCanvasCursor"));
- verbose_canvas_cursor = new ArdourCanvas::Text (*track_canvas.root());
+ verbose_canvas_cursor = new ArdourCanvas::Text (*track_canvas->root());
verbose_canvas_cursor->property_font_desc() = *font;
verbose_canvas_cursor->property_anchor() = ANCHOR_NW;
@@ -140,7 +148,7 @@ Editor::initialize_canvas ()
if (Profile->get_sae()) {
Image img (::get_icon (X_("saelogo")));
- logo_item = new ArdourCanvas::Pixbuf (*track_canvas.root(), 0.0, 0.0, img.get_pixbuf());
+ logo_item = new ArdourCanvas::Pixbuf (*track_canvas->root(), 0.0, 0.0, img.get_pixbuf());
// logo_item->property_height_in_pixels() = true;
// logo_item->property_width_in_pixels() = true;
// logo_item->property_height_set() = true;
@@ -150,42 +158,42 @@ Editor::initialize_canvas ()
/* a group to hold time (measure) lines */
- time_line_group = new ArdourCanvas::Group (*track_canvas.root(), 0.0, 0.0);
- cursor_group = new ArdourCanvas::Group (*track_canvas.root(), 0.0, 0.0);
-
- time_canvas.set_name ("EditorTimeCanvas");
- time_canvas.add_events (Gdk::POINTER_MOTION_HINT_MASK);
- time_canvas.set_flags (CAN_FOCUS);
- time_canvas.set_center_scroll_region (false);
- time_canvas.set_dither (Gdk::RGB_DITHER_NONE);
+ time_line_group = new ArdourCanvas::Group (*track_canvas->root(), 0.0, 0.0);
+ cursor_group = new ArdourCanvas::Group (*track_canvas->root(), 0.0, 0.0);
+
+ time_canvas->set_name ("EditorTimeCanvas");
+ time_canvas->add_events (Gdk::POINTER_MOTION_HINT_MASK);
+ time_canvas->set_flags (CAN_FOCUS);
+ time_canvas->set_center_scroll_region (false);
+ time_canvas->set_dither (Gdk::RGB_DITHER_NONE);
- meter_group = new ArdourCanvas::Group (*time_canvas.root(), 0.0, 0.0);
- tempo_group = new ArdourCanvas::Group (*time_canvas.root(), 0.0, timebar_height);
- range_marker_group = new ArdourCanvas::Group (*time_canvas.root(), 0.0, timebar_height * 2.0);
- transport_marker_group = new ArdourCanvas::Group (*time_canvas.root(), 0.0, timebar_height * 3.0);
- marker_group = new ArdourCanvas::Group (*time_canvas.root(), 0.0, timebar_height * 4.0);
- cd_marker_group = new ArdourCanvas::Group (*time_canvas.root(), 0.0, timebar_height * 5.0);
+ meter_group = new ArdourCanvas::Group (*time_canvas->root(), 0.0, 0.0);
+ tempo_group = new ArdourCanvas::Group (*time_canvas->root(), 0.0, timebar_height);
+ range_marker_group = new ArdourCanvas::Group (*time_canvas->root(), 0.0, timebar_height * 2.0);
+ transport_marker_group = new ArdourCanvas::Group (*time_canvas->root(), 0.0, timebar_height * 3.0);
+ marker_group = new ArdourCanvas::Group (*time_canvas->root(), 0.0, timebar_height * 4.0);
+ cd_marker_group = new ArdourCanvas::Group (*time_canvas->root(), 0.0, timebar_height * 5.0);
tempo_bar = new ArdourCanvas::SimpleRect (*tempo_group, 0.0, 0.0, max_canvas_coordinate, timebar_height-1.0);
- tempo_bar->property_outline_pixels() = 0;
+ // tempo_bar->property_outline_pixels() = 0;
meter_bar = new ArdourCanvas::SimpleRect (*meter_group, 0.0, 0.0, max_canvas_coordinate, timebar_height-1.0);
- meter_bar->property_outline_pixels() = 0;
+ // meter_bar->property_outline_pixels() = 0;
marker_bar = new ArdourCanvas::SimpleRect (*marker_group, 0.0, 0.0, max_canvas_coordinate, timebar_height-1.0);
- marker_bar->property_outline_pixels() = 0;
+ // marker_bar->property_outline_pixels() = 0;
cd_marker_bar = new ArdourCanvas::SimpleRect (*cd_marker_group, 0.0, 0.0, max_canvas_coordinate, timebar_height-1.0);
- cd_marker_bar->property_outline_pixels() = 0;
+ // cd_marker_bar->property_outline_pixels() = 0;
range_marker_bar = new ArdourCanvas::SimpleRect (*range_marker_group, 0.0, 0.0, max_canvas_coordinate, timebar_height-1.0);
- range_marker_bar->property_outline_pixels() = 0;
+ // range_marker_bar->property_outline_pixels() = 0;
transport_marker_bar = new ArdourCanvas::SimpleRect (*transport_marker_group, 0.0, 0.0, max_canvas_coordinate, timebar_height-1.0);
- transport_marker_bar->property_outline_pixels() = 0;
+ // transport_marker_bar->property_outline_pixels() = 0;
cd_marker_bar_drag_rect = new ArdourCanvas::SimpleRect (*cd_marker_group, 0.0, 0.0, max_canvas_coordinate, timebar_height-1.0);
- cd_marker_bar_drag_rect->property_outline_pixels() = 0;
+ // cd_marker_bar_drag_rect->property_outline_pixels() = 0;
cd_marker_bar_drag_rect->hide ();
range_bar_drag_rect = new ArdourCanvas::SimpleRect (*range_marker_group, 0.0, 0.0, max_canvas_coordinate, timebar_height-1.0);
@@ -199,12 +207,12 @@ Editor::initialize_canvas ()
marker_drag_line_points.push_back(Gnome::Art::Point(0.0, 0.0));
marker_drag_line_points.push_back(Gnome::Art::Point(0.0, 0.0));
- marker_drag_line = new ArdourCanvas::Line (*track_canvas.root());
+ marker_drag_line = new ArdourCanvas::Line (*track_canvas->root());
marker_drag_line->property_width_pixels() = 1;
marker_drag_line->property_points() = marker_drag_line_points;
marker_drag_line->hide();
- range_marker_drag_rect = new ArdourCanvas::SimpleRect (*track_canvas.root(), 0.0, 0.0, 0.0, 0.0);
+ range_marker_drag_rect = new ArdourCanvas::SimpleRect (*track_canvas->root(), 0.0, 0.0, 0.0, 0.0);
range_marker_drag_rect->hide ();
transport_loop_range_rect = new ArdourCanvas::SimpleRect (*time_line_group, 0.0, 0.0, 0.0, 0.0);
@@ -232,14 +240,14 @@ Editor::initialize_canvas ()
transport_punchout_line->hide();
// used to show zoom mode active zooming
- zoom_rect = new ArdourCanvas::SimpleRect (*track_canvas.root(), 0.0, 0.0, 0.0, 0.0);
+ zoom_rect = new ArdourCanvas::SimpleRect (*track_canvas->root(), 0.0, 0.0, 0.0, 0.0);
zoom_rect->property_outline_pixels() = 1;
zoom_rect->hide();
zoom_rect->signal_event().connect (bind (mem_fun (*this, &Editor::canvas_zoom_rect_event), (ArdourCanvas::Item*) 0));
// used as rubberband rect
- rubberband_rect = new ArdourCanvas::SimpleRect (*track_canvas.root(), 0.0, 0.0, 0.0, 0.0);
+ rubberband_rect = new ArdourCanvas::SimpleRect (*track_canvas->root(), 0.0, 0.0, 0.0, 0.0);
rubberband_rect->property_outline_pixels() = 1;
rubberband_rect->hide();
@@ -255,12 +263,12 @@ Editor::initialize_canvas ()
double time_height = timebar_height * 5;
double time_width = FLT_MAX/frames_per_unit;
- time_canvas.set_scroll_region(0.0, 0.0, time_width, time_height);
+ time_canvas->set_scroll_region(0.0, 0.0, time_width, time_height);
playhead_cursor = new Cursor (*this, &Editor::canvas_playhead_cursor_event);
initial_ruler_update_required = true;
- track_canvas.signal_size_allocate().connect (mem_fun(*this, &Editor::track_canvas_allocate));
+ track_canvas->signal_size_allocate().connect (mem_fun(*this, &Editor::track_canvas_allocate));
if (logo_item) {
logo_item->lower_to_bottom ();
@@ -363,10 +371,10 @@ Editor::reset_scrolling_region (Gtk::Allocation* alloc)
double last_canvas_unit = max ((last_canvas_frame / frames_per_unit), canvas_width);
- track_canvas.set_scroll_region (0.0, 0.0, last_canvas_unit, pos);
+ track_canvas->set_scroll_region (0.0, 0.0, last_canvas_unit, pos);
// XXX what is the correct height value for the time canvas ? this overstates it
- time_canvas.set_scroll_region ( 0.0, 0.0, last_canvas_unit, canvas_height);
+ time_canvas->set_scroll_region ( 0.0, 0.0, last_canvas_unit, canvas_height);
range_marker_drag_rect->property_y2() = canvas_height;
transport_loop_range_rect->property_y2() = canvas_height;
@@ -422,14 +430,14 @@ Editor::controls_layout_size_request (Requisition* req)
bool
Editor::track_canvas_map_handler (GdkEventAny* ev)
{
- track_canvas.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.get_window()->set_cursor (*timebar_cursor);
+ time_canvas->get_window()->set_cursor (*timebar_cursor);
return false;
}
@@ -472,7 +480,7 @@ Editor::drop_paths (const RefPtr<Gdk::DragContext>& context,
double wx;
double wy;
- track_canvas.window_to_world (x, y, wx, wy);
+ track_canvas->window_to_world (x, y, wx, wy);
wx += horizontal_adjustment.get_value();
wy += vertical_adjustment.get_value();
@@ -823,8 +831,8 @@ void
Editor::flush_canvas ()
{
if (is_mapped()) {
- track_canvas.update_now ();
- // gdk_window_process_updates (GTK_LAYOUT(track_canvas.gobj())->bin_window, true);
+ track_canvas->update_now ();
+ // gdk_window_process_updates (GTK_LAYOUT(track_canvas->gobj())->bin_window, true);
}
}
diff --git a/gtk2_ardour/editor_canvas_events.cc b/gtk2_ardour/editor_canvas_events.cc
index 2d4531f2d1..00ea97a5f3 100644
--- a/gtk2_ardour/editor_canvas_events.cc
+++ b/gtk2_ardour/editor_canvas_events.cc
@@ -67,8 +67,8 @@ Editor::track_canvas_scroll (GdkEventScroll* ev)
if we're in mid zoom, so we have to get the damn mouse
pointer again
*/
- track_canvas.get_pointer (x, y);
- track_canvas.window_to_world (x, y, wx, wy);
+ track_canvas->get_pointer (x, y);
+ track_canvas->window_to_world (x, y, wx, wy);
wx += horizontal_adjustment.get_value();
wy += vertical_adjustment.get_value();
@@ -102,8 +102,8 @@ Editor::track_canvas_scroll (GdkEventScroll* ev)
case GDK_SCROLL_DOWN:
if (Keyboard::modifier_state_equals (ev->state, Keyboard::PrimaryModifier)) {
//if (ev->state == GDK_CONTROL_MASK) {
- track_canvas.get_pointer (x, y);
- track_canvas.window_to_world (x, y, wx, wy);
+ track_canvas->get_pointer (x, y);
+ track_canvas->window_to_world (x, y, wx, wy);
wx += horizontal_adjustment.get_value();
wy += vertical_adjustment.get_value();
@@ -163,7 +163,7 @@ Editor::track_canvas_scroll (GdkEventScroll* ev)
bool
Editor::track_canvas_scroll_event (GdkEventScroll *event)
{
- track_canvas.grab_focus();
+ track_canvas->grab_focus();
track_canvas_scroll (event);
return false;
}
@@ -212,7 +212,7 @@ Editor::time_canvas_scroll (GdkEventScroll* ev)
bool
Editor::time_canvas_scroll_event (GdkEventScroll *event)
{
- time_canvas.grab_focus();
+ time_canvas->grab_focus();
time_canvas_scroll (event);
return false;
}
@@ -221,7 +221,7 @@ bool
Editor::track_canvas_button_press_event (GdkEventButton *event)
{
selection->clear ();
- track_canvas.grab_focus();
+ track_canvas->grab_focus();
return false;
}
@@ -239,7 +239,7 @@ Editor::track_canvas_motion_notify_event (GdkEventMotion *event)
{
int x, y;
/* keep those motion events coming */
- track_canvas.get_pointer (x, y);
+ track_canvas->get_pointer (x, y);
return false;
}
diff --git a/gtk2_ardour/editor_imageframe.cc b/gtk2_ardour/editor_imageframe.cc
index 504ff545aa..7634617f01 100644
--- a/gtk2_ardour/editor_imageframe.cc
+++ b/gtk2_ardour/editor_imageframe.cc
@@ -1080,7 +1080,7 @@ void
Editor::handle_new_imageframe_time_axis_view(const string & track_name, void* src)
{
ImageFrameTimeAxis* iftav ;
- iftav = new ImageFrameTimeAxis(track_name, *this, *session, track_canvas) ;
+ iftav = new ImageFrameTimeAxis(track_name, *this, *session, *track_canvas) ;
iftav->set_time_axis_name(track_name, this) ;
track_views.push_back(iftav) ;
@@ -1097,7 +1097,7 @@ Editor::handle_new_imageframe_time_axis_view(const string & track_name, void* sr
void
Editor::handle_new_imageframe_marker_time_axis_view(const string & track_name, TimeAxisView* marked_track)
{
- MarkerTimeAxis* mta = new MarkerTimeAxis (*this, *this->current_session(), track_canvas, track_name, marked_track) ;
+ MarkerTimeAxis* mta = new MarkerTimeAxis (*this, *this->current_session(), *track_canvas, track_name, marked_track) ;
((ImageFrameTimeAxis*)marked_track)->add_marker_time_axis(mta, this) ;
track_views.push_back(mta) ;
diff --git a/gtk2_ardour/editor_keyboard.cc b/gtk2_ardour/editor_keyboard.cc
index 4a5d55d879..6d8bbda6fd 100644
--- a/gtk2_ardour/editor_keyboard.cc
+++ b/gtk2_ardour/editor_keyboard.cc
@@ -39,7 +39,7 @@ Editor::kbd_driver (sigc::slot<void,GdkEvent*> theslot, bool use_track_canvas, b
double worldx, worldy;
GdkEvent ev;
Gdk::ModifierType mask;
- Glib::RefPtr<Gdk::Window> evw = track_canvas.get_window()->get_pointer (x, y, mask);
+ Glib::RefPtr<Gdk::Window> evw = track_canvas->get_window()->get_pointer (x, y, mask);
bool doit = false;
if (use_track_canvas && track_canvas_event_box.get_window()->get_pointer(x, y, mask) != 0) {
@@ -62,7 +62,7 @@ Editor::kbd_driver (sigc::slot<void,GdkEvent*> theslot, bool use_track_canvas, b
selection->set (entered_regionview);
}
- track_canvas.window_to_world (x, y, worldx, worldy);
+ track_canvas->window_to_world (x, y, worldx, worldy);
worldx += horizontal_adjustment.get_value();
worldy += vertical_adjustment.get_value();
diff --git a/gtk2_ardour/editor_markers.cc b/gtk2_ardour/editor_markers.cc
index f6af1ae67d..3d2976602e 100644
--- a/gtk2_ardour/editor_markers.cc
+++ b/gtk2_ardour/editor_markers.cc
@@ -1113,7 +1113,7 @@ Editor::update_punch_range_view (bool visibility)
double x2 = frame_to_pixel (tpl->end());
guint track_canvas_width,track_canvas_height;
- track_canvas.get_size(track_canvas_width,track_canvas_height);
+ track_canvas->get_size(track_canvas_width,track_canvas_height);
transport_punch_range_rect->property_x1() = x1;
transport_punch_range_rect->property_x2() = x2;
diff --git a/gtk2_ardour/editor_mouse.cc b/gtk2_ardour/editor_mouse.cc
index b745b93f2c..035dd9d7af 100644
--- a/gtk2_ardour/editor_mouse.cc
+++ b/gtk2_ardour/editor_mouse.cc
@@ -75,21 +75,21 @@ Editor::mouse_frame (nframes64_t& where, bool& in_track_canvas) const
int x, y;
double wx, wy;
Gdk::ModifierType mask;
- Glib::RefPtr<Gdk::Window> canvas_window = const_cast<Editor*>(this)->track_canvas.get_window();
+ Glib::RefPtr<Gdk::Window> canvas_window = const_cast<Editor*>(this)->track_canvas->get_window();
Glib::RefPtr<const Gdk::Window> pointer_window;
pointer_window = canvas_window->get_pointer (x, y, mask);
- if (pointer_window == track_canvas.get_bin_window()) {
+ if (pointer_window == track_canvas->get_bin_window()) {
- track_canvas.window_to_world (x, y, wx, wy);
+ track_canvas->window_to_world (x, y, wx, wy);
in_track_canvas = true;
} else {
in_track_canvas = false;
- if (pointer_window == time_canvas.get_bin_window()) {
- time_canvas.window_to_world (x, y, wx, wy);
+ if (pointer_window == time_canvas->get_bin_window()) {
+ time_canvas->window_to_world (x, y, wx, wy);
} else {
return false;
}
@@ -127,18 +127,18 @@ Editor::event_frame (GdkEvent* event, double* pcx, double* pcy) const
case GDK_BUTTON_PRESS:
case GDK_2BUTTON_PRESS:
case GDK_3BUTTON_PRESS:
- track_canvas.w2c(event->button.x, event->button.y, *pcx, *pcy);
+ track_canvas->w2c(event->button.x, event->button.y, *pcx, *pcy);
break;
case GDK_MOTION_NOTIFY:
- track_canvas.w2c(event->motion.x, event->motion.y, *pcx, *pcy);
+ track_canvas->w2c(event->motion.x, event->motion.y, *pcx, *pcy);
break;
case GDK_ENTER_NOTIFY:
case GDK_LEAVE_NOTIFY:
- track_canvas.w2c(event->crossing.x, event->crossing.y, *pcx, *pcy);
+ track_canvas->w2c(event->crossing.x, event->crossing.y, *pcx, *pcy);
break;
case GDK_KEY_PRESS:
case GDK_KEY_RELEASE:
- // track_canvas.w2c(event->key.x, event->key.y, *pcx, *pcy);
+ // track_canvas->w2c(event->key.x, event->key.y, *pcx, *pcy);
break;
default:
warning << string_compose (_("Editor::event_frame() used on unhandled event type %1"), event->type) << endmsg;
@@ -245,7 +245,7 @@ Editor::set_canvas_cursor ()
}
if (is_drawable()) {
- track_canvas.get_window()->set_cursor(*current_canvas_cursor);
+ track_canvas->get_window()->set_cursor(*current_canvas_cursor);
}
}
@@ -463,7 +463,7 @@ const static double ZERO_GAIN_FRACTION = gain_to_slider_position(dB_to_coefficie
bool
Editor::button_press_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_type)
{
- track_canvas.grab_focus();
+ track_canvas->grab_focus();
if (session && session->actively_recording()) {
return true;
@@ -750,7 +750,7 @@ Editor::button_press_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemTyp
scrub_reverse_distance = 0;
last_scrub_x = event->button.x;
scrubbing_direction = 0;
- track_canvas.get_window()->set_cursor (*transparent_cursor);
+ track_canvas->get_window()->set_cursor (*transparent_cursor);
/* rest handled in motion & release */
break;
@@ -1102,7 +1102,7 @@ Editor::button_release_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemT
case MouseAudition:
_scrubbing = false;
- track_canvas.get_window()->set_cursor (*current_canvas_cursor);
+ track_canvas->get_window()->set_cursor (*current_canvas_cursor);
if (scrubbing_direction == 0) {
/* no drag, just a click */
switch (item_type) {
@@ -1198,7 +1198,7 @@ Editor::enter_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_
fraction = 1.0 - (cp->get_y() / cp->line.height());
if (is_drawable() && !_scrubbing) {
- track_canvas.get_window()->set_cursor (*fader_cursor);
+ track_canvas->get_window()->set_cursor (*fader_cursor);
}
last_item_entered_n++;
@@ -1229,7 +1229,7 @@ Editor::enter_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_
show_verbose_canvas_cursor ();
if (is_drawable()) {
- track_canvas.get_window()->set_cursor (*fader_cursor);
+ track_canvas->get_window()->set_cursor (*fader_cursor);
}
}
break;
@@ -1240,7 +1240,7 @@ Editor::enter_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_
if (line)
line->property_fill_color_rgba() = ARDOUR_UI::config()->canvasvar_EnteredGainLine.get();
if (is_drawable()) {
- track_canvas.get_window()->set_cursor (*fader_cursor);
+ track_canvas->get_window()->set_cursor (*fader_cursor);
}
}
break;
@@ -1255,14 +1255,14 @@ Editor::enter_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_
line->property_fill_color_rgba() = ARDOUR_UI::config()->canvasvar_EnteredAutomationLine.get();
}
if (is_drawable()) {
- track_canvas.get_window()->set_cursor (*fader_cursor);
+ track_canvas->get_window()->set_cursor (*fader_cursor);
}
}
break;
case RegionViewNameHighlight:
if (is_drawable() && mouse_mode == MouseObject) {
- track_canvas.get_window()->set_cursor (*trimmer_cursor);
+ track_canvas->get_window()->set_cursor (*trimmer_cursor);
}
break;
@@ -1276,7 +1276,7 @@ Editor::enter_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_
/* </CMT Additions> */
if (is_drawable()) {
- track_canvas.get_window()->set_cursor (*trimmer_cursor);
+ track_canvas->get_window()->set_cursor (*trimmer_cursor);
}
break;
@@ -1284,10 +1284,10 @@ Editor::enter_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_
if (is_drawable()) {
switch (_edit_point) {
case EditAtMouse:
- track_canvas.get_window()->set_cursor (*grabber_edit_point_cursor);
+ track_canvas->get_window()->set_cursor (*grabber_edit_point_cursor);
break;
default:
- track_canvas.get_window()->set_cursor (*grabber_cursor);
+ track_canvas->get_window()->set_cursor (*grabber_cursor);
break;
}
}
@@ -1299,7 +1299,7 @@ Editor::enter_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_
if (!reinterpret_cast<RegionView *> (item->get_data ("regionview"))->name_active()) {
if (mouse_mode == MouseObject && is_drawable()) {
- track_canvas.get_window()->set_cursor (*trimmer_cursor);
+ track_canvas->get_window()->set_cursor (*trimmer_cursor);
}
}
break;
@@ -1320,7 +1320,7 @@ Editor::enter_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_
break;
}
- track_canvas.get_window()->set_cursor (*cursor);
+ track_canvas->get_window()->set_cursor (*cursor);
AutomationTimeAxisView* atv;
if ((atv = static_cast<AutomationTimeAxisView*>(item->get_data ("trackview"))) != 0) {
@@ -1337,7 +1337,7 @@ Editor::enter_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_
case MeterBarItem:
case TempoBarItem:
if (is_drawable()) {
- time_canvas.get_window()->set_cursor (*timebar_cursor);
+ time_canvas->get_window()->set_cursor (*timebar_cursor);
}
break;
@@ -1351,7 +1351,7 @@ Editor::enter_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_
case MeterMarkerItem:
case TempoMarkerItem:
if (is_drawable()) {
- time_canvas.get_window()->set_cursor (*timebar_cursor);
+ time_canvas->get_window()->set_cursor (*timebar_cursor);
}
break;
case FadeInHandleItem:
@@ -1420,7 +1420,7 @@ Editor::leave_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_
}
if (is_drawable()) {
- track_canvas.get_window()->set_cursor (*current_canvas_cursor);
+ track_canvas->get_window()->set_cursor (*current_canvas_cursor);
}
hide_verbose_canvas_cursor ();
@@ -1437,7 +1437,7 @@ Editor::leave_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_
case MarkerViewHandleEndItem:
/* </CMT Additions> */
if (is_drawable()) {
- track_canvas.get_window()->set_cursor (*current_canvas_cursor);
+ track_canvas->get_window()->set_cursor (*current_canvas_cursor);
}
break;
@@ -1452,7 +1452,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.get_window()->set_cursor (*current_canvas_cursor);
+ track_canvas->get_window()->set_cursor (*current_canvas_cursor);
}
break;
@@ -1460,7 +1460,7 @@ Editor::leave_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_
/* see enter_handler() for notes */
if (!reinterpret_cast<RegionView *> (item->get_data ("regionview"))->name_active()) {
if (is_drawable() && mouse_mode == MouseObject) {
- track_canvas.get_window()->set_cursor (*current_canvas_cursor);
+ track_canvas->get_window()->set_cursor (*current_canvas_cursor);
}
}
break;
@@ -1472,7 +1472,7 @@ Editor::leave_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_
case TempoBarItem:
case MarkerBarItem:
if (is_drawable()) {
- time_canvas.get_window()->set_cursor (*timebar_cursor);
+ time_canvas->get_window()->set_cursor (*timebar_cursor);
}
break;
@@ -1489,7 +1489,7 @@ Editor::leave_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_
case TempoMarkerItem:
if (is_drawable()) {
- time_canvas.get_window()->set_cursor (*timebar_cursor);
+ time_canvas->get_window()->set_cursor (*timebar_cursor);
}
break;
@@ -1508,7 +1508,7 @@ Editor::leave_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_
case AutomationTrackItem:
if (is_drawable()) {
- track_canvas.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));
}
@@ -1546,7 +1546,7 @@ Editor::motion_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item
event might do, its a good tradeoff.
*/
- track_canvas.get_pointer (x, y);
+ track_canvas->get_pointer (x, y);
}
if (current_stepping_trackview) {
@@ -2691,7 +2691,7 @@ Editor::start_control_point_grab (ArdourCanvas::Item* item, GdkEvent* event)
drag_info.grab_x = control_point->get_x();
drag_info.grab_y = control_point->get_y();
control_point->line.parent_group().i2w(drag_info.grab_x, drag_info.grab_y);
- track_canvas.w2c(drag_info.grab_x, drag_info.grab_y,
+ track_canvas->w2c(drag_info.grab_x, drag_info.grab_y,
drag_info.grab_x, drag_info.grab_y);
drag_info.grab_frame = pixel_to_frame(drag_info.grab_x);
@@ -3912,7 +3912,15 @@ Editor::show_verbose_time_cursor (nframes_t frame, double offset, double xpos, d
return;
}
- switch (Profile->get_small_screen() ? ARDOUR_UI::instance()->primary_clock.mode () : ARDOUR_UI::instance()->secondary_clock.mode ()) {
+ AudioClock::Mode m;
+
+ if (Profile->get_sae() || Profile->get_small_screen()) {
+ m = ARDOUR_UI::instance()->primary_clock.mode();
+ } else {
+ m = ARDOUR_UI::instance()->secondary_clock.mode();
+ }
+
+ switch (m) {
case AudioClock::BBT:
session->bbt_time (frame, bbt);
snprintf (buf, sizeof (buf), "%02" PRIu32 "|%02" PRIu32 "|%02" PRIu32, bbt.bars, bbt.beats, bbt.ticks);
@@ -3964,7 +3972,15 @@ Editor::show_verbose_duration_cursor (nframes_t start, nframes_t end, double off
return;
}
- switch (ARDOUR_UI::instance()->secondary_clock.mode ()) {
+ AudioClock::Mode m;
+
+ if (Profile->get_sae() || Profile->get_small_screen()) {
+ m = ARDOUR_UI::instance()->primary_clock.mode ();
+ } else {
+ m = ARDOUR_UI::instance()->secondary_clock.mode ();
+ }
+
+ switch (m) {
case AudioClock::BBT:
session->bbt_time (start, sbbt);
session->bbt_time (end, ebbt);
@@ -4019,6 +4035,7 @@ Editor::show_verbose_duration_cursor (nframes_t start, nframes_t end, double off
else {
set_verbose_canvas_cursor (buf, drag_info.current_pointer_x + offset, drag_info.current_pointer_y + offset);
}
+
show_verbose_canvas_cursor ();
}
diff --git a/gtk2_ardour/editor_ops.cc b/gtk2_ardour/editor_ops.cc
index 951c40cd3c..335851ec49 100644
--- a/gtk2_ardour/editor_ops.cc
+++ b/gtk2_ardour/editor_ops.cc
@@ -2098,7 +2098,7 @@ Editor::insert_region_list_drag (boost::shared_ptr<AudioRegion> region, int x, i
AudioTimeAxisView *atv = 0;
boost::shared_ptr<Playlist> playlist;
- track_canvas.window_to_world (x, y, wx, wy);
+ track_canvas->window_to_world (x, y, wx, wy);
wx += horizontal_adjustment.get_value();
wy += vertical_adjustment.get_value();
@@ -2276,7 +2276,6 @@ Editor::play_from_edit_point_and_return ()
start_frame = get_preferred_edit_position (true);
if (session->transport_rolling()) {
- /* go to edit point and stop */
session->request_locate (start_frame, false);
return;
}
@@ -3489,7 +3488,7 @@ Editor::freeze_route ()
pthread_attr_destroy(&attr);
- track_canvas.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 ();
@@ -3498,7 +3497,7 @@ Editor::freeze_route ()
interthread_progress_connection.disconnect ();
interthread_progress_window->hide_all ();
current_interthread_info = 0;
- track_canvas.get_window()->set_cursor (*current_canvas_cursor);
+ track_canvas->get_window()->set_cursor (*current_canvas_cursor);
}
void
@@ -4161,7 +4160,7 @@ Editor::normalize_region ()
begin_reversible_command (_("normalize"));
- track_canvas.get_window()->set_cursor (*wait_cursor);
+ track_canvas->get_window()->set_cursor (*wait_cursor);
gdk_flush ();
for (RegionSelection::iterator r = rs.begin(); r != rs.end(); ++r) {
@@ -4174,7 +4173,7 @@ Editor::normalize_region ()
}
commit_reversible_command ();
- track_canvas.get_window()->set_cursor (*current_canvas_cursor);
+ track_canvas->get_window()->set_cursor (*current_canvas_cursor);
}
@@ -4284,7 +4283,7 @@ Editor::apply_filter (AudioFilter& filter, string command)
begin_reversible_command (command);
- track_canvas.get_window()->set_cursor (*wait_cursor);
+ track_canvas->get_window()->set_cursor (*wait_cursor);
gdk_flush ();
for (RegionSelection::iterator r = rs.begin(); r != rs.end(); ) {
@@ -4316,7 +4315,7 @@ Editor::apply_filter (AudioFilter& filter, string command)
rs.clear ();
out:
- track_canvas.get_window()->set_cursor (*current_canvas_cursor);
+ track_canvas->get_window()->set_cursor (*current_canvas_cursor);
}
void
diff --git a/gtk2_ardour/editor_route_list.cc b/gtk2_ardour/editor_route_list.cc
index 9749c1b0c6..4bf73ecaff 100644
--- a/gtk2_ardour/editor_route_list.cc
+++ b/gtk2_ardour/editor_route_list.cc
@@ -61,7 +61,7 @@ Editor::handle_new_route (Session::RouteList& routes)
continue;
}
- tv = new AudioTimeAxisView (*this, *session, route, track_canvas);
+ tv = new AudioTimeAxisView (*this, *session, route, *track_canvas);
//cerr << "Editor::handle_new_route() called on " << route->name() << endl;//DEBUG
row = *(route_display_model->append ());
diff --git a/gtk2_ardour/editor_rulers.cc b/gtk2_ardour/editor_rulers.cc
index 120c57025c..a2b961e7b7 100644
--- a/gtk2_ardour/editor_rulers.cc
+++ b/gtk2_ardour/editor_rulers.cc
@@ -276,8 +276,8 @@ Editor::ruler_mouse_motion (GdkEventMotion* ev)
time_canvas_event_box.get_window()->get_pointer (x, y, state);
- track_canvas.c2w (x, y, wcx, wcy);
- track_canvas.w2c (wcx, wcy, cx, cy);
+ track_canvas->c2w (x, y, wcx, wcy);
+ track_canvas->w2c (wcx, wcy, cx, cy);
nframes_t where = leftmost_frame + pixel_to_frame (x);
@@ -687,6 +687,7 @@ Editor::update_ruler_visibility ()
range_marker_group->move (0.0, tbpos - old_unit_pos);
}
range_marker_group->show();
+ cerr << "range_marker_group now at " << range_marker_group->property_y() << endl;
tbpos += timebar_height;
visible_timebars++;
} else {
diff --git a/gtk2_ardour/editor_tempodisplay.cc b/gtk2_ardour/editor_tempodisplay.cc
index 8bb19e358b..034ea26f37 100644
--- a/gtk2_ardour/editor_tempodisplay.cc
+++ b/gtk2_ardour/editor_tempodisplay.cc
@@ -222,7 +222,7 @@ Editor::draw_measures ()
return;
}
- track_canvas.get_scroll_region (x1, y1, x2, y2);
+ track_canvas->get_scroll_region (x1, y1, x2, y2);
y2 = TimeAxisView::hLargest*5000; // five thousand largest tracks should be enough.. :)
/* get the first bar spacing */
@@ -232,7 +232,7 @@ Editor::draw_measures ()
bars = (*i).bar - (*current_bbt_points->begin()).bar;
beats = current_bbt_points->size() - bars;
- beat_density = (beats * 10.0f) / track_canvas.get_width ();
+ beat_density = (beats * 10.0f) / track_canvas->get_width ();
if (beat_density > 4.0f) {
/* if the lines are too close together, they become useless
diff --git a/gtk2_ardour/main.cc b/gtk2_ardour/main.cc
index 08eef47fc3..c211374583 100644
--- a/gtk2_ardour/main.cc
+++ b/gtk2_ardour/main.cc
@@ -271,7 +271,7 @@ int main (int argc, char* argv[])
}
if (no_splash) {
- cerr << _("Copyright (C) 1999-2007 Paul Davis") << endl
+ cerr << _("Copyright (C) 1999-2008 Paul Davis") << endl
<< _("Some portions Copyright (C) Steve Harris, Ari Johnson, Brett Viren, Joel Baker") << endl
<< endl
<< _("Ardour comes with ABSOLUTELY NO WARRANTY") << endl
diff --git a/gtk2_ardour/marker.cc b/gtk2_ardour/marker.cc
index edf05cf6ec..e654461899 100644
--- a/gtk2_ardour/marker.cc
+++ b/gtk2_ardour/marker.cc
@@ -283,6 +283,7 @@ Marker::~Marker ()
if (line) {
delete line;
+ line = 0;
}
}
diff --git a/gtk2_ardour/region_view.cc b/gtk2_ardour/region_view.cc
index 9c2bff631a..89e78b44b9 100644
--- a/gtk2_ardour/region_view.cc
+++ b/gtk2_ardour/region_view.cc
@@ -143,7 +143,7 @@ RegionView::init (Gdk::Color& basic_color, bool wfd)
set_colors ();
ColorsChanged.connect (mem_fun (*this, &RegionView::color_handler));
- set_pango_fontsize();
+ // set_pango_fontsize();
/* XXX sync mark drag? */
}
diff --git a/libs/ardour/ardour/session.h b/libs/ardour/ardour/session.h
index 9866c1cbe0..76590368f8 100644
--- a/libs/ardour/ardour/session.h
+++ b/libs/ardour/ardour/session.h
@@ -162,6 +162,7 @@ class Session : public PBD::StatefulDestructible
union {
void* ptr;
bool yes_or_no;
+ nframes_t target2_frame;
SlaveSource slave;
};
diff --git a/libs/ardour/session_butler.cc b/libs/ardour/session_butler.cc
index 78d2cbdc9b..2ac06e57dd 100644
--- a/libs/ardour/session_butler.cc
+++ b/libs/ardour/session_butler.cc
@@ -29,6 +29,7 @@
#include <pbd/error.h>
#include <pbd/pthread_utils.h>
+#include <pbd/stacktrace.h>
#include <ardour/configuration.h>
#include <ardour/audioengine.h>
@@ -130,6 +131,7 @@ Session::summon_butler ()
{
char c = ButlerRequest::Run;
::write (butler_request_pipe[1], &c, 1);
+ // PBD::stacktrace (cerr);
}
void
diff --git a/libs/ardour/session_events.cc b/libs/ardour/session_events.cc
index f86f3cbb3b..20e7309c02 100644
--- a/libs/ardour/session_events.cc
+++ b/libs/ardour/session_events.cc
@@ -351,7 +351,8 @@ Session::process_event (Event* ev)
case Event::LocateRollLocate:
// locate is handled by ::request_roll_at_and_return()
_requested_return_frame = ev->target_frame;
- set_transport_speed (ev->speed, true);
+ cerr << "Set RRF " << ev->target_frame << endl;
+ request_locate (ev->target2_frame, true);
break;
diff --git a/libs/ardour/session_transport.cc b/libs/ardour/session_transport.cc
index 1c44830954..d5c9e99b8a 100644
--- a/libs/ardour/session_transport.cc
+++ b/libs/ardour/session_transport.cc
@@ -394,6 +394,7 @@ Session::non_realtime_stop (bool abort, int on_entry, bool& finished)
do_locate = true;
} else {
_transport_frame = last_stop_frame;
+ _requested_return_frame = -1;
}
if (synced_to_jack() && !play_loop) {
@@ -429,9 +430,14 @@ Session::non_realtime_stop (bool abort, int on_entry, bool& finished)
}
#endif
- last_stop_frame = _transport_frame;
+ if (_requested_return_frame < 0) {
+ last_stop_frame = _transport_frame;
+ } else {
+ last_stop_frame = _requested_return_frame;
+ _requested_return_frame = -1;
+ }
- send_full_time_code ();
+ send_full_time_code ();
deliver_mmc (MIDI::MachineControl::cmdStop, 0);
deliver_mmc (MIDI::MachineControl::cmdLocate, _transport_frame);
@@ -1188,8 +1194,8 @@ Session::setup_auto_play ()
void
Session::request_roll_at_and_return (nframes_t start, nframes_t return_to)
{
- request_locate (start, false);
Event *ev = new Event (Event::LocateRollLocate, Event::Add, Event::Immediate, return_to, 1.0);
+ ev->target2_frame = start;
queue_event (ev);
}