diff options
| author | Markus Engel <markus.engel@tum.de> | 2013-04-02 18:45:20 +0000 |
|---|---|---|
| committer | Markus Engel <markus.engel@tum.de> | 2013-04-02 18:45:20 +0000 |
| commit | 0a7e23844c3a43203de3f5207aecb278e84ee739 (patch) | |
| tree | 73368a7dd8367c23599f0027d63c1c0a06638865 /src/sp-object-repr.cpp | |
| parent | Registered classes with new factory. Hkern, Vkern and FeFuncX have to be rewr... (diff) | |
| download | inkscape-0a7e23844c3a43203de3f5207aecb278e84ee739.tar.gz inkscape-0a7e23844c3a43203de3f5207aecb278e84ee739.zip | |
Added virtual destructor to SPObject. Switched to new factory. Replaced some casts. Inkscape seems stable, car.svgz renders correctly to png.
(bzr r11608.1.70)
Diffstat (limited to 'src/sp-object-repr.cpp')
| -rw-r--r-- | src/sp-object-repr.cpp | 169 |
1 files changed, 87 insertions, 82 deletions
diff --git a/src/sp-object-repr.cpp b/src/sp-object-repr.cpp index 02114aabc..c3d60c5e8 100644 --- a/src/sp-object-repr.cpp +++ b/src/sp-object-repr.cpp @@ -84,6 +84,7 @@ #include "sp-title.h" #include "sp-desc.h" +#include "sp-factory.h" enum NameType { REPR_NAME, SODIPODI_TYPE }; static unsigned const N_NAME_TYPES = SODIPODI_TYPE + 1; @@ -97,12 +98,16 @@ SPRoot *sp_object_repr_build_tree(SPDocument *document, Inkscape::XML::Node *rep gchar const * const name = repr->name(); g_assert(name != NULL); - GType const type = name_to_gtype(REPR_NAME, name); - g_assert(g_type_is_a(type, SP_TYPE_ROOT)); - gpointer newobj = g_object_new(type, 0); - g_assert(newobj != NULL); - SPObject *const object = SP_OBJECT(newobj); - g_assert(object != NULL); + +// GType const type = name_to_gtype(REPR_NAME, name); +// g_assert(g_type_is_a(type, SP_TYPE_ROOT)); +// gpointer newobj = g_object_new(type, 0); +// g_assert(newobj != NULL); +// SPObject *const object = SP_OBJECT(newobj); +// g_assert(object != NULL); + + SPObject* object = SPFactory::instance().createObject(*repr); + object->invoke_build(document, repr, FALSE); return SP_ROOT(object); @@ -130,93 +135,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[] = { |
