e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz * Simple bezier bpath CanvasItem for inkscape
d37634d73670180f99a3e0ea583621373d90ec4fJohan Engelen * Lauris Kaplinski <lauris@ximian.com>
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz * Jon A. Cruz <jon@joncruz.org>
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz * Copyright (C) 2001 Lauris Kaplinski and Ximian, Inc.
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz * Released under GNU GPL
9cf82ac568634e779873c4bf6cd6b7bdd465556dtweenkstatic void sp_canvas_bpath_destroy(SPCanvasItem *object);
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruzstatic void sp_canvas_bpath_update (SPCanvasItem *item, Geom::Affine const &affine, unsigned int flags);
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruzstatic void sp_canvas_bpath_render (SPCanvasItem *item, SPCanvasBuf *buf);
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruzstatic double sp_canvas_bpath_point (SPCanvasItem *item, Geom::Point p, SPCanvasItem **actual_item);
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruzG_DEFINE_TYPE(SPCanvasBPath, sp_canvas_bpath, SP_TYPE_CANVAS_ITEM);
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruzstatic void sp_canvas_bpath_class_init(SPCanvasBPathClass *klass)
39a897cf2c4e5c0208d081fe7d51dc893b5c33d1Liam P. White SPCanvasItemClass *item_class = (SPCanvasItemClass *) klass;
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruzstatic void sp_canvas_bpath_destroy(SPCanvasItem *object)
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz if (SP_CANVAS_ITEM_CLASS(sp_canvas_bpath_parent_class)->destroy)
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz (* SP_CANVAS_ITEM_CLASS(sp_canvas_bpath_parent_class)->destroy) (object);
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruzstatic void sp_canvas_bpath_update(SPCanvasItem *item, Geom::Affine const &affine, unsigned int flags)
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz item->canvas->requestRedraw((int)item->x1, (int)item->y1, (int)item->x2, (int)item->y2);
d37634d73670180f99a3e0ea583621373d90ec4fJohan Engelen if (reinterpret_cast<SPCanvasItemClass *>(sp_canvas_bpath_parent_class)->update) {
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz reinterpret_cast<SPCanvasItemClass *>(sp_canvas_bpath_parent_class)->update(item, affine, flags);
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz Geom::OptRect bbox = bounds_exact_transformed(cbp->curve->get_pathvector(), affine);
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz item->canvas->requestRedraw((int)item->x1, (int)item->y1, (int)item->x2, (int)item->y2);
d37634d73670180f99a3e0ea583621373d90ec4fJohan Engelensp_canvas_bpath_render (SPCanvasItem *item, SPCanvasBuf *buf)
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz ((cbp->stroke_rgba & 0xff) == 0 && (cbp->fill_rgba & 0xff) == 0 ) ||
77fd5ff29861c6c87bcc9fc466d330b17a978c8ajaspervdg feed_pathvector_to_cairo (buf->ct, cbp->curve->get_pathvector(), cbp->affine, area,
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz // RGB / BGR
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz ink_cairo_set_source_rgba32(buf->ct, cbp->fill_rgba);
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz cairo_set_fill_rule(buf->ct, cbp->fill_rule == SP_WIND_RULE_EVENODD? CAIRO_FILL_RULE_EVEN_ODD
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz ink_cairo_set_source_rgba32(buf->ct, cbp->stroke_rgba);
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruzstatic double
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruzsp_canvas_bpath_point (SPCanvasItem *item, Geom::Point p, SPCanvasItem **actual_item)
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz ((cbp->stroke_rgba & 0xff) == 0 && (cbp->fill_rgba & 0xff) == 0 ) ||
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz pathv_matrix_point_bbox_wind_distance(cbp->curve->get_pathvector(), cbp->affine, p, NULL, NULL, &dist, 0.5, &viewbox);
d37634d73670180f99a3e0ea583621373d90ec4fJohan Engelensp_canvas_bpath_new (SPCanvasGroup *parent, SPCurve *curve)
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz g_return_val_if_fail (SP_IS_CANVAS_GROUP (parent), NULL);
93a34ae628e2dccf2db5f7cfffe82371e6f0d040jaspervdg SPCanvasItem *item = sp_canvas_item_new (parent, SP_TYPE_CANVAS_BPATH, NULL);
93a34ae628e2dccf2db5f7cfffe82371e6f0d040jaspervdg sp_canvas_bpath_set_bpath (SP_CANVAS_BPATH (item), curve);
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruzsp_canvas_bpath_set_bpath (SPCanvasBPath *cbp, SPCurve *curve)
d37634d73670180f99a3e0ea583621373d90ec4fJohan Engelen sp_canvas_item_request_update (SP_CANVAS_ITEM (cbp));
d37634d73670180f99a3e0ea583621373d90ec4fJohan Engelensp_canvas_bpath_set_fill (SPCanvasBPath *cbp, guint32 rgba, SPWindRule rule)
93a34ae628e2dccf2db5f7cfffe82371e6f0d040jaspervdg sp_canvas_item_request_update (SP_CANVAS_ITEM (cbp));
93a34ae628e2dccf2db5f7cfffe82371e6f0d040jaspervdgsp_canvas_bpath_set_stroke (SPCanvasBPath *cbp, guint32 rgba, gdouble width, SPStrokeJoinType join, SPStrokeCapType cap, double dash, double gap)
93a34ae628e2dccf2db5f7cfffe82371e6f0d040jaspervdg sp_canvas_item_request_update (SP_CANVAS_ITEM (cbp));
93a34ae628e2dccf2db5f7cfffe82371e6f0d040jaspervdg Local Variables:
93a34ae628e2dccf2db5f7cfffe82371e6f0d040jaspervdg c-file-style:"stroustrup"
93a34ae628e2dccf2db5f7cfffe82371e6f0d040jaspervdg c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
93a34ae628e2dccf2db5f7cfffe82371e6f0d040jaspervdg indent-tabs-mode:nil
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz fill-column:99
d37634d73670180f99a3e0ea583621373d90ec4fJohan Engelen// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:fileencoding=utf-8:textwidth=99 :