X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=src%2Fsp-shape.h;h=4932687110fdb7c58eb9e79baac2778822749baa;hb=0dc33d4ce43e0bb49c63aa53b826ec4a1ff68e28;hp=cc25d2e88f9cf3d4d3a0fdd20d8137fe1fa4b260;hpb=23d859f2ce09c04ed802cb4912cc9c50f512f0a2;p=inkscape.git diff --git a/src/sp-shape.h b/src/sp-shape.h index cc25d2e88..493268711 100644 --- a/src/sp-shape.h +++ b/src/sp-shape.h @@ -1,11 +1,13 @@ -#ifndef __SP_SHAPE_H__ -#define __SP_SHAPE_H__ +#ifndef SEEN_SP_SHAPE_H +#define SEEN_SP_SHAPE_H /* * Base class for shapes, including element * * Author: * Lauris Kaplinski + * Abhishek Sharma + * Jon A. Cruz * * Copyright (C) 1999-2002 Lauris Kaplinski * Copyright (C) 2000-2001 Ximian, Inc. @@ -14,13 +16,13 @@ * Released under GNU GPL, read the file 'COPYING' for more information */ -#include "display/display-forward.h" #include "sp-lpe-item.h" #include "sp-marker-loc.h" +#include <2geom/forward.h> #include -#define SP_TYPE_SHAPE (sp_shape_get_type ()) +#define SP_TYPE_SHAPE (SPShape::getType ()) #define SP_SHAPE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SP_TYPE_SHAPE, SPShape)) #define SP_SHAPE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SP_TYPE_SHAPE, SPShapeClass)) #define SP_IS_SHAPE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SP_TYPE_SHAPE)) @@ -30,39 +32,75 @@ struct SPDesktop; -struct SPShape : public SPLPEItem { +class SPShape : public SPLPEItem { +public: SPCurve *curve; - SPObject *marker[SP_MARKER_LOC_QTY]; - sigc::connection release_connect [SP_MARKER_LOC_QTY]; - sigc::connection modified_connect [SP_MARKER_LOC_QTY]; -}; + SPObject *marker[SP_MARKER_LOC_QTY]; + sigc::connection release_connect [SP_MARKER_LOC_QTY]; + sigc::connection modified_connect [SP_MARKER_LOC_QTY]; + + static GType getType (void); + void setShape (); + SPCurve * getCurve (); + void setCurve (SPCurve *curve, unsigned int owner); + void setCurveInsync (SPCurve *curve, unsigned int owner); + int hasMarkers () const; + int numberOfMarkers (int type); -struct SPShapeClass { - SPLPEItemClass item_class; +private: + static void sp_shape_init (SPShape *shape); + static void sp_shape_finalize (GObject *object); + + static void sp_shape_build (SPObject * object, SPDocument * document, Inkscape::XML::Node * repr); + static void sp_shape_release (SPObject *object); + + static void sp_shape_set(SPObject *object, unsigned key, gchar const *value); + static void sp_shape_update (SPObject *object, SPCtx *ctx, unsigned int flags); + static void sp_shape_modified (SPObject *object, unsigned int flags); + static Inkscape::XML::Node *sp_shape_write(SPObject *object, Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, guint flags); + + static void sp_shape_bbox(SPItem const *item, NRRect *bbox, Geom::Matrix const &transform, unsigned const flags); + static NRArenaItem *sp_shape_show (SPItem *item, NRArena *arena, unsigned int key, unsigned int flags); + static void sp_shape_hide (SPItem *item, unsigned int key); + static void sp_shape_snappoints (SPItem const *item, std::vector &p, Inkscape::SnapPreferences const *snapprefs); + + static void sp_shape_update_marker_view (SPShape *shape, NRArenaItem *ai); - /* Build bpath from extra shape attributes */ - void (* set_shape) (SPShape *shape); -}; -GType sp_shape_get_type (void); -void sp_shape_set_shape (SPShape *shape); + friend class SPShapeClass; +}; + +class SPShapeClass { +public: + SPLPEItemClass item_class; -/* Return duplicate of curve or NULL */ -SPCurve *sp_shape_get_curve (SPShape *shape); + /* Build bpath from extra shape attributes */ + void (* set_shape) (SPShape *shape); -// sets a curve, updates display -void sp_shape_set_curve (SPShape *shape, SPCurve *curve, unsigned int owner); +private: + static SPLPEItemClass *parent_class; + static void sp_shape_class_init (SPShapeClass *klass); -// same as sp_shape_set_curve, but without updating display -void sp_shape_set_curve_insync (SPShape *shape, SPCurve *curve, unsigned int owner); + friend class SPShape; +}; -// markers API void sp_shape_set_marker (SPObject *object, unsigned int key, const gchar *value); -int sp_shape_has_markers (SPShape const *shape); -int sp_shape_number_of_markers (SPShape* Shape, int type); -NR::Matrix sp_shape_marker_get_transform(SPShape const *shape, NArtBpath const *bp); -bool sp_shape_marker_required(SPShape const *shape, int const m, NArtBpath *bp); -#endif +Geom::Matrix sp_shape_marker_get_transform(Geom::Curve const & c1, Geom::Curve const & c2); +Geom::Matrix sp_shape_marker_get_transform_at_start(Geom::Curve const & c); +Geom::Matrix sp_shape_marker_get_transform_at_end(Geom::Curve const & c); + +#endif // SEEN_SP_SHAPE_H + +/* + Local Variables: + mode:c++ + c-file-style:"stroustrup" + c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +)) + indent-tabs-mode:nil + fill-column:99 + End: +*/ +// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:fileencoding=utf-8:textwidth=99 :