diff options
| author | Markus Engel <markus.engel@tum.de> | 2013-04-02 17:14:36 +0000 |
|---|---|---|
| committer | Markus Engel <markus.engel@tum.de> | 2013-04-02 17:14:36 +0000 |
| commit | d1af3566872dfff2aeec84859c87f1f8d13f79df (patch) | |
| tree | f52de634baaf9cce333012b29437979881c7ac22 /src | |
| parent | Added new factory for SPObject tree objects. (diff) | |
| download | inkscape-d1af3566872dfff2aeec84859c87f1f8d13f79df.tar.gz inkscape-d1af3566872dfff2aeec84859c87f1f8d13f79df.zip | |
Registered classes with new factory. Hkern, Vkern and FeFuncX have to be rewritten, as they aren't real classes.
(bzr r11608.1.69)
Diffstat (limited to 'src')
63 files changed, 766 insertions, 76 deletions
diff --git a/src/box3d-side.cpp b/src/box3d-side.cpp index 3b46b203a..23bc269d5 100644 --- a/src/box3d-side.cpp +++ b/src/box3d-side.cpp @@ -28,6 +28,16 @@ struct SPPathClass; static void box3d_side_compute_corner_ids(Box3DSide *side, unsigned int corners[4]); +#include "sp-factory.h" + +namespace { + SPObject* createBox3DSide() { + return new Box3DSide(); + } + + bool box3DSideRegistered = SPFactory::instance().registerObject("inkscape:box3dside", createBox3DSide); +} + G_DEFINE_TYPE(Box3DSide, box3d_side, G_TYPE_OBJECT); static void box3d_side_class_init(Box3DSideClass *klass) diff --git a/src/box3d.cpp b/src/box3d.cpp index 8f7c20c49..c3f6a1dbb 100644 --- a/src/box3d.cpp +++ b/src/box3d.cpp @@ -43,6 +43,16 @@ static void box3d_ref_changed(SPObject *old_ref, SPObject *ref, SPBox3D *box); static gint counter = 0; +#include "sp-factory.h" + +namespace { + SPObject* createBox3D() { + return new SPBox3D(); + } + + bool box3DRegistered = SPFactory::instance().registerObject("inkscape:box3d", createBox3D); +} + G_DEFINE_TYPE(SPBox3D, box3d, G_TYPE_OBJECT); static void box3d_class_init(SPBox3DClass *klass) diff --git a/src/color-profile.cpp b/src/color-profile.cpp index 63cb3addc..f1d89111d 100644 --- a/src/color-profile.cpp +++ b/src/color-profile.cpp @@ -184,6 +184,18 @@ cmsHPROFILE ColorProfileImpl::getNULLProfile() { #endif // defined(HAVE_LIBLCMS1) || defined(HAVE_LIBLCMS2) + +#include "sp-factory.h" + +namespace { + SPObject* createColorProfile() { + return new Inkscape::ColorProfile(); + } + + bool rectRegistered = SPFactory::instance().registerObject("svg:color-profile", createColorProfile); +} + + /** * Register ColorProfile class and return its type. */ diff --git a/src/filters/blend.cpp b/src/filters/blend.cpp index e5159d522..4ca8a8496 100644 --- a/src/filters/blend.cpp +++ b/src/filters/blend.cpp @@ -30,6 +30,16 @@ #include "display/nr-filter-blend.h" #include "display/nr-filter-types.h" +#include "sp-factory.h" + +namespace { + SPObject* createBlend() { + return new SPFeBlend(); + } + + bool blendRegistered = SPFactory::instance().registerObject("svg:feBlend", createBlend); +} + /* FeBlend base class */ G_DEFINE_TYPE(SPFeBlend, sp_feBlend, G_TYPE_OBJECT); diff --git a/src/filters/colormatrix.cpp b/src/filters/colormatrix.cpp index 889913e2e..ee27a85e6 100644 --- a/src/filters/colormatrix.cpp +++ b/src/filters/colormatrix.cpp @@ -29,6 +29,16 @@ #include "display/nr-filter.h" #include "display/nr-filter-colormatrix.h" +#include "sp-factory.h" + +namespace { + SPObject* createColorMatrix() { + return new SPFeColorMatrix(); + } + + bool colorMatrixRegistered = SPFactory::instance().registerObject("svg:feColorMatrix", createColorMatrix); +} + /* FeColorMatrix base class */ G_DEFINE_TYPE(SPFeColorMatrix, sp_feColorMatrix, G_TYPE_OBJECT); diff --git a/src/filters/componenttransfer.cpp b/src/filters/componenttransfer.cpp index ec1cdb641..0a35c9a14 100644 --- a/src/filters/componenttransfer.cpp +++ b/src/filters/componenttransfer.cpp @@ -27,6 +27,16 @@ #include "display/nr-filter.h" #include "display/nr-filter-component-transfer.h" +#include "sp-factory.h" + +namespace { + SPObject* createComponentTransfer() { + return new SPFeComponentTransfer(); + } + + bool componentTransferRegistered = SPFactory::instance().registerObject("svg:feComponentTransfer", createComponentTransfer); +} + /* FeComponentTransfer base class */ G_DEFINE_TYPE(SPFeComponentTransfer, sp_feComponentTransfer, G_TYPE_OBJECT); diff --git a/src/filters/composite.cpp b/src/filters/composite.cpp index cddcc86bd..a6bf107d9 100644 --- a/src/filters/composite.cpp +++ b/src/filters/composite.cpp @@ -25,6 +25,16 @@ #include "display/nr-filter-composite.h" #include "sp-filter.h" +#include "sp-factory.h" + +namespace { + SPObject* createComposite() { + return new SPFeComposite(); + } + + bool compositeRegistered = SPFactory::instance().registerObject("svg:feComposite", createComposite); +} + /* FeComposite base class */ G_DEFINE_TYPE(SPFeComposite, sp_feComposite, G_TYPE_OBJECT); diff --git a/src/filters/convolvematrix.cpp b/src/filters/convolvematrix.cpp index 174c74288..d1be96a73 100644 --- a/src/filters/convolvematrix.cpp +++ b/src/filters/convolvematrix.cpp @@ -28,6 +28,16 @@ #include "display/nr-filter.h" #include "display/nr-filter-convolve-matrix.h" +#include "sp-factory.h" + +namespace { + SPObject* createConvolveMatrix() { + return new SPFeConvolveMatrix(); + } + + bool convolveMatrixRegistered = SPFactory::instance().registerObject("svg:feConvolveMatrix", createConvolveMatrix); +} + /* FeConvolveMatrix base class */ G_DEFINE_TYPE(SPFeConvolveMatrix, sp_feConvolveMatrix, G_TYPE_OBJECT); diff --git a/src/filters/diffuselighting.cpp b/src/filters/diffuselighting.cpp index b53451f73..8cdd5e76b 100644 --- a/src/filters/diffuselighting.cpp +++ b/src/filters/diffuselighting.cpp @@ -36,6 +36,16 @@ /* FeDiffuseLighting base class */ static void sp_feDiffuseLighting_children_modified(SPFeDiffuseLighting *sp_diffuselighting); +#include "sp-factory.h" + +namespace { + SPObject* createDiffuseLighting() { + return new SPFeDiffuseLighting(); + } + + bool diffuseLightingRegistered = SPFactory::instance().registerObject("svg:feDiffuseLighting", createDiffuseLighting); +} + G_DEFINE_TYPE(SPFeDiffuseLighting, sp_feDiffuseLighting, G_TYPE_OBJECT); static void diff --git a/src/filters/displacementmap.cpp b/src/filters/displacementmap.cpp index 79431c251..b192083c1 100644 --- a/src/filters/displacementmap.cpp +++ b/src/filters/displacementmap.cpp @@ -25,6 +25,16 @@ #include "display/nr-filter.h" #include "display/nr-filter-displacement-map.h" +#include "sp-factory.h" + +namespace { + SPObject* createDisplacementMap() { + return new SPFeDisplacementMap(); + } + + bool displacementMapRegistered = SPFactory::instance().registerObject("svg:feDisplacementMap", createDisplacementMap); +} + /* FeDisplacementMap base class */ G_DEFINE_TYPE(SPFeDisplacementMap, sp_feDisplacementMap, G_TYPE_OBJECT); diff --git a/src/filters/flood.cpp b/src/filters/flood.cpp index 7d8df14fb..eb24d2748 100644 --- a/src/filters/flood.cpp +++ b/src/filters/flood.cpp @@ -27,6 +27,16 @@ #include "display/nr-filter.h" #include "display/nr-filter-flood.h" +#include "sp-factory.h" + +namespace { + SPObject* createFlood() { + return new SPFeFlood(); + } + + bool floodRegistered = SPFactory::instance().registerObject("svg:feFlood", createFlood); +} + /* FeFlood base class */ G_DEFINE_TYPE(SPFeFlood, sp_feFlood, G_TYPE_OBJECT); diff --git a/src/filters/gaussian-blur.cpp b/src/filters/gaussian-blur.cpp index 643b695e6..f66e045f2 100644 --- a/src/filters/gaussian-blur.cpp +++ b/src/filters/gaussian-blur.cpp @@ -30,6 +30,16 @@ //#define SP_MACROS_SILENT //#include "macros.h" +#include "sp-factory.h" + +namespace { + SPObject* createGaussianBlur() { + return new SPGaussianBlur(); + } + + bool gaussianBlurRegistered = SPFactory::instance().registerObject("svg:feGaussianBlur", createGaussianBlur); +} + /* GaussianBlur base class */ G_DEFINE_TYPE(SPGaussianBlur, sp_gaussianBlur, G_TYPE_OBJECT); diff --git a/src/filters/image.cpp b/src/filters/image.cpp index 6c8af9c01..e6d1eceec 100644 --- a/src/filters/image.cpp +++ b/src/filters/image.cpp @@ -29,6 +29,16 @@ #include "display/nr-filter.h" +#include "sp-factory.h" + +namespace { + SPObject* createImage() { + return new SPFeImage(); + } + + bool imageRegistered = SPFactory::instance().registerObject("svg:feImage", createImage); +} + /* FeImage base class */ G_DEFINE_TYPE(SPFeImage, sp_feImage, G_TYPE_OBJECT); diff --git a/src/filters/merge.cpp b/src/filters/merge.cpp index 01fb4bb72..505f12887 100644 --- a/src/filters/merge.cpp +++ b/src/filters/merge.cpp @@ -24,6 +24,16 @@ #include "display/nr-filter.h" #include "display/nr-filter-merge.h" +#include "sp-factory.h" + +namespace { + SPObject* createMerge() { + return new SPFeMerge(); + } + + bool mergeRegistered = SPFactory::instance().registerObject("svg:feMerge", createMerge); +} + /* FeMerge base class */ G_DEFINE_TYPE(SPFeMerge, sp_feMerge, G_TYPE_OBJECT); diff --git a/src/filters/mergenode.cpp b/src/filters/mergenode.cpp index c1c5c6067..fbdcc9277 100644 --- a/src/filters/mergenode.cpp +++ b/src/filters/mergenode.cpp @@ -23,6 +23,16 @@ #include "filters/merge.h" #include "display/nr-filter-types.h" +#include "sp-factory.h" + +namespace { + SPObject* createMergeNode() { + return new SPFeMergeNode(); + } + + bool mergeNodeRegistered = SPFactory::instance().registerObject("svg:feMergeNode", createMergeNode); +} + G_DEFINE_TYPE(SPFeMergeNode, sp_feMergeNode, G_TYPE_OBJECT); static void diff --git a/src/filters/morphology.cpp b/src/filters/morphology.cpp index 87d7dafdc..bbdb702c0 100644 --- a/src/filters/morphology.cpp +++ b/src/filters/morphology.cpp @@ -26,6 +26,16 @@ #include "display/nr-filter.h" #include "display/nr-filter-morphology.h" +#include "sp-factory.h" + +namespace { + SPObject* createMorphology() { + return new SPFeMorphology(); + } + + bool morphologyRegistered = SPFactory::instance().registerObject("svg:feMorphology", createMorphology); +} + /* FeMorphology base class */ G_DEFINE_TYPE(SPFeMorphology, sp_feMorphology, G_TYPE_OBJECT); diff --git a/src/filters/offset.cpp b/src/filters/offset.cpp index 26607e590..ce0490e0d 100644 --- a/src/filters/offset.cpp +++ b/src/filters/offset.cpp @@ -25,6 +25,16 @@ #include "display/nr-filter.h" #include "display/nr-filter-offset.h" +#include "sp-factory.h" + +namespace { + SPObject* createOffset() { + return new SPFeOffset(); + } + + bool offsetRegistered = SPFactory::instance().registerObject("svg:feOffset", createOffset); +} + /* FeOffset base class */ G_DEFINE_TYPE(SPFeOffset, sp_feOffset, G_TYPE_OBJECT); diff --git a/src/filters/pointlight.cpp b/src/filters/pointlight.cpp index 749a4c82b..371166880 100644 --- a/src/filters/pointlight.cpp +++ b/src/filters/pointlight.cpp @@ -29,6 +29,16 @@ #define SP_MACROS_SILENT #include "macros.h" +#include "sp-factory.h" + +namespace { + SPObject* createpPointLight() { + return new SPFePointLight(); + } + + bool pointLightRegistered = SPFactory::instance().registerObject("svg:fePointLight", createPointLight); +} + G_DEFINE_TYPE(SPFePointLight, sp_fepointlight, G_TYPE_OBJECT); static void diff --git a/src/filters/specularlighting.cpp b/src/filters/specularlighting.cpp index 4b8fe96b6..1409bc88b 100644 --- a/src/filters/specularlighting.cpp +++ b/src/filters/specularlighting.cpp @@ -36,6 +36,16 @@ /* FeSpecularLighting base class */ static void sp_feSpecularLighting_children_modified(SPFeSpecularLighting *sp_specularlighting); +#include "sp-factory.h" + +namespace { + SPObject* createSpecularLighting() { + return new SPFeSpecularLighting(); + } + + bool specularLightingRegistered = SPFactory::instance().registerObject("svg:feSpecularLighting", createSpecularLighting); +} + G_DEFINE_TYPE(SPFeSpecularLighting, sp_feSpecularLighting, G_TYPE_OBJECT); static void diff --git a/src/filters/spotlight.cpp b/src/filters/spotlight.cpp index a1cff9db9..9e89139e3 100644 --- a/src/filters/spotlight.cpp +++ b/src/filters/spotlight.cpp @@ -29,6 +29,16 @@ #define SP_MACROS_SILENT #include "macros.h" +#include "sp-factory.h" + +namespace { + SPObject* createSpotLight() { + return new SPFeSpotLight(); + } + + bool spotLightRegistered = SPFactory::instance().registerObject("svg:feSpotLight", createSpotLight); +} + G_DEFINE_TYPE(SPFeSpotLight, sp_fespotlight, G_TYPE_OBJECT); static void diff --git a/src/filters/tile.cpp b/src/filters/tile.cpp index 8aefc14c6..f6b4c00d6 100644 --- a/src/filters/tile.cpp +++ b/src/filters/tile.cpp @@ -22,6 +22,16 @@ #include "display/nr-filter.h" #include "display/nr-filter-tile.h" +#include "sp-factory.h" + +namespace { + SPObject* createTile() { + return new SPFeTile(); + } + + bool tileRegistered = SPFactory::instance().registerObject("svg:feTile", createTile); +} + /* FeTile base class */ G_DEFINE_TYPE(SPFeTile, sp_feTile, G_TYPE_OBJECT); diff --git a/src/filters/turbulence.cpp b/src/filters/turbulence.cpp index 758322b9f..8aa168114 100644 --- a/src/filters/turbulence.cpp +++ b/src/filters/turbulence.cpp @@ -28,6 +28,16 @@ #include "display/nr-filter.h" #include "display/nr-filter-turbulence.h" +#include "sp-factory.h" + +namespace { + SPObject* createTurbulence() { + return new SPFeTurbulence(); + } + + bool turbulenceRegistered = SPFactory::instance().registerObject("svg:feTurbulence", createTurbulence); +} + /* FeTurbulence base class */ G_DEFINE_TYPE(SPFeTurbulence, sp_feTurbulence, G_TYPE_OBJECT); diff --git a/src/live_effects/lpeobject.cpp b/src/live_effects/lpeobject.cpp index 15a8a26b6..5191d612c 100644 --- a/src/live_effects/lpeobject.cpp +++ b/src/live_effects/lpeobject.cpp @@ -20,6 +20,16 @@ //#define LIVEPATHEFFECT_VERBOSE +#include "sp-factory.h" + +namespace { + SPObject* createLivepatheffect() { + return new LivePathEffectObject(); + } + + bool livepatheffectRegistered = SPFactory::instance().registerObject("inkscape:path-effect", createLivepatheffect); +} + static void livepatheffect_on_repr_attr_changed (Inkscape::XML::Node * repr, const gchar *key, const gchar *oldval, const gchar *newval, bool is_interactive, void * data); static SPObjectClass *livepatheffect_parent_class; diff --git a/src/marker.cpp b/src/marker.cpp index ef2aeaae5..7b824c196 100644 --- a/src/marker.cpp +++ b/src/marker.cpp @@ -42,6 +42,16 @@ static void sp_marker_print (SPItem *item, SPPrintContext *ctx); static void sp_marker_view_remove (SPMarker *marker, SPMarkerView *view, unsigned int destroyitems); +#include "sp-factory.h" + +namespace { + SPObject* createMarker() { + return new SPMarker(); + } + + bool markerRegistered = SPFactory::instance().registerObject("svg:marker", createMarker); +} + G_DEFINE_TYPE(SPMarker, sp_marker, G_TYPE_OBJECT); /** diff --git a/src/persp3d.cpp b/src/persp3d.cpp index 2d67ac1a2..97898daf2 100644 --- a/src/persp3d.cpp +++ b/src/persp3d.cpp @@ -34,6 +34,16 @@ static gchar * persp3d_pt_to_str (Persp3DImpl *persp_impl, Proj::Axis const axis static int global_counter = 0; +#include "sp-factory.h" + +namespace { + SPObject* createPersp3D() { + return new Persp3D(); + } + + bool persp3DRegistered = SPFactory::instance().registerObject("inkscape:persp3d", createPersp3D); +} + /* Constructor/destructor for the internal class */ Persp3DImpl::Persp3DImpl() { diff --git a/src/sp-anchor.cpp b/src/sp-anchor.cpp index 8a1feb61d..df2669ebf 100644 --- a/src/sp-anchor.cpp +++ b/src/sp-anchor.cpp @@ -25,6 +25,16 @@ #include "ui/view/view.h" #include "document.h" +#include "sp-factory.h" + +namespace { + SPObject* createAnchor() { + return new SPAnchor(); + } + + bool anchorRegistered = SPFactory::instance().registerObject("svg:a", createAnchor); +} + G_DEFINE_TYPE(SPAnchor, sp_anchor, G_TYPE_OBJECT); static void sp_anchor_class_init(SPAnchorClass *ac) diff --git a/src/sp-clippath.cpp b/src/sp-clippath.cpp index ff12f9678..496a4ed82 100644 --- a/src/sp-clippath.cpp +++ b/src/sp-clippath.cpp @@ -40,6 +40,16 @@ struct SPClipPathView { static SPClipPathView* sp_clippath_view_new_prepend(SPClipPathView *list, unsigned int key, Inkscape::DrawingItem *arenaitem); static SPClipPathView* sp_clippath_view_list_remove(SPClipPathView *list, SPClipPathView *view); +#include "sp-factory.h" + +namespace { + SPObject* createClipPath() { + return new SPClipPath(); + } + + bool clipPathRegistered = SPFactory::instance().registerObject("svg:clipPath", createClipPath); +} + G_DEFINE_TYPE(SPClipPath, sp_clippath, G_TYPE_OBJECT); static void diff --git a/src/sp-defs.cpp b/src/sp-defs.cpp index d73b6db74..a385dca6a 100644 --- a/src/sp-defs.cpp +++ b/src/sp-defs.cpp @@ -20,6 +20,15 @@ #include "xml/repr.h" #include "document.h" +#include "sp-factory.h" + +namespace { + SPObject* createDefs() { + return new SPDefs(); + } + + bool defsRegistered = SPFactory::instance().registerObject("svg:defs", createDefs); +} G_DEFINE_TYPE(SPDefs, sp_defs, G_TYPE_OBJECT); diff --git a/src/sp-desc.cpp b/src/sp-desc.cpp index 81b4240bb..0fe1f5305 100644 --- a/src/sp-desc.cpp +++ b/src/sp-desc.cpp @@ -16,6 +16,16 @@ #include "sp-desc.h" #include "xml/repr.h" +#include "sp-factory.h" + +namespace { + SPObject* createDesc() { + return new SPDesc(); + } + + bool descRegistered = SPFactory::instance().registerObject("svg:desc", createDesc); +} + G_DEFINE_TYPE(SPDesc, sp_desc, SP_TYPE_OBJECT); static void sp_desc_class_init(SPDescClass *klass) diff --git a/src/sp-ellipse.cpp b/src/sp-ellipse.cpp index a2c94c508..66c7a81a8 100644 --- a/src/sp-ellipse.cpp +++ b/src/sp-ellipse.cpp @@ -35,6 +35,28 @@ #define noELLIPSE_VERBOSE + +#include "sp-factory.h" + +namespace { + SPObject* createEllipse() { + return new SPEllipse(); + } + + SPObject* createCircle() { + return new SPCircle(); + } + + SPObject* createArc() { + return new SPArc(); + } + + bool ellipseRegistered = SPFactory::instance().registerObject("svg:ellipse", createEllipse); + bool circleRegistered = SPFactory::instance().registerObject("svg:circle", createCircle); + bool arcRegistered = SPFactory::instance().registerObject("arc", createArc); +} + + #ifndef M_PI #define M_PI 3.14159265358979323846 #endif diff --git a/src/sp-filter.cpp b/src/sp-filter.cpp index 998c28865..db1887715 100644 --- a/src/sp-filter.cpp +++ b/src/sp-filter.cpp @@ -41,6 +41,16 @@ using std::pair; static void filter_ref_changed(SPObject *old_ref, SPObject *ref, SPFilter *filter); static void filter_ref_modified(SPObject *href, guint flags, SPFilter *filter); +#include "sp-factory.h" + +namespace { + SPObject* createFilter() { + return new SPFilter(); + } + + bool filterRegistered = SPFactory::instance().registerObject("svg:filter", createFilter); +} + G_DEFINE_TYPE(SPFilter, sp_filter, G_TYPE_OBJECT); static void diff --git a/src/sp-flowdiv.cpp b/src/sp-flowdiv.cpp index 329391352..6c8f2c4e2 100644 --- a/src/sp-flowdiv.cpp +++ b/src/sp-flowdiv.cpp @@ -20,6 +20,36 @@ static void sp_flowpara_init (SPFlowpara *group); static void sp_flowline_init (SPFlowline *group); static void sp_flowregionbreak_init (SPFlowregionbreak *group); +#include "sp-factory.h" + +namespace { + SPObject* createFlowdiv() { + return new SPFlowdiv(); + } + + SPObject* createFlowtspan() { + return new SPFlowtspan(); + } + + SPObject* createFlowpara() { + return new SPFlowpara(); + } + + SPObject* createFlowline() { + return new SPFlowline(); + } + + SPObject* createFlowregionbreak() { + return new SPFlowregionbreak(); + } + + bool flowdivRegistered = SPFactory::instance().registerObject("svg:flowDiv", createFlowdiv); + bool flowtspanRegistered = SPFactory::instance().registerObject("svg:flowSpan", createFlowtspan); + bool flowparaRegistered = SPFactory::instance().registerObject("svg:flowPara", createFlowpara); + bool flowlineRegistered = SPFactory::instance().registerObject("svg:flowLine", createFlowline); + bool flowregionbreakRegistered = SPFactory::instance().registerObject("svg:flowRegionBreak", createFlowregionbreak); +} + G_DEFINE_TYPE(SPFlowdiv, sp_flowdiv, G_TYPE_OBJECT); static void sp_flowdiv_class_init(SPFlowdivClass *klass) diff --git a/src/sp-flowregion.cpp b/src/sp-flowregion.cpp index 29ce4e7a9..bc9f6aeda 100644 --- a/src/sp-flowregion.cpp +++ b/src/sp-flowregion.cpp @@ -27,6 +27,21 @@ static void sp_flowregion_init (SPFlowregion *group); static void sp_flowregion_dispose (GObject *object); +#include "sp-factory.h" + +namespace { + SPObject* createFlowregion() { + return new SPFlowregion(); + } + + SPObject* createFlowregionExclude() { + return new SPFlowregionExclude(); + } + + bool flowregionRegistered = SPFactory::instance().registerObject("svg:flowRegion", createFlowregion); + bool flowregionExcludeRegistered = SPFactory::instance().registerObject("svg:flowRegionExclude", createFlowregionExclude); +} + G_DEFINE_TYPE(SPFlowregion, sp_flowregion, G_TYPE_OBJECT); static void sp_flowregionexclude_init (SPFlowregionExclude *group); diff --git a/src/sp-flowtext.cpp b/src/sp-flowtext.cpp index 8b6cf4a25..1d08b8256 100644 --- a/src/sp-flowtext.cpp +++ b/src/sp-flowtext.cpp @@ -37,6 +37,16 @@ static void sp_flowtext_init(SPFlowtext *group); static void sp_flowtext_dispose(GObject *object); +#include "sp-factory.h" + +namespace { + SPObject* createFlowtext() { + return new SPFlowtext(); + } + + bool flowtextRegistered = SPFactory::instance().registerObject("svg:flowRoot", createFlowtext); +} + G_DEFINE_TYPE(SPFlowtext, sp_flowtext, G_TYPE_OBJECT); static void diff --git a/src/sp-font-face.cpp b/src/sp-font-face.cpp index d946c4f20..6149d9af0 100644 --- a/src/sp-font-face.cpp +++ b/src/sp-font-face.cpp @@ -259,6 +259,16 @@ static std::vector<FontFaceStretchType> sp_read_fontFaceStretchType(gchar const return v; } +#include "sp-factory.h" + +namespace { + SPObject* createFontFace() { + return new SPFontFace(); + } + + bool fontFaceRegistered = SPFactory::instance().registerObject("svg:font-face", createFontFace); +} + G_DEFINE_TYPE(SPFontFace, sp_fontface, G_TYPE_OBJECT); static void sp_fontface_class_init(SPFontFaceClass *fc) diff --git a/src/sp-font.cpp b/src/sp-font.cpp index d7eafe84e..ed91dc6e7 100644 --- a/src/sp-font.cpp +++ b/src/sp-font.cpp @@ -23,6 +23,16 @@ #include "display/nr-svgfonts.h" +#include "sp-factory.h" + +namespace { + SPObject* createFont() { + return new SPFont(); + } + + bool fontRegistered = SPFactory::instance().registerObject("svg:font", createFont); +} + G_DEFINE_TYPE(SPFont, sp_font, G_TYPE_OBJECT); static void sp_font_class_init(SPFontClass *fc) diff --git a/src/sp-glyph.cpp b/src/sp-glyph.cpp index 2ab62c575..85c7beb4f 100644 --- a/src/sp-glyph.cpp +++ b/src/sp-glyph.cpp @@ -22,6 +22,16 @@ #include "document.h" #include <cstring> +#include "sp-factory.h" + +namespace { + SPObject* createGlyph() { + return new SPGlyph(); + } + + bool glyphRegistered = SPFactory::instance().registerObject("svg:glyph", createGlyph); +} + G_DEFINE_TYPE(SPGlyph, sp_glyph, G_TYPE_OBJECT); static void sp_glyph_class_init(SPGlyphClass *gc) diff --git a/src/sp-gradient.cpp b/src/sp-gradient.cpp index 1a1b1b1e6..70e90f33c 100644 --- a/src/sp-gradient.cpp +++ b/src/sp-gradient.cpp @@ -60,6 +60,42 @@ /// Has to be power of 2 Seems to be unused. //#define NCOLORS NR_GRADIENT_VECTOR_LENGTH +#include "sp-factory.h" + +namespace { + SPObject* createStop() { + return new SPStop(); + } + + SPObject* createMeshRow() { + return new SPMeshRow(); + } + + SPObject* createMeshPatch() { + return new SPMeshPatch(); + } + + SPObject* createLinearGradient() { + return new SPLinearGradient(); + } + + SPObject* createRadialGradient() { + return new SPRadialGradient(); + } + + SPObject* createMeshGradient() { + return new SPMeshGradient(); + } + + bool stopRegistered = SPFactory::instance().registerObject("svg:stop", createStop); + bool meshRowRegistered = SPFactory::instance().registerObject("svg:meshRow", createMeshRow); + bool meshPatchRegistered = SPFactory::instance().registerObject("svg:meshPatch", createMeshPatch); + bool linearGradientRegistered = SPFactory::instance().registerObject("svg:linearGradient", createLinearGradient); + bool radialGradientRegistered = SPFactory::instance().registerObject("svg:radialGradient", createRadialGradient); + bool meshGradientRegistered = SPFactory::instance().registerObject("svg:meshGradient", createMeshGradient); +} + + // SPStop G_DEFINE_TYPE(SPStop, sp_stop, G_TYPE_OBJECT); diff --git a/src/sp-image.cpp b/src/sp-image.cpp index ecae573e6..8cba1e87a 100644 --- a/src/sp-image.cpp +++ b/src/sp-image.cpp @@ -499,6 +499,17 @@ GdkPixbuf* pixbuf_new_from_file( const char *filename, GError **error ) } } + +#include "sp-factory.h" + +namespace { + SPObject* createImage() { + return new SPImage(); + } + + bool imageRegistered = SPFactory::instance().registerObject("svg:image", createImage); +} + G_DEFINE_TYPE(SPImage, sp_image, G_TYPE_OBJECT); static void sp_image_class_init( SPImageClass * klass ) diff --git a/src/sp-item-group.cpp b/src/sp-item-group.cpp index 0dbb078dd..10e84f2da 100644 --- a/src/sp-item-group.cpp +++ b/src/sp-item-group.cpp @@ -57,6 +57,16 @@ static void sp_group_dispose(GObject *object); static void sp_group_perform_patheffect(SPGroup *group, SPGroup *topgroup, bool write); +#include "sp-factory.h" + +namespace { + SPObject* createGroup() { + return new SPGroup(); + } + + bool groupRegistered = SPFactory::instance().registerObject("svg:g", createGroup); +} + G_DEFINE_TYPE(SPGroup, sp_group, G_TYPE_OBJECT); static void diff --git a/src/sp-line.cpp b/src/sp-line.cpp index b6677baf3..d7ffa8307 100644 --- a/src/sp-line.cpp +++ b/src/sp-line.cpp @@ -24,6 +24,15 @@ #include "document.h" #include "inkscape.h" +#include "sp-factory.h" + +namespace { + SPObject* createLine() { + return new SPLine(); + } + + bool lineRegistered = SPFactory::instance().registerObject("svg:line", createLine); +} G_DEFINE_TYPE(SPLine, sp_line, G_TYPE_OBJECT); diff --git a/src/sp-mask.cpp b/src/sp-mask.cpp index cb91418b6..014d40a6a 100644 --- a/src/sp-mask.cpp +++ b/src/sp-mask.cpp @@ -37,6 +37,16 @@ struct SPMaskView { SPMaskView *sp_mask_view_new_prepend (SPMaskView *list, unsigned int key, Inkscape::DrawingItem *arenaitem); SPMaskView *sp_mask_view_list_remove (SPMaskView *list, SPMaskView *view); +#include "sp-factory.h" + +namespace { + SPObject* createMask() { + return new SPMask(); + } + + bool maskRegistered = SPFactory::instance().registerObject("svg:mask", createMask); +} + G_DEFINE_TYPE(SPMask, sp_mask, G_TYPE_OBJECT); static void diff --git a/src/sp-metadata.cpp b/src/sp-metadata.cpp index 40ed0c603..12973191f 100644 --- a/src/sp-metadata.cpp +++ b/src/sp-metadata.cpp @@ -33,6 +33,16 @@ /* Metadata base class */ +#include "sp-factory.h" + +namespace { + SPObject* createMetadata() { + return new SPMetadata(); + } + + bool metadataRegistered = SPFactory::instance().registerObject("svg:metadata", createMetadata); +} + G_DEFINE_TYPE(SPMetadata, sp_metadata, G_TYPE_OBJECT); static void diff --git a/src/sp-missing-glyph.cpp b/src/sp-missing-glyph.cpp index c1db6e26d..1a67a49ad 100644 --- a/src/sp-missing-glyph.cpp +++ b/src/sp-missing-glyph.cpp @@ -19,6 +19,16 @@ #include "sp-missing-glyph.h" #include "document.h" +#include "sp-factory.h" + +namespace { + SPObject* createMissingGlyph() { + return new SPMissingGlyph(); + } + + bool missingGlyphRegistered = SPFactory::instance().registerObject("svg:missing-glyph", createMissingGlyph); +} + G_DEFINE_TYPE(SPMissingGlyph, sp_missing_glyph, G_TYPE_OBJECT); static void sp_missing_glyph_class_init(SPMissingGlyphClass *gc) diff --git a/src/sp-object-repr.cpp b/src/sp-object-repr.cpp index eba38ec67..02114aabc 100644 --- a/src/sp-object-repr.cpp +++ b/src/sp-object-repr.cpp @@ -130,93 +130,93 @@ populate_dtables() { struct NameTypeEntry { char const *const name; GType const type_id; }; NameTypeEntry const repr_name_entries[] = { - { "svg:a", SP_TYPE_ANCHOR }, + //{ "svg:a", SP_TYPE_ANCHOR }, //{ "svg:animate", SP_TYPE_ANIMATE }, - { "svg:circle", SP_TYPE_CIRCLE }, - { "svg:color-profile", COLORPROFILE_TYPE }, - { "svg:clipPath", SP_TYPE_CLIPPATH }, - { "svg:defs", SP_TYPE_DEFS }, - { "svg:desc", SP_TYPE_DESC }, - { "svg:ellipse", SP_TYPE_ELLIPSE }, - { "svg:filter", SP_TYPE_FILTER }, + //{ "svg:circle", SP_TYPE_CIRCLE }, + //{ "svg:color-profile", COLORPROFILE_TYPE }, + //{ "svg:clipPath", SP_TYPE_CLIPPATH }, + //{ "svg:defs", SP_TYPE_DEFS }, + //{ "svg:desc", SP_TYPE_DESC }, + //{ "svg:ellipse", SP_TYPE_ELLIPSE }, + //{ "svg:filter", SP_TYPE_FILTER }, /* Note: flow* elements are proposed additions for SVG 1.2, they aren't in SVG 1.1. */ - { "svg:flowDiv", SP_TYPE_FLOWDIV }, - { "svg:flowLine", SP_TYPE_FLOWLINE }, - { "svg:flowPara", SP_TYPE_FLOWPARA }, - { "svg:flowRegion", SP_TYPE_FLOWREGION }, - { "svg:flowRegionBreak", SP_TYPE_FLOWREGIONBREAK }, - { "svg:flowRegionExclude", SP_TYPE_FLOWREGIONEXCLUDE }, - { "svg:flowRoot", SP_TYPE_FLOWTEXT }, - { "svg:flowSpan", SP_TYPE_FLOWTSPAN }, - { "svg:font", SP_TYPE_FONT }, - { "svg:font-face", SP_TYPE_FONTFACE }, - { "svg:glyph", SP_TYPE_GLYPH }, - { "svg:missing-glyph", SP_TYPE_MISSING_GLYPH }, + //{ "svg:flowDiv", SP_TYPE_FLOWDIV }, + //{ "svg:flowLine", SP_TYPE_FLOWLINE }, + //{ "svg:flowPara", SP_TYPE_FLOWPARA }, + //{ "svg:flowRegion", SP_TYPE_FLOWREGION }, + //{ "svg:flowRegionBreak", SP_TYPE_FLOWREGIONBREAK }, + //{ "svg:flowRegionExclude", SP_TYPE_FLOWREGIONEXCLUDE }, + //{ "svg:flowRoot", SP_TYPE_FLOWTEXT }, + //{ "svg:flowSpan", SP_TYPE_FLOWTSPAN }, + //{ "svg:font", SP_TYPE_FONT }, + //{ "svg:font-face", SP_TYPE_FONTFACE }, + //{ "svg:glyph", SP_TYPE_GLYPH }, + //{ "svg:missing-glyph", SP_TYPE_MISSING_GLYPH }, { "svg:hkern", SP_TYPE_HKERN }, { "svg:vkern", SP_TYPE_VKERN }, - { "svg:g", SP_TYPE_GROUP }, - { "svg:feBlend", SP_TYPE_FEBLEND }, - { "svg:feColorMatrix", SP_TYPE_FECOLORMATRIX }, - { "svg:feComponentTransfer", SP_TYPE_FECOMPONENTTRANSFER }, - { "svg:feComposite", SP_TYPE_FECOMPOSITE }, - { "svg:feConvolveMatrix", SP_TYPE_FECONVOLVEMATRIX }, - { "svg:feDiffuseLighting", SP_TYPE_FEDIFFUSELIGHTING }, - { "svg:feDistantLight", SP_TYPE_FEDISTANTLIGHT }, - { "svg:feDisplacementMap", SP_TYPE_FEDISPLACEMENTMAP }, - { "svg:feFlood", SP_TYPE_FEFLOOD }, + //{ "svg:g", SP_TYPE_GROUP }, + //{ "svg:feBlend", SP_TYPE_FEBLEND }, + //{ "svg:feColorMatrix", SP_TYPE_FECOLORMATRIX }, + //{ "svg:feComponentTransfer", SP_TYPE_FECOMPONENTTRANSFER }, + //{ "svg:feComposite", SP_TYPE_FECOMPOSITE }, + //{ "svg:feConvolveMatrix", SP_TYPE_FECONVOLVEMATRIX }, + //{ "svg:feDiffuseLighting", SP_TYPE_FEDIFFUSELIGHTING }, + //{ "svg:feDistantLight", SP_TYPE_FEDISTANTLIGHT }, + //{ "svg:feDisplacementMap", SP_TYPE_FEDISPLACEMENTMAP }, + //{ "svg:feFlood", SP_TYPE_FEFLOOD }, { "svg:feFuncR", SP_TYPE_FEFUNCR }, { "svg:feFuncG", SP_TYPE_FEFUNCG }, { "svg:feFuncB", SP_TYPE_FEFUNCB }, { "svg:feFuncA", SP_TYPE_FEFUNCA }, - { "svg:feGaussianBlur", SP_TYPE_GAUSSIANBLUR }, - { "svg:feImage", SP_TYPE_FEIMAGE }, - { "svg:feMerge", SP_TYPE_FEMERGE }, - { "svg:feMorphology", SP_TYPE_FEMORPHOLOGY }, - { "svg:feOffset", SP_TYPE_FEOFFSET }, - { "svg:fePointLight", SP_TYPE_FEPOINTLIGHT }, - { "svg:feSpecularLighting", SP_TYPE_FESPECULARLIGHTING }, - { "svg:feSpotLight", SP_TYPE_FESPOTLIGHT }, - { "svg:feTile", SP_TYPE_FETILE }, - { "svg:feTurbulence", SP_TYPE_FETURBULENCE }, - { "svg:feMergeNode", SP_TYPE_FEMERGENODE }, - { "svg:image", SP_TYPE_IMAGE }, - { "svg:line", SP_TYPE_LINE }, - { "svg:linearGradient", SP_TYPE_LINEARGRADIENT }, - { "svg:marker", SP_TYPE_MARKER }, - { "svg:mask", SP_TYPE_MASK }, - { "svg:meshGradient", SP_TYPE_MESHGRADIENT }, - { "svg:meshRow", SP_TYPE_MESHROW }, - { "svg:meshPatch", SP_TYPE_MESHPATCH }, - { "svg:metadata", SP_TYPE_METADATA }, - { "svg:path", SP_TYPE_PATH }, - { "svg:pattern", SP_TYPE_PATTERN }, - { "svg:polygon", SP_TYPE_POLYGON }, - { "svg:polyline", SP_TYPE_POLYLINE }, - { "svg:radialGradient", SP_TYPE_RADIALGRADIENT }, - { "svg:rect", SP_TYPE_RECT }, - { "svg:stop", SP_TYPE_STOP }, - { "svg:script", SP_TYPE_SCRIPT }, - { "svg:svg", SP_TYPE_ROOT }, - { "svg:style", SP_TYPE_STYLE_ELEM }, - { "svg:switch", SP_TYPE_SWITCH }, - { "svg:symbol", SP_TYPE_SYMBOL }, - { "svg:text", SP_TYPE_TEXT }, - { "svg:textPath", SP_TYPE_TEXTPATH }, - { "svg:title", SP_TYPE_TITLE }, - { "svg:tref", SP_TYPE_TREF }, - { "svg:tspan", SP_TYPE_TSPAN }, - { "svg:use", SP_TYPE_USE }, - { "inkscape:path-effect", TYPE_LIVEPATHEFFECT } + //{ "svg:feGaussianBlur", SP_TYPE_GAUSSIANBLUR }, + //{ "svg:feImage", SP_TYPE_FEIMAGE }, + //{ "svg:feMerge", SP_TYPE_FEMERGE }, + //{ "svg:feMorphology", SP_TYPE_FEMORPHOLOGY }, + //{ "svg:feOffset", SP_TYPE_FEOFFSET }, + //{ "svg:fePointLight", SP_TYPE_FEPOINTLIGHT }, + //{ "svg:feSpecularLighting", SP_TYPE_FESPECULARLIGHTING }, + //{ "svg:feSpotLight", SP_TYPE_FESPOTLIGHT }, + //{ "svg:feTile", SP_TYPE_FETILE }, + //{ "svg:feTurbulence", SP_TYPE_FETURBULENCE }, + //{ "svg:feMergeNode", SP_TYPE_FEMERGENODE }, + //{ "svg:image", SP_TYPE_IMAGE }, + //{ "svg:line", SP_TYPE_LINE }, + //{ "svg:linearGradient", SP_TYPE_LINEARGRADIENT }, + //{ "svg:marker", SP_TYPE_MARKER }, + //{ "svg:mask", SP_TYPE_MASK }, + //{ "svg:meshGradient", SP_TYPE_MESHGRADIENT }, + //{ "svg:meshRow", SP_TYPE_MESHROW }, + //{ "svg:meshPatch", SP_TYPE_MESHPATCH }, + //{ "svg:metadata", SP_TYPE_METADATA }, + //{ "svg:path", SP_TYPE_PATH }, + //{ "svg:pattern", SP_TYPE_PATTERN }, + //{ "svg:polygon", SP_TYPE_POLYGON }, + //{ "svg:polyline", SP_TYPE_POLYLINE }, + //{ "svg:radialGradient", SP_TYPE_RADIALGRADIENT }, + //{ "svg:rect", SP_TYPE_RECT }, + //{ "svg:stop", SP_TYPE_STOP }, + //{ "svg:script", SP_TYPE_SCRIPT }, + //{ "svg:svg", SP_TYPE_ROOT }, + //{ "svg:style", SP_TYPE_STYLE_ELEM }, + //{ "svg:switch", SP_TYPE_SWITCH }, + //{ "svg:symbol", SP_TYPE_SYMBOL }, + //{ "svg:text", SP_TYPE_TEXT }, + //{ "svg:textPath", SP_TYPE_TEXTPATH }, + //{ "svg:title", SP_TYPE_TITLE }, + //{ "svg:tref", SP_TYPE_TREF }, + //{ "svg:tspan", SP_TYPE_TSPAN }, + //{ "svg:use", SP_TYPE_USE }, + //{ "inkscape:path-effect", TYPE_LIVEPATHEFFECT } }; NameTypeEntry const sodipodi_name_entries[] = { - { "arc", SP_TYPE_ARC }, - { "inkscape:offset", SP_TYPE_OFFSET }, - { "spiral", SP_TYPE_SPIRAL }, - { "star", SP_TYPE_STAR }, - { "inkscape:box3d", SP_TYPE_BOX3D }, - { "inkscape:box3dside", SP_TYPE_BOX3D_SIDE }, - { "inkscape:persp3d", SP_TYPE_PERSP3D } + //{ "arc", SP_TYPE_ARC }, + //{ "inkscape:offset", SP_TYPE_OFFSET }, + //{ "spiral", SP_TYPE_SPIRAL }, + //{ "star", SP_TYPE_STAR }, + //{ "inkscape:box3d", SP_TYPE_BOX3D }, + //{ "inkscape:box3dside", SP_TYPE_BOX3D_SIDE }, + //{ "inkscape:persp3d", SP_TYPE_PERSP3D } }; NameTypeEntry const *const t2entries[] = { diff --git a/src/sp-offset.cpp b/src/sp-offset.cpp index 3a8bf5a10..5a9b3933c 100644 --- a/src/sp-offset.cpp +++ b/src/sp-offset.cpp @@ -43,6 +43,16 @@ class SPDocument; +#include "sp-factory.h" + +namespace { + SPObject* createOffset() { + return new SPOffset(); + } + + bool offsetRegistered = SPFactory::instance().registerObject("inkscape:offset", createOffset); +} + #define noOFFSET_VERBOSE /** \note diff --git a/src/sp-path.cpp b/src/sp-path.cpp index 132415e51..bc6a2cb21 100644 --- a/src/sp-path.cpp +++ b/src/sp-path.cpp @@ -51,6 +51,17 @@ #define noPATH_VERBOSE +#include "sp-factory.h" + +namespace { + SPObject* createPath() { + return new SPPath(); + } + + bool pathRegistered = SPFactory::instance().registerObject("svg:path", createPath); +} + + static void sp_path_finalize(GObject *obj); G_DEFINE_TYPE(SPPath, sp_path, G_TYPE_OBJECT); diff --git a/src/sp-pattern.cpp b/src/sp-pattern.cpp index a9b8ae2ed..e4132ac1d 100644 --- a/src/sp-pattern.cpp +++ b/src/sp-pattern.cpp @@ -43,6 +43,16 @@ static void pattern_ref_changed(SPObject *old_ref, SPObject *ref, SPPattern *pat); static void pattern_ref_modified (SPObject *ref, guint flags, SPPattern *pattern); +#include "sp-factory.h" + +namespace { + SPObject* createPattern() { + return new SPPattern(); + } + + bool patternRegistered = SPFactory::instance().registerObject("svg:pattern", createPattern); +} + G_DEFINE_TYPE(SPPattern, sp_pattern, G_TYPE_OBJECT); static void diff --git a/src/sp-polygon.cpp b/src/sp-polygon.cpp index dd09663c7..5b84c0bec 100644 --- a/src/sp-polygon.cpp +++ b/src/sp-polygon.cpp @@ -25,6 +25,16 @@ #include "xml/repr.h" #include "document.h" +#include "sp-factory.h" + +namespace { + SPObject* createPolygon() { + return new SPPolygon(); + } + + bool polygonRegistered = SPFactory::instance().registerObject("svg:polygon", createPolygon); +} + G_DEFINE_TYPE(SPPolygon, sp_polygon, G_TYPE_OBJECT); static void sp_polygon_class_init(SPPolygonClass *pc) diff --git a/src/sp-polyline.cpp b/src/sp-polyline.cpp index 83d1265df..efa2bf874 100644 --- a/src/sp-polyline.cpp +++ b/src/sp-polyline.cpp @@ -20,6 +20,15 @@ #include "xml/repr.h" #include "document.h" +#include "sp-factory.h" + +namespace { + SPObject* createPolyLine() { + return new SPPolyLine(); + } + + bool polyLineRegistered = SPFactory::instance().registerObject("svg:polyline", createPolyLine); +} G_DEFINE_TYPE(SPPolyLine, sp_polyline, G_TYPE_OBJECT); diff --git a/src/sp-rect.cpp b/src/sp-rect.cpp index 3d06e8304..833e87020 100644 --- a/src/sp-rect.cpp +++ b/src/sp-rect.cpp @@ -31,6 +31,17 @@ #define noRECT_VERBOSE +#include "sp-factory.h" + +namespace { + SPObject* createRect() { + return new SPRect(); + } + + bool rectRegistered = SPFactory::instance().registerObject("svg:rect", createRect); +} + + G_DEFINE_TYPE(SPRect, sp_rect, G_TYPE_OBJECT); static void diff --git a/src/sp-root.cpp b/src/sp-root.cpp index ac2ffdbf7..8dcae05be 100644 --- a/src/sp-root.cpp +++ b/src/sp-root.cpp @@ -31,6 +31,16 @@ #include "svg/svg.h" #include "xml/repr.h" +#include "sp-factory.h" + +namespace { + SPObject* createRoot() { + return new SPRoot(); + } + + bool rootRegistered = SPFactory::instance().registerObject("svg:svg", createRoot); +} + G_DEFINE_TYPE(SPRoot, sp_root, G_TYPE_OBJECT); /** diff --git a/src/sp-script.cpp b/src/sp-script.cpp index 0c286e276..5d706a17e 100644 --- a/src/sp-script.cpp +++ b/src/sp-script.cpp @@ -16,6 +16,16 @@ #include <cstring> #include "document.h" +#include "sp-factory.h" + +namespace { + SPObject* createScript() { + return new SPScript(); + } + + bool scriptRegistered = SPFactory::instance().registerObject("svg:script", createScript); +} + G_DEFINE_TYPE(SPScript, sp_script, G_TYPE_OBJECT); static void sp_script_class_init(SPScriptClass *sc) diff --git a/src/sp-spiral.cpp b/src/sp-spiral.cpp index eec5e953e..dabd9cdd0 100644 --- a/src/sp-spiral.cpp +++ b/src/sp-spiral.cpp @@ -28,6 +28,18 @@ #include "sp-spiral.h" + +#include "sp-factory.h" + +namespace { + SPObject* createSpiral() { + return new SPSpiral(); + } + + bool spiralRegistered = SPFactory::instance().registerObject("spiral", createSpiral); +} + + G_DEFINE_TYPE(SPSpiral, sp_spiral, G_TYPE_OBJECT); /** diff --git a/src/sp-star.cpp b/src/sp-star.cpp index 11e367faf..741591479 100644 --- a/src/sp-star.cpp +++ b/src/sp-star.cpp @@ -32,6 +32,16 @@ #include "sp-star.h" +#include "sp-factory.h" + +namespace { + SPObject* createStar() { + return new SPStar(); + } + + bool starRegistered = SPFactory::instance().registerObject("star", createStar); +} + G_DEFINE_TYPE(SPStar, sp_star, G_TYPE_OBJECT); static void sp_star_class_init(SPStarClass *klass) diff --git a/src/sp-style-elem.cpp b/src/sp-style-elem.cpp index ac5d767f7..e130b677b 100644 --- a/src/sp-style-elem.cpp +++ b/src/sp-style-elem.cpp @@ -7,6 +7,16 @@ #include "style.h" using Inkscape::XML::TEXT_NODE; +#include "sp-factory.h" + +namespace { + SPObject* createStyle() { + return new SPStyleElem(); + } + + bool styleRegistered = SPFactory::instance().registerObject("svg:style", createStyle); +} + G_DEFINE_TYPE(SPStyleElem, sp_style_elem, G_TYPE_OBJECT); static void diff --git a/src/sp-switch.cpp b/src/sp-switch.cpp index fe5ae1db5..7dd5bf669 100644 --- a/src/sp-switch.cpp +++ b/src/sp-switch.cpp @@ -25,6 +25,16 @@ #include <sigc++/functors/ptr_fun.h> #include <sigc++/adaptors/bind.h> +#include "sp-factory.h" + +namespace { + SPObject* createSwitch() { + return new SPSwitch(); + } + + bool switchRegistered = SPFactory::instance().registerObject("svg:switch", createSwitch); +} + G_DEFINE_TYPE(SPSwitch, sp_switch, G_TYPE_OBJECT); static void diff --git a/src/sp-symbol.cpp b/src/sp-symbol.cpp index 6c1212d71..4e5b53e48 100644 --- a/src/sp-symbol.cpp +++ b/src/sp-symbol.cpp @@ -26,6 +26,16 @@ #include "sp-symbol.h" #include "document.h" +#include "sp-factory.h" + +namespace { + SPObject* createSymbol() { + return new SPSymbol(); + } + + bool symbolRegistered = SPFactory::instance().registerObject("svg:symbol", createSymbol); +} + G_DEFINE_TYPE(SPSymbol, sp_symbol, G_TYPE_OBJECT); static void sp_symbol_class_init(SPSymbolClass *klass) diff --git a/src/sp-text.cpp b/src/sp-text.cpp index 6d9cd105d..f35b9bb3b 100644 --- a/src/sp-text.cpp +++ b/src/sp-text.cpp @@ -58,6 +58,16 @@ #include "text-editing.h" #include "unit-constants.h" +#include "sp-factory.h" + +namespace { + SPObject* createText() { + return new SPText(); + } + + bool textRegistered = SPFactory::instance().registerObject("svg:text", createText); +} + /*##################################################### # SPTEXT #####################################################*/ diff --git a/src/sp-title.cpp b/src/sp-title.cpp index a71b53e38..614d5033e 100644 --- a/src/sp-title.cpp +++ b/src/sp-title.cpp @@ -16,6 +16,16 @@ #include "sp-title.h" #include "xml/repr.h" +#include "sp-factory.h" + +namespace { + SPObject* createTitle() { + return new SPTitle(); + } + + bool titleRegistered = SPFactory::instance().registerObject("svg:title", createTitle); +} + G_DEFINE_TYPE(SPTitle, sp_title, G_TYPE_OBJECT); static void diff --git a/src/sp-tref.cpp b/src/sp-tref.cpp index 83b0746d8..22ebb5c17 100644 --- a/src/sp-tref.cpp +++ b/src/sp-tref.cpp @@ -35,6 +35,15 @@ #include "xml/node.h" #include "xml/repr.h" +#include "sp-factory.h" + +namespace { + SPObject* createTRef() { + return new SPTRef(); + } + + bool trefRegistered = SPFactory::instance().registerObject("svg:tref", createTRef); +} //#define DEBUG_TREF #ifdef DEBUG_TREF diff --git a/src/sp-tspan.cpp b/src/sp-tspan.cpp index e9cc6f161..29786f244 100644 --- a/src/sp-tspan.cpp +++ b/src/sp-tspan.cpp @@ -43,6 +43,20 @@ #include "xml/repr.h" #include "document.h" +#include "sp-factory.h" + +namespace { + SPObject* createTSpan() { + return new SPTSpan(); + } + + SPObject* createTextPath() { + return new SPTextPath(); + } + + bool tspanRegistered = SPFactory::instance().registerObject("svg:tspan", createTSpan); + bool textPathRegistered = SPFactory::instance().registerObject("svg:textPath", createTextPath); +} /*##################################################### # SPTSPAN diff --git a/src/sp-use.cpp b/src/sp-use.cpp index f146ef1db..5b1a1e880 100644 --- a/src/sp-use.cpp +++ b/src/sp-use.cpp @@ -47,6 +47,16 @@ static void sp_use_delete_self(SPObject *deleted, SPUse *self); //void m_print(gchar *say, Geom::Affine m) //{ g_print("%s %g %g %g %g %g %g\n", say, m[0], m[1], m[2], m[3], m[4], m[5]); } +#include "sp-factory.h" + +namespace { + SPObject* createUse() { + return new SPUse(); + } + + bool useRegistered = SPFactory::instance().registerObject("svg:use", createUse); +} + G_DEFINE_TYPE(SPUse, sp_use, G_TYPE_OBJECT); static void |
