205
205
GooCanvasItemSimple *simple = (GooCanvasItemSimple*) object;
206
206
GooCanvasPolyline *polyline = (GooCanvasPolyline*) object;
208
/* Free our data if we didn't have a model. (If we had a model it would
209
have been reset in dispose() and simple_data will be NULL.) */
210
if (simple->simple_data)
210
212
g_slice_free1 (polyline->polyline_data->num_points * 2 * sizeof (gdouble),
211
213
polyline->polyline_data->coords);
764
static GooCanvasItem*
765
goo_canvas_polyline_get_item_at (GooCanvasItemSimple *simple,
769
gboolean is_pointer_event)
767
goo_canvas_polyline_is_item_at (GooCanvasItemSimple *simple,
771
gboolean is_pointer_event)
771
773
GooCanvasItemSimpleData *simple_data = simple->simple_data;
772
774
GooCanvasPolyline *polyline = (GooCanvasPolyline*) simple;
773
775
GooCanvasPolylineData *polyline_data = polyline->polyline_data;
774
GooCanvasItem *found_item = NULL;
775
776
GooCanvasPointerEvents pointer_events = GOO_CANVAS_EVENTS_ALL;
776
777
gboolean do_stroke;
777
cairo_matrix_t matrix;
779
779
if (polyline_data->num_points == 0)
782
782
/* Check if the item should receive events. */
783
783
if (is_pointer_event)
784
784
pointer_events = simple_data->pointer_events;
786
/* Remove any current translation, to avoid the 16-bit cairo limit. */
787
cairo_get_matrix (cr, &matrix);
788
matrix.x0 = matrix.y0 = 0.0;
789
cairo_set_matrix (cr, &matrix);
791
786
goo_canvas_polyline_create_path (polyline, cr);
792
787
if (goo_canvas_item_simple_check_in_path (simple, x, y, cr, pointer_events))
793
found_item = (GooCanvasItem*) simple;
795
790
/* Check the arrows, if the polyline has them. */
796
if (!found_item && (polyline_data->start_arrow || polyline_data->end_arrow)
791
if ((polyline_data->start_arrow || polyline_data->end_arrow)
797
792
&& polyline_data->num_points >= 2
798
793
&& (pointer_events & GOO_CANVAS_EVENTS_STROKE_MASK))
806
801
goo_canvas_polyline_create_start_arrow_path (polyline, cr);
807
802
if (cairo_in_fill (cr, x, y))
808
found_item = (GooCanvasItem*) simple;
811
if (!found_item && polyline_data->end_arrow)
806
if (polyline_data->end_arrow)
813
808
goo_canvas_polyline_create_end_arrow_path (polyline, cr);
814
809
if (cairo_in_fill (cr, x, y))
815
found_item = (GooCanvasItem*) simple;
898
goo_canvas_polyline_paint (GooCanvasItemSimple *simple,
900
GooCanvasBounds *bounds)
893
goo_canvas_polyline_paint (GooCanvasItemSimple *simple,
895
const GooCanvasBounds *bounds)
902
897
GooCanvasItemSimpleData *simple_data = simple->simple_data;
903
898
GooCanvasPolyline *polyline = (GooCanvasPolyline*) simple;
964
959
GObjectClass *gobject_class = (GObjectClass*) klass;
965
960
GooCanvasItemSimpleClass *simple_class = (GooCanvasItemSimpleClass*) klass;
967
gobject_class->finalize = goo_canvas_polyline_finalize;
962
gobject_class->finalize = goo_canvas_polyline_finalize;
969
964
gobject_class->get_property = goo_canvas_polyline_get_property;
970
965
gobject_class->set_property = goo_canvas_polyline_set_property;
972
967
simple_class->simple_update = goo_canvas_polyline_update;
973
968
simple_class->simple_paint = goo_canvas_polyline_paint;
974
simple_class->simple_get_item_at = goo_canvas_polyline_get_item_at;
969
simple_class->simple_is_item_at = goo_canvas_polyline_is_item_at;
976
971
goo_canvas_polyline_install_common_properties (gobject_class);