summaryrefslogtreecommitdiffstats
path: root/src/sp-object-repr.cpp
diff options
context:
space:
mode:
authorMarkus Engel <markus.engel@tum.de>2013-04-02 18:45:20 +0000
committerMarkus Engel <markus.engel@tum.de>2013-04-02 18:45:20 +0000
commit0a7e23844c3a43203de3f5207aecb278e84ee739 (patch)
tree73368a7dd8367c23599f0027d63c1c0a06638865 /src/sp-object-repr.cpp
parentRegistered classes with new factory. Hkern, Vkern and FeFuncX have to be rewr... (diff)
downloadinkscape-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.cpp169
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[] = {