mirror of
https://github.com/Ardour/ardour.git
synced 2025-12-18 20:56:28 +01:00
Merge branch 'canvasredesign' into cairocanvas
This commit is contained in:
commit
ff46a3c3a2
102 changed files with 608 additions and 800 deletions
|
|
@ -75,7 +75,7 @@ using namespace ArdourCanvas;
|
||||||
static const int32_t sync_mark_width = 9;
|
static const int32_t sync_mark_width = 9;
|
||||||
static double const handle_size = 10; /* height of fade handles */
|
static double const handle_size = 10; /* height of fade handles */
|
||||||
|
|
||||||
AudioRegionView::AudioRegionView (ArdourCanvas::Group *parent, RouteTimeAxisView &tv, boost::shared_ptr<AudioRegion> r, double spu,
|
AudioRegionView::AudioRegionView (ArdourCanvas::Layout *parent, RouteTimeAxisView &tv, boost::shared_ptr<AudioRegion> r, double spu,
|
||||||
uint32_t basic_color)
|
uint32_t basic_color)
|
||||||
: RegionView (parent, tv, r, spu, basic_color)
|
: RegionView (parent, tv, r, spu, basic_color)
|
||||||
, sync_mark(0)
|
, sync_mark(0)
|
||||||
|
|
@ -96,7 +96,7 @@ AudioRegionView::AudioRegionView (ArdourCanvas::Group *parent, RouteTimeAxisView
|
||||||
Config->ParameterChanged.connect (*this, invalidator (*this), boost::bind (&AudioRegionView::parameter_changed, this, _1), gui_context());
|
Config->ParameterChanged.connect (*this, invalidator (*this), boost::bind (&AudioRegionView::parameter_changed, this, _1), gui_context());
|
||||||
}
|
}
|
||||||
|
|
||||||
AudioRegionView::AudioRegionView (ArdourCanvas::Group *parent, RouteTimeAxisView &tv, boost::shared_ptr<AudioRegion> r, double spu,
|
AudioRegionView::AudioRegionView (ArdourCanvas::Layout *parent, RouteTimeAxisView &tv, boost::shared_ptr<AudioRegion> r, double spu,
|
||||||
uint32_t basic_color, bool recording, TimeAxisViewItem::Visibility visibility)
|
uint32_t basic_color, bool recording, TimeAxisViewItem::Visibility visibility)
|
||||||
: RegionView (parent, tv, r, spu, basic_color, recording, visibility)
|
: RegionView (parent, tv, r, spu, basic_color, recording, visibility)
|
||||||
, sync_mark(0)
|
, sync_mark(0)
|
||||||
|
|
|
||||||
|
|
@ -51,13 +51,13 @@ class RouteTimeAxisView;
|
||||||
class AudioRegionView : public RegionView
|
class AudioRegionView : public RegionView
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
AudioRegionView (ArdourCanvas::Group *,
|
AudioRegionView (ArdourCanvas::Layout *,
|
||||||
RouteTimeAxisView&,
|
RouteTimeAxisView&,
|
||||||
boost::shared_ptr<ARDOUR::AudioRegion>,
|
boost::shared_ptr<ARDOUR::AudioRegion>,
|
||||||
double initial_samples_per_pixel,
|
double initial_samples_per_pixel,
|
||||||
uint32_t base_color);
|
uint32_t base_color);
|
||||||
|
|
||||||
AudioRegionView (ArdourCanvas::Group *,
|
AudioRegionView (ArdourCanvas::Layout *,
|
||||||
RouteTimeAxisView&,
|
RouteTimeAxisView&,
|
||||||
boost::shared_ptr<ARDOUR::AudioRegion>,
|
boost::shared_ptr<ARDOUR::AudioRegion>,
|
||||||
double samples_per_pixel,
|
double samples_per_pixel,
|
||||||
|
|
|
||||||
|
|
@ -70,7 +70,7 @@ using namespace Editing;
|
||||||
/** @param converter A TimeConverter whose origin_b is the start time of the AutomationList in session frames.
|
/** @param converter A TimeConverter whose origin_b is the start time of the AutomationList in session frames.
|
||||||
* This will not be deleted by AutomationLine.
|
* This will not be deleted by AutomationLine.
|
||||||
*/
|
*/
|
||||||
AutomationLine::AutomationLine (const string& name, TimeAxisView& tv, ArdourCanvas::Group& parent,
|
AutomationLine::AutomationLine (const string& name, TimeAxisView& tv, ArdourCanvas::Item& parent,
|
||||||
boost::shared_ptr<AutomationList> al,
|
boost::shared_ptr<AutomationList> al,
|
||||||
Evoral::TimeConverter<double, framepos_t>* converter)
|
Evoral::TimeConverter<double, framepos_t>* converter)
|
||||||
: trackview (tv)
|
: trackview (tv)
|
||||||
|
|
@ -99,7 +99,7 @@ AutomationLine::AutomationLine (const string& name, TimeAxisView& tv, ArdourCanv
|
||||||
terminal_points_can_slide = true;
|
terminal_points_can_slide = true;
|
||||||
_height = 0;
|
_height = 0;
|
||||||
|
|
||||||
group = new ArdourCanvas::Group (&parent);
|
group = new ArdourCanvas::Layout (&parent);
|
||||||
CANVAS_DEBUG_NAME (group, "region gain envelope group");
|
CANVAS_DEBUG_NAME (group, "region gain envelope group");
|
||||||
|
|
||||||
line = new ArdourCanvas::PolyLine (group);
|
line = new ArdourCanvas::PolyLine (group);
|
||||||
|
|
|
||||||
|
|
@ -37,7 +37,7 @@
|
||||||
#include "ardour/types.h"
|
#include "ardour/types.h"
|
||||||
|
|
||||||
#include "canvas/types.h"
|
#include "canvas/types.h"
|
||||||
#include "canvas/group.h"
|
#include "canvas/layout.h"
|
||||||
#include "canvas/poly_line.h"
|
#include "canvas/poly_line.h"
|
||||||
|
|
||||||
class AutomationLine;
|
class AutomationLine;
|
||||||
|
|
@ -60,7 +60,7 @@ public:
|
||||||
SelectedControlPoints = 0x4
|
SelectedControlPoints = 0x4
|
||||||
};
|
};
|
||||||
|
|
||||||
AutomationLine (const std::string& name, TimeAxisView&, ArdourCanvas::Group&,
|
AutomationLine (const std::string& name, TimeAxisView&, ArdourCanvas::Item&,
|
||||||
boost::shared_ptr<ARDOUR::AutomationList>,
|
boost::shared_ptr<ARDOUR::AutomationList>,
|
||||||
Evoral::TimeConverter<double, ARDOUR::framepos_t>* converter = 0);
|
Evoral::TimeConverter<double, ARDOUR::framepos_t>* converter = 0);
|
||||||
virtual ~AutomationLine ();
|
virtual ~AutomationLine ();
|
||||||
|
|
@ -105,7 +105,7 @@ public:
|
||||||
|
|
||||||
TimeAxisView& trackview;
|
TimeAxisView& trackview;
|
||||||
|
|
||||||
ArdourCanvas::Group& canvas_group() const { return *group; }
|
ArdourCanvas::Layout& canvas_group() const { return *group; }
|
||||||
ArdourCanvas::Item& parent_group() const { return _parent_group; }
|
ArdourCanvas::Item& parent_group() const { return _parent_group; }
|
||||||
ArdourCanvas::Item& grab_item() const { return *line; }
|
ArdourCanvas::Item& grab_item() const { return *line; }
|
||||||
|
|
||||||
|
|
@ -173,8 +173,8 @@ protected:
|
||||||
/** true if we did a push at any point during the current drag */
|
/** true if we did a push at any point during the current drag */
|
||||||
bool did_push;
|
bool did_push;
|
||||||
|
|
||||||
ArdourCanvas::Group& _parent_group;
|
ArdourCanvas::Item& _parent_group;
|
||||||
ArdourCanvas::Group* group;
|
ArdourCanvas::Layout* group;
|
||||||
ArdourCanvas::PolyLine* line; /* line */
|
ArdourCanvas::PolyLine* line; /* line */
|
||||||
ArdourCanvas::Points line_points; /* coordinates for canvas line */
|
ArdourCanvas::Points line_points; /* coordinates for canvas line */
|
||||||
std::vector<ControlPoint*> control_points; /* visible control points */
|
std::vector<ControlPoint*> control_points; /* visible control points */
|
||||||
|
|
|
||||||
|
|
@ -39,7 +39,7 @@
|
||||||
|
|
||||||
#include "i18n.h"
|
#include "i18n.h"
|
||||||
|
|
||||||
AutomationRegionView::AutomationRegionView (ArdourCanvas::Group* parent,
|
AutomationRegionView::AutomationRegionView (ArdourCanvas::Layout* parent,
|
||||||
AutomationTimeAxisView& time_axis,
|
AutomationTimeAxisView& time_axis,
|
||||||
boost::shared_ptr<ARDOUR::Region> region,
|
boost::shared_ptr<ARDOUR::Region> region,
|
||||||
const Evoral::Parameter& param,
|
const Evoral::Parameter& param,
|
||||||
|
|
|
||||||
|
|
@ -37,7 +37,7 @@ class TimeAxisView;
|
||||||
class AutomationRegionView : public RegionView
|
class AutomationRegionView : public RegionView
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
AutomationRegionView(ArdourCanvas::Group*,
|
AutomationRegionView(ArdourCanvas::Layout*,
|
||||||
AutomationTimeAxisView&,
|
AutomationTimeAxisView&,
|
||||||
boost::shared_ptr<ARDOUR::Region>,
|
boost::shared_ptr<ARDOUR::Region>,
|
||||||
const Evoral::Parameter& parameter,
|
const Evoral::Parameter& parameter,
|
||||||
|
|
|
||||||
|
|
@ -36,7 +36,7 @@ namespace ArdourCanvas {
|
||||||
class CrossfadeView : public TimeAxisViewItem
|
class CrossfadeView : public TimeAxisViewItem
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
CrossfadeView (ArdourCanvas::Group*,
|
CrossfadeView (ArdourCanvas::Layout*,
|
||||||
RouteTimeAxisView&,
|
RouteTimeAxisView&,
|
||||||
boost::shared_ptr<ARDOUR::Crossfade>,
|
boost::shared_ptr<ARDOUR::Crossfade>,
|
||||||
double initial_samples_per_pixel,
|
double initial_samples_per_pixel,
|
||||||
|
|
|
||||||
|
|
@ -451,10 +451,10 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD
|
||||||
_stepping_axis_view = v;
|
_stepping_axis_view = v;
|
||||||
}
|
}
|
||||||
|
|
||||||
ArdourCanvas::Group* get_trackview_group () const { return _trackview_group; }
|
ArdourCanvas::Layout* get_trackview_group () const { return _trackview_group; }
|
||||||
ArdourCanvas::Group* get_hscroll_group () const { return h_scroll_group; }
|
ArdourCanvas::ScrollGroup* get_hscroll_group () const { return h_scroll_group; }
|
||||||
ArdourCanvas::Group* get_vscroll_group () const { return v_scroll_group; }
|
ArdourCanvas::ScrollGroup* get_vscroll_group () const { return v_scroll_group; }
|
||||||
ArdourCanvas::Group* get_hvscroll_group () const { return hv_scroll_group; }
|
ArdourCanvas::ScrollGroup* get_hvscroll_group () const { return hv_scroll_group; }
|
||||||
|
|
||||||
ArdourCanvas::GtkCanvasViewport* get_track_canvas () const;
|
ArdourCanvas::GtkCanvasViewport* get_track_canvas () const;
|
||||||
|
|
||||||
|
|
@ -560,7 +560,7 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD
|
||||||
void refresh_location_display ();
|
void refresh_location_display ();
|
||||||
void refresh_location_display_internal (ARDOUR::Locations::LocationList&);
|
void refresh_location_display_internal (ARDOUR::Locations::LocationList&);
|
||||||
void add_new_location (ARDOUR::Location *);
|
void add_new_location (ARDOUR::Location *);
|
||||||
ArdourCanvas::Group* add_new_location_internal (ARDOUR::Location *);
|
ArdourCanvas::Layout* add_new_location_internal (ARDOUR::Location *);
|
||||||
void location_gone (ARDOUR::Location *);
|
void location_gone (ARDOUR::Location *);
|
||||||
void remove_marker (ArdourCanvas::Item&, GdkEvent*);
|
void remove_marker (ArdourCanvas::Item&, GdkEvent*);
|
||||||
gint really_remove_marker (ARDOUR::Location* loc);
|
gint really_remove_marker (ARDOUR::Location* loc);
|
||||||
|
|
@ -606,7 +606,7 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD
|
||||||
LocationMarkerMap location_markers;
|
LocationMarkerMap location_markers;
|
||||||
|
|
||||||
void update_marker_labels ();
|
void update_marker_labels ();
|
||||||
void update_marker_labels (ArdourCanvas::Group *);
|
void update_marker_labels (ArdourCanvas::Layout *);
|
||||||
void check_marker_label (Marker *);
|
void check_marker_label (Marker *);
|
||||||
|
|
||||||
/** A set of lists of Markers that are in each of the canvas groups
|
/** A set of lists of Markers that are in each of the canvas groups
|
||||||
|
|
@ -615,7 +615,7 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD
|
||||||
* a marker has moved we can decide whether we need to update the labels
|
* a marker has moved we can decide whether we need to update the labels
|
||||||
* for all markers or for just a few.
|
* for all markers or for just a few.
|
||||||
*/
|
*/
|
||||||
std::map<ArdourCanvas::Group *, std::list<Marker *> > _sorted_marker_lists;
|
std::map<ArdourCanvas::Layout *, std::list<Marker *> > _sorted_marker_lists;
|
||||||
void remove_sorted_marker (Marker *);
|
void remove_sorted_marker (Marker *);
|
||||||
|
|
||||||
void hide_marker (ArdourCanvas::Item*, GdkEvent*);
|
void hide_marker (ArdourCanvas::Item*, GdkEvent*);
|
||||||
|
|
@ -729,42 +729,42 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD
|
||||||
ArdourCanvas::Pixbuf *logo_item;
|
ArdourCanvas::Pixbuf *logo_item;
|
||||||
#if 0
|
#if 0
|
||||||
/* these will be needed when we have canvas rulers */
|
/* these will be needed when we have canvas rulers */
|
||||||
ArdourCanvas::Group *minsec_group;
|
ArdourCanvas::Layout *minsec_group;
|
||||||
ArdourCanvas::Group *bbt_group;
|
ArdourCanvas::Layout *bbt_group;
|
||||||
ArdourCanvas::Group *timecode_group;
|
ArdourCanvas::Layout *timecode_group;
|
||||||
ArdourCanvas::Group *frame_group;
|
ArdourCanvas::Layout *frame_group;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
ArdourCanvas::Group *tempo_group;
|
ArdourCanvas::Layout *tempo_group;
|
||||||
ArdourCanvas::Group *meter_group;
|
ArdourCanvas::Layout *meter_group;
|
||||||
ArdourCanvas::Group *marker_group;
|
ArdourCanvas::Layout *marker_group;
|
||||||
ArdourCanvas::Group *range_marker_group;
|
ArdourCanvas::Layout *range_marker_group;
|
||||||
ArdourCanvas::Group *transport_marker_group;
|
ArdourCanvas::Layout *transport_marker_group;
|
||||||
ArdourCanvas::Group* cd_marker_group;
|
ArdourCanvas::Layout* cd_marker_group;
|
||||||
|
|
||||||
/* parent for groups which themselves contain time markers */
|
/* parent for groups which themselves contain time markers */
|
||||||
ArdourCanvas::Group* _time_markers_group;
|
ArdourCanvas::Layout* _time_markers_group;
|
||||||
|
|
||||||
/* The group containing all other groups that are scrolled vertically
|
/* The group containing all other groups that are scrolled vertically
|
||||||
and horizontally.
|
and horizontally.
|
||||||
*/
|
*/
|
||||||
ArdourCanvas::Group* hv_scroll_group;
|
ArdourCanvas::ScrollGroup* hv_scroll_group;
|
||||||
|
|
||||||
/* The group containing all other groups that are scrolled vertically ONLY
|
/* The group containing all other groups that are scrolled vertically ONLY
|
||||||
*/
|
*/
|
||||||
ArdourCanvas::Group* v_scroll_group;
|
ArdourCanvas::ScrollGroup* v_scroll_group;
|
||||||
|
|
||||||
/* The group containing all other groups that are scrolled horizontally ONLY
|
/* The group containing all other groups that are scrolled horizontally ONLY
|
||||||
*/
|
*/
|
||||||
ArdourCanvas::Group* h_scroll_group;
|
ArdourCanvas::ScrollGroup* h_scroll_group;
|
||||||
|
|
||||||
/* The group containing all trackviews. */
|
/* The group containing all trackviews. */
|
||||||
ArdourCanvas::Group* _trackview_group;
|
ArdourCanvas::Layout* _trackview_group;
|
||||||
|
|
||||||
/* The group holding things (mostly regions) while dragging so they
|
/* The group holding things (mostly regions) while dragging so they
|
||||||
* are on top of everything else
|
* are on top of everything else
|
||||||
*/
|
*/
|
||||||
ArdourCanvas::Group* _drag_motion_group;
|
ArdourCanvas::Layout* _drag_motion_group;
|
||||||
|
|
||||||
/* a rect that sits at the bottom of all tracks to act as a drag-no-drop/clickable
|
/* a rect that sits at the bottom of all tracks to act as a drag-no-drop/clickable
|
||||||
* target area.
|
* target area.
|
||||||
|
|
@ -898,7 +898,7 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD
|
||||||
|
|
||||||
/* videtimline related actions */
|
/* videtimline related actions */
|
||||||
Gtk::Label videotl_label;
|
Gtk::Label videotl_label;
|
||||||
ArdourCanvas::Group* videotl_group;
|
ArdourCanvas::Layout* videotl_group;
|
||||||
Glib::RefPtr<Gtk::ToggleAction> ruler_video_action;
|
Glib::RefPtr<Gtk::ToggleAction> ruler_video_action;
|
||||||
Glib::RefPtr<Gtk::ToggleAction> xjadeo_proc_action;
|
Glib::RefPtr<Gtk::ToggleAction> xjadeo_proc_action;
|
||||||
Glib::RefPtr<Gtk::ToggleAction> xjadeo_ontop_action;
|
Glib::RefPtr<Gtk::ToggleAction> xjadeo_ontop_action;
|
||||||
|
|
@ -1478,8 +1478,8 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD
|
||||||
|
|
||||||
TempoLines* tempo_lines;
|
TempoLines* tempo_lines;
|
||||||
|
|
||||||
ArdourCanvas::Group* global_rect_group;
|
ArdourCanvas::Layout* global_rect_group;
|
||||||
ArdourCanvas::Group* time_line_group;
|
ArdourCanvas::Layout* time_line_group;
|
||||||
|
|
||||||
void hide_measures ();
|
void hide_measures ();
|
||||||
void draw_measures (ARDOUR::TempoMap::BBTPointList::const_iterator& begin,
|
void draw_measures (ARDOUR::TempoMap::BBTPointList::const_iterator& begin,
|
||||||
|
|
|
||||||
|
|
@ -101,7 +101,7 @@ Editor::initialize_canvas ()
|
||||||
}
|
}
|
||||||
|
|
||||||
/*a group to hold global rects like punch/loop indicators */
|
/*a group to hold global rects like punch/loop indicators */
|
||||||
global_rect_group = new ArdourCanvas::Group (hv_scroll_group);
|
global_rect_group = new ArdourCanvas::Layout (hv_scroll_group);
|
||||||
CANVAS_DEBUG_NAME (global_rect_group, "global rect group");
|
CANVAS_DEBUG_NAME (global_rect_group, "global rect group");
|
||||||
|
|
||||||
transport_loop_range_rect = new ArdourCanvas::Rectangle (global_rect_group, ArdourCanvas::Rect (0.0, 0.0, 0.0, ArdourCanvas::COORD_MAX));
|
transport_loop_range_rect = new ArdourCanvas::Rectangle (global_rect_group, ArdourCanvas::Rect (0.0, 0.0, 0.0, ArdourCanvas::COORD_MAX));
|
||||||
|
|
@ -113,10 +113,10 @@ Editor::initialize_canvas ()
|
||||||
transport_punch_range_rect->hide();
|
transport_punch_range_rect->hide();
|
||||||
|
|
||||||
/*a group to hold time (measure) lines */
|
/*a group to hold time (measure) lines */
|
||||||
time_line_group = new ArdourCanvas::Group (hv_scroll_group);
|
time_line_group = new ArdourCanvas::Layout (hv_scroll_group);
|
||||||
CANVAS_DEBUG_NAME (time_line_group, "time line group");
|
CANVAS_DEBUG_NAME (time_line_group, "time line group");
|
||||||
|
|
||||||
_trackview_group = new ArdourCanvas::Group (hv_scroll_group);
|
_trackview_group = new ArdourCanvas::Layout (hv_scroll_group);
|
||||||
CANVAS_DEBUG_NAME (_trackview_group, "Canvas TrackViews");
|
CANVAS_DEBUG_NAME (_trackview_group, "Canvas TrackViews");
|
||||||
|
|
||||||
// used to show zoom mode active zooming
|
// used to show zoom mode active zooming
|
||||||
|
|
@ -131,30 +131,30 @@ Editor::initialize_canvas ()
|
||||||
/* a group to hold stuff while it gets dragged around. Must be the
|
/* a group to hold stuff while it gets dragged around. Must be the
|
||||||
* uppermost (last) group with hv_scroll_group as a parent
|
* uppermost (last) group with hv_scroll_group as a parent
|
||||||
*/
|
*/
|
||||||
_drag_motion_group = new ArdourCanvas::Group (hv_scroll_group);
|
_drag_motion_group = new ArdourCanvas::Layout (hv_scroll_group);
|
||||||
CANVAS_DEBUG_NAME (_drag_motion_group, "Canvas Drag Motion");
|
CANVAS_DEBUG_NAME (_drag_motion_group, "Canvas Drag Motion");
|
||||||
|
|
||||||
/* TIME BAR CANVAS */
|
/* TIME BAR CANVAS */
|
||||||
|
|
||||||
_time_markers_group = new ArdourCanvas::Group (h_scroll_group);
|
_time_markers_group = new ArdourCanvas::Layout (h_scroll_group);
|
||||||
CANVAS_DEBUG_NAME (_time_markers_group, "time bars");
|
CANVAS_DEBUG_NAME (_time_markers_group, "time bars");
|
||||||
|
|
||||||
cd_marker_group = new ArdourCanvas::Group (_time_markers_group, ArdourCanvas::Duple (0.0, 0.0));
|
cd_marker_group = new ArdourCanvas::Layout (_time_markers_group, ArdourCanvas::Duple (0.0, 0.0));
|
||||||
CANVAS_DEBUG_NAME (cd_marker_group, "cd marker group");
|
CANVAS_DEBUG_NAME (cd_marker_group, "cd marker group");
|
||||||
/* the vide is temporarily placed a the same location as the
|
/* the vide is temporarily placed a the same location as the
|
||||||
cd_marker_group, but is moved later.
|
cd_marker_group, but is moved later.
|
||||||
*/
|
*/
|
||||||
videotl_group = new ArdourCanvas::Group (_time_markers_group, ArdourCanvas::Duple(0.0, 0.0));
|
videotl_group = new ArdourCanvas::Layout (_time_markers_group, ArdourCanvas::Duple(0.0, 0.0));
|
||||||
CANVAS_DEBUG_NAME (videotl_group, "videotl group");
|
CANVAS_DEBUG_NAME (videotl_group, "videotl group");
|
||||||
marker_group = new ArdourCanvas::Group (_time_markers_group, ArdourCanvas::Duple (0.0, timebar_height + 1.0));
|
marker_group = new ArdourCanvas::Layout (_time_markers_group, ArdourCanvas::Duple (0.0, timebar_height + 1.0));
|
||||||
CANVAS_DEBUG_NAME (marker_group, "marker group");
|
CANVAS_DEBUG_NAME (marker_group, "marker group");
|
||||||
transport_marker_group = new ArdourCanvas::Group (_time_markers_group, ArdourCanvas::Duple (0.0, (timebar_height * 2.0) + 1.0));
|
transport_marker_group = new ArdourCanvas::Layout (_time_markers_group, ArdourCanvas::Duple (0.0, (timebar_height * 2.0) + 1.0));
|
||||||
CANVAS_DEBUG_NAME (transport_marker_group, "transport marker group");
|
CANVAS_DEBUG_NAME (transport_marker_group, "transport marker group");
|
||||||
range_marker_group = new ArdourCanvas::Group (_time_markers_group, ArdourCanvas::Duple (0.0, (timebar_height * 3.0) + 1.0));
|
range_marker_group = new ArdourCanvas::Layout (_time_markers_group, ArdourCanvas::Duple (0.0, (timebar_height * 3.0) + 1.0));
|
||||||
CANVAS_DEBUG_NAME (range_marker_group, "range marker group");
|
CANVAS_DEBUG_NAME (range_marker_group, "range marker group");
|
||||||
tempo_group = new ArdourCanvas::Group (_time_markers_group, ArdourCanvas::Duple (0.0, (timebar_height * 4.0) + 1.0));
|
tempo_group = new ArdourCanvas::Layout (_time_markers_group, ArdourCanvas::Duple (0.0, (timebar_height * 4.0) + 1.0));
|
||||||
CANVAS_DEBUG_NAME (tempo_group, "tempo group");
|
CANVAS_DEBUG_NAME (tempo_group, "tempo group");
|
||||||
meter_group = new ArdourCanvas::Group (_time_markers_group, ArdourCanvas::Duple (0.0, (timebar_height * 5.0) + 1.0));
|
meter_group = new ArdourCanvas::Layout (_time_markers_group, ArdourCanvas::Duple (0.0, (timebar_height * 5.0) + 1.0));
|
||||||
CANVAS_DEBUG_NAME (meter_group, "meter group");
|
CANVAS_DEBUG_NAME (meter_group, "meter group");
|
||||||
|
|
||||||
meter_bar = new ArdourCanvas::Rectangle (meter_group, ArdourCanvas::Rect (0.0, 0.0, ArdourCanvas::COORD_MAX, timebar_height));
|
meter_bar = new ArdourCanvas::Rectangle (meter_group, ArdourCanvas::Rect (0.0, 0.0, ArdourCanvas::COORD_MAX, timebar_height));
|
||||||
|
|
|
||||||
|
|
@ -22,6 +22,7 @@
|
||||||
|
|
||||||
#include "canvas/canvas.h"
|
#include "canvas/canvas.h"
|
||||||
#include "canvas/debug.h"
|
#include "canvas/debug.h"
|
||||||
|
#include "canvas/scroll_group.h"
|
||||||
|
|
||||||
#include "utils.h"
|
#include "utils.h"
|
||||||
#include "editor_cursors.h"
|
#include "editor_cursors.h"
|
||||||
|
|
|
||||||
|
|
@ -737,7 +737,7 @@ RegionMotionDrag::motion (GdkEvent* event, bool first_move)
|
||||||
* others
|
* others
|
||||||
*/
|
*/
|
||||||
|
|
||||||
ArdourCanvas::Group* rvg = rv->get_canvas_group();
|
ArdourCanvas::Item* rvg = rv->get_canvas_group();
|
||||||
Duple rv_canvas_offset = rvg->parent()->canvas_origin ();
|
Duple rv_canvas_offset = rvg->parent()->canvas_origin ();
|
||||||
Duple dmg_canvas_offset = _editor->_drag_motion_group->canvas_origin ();
|
Duple dmg_canvas_offset = _editor->_drag_motion_group->canvas_origin ();
|
||||||
rv->get_canvas_group()->reparent (_editor->_drag_motion_group);
|
rv->get_canvas_group()->reparent (_editor->_drag_motion_group);
|
||||||
|
|
|
||||||
|
|
@ -64,7 +64,7 @@ Editor::add_new_location (Location *location)
|
||||||
{
|
{
|
||||||
ENSURE_GUI_THREAD (*this, &Editor::add_new_location, location);
|
ENSURE_GUI_THREAD (*this, &Editor::add_new_location, location);
|
||||||
|
|
||||||
ArdourCanvas::Group* group = add_new_location_internal (location);
|
ArdourCanvas::Layout* group = add_new_location_internal (location);
|
||||||
|
|
||||||
/* Do a full update of the markers in this group */
|
/* Do a full update of the markers in this group */
|
||||||
update_marker_labels (group);
|
update_marker_labels (group);
|
||||||
|
|
@ -82,14 +82,14 @@ Editor::add_new_location (Location *location)
|
||||||
* the caller must call update_marker_labels () after calling this.
|
* the caller must call update_marker_labels () after calling this.
|
||||||
* @return canvas group that the location's marker was added to.
|
* @return canvas group that the location's marker was added to.
|
||||||
*/
|
*/
|
||||||
ArdourCanvas::Group*
|
ArdourCanvas::Layout*
|
||||||
Editor::add_new_location_internal (Location* location)
|
Editor::add_new_location_internal (Location* location)
|
||||||
{
|
{
|
||||||
LocationMarkers *lam = new LocationMarkers;
|
LocationMarkers *lam = new LocationMarkers;
|
||||||
uint32_t color;
|
uint32_t color;
|
||||||
|
|
||||||
/* make a note here of which group this marker ends up in */
|
/* make a note here of which group this marker ends up in */
|
||||||
ArdourCanvas::Group* group = 0;
|
ArdourCanvas::Layout* group = 0;
|
||||||
|
|
||||||
if (location->is_cd_marker()) {
|
if (location->is_cd_marker()) {
|
||||||
color = location_cd_marker_color;
|
color = location_cd_marker_color;
|
||||||
|
|
@ -311,14 +311,14 @@ struct MarkerComparator {
|
||||||
void
|
void
|
||||||
Editor::update_marker_labels ()
|
Editor::update_marker_labels ()
|
||||||
{
|
{
|
||||||
for (std::map<ArdourCanvas::Group *, std::list<Marker *> >::iterator i = _sorted_marker_lists.begin(); i != _sorted_marker_lists.end(); ++i) {
|
for (std::map<ArdourCanvas::Layout *, std::list<Marker *> >::iterator i = _sorted_marker_lists.begin(); i != _sorted_marker_lists.end(); ++i) {
|
||||||
update_marker_labels (i->first);
|
update_marker_labels (i->first);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Look at all markers in a group and update label widths */
|
/** Look at all markers in a group and update label widths */
|
||||||
void
|
void
|
||||||
Editor::update_marker_labels (ArdourCanvas::Group* group)
|
Editor::update_marker_labels (ArdourCanvas::Layout* group)
|
||||||
{
|
{
|
||||||
list<Marker*>& sorted = _sorted_marker_lists[group];
|
list<Marker*>& sorted = _sorted_marker_lists[group];
|
||||||
|
|
||||||
|
|
@ -1576,7 +1576,7 @@ Editor::toggle_marker_lines ()
|
||||||
void
|
void
|
||||||
Editor::remove_sorted_marker (Marker* m)
|
Editor::remove_sorted_marker (Marker* m)
|
||||||
{
|
{
|
||||||
for (std::map<ArdourCanvas::Group *, std::list<Marker *> >::iterator i = _sorted_marker_lists.begin(); i != _sorted_marker_lists.end(); ++i) {
|
for (std::map<ArdourCanvas::Layout *, std::list<Marker *> >::iterator i = _sorted_marker_lists.begin(); i != _sorted_marker_lists.end(); ++i) {
|
||||||
i->second.remove (m);
|
i->second.remove (m);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -29,10 +29,11 @@
|
||||||
|
|
||||||
#include <gtk/gtkaction.h>
|
#include <gtk/gtkaction.h>
|
||||||
|
|
||||||
#include "canvas/group.h"
|
#include "canvas/layout.h"
|
||||||
#include "canvas/canvas.h"
|
#include "canvas/canvas.h"
|
||||||
#include "canvas/ruler.h"
|
#include "canvas/ruler.h"
|
||||||
#include "canvas/debug.h"
|
#include "canvas/debug.h"
|
||||||
|
#include "canvas/scroll_group.h"
|
||||||
|
|
||||||
#include "ardour/session.h"
|
#include "ardour/session.h"
|
||||||
#include "ardour/tempo.h"
|
#include "ardour/tempo.h"
|
||||||
|
|
|
||||||
|
|
@ -18,7 +18,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "evoral/Note.hpp"
|
#include "evoral/Note.hpp"
|
||||||
#include "canvas/group.h"
|
#include "canvas/layout.h"
|
||||||
#include "canvas/rectangle.h"
|
#include "canvas/rectangle.h"
|
||||||
#include "canvas/wave_view.h"
|
#include "canvas/wave_view.h"
|
||||||
#include "canvas/debug.h"
|
#include "canvas/debug.h"
|
||||||
|
|
@ -38,11 +38,11 @@ using namespace ARDOUR;
|
||||||
|
|
||||||
PBD::Signal1<void,GhostRegion*> GhostRegion::CatchDeletion;
|
PBD::Signal1<void,GhostRegion*> GhostRegion::CatchDeletion;
|
||||||
|
|
||||||
GhostRegion::GhostRegion (ArdourCanvas::Group* parent, TimeAxisView& tv, TimeAxisView& source_tv, double initial_pos)
|
GhostRegion::GhostRegion (ArdourCanvas::Layout* parent, TimeAxisView& tv, TimeAxisView& source_tv, double initial_pos)
|
||||||
: trackview (tv)
|
: trackview (tv)
|
||||||
, source_trackview (source_tv)
|
, source_trackview (source_tv)
|
||||||
{
|
{
|
||||||
group = new ArdourCanvas::Group (parent);
|
group = new ArdourCanvas::Layout (parent);
|
||||||
CANVAS_DEBUG_NAME (group, "ghost region");
|
CANVAS_DEBUG_NAME (group, "ghost region");
|
||||||
group->set_position (ArdourCanvas::Duple (initial_pos, 0));
|
group->set_position (ArdourCanvas::Duple (initial_pos, 0));
|
||||||
|
|
||||||
|
|
@ -191,7 +191,7 @@ MidiGhostRegion::~MidiGhostRegion()
|
||||||
clear_events ();
|
clear_events ();
|
||||||
}
|
}
|
||||||
|
|
||||||
MidiGhostRegion::GhostEvent::GhostEvent (NoteBase* e, ArdourCanvas::Group* g)
|
MidiGhostRegion::GhostEvent::GhostEvent (NoteBase* e, ArdourCanvas::Layout* g)
|
||||||
: event (e)
|
: event (e)
|
||||||
{
|
{
|
||||||
rect = new ArdourCanvas::Rectangle (g, ArdourCanvas::Rect (e->x0(), e->y0(), e->x1(), e->y1()));
|
rect = new ArdourCanvas::Rectangle (g, ArdourCanvas::Rect (e->x0(), e->y0(), e->x1(), e->y1()));
|
||||||
|
|
|
||||||
|
|
@ -36,7 +36,7 @@ class TimeAxisView;
|
||||||
class GhostRegion : public sigc::trackable
|
class GhostRegion : public sigc::trackable
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
GhostRegion(ArdourCanvas::Group* parent, TimeAxisView& tv, TimeAxisView& source_tv, double initial_unit_pos);
|
GhostRegion(ArdourCanvas::Layout* parent, TimeAxisView& tv, TimeAxisView& source_tv, double initial_unit_pos);
|
||||||
virtual ~GhostRegion();
|
virtual ~GhostRegion();
|
||||||
|
|
||||||
virtual void set_samples_per_pixel (double) = 0;
|
virtual void set_samples_per_pixel (double) = 0;
|
||||||
|
|
@ -52,7 +52,7 @@ public:
|
||||||
TimeAxisView& trackview;
|
TimeAxisView& trackview;
|
||||||
/** TimeAxisView that we are a ghost for */
|
/** TimeAxisView that we are a ghost for */
|
||||||
TimeAxisView& source_trackview;
|
TimeAxisView& source_trackview;
|
||||||
ArdourCanvas::Group* group;
|
ArdourCanvas::Layout* group;
|
||||||
ArdourCanvas::Rectangle* base_rect;
|
ArdourCanvas::Rectangle* base_rect;
|
||||||
|
|
||||||
static PBD::Signal1<void,GhostRegion*> CatchDeletion;
|
static PBD::Signal1<void,GhostRegion*> CatchDeletion;
|
||||||
|
|
@ -73,7 +73,7 @@ class MidiGhostRegion : public GhostRegion {
|
||||||
public:
|
public:
|
||||||
class GhostEvent : public sigc::trackable {
|
class GhostEvent : public sigc::trackable {
|
||||||
public:
|
public:
|
||||||
GhostEvent(::NoteBase *, ArdourCanvas::Group *);
|
GhostEvent(::NoteBase *, ArdourCanvas::Layout *);
|
||||||
virtual ~GhostEvent ();
|
virtual ~GhostEvent ();
|
||||||
|
|
||||||
NoteBase* event;
|
NoteBase* event;
|
||||||
|
|
|
||||||
|
|
@ -30,10 +30,10 @@
|
||||||
using namespace ARDOUR;
|
using namespace ARDOUR;
|
||||||
using namespace ArdourCanvas;
|
using namespace ArdourCanvas;
|
||||||
|
|
||||||
Hit::Hit (MidiRegionView& region, Group* group, double size, const boost::shared_ptr<NoteType> note, bool with_events)
|
Hit::Hit (MidiRegionView& region, Item* parent, double size, const boost::shared_ptr<NoteType> note, bool with_events)
|
||||||
: NoteBase (region, with_events, note)
|
: NoteBase (region, with_events, note)
|
||||||
{
|
{
|
||||||
_polygon = new ArdourCanvas::Polygon (group);
|
_polygon = new ArdourCanvas::Polygon (parent);
|
||||||
CANVAS_DEBUG_NAME (_polygon, "note");
|
CANVAS_DEBUG_NAME (_polygon, "note");
|
||||||
set_item (_polygon);
|
set_item (_polygon);
|
||||||
set_height (size);
|
set_height (size);
|
||||||
|
|
|
||||||
|
|
@ -33,7 +33,7 @@ public:
|
||||||
typedef Evoral::Note<double> NoteType;
|
typedef Evoral::Note<double> NoteType;
|
||||||
|
|
||||||
Hit (MidiRegionView& region,
|
Hit (MidiRegionView& region,
|
||||||
ArdourCanvas::Group* group,
|
ArdourCanvas::Item* parent,
|
||||||
double size,
|
double size,
|
||||||
const boost::shared_ptr<NoteType> note = boost::shared_ptr<NoteType>(),
|
const boost::shared_ptr<NoteType> note = boost::shared_ptr<NoteType>(),
|
||||||
bool with_events = true);
|
bool with_events = true);
|
||||||
|
|
|
||||||
|
|
@ -21,11 +21,12 @@
|
||||||
#include "ardour/tempo.h"
|
#include "ardour/tempo.h"
|
||||||
|
|
||||||
#include "canvas/rectangle.h"
|
#include "canvas/rectangle.h"
|
||||||
#include "canvas/group.h"
|
#include "canvas/layout.h"
|
||||||
#include "canvas/line.h"
|
#include "canvas/line.h"
|
||||||
#include "canvas/polygon.h"
|
#include "canvas/polygon.h"
|
||||||
#include "canvas/text.h"
|
#include "canvas/text.h"
|
||||||
#include "canvas/canvas.h"
|
#include "canvas/canvas.h"
|
||||||
|
#include "canvas/scroll_group.h"
|
||||||
#include "canvas/debug.h"
|
#include "canvas/debug.h"
|
||||||
|
|
||||||
#include "ardour_ui.h"
|
#include "ardour_ui.h"
|
||||||
|
|
@ -52,7 +53,7 @@ PBD::Signal1<void,Marker*> Marker::CatchDeletion;
|
||||||
|
|
||||||
static const double marker_height = 13.0;
|
static const double marker_height = 13.0;
|
||||||
|
|
||||||
Marker::Marker (PublicEditor& ed, ArdourCanvas::Group& parent, guint32 rgba, const string& annotation,
|
Marker::Marker (PublicEditor& ed, ArdourCanvas::Layout& parent, guint32 rgba, const string& annotation,
|
||||||
Type type, framepos_t frame, bool handle_events)
|
Type type, framepos_t frame, bool handle_events)
|
||||||
|
|
||||||
: editor (ed)
|
: editor (ed)
|
||||||
|
|
@ -241,7 +242,7 @@ Marker::Marker (PublicEditor& ed, ArdourCanvas::Group& parent, guint32 rgba, con
|
||||||
unit_position = editor.sample_to_pixel (frame);
|
unit_position = editor.sample_to_pixel (frame);
|
||||||
unit_position -= _shift;
|
unit_position -= _shift;
|
||||||
|
|
||||||
group = new ArdourCanvas::Group (&parent, ArdourCanvas::Duple (unit_position, 0));
|
group = new ArdourCanvas::Layout (&parent, ArdourCanvas::Duple (unit_position, 0));
|
||||||
#ifdef CANVAS_DEBUG
|
#ifdef CANVAS_DEBUG
|
||||||
group->name = string_compose ("Marker::group for %1", annotation);
|
group->name = string_compose ("Marker::group for %1", annotation);
|
||||||
#endif
|
#endif
|
||||||
|
|
@ -301,7 +302,7 @@ Marker::~Marker ()
|
||||||
delete _track_canvas_line;
|
delete _track_canvas_line;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Marker::reparent(ArdourCanvas::Group & parent)
|
void Marker::reparent(ArdourCanvas::Layout & parent)
|
||||||
{
|
{
|
||||||
group->reparent (&parent);
|
group->reparent (&parent);
|
||||||
_parent = &parent;
|
_parent = &parent;
|
||||||
|
|
@ -500,7 +501,7 @@ Marker::set_right_label_limit (double p)
|
||||||
|
|
||||||
/***********************************************************************/
|
/***********************************************************************/
|
||||||
|
|
||||||
TempoMarker::TempoMarker (PublicEditor& editor, ArdourCanvas::Group& parent, guint32 rgba, const string& text,
|
TempoMarker::TempoMarker (PublicEditor& editor, ArdourCanvas::Layout& parent, guint32 rgba, const string& text,
|
||||||
ARDOUR::TempoSection& temp)
|
ARDOUR::TempoSection& temp)
|
||||||
: Marker (editor, parent, rgba, text, Tempo, 0, false),
|
: Marker (editor, parent, rgba, text, Tempo, 0, false),
|
||||||
_tempo (temp)
|
_tempo (temp)
|
||||||
|
|
@ -515,7 +516,7 @@ TempoMarker::~TempoMarker ()
|
||||||
|
|
||||||
/***********************************************************************/
|
/***********************************************************************/
|
||||||
|
|
||||||
MeterMarker::MeterMarker (PublicEditor& editor, ArdourCanvas::Group& parent, guint32 rgba, const string& text,
|
MeterMarker::MeterMarker (PublicEditor& editor, ArdourCanvas::Layout& parent, guint32 rgba, const string& text,
|
||||||
ARDOUR::MeterSection& m)
|
ARDOUR::MeterSection& m)
|
||||||
: Marker (editor, parent, rgba, text, Meter, 0, false),
|
: Marker (editor, parent, rgba, text, Meter, 0, false),
|
||||||
_meter (m)
|
_meter (m)
|
||||||
|
|
|
||||||
|
|
@ -56,7 +56,7 @@ class Marker : public sigc::trackable
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
Marker (PublicEditor& editor, ArdourCanvas::Group &, guint32 rgba, const std::string& text, Type,
|
Marker (PublicEditor& editor, ArdourCanvas::Layout &, guint32 rgba, const std::string& text, Type,
|
||||||
framepos_t frame = 0, bool handle_events = true);
|
framepos_t frame = 0, bool handle_events = true);
|
||||||
|
|
||||||
virtual ~Marker ();
|
virtual ~Marker ();
|
||||||
|
|
@ -76,8 +76,8 @@ class Marker : public sigc::trackable
|
||||||
|
|
||||||
framepos_t position() const { return frame_position; }
|
framepos_t position() const { return frame_position; }
|
||||||
|
|
||||||
ArdourCanvas::Group * get_parent() { return _parent; }
|
ArdourCanvas::Layout * get_parent() { return _parent; }
|
||||||
void reparent (ArdourCanvas::Group & parent);
|
void reparent (ArdourCanvas::Layout & parent);
|
||||||
|
|
||||||
void hide ();
|
void hide ();
|
||||||
void show ();
|
void show ();
|
||||||
|
|
@ -98,8 +98,8 @@ class Marker : public sigc::trackable
|
||||||
|
|
||||||
Pango::FontDescription name_font;
|
Pango::FontDescription name_font;
|
||||||
|
|
||||||
ArdourCanvas::Group* _parent;
|
ArdourCanvas::Layout* _parent;
|
||||||
ArdourCanvas::Group *group;
|
ArdourCanvas::Layout *group;
|
||||||
ArdourCanvas::Polygon *mark;
|
ArdourCanvas::Polygon *mark;
|
||||||
ArdourCanvas::Text *_name_item;
|
ArdourCanvas::Text *_name_item;
|
||||||
ArdourCanvas::Points *points;
|
ArdourCanvas::Points *points;
|
||||||
|
|
@ -134,7 +134,7 @@ private:
|
||||||
class TempoMarker : public Marker
|
class TempoMarker : public Marker
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
TempoMarker (PublicEditor& editor, ArdourCanvas::Group &, guint32 rgba, const std::string& text, ARDOUR::TempoSection&);
|
TempoMarker (PublicEditor& editor, ArdourCanvas::Layout &, guint32 rgba, const std::string& text, ARDOUR::TempoSection&);
|
||||||
~TempoMarker ();
|
~TempoMarker ();
|
||||||
|
|
||||||
ARDOUR::TempoSection& tempo() const { return _tempo; }
|
ARDOUR::TempoSection& tempo() const { return _tempo; }
|
||||||
|
|
@ -146,7 +146,7 @@ class TempoMarker : public Marker
|
||||||
class MeterMarker : public Marker
|
class MeterMarker : public Marker
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
MeterMarker (PublicEditor& editor, ArdourCanvas::Group &, guint32 rgba, const std::string& text, ARDOUR::MeterSection&);
|
MeterMarker (PublicEditor& editor, ArdourCanvas::Layout &, guint32 rgba, const std::string& text, ARDOUR::MeterSection&);
|
||||||
~MeterMarker ();
|
~MeterMarker ();
|
||||||
|
|
||||||
ARDOUR::MeterSection& meter() const { return _meter; }
|
ARDOUR::MeterSection& meter() const { return _meter; }
|
||||||
|
|
|
||||||
|
|
@ -29,12 +29,12 @@ using namespace std;
|
||||||
MidiAutomationLine::MidiAutomationLine (
|
MidiAutomationLine::MidiAutomationLine (
|
||||||
const std::string& name,
|
const std::string& name,
|
||||||
TimeAxisView& tav,
|
TimeAxisView& tav,
|
||||||
ArdourCanvas::Group& group,
|
ArdourCanvas::Item& parent,
|
||||||
boost::shared_ptr<ARDOUR::AutomationList> list,
|
boost::shared_ptr<ARDOUR::AutomationList> list,
|
||||||
boost::shared_ptr<ARDOUR::MidiRegion> region,
|
boost::shared_ptr<ARDOUR::MidiRegion> region,
|
||||||
Evoral::Parameter parameter,
|
Evoral::Parameter parameter,
|
||||||
Evoral::TimeConverter<double, ARDOUR::framepos_t>* converter)
|
Evoral::TimeConverter<double, ARDOUR::framepos_t>* converter)
|
||||||
: AutomationLine (name, tav, group, list, converter)
|
: AutomationLine (name, tav, parent, list, converter)
|
||||||
, _region (region)
|
, _region (region)
|
||||||
, _parameter (parameter)
|
, _parameter (parameter)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -26,7 +26,7 @@
|
||||||
class MidiAutomationLine : public AutomationLine
|
class MidiAutomationLine : public AutomationLine
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
MidiAutomationLine (const std::string&, TimeAxisView&, ArdourCanvas::Group&,
|
MidiAutomationLine (const std::string&, TimeAxisView&, ArdourCanvas::Item&,
|
||||||
boost::shared_ptr<ARDOUR::AutomationList>,
|
boost::shared_ptr<ARDOUR::AutomationList>,
|
||||||
boost::shared_ptr<ARDOUR::MidiRegion>,
|
boost::shared_ptr<ARDOUR::MidiRegion>,
|
||||||
Evoral::Parameter,
|
Evoral::Parameter,
|
||||||
|
|
|
||||||
|
|
@ -88,13 +88,13 @@ PBD::Signal1<void, MidiRegionView *> MidiRegionView::SelectionCleared;
|
||||||
|
|
||||||
#define MIDI_BP_ZERO ((Config->get_first_midi_bank_is_zero())?0:1)
|
#define MIDI_BP_ZERO ((Config->get_first_midi_bank_is_zero())?0:1)
|
||||||
|
|
||||||
MidiRegionView::MidiRegionView (ArdourCanvas::Group *parent, RouteTimeAxisView &tv,
|
MidiRegionView::MidiRegionView (ArdourCanvas::Layout *parent, RouteTimeAxisView &tv,
|
||||||
boost::shared_ptr<MidiRegion> r, double spu, uint32_t basic_color)
|
boost::shared_ptr<MidiRegion> r, double spu, uint32_t basic_color)
|
||||||
: RegionView (parent, tv, r, spu, basic_color)
|
: RegionView (parent, tv, r, spu, basic_color)
|
||||||
, _current_range_min(0)
|
, _current_range_min(0)
|
||||||
, _current_range_max(0)
|
, _current_range_max(0)
|
||||||
, _active_notes(0)
|
, _active_notes(0)
|
||||||
, _note_group (new ArdourCanvas::Group (group))
|
, _note_group (new ArdourCanvas::Layout (group))
|
||||||
, _note_diff_command (0)
|
, _note_diff_command (0)
|
||||||
, _ghost_note(0)
|
, _ghost_note(0)
|
||||||
, _step_edit_cursor (0)
|
, _step_edit_cursor (0)
|
||||||
|
|
@ -124,14 +124,14 @@ MidiRegionView::MidiRegionView (ArdourCanvas::Group *parent, RouteTimeAxisView &
|
||||||
SelectionCleared.connect (_selection_cleared_connection, invalidator (*this), boost::bind (&MidiRegionView::selection_cleared, this, _1), gui_context ());
|
SelectionCleared.connect (_selection_cleared_connection, invalidator (*this), boost::bind (&MidiRegionView::selection_cleared, this, _1), gui_context ());
|
||||||
}
|
}
|
||||||
|
|
||||||
MidiRegionView::MidiRegionView (ArdourCanvas::Group *parent, RouteTimeAxisView &tv,
|
MidiRegionView::MidiRegionView (ArdourCanvas::Layout *parent, RouteTimeAxisView &tv,
|
||||||
boost::shared_ptr<MidiRegion> r, double spu, uint32_t basic_color,
|
boost::shared_ptr<MidiRegion> r, double spu, uint32_t basic_color,
|
||||||
TimeAxisViewItem::Visibility visibility)
|
TimeAxisViewItem::Visibility visibility)
|
||||||
: RegionView (parent, tv, r, spu, basic_color, false, visibility)
|
: RegionView (parent, tv, r, spu, basic_color, false, visibility)
|
||||||
, _current_range_min(0)
|
, _current_range_min(0)
|
||||||
, _current_range_max(0)
|
, _current_range_max(0)
|
||||||
, _active_notes(0)
|
, _active_notes(0)
|
||||||
, _note_group (new ArdourCanvas::Group (parent))
|
, _note_group (new ArdourCanvas::Layout (parent))
|
||||||
, _note_diff_command (0)
|
, _note_diff_command (0)
|
||||||
, _ghost_note(0)
|
, _ghost_note(0)
|
||||||
, _step_edit_cursor (0)
|
, _step_edit_cursor (0)
|
||||||
|
|
@ -177,7 +177,7 @@ MidiRegionView::MidiRegionView (const MidiRegionView& other)
|
||||||
, _current_range_min(0)
|
, _current_range_min(0)
|
||||||
, _current_range_max(0)
|
, _current_range_max(0)
|
||||||
, _active_notes(0)
|
, _active_notes(0)
|
||||||
, _note_group (new ArdourCanvas::Group (get_canvas_group()))
|
, _note_group (new ArdourCanvas::Layout (get_canvas_group()))
|
||||||
, _note_diff_command (0)
|
, _note_diff_command (0)
|
||||||
, _ghost_note(0)
|
, _ghost_note(0)
|
||||||
, _step_edit_cursor (0)
|
, _step_edit_cursor (0)
|
||||||
|
|
@ -205,7 +205,7 @@ MidiRegionView::MidiRegionView (const MidiRegionView& other, boost::shared_ptr<M
|
||||||
, _current_range_min(0)
|
, _current_range_min(0)
|
||||||
, _current_range_max(0)
|
, _current_range_max(0)
|
||||||
, _active_notes(0)
|
, _active_notes(0)
|
||||||
, _note_group (new ArdourCanvas::Group (get_canvas_group()))
|
, _note_group (new ArdourCanvas::Layout (get_canvas_group()))
|
||||||
, _note_diff_command (0)
|
, _note_diff_command (0)
|
||||||
, _ghost_note(0)
|
, _ghost_note(0)
|
||||||
, _step_edit_cursor (0)
|
, _step_edit_cursor (0)
|
||||||
|
|
@ -3610,7 +3610,7 @@ void
|
||||||
MidiRegionView::show_step_edit_cursor (Evoral::MusicalTime pos)
|
MidiRegionView::show_step_edit_cursor (Evoral::MusicalTime pos)
|
||||||
{
|
{
|
||||||
if (_step_edit_cursor == 0) {
|
if (_step_edit_cursor == 0) {
|
||||||
ArdourCanvas::Group* const group = (ArdourCanvas::Group*)get_canvas_group();
|
ArdourCanvas::Layout* const group = (ArdourCanvas::Layout*)get_canvas_group();
|
||||||
|
|
||||||
_step_edit_cursor = new ArdourCanvas::Rectangle (group);
|
_step_edit_cursor = new ArdourCanvas::Rectangle (group);
|
||||||
_step_edit_cursor->set_y0 (0);
|
_step_edit_cursor->set_y0 (0);
|
||||||
|
|
@ -3725,7 +3725,7 @@ MidiRegionView::trim_front_starting ()
|
||||||
/* Reparent the note group to the region view's parent, so that it doesn't change
|
/* Reparent the note group to the region view's parent, so that it doesn't change
|
||||||
when the region view is trimmed.
|
when the region view is trimmed.
|
||||||
*/
|
*/
|
||||||
_temporary_note_group = new ArdourCanvas::Group (group->parent ());
|
_temporary_note_group = new ArdourCanvas::Layout (group->parent ());
|
||||||
_temporary_note_group->move (group->position ());
|
_temporary_note_group->move (group->position ());
|
||||||
_note_group->reparent (_temporary_note_group);
|
_note_group->reparent (_temporary_note_group);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -67,7 +67,7 @@ public:
|
||||||
typedef Evoral::Note<Evoral::MusicalTime> NoteType;
|
typedef Evoral::Note<Evoral::MusicalTime> NoteType;
|
||||||
typedef Evoral::Sequence<Evoral::MusicalTime>::Notes Notes;
|
typedef Evoral::Sequence<Evoral::MusicalTime>::Notes Notes;
|
||||||
|
|
||||||
MidiRegionView (ArdourCanvas::Group *,
|
MidiRegionView (ArdourCanvas::Layout *,
|
||||||
RouteTimeAxisView&,
|
RouteTimeAxisView&,
|
||||||
boost::shared_ptr<ARDOUR::MidiRegion>,
|
boost::shared_ptr<ARDOUR::MidiRegion>,
|
||||||
double initial_samples_per_pixel,
|
double initial_samples_per_pixel,
|
||||||
|
|
@ -309,7 +309,7 @@ protected:
|
||||||
/** Allows derived types to specify their visibility requirements
|
/** Allows derived types to specify their visibility requirements
|
||||||
* to the TimeAxisViewItem parent class.
|
* to the TimeAxisViewItem parent class.
|
||||||
*/
|
*/
|
||||||
MidiRegionView (ArdourCanvas::Group *,
|
MidiRegionView (ArdourCanvas::Layout *,
|
||||||
RouteTimeAxisView&,
|
RouteTimeAxisView&,
|
||||||
boost::shared_ptr<ARDOUR::MidiRegion>,
|
boost::shared_ptr<ARDOUR::MidiRegion>,
|
||||||
double samples_per_pixel,
|
double samples_per_pixel,
|
||||||
|
|
@ -387,7 +387,7 @@ private:
|
||||||
PatchChanges _patch_changes;
|
PatchChanges _patch_changes;
|
||||||
SysExes _sys_exes;
|
SysExes _sys_exes;
|
||||||
Note** _active_notes;
|
Note** _active_notes;
|
||||||
ArdourCanvas::Group* _note_group;
|
ArdourCanvas::Layout* _note_group;
|
||||||
ARDOUR::MidiModel::NoteDiffCommand* _note_diff_command;
|
ARDOUR::MidiModel::NoteDiffCommand* _note_diff_command;
|
||||||
Note* _ghost_note;
|
Note* _ghost_note;
|
||||||
double _last_ghost_x;
|
double _last_ghost_x;
|
||||||
|
|
@ -401,7 +401,7 @@ private:
|
||||||
/** A group used to temporarily reparent _note_group to during start trims, so
|
/** A group used to temporarily reparent _note_group to during start trims, so
|
||||||
* that the notes don't move with the parent region view.
|
* that the notes don't move with the parent region view.
|
||||||
*/
|
*/
|
||||||
ArdourCanvas::Group* _temporary_note_group;
|
ArdourCanvas::Layout* _temporary_note_group;
|
||||||
|
|
||||||
MouseState _mouse_state;
|
MouseState _mouse_state;
|
||||||
int _pressed_button;
|
int _pressed_button;
|
||||||
|
|
|
||||||
|
|
@ -68,7 +68,7 @@ MidiStreamView::MidiStreamView (MidiTimeAxisView& tv)
|
||||||
, _updates_suspended (false)
|
, _updates_suspended (false)
|
||||||
{
|
{
|
||||||
/* use a group dedicated to MIDI underlays. Audio underlays are not in this group. */
|
/* use a group dedicated to MIDI underlays. Audio underlays are not in this group. */
|
||||||
midi_underlay_group = new ArdourCanvas::Group (_canvas_group);
|
midi_underlay_group = new ArdourCanvas::Layout (_canvas_group);
|
||||||
midi_underlay_group->lower_to_bottom();
|
midi_underlay_group->lower_to_bottom();
|
||||||
|
|
||||||
/* put the note lines in the timeaxisview's group, so it
|
/* put the note lines in the timeaxisview's group, so it
|
||||||
|
|
|
||||||
|
|
@ -68,7 +68,7 @@ class MidiStreamView : public StreamView
|
||||||
};
|
};
|
||||||
|
|
||||||
Gtk::Adjustment note_range_adjustment;
|
Gtk::Adjustment note_range_adjustment;
|
||||||
ArdourCanvas::Group* midi_underlay_group;
|
ArdourCanvas::Layout* midi_underlay_group;
|
||||||
|
|
||||||
void set_note_range(VisibleNoteRange r);
|
void set_note_range(VisibleNoteRange r);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -31,9 +31,9 @@ using namespace ARDOUR;
|
||||||
using namespace ArdourCanvas;
|
using namespace ArdourCanvas;
|
||||||
|
|
||||||
Note::Note (
|
Note::Note (
|
||||||
MidiRegionView& region, Group* group, const boost::shared_ptr<NoteType> note, bool with_events)
|
MidiRegionView& region, Item* parent, const boost::shared_ptr<NoteType> note, bool with_events)
|
||||||
: NoteBase (region, with_events, note)
|
: NoteBase (region, with_events, note)
|
||||||
, _rectangle (new ArdourCanvas::Rectangle (group))
|
, _rectangle (new ArdourCanvas::Rectangle (parent))
|
||||||
{
|
{
|
||||||
CANVAS_DEBUG_NAME (_rectangle, "note");
|
CANVAS_DEBUG_NAME (_rectangle, "note");
|
||||||
set_item (_rectangle);
|
set_item (_rectangle);
|
||||||
|
|
|
||||||
|
|
@ -26,7 +26,7 @@
|
||||||
#include "midi_util.h"
|
#include "midi_util.h"
|
||||||
|
|
||||||
namespace ArdourCanvas {
|
namespace ArdourCanvas {
|
||||||
class Group;
|
class Layout;
|
||||||
}
|
}
|
||||||
|
|
||||||
class Note : public NoteBase
|
class Note : public NoteBase
|
||||||
|
|
@ -35,7 +35,7 @@ public:
|
||||||
typedef Evoral::Note<Evoral::MusicalTime> NoteType;
|
typedef Evoral::Note<Evoral::MusicalTime> NoteType;
|
||||||
|
|
||||||
Note (MidiRegionView& region,
|
Note (MidiRegionView& region,
|
||||||
ArdourCanvas::Group* group,
|
ArdourCanvas::Item* parent,
|
||||||
const boost::shared_ptr<NoteType> note = boost::shared_ptr<NoteType>(),
|
const boost::shared_ptr<NoteType> note = boost::shared_ptr<NoteType>(),
|
||||||
bool with_events = true);
|
bool with_events = true);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -43,7 +43,7 @@ using namespace std;
|
||||||
*/
|
*/
|
||||||
PatchChange::PatchChange(
|
PatchChange::PatchChange(
|
||||||
MidiRegionView& region,
|
MidiRegionView& region,
|
||||||
ArdourCanvas::Group* parent,
|
ArdourCanvas::Layout* parent,
|
||||||
const string& text,
|
const string& text,
|
||||||
double height,
|
double height,
|
||||||
double x,
|
double x,
|
||||||
|
|
|
||||||
|
|
@ -35,7 +35,7 @@ class PatchChange
|
||||||
public:
|
public:
|
||||||
PatchChange(
|
PatchChange(
|
||||||
MidiRegionView& region,
|
MidiRegionView& region,
|
||||||
ArdourCanvas::Group* parent,
|
ArdourCanvas::Layout* parent,
|
||||||
const string& text,
|
const string& text,
|
||||||
double height,
|
double height,
|
||||||
double x,
|
double x,
|
||||||
|
|
|
||||||
|
|
@ -365,10 +365,10 @@ class PublicEditor : public Gtk::Window, public PBD::StatefulDestructible, publi
|
||||||
virtual Gtk::HBox& get_status_bar_packer() = 0;
|
virtual Gtk::HBox& get_status_bar_packer() = 0;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
virtual ArdourCanvas::Group* get_trackview_group () const = 0;
|
virtual ArdourCanvas::Layout* get_trackview_group () const = 0;
|
||||||
virtual ArdourCanvas::Group* get_hscroll_group () const = 0;
|
virtual ArdourCanvas::ScrollGroup* get_hscroll_group () const = 0;
|
||||||
virtual ArdourCanvas::Group* get_vscroll_group () const = 0;
|
virtual ArdourCanvas::ScrollGroup* get_vscroll_group () const = 0;
|
||||||
virtual ArdourCanvas::Group* get_hvscroll_group () const = 0;
|
virtual ArdourCanvas::ScrollGroup* get_hvscroll_group () const = 0;
|
||||||
|
|
||||||
virtual ArdourCanvas::GtkCanvasViewport* get_track_canvas() const = 0;
|
virtual ArdourCanvas::GtkCanvasViewport* get_track_canvas() const = 0;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -38,7 +38,7 @@ using namespace std;
|
||||||
using namespace ARDOUR;
|
using namespace ARDOUR;
|
||||||
using namespace PBD;
|
using namespace PBD;
|
||||||
|
|
||||||
AudioRegionGainLine::AudioRegionGainLine (const string & name, AudioRegionView& r, ArdourCanvas::Group& parent, boost::shared_ptr<AutomationList> l)
|
AudioRegionGainLine::AudioRegionGainLine (const string & name, AudioRegionView& r, ArdourCanvas::Layout& parent, boost::shared_ptr<AutomationList> l)
|
||||||
: AutomationLine (name, r.get_time_axis_view(), parent, l)
|
: AutomationLine (name, r.get_time_axis_view(), parent, l)
|
||||||
, rv (r)
|
, rv (r)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -35,7 +35,7 @@ class AudioRegionView;
|
||||||
class AudioRegionGainLine : public AutomationLine
|
class AudioRegionGainLine : public AutomationLine
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
AudioRegionGainLine (const std::string & name, AudioRegionView&, ArdourCanvas::Group& parent, boost::shared_ptr<ARDOUR::AutomationList>);
|
AudioRegionGainLine (const std::string & name, AudioRegionView&, ArdourCanvas::Layout& parent, boost::shared_ptr<ARDOUR::AutomationList>);
|
||||||
|
|
||||||
void start_drag_single (ControlPoint*, double, float);
|
void start_drag_single (ControlPoint*, double, float);
|
||||||
void end_drag (bool with_push, uint32_t final_index);
|
void end_drag (bool with_push, uint32_t final_index);
|
||||||
|
|
|
||||||
|
|
@ -63,7 +63,7 @@ static const int32_t sync_mark_width = 9;
|
||||||
|
|
||||||
PBD::Signal1<void,RegionView*> RegionView::RegionViewGoingAway;
|
PBD::Signal1<void,RegionView*> RegionView::RegionViewGoingAway;
|
||||||
|
|
||||||
RegionView::RegionView (ArdourCanvas::Group* parent,
|
RegionView::RegionView (ArdourCanvas::Layout* parent,
|
||||||
TimeAxisView& tv,
|
TimeAxisView& tv,
|
||||||
boost::shared_ptr<ARDOUR::Region> r,
|
boost::shared_ptr<ARDOUR::Region> r,
|
||||||
double spu,
|
double spu,
|
||||||
|
|
@ -128,7 +128,7 @@ RegionView::RegionView (const RegionView& other, boost::shared_ptr<Region> other
|
||||||
GhostRegion::CatchDeletion.connect (*this, invalidator (*this), boost::bind (&RegionView::remove_ghost, this, _1), gui_context());
|
GhostRegion::CatchDeletion.connect (*this, invalidator (*this), boost::bind (&RegionView::remove_ghost, this, _1), gui_context());
|
||||||
}
|
}
|
||||||
|
|
||||||
RegionView::RegionView (ArdourCanvas::Group* parent,
|
RegionView::RegionView (ArdourCanvas::Layout* parent,
|
||||||
TimeAxisView& tv,
|
TimeAxisView& tv,
|
||||||
boost::shared_ptr<ARDOUR::Region> r,
|
boost::shared_ptr<ARDOUR::Region> r,
|
||||||
double spu,
|
double spu,
|
||||||
|
|
|
||||||
|
|
@ -49,7 +49,7 @@ namespace ArdourCanvas {
|
||||||
class RegionView : public TimeAxisViewItem
|
class RegionView : public TimeAxisViewItem
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
RegionView (ArdourCanvas::Group* parent,
|
RegionView (ArdourCanvas::Layout* parent,
|
||||||
TimeAxisView& time_view,
|
TimeAxisView& time_view,
|
||||||
boost::shared_ptr<ARDOUR::Region> region,
|
boost::shared_ptr<ARDOUR::Region> region,
|
||||||
double samples_per_pixel,
|
double samples_per_pixel,
|
||||||
|
|
@ -128,7 +128,7 @@ class RegionView : public TimeAxisViewItem
|
||||||
/** Allows derived types to specify their visibility requirements
|
/** Allows derived types to specify their visibility requirements
|
||||||
* to the TimeAxisViewItem parent class
|
* to the TimeAxisViewItem parent class
|
||||||
*/
|
*/
|
||||||
RegionView (ArdourCanvas::Group *,
|
RegionView (ArdourCanvas::Layout *,
|
||||||
TimeAxisView&,
|
TimeAxisView&,
|
||||||
boost::shared_ptr<ARDOUR::Region>,
|
boost::shared_ptr<ARDOUR::Region>,
|
||||||
double samples_per_pixel,
|
double samples_per_pixel,
|
||||||
|
|
|
||||||
|
|
@ -52,9 +52,9 @@ using namespace ARDOUR;
|
||||||
using namespace PBD;
|
using namespace PBD;
|
||||||
using namespace Editing;
|
using namespace Editing;
|
||||||
|
|
||||||
StreamView::StreamView (RouteTimeAxisView& tv, ArdourCanvas::Group* canvas_group)
|
StreamView::StreamView (RouteTimeAxisView& tv, ArdourCanvas::Layout* canvas_group)
|
||||||
: _trackview (tv)
|
: _trackview (tv)
|
||||||
, _canvas_group (canvas_group ? canvas_group : new ArdourCanvas::Group (_trackview.canvas_display()))
|
, _canvas_group (canvas_group ? canvas_group : new ArdourCanvas::Layout (_trackview.canvas_display()))
|
||||||
, _samples_per_pixel (_trackview.editor().get_current_zoom ())
|
, _samples_per_pixel (_trackview.editor().get_current_zoom ())
|
||||||
, rec_updating(false)
|
, rec_updating(false)
|
||||||
, rec_active(false)
|
, rec_active(false)
|
||||||
|
|
|
||||||
|
|
@ -42,7 +42,7 @@ namespace ARDOUR {
|
||||||
|
|
||||||
namespace ArdourCanvas {
|
namespace ArdourCanvas {
|
||||||
class Rectangle;
|
class Rectangle;
|
||||||
class Group;
|
class Layout;
|
||||||
}
|
}
|
||||||
|
|
||||||
struct RecBoxInfo {
|
struct RecBoxInfo {
|
||||||
|
|
@ -82,7 +82,7 @@ public:
|
||||||
void set_layer_display (LayerDisplay);
|
void set_layer_display (LayerDisplay);
|
||||||
LayerDisplay layer_display () const { return _layer_display; }
|
LayerDisplay layer_display () const { return _layer_display; }
|
||||||
|
|
||||||
ArdourCanvas::Group* canvas_item() { return _canvas_group; }
|
ArdourCanvas::Layout* canvas_item() { return _canvas_group; }
|
||||||
|
|
||||||
enum ColorTarget {
|
enum ColorTarget {
|
||||||
RegionColor,
|
RegionColor,
|
||||||
|
|
@ -128,7 +128,7 @@ public:
|
||||||
sigc::signal<void> ContentsHeightChanged;
|
sigc::signal<void> ContentsHeightChanged;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
StreamView (RouteTimeAxisView&, ArdourCanvas::Group* canvas_group = 0);
|
StreamView (RouteTimeAxisView&, ArdourCanvas::Layout* canvas_group = 0);
|
||||||
|
|
||||||
void transport_changed();
|
void transport_changed();
|
||||||
void transport_looped();
|
void transport_looped();
|
||||||
|
|
@ -151,7 +151,7 @@ protected:
|
||||||
virtual void color_handler () = 0;
|
virtual void color_handler () = 0;
|
||||||
|
|
||||||
RouteTimeAxisView& _trackview;
|
RouteTimeAxisView& _trackview;
|
||||||
ArdourCanvas::Group* _canvas_group;
|
ArdourCanvas::Layout* _canvas_group;
|
||||||
ArdourCanvas::Rectangle* canvas_rect; /* frame around the whole thing */
|
ArdourCanvas::Rectangle* canvas_rect; /* frame around the whole thing */
|
||||||
|
|
||||||
typedef std::list<RegionView* > RegionViewList;
|
typedef std::list<RegionView* > RegionViewList;
|
||||||
|
|
|
||||||
|
|
@ -26,7 +26,7 @@ using namespace std;
|
||||||
|
|
||||||
SysEx::SysEx (
|
SysEx::SysEx (
|
||||||
MidiRegionView& region,
|
MidiRegionView& region,
|
||||||
ArdourCanvas::Group* parent,
|
ArdourCanvas::Layout* parent,
|
||||||
string& text,
|
string& text,
|
||||||
double height,
|
double height,
|
||||||
double x,
|
double x,
|
||||||
|
|
|
||||||
|
|
@ -31,7 +31,7 @@ class SysEx
|
||||||
public:
|
public:
|
||||||
SysEx (
|
SysEx (
|
||||||
MidiRegionView& region,
|
MidiRegionView& region,
|
||||||
ArdourCanvas::Group* parent,
|
ArdourCanvas::Layout* parent,
|
||||||
std::string& text,
|
std::string& text,
|
||||||
double height,
|
double height,
|
||||||
double x,
|
double x,
|
||||||
|
|
|
||||||
|
|
@ -46,7 +46,7 @@ const TimeAxisViewItem::Visibility TapeAudioRegionView::default_tape_visibility
|
||||||
TimeAxisViewItem::HideFrameRight |
|
TimeAxisViewItem::HideFrameRight |
|
||||||
TimeAxisViewItem::FullWidthNameHighlight);
|
TimeAxisViewItem::FullWidthNameHighlight);
|
||||||
|
|
||||||
TapeAudioRegionView::TapeAudioRegionView (ArdourCanvas::Group *parent, RouteTimeAxisView &tv,
|
TapeAudioRegionView::TapeAudioRegionView (ArdourCanvas::Layout *parent, RouteTimeAxisView &tv,
|
||||||
boost::shared_ptr<AudioRegion> r,
|
boost::shared_ptr<AudioRegion> r,
|
||||||
double spu,
|
double spu,
|
||||||
uint32_t basic_color)
|
uint32_t basic_color)
|
||||||
|
|
|
||||||
|
|
@ -27,7 +27,7 @@
|
||||||
class TapeAudioRegionView : public AudioRegionView
|
class TapeAudioRegionView : public AudioRegionView
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
TapeAudioRegionView (ArdourCanvas::Group *,
|
TapeAudioRegionView (ArdourCanvas::Layout *,
|
||||||
RouteTimeAxisView&,
|
RouteTimeAxisView&,
|
||||||
boost::shared_ptr<ARDOUR::AudioRegion>,
|
boost::shared_ptr<ARDOUR::AudioRegion>,
|
||||||
double initial_samples_per_pixel,
|
double initial_samples_per_pixel,
|
||||||
|
|
|
||||||
|
|
@ -28,7 +28,7 @@
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
||||||
TempoLines::TempoLines (ArdourCanvas::Group* group, double)
|
TempoLines::TempoLines (ArdourCanvas::Layout* group, double)
|
||||||
: lines (group, ArdourCanvas::LineSet::Vertical)
|
: lines (group, ArdourCanvas::LineSet::Vertical)
|
||||||
{
|
{
|
||||||
lines.set_extent (ArdourCanvas::COORD_MAX);
|
lines.set_extent (ArdourCanvas::COORD_MAX);
|
||||||
|
|
|
||||||
|
|
@ -25,7 +25,7 @@
|
||||||
|
|
||||||
class TempoLines {
|
class TempoLines {
|
||||||
public:
|
public:
|
||||||
TempoLines (ArdourCanvas::Group* group, double screen_height);
|
TempoLines (ArdourCanvas::Layout* group, double screen_height);
|
||||||
|
|
||||||
void tempo_map_changed();
|
void tempo_map_changed();
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -97,16 +97,16 @@ TimeAxisView::TimeAxisView (ARDOUR::Session* sess, PublicEditor& ed, TimeAxisVie
|
||||||
compute_heights ();
|
compute_heights ();
|
||||||
}
|
}
|
||||||
|
|
||||||
_canvas_display = new Group (ed.get_trackview_group (), ArdourCanvas::Duple (0.0, 0.0));
|
_canvas_display = new ArdourCanvas::Layout (ed.get_trackview_group (), ArdourCanvas::Duple (0.0, 0.0));
|
||||||
CANVAS_DEBUG_NAME (_canvas_display, "main for TAV");
|
CANVAS_DEBUG_NAME (_canvas_display, "main for TAV");
|
||||||
_canvas_display->hide(); // reveal as needed
|
_canvas_display->hide(); // reveal as needed
|
||||||
|
|
||||||
selection_group = new Group (_canvas_display);
|
selection_group = new ArdourCanvas::Layout (_canvas_display);
|
||||||
CANVAS_DEBUG_NAME (selection_group, "selection for TAV");
|
CANVAS_DEBUG_NAME (selection_group, "selection for TAV");
|
||||||
selection_group->set_data (X_("timeselection"), (void *) 1);
|
selection_group->set_data (X_("timeselection"), (void *) 1);
|
||||||
selection_group->hide();
|
selection_group->hide();
|
||||||
|
|
||||||
_ghost_group = new Group (_canvas_display);
|
_ghost_group = new ArdourCanvas::Layout (_canvas_display);
|
||||||
CANVAS_DEBUG_NAME (_ghost_group, "ghost for TAV");
|
CANVAS_DEBUG_NAME (_ghost_group, "ghost for TAV");
|
||||||
_ghost_group->lower_to_bottom();
|
_ghost_group->lower_to_bottom();
|
||||||
_ghost_group->show();
|
_ghost_group->show();
|
||||||
|
|
|
||||||
|
|
@ -59,7 +59,7 @@ namespace Gtk {
|
||||||
|
|
||||||
namespace ArdourCanvas {
|
namespace ArdourCanvas {
|
||||||
class Canvas;
|
class Canvas;
|
||||||
class Group;
|
class Layout;
|
||||||
class Item;
|
class Item;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -104,8 +104,8 @@ class TimeAxisView : public virtual AxisView
|
||||||
virtual void enter_internal_edit_mode () {}
|
virtual void enter_internal_edit_mode () {}
|
||||||
virtual void leave_internal_edit_mode () {}
|
virtual void leave_internal_edit_mode () {}
|
||||||
|
|
||||||
ArdourCanvas::Group* canvas_display () { return _canvas_display; }
|
ArdourCanvas::Layout* canvas_display () { return _canvas_display; }
|
||||||
ArdourCanvas::Group* ghost_group () { return _ghost_group; }
|
ArdourCanvas::Layout* ghost_group () { return _ghost_group; }
|
||||||
|
|
||||||
/** @return effective height (taking children into account) in canvas units, or
|
/** @return effective height (taking children into account) in canvas units, or
|
||||||
0 if this TimeAxisView has not yet been shown */
|
0 if this TimeAxisView has not yet been shown */
|
||||||
|
|
@ -212,15 +212,15 @@ class TimeAxisView : public virtual AxisView
|
||||||
std::string controls_base_selected_name;
|
std::string controls_base_selected_name;
|
||||||
Gtk::Menu* display_menu; /* The standard LHS Track control popup-menus */
|
Gtk::Menu* display_menu; /* The standard LHS Track control popup-menus */
|
||||||
TimeAxisView* parent;
|
TimeAxisView* parent;
|
||||||
ArdourCanvas::Group* selection_group;
|
ArdourCanvas::Layout* selection_group;
|
||||||
ArdourCanvas::Group* _ghost_group;
|
ArdourCanvas::Layout* _ghost_group;
|
||||||
std::list<GhostRegion*> ghosts;
|
std::list<GhostRegion*> ghosts;
|
||||||
std::list<SelectionRect*> free_selection_rects;
|
std::list<SelectionRect*> free_selection_rects;
|
||||||
std::list<SelectionRect*> used_selection_rects;
|
std::list<SelectionRect*> used_selection_rects;
|
||||||
bool _hidden;
|
bool _hidden;
|
||||||
bool in_destructor;
|
bool in_destructor;
|
||||||
Gtk::Menu* _size_menu;
|
Gtk::Menu* _size_menu;
|
||||||
ArdourCanvas::Group* _canvas_display;
|
ArdourCanvas::Layout* _canvas_display;
|
||||||
double _y_position;
|
double _y_position;
|
||||||
PublicEditor& _editor;
|
PublicEditor& _editor;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -28,7 +28,7 @@
|
||||||
#include "gtkmm2ext/utils.h"
|
#include "gtkmm2ext/utils.h"
|
||||||
#include "gtkmm2ext/gui_thread.h"
|
#include "gtkmm2ext/gui_thread.h"
|
||||||
|
|
||||||
#include "canvas/group.h"
|
#include "canvas/layout.h"
|
||||||
#include "canvas/rectangle.h"
|
#include "canvas/rectangle.h"
|
||||||
#include "canvas/debug.h"
|
#include "canvas/debug.h"
|
||||||
#include "canvas/text.h"
|
#include "canvas/text.h"
|
||||||
|
|
@ -119,7 +119,7 @@ TimeAxisViewItem::set_constant_heights ()
|
||||||
* @param automation true if this is an automation region view
|
* @param automation true if this is an automation region view
|
||||||
*/
|
*/
|
||||||
TimeAxisViewItem::TimeAxisViewItem(
|
TimeAxisViewItem::TimeAxisViewItem(
|
||||||
const string & it_name, ArdourCanvas::Group& parent, TimeAxisView& tv, double spu, uint32_t base_color,
|
const string & it_name, ArdourCanvas::Item& parent, TimeAxisView& tv, double spu, uint32_t base_color,
|
||||||
framepos_t start, framecnt_t duration, bool recording, bool automation, Visibility vis
|
framepos_t start, framecnt_t duration, bool recording, bool automation, Visibility vis
|
||||||
)
|
)
|
||||||
: trackview (tv)
|
: trackview (tv)
|
||||||
|
|
@ -149,7 +149,7 @@ TimeAxisViewItem::TimeAxisViewItem (const TimeAxisViewItem& other)
|
||||||
{
|
{
|
||||||
/* share the other's parent, but still create a new group */
|
/* share the other's parent, but still create a new group */
|
||||||
|
|
||||||
ArdourCanvas::Group* parent = other.group->parent();
|
ArdourCanvas::Item* parent = other.group->parent();
|
||||||
|
|
||||||
_selected = other._selected;
|
_selected = other._selected;
|
||||||
|
|
||||||
|
|
@ -158,11 +158,11 @@ TimeAxisViewItem::TimeAxisViewItem (const TimeAxisViewItem& other)
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
TimeAxisViewItem::init (ArdourCanvas::Group* parent, double fpp, uint32_t base_color,
|
TimeAxisViewItem::init (ArdourCanvas::Item* parent, double fpp, uint32_t base_color,
|
||||||
framepos_t start, framepos_t duration, Visibility vis,
|
framepos_t start, framepos_t duration, Visibility vis,
|
||||||
bool wide, bool high)
|
bool wide, bool high)
|
||||||
{
|
{
|
||||||
group = new ArdourCanvas::Group (parent);
|
group = new ArdourCanvas::Layout (parent);
|
||||||
CANVAS_DEBUG_NAME (group, string_compose ("TAVI group for %1", get_item_name()));
|
CANVAS_DEBUG_NAME (group, string_compose ("TAVI group for %1", get_item_name()));
|
||||||
group->Event.connect (sigc::mem_fun (*this, &TimeAxisViewItem::canvas_group_event));
|
group->Event.connect (sigc::mem_fun (*this, &TimeAxisViewItem::canvas_group_event));
|
||||||
|
|
||||||
|
|
@ -646,7 +646,7 @@ TimeAxisViewItem::get_canvas_frame()
|
||||||
return frame;
|
return frame;
|
||||||
}
|
}
|
||||||
|
|
||||||
ArdourCanvas::Group*
|
ArdourCanvas::Item*
|
||||||
TimeAxisViewItem::get_canvas_group()
|
TimeAxisViewItem::get_canvas_group()
|
||||||
{
|
{
|
||||||
return group;
|
return group;
|
||||||
|
|
|
||||||
|
|
@ -33,7 +33,7 @@ namespace ArdourCanvas {
|
||||||
class Pixbuf;
|
class Pixbuf;
|
||||||
class Rectangle;
|
class Rectangle;
|
||||||
class Item;
|
class Item;
|
||||||
class Group;
|
class Layout;
|
||||||
class Text;
|
class Text;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -79,7 +79,7 @@ class TimeAxisViewItem : public Selectable, public PBD::ScopedConnectionList
|
||||||
uint32_t get_fill_color () const;
|
uint32_t get_fill_color () const;
|
||||||
|
|
||||||
ArdourCanvas::Item* get_canvas_frame();
|
ArdourCanvas::Item* get_canvas_frame();
|
||||||
ArdourCanvas::Group* get_canvas_group();
|
ArdourCanvas::Item* get_canvas_group();
|
||||||
ArdourCanvas::Item* get_name_highlight();
|
ArdourCanvas::Item* get_name_highlight();
|
||||||
|
|
||||||
virtual void set_samples_per_pixel (double);
|
virtual void set_samples_per_pixel (double);
|
||||||
|
|
@ -170,12 +170,12 @@ class TimeAxisViewItem : public Selectable, public PBD::ScopedConnectionList
|
||||||
};
|
};
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
TimeAxisViewItem (const std::string &, ArdourCanvas::Group&, TimeAxisView&, double, uint32_t fill_color,
|
TimeAxisViewItem (const std::string &, ArdourCanvas::Item&, TimeAxisView&, double, uint32_t fill_color,
|
||||||
framepos_t, framecnt_t, bool recording = false, bool automation = false, Visibility v = Visibility (0));
|
framepos_t, framecnt_t, bool recording = false, bool automation = false, Visibility v = Visibility (0));
|
||||||
|
|
||||||
TimeAxisViewItem (const TimeAxisViewItem&);
|
TimeAxisViewItem (const TimeAxisViewItem&);
|
||||||
|
|
||||||
void init (ArdourCanvas::Group*, double, uint32_t, framepos_t, framepos_t, Visibility, bool, bool);
|
void init (ArdourCanvas::Item*, double, uint32_t, framepos_t, framepos_t, Visibility, bool, bool);
|
||||||
|
|
||||||
virtual bool canvas_group_event (GdkEvent*);
|
virtual bool canvas_group_event (GdkEvent*);
|
||||||
|
|
||||||
|
|
@ -240,7 +240,7 @@ class TimeAxisViewItem : public Selectable, public PBD::ScopedConnectionList
|
||||||
bool high_enough_for_name;
|
bool high_enough_for_name;
|
||||||
bool rect_visible;
|
bool rect_visible;
|
||||||
|
|
||||||
ArdourCanvas::Group* group;
|
ArdourCanvas::Layout* group;
|
||||||
ArdourCanvas::Rectangle* vestigial_frame;
|
ArdourCanvas::Rectangle* vestigial_frame;
|
||||||
ArdourCanvas::Rectangle* frame;
|
ArdourCanvas::Rectangle* frame;
|
||||||
ArdourCanvas::Text* name_text;
|
ArdourCanvas::Text* name_text;
|
||||||
|
|
|
||||||
|
|
@ -23,6 +23,7 @@
|
||||||
#include "ardour/profile.h"
|
#include "ardour/profile.h"
|
||||||
|
|
||||||
#include "canvas/debug.h"
|
#include "canvas/debug.h"
|
||||||
|
#include "canvas/scroll_group.h"
|
||||||
|
|
||||||
#include "ardour_ui.h"
|
#include "ardour_ui.h"
|
||||||
#include "audio_clock.h"
|
#include "audio_clock.h"
|
||||||
|
|
|
||||||
|
|
@ -24,7 +24,7 @@
|
||||||
#include "video_image_frame.h"
|
#include "video_image_frame.h"
|
||||||
#include "public_editor.h"
|
#include "public_editor.h"
|
||||||
#include "utils.h"
|
#include "utils.h"
|
||||||
#include "canvas/group.h"
|
#include "canvas/layout.h"
|
||||||
#include "utils_videotl.h"
|
#include "utils_videotl.h"
|
||||||
|
|
||||||
#include <gtkmm2ext/utils.h>
|
#include <gtkmm2ext/utils.h>
|
||||||
|
|
@ -43,7 +43,7 @@ static void freedata_cb (uint8_t *d, void* /*arg*/) {
|
||||||
free (d);
|
free (d);
|
||||||
}
|
}
|
||||||
|
|
||||||
VideoImageFrame::VideoImageFrame (PublicEditor& ed, ArdourCanvas::Group& parent, int w, int h, std::string vsurl, std::string vfn)
|
VideoImageFrame::VideoImageFrame (PublicEditor& ed, ArdourCanvas::Layout& parent, int w, int h, std::string vsurl, std::string vfn)
|
||||||
: editor (ed)
|
: editor (ed)
|
||||||
, _parent(&parent)
|
, _parent(&parent)
|
||||||
, clip_width(w)
|
, clip_width(w)
|
||||||
|
|
|
||||||
|
|
@ -32,7 +32,7 @@
|
||||||
#include "ardour/ardour.h"
|
#include "ardour/ardour.h"
|
||||||
#include "pbd/signals.h"
|
#include "pbd/signals.h"
|
||||||
|
|
||||||
#include "canvas/group.h"
|
#include "canvas/layout.h"
|
||||||
#include "canvas/pixbuf.h"
|
#include "canvas/pixbuf.h"
|
||||||
#include "canvas/image.h"
|
#include "canvas/image.h"
|
||||||
|
|
||||||
|
|
@ -49,7 +49,7 @@ class PublicEditor;
|
||||||
class VideoImageFrame : public sigc::trackable
|
class VideoImageFrame : public sigc::trackable
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
VideoImageFrame (PublicEditor&, ArdourCanvas::Group&, int, int, std::string, std::string);
|
VideoImageFrame (PublicEditor&, ArdourCanvas::Layout&, int, int, std::string, std::string);
|
||||||
virtual ~VideoImageFrame ();
|
virtual ~VideoImageFrame ();
|
||||||
|
|
||||||
void set_position (framepos_t);
|
void set_position (framepos_t);
|
||||||
|
|
@ -69,7 +69,7 @@ class VideoImageFrame : public sigc::trackable
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
PublicEditor& editor;
|
PublicEditor& editor;
|
||||||
ArdourCanvas::Group *_parent;
|
ArdourCanvas::Layout *_parent;
|
||||||
ArdourCanvas::Image *image;
|
ArdourCanvas::Image *image;
|
||||||
boost::shared_ptr<ArdourCanvas::Image::Data> img;
|
boost::shared_ptr<ArdourCanvas::Image::Data> img;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -51,7 +51,7 @@ using namespace PBD;
|
||||||
using namespace Timecode;
|
using namespace Timecode;
|
||||||
using namespace VideoUtils;
|
using namespace VideoUtils;
|
||||||
|
|
||||||
VideoTimeLine::VideoTimeLine (PublicEditor *ed, ArdourCanvas::Group *vbg, int initial_height)
|
VideoTimeLine::VideoTimeLine (PublicEditor *ed, ArdourCanvas::Layout *vbg, int initial_height)
|
||||||
: editor (ed)
|
: editor (ed)
|
||||||
, videotl_group(vbg)
|
, videotl_group(vbg)
|
||||||
, bar_height(initial_height)
|
, bar_height(initial_height)
|
||||||
|
|
|
||||||
|
|
@ -29,7 +29,7 @@
|
||||||
#include "video_image_frame.h"
|
#include "video_image_frame.h"
|
||||||
#include "video_monitor.h"
|
#include "video_monitor.h"
|
||||||
#include "pbd/signals.h"
|
#include "pbd/signals.h"
|
||||||
#include "canvas/group.h"
|
#include "canvas/layout.h"
|
||||||
|
|
||||||
namespace ARDOUR {
|
namespace ARDOUR {
|
||||||
class Session;
|
class Session;
|
||||||
|
|
@ -55,7 +55,7 @@ class PublicEditor;
|
||||||
class VideoTimeLine : public sigc::trackable, public ARDOUR::SessionHandlePtr, public PBD::ScopedConnectionList, public PBD::StatefulDestructible
|
class VideoTimeLine : public sigc::trackable, public ARDOUR::SessionHandlePtr, public PBD::ScopedConnectionList, public PBD::StatefulDestructible
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
VideoTimeLine (PublicEditor*, ArdourCanvas::Group*, int);
|
VideoTimeLine (PublicEditor*, ArdourCanvas::Layout*, int);
|
||||||
virtual ~VideoTimeLine ();
|
virtual ~VideoTimeLine ();
|
||||||
|
|
||||||
void set_session (ARDOUR::Session *s);
|
void set_session (ARDOUR::Session *s);
|
||||||
|
|
@ -102,7 +102,7 @@ class VideoTimeLine : public sigc::trackable, public ARDOUR::SessionHandlePtr, p
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
PublicEditor *editor;
|
PublicEditor *editor;
|
||||||
ArdourCanvas::Group *videotl_group;
|
ArdourCanvas::Layout *videotl_group;
|
||||||
int bar_height;
|
int bar_height;
|
||||||
|
|
||||||
std::string _xjadeo_bin;
|
std::string _xjadeo_bin;
|
||||||
|
|
|
||||||
|
|
@ -39,8 +39,8 @@ Arc::Arc (Canvas* c)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
Arc::Arc (Group* g)
|
Arc::Arc (Item* parent)
|
||||||
: Item (g)
|
: Item (parent)
|
||||||
, _radius (0.0)
|
, _radius (0.0)
|
||||||
, _arc_degrees (0.0)
|
, _arc_degrees (0.0)
|
||||||
, _start_degrees (0.0)
|
, _start_degrees (0.0)
|
||||||
|
|
|
||||||
|
|
@ -35,13 +35,13 @@ using namespace ArdourCanvas;
|
||||||
* @param parent Parent canvas group.
|
* @param parent Parent canvas group.
|
||||||
*/
|
*/
|
||||||
Arrow::Arrow (Canvas* c)
|
Arrow::Arrow (Canvas* c)
|
||||||
: Group (c)
|
: Layout (c)
|
||||||
{
|
{
|
||||||
setup ();
|
setup ();
|
||||||
}
|
}
|
||||||
|
|
||||||
Arrow::Arrow (Group* g)
|
Arrow::Arrow (Item* parent)
|
||||||
: Group (g)
|
: Layout (parent)
|
||||||
{
|
{
|
||||||
setup ();
|
setup ();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -392,15 +392,14 @@ GtkCanvas::pick_current_item (Duple const & point, int state)
|
||||||
|
|
||||||
for (i = items.begin(); i != items.end(); ++i) {
|
for (i = items.begin(); i != items.end(); ++i) {
|
||||||
|
|
||||||
Item const * new_item = *i;
|
Item const * possible_item = *i;
|
||||||
|
|
||||||
/* We ignore invisible items, groups and items that ignore events */
|
/* We ignore invisible items, containers and items that ignore events */
|
||||||
|
|
||||||
if (!new_item->visible() || new_item->ignore_events() || dynamic_cast<Group const *>(new_item) != 0) {
|
if (!possible_item->visible() || possible_item->ignore_events() || dynamic_cast<ArdourCanvas::Container const *>(possible_item) != 0) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
within_items.push_front (possible_item);
|
||||||
within_items.push_front (new_item);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (within_items.empty()) {
|
if (within_items.empty()) {
|
||||||
|
|
|
||||||
|
|
@ -32,7 +32,7 @@ class LIBCANVAS_API Arc : public Item
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
Arc (Canvas*);
|
Arc (Canvas*);
|
||||||
Arc (Group*);
|
Arc (Item*);
|
||||||
|
|
||||||
void render (Rect const & area, Cairo::RefPtr<Cairo::Context>) const;
|
void render (Rect const & area, Cairo::RefPtr<Cairo::Context>) const;
|
||||||
void compute_bounding_box () const;
|
void compute_bounding_box () const;
|
||||||
|
|
|
||||||
|
|
@ -26,8 +26,7 @@
|
||||||
#define __CANVAS_ARROW_H__
|
#define __CANVAS_ARROW_H__
|
||||||
|
|
||||||
#include "canvas/visibility.h"
|
#include "canvas/visibility.h"
|
||||||
|
#include "canvas/layout.h"
|
||||||
#include "canvas/group.h"
|
|
||||||
|
|
||||||
namespace ArdourCanvas {
|
namespace ArdourCanvas {
|
||||||
|
|
||||||
|
|
@ -46,11 +45,11 @@ class Polygon;
|
||||||
* to draw lines at any angle.
|
* to draw lines at any angle.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
class LIBCANVAS_API Arrow : public Group
|
class LIBCANVAS_API Arrow : public Layout
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
Arrow (Canvas*);
|
Arrow (Canvas*);
|
||||||
Arrow (Group*);
|
Arrow (Item*);
|
||||||
|
|
||||||
void set_show_head (int, bool);
|
void set_show_head (int, bool);
|
||||||
void set_head_outward (int, bool);
|
void set_head_outward (int, bool);
|
||||||
|
|
|
||||||
|
|
@ -42,7 +42,7 @@ namespace ArdourCanvas
|
||||||
{
|
{
|
||||||
|
|
||||||
class Rect;
|
class Rect;
|
||||||
class Group;
|
class Item;
|
||||||
class ScrollGroup;
|
class ScrollGroup;
|
||||||
|
|
||||||
/** The base class for our different types of canvas.
|
/** The base class for our different types of canvas.
|
||||||
|
|
@ -78,7 +78,7 @@ public:
|
||||||
void render (Rect const &, Cairo::RefPtr<Cairo::Context> const &) const;
|
void render (Rect const &, Cairo::RefPtr<Cairo::Context> const &) const;
|
||||||
|
|
||||||
/** @return root group */
|
/** @return root group */
|
||||||
Group* root () {
|
Item* root () {
|
||||||
return &_root;
|
return &_root;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -122,8 +122,8 @@ public:
|
||||||
protected:
|
protected:
|
||||||
void queue_draw_item_area (Item *, Rect);
|
void queue_draw_item_area (Item *, Rect);
|
||||||
|
|
||||||
/** our root group */
|
/** our root item */
|
||||||
RootGroup _root;
|
Root _root;
|
||||||
|
|
||||||
virtual void pick_current_item (int state) = 0;
|
virtual void pick_current_item (int state) = 0;
|
||||||
virtual void pick_current_item (Duple const &, int state) = 0;
|
virtual void pick_current_item (Duple const &, int state) = 0;
|
||||||
|
|
|
||||||
|
|
@ -29,7 +29,7 @@ class LIBCANVAS_API Circle : public Arc
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
Circle (Canvas*);
|
Circle (Canvas*);
|
||||||
Circle (Group*);
|
Circle (Item*);
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -33,7 +33,7 @@ class LIBCANVAS_API Curve : public PolyItem, public InterpolatedCurve
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
Curve (Canvas*);
|
Curve (Canvas*);
|
||||||
Curve (Group*);
|
Curve (Item*);
|
||||||
|
|
||||||
enum CurveFill {
|
enum CurveFill {
|
||||||
None,
|
None,
|
||||||
|
|
|
||||||
|
|
@ -18,8 +18,8 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "canvas/visibility.h"
|
#include "canvas/visibility.h"
|
||||||
#include "canvas/group.h"
|
|
||||||
#include "canvas/types.h"
|
#include "canvas/types.h"
|
||||||
|
#include "canvas/layout.h"
|
||||||
|
|
||||||
namespace ArdourCanvas {
|
namespace ArdourCanvas {
|
||||||
|
|
||||||
|
|
@ -27,11 +27,11 @@ class Text;
|
||||||
class Line;
|
class Line;
|
||||||
class Rectangle;
|
class Rectangle;
|
||||||
|
|
||||||
class LIBCANVAS_API Flag : public Group
|
class LIBCANVAS_API Flag : public Layout
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
Flag (Canvas *, Distance, Color, Color, Duple);
|
Flag (Canvas *, Distance, Color, Color, Duple);
|
||||||
Flag (Group*, Distance, Color, Color, Duple);
|
Flag (Item*, Distance, Color, Color, Duple);
|
||||||
|
|
||||||
void set_text (std::string const &);
|
void set_text (std::string const &);
|
||||||
void set_height (Distance);
|
void set_height (Distance);
|
||||||
|
|
|
||||||
|
|
@ -33,6 +33,7 @@ namespace ArdourCanvas {
|
||||||
class GtkCanvasViewport;
|
class GtkCanvasViewport;
|
||||||
class Text;
|
class Text;
|
||||||
class Curve;
|
class Curve;
|
||||||
|
class ScrollGroup;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* __canvas_canvas_fwd_h__ */
|
#endif /* __canvas_canvas_fwd_h__ */
|
||||||
|
|
|
||||||
|
|
@ -1,79 +0,0 @@
|
||||||
/*
|
|
||||||
Copyright (C) 2011-2013 Paul Davis
|
|
||||||
Author: Carl Hetherington <cth@carlh.net>
|
|
||||||
|
|
||||||
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_GROUP_H__
|
|
||||||
#define __CANVAS_GROUP_H__
|
|
||||||
|
|
||||||
#include <list>
|
|
||||||
#include <vector>
|
|
||||||
|
|
||||||
#include "canvas/visibility.h"
|
|
||||||
#include "canvas/item.h"
|
|
||||||
#include "canvas/types.h"
|
|
||||||
#include "canvas/lookup_table.h"
|
|
||||||
|
|
||||||
namespace ArdourCanvas {
|
|
||||||
|
|
||||||
class LIBCANVAS_API Group : public Item
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
Group (Canvas*);
|
|
||||||
Group (Group*);
|
|
||||||
Group (Group*, Duple const& positon);
|
|
||||||
virtual ~Group ();
|
|
||||||
|
|
||||||
void render (Rect const &, Cairo::RefPtr<Cairo::Context>) const;
|
|
||||||
virtual void compute_bounding_box () const;
|
|
||||||
|
|
||||||
void add (Item *);
|
|
||||||
void remove (Item *);
|
|
||||||
void clear (bool with_delete = false);
|
|
||||||
std::list<Item*> const & items () const {
|
|
||||||
return _items;
|
|
||||||
}
|
|
||||||
|
|
||||||
void raise_child_to_top (Item *);
|
|
||||||
void raise_child (Item *, int);
|
|
||||||
void lower_child_to_bottom (Item *);
|
|
||||||
void child_changed ();
|
|
||||||
|
|
||||||
void scroll_to (Duple const& d);
|
|
||||||
|
|
||||||
void add_items_at_point (Duple, std::vector<Item const *> &) const;
|
|
||||||
|
|
||||||
void dump (std::ostream&) const;
|
|
||||||
|
|
||||||
static int default_items_per_cell;
|
|
||||||
|
|
||||||
private:
|
|
||||||
friend class ::OptimizingLookupTableTest;
|
|
||||||
|
|
||||||
void ensure_lut () const;
|
|
||||||
void invalidate_lut () const;
|
|
||||||
void clear_items (bool with_delete);
|
|
||||||
|
|
||||||
/* our items, from lowest to highest in the stack */
|
|
||||||
std::list<Item*> _items;
|
|
||||||
|
|
||||||
mutable LookupTable* _lut;
|
|
||||||
};
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
@ -35,7 +35,7 @@ class LIBCANVAS_API Image : public Item
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
Image (Canvas *, Cairo::Format, int width, int height);
|
Image (Canvas *, Cairo::Format, int width, int height);
|
||||||
Image (Group*, Cairo::Format, int width, int height);
|
Image (Item*, Cairo::Format, int width, int height);
|
||||||
|
|
||||||
struct Data {
|
struct Data {
|
||||||
Data (uint8_t *d, int w, int h, int s, Cairo::Format fmt)
|
Data (uint8_t *d, int w, int h, int s, Cairo::Format fmt)
|
||||||
|
|
|
||||||
|
|
@ -32,12 +32,12 @@
|
||||||
#include "canvas/types.h"
|
#include "canvas/types.h"
|
||||||
#include "canvas/fill.h"
|
#include "canvas/fill.h"
|
||||||
#include "canvas/outline.h"
|
#include "canvas/outline.h"
|
||||||
|
#include "canvas/lookup_table.h"
|
||||||
|
|
||||||
namespace ArdourCanvas
|
namespace ArdourCanvas
|
||||||
{
|
{
|
||||||
|
|
||||||
class Canvas;
|
class Canvas;
|
||||||
class Group;
|
|
||||||
class Rect;
|
class Rect;
|
||||||
class ScrollGroup;
|
class ScrollGroup;
|
||||||
|
|
||||||
|
|
@ -56,8 +56,8 @@ class LIBCANVAS_API Item : public Fill, public Outline
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
Item (Canvas *);
|
Item (Canvas *);
|
||||||
Item (Group *);
|
Item (Item *);
|
||||||
Item (Group *, Duple const& p);
|
Item (Item *, Duple const& p);
|
||||||
virtual ~Item ();
|
virtual ~Item ();
|
||||||
|
|
||||||
void redraw () const;
|
void redraw () const;
|
||||||
|
|
@ -80,13 +80,11 @@ public:
|
||||||
*
|
*
|
||||||
* Note that Item::add_items_at_window_point() is only intended to be
|
* Note that Item::add_items_at_window_point() is only intended to be
|
||||||
* called on items already looked up in a LookupTable (i.e. by a
|
* called on items already looked up in a LookupTable (i.e. by a
|
||||||
* parent group) and thus known to cover @param point already.
|
* parent) and thus known to cover @param point already.
|
||||||
*
|
*
|
||||||
* Derived classes may add more items than themselves (e.g. Group).
|
* Derived classes may add more items than themselves (e.g. containers).
|
||||||
*/
|
*/
|
||||||
virtual void add_items_at_point (Duple /*point*/, std::vector<Item const *>& items) const {
|
virtual void add_items_at_point (Duple /*point*/, std::vector<Item const *>& items) const;
|
||||||
items.push_back (this);
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual bool covers (Duple const &) const;
|
virtual bool covers (Duple const &) const;
|
||||||
|
|
||||||
|
|
@ -97,10 +95,10 @@ public:
|
||||||
void ungrab ();
|
void ungrab ();
|
||||||
|
|
||||||
void unparent ();
|
void unparent ();
|
||||||
void reparent (Group *);
|
void reparent (Item *);
|
||||||
|
|
||||||
/** @return Parent group, or 0 if this is the root group */
|
/** @return Parent group, or 0 if this is the root group */
|
||||||
Group* parent () const {
|
Item* parent () const {
|
||||||
return _parent;
|
return _parent;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -124,8 +122,6 @@ public:
|
||||||
void set_y_position (Coord);
|
void set_y_position (Coord);
|
||||||
void move (Duple);
|
void move (Duple);
|
||||||
|
|
||||||
virtual void scroll_to (Duple const&) {}
|
|
||||||
|
|
||||||
/** @return Position of this item in the parent's coordinates */
|
/** @return Position of this item in the parent's coordinates */
|
||||||
Duple position () const {
|
Duple position () const {
|
||||||
return _position;
|
return _position;
|
||||||
|
|
@ -188,6 +184,21 @@ public:
|
||||||
void set_data (std::string const &, void *);
|
void set_data (std::string const &, void *);
|
||||||
void* get_data (std::string const &) const;
|
void* get_data (std::string const &) const;
|
||||||
|
|
||||||
|
/* nested item ("grouping") API */
|
||||||
|
void add (Item *);
|
||||||
|
void remove (Item *);
|
||||||
|
void clear (bool with_delete = false);
|
||||||
|
std::list<Item*> const & items () const {
|
||||||
|
return _items;
|
||||||
|
}
|
||||||
|
void raise_child_to_top (Item *);
|
||||||
|
void raise_child (Item *, int);
|
||||||
|
void lower_child_to_bottom (Item *);
|
||||||
|
void child_changed ();
|
||||||
|
|
||||||
|
static int default_items_per_cell;
|
||||||
|
|
||||||
|
|
||||||
/* This is a sigc++ signal because it is solely
|
/* This is a sigc++ signal because it is solely
|
||||||
concerned with GUI stuff and is thus single-threaded
|
concerned with GUI stuff and is thus single-threaded
|
||||||
*/
|
*/
|
||||||
|
|
@ -243,7 +254,7 @@ protected:
|
||||||
|
|
||||||
Canvas* _canvas;
|
Canvas* _canvas;
|
||||||
/** parent group; may be 0 if we are the root group or if we have been unparent()ed */
|
/** parent group; may be 0 if we are the root group or if we have been unparent()ed */
|
||||||
Group* _parent;
|
Item* _parent;
|
||||||
/** scroll parent group; may be 0 if we are the root group or if we have been unparent()ed */
|
/** scroll parent group; may be 0 if we are the root group or if we have been unparent()ed */
|
||||||
ScrollGroup* _scroll_parent;
|
ScrollGroup* _scroll_parent;
|
||||||
/** position of this item in parent coordinates */
|
/** position of this item in parent coordinates */
|
||||||
|
|
@ -261,6 +272,18 @@ protected:
|
||||||
/* XXX: this is a bit grubby */
|
/* XXX: this is a bit grubby */
|
||||||
std::map<std::string, void *> _data;
|
std::map<std::string, void *> _data;
|
||||||
|
|
||||||
|
/* nesting ("grouping") API */
|
||||||
|
|
||||||
|
void invalidate_lut () const;
|
||||||
|
void clear_items (bool with_delete);
|
||||||
|
|
||||||
|
void ensure_lut () const;
|
||||||
|
mutable LookupTable* _lut;
|
||||||
|
/* our items, from lowest to highest in the stack */
|
||||||
|
std::list<Item*> _items;
|
||||||
|
|
||||||
|
void add_child_bounding_boxes() const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void init ();
|
void init ();
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -31,7 +31,7 @@ class LIBCANVAS_API Line : public Item
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
Line (Canvas*);
|
Line (Canvas*);
|
||||||
Line (Group*);
|
Line (Item*);
|
||||||
|
|
||||||
void render (Rect const & area, Cairo::RefPtr<Cairo::Context>) const;
|
void render (Rect const & area, Cairo::RefPtr<Cairo::Context>) const;
|
||||||
void compute_bounding_box () const;
|
void compute_bounding_box () const;
|
||||||
|
|
|
||||||
|
|
@ -36,7 +36,7 @@ public:
|
||||||
};
|
};
|
||||||
|
|
||||||
LineSet (Canvas*, Orientation o = Vertical);
|
LineSet (Canvas*, Orientation o = Vertical);
|
||||||
LineSet (Group*, Orientation o = Vertical);
|
LineSet (Item*, Orientation o = Vertical);
|
||||||
|
|
||||||
void compute_bounding_box () const;
|
void compute_bounding_box () const;
|
||||||
void render (Rect const & area, Cairo::RefPtr<Cairo::Context>) const;
|
void render (Rect const & area, Cairo::RefPtr<Cairo::Context>) const;
|
||||||
|
|
|
||||||
|
|
@ -31,12 +31,11 @@ class OptimizingLookupTableTest;
|
||||||
namespace ArdourCanvas {
|
namespace ArdourCanvas {
|
||||||
|
|
||||||
class Item;
|
class Item;
|
||||||
class Group;
|
|
||||||
|
|
||||||
class LIBCANVAS_API LookupTable
|
class LIBCANVAS_API LookupTable
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
LookupTable (Group const &);
|
LookupTable (Item const &);
|
||||||
virtual ~LookupTable ();
|
virtual ~LookupTable ();
|
||||||
|
|
||||||
virtual std::vector<Item*> get (Rect const &) = 0;
|
virtual std::vector<Item*> get (Rect const &) = 0;
|
||||||
|
|
@ -45,13 +44,13 @@ public:
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
Group const & _group;
|
Item const & _item;
|
||||||
};
|
};
|
||||||
|
|
||||||
class LIBCANVAS_API DumbLookupTable : public LookupTable
|
class LIBCANVAS_API DumbLookupTable : public LookupTable
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
DumbLookupTable (Group const &);
|
DumbLookupTable (Item const &);
|
||||||
|
|
||||||
std::vector<Item*> get (Rect const &);
|
std::vector<Item*> get (Rect const &);
|
||||||
std::vector<Item*> items_at_point (Duple const &) const;
|
std::vector<Item*> items_at_point (Duple const &) const;
|
||||||
|
|
@ -61,7 +60,7 @@ public:
|
||||||
class LIBCANVAS_API OptimizingLookupTable : public LookupTable
|
class LIBCANVAS_API OptimizingLookupTable : public LookupTable
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
OptimizingLookupTable (Group const &, int);
|
OptimizingLookupTable (Item const &, int);
|
||||||
~OptimizingLookupTable ();
|
~OptimizingLookupTable ();
|
||||||
std::vector<Item*> get (Rect const &);
|
std::vector<Item*> get (Rect const &);
|
||||||
std::vector<Item*> items_at_point (Duple const &) const;
|
std::vector<Item*> items_at_point (Duple const &) const;
|
||||||
|
|
|
||||||
|
|
@ -35,7 +35,7 @@ class LIBCANVAS_API Pixbuf : public Item
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
Pixbuf (Canvas*);
|
Pixbuf (Canvas*);
|
||||||
Pixbuf (Group*);
|
Pixbuf (Item*);
|
||||||
|
|
||||||
void render (Rect const &, Cairo::RefPtr<Cairo::Context>) const;
|
void render (Rect const &, Cairo::RefPtr<Cairo::Context>) const;
|
||||||
void compute_bounding_box () const;
|
void compute_bounding_box () const;
|
||||||
|
|
|
||||||
|
|
@ -30,7 +30,7 @@ class LIBCANVAS_API PolyItem : public Item
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
PolyItem (Canvas*);
|
PolyItem (Canvas*);
|
||||||
PolyItem (Group*);
|
PolyItem (Item*);
|
||||||
|
|
||||||
void compute_bounding_box () const;
|
void compute_bounding_box () const;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -30,7 +30,7 @@ class LIBCANVAS_API PolyLine : public PolyItem
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
PolyLine (Canvas*);
|
PolyLine (Canvas*);
|
||||||
PolyLine (Group*);
|
PolyLine (Item*);
|
||||||
|
|
||||||
void render (Rect const & area, Cairo::RefPtr<Cairo::Context>) const;
|
void render (Rect const & area, Cairo::RefPtr<Cairo::Context>) const;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -31,7 +31,7 @@ class LIBCANVAS_API Polygon : public PolyItem
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
Polygon (Canvas*);
|
Polygon (Canvas*);
|
||||||
Polygon (Group*);
|
Polygon (Item*);
|
||||||
virtual ~Polygon();
|
virtual ~Polygon();
|
||||||
|
|
||||||
void render (Rect const & area, Cairo::RefPtr<Cairo::Context>) const;
|
void render (Rect const & area, Cairo::RefPtr<Cairo::Context>) const;
|
||||||
|
|
|
||||||
|
|
@ -34,8 +34,8 @@ class LIBCANVAS_API Rectangle : public Item
|
||||||
public:
|
public:
|
||||||
Rectangle (Canvas*);
|
Rectangle (Canvas*);
|
||||||
Rectangle (Canvas*, Rect const &);
|
Rectangle (Canvas*, Rect const &);
|
||||||
Rectangle (Group*);
|
Rectangle (Item*);
|
||||||
Rectangle (Group*, Rect const &);
|
Rectangle (Item*, Rect const &);
|
||||||
|
|
||||||
void render (Rect const &, Cairo::RefPtr<Cairo::Context>) const;
|
void render (Rect const &, Cairo::RefPtr<Cairo::Context>) const;
|
||||||
void compute_bounding_box () const;
|
void compute_bounding_box () const;
|
||||||
|
|
|
||||||
|
|
@ -21,19 +21,18 @@
|
||||||
#define __CANVAS_ROOT_GROUP_H__
|
#define __CANVAS_ROOT_GROUP_H__
|
||||||
|
|
||||||
#include "canvas/visibility.h"
|
#include "canvas/visibility.h"
|
||||||
#include "canvas/group.h"
|
#include "canvas/layout.h"
|
||||||
|
|
||||||
namespace ArdourCanvas {
|
namespace ArdourCanvas {
|
||||||
|
|
||||||
class LIBCANVAS_API RootGroup : public Group
|
class LIBCANVAS_API Root : public Layout
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
friend class Canvas;
|
friend class Canvas;
|
||||||
|
|
||||||
RootGroup (Canvas *);
|
Root (Canvas *);
|
||||||
|
|
||||||
void compute_bounding_box () const;
|
void compute_bounding_box () const;
|
||||||
void child_changed ();
|
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -57,8 +57,8 @@ public:
|
||||||
|
|
||||||
Ruler (Canvas*, const Metric& m);
|
Ruler (Canvas*, const Metric& m);
|
||||||
Ruler (Canvas*, const Metric& m, Rect const&);
|
Ruler (Canvas*, const Metric& m, Rect const&);
|
||||||
Ruler (Group*, const Metric& m);
|
Ruler (Item*, const Metric& m);
|
||||||
Ruler (Group*, const Metric& m, Rect const&);
|
Ruler (Item*, const Metric& m, Rect const&);
|
||||||
|
|
||||||
void set_range (double lower, double upper);
|
void set_range (double lower, double upper);
|
||||||
void set_font_description (Pango::FontDescription);
|
void set_font_description (Pango::FontDescription);
|
||||||
|
|
|
||||||
|
|
@ -19,11 +19,15 @@
|
||||||
#ifndef __CANVAS_SCROLL_GROUP_H__
|
#ifndef __CANVAS_SCROLL_GROUP_H__
|
||||||
#define __CANVAS_SCROLL_GROUP_H__
|
#define __CANVAS_SCROLL_GROUP_H__
|
||||||
|
|
||||||
#include "canvas/group.h"
|
#include "canvas/layout.h"
|
||||||
|
|
||||||
namespace ArdourCanvas {
|
namespace ArdourCanvas {
|
||||||
|
|
||||||
class LIBCANVAS_API ScrollGroup : public Group
|
/** A ScrollGroup has no contents of its own, but renders
|
||||||
|
* its children in a way that reflects the most recent
|
||||||
|
* call to its scroll_to() method.
|
||||||
|
*/
|
||||||
|
class LIBCANVAS_API ScrollGroup : public Layout
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
enum ScrollSensitivity {
|
enum ScrollSensitivity {
|
||||||
|
|
@ -32,7 +36,7 @@ class LIBCANVAS_API ScrollGroup : public Group
|
||||||
};
|
};
|
||||||
|
|
||||||
ScrollGroup (Canvas*, ScrollSensitivity);
|
ScrollGroup (Canvas*, ScrollSensitivity);
|
||||||
ScrollGroup (Group*, ScrollSensitivity);
|
ScrollGroup (Item*, ScrollSensitivity);
|
||||||
|
|
||||||
void scroll_to (Duple const& d);
|
void scroll_to (Duple const& d);
|
||||||
Duple scroll_offset() const { return _scroll_offset; }
|
Duple scroll_offset() const { return _scroll_offset; }
|
||||||
|
|
|
||||||
|
|
@ -50,7 +50,7 @@ class StatefulImage : public Item
|
||||||
public:
|
public:
|
||||||
|
|
||||||
StatefulImage (Canvas*, const XMLNode&);
|
StatefulImage (Canvas*, const XMLNode&);
|
||||||
StatefulImage (Group*, const XMLNode&);
|
StatefulImage (Item*, const XMLNode&);
|
||||||
~StatefulImage ();
|
~StatefulImage ();
|
||||||
|
|
||||||
bool set_state (States::size_type);
|
bool set_state (States::size_type);
|
||||||
|
|
|
||||||
|
|
@ -32,7 +32,7 @@ class LIBCANVAS_API Text : public Item
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
Text (Canvas*);
|
Text (Canvas*);
|
||||||
Text (Group*);
|
Text (Item*);
|
||||||
~Text();
|
~Text();
|
||||||
|
|
||||||
void render (Rect const &, Cairo::RefPtr<Cairo::Context>) const;
|
void render (Rect const &, Cairo::RefPtr<Cairo::Context>) const;
|
||||||
|
|
|
||||||
|
|
@ -92,7 +92,7 @@ public:
|
||||||
|
|
||||||
|
|
||||||
WaveView (Canvas *, boost::shared_ptr<ARDOUR::AudioRegion>);
|
WaveView (Canvas *, boost::shared_ptr<ARDOUR::AudioRegion>);
|
||||||
WaveView (Group*, boost::shared_ptr<ARDOUR::AudioRegion>);
|
WaveView (Item*, boost::shared_ptr<ARDOUR::AudioRegion>);
|
||||||
~WaveView ();
|
~WaveView ();
|
||||||
|
|
||||||
void render (Rect const & area, Cairo::RefPtr<Cairo::Context>) const;
|
void render (Rect const & area, Cairo::RefPtr<Cairo::Context>) const;
|
||||||
|
|
|
||||||
|
|
@ -32,7 +32,7 @@ class LIBCANVAS_API Widget : public Item
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
Widget (Canvas*, CairoWidget&);
|
Widget (Canvas*, CairoWidget&);
|
||||||
Widget (Group*, CairoWidget&);
|
Widget (Item*, CairoWidget&);
|
||||||
|
|
||||||
void render (Rect const &, Cairo::RefPtr<Cairo::Context>) const;
|
void render (Rect const &, Cairo::RefPtr<Cairo::Context>) const;
|
||||||
void compute_bounding_box () const;
|
void compute_bounding_box () const;
|
||||||
|
|
|
||||||
|
|
@ -36,8 +36,8 @@ public:
|
||||||
|
|
||||||
XFadeCurve (Canvas *);
|
XFadeCurve (Canvas *);
|
||||||
XFadeCurve (Canvas *, XFadePosition);
|
XFadeCurve (Canvas *, XFadePosition);
|
||||||
XFadeCurve (Group*);
|
XFadeCurve (Item*);
|
||||||
XFadeCurve (Group*, XFadePosition);
|
XFadeCurve (Item*, XFadePosition);
|
||||||
|
|
||||||
void set_fade_position (XFadePosition xfp) { _xfadeposition = xfp; }
|
void set_fade_position (XFadePosition xfp) { _xfadeposition = xfp; }
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -26,8 +26,8 @@ Circle::Circle (Canvas* c)
|
||||||
set_arc (360.0);
|
set_arc (360.0);
|
||||||
}
|
}
|
||||||
|
|
||||||
Circle::Circle (Group* g)
|
Circle::Circle (Item * parent)
|
||||||
: Arc (g)
|
: Arc (parent)
|
||||||
{
|
{
|
||||||
set_arc (360.0);
|
set_arc (360.0);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -36,8 +36,8 @@ Curve::Curve (Canvas* c)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
Curve::Curve (Group* g)
|
Curve::Curve (Item* parent)
|
||||||
: PolyItem (g)
|
: PolyItem (parent)
|
||||||
, n_samples (0)
|
, n_samples (0)
|
||||||
, points_per_segment (16)
|
, points_per_segment (16)
|
||||||
, curve_type (CatmullRomCentripetal)
|
, curve_type (CatmullRomCentripetal)
|
||||||
|
|
|
||||||
|
|
@ -26,15 +26,15 @@ using namespace std;
|
||||||
using namespace ArdourCanvas;
|
using namespace ArdourCanvas;
|
||||||
|
|
||||||
Flag::Flag (Canvas* canvas, Distance height, Color outline_color, Color fill_color, Duple position)
|
Flag::Flag (Canvas* canvas, Distance height, Color outline_color, Color fill_color, Duple position)
|
||||||
: Group (canvas)
|
: Layout (canvas)
|
||||||
, _outline_color (outline_color)
|
, _outline_color (outline_color)
|
||||||
, _fill_color (fill_color)
|
, _fill_color (fill_color)
|
||||||
{
|
{
|
||||||
setup (height, position);
|
setup (height, position);
|
||||||
}
|
}
|
||||||
|
|
||||||
Flag::Flag (Group* group, Distance height, Color outline_color, Color fill_color, Duple position)
|
Flag::Flag (Item* parent, Distance height, Color outline_color, Color fill_color, Duple position)
|
||||||
: Group (group)
|
: Layout (parent)
|
||||||
, _outline_color (outline_color)
|
, _outline_color (outline_color)
|
||||||
, _fill_color (fill_color)
|
, _fill_color (fill_color)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -1,395 +0,0 @@
|
||||||
/*
|
|
||||||
Copyright (C) 2011-2013 Paul Davis
|
|
||||||
Author: Carl Hetherington <cth@carlh.net>
|
|
||||||
|
|
||||||
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 <iostream>
|
|
||||||
#include <cairomm/context.h>
|
|
||||||
|
|
||||||
#include "pbd/stacktrace.h"
|
|
||||||
#include "pbd/compose.h"
|
|
||||||
|
|
||||||
#include "canvas/group.h"
|
|
||||||
#include "canvas/types.h"
|
|
||||||
#include "canvas/debug.h"
|
|
||||||
#include "canvas/item.h"
|
|
||||||
#include "canvas/canvas.h"
|
|
||||||
|
|
||||||
using namespace std;
|
|
||||||
using namespace ArdourCanvas;
|
|
||||||
|
|
||||||
int Group::default_items_per_cell = 64;
|
|
||||||
|
|
||||||
|
|
||||||
Group::Group (Canvas* canvas)
|
|
||||||
: Item (canvas)
|
|
||||||
, _lut (0)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
Group::Group (Group* group)
|
|
||||||
: Item (group)
|
|
||||||
, _lut (0)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
Group::Group (Group* group, Duple const& p)
|
|
||||||
: Item (group, p)
|
|
||||||
, _lut (0)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
Group::~Group ()
|
|
||||||
{
|
|
||||||
clear_items (true);
|
|
||||||
}
|
|
||||||
|
|
||||||
/** @param area Area to draw in window coordinates.
|
|
||||||
* @param context Context, set up with its origin at this group's position.
|
|
||||||
*/
|
|
||||||
void
|
|
||||||
Group::render (Rect const & area, Cairo::RefPtr<Cairo::Context> context) const
|
|
||||||
{
|
|
||||||
ensure_lut ();
|
|
||||||
vector<Item*> items = _lut->get (area);
|
|
||||||
|
|
||||||
#ifdef CANVAS_DEBUG
|
|
||||||
if (DEBUG_ENABLED(PBD::DEBUG::CanvasRender)) {
|
|
||||||
cerr << string_compose ("%1GROUP %2 @ %7 render %5 @ %6 %3 items out of %4\n",
|
|
||||||
_canvas->render_indent(), (name.empty() ? string ("[unnamed]") : name), items.size(), _items.size(), area, _position, this);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
++render_depth;
|
|
||||||
|
|
||||||
for (vector<Item*>::const_iterator i = items.begin(); i != items.end(); ++i) {
|
|
||||||
|
|
||||||
if (!(*i)->visible ()) {
|
|
||||||
#ifdef CANVAS_DEBUG
|
|
||||||
if (DEBUG_ENABLED(PBD::DEBUG::CanvasRender)) {
|
|
||||||
cerr << _canvas->render_indent() << "Item " << (*i)->whatami() << " [" << (*i)->name << "] invisible - skipped\n";
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
boost::optional<Rect> item_bbox = (*i)->bounding_box ();
|
|
||||||
|
|
||||||
if (!item_bbox) {
|
|
||||||
#ifdef CANVAS_DEBUG
|
|
||||||
if (DEBUG_ENABLED(PBD::DEBUG::CanvasRender)) {
|
|
||||||
cerr << _canvas->render_indent() << "Item " << (*i)->whatami() << " [" << (*i)->name << "] empty - skipped\n";
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
Rect item = (*i)->item_to_window (item_bbox.get());
|
|
||||||
boost::optional<Rect> d = item.intersection (area);
|
|
||||||
|
|
||||||
if (d) {
|
|
||||||
Rect draw = d.get();
|
|
||||||
if (draw.width() && draw.height()) {
|
|
||||||
#ifdef CANVAS_DEBUG
|
|
||||||
if (DEBUG_ENABLED(PBD::DEBUG::CanvasRender)) {
|
|
||||||
if (dynamic_cast<Group*>(*i) == 0) {
|
|
||||||
cerr << _canvas->render_indent() << "render "
|
|
||||||
<< ' '
|
|
||||||
<< (*i)
|
|
||||||
<< ' '
|
|
||||||
<< (*i)->whatami()
|
|
||||||
<< ' '
|
|
||||||
<< (*i)->name
|
|
||||||
<< " item "
|
|
||||||
<< item_bbox.get()
|
|
||||||
<< " window = "
|
|
||||||
<< item
|
|
||||||
<< " intersect = "
|
|
||||||
<< draw
|
|
||||||
<< " @ "
|
|
||||||
<< _position
|
|
||||||
<< endl;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
(*i)->render (area, context);
|
|
||||||
++render_count;
|
|
||||||
}
|
|
||||||
|
|
||||||
} else {
|
|
||||||
|
|
||||||
#ifdef CANVAS_DEBUG
|
|
||||||
if (DEBUG_ENABLED(PBD::DEBUG::CanvasRender)) {
|
|
||||||
cerr << string_compose ("%1skip render of %2 %3, no intersection between %4 and %5\n", _canvas->render_indent(), (*i)->whatami(),
|
|
||||||
(*i)->name, item, area);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
--render_depth;
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
Group::scroll_to (Duple const& d)
|
|
||||||
{
|
|
||||||
Item::scroll_to (d);
|
|
||||||
|
|
||||||
for (list<Item*>::iterator i = _items.begin(); i != _items.end(); ++i) {
|
|
||||||
(*i)->scroll_to (d);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
Group::compute_bounding_box () const
|
|
||||||
{
|
|
||||||
Rect bbox;
|
|
||||||
bool have_one = false;
|
|
||||||
|
|
||||||
for (list<Item*>::const_iterator i = _items.begin(); i != _items.end(); ++i) {
|
|
||||||
|
|
||||||
boost::optional<Rect> item_bbox = (*i)->bounding_box ();
|
|
||||||
|
|
||||||
if (!item_bbox) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
Rect group_bbox = (*i)->item_to_parent (item_bbox.get ());
|
|
||||||
if (have_one) {
|
|
||||||
bbox = bbox.extend (group_bbox);
|
|
||||||
} else {
|
|
||||||
bbox = group_bbox;
|
|
||||||
have_one = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!have_one) {
|
|
||||||
_bounding_box = boost::optional<Rect> ();
|
|
||||||
} else {
|
|
||||||
_bounding_box = bbox;
|
|
||||||
}
|
|
||||||
|
|
||||||
_bounding_box_dirty = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
Group::add (Item* i)
|
|
||||||
{
|
|
||||||
/* XXX should really notify canvas about this */
|
|
||||||
|
|
||||||
_items.push_back (i);
|
|
||||||
i->reparent (this);
|
|
||||||
invalidate_lut ();
|
|
||||||
_bounding_box_dirty = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
Group::remove (Item* i)
|
|
||||||
{
|
|
||||||
|
|
||||||
if (i->parent() != this) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* we cannot call bounding_box() here because that will iterate over
|
|
||||||
_items, one of which (the argument, i) may be in the middle of
|
|
||||||
deletion, making it impossible to call compute_bounding_box()
|
|
||||||
on it.
|
|
||||||
*/
|
|
||||||
|
|
||||||
if (_bounding_box) {
|
|
||||||
_pre_change_bounding_box = _bounding_box;
|
|
||||||
} else {
|
|
||||||
_pre_change_bounding_box = Rect();
|
|
||||||
}
|
|
||||||
|
|
||||||
i->unparent ();
|
|
||||||
_items.remove (i);
|
|
||||||
invalidate_lut ();
|
|
||||||
_bounding_box_dirty = true;
|
|
||||||
|
|
||||||
end_change ();
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
Group::clear (bool with_delete)
|
|
||||||
{
|
|
||||||
begin_change ();
|
|
||||||
|
|
||||||
clear_items (with_delete);
|
|
||||||
|
|
||||||
invalidate_lut ();
|
|
||||||
_bounding_box_dirty = true;
|
|
||||||
|
|
||||||
end_change ();
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
Group::clear_items (bool with_delete)
|
|
||||||
{
|
|
||||||
for (list<Item*>::iterator i = _items.begin(); i != _items.end(); ) {
|
|
||||||
|
|
||||||
list<Item*>::iterator tmp = i;
|
|
||||||
Item *item = *i;
|
|
||||||
|
|
||||||
++tmp;
|
|
||||||
|
|
||||||
/* remove from list before doing anything else, because we
|
|
||||||
* don't want to find the item in _items during any activity
|
|
||||||
* driven by unparent-ing or deletion.
|
|
||||||
*/
|
|
||||||
|
|
||||||
_items.erase (i);
|
|
||||||
item->unparent ();
|
|
||||||
|
|
||||||
if (with_delete) {
|
|
||||||
delete item;
|
|
||||||
}
|
|
||||||
|
|
||||||
i = tmp;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
Group::raise_child_to_top (Item* i)
|
|
||||||
{
|
|
||||||
if (!_items.empty()) {
|
|
||||||
if (_items.back() == i) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
_items.remove (i);
|
|
||||||
_items.push_back (i);
|
|
||||||
invalidate_lut ();
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
Group::raise_child (Item* i, int levels)
|
|
||||||
{
|
|
||||||
list<Item*>::iterator j = find (_items.begin(), _items.end(), i);
|
|
||||||
assert (j != _items.end ());
|
|
||||||
|
|
||||||
++j;
|
|
||||||
_items.remove (i);
|
|
||||||
|
|
||||||
while (levels > 0 && j != _items.end ()) {
|
|
||||||
++j;
|
|
||||||
--levels;
|
|
||||||
}
|
|
||||||
|
|
||||||
_items.insert (j, i);
|
|
||||||
invalidate_lut ();
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
Group::lower_child_to_bottom (Item* i)
|
|
||||||
{
|
|
||||||
if (!_items.empty()) {
|
|
||||||
if (_items.front() == i) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
_items.remove (i);
|
|
||||||
_items.push_front (i);
|
|
||||||
invalidate_lut ();
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
Group::ensure_lut () const
|
|
||||||
{
|
|
||||||
if (!_lut) {
|
|
||||||
_lut = new DumbLookupTable (*this);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
Group::invalidate_lut () const
|
|
||||||
{
|
|
||||||
delete _lut;
|
|
||||||
_lut = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
Group::child_changed ()
|
|
||||||
{
|
|
||||||
invalidate_lut ();
|
|
||||||
_bounding_box_dirty = true;
|
|
||||||
|
|
||||||
if (_parent) {
|
|
||||||
_parent->child_changed ();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
Group::add_items_at_point (Duple const point, vector<Item const *>& items) const
|
|
||||||
{
|
|
||||||
boost::optional<Rect> const bbox = bounding_box ();
|
|
||||||
|
|
||||||
/* Point is in window coordinate system */
|
|
||||||
|
|
||||||
if (!bbox || !item_to_window (bbox.get()).contains (point)) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* now recurse and add any items within our group that contain point */
|
|
||||||
|
|
||||||
ensure_lut ();
|
|
||||||
vector<Item*> our_items = _lut->items_at_point (point);
|
|
||||||
|
|
||||||
if (!our_items.empty()) {
|
|
||||||
/* this adds this group itself to the list of items at point */
|
|
||||||
Item::add_items_at_point (point, items);
|
|
||||||
}
|
|
||||||
|
|
||||||
for (vector<Item*>::iterator i = our_items.begin(); i != our_items.end(); ++i) {
|
|
||||||
(*i)->add_items_at_point (point, items);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
Group::dump (ostream& o) const
|
|
||||||
{
|
|
||||||
#ifdef CANVAS_DEBUG
|
|
||||||
o << _canvas->indent();
|
|
||||||
o << "Group " << this << " [" << name << ']';
|
|
||||||
o << " @ " << position();
|
|
||||||
o << " Items: " << _items.size();
|
|
||||||
o << " Visible ? " << _visible;
|
|
||||||
|
|
||||||
boost::optional<Rect> bb = bounding_box();
|
|
||||||
|
|
||||||
if (bb) {
|
|
||||||
o << endl << _canvas->indent() << " bbox: " << bb.get();
|
|
||||||
o << endl << _canvas->indent() << " CANVAS bbox: " << item_to_canvas (bb.get());
|
|
||||||
} else {
|
|
||||||
o << " bbox unset";
|
|
||||||
}
|
|
||||||
|
|
||||||
o << endl;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
ArdourCanvas::dump_depth++;
|
|
||||||
|
|
||||||
for (list<Item*>::const_iterator i = _items.begin(); i != _items.end(); ++i) {
|
|
||||||
o << **i;
|
|
||||||
}
|
|
||||||
|
|
||||||
ArdourCanvas::dump_depth--;
|
|
||||||
}
|
|
||||||
|
|
@ -32,8 +32,8 @@ Image::Image (Canvas* canvas, Cairo::Format fmt, int width, int height)
|
||||||
DataReady.connect (data_connections, MISSING_INVALIDATOR, boost::bind (&Image::accept_data, this), gui_context());
|
DataReady.connect (data_connections, MISSING_INVALIDATOR, boost::bind (&Image::accept_data, this), gui_context());
|
||||||
}
|
}
|
||||||
|
|
||||||
Image::Image (Group* group, Cairo::Format fmt, int width, int height)
|
Image::Image (Item* parent, Cairo::Format fmt, int width, int height)
|
||||||
: Item (group)
|
: Item (parent)
|
||||||
, _format (fmt)
|
, _format (fmt)
|
||||||
, _width (width)
|
, _width (width)
|
||||||
, _height (height)
|
, _height (height)
|
||||||
|
|
|
||||||
|
|
@ -25,7 +25,6 @@
|
||||||
|
|
||||||
#include "canvas/canvas.h"
|
#include "canvas/canvas.h"
|
||||||
#include "canvas/debug.h"
|
#include "canvas/debug.h"
|
||||||
#include "canvas/group.h"
|
|
||||||
#include "canvas/item.h"
|
#include "canvas/item.h"
|
||||||
#include "canvas/scroll_group.h"
|
#include "canvas/scroll_group.h"
|
||||||
|
|
||||||
|
|
@ -33,6 +32,8 @@ using namespace std;
|
||||||
using namespace PBD;
|
using namespace PBD;
|
||||||
using namespace ArdourCanvas;
|
using namespace ArdourCanvas;
|
||||||
|
|
||||||
|
int Item::default_items_per_cell = 64;
|
||||||
|
|
||||||
Item::Item (Canvas* canvas)
|
Item::Item (Canvas* canvas)
|
||||||
: Fill (*this)
|
: Fill (*this)
|
||||||
, Outline (*this)
|
, Outline (*this)
|
||||||
|
|
@ -41,12 +42,13 @@ Item::Item (Canvas* canvas)
|
||||||
, _scroll_parent (0)
|
, _scroll_parent (0)
|
||||||
, _visible (true)
|
, _visible (true)
|
||||||
, _bounding_box_dirty (true)
|
, _bounding_box_dirty (true)
|
||||||
|
, _lut (0)
|
||||||
, _ignore_events (false)
|
, _ignore_events (false)
|
||||||
{
|
{
|
||||||
DEBUG_TRACE (DEBUG::CanvasItems, string_compose ("new canvas item %1\n", this));
|
DEBUG_TRACE (DEBUG::CanvasItems, string_compose ("new canvas item %1\n", this));
|
||||||
}
|
}
|
||||||
|
|
||||||
Item::Item (Group* parent)
|
Item::Item (Item* parent)
|
||||||
: Fill (*this)
|
: Fill (*this)
|
||||||
, Outline (*this)
|
, Outline (*this)
|
||||||
, _canvas (parent->canvas())
|
, _canvas (parent->canvas())
|
||||||
|
|
@ -54,6 +56,7 @@ Item::Item (Group* parent)
|
||||||
, _scroll_parent (0)
|
, _scroll_parent (0)
|
||||||
, _visible (true)
|
, _visible (true)
|
||||||
, _bounding_box_dirty (true)
|
, _bounding_box_dirty (true)
|
||||||
|
, _lut (0)
|
||||||
, _ignore_events (false)
|
, _ignore_events (false)
|
||||||
{
|
{
|
||||||
DEBUG_TRACE (DEBUG::CanvasItems, string_compose ("new canvas item %1\n", this));
|
DEBUG_TRACE (DEBUG::CanvasItems, string_compose ("new canvas item %1\n", this));
|
||||||
|
|
@ -65,7 +68,7 @@ Item::Item (Group* parent)
|
||||||
find_scroll_parent ();
|
find_scroll_parent ();
|
||||||
}
|
}
|
||||||
|
|
||||||
Item::Item (Group* parent, Duple const& p)
|
Item::Item (Item* parent, Duple const& p)
|
||||||
: Fill (*this)
|
: Fill (*this)
|
||||||
, Outline (*this)
|
, Outline (*this)
|
||||||
, _canvas (parent->canvas())
|
, _canvas (parent->canvas())
|
||||||
|
|
@ -74,6 +77,7 @@ Item::Item (Group* parent, Duple const& p)
|
||||||
, _position (p)
|
, _position (p)
|
||||||
, _visible (true)
|
, _visible (true)
|
||||||
, _bounding_box_dirty (true)
|
, _bounding_box_dirty (true)
|
||||||
|
, _lut (0)
|
||||||
, _ignore_events (false)
|
, _ignore_events (false)
|
||||||
{
|
{
|
||||||
DEBUG_TRACE (DEBUG::CanvasItems, string_compose ("new canvas item %1\n", this));
|
DEBUG_TRACE (DEBUG::CanvasItems, string_compose ("new canvas item %1\n", this));
|
||||||
|
|
@ -95,6 +99,9 @@ Item::~Item ()
|
||||||
if (_canvas) {
|
if (_canvas) {
|
||||||
_canvas->item_going_away (this, _bounding_box);
|
_canvas->item_going_away (this, _bounding_box);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
clear_items (true);
|
||||||
|
delete _lut;
|
||||||
}
|
}
|
||||||
|
|
||||||
Duple
|
Duple
|
||||||
|
|
@ -350,7 +357,7 @@ Item::unparent ()
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
Item::reparent (Group* new_parent)
|
Item::reparent (Item* new_parent)
|
||||||
{
|
{
|
||||||
if (new_parent == _parent) {
|
if (new_parent == _parent) {
|
||||||
return;
|
return;
|
||||||
|
|
@ -516,6 +523,7 @@ Item::bounding_box () const
|
||||||
if (_bounding_box_dirty) {
|
if (_bounding_box_dirty) {
|
||||||
compute_bounding_box ();
|
compute_bounding_box ();
|
||||||
assert (!_bounding_box_dirty);
|
assert (!_bounding_box_dirty);
|
||||||
|
add_child_bounding_boxes ();
|
||||||
}
|
}
|
||||||
|
|
||||||
return _bounding_box;
|
return _bounding_box;
|
||||||
|
|
@ -626,30 +634,6 @@ Item::set_ignore_events (bool ignore)
|
||||||
_ignore_events = ignore;
|
_ignore_events = ignore;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
|
||||||
Item::dump (ostream& o) const
|
|
||||||
{
|
|
||||||
boost::optional<ArdourCanvas::Rect> bb = bounding_box();
|
|
||||||
|
|
||||||
o << _canvas->indent() << whatami() << ' ' << this << " Visible ? " << _visible;
|
|
||||||
o << " @ " << position();
|
|
||||||
|
|
||||||
#ifdef CANVAS_DEBUG
|
|
||||||
if (!name.empty()) {
|
|
||||||
o << ' ' << name;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (bb) {
|
|
||||||
o << endl << _canvas->indent() << "\tbbox: " << bb.get();
|
|
||||||
o << endl << _canvas->indent() << "\tCANVAS bbox: " << item_to_canvas (bb.get());
|
|
||||||
} else {
|
|
||||||
o << " bbox unset";
|
|
||||||
}
|
|
||||||
|
|
||||||
o << endl;
|
|
||||||
}
|
|
||||||
|
|
||||||
std::string
|
std::string
|
||||||
Item::whatami () const
|
Item::whatami () const
|
||||||
{
|
{
|
||||||
|
|
@ -687,6 +671,276 @@ Item::covers (Duple const & point) const
|
||||||
return r.get().contains (p);
|
return r.get().contains (p);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* nesting/grouping API */
|
||||||
|
|
||||||
|
void
|
||||||
|
Item::add_child_bounding_boxes() const
|
||||||
|
{
|
||||||
|
boost::optional<Rect> self;
|
||||||
|
Rect bbox;
|
||||||
|
bool have_one = false;
|
||||||
|
|
||||||
|
if (_bounding_box) {
|
||||||
|
bbox = _bounding_box.get();
|
||||||
|
have_one = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (list<Item*>::const_iterator i = _items.begin(); i != _items.end(); ++i) {
|
||||||
|
|
||||||
|
boost::optional<Rect> item_bbox = (*i)->bounding_box ();
|
||||||
|
|
||||||
|
if (!item_bbox) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
Rect group_bbox = (*i)->item_to_parent (item_bbox.get ());
|
||||||
|
if (have_one) {
|
||||||
|
bbox = bbox.extend (group_bbox);
|
||||||
|
} else {
|
||||||
|
bbox = group_bbox;
|
||||||
|
have_one = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!have_one) {
|
||||||
|
_bounding_box = boost::optional<Rect> ();
|
||||||
|
} else {
|
||||||
|
_bounding_box = bbox;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
Item::add (Item* i)
|
||||||
|
{
|
||||||
|
/* XXX should really notify canvas about this */
|
||||||
|
|
||||||
|
_items.push_back (i);
|
||||||
|
i->reparent (this);
|
||||||
|
invalidate_lut ();
|
||||||
|
_bounding_box_dirty = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
Item::remove (Item* i)
|
||||||
|
{
|
||||||
|
|
||||||
|
if (i->parent() != this) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* we cannot call bounding_box() here because that will iterate over
|
||||||
|
_items, one of which (the argument, i) may be in the middle of
|
||||||
|
deletion, making it impossible to call compute_bounding_box()
|
||||||
|
on it.
|
||||||
|
*/
|
||||||
|
|
||||||
|
if (_bounding_box) {
|
||||||
|
_pre_change_bounding_box = _bounding_box;
|
||||||
|
} else {
|
||||||
|
_pre_change_bounding_box = Rect();
|
||||||
|
}
|
||||||
|
|
||||||
|
i->unparent ();
|
||||||
|
_items.remove (i);
|
||||||
|
invalidate_lut ();
|
||||||
|
_bounding_box_dirty = true;
|
||||||
|
|
||||||
|
end_change ();
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
Item::clear (bool with_delete)
|
||||||
|
{
|
||||||
|
begin_change ();
|
||||||
|
|
||||||
|
clear_items (with_delete);
|
||||||
|
|
||||||
|
invalidate_lut ();
|
||||||
|
_bounding_box_dirty = true;
|
||||||
|
|
||||||
|
end_change ();
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
Item::clear_items (bool with_delete)
|
||||||
|
{
|
||||||
|
for (list<Item*>::iterator i = _items.begin(); i != _items.end(); ) {
|
||||||
|
|
||||||
|
list<Item*>::iterator tmp = i;
|
||||||
|
Item *item = *i;
|
||||||
|
|
||||||
|
++tmp;
|
||||||
|
|
||||||
|
/* remove from list before doing anything else, because we
|
||||||
|
* don't want to find the item in _items during any activity
|
||||||
|
* driven by unparent-ing or deletion.
|
||||||
|
*/
|
||||||
|
|
||||||
|
_items.erase (i);
|
||||||
|
item->unparent ();
|
||||||
|
|
||||||
|
if (with_delete) {
|
||||||
|
delete item;
|
||||||
|
}
|
||||||
|
|
||||||
|
i = tmp;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
Item::raise_child_to_top (Item* i)
|
||||||
|
{
|
||||||
|
if (!_items.empty()) {
|
||||||
|
if (_items.back() == i) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
_items.remove (i);
|
||||||
|
_items.push_back (i);
|
||||||
|
invalidate_lut ();
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
Item::raise_child (Item* i, int levels)
|
||||||
|
{
|
||||||
|
list<Item*>::iterator j = find (_items.begin(), _items.end(), i);
|
||||||
|
assert (j != _items.end ());
|
||||||
|
|
||||||
|
++j;
|
||||||
|
_items.remove (i);
|
||||||
|
|
||||||
|
while (levels > 0 && j != _items.end ()) {
|
||||||
|
++j;
|
||||||
|
--levels;
|
||||||
|
}
|
||||||
|
|
||||||
|
_items.insert (j, i);
|
||||||
|
invalidate_lut ();
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
Item::lower_child_to_bottom (Item* i)
|
||||||
|
{
|
||||||
|
if (!_items.empty()) {
|
||||||
|
if (_items.front() == i) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
_items.remove (i);
|
||||||
|
_items.push_front (i);
|
||||||
|
invalidate_lut ();
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
Item::ensure_lut () const
|
||||||
|
{
|
||||||
|
if (!_lut) {
|
||||||
|
_lut = new DumbLookupTable (*this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
Item::invalidate_lut () const
|
||||||
|
{
|
||||||
|
delete _lut;
|
||||||
|
_lut = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
Item::child_changed ()
|
||||||
|
{
|
||||||
|
invalidate_lut ();
|
||||||
|
_bounding_box_dirty = true;
|
||||||
|
|
||||||
|
if (_parent) {
|
||||||
|
_parent->child_changed ();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
Item::add_items_at_point (Duple const point, vector<Item const *>& items) const
|
||||||
|
{
|
||||||
|
boost::optional<Rect> const bbox = bounding_box ();
|
||||||
|
|
||||||
|
/* Point is in window coordinate system */
|
||||||
|
|
||||||
|
if (!bbox || !item_to_window (bbox.get()).contains (point)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* recurse and add any items within our group that contain point */
|
||||||
|
|
||||||
|
vector<Item*> our_items;
|
||||||
|
|
||||||
|
if (!_items.empty()) {
|
||||||
|
ensure_lut ();
|
||||||
|
our_items = _lut->items_at_point (point);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!our_items.empty() || covers (point)) {
|
||||||
|
/* this adds this item itself to the list of items at point */
|
||||||
|
items.push_back (this);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (vector<Item*>::iterator i = our_items.begin(); i != our_items.end(); ++i) {
|
||||||
|
(*i)->add_items_at_point (point, items);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
Item::dump (ostream& o) const
|
||||||
|
{
|
||||||
|
boost::optional<ArdourCanvas::Rect> bb = bounding_box();
|
||||||
|
|
||||||
|
o << _canvas->indent() << whatami() << ' ' << this << " Visible ? " << _visible;
|
||||||
|
o << " @ " << position();
|
||||||
|
|
||||||
|
#ifdef CANVAS_DEBUG
|
||||||
|
if (!name.empty()) {
|
||||||
|
o << ' ' << name;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if (bb) {
|
||||||
|
o << endl << _canvas->indent() << "\tbbox: " << bb.get();
|
||||||
|
o << endl << _canvas->indent() << "\tCANVAS bbox: " << item_to_canvas (bb.get());
|
||||||
|
} else {
|
||||||
|
o << " bbox unset";
|
||||||
|
}
|
||||||
|
|
||||||
|
o << endl;
|
||||||
|
|
||||||
|
if (!_items.empty()) {
|
||||||
|
|
||||||
|
#ifdef CANVAS_DEBUG
|
||||||
|
o << _canvas->indent();
|
||||||
|
o << " @ " << position();
|
||||||
|
o << " Items: " << _items.size();
|
||||||
|
o << " Visible ? " << _visible;
|
||||||
|
|
||||||
|
boost::optional<Rect> bb = bounding_box();
|
||||||
|
|
||||||
|
if (bb) {
|
||||||
|
o << endl << _canvas->indent() << " bbox: " << bb.get();
|
||||||
|
o << endl << _canvas->indent() << " CANVAS bbox: " << item_to_canvas (bb.get());
|
||||||
|
} else {
|
||||||
|
o << " bbox unset";
|
||||||
|
}
|
||||||
|
|
||||||
|
o << endl;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
ArdourCanvas::dump_depth++;
|
||||||
|
|
||||||
|
for (list<Item*>::const_iterator i = _items.begin(); i != _items.end(); ++i) {
|
||||||
|
o << **i;
|
||||||
|
}
|
||||||
|
|
||||||
|
ArdourCanvas::dump_depth--;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
ostream&
|
ostream&
|
||||||
ArdourCanvas::operator<< (ostream& o, const Item& i)
|
ArdourCanvas::operator<< (ostream& o, const Item& i)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -34,8 +34,8 @@ Line::Line (Canvas* c)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
Line::Line (Group* group)
|
Line::Line (Item* parent)
|
||||||
: Item (group)
|
: Item (parent)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -38,8 +38,8 @@ LineSet::LineSet (Canvas* c, Orientation o)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
LineSet::LineSet (Group* group, Orientation o)
|
LineSet::LineSet (Item* parent, Orientation o)
|
||||||
: Item (group)
|
: Item (parent)
|
||||||
, _extent (0)
|
, _extent (0)
|
||||||
, _orientation (o)
|
, _orientation (o)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -17,14 +17,14 @@
|
||||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include "canvas/item.h"
|
||||||
#include "canvas/lookup_table.h"
|
#include "canvas/lookup_table.h"
|
||||||
#include "canvas/group.h"
|
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
using namespace ArdourCanvas;
|
using namespace ArdourCanvas;
|
||||||
|
|
||||||
LookupTable::LookupTable (Group const & group)
|
LookupTable::LookupTable (Item const & item)
|
||||||
: _group (group)
|
: _item (item)
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
@ -34,8 +34,8 @@ LookupTable::~LookupTable ()
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
DumbLookupTable::DumbLookupTable (Group const & group)
|
DumbLookupTable::DumbLookupTable (Item const & item)
|
||||||
: LookupTable (group)
|
: LookupTable (item)
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
@ -43,7 +43,7 @@ DumbLookupTable::DumbLookupTable (Group const & group)
|
||||||
vector<Item *>
|
vector<Item *>
|
||||||
DumbLookupTable::get (Rect const &)
|
DumbLookupTable::get (Rect const &)
|
||||||
{
|
{
|
||||||
list<Item *> const & items = _group.items ();
|
list<Item *> const & items = _item.items ();
|
||||||
vector<Item *> vitems;
|
vector<Item *> vitems;
|
||||||
copy (items.begin(), items.end(), back_inserter (vitems));
|
copy (items.begin(), items.end(), back_inserter (vitems));
|
||||||
return vitems;
|
return vitems;
|
||||||
|
|
@ -54,7 +54,7 @@ DumbLookupTable::items_at_point (Duple const & point) const
|
||||||
{
|
{
|
||||||
/* Point is in window coordinate system */
|
/* Point is in window coordinate system */
|
||||||
|
|
||||||
list<Item *> const & items (_group.items ());
|
list<Item *> const & items (_item.items ());
|
||||||
vector<Item *> vitems;
|
vector<Item *> vitems;
|
||||||
|
|
||||||
for (list<Item *>::const_iterator i = items.begin(); i != items.end(); ++i) {
|
for (list<Item *>::const_iterator i = items.begin(); i != items.end(); ++i) {
|
||||||
|
|
@ -73,7 +73,7 @@ DumbLookupTable::has_item_at_point (Duple const & point) const
|
||||||
{
|
{
|
||||||
/* Point is in window coordinate system */
|
/* Point is in window coordinate system */
|
||||||
|
|
||||||
list<Item *> const & items (_group.items ());
|
list<Item *> const & items (_item.items ());
|
||||||
vector<Item *> vitems;
|
vector<Item *> vitems;
|
||||||
|
|
||||||
for (list<Item *>::const_iterator i = items.begin(); i != items.end(); ++i) {
|
for (list<Item *>::const_iterator i = items.begin(); i != items.end(); ++i) {
|
||||||
|
|
@ -92,12 +92,12 @@ DumbLookupTable::has_item_at_point (Duple const & point) const
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
OptimizingLookupTable::OptimizingLookupTable (Group const & group, int items_per_cell)
|
OptimizingLookupTable::OptimizingLookupTable (Item const & item, int items_per_cell)
|
||||||
: LookupTable (group)
|
: LookupTable (item)
|
||||||
, _items_per_cell (items_per_cell)
|
, _items_per_cell (items_per_cell)
|
||||||
, _added (false)
|
, _added (false)
|
||||||
{
|
{
|
||||||
list<Item*> const & items = _group.items ();
|
list<Item*> const & items = _item.items ();
|
||||||
|
|
||||||
/* number of cells */
|
/* number of cells */
|
||||||
int const cells = items.size() / _items_per_cell;
|
int const cells = items.size() / _items_per_cell;
|
||||||
|
|
@ -109,8 +109,8 @@ OptimizingLookupTable::OptimizingLookupTable (Group const & group, int items_per
|
||||||
_cells[i] = new Cell[_dimension];
|
_cells[i] = new Cell[_dimension];
|
||||||
}
|
}
|
||||||
|
|
||||||
/* our group's bounding box in its coordinates */
|
/* our item's bounding box in its coordinates */
|
||||||
boost::optional<Rect> bbox = _group.bounding_box ();
|
boost::optional<Rect> bbox = _item.bounding_box ();
|
||||||
if (!bbox) {
|
if (!bbox) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
@ -130,11 +130,11 @@ OptimizingLookupTable::OptimizingLookupTable (Group const & group, int items_per
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* and in the group's coordinates */
|
/* and in the item's coordinates */
|
||||||
Rect const item_bbox_in_group = (*i)->item_to_parent (item_bbox.get ());
|
Rect const item_bbox_in_item = (*i)->item_to_parent (item_bbox.get ());
|
||||||
|
|
||||||
int x0, y0, x1, y1;
|
int x0, y0, x1, y1;
|
||||||
area_to_indices (item_bbox_in_group, x0, y0, x1, y1);
|
area_to_indices (item_bbox_in_item, x0, y0, x1, y1);
|
||||||
|
|
||||||
/* XXX */
|
/* XXX */
|
||||||
assert (x0 >= 0);
|
assert (x0 >= 0);
|
||||||
|
|
@ -147,19 +147,19 @@ OptimizingLookupTable::OptimizingLookupTable (Group const & group, int items_per
|
||||||
//assert (y1 <= _dimension);
|
//assert (y1 <= _dimension);
|
||||||
|
|
||||||
if (x0 > _dimension) {
|
if (x0 > _dimension) {
|
||||||
cout << "WARNING: item outside bbox by " << (item_bbox_in_group.x0 - bbox.get().x0) << "\n";
|
cout << "WARNING: item outside bbox by " << (item_bbox_in_item.x0 - bbox.get().x0) << "\n";
|
||||||
x0 = _dimension;
|
x0 = _dimension;
|
||||||
}
|
}
|
||||||
if (x1 > _dimension) {
|
if (x1 > _dimension) {
|
||||||
cout << "WARNING: item outside bbox by " << (item_bbox_in_group.x1 - bbox.get().x1) << "\n";
|
cout << "WARNING: item outside bbox by " << (item_bbox_in_item.x1 - bbox.get().x1) << "\n";
|
||||||
x1 = _dimension;
|
x1 = _dimension;
|
||||||
}
|
}
|
||||||
if (y0 > _dimension) {
|
if (y0 > _dimension) {
|
||||||
cout << "WARNING: item outside bbox by " << (item_bbox_in_group.y0 - bbox.get().y0) << "\n";
|
cout << "WARNING: item outside bbox by " << (item_bbox_in_item.y0 - bbox.get().y0) << "\n";
|
||||||
y0 = _dimension;
|
y0 = _dimension;
|
||||||
}
|
}
|
||||||
if (y1 > _dimension) {
|
if (y1 > _dimension) {
|
||||||
cout << "WARNING: item outside bbox by " << (item_bbox_in_group.y1 - bbox.get().y1) << "\n";
|
cout << "WARNING: item outside bbox by " << (item_bbox_in_item.y1 - bbox.get().y1) << "\n";
|
||||||
y1 = _dimension;
|
y1 = _dimension;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -284,7 +284,7 @@ OptimizingLookupTable::has_item_at_point (Duple const & point) const
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** @param area Area in our owning group's coordinates */
|
/** @param area Area in our owning item's coordinates */
|
||||||
vector<Item*>
|
vector<Item*>
|
||||||
OptimizingLookupTable::get (Rect const & area)
|
OptimizingLookupTable::get (Rect const & area)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -30,8 +30,8 @@ Pixbuf::Pixbuf (Canvas* c)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
Pixbuf::Pixbuf (Group* g)
|
Pixbuf::Pixbuf (Item* parent)
|
||||||
: Item (g)
|
: Item (parent)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -32,8 +32,8 @@ PolyItem::PolyItem (Canvas* c)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
PolyItem::PolyItem (Group* g)
|
PolyItem::PolyItem (Item* parent)
|
||||||
: Item (g)
|
: Item (parent)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -31,8 +31,8 @@ PolyLine::PolyLine (Canvas* c)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
PolyLine::PolyLine (Group* g)
|
PolyLine::PolyLine (Item* parent)
|
||||||
: PolyItem (g)
|
: PolyItem (parent)
|
||||||
, _threshold (1.0)
|
, _threshold (1.0)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -29,8 +29,8 @@ Polygon::Polygon (Canvas* c)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
Polygon::Polygon (Group* g)
|
Polygon::Polygon (Item* parent)
|
||||||
: PolyItem (g)
|
: PolyItem (parent)
|
||||||
, multiple (0)
|
, multiple (0)
|
||||||
, constant (0)
|
, constant (0)
|
||||||
, cached_size (0)
|
, cached_size (0)
|
||||||
|
|
|
||||||
|
|
@ -43,14 +43,14 @@ Rectangle::Rectangle (Canvas* c, Rect const & rect)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
Rectangle::Rectangle (Group* g)
|
Rectangle::Rectangle (Item* parent)
|
||||||
: Item (g)
|
: Item (parent)
|
||||||
, _outline_what ((What) (LEFT | RIGHT | TOP | BOTTOM))
|
, _outline_what ((What) (LEFT | RIGHT | TOP | BOTTOM))
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
Rectangle::Rectangle (Group* g, Rect const & rect)
|
Rectangle::Rectangle (Item* parent, Rect const & rect)
|
||||||
: Item (g)
|
: Item (parent)
|
||||||
, _rect (rect)
|
, _rect (rect)
|
||||||
, _outline_what ((What) (LEFT | RIGHT | TOP | BOTTOM))
|
, _outline_what ((What) (LEFT | RIGHT | TOP | BOTTOM))
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -23,8 +23,8 @@
|
||||||
using namespace std;
|
using namespace std;
|
||||||
using namespace ArdourCanvas;
|
using namespace ArdourCanvas;
|
||||||
|
|
||||||
RootGroup::RootGroup (Canvas* canvas)
|
Root::Root (Canvas* canvas)
|
||||||
: Group (canvas)
|
: Layout (canvas)
|
||||||
{
|
{
|
||||||
#ifdef CANVAS_DEBUG
|
#ifdef CANVAS_DEBUG
|
||||||
name = "ROOT";
|
name = "ROOT";
|
||||||
|
|
@ -32,11 +32,12 @@ RootGroup::RootGroup (Canvas* canvas)
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
RootGroup::compute_bounding_box () const
|
Root::compute_bounding_box () const
|
||||||
{
|
{
|
||||||
Group::compute_bounding_box ();
|
Layout::compute_bounding_box ();
|
||||||
|
|
||||||
if (_bounding_box) {
|
if (_bounding_box) {
|
||||||
_canvas->request_size (Duple (_bounding_box.get().width (), _bounding_box.get().height ()));
|
Rect r (_bounding_box.get());
|
||||||
|
_canvas->request_size (Duple (r.width (), r.height ()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -49,8 +49,8 @@ Ruler::Ruler (Canvas* c, const Metric& m, Rect const& r)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
Ruler::Ruler (Group* g, const Metric& m)
|
Ruler::Ruler (Item* parent, const Metric& m)
|
||||||
: Rectangle (g)
|
: Rectangle (parent)
|
||||||
, _metric (m)
|
, _metric (m)
|
||||||
, _lower (0)
|
, _lower (0)
|
||||||
, _upper (0)
|
, _upper (0)
|
||||||
|
|
@ -58,8 +58,8 @@ Ruler::Ruler (Group* g, const Metric& m)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
Ruler::Ruler (Group* g, const Metric& m, Rect const& r)
|
Ruler::Ruler (Item* parent, const Metric& m, Rect const& r)
|
||||||
: Rectangle (g, r)
|
: Rectangle (parent, r)
|
||||||
, _metric (m)
|
, _metric (m)
|
||||||
, _lower (0)
|
, _lower (0)
|
||||||
, _upper (0)
|
, _upper (0)
|
||||||
|
|
|
||||||
|
|
@ -28,13 +28,13 @@ using namespace std;
|
||||||
using namespace ArdourCanvas;
|
using namespace ArdourCanvas;
|
||||||
|
|
||||||
ScrollGroup::ScrollGroup (Canvas* c, ScrollSensitivity s)
|
ScrollGroup::ScrollGroup (Canvas* c, ScrollSensitivity s)
|
||||||
: Group (c)
|
: Layout (c)
|
||||||
, _scroll_sensitivity (s)
|
, _scroll_sensitivity (s)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
ScrollGroup::ScrollGroup (Group* g, ScrollSensitivity s)
|
ScrollGroup::ScrollGroup (Item* parent, ScrollSensitivity s)
|
||||||
: Group (g)
|
: Layout (parent)
|
||||||
, _scroll_sensitivity (s)
|
, _scroll_sensitivity (s)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
@ -61,11 +61,9 @@ ScrollGroup::render (Rect const & area, Cairo::RefPtr<Cairo::Context> context) c
|
||||||
context->rectangle (self.x0, self.y0, self.width(), self.height());
|
context->rectangle (self.x0, self.y0, self.width(), self.height());
|
||||||
context->clip ();
|
context->clip ();
|
||||||
|
|
||||||
Group::render (area, context);
|
Layout::render (area, context);
|
||||||
|
|
||||||
context->restore ();
|
context->restore ();
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
|
||||||
|
|
@ -43,8 +43,8 @@ Text::Text (Canvas* c)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
Text::Text (Group* g)
|
Text::Text (Item* parent)
|
||||||
: Item (g)
|
: Item (parent)
|
||||||
, _color (0x000000ff)
|
, _color (0x000000ff)
|
||||||
, _font_description (0)
|
, _font_description (0)
|
||||||
, _alignment (Pango::ALIGN_LEFT)
|
, _alignment (Pango::ALIGN_LEFT)
|
||||||
|
|
|
||||||
|
|
@ -76,8 +76,8 @@ WaveView::WaveView (Canvas* c, boost::shared_ptr<ARDOUR::AudioRegion> region)
|
||||||
ClipLevelChanged.connect_same_thread (invalidation_connection, boost::bind (&WaveView::handle_clip_level_change, this));
|
ClipLevelChanged.connect_same_thread (invalidation_connection, boost::bind (&WaveView::handle_clip_level_change, this));
|
||||||
}
|
}
|
||||||
|
|
||||||
WaveView::WaveView (Group* g, boost::shared_ptr<ARDOUR::AudioRegion> region)
|
WaveView::WaveView (Item* parent, boost::shared_ptr<ARDOUR::AudioRegion> region)
|
||||||
: Item (g)
|
: Item (parent)
|
||||||
, _region (region)
|
, _region (region)
|
||||||
, _channel (0)
|
, _channel (0)
|
||||||
, _samples_per_pixel (0)
|
, _samples_per_pixel (0)
|
||||||
|
|
|
||||||
|
|
@ -36,8 +36,8 @@ Widget::Widget (Canvas* c, CairoWidget& w)
|
||||||
Event.connect (sigc::mem_fun (*this, &Widget::event_proxy));
|
Event.connect (sigc::mem_fun (*this, &Widget::event_proxy));
|
||||||
}
|
}
|
||||||
|
|
||||||
Widget::Widget (Group* g, CairoWidget& w)
|
Widget::Widget (Item* parent, CairoWidget& w)
|
||||||
: Item (g)
|
: Item (parent)
|
||||||
, _widget (w)
|
, _widget (w)
|
||||||
{
|
{
|
||||||
Event.connect (sigc::mem_fun (*this, &Widget::event_proxy));
|
Event.connect (sigc::mem_fun (*this, &Widget::event_proxy));
|
||||||
|
|
|
||||||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue