summaryrefslogtreecommitdiff
path: root/gtk2_ardour
diff options
context:
space:
mode:
Diffstat (limited to 'gtk2_ardour')
-rw-r--r--gtk2_ardour/audio_streamview.cc57
-rw-r--r--gtk2_ardour/dark.colors1
-rw-r--r--gtk2_ardour/midi_region_view.cc13
-rw-r--r--gtk2_ardour/midi_streamview.cc32
-rw-r--r--gtk2_ardour/midi_streamview.h4
-rw-r--r--gtk2_ardour/streamview.cc37
-rw-r--r--gtk2_ardour/streamview.h1
7 files changed, 52 insertions, 93 deletions
diff --git a/gtk2_ardour/audio_streamview.cc b/gtk2_ardour/audio_streamview.cc
index 551dcdac19..1c54233131 100644
--- a/gtk2_ardour/audio_streamview.cc
+++ b/gtk2_ardour/audio_streamview.cc
@@ -237,62 +237,11 @@ AudioStreamView::setup_rec_box ()
/* start a new rec box */
- boost::shared_ptr<AudioTrack> at;
-
- at = _trackview.audio_track(); /* we know what it is already */
+ boost::shared_ptr<AudioTrack> at = _trackview.audio_track();
framepos_t const frame_pos = at->current_capture_start ();
- gdouble xstart = _trackview.editor().sample_to_pixel (frame_pos);
- gdouble xend = xstart; /* keeps gcc optimized happy, really set in switch() below */
- uint32_t fill_color;
-
- switch (_trackview.audio_track()->mode()) {
- case Normal:
- case NonLayered:
- xend = xstart;
- fill_color = ARDOUR_UI::config()->color ("recording rect");
- break;
-
- case Destructive:
- xend = xstart + 2;
- fill_color = ARDOUR_UI::config()->color ("recording rect");
- /* make the recording rect translucent to allow
- the user to see the peak data coming in, etc.
- */
- fill_color = UINT_RGBA_CHANGE_A (fill_color, 120);
- break;
- default:
- fatal << string_compose (_("programming error: %1: %2"),
- "AudioStreamView: impossible track mode",
- (int) _trackview.audio_track()->mode()) << endmsg;
- abort(); /*NOTREACHED*/
- }
+ double const width = ((at->mode() == Destructive) ? 2 : 0);
- ArdourCanvas::Rectangle * rec_rect = new ArdourCanvas::TimeRectangle (_canvas_group);
- rec_rect->set_x0 (xstart);
- rec_rect->set_y0 (0);
- rec_rect->set_x1 (xend);
- rec_rect->set_y1 (child_height ());
- rec_rect->set_outline_what (ArdourCanvas::Rectangle::What (0));
- rec_rect->set_outline_color (ARDOUR_UI::config()->color ("time axis frame"));
- rec_rect->set_fill_color (fill_color);
-
- RecBoxInfo recbox;
- recbox.rectangle = rec_rect;
-
- if (rec_rects.empty()) {
- recbox.start = _trackview.session()->record_location ();
- } else {
- recbox.start = _trackview.session()->transport_frame ();
- }
- recbox.length = 0;
-
- rec_rects.push_back (recbox);
-
- screen_update_connection.disconnect();
- screen_update_connection = ARDOUR_UI::instance()->SuperRapidScreenUpdate.connect (
- sigc::mem_fun (*this, &AudioStreamView::update_rec_box));
- rec_updating = true;
- rec_active = true;
+ create_rec_box(frame_pos, width);
} else if (rec_active &&
(_trackview.session()->record_status() != Session::Recording ||
diff --git a/gtk2_ardour/dark.colors b/gtk2_ardour/dark.colors
index 507f8420ad..8610e5d1ef 100644
--- a/gtk2_ardour/dark.colors
+++ b/gtk2_ardour/dark.colors
@@ -497,6 +497,7 @@
<Modifier name="panner fill" modifier="= alpha:0.7882"/>
<Modifier name="piano roll black" modifier="= alpha:0.331098"/>
<Modifier name="piano roll white" modifier="= alpha:0.4627"/>
+ <Modifier name="recording rect" modifier="= alpha:0.25"/>
<Modifier name="region base" modifier="= alpha:0.99"/>
<Modifier name="selected midi note" modifier="= alpha:0.7529"/>
<Modifier name="selection rect" modifier="= alpha:0.4666"/>
diff --git a/gtk2_ardour/midi_region_view.cc b/gtk2_ardour/midi_region_view.cc
index e072d7c7ce..2879e65af7 100644
--- a/gtk2_ardour/midi_region_view.cc
+++ b/gtk2_ardour/midi_region_view.cc
@@ -1559,7 +1559,8 @@ MidiRegionView::extend_active_notes()
for (unsigned i=0; i < 128; ++i) {
if (_active_notes[i]) {
- _active_notes[i]->set_x1 (trackview.editor().sample_to_pixel(_region->length()));
+ _active_notes[i]->set_x1(
+ trackview.editor().sample_to_pixel(_region->position() + _region->length()));
}
}
}
@@ -3781,8 +3782,6 @@ MidiRegionView::data_recorded (boost::weak_ptr<MidiSource> w)
boost::shared_ptr<MidiBuffer> buf = mtv->midi_track()->get_gui_feed_buffer ();
- BeatsFramesConverter converter (trackview.session()->tempo_map(), mtv->midi_track()->get_capture_start_frame (0));
-
framepos_t back = max_framepos;
for (MidiBuffer::iterator i = buf->begin(); i != buf->end(); ++i) {
@@ -3796,12 +3795,8 @@ MidiRegionView::data_recorded (boost::weak_ptr<MidiSource> w)
}
}
- /* ev.time() is in session frames, so (ev.time() - converter.origin_b()) is
- frames from the start of the source, and so time_beats is in terms of the
- source.
- */
-
- Evoral::MusicalTime const time_beats = converter.from (ev.time () - converter.origin_b ());
+ /* convert from session frames to source beats */
+ Evoral::MusicalTime const time_beats = _source_relative_time_converter.from(ev.time());
if (ev.type() == MIDI_CMD_NOTE_ON) {
boost::shared_ptr<NoteType> note (
diff --git a/gtk2_ardour/midi_streamview.cc b/gtk2_ardour/midi_streamview.cc
index 8a5fd53150..3d2c54d87f 100644
--- a/gtk2_ardour/midi_streamview.cc
+++ b/gtk2_ardour/midi_streamview.cc
@@ -497,12 +497,12 @@ MidiStreamView::setup_rec_box ()
if (region) {
region->set_start (_trackview.track()->current_capture_start()
- _trackview.track()->get_capture_start_frame (0));
- region->set_position (_trackview.track()->current_capture_start());
+ region->set_position (_trackview.session()->transport_frame());
+
RegionView* rv = add_region_view_internal (region, false, true);
MidiRegionView* mrv = dynamic_cast<MidiRegionView*> (rv);
mrv->begin_write ();
-
/* rec region will be destroyed in setup_rec_box */
rec_regions.push_back (make_pair (region, rv));
@@ -515,32 +515,7 @@ MidiStreamView::setup_rec_box ()
/* start a new rec box */
- boost::shared_ptr<MidiTrack> mt = _trackview.midi_track(); /* we know what it is already */
- framepos_t const frame_pos = mt->current_capture_start ();
- gdouble const xstart = _trackview.editor().sample_to_pixel (frame_pos);
- gdouble const xend = xstart;
- uint32_t fill_color;
-
- fill_color = ARDOUR_UI::config()->color ("recording rect");
-
- ArdourCanvas::Rectangle * rec_rect = new ArdourCanvas::Rectangle (_canvas_group);
- rec_rect->set (ArdourCanvas::Rect (xstart, 1, xend, _trackview.current_height() - 1));
- rec_rect->set_outline_color (ARDOUR_UI::config()->color ("recording rect"));
- rec_rect->set_fill_color (fill_color);
- rec_rect->lower_to_bottom();
-
- RecBoxInfo recbox;
- recbox.rectangle = rec_rect;
- recbox.start = _trackview.session()->transport_frame();
- recbox.length = 0;
-
- rec_rects.push_back (recbox);
-
- screen_update_connection.disconnect();
- screen_update_connection = ARDOUR_UI::instance()->SuperRapidScreenUpdate.connect (
- sigc::mem_fun (*this, &MidiStreamView::update_rec_box));
- rec_updating = true;
- rec_active = true;
+ create_rec_box(_trackview.midi_track()->current_capture_start(), 0);
} else if (rec_active &&
(_trackview.session()->record_status() != Session::Recording ||
@@ -559,7 +534,6 @@ MidiStreamView::setup_rec_box ()
/* disconnect rapid update */
screen_update_connection.disconnect();
rec_data_ready_connections.drop_connections ();
-
rec_updating = false;
rec_active = false;
diff --git a/gtk2_ardour/midi_streamview.h b/gtk2_ardour/midi_streamview.h
index 9dbfbae5ea..8d5c233b7d 100644
--- a/gtk2_ardour/midi_streamview.h
+++ b/gtk2_ardour/midi_streamview.h
@@ -105,10 +105,12 @@ class MidiStreamView : public StreamView
void suspend_updates ();
void resume_updates ();
- private:
+ protected:
void setup_rec_box ();
void update_rec_box ();
+ private:
+
RegionView* add_region_view_internal (
boost::shared_ptr<ARDOUR::Region>,
bool wait_for_waves,
diff --git a/gtk2_ardour/streamview.cc b/gtk2_ardour/streamview.cc
index 73e150549f..1ee0114c52 100644
--- a/gtk2_ardour/streamview.cc
+++ b/gtk2_ardour/streamview.cc
@@ -405,6 +405,43 @@ StreamView::transport_looped()
}
void
+StreamView::create_rec_box(framepos_t frame_pos, double width)
+{
+ const double xstart = _trackview.editor().sample_to_pixel(frame_pos);
+ const double xend = xstart + width;
+ const uint32_t fill_color = ARDOUR_UI::config()->color_mod("recording rect", "recording_rect");
+
+ ArdourCanvas::Rectangle* rec_rect = new ArdourCanvas::TimeRectangle(_canvas_group);
+ rec_rect->set_x0(xstart);
+ rec_rect->set_y0(0);
+ rec_rect->set_x1(xend);
+ rec_rect->set_y1(child_height ());
+ rec_rect->set_outline_what(ArdourCanvas::Rectangle::What(0));
+ rec_rect->set_outline_color(ARDOUR_UI::config()->color("recording rect"));
+ rec_rect->set_fill_color(fill_color);
+ rec_rect->lower_to_bottom();
+
+ RecBoxInfo recbox;
+ recbox.rectangle = rec_rect;
+ recbox.length = 0;
+
+ if (rec_rects.empty()) {
+ recbox.start = _trackview.session()->record_location ();
+ } else {
+ recbox.start = _trackview.session()->transport_frame ();
+ }
+
+ rec_rects.push_back (recbox);
+
+ screen_update_connection.disconnect();
+ screen_update_connection = ARDOUR_UI::instance()->SuperRapidScreenUpdate.connect(
+ sigc::mem_fun(*this, &StreamView::update_rec_box));
+
+ rec_updating = true;
+ rec_active = true;
+}
+
+void
StreamView::update_rec_box ()
{
if (rec_active && rec_rects.size() > 0) {
diff --git a/gtk2_ardour/streamview.h b/gtk2_ardour/streamview.h
index b3ae34e4d4..d211ca10c3 100644
--- a/gtk2_ardour/streamview.h
+++ b/gtk2_ardour/streamview.h
@@ -134,6 +134,7 @@ protected:
void transport_looped();
void rec_enable_changed();
void sess_rec_enable_changed();
+ void create_rec_box(framepos_t frame_pos, double width);
virtual void setup_rec_box () = 0;
virtual void update_rec_box ();