From 034f3dafd7b0610777b87793f795e42009754c12 Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Wed, 28 May 2014 19:12:32 +0200 Subject: [PATCH] Revert "cairo sub-surface prototype & example This reverts commit c57fcde78cc0fb393fb7420f1edbc71edf572bd0. and also commit f1f8f89fcb9312065a818233dff4a3f1871fa7fe. --- gtk2_ardour/audio_region_view.cc | 11 +-- gtk2_ardour/audio_region_view.h | 3 - libs/canvas/canvas/surface_group.h | 48 ------------ libs/canvas/curve.cc | 8 -- libs/canvas/surface_group.cc | 114 ----------------------------- libs/canvas/wscript | 1 - 6 files changed, 4 insertions(+), 181 deletions(-) delete mode 100644 libs/canvas/canvas/surface_group.h delete mode 100644 libs/canvas/surface_group.cc diff --git a/gtk2_ardour/audio_region_view.cc b/gtk2_ardour/audio_region_view.cc index b85706ec4b..da07c9f324 100644 --- a/gtk2_ardour/audio_region_view.cc +++ b/gtk2_ardour/audio_region_view.cc @@ -91,7 +91,6 @@ AudioRegionView::AudioRegionView (ArdourCanvas::Group *parent, RouteTimeAxisView , _end_xfade_visible (false) , _amplitude_above_axis(1.0) , fade_color(0) - , curve_surface(new ArdourCanvas::SurfaceGroup(group)) { Config->ParameterChanged.connect (*this, invalidator (*this), boost::bind (&AudioRegionView::parameter_changed, this, _1), gui_context()); } @@ -112,7 +111,6 @@ AudioRegionView::AudioRegionView (ArdourCanvas::Group *parent, RouteTimeAxisView , _end_xfade_visible (false) , _amplitude_above_axis(1.0) , fade_color(0) - , curve_surface(new ArdourCanvas::SurfaceGroup(group)) { Config->ParameterChanged.connect (*this, invalidator (*this), boost::bind (&AudioRegionView::parameter_changed, this, _1), gui_context()); } @@ -131,7 +129,6 @@ AudioRegionView::AudioRegionView (const AudioRegionView& other, boost::shared_pt , _end_xfade_visible (false) , _amplitude_above_axis (other._amplitude_above_axis) , fade_color(0) - , curve_surface(new ArdourCanvas::SurfaceGroup(group)) { Gdk::Color c; int r,g,b,a; @@ -693,7 +690,7 @@ AudioRegionView::redraw_start_xfade_to (boost::shared_ptr ar, frame } if (!start_xfade_out) { - start_xfade_out = new ArdourCanvas::Curve (curve_surface); + start_xfade_out = new ArdourCanvas::Curve (group); CANVAS_DEBUG_NAME (start_xfade_out, string_compose ("xfade start out line for %1", region()->name())); start_xfade_out->set_fill_color (UINT_RGBA_CHANGE_A (ARDOUR_UI::config()->get_canvasvar_ActiveCrossfade(), 32)); start_xfade_out->set_fill_mode (ArdourCanvas::Curve::Inside); @@ -703,7 +700,7 @@ AudioRegionView::redraw_start_xfade_to (boost::shared_ptr ar, frame } if (!start_xfade_in) { - start_xfade_in = new ArdourCanvas::Curve (curve_surface); + start_xfade_in = new ArdourCanvas::Curve (group); CANVAS_DEBUG_NAME (start_xfade_in, string_compose ("xfade start in line for %1", region()->name())); start_xfade_in->set_fill_color (UINT_RGBA_CHANGE_A (ARDOUR_UI::config()->get_canvasvar_CrossfadeLine(), 96)); start_xfade_in->set_fill_mode (ArdourCanvas::Curve::Outside); @@ -798,7 +795,7 @@ AudioRegionView::redraw_end_xfade_to (boost::shared_ptr ar, framecn } if (!end_xfade_out) { - end_xfade_out = new ArdourCanvas::Curve (curve_surface); + end_xfade_out = new ArdourCanvas::Curve (group); CANVAS_DEBUG_NAME (end_xfade_out, string_compose ("xfade end out line for %1", region()->name())); end_xfade_out->set_fill_color (UINT_RGBA_CHANGE_A (ARDOUR_UI::config()->get_canvasvar_ActiveCrossfade(), 32)); end_xfade_out->set_fill_mode (ArdourCanvas::Curve::Inside); @@ -808,7 +805,7 @@ AudioRegionView::redraw_end_xfade_to (boost::shared_ptr ar, framecn } if (!end_xfade_in) { - end_xfade_in = new ArdourCanvas::Curve (curve_surface); + end_xfade_in = new ArdourCanvas::Curve (group); CANVAS_DEBUG_NAME (end_xfade_in, string_compose ("xfade end in line for %1", region()->name())); end_xfade_in->set_fill_color (UINT_RGBA_CHANGE_A (ARDOUR_UI::config()->get_canvasvar_CrossfadeLine(), 96)); end_xfade_in->set_fill_mode (ArdourCanvas::Curve::Outside); diff --git a/gtk2_ardour/audio_region_view.h b/gtk2_ardour/audio_region_view.h index 5444b1b569..3c6b675692 100644 --- a/gtk2_ardour/audio_region_view.h +++ b/gtk2_ardour/audio_region_view.h @@ -30,7 +30,6 @@ #include "canvas/fwd.h" #include "canvas/wave_view.h" -#include "canvas/surface_group.h" #include "region_view.h" #include "time_axis_view_item.h" @@ -205,8 +204,6 @@ class AudioRegionView : public RegionView AutomationLine::VisibleAspects automation_line_visibility () const; private: - ArdourCanvas::SurfaceGroup *curve_surface; - void setup_fade_handle_positions (); void parameter_changed (std::string const &); diff --git a/libs/canvas/canvas/surface_group.h b/libs/canvas/canvas/surface_group.h deleted file mode 100644 index 620038a802..0000000000 --- a/libs/canvas/canvas/surface_group.h +++ /dev/null @@ -1,48 +0,0 @@ -/* - Copyright (C) 2011-2013 Paul Davis - Author: Robin Gareus - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -*/ - -#ifndef __CANVAS_SURFACE_GROUP_H__ -#define __CANVAS_SURFACE_GROUP_H__ - -#include -#include - -#include "canvas/visibility.h" -#include "canvas/group.h" - -namespace ArdourCanvas { - -class LIBCANVAS_API SurfaceGroup : public Group -{ -public: - explicit SurfaceGroup (Group *); - explicit SurfaceGroup (Group *, Duple); - ~SurfaceGroup (); - - void render (Rect const &, Cairo::RefPtr) const; - -private: - mutable Duple _surface_position; - mutable Duple _surface_geometry; - mutable Cairo::RefPtr _surface; -}; - -} - -#endif diff --git a/libs/canvas/curve.cc b/libs/canvas/curve.cc index 4f8ac3c125..e5db740d66 100644 --- a/libs/canvas/curve.cc +++ b/libs/canvas/curve.cc @@ -318,10 +318,8 @@ Curve::render (Rect const & area, Cairo::RefPtr context) const window_space = item_to_window (Duple(_points.front().x, draw.height())); context->line_to (window_space.x, window_space.y); context->close_path(); - context->set_operator(Cairo::OPERATOR_SOURCE); setup_fill_context(context); context->fill (); - context->set_operator(Cairo::OPERATOR_OVER); break; case Outside: context->stroke_preserve (); @@ -330,10 +328,8 @@ Curve::render (Rect const & area, Cairo::RefPtr context) const window_space = item_to_window (Duple(_points.front().x, 0.0)); context->line_to (window_space.x, window_space.y); context->close_path(); - context->set_operator(Cairo::OPERATOR_SOURCE); setup_fill_context(context); context->fill (); - context->set_operator(Cairo::OPERATOR_OVER); break; } @@ -407,9 +403,7 @@ Curve::render (Rect const & area, Cairo::RefPtr context) const context->line_to (window_space.x, window_space.y); context->close_path(); setup_fill_context(context); - context->set_operator(Cairo::OPERATOR_SOURCE); context->fill (); - context->set_operator(Cairo::OPERATOR_OVER); break; case Outside: context->stroke_preserve (); @@ -418,10 +412,8 @@ Curve::render (Rect const & area, Cairo::RefPtr context) const window_space = item_to_window (Duple (samples[left].x, 0.0)); context->line_to (window_space.x, window_space.y); context->close_path(); - context->set_operator(Cairo::OPERATOR_SOURCE); setup_fill_context(context); context->fill (); - context->set_operator(Cairo::OPERATOR_OVER); break; } context->restore (); diff --git a/libs/canvas/surface_group.cc b/libs/canvas/surface_group.cc deleted file mode 100644 index 517e8ab1b3..0000000000 --- a/libs/canvas/surface_group.cc +++ /dev/null @@ -1,114 +0,0 @@ -/* - Copyright (C) 2011-2013 Paul Davis - Author: Robin Gareus - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -*/ - -#include -#include - -#include "canvas/surface_group.h" - -using namespace std; -using namespace ArdourCanvas; - -SurfaceGroup::SurfaceGroup (Group* parent) - : Group (parent) - , _surface_position (0,0) - , _surface_geometry (0,0) - , _surface (0) -{ - -} - -SurfaceGroup::SurfaceGroup (Group* parent, Duple position) - : Group (parent, position) - , _surface_geometry (0,0) - , _surface (0) -{ - -} - -SurfaceGroup::~SurfaceGroup () -{ - -} - -void -SurfaceGroup::render (Rect const & area, Cairo::RefPtr context) const -{ - bool re_expose = false; - boost::optional bb = bounding_box (); - - if (bb) { - Duple geo = Duple (bb->width (), bb->height ()); - if (geo != _surface_geometry) { - re_expose = true; -#if 0 // DEBUG - printf ("re allocate surface group %1.f x %.1f @ %1.f x %.1f self: %1.f x %.1f\n", - geo.x, geo.y, bb->x0, bb->y0, _position.x, _position.y); -#endif - if (geo.x > 32768 || geo.y > 32768) { - // TODO allocate N surfaces, render at offset and stitch them together. - // OR use one surfacen and re-expose child items when offset changes - return; - } - - _surface = Cairo::ImageSurface::create (Cairo::FORMAT_ARGB32, geo.x, geo.y); - _surface_geometry = geo; - _surface_position = Duple (bb->x0, bb->y0); - } - } - - if (!_surface) return; - - Rect a (0, 0, _surface_geometry.x, _surface_geometry.y); - - if (!re_expose) { - Duple tmp_p0 = window_to_item (Duple (area.x0, area.y0)); - Duple tmp_p1 = window_to_item (Duple (area.x1, area.y1)); - Rect wa (tmp_p0.x, tmp_p0.y, tmp_p1.x, tmp_p1.y); - boost::optional d = a.intersection (wa); - assert (d); - a = d.get (); - } - - Duple window_space; - window_space = item_to_window (Duple (_position.x + _surface_position.x, _position.y + _surface_position.y)); - Cairo::RefPtr cr = Cairo::Context::create (_surface); - -#if 1 // clear surface, needed if any content is semi-transparent - cr->save (); - cr->set_operator (Cairo::OPERATOR_CLEAR); - cr->rectangle (a.x0, a.y0, a.x1, a.y1); - cr->fill (); - cr->restore (); -#endif - -#if 0 // DEBUG - printf ("EXPOSE: %1.f x %.1f -> %1.f x %.1f\n", a.x0, a.y0, a.x1, a.y1); - Rect dbg = item_to_window (a); - printf ("RENDER: %1.f x %.1f -> %1.f x %.1f WS: %1.f x %.1f \n", - dbg.x0, dbg.y0, dbg.x1, dbg.y1, window_space.x, -window_space.y); -#endif - - cr->translate (-window_space.x, -window_space.y); - - Group::render (item_to_window (a), cr); - - context->set_source (_surface, window_space.x, window_space.y); - context->paint (); -} diff --git a/libs/canvas/wscript b/libs/canvas/wscript index 3121cc4657..0c5192645c 100644 --- a/libs/canvas/wscript +++ b/libs/canvas/wscript @@ -51,7 +51,6 @@ canvas_sources = [ 'rectangle.cc', 'root_group.cc', 'stateful_image.cc', - 'surface_group.cc', 'text.cc', 'types.cc', 'utils.cc',