summaryrefslogtreecommitdiff
path: root/gtk2_ardour
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2014-06-13 10:56:46 -0400
committerPaul Davis <paul@linuxaudiosystems.com>2014-06-13 12:22:39 -0400
commit50fea864dbbba2a6be3ddf3346afce5d1778902e (patch)
treeea73f3049ce554f3dcdd3b852a7323fb72d83e44 /gtk2_ardour
parenta50569e7870bed622537aeb137501e82e3d57e61 (diff)
rationalize and coordinate handle of region (time axis view item) opacity.
There are still some bugs with this because of the waveview image cache - fixes coming soon.
Diffstat (limited to 'gtk2_ardour')
-rw-r--r--gtk2_ardour/canvas_vars.h.in (renamed from gtk2_ardour/canvas_vars.h)0
-rw-r--r--gtk2_ardour/editor_drag.cc12
-rw-r--r--gtk2_ardour/region_view.cc20
-rw-r--r--gtk2_ardour/region_view.h2
-rw-r--r--gtk2_ardour/time_axis_view_item.cc77
-rw-r--r--gtk2_ardour/time_axis_view_item.h9
6 files changed, 57 insertions, 63 deletions
diff --git a/gtk2_ardour/canvas_vars.h b/gtk2_ardour/canvas_vars.h.in
index ab8cb62828..ab8cb62828 100644
--- a/gtk2_ardour/canvas_vars.h
+++ b/gtk2_ardour/canvas_vars.h.in
diff --git a/gtk2_ardour/editor_drag.cc b/gtk2_ardour/editor_drag.cc
index f1d879e32c..10a4a88c77 100644
--- a/gtk2_ardour/editor_drag.cc
+++ b/gtk2_ardour/editor_drag.cc
@@ -743,7 +743,6 @@ RegionMotionDrag::motion (GdkEvent* event, bool first_move)
if (first_move) {
rv->drag_start ();
- rv->set_opacity_for_drag (true);
/* reparent the regionview into a group above all
* others
@@ -938,10 +937,6 @@ RegionMoveDrag::motion (GdkEvent* event, bool first_move)
void
RegionMotionDrag::finished (GdkEvent *, bool)
{
- for (list<DraggingView>::iterator i = _views.begin(); i != _views.end(); ++i) {
- i->view->set_opacity_for_drag (false);
- }
-
for (vector<TimeAxisView*>::iterator i = _time_axis_views.begin(); i != _time_axis_views.end(); ++i) {
if (!(*i)->view()) {
continue;
@@ -1200,7 +1195,7 @@ RegionMoveDrag::finished_no_copy (
visible.
*/
rv->hide_region_editor();
- rv->set_opacity_for_drag (false);
+
remove_region_from_playlist (rv->region(), i->initial_playlist, modified_playlists);
@@ -1435,7 +1430,6 @@ RegionMotionDrag::aborted (bool)
rv->get_canvas_group()->reparent (rtv->view()->canvas_item());
rv->get_canvas_group()->set_y_position (0);
rv->drag_end ();
- rv->set_opacity_for_drag (false);
rv->move (-_total_x_delta, 0);
rv->set_height (rtv->view()->child_height ());
}
@@ -1837,7 +1831,6 @@ VideoTimeLineDrag::motion (GdkEvent* event, bool first_move)
DEBUG_TRACE (DEBUG::Drags, string_compose("SHIFT REGION at %1 by %2\n", i->initial_position, dt));
if (first_move) {
rv->drag_start ();
- rv->set_opacity_for_drag (true);
rv->region()->clear_changes ();
rv->region()->suspend_property_changes();
}
@@ -1885,7 +1878,6 @@ VideoTimeLineDrag::finished (GdkEvent * /*event*/, bool movement_occurred)
for (list<AVDraggingView>::iterator i = _views.begin(); i != _views.end(); ++i) {
i->view->drag_end();
- i->view->set_opacity_for_drag (false);
i->view->region()->resume_property_changes ();
_editor->session()->add_command (new StatefulDiffCommand (i->view->region()));
@@ -2021,7 +2013,6 @@ TrimDrag::motion (GdkEvent* event, bool first_move)
for (list<DraggingView>::const_iterator i = _views.begin(); i != _views.end(); ++i) {
RegionView* rv = i->view;
- rv->set_opacity_for_drag (false);
rv->enable_display (false);
rv->region()->playlist()->clear_owned_changes ();
@@ -2204,7 +2195,6 @@ TrimDrag::finished (GdkEvent* event, bool movement_occurred)
for (list<DraggingView>::const_iterator i = _views.begin(); i != _views.end(); ++i) {
i->view->thaw_after_trim ();
i->view->enable_display (true);
- i->view->set_opacity_for_drag (true);
/* Trimming one region may affect others on the playlist, so we need
to get undo Commands from the whole playlist rather than just the
diff --git a/gtk2_ardour/region_view.cc b/gtk2_ardour/region_view.cc
index 86eb373797..aee25b2e01 100644
--- a/gtk2_ardour/region_view.cc
+++ b/gtk2_ardour/region_view.cc
@@ -519,6 +519,18 @@ RegionView::set_duration (framecnt_t frames, void *src)
return true;
}
+uint32_t
+RegionView::fill_opacity () const
+{
+ if (!_region->opaque()) {
+ return 60;
+ }
+
+ uint32_t normal_tavi_opacity = TimeAxisViewItem::fill_opacity ();
+
+ return normal_tavi_opacity;
+}
+
void
RegionView::set_colors ()
{
@@ -534,14 +546,6 @@ RegionView::set_colors ()
void
RegionView::set_frame_color ()
{
- if (!frame) {
- return;
- }
-
- if (!_region->opaque()) {
- fill_opacity = 60;
- }
-
TimeAxisViewItem::set_frame_color ();
}
diff --git a/gtk2_ardour/region_view.h b/gtk2_ardour/region_view.h
index ff2cf00a0d..e3bc1e6cbf 100644
--- a/gtk2_ardour/region_view.h
+++ b/gtk2_ardour/region_view.h
@@ -154,6 +154,8 @@ class RegionView : public TimeAxisViewItem
virtual void set_frame_color ();
virtual void reset_width_dependent_items (double pixel_width);
+ uint32_t fill_opacity () const;
+
virtual void color_handler () {}
boost::shared_ptr<ARDOUR::Region> _region;
diff --git a/gtk2_ardour/time_axis_view_item.cc b/gtk2_ardour/time_axis_view_item.cc
index b6ae21668a..e3b302f975 100644
--- a/gtk2_ardour/time_axis_view_item.cc
+++ b/gtk2_ardour/time_axis_view_item.cc
@@ -167,7 +167,6 @@ TimeAxisViewItem::init (ArdourCanvas::Group* parent, double fpp, uint32_t base_c
group->Event.connect (sigc::mem_fun (*this, &TimeAxisViewItem::canvas_group_event));
fill_color = base_color;
- pre_drag_fill_color = base_color;
samples_per_pixel = fpp;
frame_position = start;
item_duration = duration;
@@ -280,7 +279,6 @@ TimeAxisViewItem::init (ArdourCanvas::Group* parent, double fpp, uint32_t base_c
}
set_color (base_color);
- set_opacity_for_drag (false);
set_duration (item_duration, this);
set_position (start, this);
@@ -666,11 +664,7 @@ TimeAxisViewItem::get_name_highlight()
void
TimeAxisViewItem::set_colors()
{
- /* we cannot be dragging this item when changing colors,
- so reuse set_opacity_for_drag()
- */
- set_opacity_for_drag (false);
- set_frame_color();
+ set_frame_color ();
if (name_highlight) {
name_highlight->set_fill_color (fill_color);
@@ -706,18 +700,38 @@ TimeAxisViewItem::set_name_text_color ()
}
uint32_t
+TimeAxisViewItem::fill_opacity () const
+{
+ if (!rect_visible) {
+ /* if the frame/rect is marked as invisible, then the
+ * fill should be transparent. simplest: set
+
+ * alpha/opacity to zero.
+ */
+ return 0;
+ }
+
+ if (_dragging) {
+ return 130;
+ }
+
+ uint32_t col = ARDOUR_UI::config()->get_canvasvar_FrameBase();
+ return UINT_RGBA_A (col);
+}
+
+uint32_t
TimeAxisViewItem::get_fill_color () const
{
uint32_t f;
uint32_t o;
+ o = fill_opacity ();
+
if (_selected) {
f = ARDOUR_UI::config()->get_canvasvar_SelectedFrameBase();
- if (fill_opacity != 0) {
- o = fill_opacity;
- } else {
+ if (o == 0) {
/* some condition of this item has set fill opacity to
* zero, but it has been selected, so use a mid-way
* alpha value to make it reasonably visible.
@@ -732,23 +746,10 @@ TimeAxisViewItem::get_fill_color () const
} else {
if ((!Config->get_show_name_highlight() || high_enough_for_name) && !ARDOUR_UI::config()->get_color_regions_using_track_color()) {
f = ARDOUR_UI::config()->get_canvasvar_FrameBase();
- /* use the opacity as set for the FrameBase color */
- o = UINT_RGBA_A (f);
} else {
f = fill_color;
- o = fill_opacity;
}
}
-
- /* tweak opacity */
-
- if (!rect_visible) {
- /* if the frame/rect is marked as invisible, then the
- * fill should be transparent. simplest: set
- * alpha/opacity to zero.
- */
- o = 0;
- }
}
return UINT_RGBA_CHANGE_A (f, o);
@@ -786,22 +787,6 @@ TimeAxisViewItem::set_frame_color()
}
void
-TimeAxisViewItem::set_opacity_for_drag (bool drag_starting)
-{
- if (drag_starting) {
- fill_opacity = 130;
- } else {
- /* use the alpha/opacity value from the basic color, no matter whether
- we use the color of our time axis or not.
- */
-
- uint32_t col = ARDOUR_UI::config()->get_canvasvar_FrameBase();
- fill_opacity = UINT_RGBA_A (col);
- }
- set_frame_color ();
-}
-
-void
TimeAxisViewItem::set_frame_gradient ()
{
if (ARDOUR_UI::config()->get_timeline_item_gradient_depth() == 0.0) {
@@ -1017,3 +1002,17 @@ TimeAxisViewItem::parameter_changed (string p)
set_frame_gradient ();
}
}
+
+void
+TimeAxisViewItem::drag_start ()
+{
+ _dragging = true;
+ set_frame_color ();
+}
+
+void
+TimeAxisViewItem::drag_end ()
+{
+ _dragging = false;
+ set_frame_color ();
+}
diff --git a/gtk2_ardour/time_axis_view_item.h b/gtk2_ardour/time_axis_view_item.h
index 9e8651fa39..3536baa222 100644
--- a/gtk2_ardour/time_axis_view_item.h
+++ b/gtk2_ardour/time_axis_view_item.h
@@ -74,7 +74,6 @@ class TimeAxisViewItem : public Selectable, public PBD::ScopedConnectionList
void set_y (double);
void set_color (uint32_t);
void set_name_text_color ();
- void set_opacity_for_drag (bool drag_starting);
uint32_t get_fill_color () const;
@@ -86,8 +85,8 @@ class TimeAxisViewItem : public Selectable, public PBD::ScopedConnectionList
double get_samples_per_pixel () const;
- virtual void drag_start() { _dragging = true; }
- virtual void drag_end() { _dragging = false; }
+ virtual void drag_start();
+ virtual void drag_end();
bool dragging() const { return _dragging; }
virtual void raise () { return; }
@@ -230,9 +229,9 @@ class TimeAxisViewItem : public Selectable, public PBD::ScopedConnectionList
/** true if a small vestigial rect should be shown when the item gets very narrow */
bool show_vestigial;
- uint32_t fill_opacity;
uint32_t fill_color;
- uint32_t pre_drag_fill_color;
+
+ virtual uint32_t fill_opacity() const;
uint32_t last_item_width;
int name_text_width;