summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMarkus Engel <markus.engel@tum.de>2013-04-01 00:14:53 +0000
committerMarkus Engel <markus.engel@tum.de>2013-04-01 00:14:53 +0000
commit25078fc60b120e877a7b79bc6f08fe2a0f45c3d7 (patch)
treea59731c3f66e5c0ec00d54f2a7eb25437271a2df /src
parentPrepared exchange of casting macros. (diff)
downloadinkscape-25078fc60b120e877a7b79bc6f08fe2a0f45c3d7.tar.gz
inkscape-25078fc60b120e877a7b79bc6f08fe2a0f45c3d7.zip
Replaced all casting macros with glib-independent ones.
(bzr r11608.1.64)
Diffstat (limited to 'src')
-rw-r--r--src/box3d-side.h6
-rw-r--r--src/box3d.h6
-rw-r--r--src/color-profile.h6
-rw-r--r--src/filters/blend.h6
-rw-r--r--src/filters/colormatrix.h6
-rw-r--r--src/filters/componenttransfer-funcnode.h22
-rw-r--r--src/filters/componenttransfer.h6
-rw-r--r--src/filters/composite.h6
-rw-r--r--src/filters/convolvematrix.h6
-rw-r--r--src/filters/diffuselighting.h6
-rw-r--r--src/filters/displacementmap.h6
-rw-r--r--src/filters/distantlight.h6
-rw-r--r--src/filters/flood.h6
-rw-r--r--src/filters/gaussian-blur.h6
-rw-r--r--src/filters/image.h6
-rw-r--r--src/filters/merge.h6
-rw-r--r--src/filters/mergenode.h4
-rw-r--r--src/filters/morphology.h6
-rw-r--r--src/filters/offset.h6
-rw-r--r--src/filters/pointlight.h6
-rw-r--r--src/filters/specularlighting.h6
-rw-r--r--src/filters/spotlight.h6
-rw-r--r--src/filters/tile.h6
-rw-r--r--src/filters/turbulence.h6
-rw-r--r--src/live_effects/lpeobject.h4
-rw-r--r--src/marker.h4
-rw-r--r--src/persp3d.h6
-rw-r--r--src/sp-anchor.h6
-rw-r--r--src/sp-clippath.h6
-rw-r--r--src/sp-defs.h6
-rw-r--r--src/sp-desc.h3
-rw-r--r--src/sp-ellipse.h24
-rw-r--r--src/sp-filter-primitive.h6
-rw-r--r--src/sp-filter.h6
-rw-r--r--src/sp-flowdiv.h30
-rw-r--r--src/sp-flowregion.h12
-rw-r--r--src/sp-flowtext.h6
-rw-r--r--src/sp-font-face.h6
-rw-r--r--src/sp-font.h6
-rw-r--r--src/sp-glyph-kerning.h24
-rw-r--r--src/sp-glyph.h6
-rw-r--r--src/sp-gradient.h6
-rw-r--r--src/sp-guide.h7
-rw-r--r--src/sp-image.h6
-rw-r--r--src/sp-item-group.h6
-rw-r--r--src/sp-item.h5
-rw-r--r--src/sp-line.h6
-rw-r--r--src/sp-lpe-item.h6
-rw-r--r--src/sp-mask.h6
-rw-r--r--src/sp-mesh-patch.h6
-rw-r--r--src/sp-mesh-row.h6
-rw-r--r--src/sp-metadata.h4
-rw-r--r--src/sp-missing-glyph.h6
-rw-r--r--src/sp-namedview.h6
-rw-r--r--src/sp-object-group.h6
-rw-r--r--src/sp-object.h5
-rw-r--r--src/sp-offset.h6
-rw-r--r--src/sp-paint-server.h6
-rw-r--r--src/sp-path.h4
-rw-r--r--src/sp-pattern.h44
-rw-r--r--src/sp-polygon.h6
-rw-r--r--src/sp-polyline.h6
-rw-r--r--src/sp-rect.h6
-rw-r--r--src/sp-root.h6
-rw-r--r--src/sp-script.h6
-rw-r--r--src/sp-shape.h6
-rw-r--r--src/sp-spiral.h6
-rw-r--r--src/sp-star.h6
-rw-r--r--src/sp-stop.h6
-rw-r--r--src/sp-string.h6
-rw-r--r--src/sp-style-elem.h6
-rw-r--r--src/sp-switch.h6
-rw-r--r--src/sp-symbol.h4
-rw-r--r--src/sp-text.h6
-rw-r--r--src/sp-textpath.h6
-rw-r--r--src/sp-title.h3
-rw-r--r--src/sp-tref.h6
-rw-r--r--src/sp-tspan.h6
-rw-r--r--src/sp-use.h6
-rw-r--r--src/widgets/gradient-toolbar.cpp3
80 files changed, 219 insertions, 359 deletions
diff --git a/src/box3d-side.h b/src/box3d-side.h
index 930e797ad..7a1d760a2 100644
--- a/src/box3d-side.h
+++ b/src/box3d-side.h
@@ -17,10 +17,8 @@
#include "axis-manip.h"
#define SP_TYPE_BOX3D_SIDE (box3d_side_get_type ())
-#define SP_BOX3D_SIDE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SP_TYPE_BOX3D_SIDE, Box3DSide))
-#define SP_BOX3D_SIDE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SP_TYPE_BOX3D_SIDE, Box3DSideClass))
-#define SP_IS_BOX3D_SIDE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SP_TYPE_BOX3D_SIDE))
-#define SP_IS_BOX3D_SIDE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SP_TYPE_BOX3D_SIDE))
+#define SP_BOX3D_SIDE(obj) ((Box3DSide*)obj)
+#define SP_IS_BOX3D_SIDE(obj) (obj != NULL && static_cast<const SPObject*>(obj)->typeHierarchy.count(typeid(Box3DSide)))
class SPBox3D;
struct Persp3D;
diff --git a/src/box3d.h b/src/box3d.h
index 133cfd1c8..a854f197f 100644
--- a/src/box3d.h
+++ b/src/box3d.h
@@ -21,10 +21,8 @@
#include "axis-manip.h"
#define SP_TYPE_BOX3D (box3d_get_type ())
-#define SP_BOX3D(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SP_TYPE_BOX3D, SPBox3D))
-#define SP_BOX3D_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SP_TYPE_BOX3D, Box3DClass))
-#define SP_IS_BOX3D(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SP_TYPE_BOX3D))
-#define SP_IS_BOX3D_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SP_TYPE_BOX3D))
+#define SP_BOX3D(obj) ((SPBox3D*)obj)
+#define SP_IS_BOX3D(obj) (obj != NULL && static_cast<const SPObject*>(obj)->typeHierarchy.count(typeid(SPBox3D)))
struct Persp3D;
class Persp3DReference;
diff --git a/src/color-profile.h b/src/color-profile.h
index 92184d826..ad538721d 100644
--- a/src/color-profile.h
+++ b/src/color-profile.h
@@ -95,10 +95,8 @@ GType colorprofile_get_type();
} // namespace Inkscape
#define COLORPROFILE_TYPE (Inkscape::colorprofile_get_type())
-#define COLORPROFILE(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), COLORPROFILE_TYPE, Inkscape::ColorProfile))
-#define COLORPROFILE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), COLORPROFILE_TYPE, Inkscape::ColorProfileClass))
-#define IS_COLORPROFILE(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), COLORPROFILE_TYPE))
-#define IS_COLORPROFILE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), COLORPROFILE_TYPE))
+#define COLORPROFILE(obj) ((Inkscape::ColorProfile*)obj)
+#define IS_COLORPROFILE(obj) (obj != NULL && static_cast<const SPObject*>(obj)->typeHierarchy.count(typeid(Inkscape::ColorProfile)))
#endif // !SEEN_COLOR_PROFILE_H
diff --git a/src/filters/blend.h b/src/filters/blend.h
index cd0326eb4..d1fbc3c04 100644
--- a/src/filters/blend.h
+++ b/src/filters/blend.h
@@ -17,10 +17,8 @@
#include "display/nr-filter-blend.h"
#define SP_TYPE_FEBLEND (sp_feBlend_get_type())
-#define SP_FEBLEND(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), SP_TYPE_FEBLEND, SPFeBlend))
-#define SP_FEBLEND_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), SP_TYPE_FEBLEND, SPFeBlendClass))
-#define SP_IS_FEBLEND(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SP_TYPE_FEBLEND))
-#define SP_IS_FEBLEND_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), SP_TYPE_FEBLEND))
+#define SP_FEBLEND(obj) ((SPFeBlend*)obj)
+#define SP_IS_FEBLEND(obj) (obj != NULL && static_cast<const SPObject*>(obj)->typeHierarchy.count(typeid(SPFeBlend)))
class CFeBlend;
diff --git a/src/filters/colormatrix.h b/src/filters/colormatrix.h
index 2ce1da06a..b8cf82757 100644
--- a/src/filters/colormatrix.h
+++ b/src/filters/colormatrix.h
@@ -16,10 +16,8 @@
#include "display/nr-filter-colormatrix.h"
#define SP_TYPE_FECOLORMATRIX (sp_feColorMatrix_get_type())
-#define SP_FECOLORMATRIX(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), SP_TYPE_FECOLORMATRIX, SPFeColorMatrix))
-#define SP_FECOLORMATRIX_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), SP_TYPE_FECOLORMATRIX, SPFeColorMatrixClass))
-#define SP_IS_FECOLORMATRIX(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SP_TYPE_FECOLORMATRIX))
-#define SP_IS_FECOLORMATRIX_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), SP_TYPE_FECOLORMATRIX))
+#define SP_FECOLORMATRIX(obj) ((SPFeColorMatrix*)obj)
+#define SP_IS_FECOLORMATRIX(obj) (obj != NULL && static_cast<const SPObject*>(obj)->typeHierarchy.count(typeid(SPFeColorMatrix)))
class CFeColorMatrix;
diff --git a/src/filters/componenttransfer-funcnode.h b/src/filters/componenttransfer-funcnode.h
index 674074353..ca9bbf50d 100644
--- a/src/filters/componenttransfer-funcnode.h
+++ b/src/filters/componenttransfer-funcnode.h
@@ -23,16 +23,18 @@
#define SP_TYPE_FEFUNCB (sp_fefuncB_get_type())
#define SP_TYPE_FEFUNCA (sp_fefuncA_get_type())
-#define SP_IS_FEFUNCR(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SP_TYPE_FEFUNCR))
-#define SP_IS_FEFUNCG(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SP_TYPE_FEFUNCG))
-#define SP_IS_FEFUNCB(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SP_TYPE_FEFUNCB))
-#define SP_IS_FEFUNCA(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SP_TYPE_FEFUNCA))
-
-#define SP_FEFUNCNODE(obj) (SP_IS_FEFUNCR(obj) ? G_TYPE_CHECK_INSTANCE_CAST((obj), SP_TYPE_FEFUNCR, SPFeFuncNode) : (SP_IS_FEFUNCG(obj) ? G_TYPE_CHECK_INSTANCE_CAST((obj), SP_TYPE_FEFUNCG, SPFeFuncNode) : (SP_IS_FEFUNCB(obj) ? G_TYPE_CHECK_INSTANCE_CAST((obj), SP_TYPE_FEFUNCB, SPFeFuncNode):(SP_IS_FEFUNCA(obj) ? G_TYPE_CHECK_INSTANCE_CAST((obj), SP_TYPE_FEFUNCA, SPFeFuncNode): NULL))))
-
-#define SP_FEFUNCNODE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), SP_TYPE_FEFUNCNODE, SPFeFuncNodeClass))
-
-#define SP_IS_FEFUNCNODE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), SP_TYPE_FEFUNCNODE))
+// CPPIFY: Casting macros buggy, as these aren't classes.
+//#define SP_IS_FEFUNCR(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SP_TYPE_FEFUNCR))
+//#define SP_IS_FEFUNCG(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SP_TYPE_FEFUNCG))
+//#define SP_IS_FEFUNCB(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SP_TYPE_FEFUNCB))
+//#define SP_IS_FEFUNCA(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SP_TYPE_FEFUNCA))
+
+#define SP_FEFUNCNODE(obj) ((SPFeFuncNode*)obj)
+
+#define SP_IS_FEFUNCR(obj) (obj != NULL && static_cast<const SPObject*>(obj)->typeHierarchy.count(typeid(SPFeFuncNode)))
+#define SP_IS_FEFUNCG(obj) (obj != NULL && static_cast<const SPObject*>(obj)->typeHierarchy.count(typeid(SPFeFuncNode)))
+#define SP_IS_FEFUNCB(obj) (obj != NULL && static_cast<const SPObject*>(obj)->typeHierarchy.count(typeid(SPFeFuncNode)))
+#define SP_IS_FEFUNCA(obj) (obj != NULL && static_cast<const SPObject*>(obj)->typeHierarchy.count(typeid(SPFeFuncNode)))
class CFeFuncNode;
diff --git a/src/filters/componenttransfer.h b/src/filters/componenttransfer.h
index e46f228bc..bb3ccb96c 100644
--- a/src/filters/componenttransfer.h
+++ b/src/filters/componenttransfer.h
@@ -14,10 +14,8 @@
#include "sp-filter-primitive.h"
#define SP_TYPE_FECOMPONENTTRANSFER (sp_feComponentTransfer_get_type())
-#define SP_FECOMPONENTTRANSFER(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), SP_TYPE_FECOMPONENTTRANSFER, SPFeComponentTransfer))
-#define SP_FECOMPONENTTRANSFER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), SP_TYPE_FECOMPONENTTRANSFER, SPFeComponentTransferClass))
-#define SP_IS_FECOMPONENTTRANSFER(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SP_TYPE_FECOMPONENTTRANSFER))
-#define SP_IS_FECOMPONENTTRANSFER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), SP_TYPE_FECOMPONENTTRANSFER))
+#define SP_FECOMPONENTTRANSFER(obj) ((SPFeComponentTransfer*)obj)
+#define SP_IS_FECOMPONENTTRANSFER(obj) (obj != NULL && static_cast<const SPObject*>(obj)->typeHierarchy.count(typeid(SPFeComponentTransfer)))
namespace Inkscape {
namespace Filters {
diff --git a/src/filters/composite.h b/src/filters/composite.h
index 780e84e20..6a3ea8abc 100644
--- a/src/filters/composite.h
+++ b/src/filters/composite.h
@@ -14,10 +14,8 @@
#include "sp-filter-primitive.h"
#define SP_TYPE_FECOMPOSITE (sp_feComposite_get_type())
-#define SP_FECOMPOSITE(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), SP_TYPE_FECOMPOSITE, SPFeComposite))
-#define SP_FECOMPOSITE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), SP_TYPE_FECOMPOSITE, SPFeCompositeClass))
-#define SP_IS_FECOMPOSITE(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SP_TYPE_FECOMPOSITE))
-#define SP_IS_FECOMPOSITE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), SP_TYPE_FECOMPOSITE))
+#define SP_FECOMPOSITE(obj) ((SPFeComposite*)obj)
+#define SP_IS_FECOMPOSITE(obj) (obj != NULL && static_cast<const SPObject*>(obj)->typeHierarchy.count(typeid(SPFeComposite)))
enum FeCompositeOperator {
// Default value is 'over', but let's distinquish specifying the
diff --git a/src/filters/convolvematrix.h b/src/filters/convolvematrix.h
index 6b00bb9e2..0f2c6110d 100644
--- a/src/filters/convolvematrix.h
+++ b/src/filters/convolvematrix.h
@@ -19,10 +19,8 @@
#include "display/nr-filter-convolve-matrix.h"
#define SP_TYPE_FECONVOLVEMATRIX (sp_feConvolveMatrix_get_type())
-#define SP_FECONVOLVEMATRIX(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), SP_TYPE_FECONVOLVEMATRIX, SPFeConvolveMatrix))
-#define SP_FECONVOLVEMATRIX_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), SP_TYPE_FECONVOLVEMATRIX, SPFeConvolveMatrixClass))
-#define SP_IS_FECONVOLVEMATRIX(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SP_TYPE_FECONVOLVEMATRIX))
-#define SP_IS_FECONVOLVEMATRIX_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), SP_TYPE_FECONVOLVEMATRIX))
+#define SP_FECONVOLVEMATRIX(obj) ((SPFeConvolveMatrix*)obj)
+#define SP_IS_FECONVOLVEMATRIX(obj) (obj != NULL && static_cast<const SPObject*>(obj)->typeHierarchy.count(typeid(SPFeConvolveMatrix)))
class CFeConvolveMatrix;
diff --git a/src/filters/diffuselighting.h b/src/filters/diffuselighting.h
index 3bfe7e4f5..524c2b780 100644
--- a/src/filters/diffuselighting.h
+++ b/src/filters/diffuselighting.h
@@ -16,10 +16,8 @@
#include "number-opt-number.h"
#define SP_TYPE_FEDIFFUSELIGHTING (sp_feDiffuseLighting_get_type())
-#define SP_FEDIFFUSELIGHTING(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), SP_TYPE_FEDIFFUSELIGHTING, SPFeDiffuseLighting))
-#define SP_FEDIFFUSELIGHTING_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), SP_TYPE_FEDIFFUSELIGHTING, SPFeDiffuseLightingClass))
-#define SP_IS_FEDIFFUSELIGHTING(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SP_TYPE_FEDIFFUSELIGHTING))
-#define SP_IS_FEDIFFUSELIGHTING_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), SP_TYPE_FEDIFFUSELIGHTING))
+#define SP_FEDIFFUSELIGHTING(obj) ((SPFeDiffuseLighting*)obj)
+#define SP_IS_FEDIFFUSELIGHTING(obj) (obj != NULL && static_cast<const SPObject*>(obj)->typeHierarchy.count(typeid(SPFeDiffuseLighting)))
struct SVGICCColor;
diff --git a/src/filters/displacementmap.h b/src/filters/displacementmap.h
index a2eac1ecf..3a5317354 100644
--- a/src/filters/displacementmap.h
+++ b/src/filters/displacementmap.h
@@ -15,10 +15,8 @@
#include "sp-filter-primitive.h"
#define SP_TYPE_FEDISPLACEMENTMAP (sp_feDisplacementMap_get_type())
-#define SP_FEDISPLACEMENTMAP(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), SP_TYPE_FEDISPLACEMENTMAP, SPFeDisplacementMap))
-#define SP_FEDISPLACEMENTMAP_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), SP_TYPE_FEDISPLACEMENTMAP, SPFeDisplacementMapClass))
-#define SP_IS_FEDISPLACEMENTMAP(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SP_TYPE_FEDISPLACEMENTMAP))
-#define SP_IS_FEDISPLACEMENTMAP_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), SP_TYPE_FEDISPLACEMENTMAP))
+#define SP_FEDISPLACEMENTMAP(obj) ((SPFeDisplacementMap*)obj)
+#define SP_IS_FEDISPLACEMENTMAP(obj) (obj != NULL && static_cast<const SPObject*>(obj)->typeHierarchy.count(typeid(SPFeDisplacementMap)))
enum FilterDisplacementMapChannelSelector {
DISPLACEMENTMAP_CHANNEL_RED,
diff --git a/src/filters/distantlight.h b/src/filters/distantlight.h
index e0fa3b1c2..c11ffed5b 100644
--- a/src/filters/distantlight.h
+++ b/src/filters/distantlight.h
@@ -18,10 +18,8 @@
#include "sp-object.h"
#define SP_TYPE_FEDISTANTLIGHT (sp_fedistantlight_get_type())
-#define SP_FEDISTANTLIGHT(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), SP_TYPE_FEDISTANTLIGHT, SPFeDistantLight))
-#define SP_FEDISTANTLIGHT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), SP_TYPE_FEDISTANTLIGHT, SPFeDistantLightClass))
-#define SP_IS_FEDISTANTLIGHT(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SP_TYPE_FEDISTANTLIGHT))
-#define SP_IS_FEDISTANTLIGHT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), SP_TYPE_FEDISTANTLIGHT))
+#define SP_FEDISTANTLIGHT(obj) ((SPFeDistantLight*)obj)
+#define SP_IS_FEDISTANTLIGHT(obj) (obj != NULL && static_cast<const SPObject*>(obj)->typeHierarchy.count(typeid(SPFeDistantLight)))
/* Distant light class */
diff --git a/src/filters/flood.h b/src/filters/flood.h
index 24231f992..baef69a3a 100644
--- a/src/filters/flood.h
+++ b/src/filters/flood.h
@@ -18,10 +18,8 @@
G_BEGIN_DECLS
#define SP_TYPE_FEFLOOD (sp_feFlood_get_type())
-#define SP_FEFLOOD(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), SP_TYPE_FEFLOOD, SPFeFlood))
-#define SP_FEFLOOD_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), SP_TYPE_FEFLOOD, SPFeFloodClass))
-#define SP_IS_FEFLOOD(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SP_TYPE_FEFLOOD))
-#define SP_IS_FEFLOOD_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), SP_TYPE_FEFLOOD))
+#define SP_FEFLOOD(obj) ((SPFeFlood*)obj)
+#define SP_IS_FEFLOOD(obj) (obj != NULL && static_cast<const SPObject*>(obj)->typeHierarchy.count(typeid(SPFeFlood)))
class CFeFlood;
diff --git a/src/filters/gaussian-blur.h b/src/filters/gaussian-blur.h
index 2872f0cc3..a13ba0e99 100644
--- a/src/filters/gaussian-blur.h
+++ b/src/filters/gaussian-blur.h
@@ -16,10 +16,8 @@
#include "number-opt-number.h"
#define SP_TYPE_GAUSSIANBLUR (sp_gaussianBlur_get_type())
-#define SP_GAUSSIANBLUR(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), SP_TYPE_GAUSSIANBLUR, SPGaussianBlur))
-#define SP_GAUSSIANBLUR_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), SP_TYPE_GAUSSIANBLUR, SPGaussianBlurClass))
-#define SP_IS_GAUSSIANBLUR(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SP_TYPE_GAUSSIANBLUR))
-#define SP_IS_GAUSSIANBLUR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), SP_TYPE_GAUSSIANBLUR))
+#define SP_GAUSSIANBLUR(obj) ((SPGaussianBlur*)obj)
+#define SP_IS_GAUSSIANBLUR(obj) (obj != NULL && static_cast<const SPObject*>(obj)->typeHierarchy.count(typeid(SPGaussianBlur)))
class CGaussianBlur;
diff --git a/src/filters/image.h b/src/filters/image.h
index 0144082fa..3618ac678 100644
--- a/src/filters/image.h
+++ b/src/filters/image.h
@@ -19,10 +19,8 @@
#include "uri-references.h"
#define SP_TYPE_FEIMAGE (sp_feImage_get_type())
-#define SP_FEIMAGE(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), SP_TYPE_FEIMAGE, SPFeImage))
-#define SP_FEIMAGE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), SP_TYPE_FEIMAGE, SPFeImageClass))
-#define SP_IS_FEIMAGE(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SP_TYPE_FEIMAGE))
-#define SP_IS_FEIMAGE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), SP_TYPE_FEIMAGE))
+#define SP_FEIMAGE(obj) ((SPFeImage*)obj)
+#define SP_IS_FEIMAGE(obj) (obj != NULL && static_cast<const SPObject*>(obj)->typeHierarchy.count(typeid(SPFeImage)))
class CFeImage;
diff --git a/src/filters/merge.h b/src/filters/merge.h
index 9b30a7a05..574e5fc4a 100644
--- a/src/filters/merge.h
+++ b/src/filters/merge.h
@@ -13,10 +13,8 @@
#include "sp-filter-primitive.h"
#define SP_TYPE_FEMERGE (sp_feMerge_get_type())
-#define SP_FEMERGE(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), SP_TYPE_FEMERGE, SPFeMerge))
-#define SP_FEMERGE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), SP_TYPE_FEMERGE, SPFeMergeClass))
-#define SP_IS_FEMERGE(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SP_TYPE_FEMERGE))
-#define SP_IS_FEMERGE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), SP_TYPE_FEMERGE))
+#define SP_FEMERGE(obj) ((SPFeMerge*)obj)
+#define SP_IS_FEMERGE(obj) (obj != NULL && static_cast<const SPObject*>(obj)->typeHierarchy.count(typeid(SPFeMerge)))
class CFeMerge;
diff --git a/src/filters/mergenode.h b/src/filters/mergenode.h
index 897df31be..eecf74fb1 100644
--- a/src/filters/mergenode.h
+++ b/src/filters/mergenode.h
@@ -18,8 +18,8 @@
#include "sp-object.h"
#define SP_TYPE_FEMERGENODE (sp_feMergeNode_get_type())
-#define SP_FEMERGENODE(o) (G_TYPE_CHECK_INSTANCE_CAST((o), SP_TYPE_FEMERGENODE, SPFeMergeNode))
-#define SP_IS_FEMERGENODE(o) (G_TYPE_CHECK_INSTANCE_TYPE((o), SP_TYPE_FEMERGENODE))
+#define SP_FEMERGENODE(obj) ((SPFeMergeNode*)obj)
+#define SP_IS_FEMERGENODE(obj) (obj != NULL && static_cast<const SPObject*>(obj)->typeHierarchy.count(typeid(SPFeMergeNode)))
class CFeMergeNode;
diff --git a/src/filters/morphology.h b/src/filters/morphology.h
index 3ef629ef4..8f571fdba 100644
--- a/src/filters/morphology.h
+++ b/src/filters/morphology.h
@@ -17,10 +17,8 @@
#include "display/nr-filter-morphology.h"
#define SP_TYPE_FEMORPHOLOGY (sp_feMorphology_get_type())
-#define SP_FEMORPHOLOGY(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), SP_TYPE_FEMORPHOLOGY, SPFeMorphology))
-#define SP_FEMORPHOLOGY_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), SP_TYPE_FEMORPHOLOGY, SPFeMorphologyClass))
-#define SP_IS_FEMORPHOLOGY(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SP_TYPE_FEMORPHOLOGY))
-#define SP_IS_FEMORPHOLOGY_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), SP_TYPE_FEMORPHOLOGY))
+#define SP_FEMORPHOLOGY(obj) ((SPFeMorphology*)obj)
+#define SP_IS_FEMORPHOLOGY(obj) (obj != NULL && static_cast<const SPObject*>(obj)->typeHierarchy.count(typeid(SPFeMorphology)))
class CFeMorphology;
diff --git a/src/filters/offset.h b/src/filters/offset.h
index df0f9768d..7fc3083f8 100644
--- a/src/filters/offset.h
+++ b/src/filters/offset.h
@@ -15,10 +15,8 @@
#include "sp-filter-primitive.h"
#define SP_TYPE_FEOFFSET (sp_feOffset_get_type())
-#define SP_FEOFFSET(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), SP_TYPE_FEOFFSET, SPFeOffset))
-#define SP_FEOFFSET_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), SP_TYPE_FEOFFSET, SPFeOffsetClass))
-#define SP_IS_FEOFFSET(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SP_TYPE_FEOFFSET))
-#define SP_IS_FEOFFSET_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), SP_TYPE_FEOFFSET))
+#define SP_FEOFFSET(obj) ((SPFeOffset*)obj)
+#define SP_IS_FEOFFSET(obj) (obj != NULL && static_cast<const SPObject*>(obj)->typeHierarchy.count(typeid(SPFeOffset)))
class CFeOffset;
diff --git a/src/filters/pointlight.h b/src/filters/pointlight.h
index 814a065be..8082aec45 100644
--- a/src/filters/pointlight.h
+++ b/src/filters/pointlight.h
@@ -18,10 +18,8 @@
#include "sp-object.h"
#define SP_TYPE_FEPOINTLIGHT (sp_fepointlight_get_type())
-#define SP_FEPOINTLIGHT(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), SP_TYPE_FEPOINTLIGHT, SPFePointLight))
-#define SP_FEPOINTLIGHT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), SP_TYPE_FEPOINTLIGHT, SPFePointLightClass))
-#define SP_IS_FEPOINTLIGHT(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SP_TYPE_FEPOINTLIGHT))
-#define SP_IS_FEPOINTLIGHT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), SP_TYPE_FEPOINTLIGHT))
+#define SP_FEPOINTLIGHT(obj) ((SPFePointLight*)obj)
+#define SP_IS_FEPOINTLIGHT(obj) (obj != NULL && static_cast<const SPObject*>(obj)->typeHierarchy.count(typeid(SPFePointLight)))
class CFePointLight;
diff --git a/src/filters/specularlighting.h b/src/filters/specularlighting.h
index b7e8d8591..9a0917bbf 100644
--- a/src/filters/specularlighting.h
+++ b/src/filters/specularlighting.h
@@ -18,10 +18,8 @@
#include "number-opt-number.h"
#define SP_TYPE_FESPECULARLIGHTING (sp_feSpecularLighting_get_type())
-#define SP_FESPECULARLIGHTING(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), SP_TYPE_FESPECULARLIGHTING, SPFeSpecularLighting))
-#define SP_FESPECULARLIGHTING_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), SP_TYPE_FESPECULARLIGHTING, SPFeSpecularLightingClass))
-#define SP_IS_FESPECULARLIGHTING(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SP_TYPE_FESPECULARLIGHTING))
-#define SP_IS_FESPECULARLIGHTING_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), SP_TYPE_FESPECULARLIGHTING))
+#define SP_FESPECULARLIGHTING(obj) ((SPFeSpecularLighting*)obj)
+#define SP_IS_FESPECULARLIGHTING(obj) (obj != NULL && static_cast<const SPObject*>(obj)->typeHierarchy.count(typeid(SPFeSpecularLighting)))
struct SVGICCColor;
diff --git a/src/filters/spotlight.h b/src/filters/spotlight.h
index 51a1406de..17f84f3c2 100644
--- a/src/filters/spotlight.h
+++ b/src/filters/spotlight.h
@@ -18,10 +18,8 @@
#include "sp-object.h"
#define SP_TYPE_FESPOTLIGHT (sp_fespotlight_get_type())
-#define SP_FESPOTLIGHT(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), SP_TYPE_FESPOTLIGHT, SPFeSpotLight))
-#define SP_FESPOTLIGHT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), SP_TYPE_FESPOTLIGHT, SPFeSpotLightClass))
-#define SP_IS_FESPOTLIGHT(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SP_TYPE_FESPOTLIGHT))
-#define SP_IS_FESPOTLIGHT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), SP_TYPE_FESPOTLIGHT))
+#define SP_FESPOTLIGHT(obj) ((SPFeSpotLight*)obj)
+#define SP_IS_FESPOTLIGHT(obj) (obj != NULL && static_cast<const SPObject*>(obj)->typeHierarchy.count(typeid(SPFeSpotLight)))
class CFeSpotLight;
diff --git a/src/filters/tile.h b/src/filters/tile.h
index 3ef56b515..36c547d9c 100644
--- a/src/filters/tile.h
+++ b/src/filters/tile.h
@@ -15,10 +15,8 @@
#include "sp-filter-primitive.h"
#define SP_TYPE_FETILE (sp_feTile_get_type())
-#define SP_FETILE(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), SP_TYPE_FETILE, SPFeTile))
-#define SP_FETILE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), SP_TYPE_FETILE, SPFeTileClass))
-#define SP_IS_FETILE(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SP_TYPE_FETILE))
-#define SP_IS_FETILE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), SP_TYPE_FETILE))
+#define SP_FETILE(obj) ((SPFeTile*)obj)
+#define SP_IS_FETILE(obj) (obj != NULL && static_cast<const SPObject*>(obj)->typeHierarchy.count(typeid(SPFeTile)))
/* FeTile base class */
class CFeTile;
diff --git a/src/filters/turbulence.h b/src/filters/turbulence.h
index ccfa3da92..0e01ae52c 100644
--- a/src/filters/turbulence.h
+++ b/src/filters/turbulence.h
@@ -18,10 +18,8 @@
#include "display/nr-filter-turbulence.h"
#define SP_TYPE_FETURBULENCE (sp_feTurbulence_get_type())
-#define SP_FETURBULENCE(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), SP_TYPE_FETURBULENCE, SPFeTurbulence))
-#define SP_FETURBULENCE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), SP_TYPE_FETURBULENCE, SPFeTurbulenceClass))
-#define SP_IS_FETURBULENCE(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SP_TYPE_FETURBULENCE))
-#define SP_IS_FETURBULENCE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), SP_TYPE_FETURBULENCE))
+#define SP_FETURBULENCE(obj) ((SPFeTurbulence*)obj)
+#define SP_IS_FETURBULENCE(obj) (obj != NULL && static_cast<const SPObject*>(obj)->typeHierarchy.count(typeid(SPFeTurbulence)))
/* FeTurbulence base class */
diff --git a/src/live_effects/lpeobject.h b/src/live_effects/lpeobject.h
index f360d7bdd..02513d258 100644
--- a/src/live_effects/lpeobject.h
+++ b/src/live_effects/lpeobject.h
@@ -23,8 +23,8 @@ namespace Inkscape {
}
#define TYPE_LIVEPATHEFFECT (LivePathEffectObject::livepatheffect_get_type())
-#define LIVEPATHEFFECT(o) (G_TYPE_CHECK_INSTANCE_CAST((o), TYPE_LIVEPATHEFFECT, LivePathEffectObject))
-#define IS_LIVEPATHEFFECT(o) (G_TYPE_CHECK_INSTANCE_TYPE((o), TYPE_LIVEPATHEFFECT))
+#define LIVEPATHEFFECT(obj) ((LivePathEffectObject*)obj)
+#define IS_LIVEPATHEFFECT(obj) (obj != NULL && static_cast<const SPObject*>(obj)->typeHierarchy.count(typeid(LivePathEffectObject)))
/// The LivePathEffect vtable.
struct LivePathEffectObjectClass {
diff --git a/src/marker.h b/src/marker.h
index 6f4f1e604..47e1a4037 100644
--- a/src/marker.h
+++ b/src/marker.h
@@ -19,8 +19,8 @@
*/
#define SP_TYPE_MARKER (sp_marker_get_type ())
-#define SP_MARKER(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), SP_TYPE_MARKER, SPMarker))
-#define SP_IS_MARKER(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), SP_TYPE_MARKER))
+#define SP_MARKER(obj) ((SPMarker*)obj)
+#define SP_IS_MARKER(obj) (obj != NULL && static_cast<const SPObject*>(obj)->typeHierarchy.count(typeid(SPMarker)))
struct SPMarkerView;
class CMarker;
diff --git a/src/persp3d.h b/src/persp3d.h
index a17a50347..684fb4df2 100644
--- a/src/persp3d.h
+++ b/src/persp3d.h
@@ -13,10 +13,8 @@
*/
#define SP_TYPE_PERSP3D (persp3d_get_type ())
-#define SP_PERSP3D(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SP_TYPE_PERSP3D, Persp3D))
-#define SP_PERSP3D_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SP_TYPE_PERSP3D, Persp3DClass))
-#define SP_IS_PERSP3D(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SP_TYPE_PERSP3D))
-#define SP_IS_PERSP3D_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SP_TYPE_PERSP3D))
+#define SP_PERSP3D(obj) ((Persp3D*)obj)
+#define SP_IS_PERSP3D(obj) (obj != NULL && static_cast<const SPObject*>(obj)->typeHierarchy.count(typeid(Persp3D)))
#include <list>
#include <vector>
diff --git a/src/sp-anchor.h b/src/sp-anchor.h
index 1fbe3950d..132054998 100644
--- a/src/sp-anchor.h
+++ b/src/sp-anchor.h
@@ -16,10 +16,8 @@
#include "sp-item-group.h"
#define SP_TYPE_ANCHOR (sp_anchor_get_type ())
-#define SP_ANCHOR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SP_TYPE_ANCHOR, SPAnchor))
-#define SP_ANCHOR_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SP_TYPE_ANCHOR, SPAnchorClass))
-#define SP_IS_ANCHOR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SP_TYPE_ANCHOR))
-#define SP_IS_ANCHOR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SP_TYPE_ANCHOR))
+#define SP_ANCHOR(obj) ((SPAnchor*)obj)
+#define SP_IS_ANCHOR(obj) (obj != NULL && static_cast<const SPObject*>(obj)->typeHierarchy.count(typeid(SPAnchor)))
class CAnchor;
diff --git a/src/sp-clippath.h b/src/sp-clippath.h
index 231c72581..f3894dc8f 100644
--- a/src/sp-clippath.h
+++ b/src/sp-clippath.h
@@ -16,10 +16,8 @@
*/
#define SP_TYPE_CLIPPATH (sp_clippath_get_type())
-#define SP_CLIPPATH(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), SP_TYPE_CLIPPATH, SPClipPath))
-#define SP_CLIPPATH_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), SP_TYPE_CLIPPATH, SPClipPathClass))
-#define SP_IS_CLIPPATH(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SP_TYPE_CLIPPATH))
-#define SP_IS_CLIPPATH_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), SP_TYPE_CLIPPATH))
+#define SP_CLIPPATH(obj) ((SPClipPath*)obj)
+#define SP_IS_CLIPPATH(obj) (obj != NULL && static_cast<const SPObject*>(obj)->typeHierarchy.count(typeid(SPClipPath)))
struct SPClipPathView;
diff --git a/src/sp-defs.h b/src/sp-defs.h
index b2c3f8b0e..17dc84078 100644
--- a/src/sp-defs.h
+++ b/src/sp-defs.h
@@ -16,10 +16,8 @@
#include "sp-object.h"
#define SP_TYPE_DEFS (sp_defs_get_type())
-#define SP_DEFS(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), SP_TYPE_DEFS, SPDefs))
-#define SP_DEFS_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), SP_TYPE_DEFS, SPDefsClass))
-#define SP_IS_DEFS(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SP_TYPE_DEFS))
-#define SP_IS_DEFS_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), SP_TYPE_DEFS))
+#define SP_DEFS(obj) ((SPDefs*)obj)
+#define SP_IS_DEFS(obj) (obj != NULL && static_cast<const SPObject*>(obj)->typeHierarchy.count(typeid(SPDefs)))
GType sp_defs_get_type(void) G_GNUC_CONST;
diff --git a/src/sp-desc.h b/src/sp-desc.h
index 3f8f346e6..0faaae0e0 100644
--- a/src/sp-desc.h
+++ b/src/sp-desc.h
@@ -15,7 +15,8 @@
#include "sp-object.h"
#define SP_TYPE_DESC (sp_desc_get_type ())
-#define SP_IS_DESC(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SP_TYPE_DESC))
+#define SP_DESC(obj) ((SPDesc*)obj)
+#define SP_IS_DESC(obj) (obj != NULL && static_cast<const SPObject*>(obj)->typeHierarchy.count(typeid(SPDesc)))
class CDesc;
diff --git a/src/sp-ellipse.h b/src/sp-ellipse.h
index 70e1e9618..caaf8aee9 100644
--- a/src/sp-ellipse.h
+++ b/src/sp-ellipse.h
@@ -22,10 +22,8 @@ G_BEGIN_DECLS
/* Common parent class */
#define SP_TYPE_GENERICELLIPSE (sp_genericellipse_get_type ())
-#define SP_GENERICELLIPSE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SP_TYPE_GENERICELLIPSE, SPGenericEllipse))
-#define SP_GENERICELLIPSE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SP_TYPE_GENERICELLIPSE, SPGenericEllipseClass))
-#define SP_IS_GENERICELLIPSE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SP_TYPE_GENERICELLIPSE))
-#define SP_IS_GENERICELLIPSE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SP_TYPE_GENERICELLIPSE))
+#define SP_GENERICELLIPSE(obj) ((SPGenericEllipse*)obj)
+#define SP_IS_GENERICELLIPSE(obj) (obj != NULL && static_cast<const SPObject*>(obj)->typeHierarchy.count(typeid(SPGenericEllipse)))
class CGenericEllipse;
@@ -73,10 +71,8 @@ void sp_genericellipse_normalize (SPGenericEllipse *ellipse);
/* SVG <ellipse> element */
#define SP_TYPE_ELLIPSE (sp_ellipse_get_type ())
-#define SP_ELLIPSE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SP_TYPE_ELLIPSE, SPEllipse))
-#define SP_ELLIPSE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SP_TYPE_ELLIPSE, SPEllipseClass))
-#define SP_IS_ELLIPSE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SP_TYPE_ELLIPSE))
-#define SP_IS_ELLIPSE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SP_TYPE_ELLIPSE))
+#define SP_ELLIPSE(obj) ((SPEllipse*)obj)
+#define SP_IS_ELLIPSE(obj) (obj != NULL && static_cast<const SPObject*>(obj)->typeHierarchy.count(typeid(SPEllipse)))
class CEllipse;
@@ -112,10 +108,8 @@ void sp_ellipse_position_set (SPEllipse * ellipse, gdouble x, gdouble y, gdouble
/* SVG <circle> element */
#define SP_TYPE_CIRCLE (sp_circle_get_type ())
-#define SP_CIRCLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SP_TYPE_CIRCLE, SPCircle))
-#define SP_CIRCLE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SP_TYPE_CIRCLE, SPCircleClass))
-#define SP_IS_CIRCLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SP_TYPE_CIRCLE))
-#define SP_IS_CIRCLE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SP_TYPE_CIRCLE))
+#define SP_CIRCLE(obj) ((SPCircle*)obj)
+#define SP_IS_CIRCLE(obj) (obj != NULL && static_cast<const SPObject*>(obj)->typeHierarchy.count(typeid(SPCircle)))
class CCircle;
@@ -149,10 +143,8 @@ GType sp_circle_get_type (void);
/* <path sodipodi:type="arc"> element */
#define SP_TYPE_ARC (sp_arc_get_type ())
-#define SP_ARC(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SP_TYPE_ARC, SPArc))
-#define SP_ARC_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SP_TYPE_ARC, SPArcClass))
-#define SP_IS_ARC(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SP_TYPE_ARC))
-#define SP_IS_ARC_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SP_TYPE_ARC))
+#define SP_ARC(obj) ((SPArc*)obj)
+#define SP_IS_ARC(obj) (obj != NULL && static_cast<const SPObject*>(obj)->typeHierarchy.count(typeid(SPArc)))
class CArc;
diff --git a/src/sp-filter-primitive.h b/src/sp-filter-primitive.h
index abf0659e9..b090d0681 100644
--- a/src/sp-filter-primitive.h
+++ b/src/sp-filter-primitive.h
@@ -18,10 +18,8 @@
#include "svg/svg-length.h"
#define SP_TYPE_FILTER_PRIMITIVE (sp_filter_primitive_get_type ())
-#define SP_FILTER_PRIMITIVE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SP_TYPE_FILTER_PRIMITIVE, SPFilterPrimitive))
-#define SP_FILTER_PRIMITIVE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SP_TYPE_FILTER_PRIMITIVE, SPFilterPrimitiveClass))
-#define SP_IS_FILTER_PRIMITIVE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SP_TYPE_FILTER_PRIMITIVE))
-#define SP_IS_FILTER_PRIMITIVE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SP_TYPE_FILTER_PRIMITIVE))
+#define SP_FILTER_PRIMITIVE(obj) ((SPFilterPrimitive*)obj)
+#define SP_IS_FILTER_PRIMITIVE(obj) (obj != NULL && static_cast<const SPObject*>(obj)->typeHierarchy.count(typeid(SPFilterPrimitive)))
namespace Inkscape {
namespace Filters {
diff --git a/src/sp-filter.h b/src/sp-filter.h
index 0db572225..263f9cdd1 100644
--- a/src/sp-filter.h
+++ b/src/sp-filter.h
@@ -22,10 +22,8 @@
#include <glibmm/ustring.h>
#define SP_TYPE_FILTER (sp_filter_get_type())
-#define SP_FILTER(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), SP_TYPE_FILTER, SPFilter))
-#define SP_FILTER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), SP_TYPE_FILTER, SPFilterClass))
-#define SP_IS_FILTER(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SP_TYPE_FILTER))
-#define SP_IS_FILTER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), SP_TYPE_FILTER))
+#define SP_FILTER(obj) ((SPFilter*)obj)
+#define SP_IS_FILTER(obj) (obj != NULL && static_cast<const SPObject*>(obj)->typeHierarchy.count(typeid(SPFilter)))
#define SP_FILTER_FILTER_UNITS(f) (SP_FILTER(f)->filterUnits)
#define SP_FILTER_PRIMITIVE_UNITS(f) (SP_FILTER(f)->primitiveUnits)
diff --git a/src/sp-flowdiv.h b/src/sp-flowdiv.h
index 5b1e49f85..2f06cb312 100644
--- a/src/sp-flowdiv.h
+++ b/src/sp-flowdiv.h
@@ -8,34 +8,24 @@
#include "sp-item.h"
#define SP_TYPE_FLOWDIV (sp_flowdiv_get_type ())
-#define SP_FLOWDIV(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SP_TYPE_FLOWDIV, SPFlowdiv))
-#define SP_FLOWDIV_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SP_TYPE_FLOWDIV, SPFlowdivClass))
-#define SP_IS_FLOWDIV(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SP_TYPE_FLOWDIV))
-#define SP_IS_FLOWDIV_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SP_TYPE_FLOWDIV))
+#define SP_FLOWDIV(obj) ((SPFlowdiv*)obj)
+#define SP_IS_FLOWDIV(obj) (obj != NULL && static_cast<const SPObject*>(obj)->typeHierarchy.count(typeid(SPFlowdiv)))
#define SP_TYPE_FLOWTSPAN (sp_flowtspan_get_type ())
-#define SP_FLOWTSPAN(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SP_TYPE_FLOWTSPAN, SPFlowtspan))
-#define SP_FLOWTSPAN_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SP_TYPE_FLOWTSPAN, SPFlowtspanClass))
-#define SP_IS_FLOWTSPAN(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SP_TYPE_FLOWTSPAN))
-#define SP_IS_FLOWTSPAN_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SP_TYPE_FLOWTSPAN))
+#define SP_FLOWTSPAN(obj) ((SPFlowtspan*)obj)
+#define SP_IS_FLOWTSPAN(obj) (obj != NULL && static_cast<const SPObject*>(obj)->typeHierarchy.count(typeid(SPFlowtspan)))
#define SP_TYPE_FLOWPARA (sp_flowpara_get_type ())
-#define SP_FLOWPARA(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SP_TYPE_FLOWPARA, SPFlowpara))
-#define SP_FLOWPARA_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SP_TYPE_FLOWPARA, SPFlowparaClass))
-#define SP_IS_FLOWPARA(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SP_TYPE_FLOWPARA))
-#define SP_IS_FLOWPARA_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SP_TYPE_FLOWPARA))
+#define SP_FLOWPARA(obj) ((SPFlowpara*)obj)
+#define SP_IS_FLOWPARA(obj) (obj != NULL && static_cast<const SPObject*>(obj)->typeHierarchy.count(typeid(SPFlowpara)))
#define SP_TYPE_FLOWLINE (sp_flowline_get_type ())
-#define SP_FLOWLINE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SP_TYPE_FLOWLINE, SPFlowline))
-#define SP_FLOWLINE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SP_TYPE_FLOWLINE, SPFlowlineClass))
-#define SP_IS_FLOWLINE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SP_TYPE_FLOWLINE))
-#define SP_IS_FLOWLINE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SP_TYPE_FLOWLINE))
+#define SP_FLOWLINE(obj) ((SPFlowline*)obj)
+#define SP_IS_FLOWLINE(obj) (obj != NULL && static_cast<const SPObject*>(obj)->typeHierarchy.count(typeid(SPFlowline)))
#define SP_TYPE_FLOWREGIONBREAK (sp_flowregionbreak_get_type ())
-#define SP_FLOWREGIONBREAK(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SP_TYPE_FLOWREGIONBREAK, SPFlowregionbreak))
-#define SP_FLOWREGIONBREAK_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SP_TYPE_FLOWREGIONBREAK, SPFlowregionbreakClass))
-#define SP_IS_FLOWREGIONBREAK(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SP_TYPE_FLOWREGIONBREAK))
-#define SP_IS_FLOWREGIONBREAK_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SP_TYPE_FLOWREGIONBREAK))
+#define SP_FLOWREGIONBREAK(obj) ((SPFlowregionbreak*)obj)
+#define SP_IS_FLOWREGIONBREAK(obj) (obj != NULL && static_cast<const SPObject*>(obj)->typeHierarchy.count(typeid(SPFlowregionbreak)))
class CFlowdiv;
class CFlowtspan;
diff --git a/src/sp-flowregion.h b/src/sp-flowregion.h
index 600a49282..e9461e82b 100644
--- a/src/sp-flowregion.h
+++ b/src/sp-flowregion.h
@@ -7,16 +7,12 @@
#include "sp-item.h"
#define SP_TYPE_FLOWREGION (sp_flowregion_get_type ())
-#define SP_FLOWREGION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SP_TYPE_FLOWREGION, SPFlowregion))
-#define SP_FLOWREGION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SP_TYPE_FLOWREGION, SPFlowregionClass))
-#define SP_IS_FLOWREGION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SP_TYPE_FLOWREGION))
-#define SP_IS_FLOWREGION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SP_TYPE_FLOWREGION))
+#define SP_FLOWREGION(obj) ((SPFlowregion*)obj)
+#define SP_IS_FLOWREGION(obj) (obj != NULL && static_cast<const SPObject*>(obj)->typeHierarchy.count(typeid(SPFlowregion)))
#define SP_TYPE_FLOWREGIONEXCLUDE (sp_flowregionexclude_get_type ())
-#define SP_FLOWREGIONEXCLUDE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SP_TYPE_FLOWREGIONEXCLUDE, SPFlowregionExclude))
-#define SP_FLOWREGIONEXCLUDE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SP_TYPE_FLOWREGIONEXCLUDE, SPFlowregionExcludeClass))
-#define SP_IS_FLOWREGIONEXCLUDE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SP_TYPE_FLOWREGIONEXCLUDE))
-#define SP_IS_FLOWREGIONEXCLUDE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SP_TYPE_FLOWREGIONEXCLUDE))
+#define SP_FLOWREGIONEXCLUDE(obj) ((SPFlowregionExclude*)obj)
+#define SP_IS_FLOWREGIONEXCLUDE(obj) (obj != NULL && static_cast<const SPObject*>(obj)->typeHierarchy.count(typeid(SPFlowregionExclude)))
class Path;
class Shape;
diff --git a/src/sp-flowtext.h b/src/sp-flowtext.h
index f3dfb0a8e..06e2442e6 100644
--- a/src/sp-flowtext.h
+++ b/src/sp-flowtext.h
@@ -10,10 +10,8 @@
#include "libnrtype/Layout-TNG.h"
#define SP_TYPE_FLOWTEXT (sp_flowtext_get_type ())
-#define SP_FLOWTEXT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SP_TYPE_FLOWTEXT, SPFlowtext))
-#define SP_FLOWTEXT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SP_TYPE_FLOWTEXT, SPFlowtextClass))
-#define SP_IS_FLOWTEXT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SP_TYPE_FLOWTEXT))
-#define SP_IS_FLOWTEXT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SP_TYPE_FLOWTEXT))
+#define SP_FLOWTEXT(obj) ((SPFlowtext*)obj)
+#define SP_IS_FLOWTEXT(obj) (obj != NULL && static_cast<const SPObject*>(obj)->typeHierarchy.count(typeid(SPFlowtext)))
namespace Inkscape {
diff --git a/src/sp-font-face.h b/src/sp-font-face.h
index b39ea881f..0aab3b577 100644
--- a/src/sp-font-face.h
+++ b/src/sp-font-face.h
@@ -27,10 +27,8 @@
G_BEGIN_DECLS
#define SP_TYPE_FONTFACE (sp_fontface_get_type ())
-#define SP_FONTFACE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SP_TYPE_FONTFACE, SPFontFace))
-#define SP_FONTFACE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SP_TYPE_FONTFACE, SPFontFaceClass))
-#define SP_IS_FONTFACE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SP_TYPE_FONTFACE))
-#define SP_IS_FONTFACE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SP_TYPE_FONTFACE))
+#define SP_FONTFACE(obj) ((SPFontFace*)obj)
+#define SP_IS_FONTFACE(obj) (obj != NULL && static_cast<const SPObject*>(obj)->typeHierarchy.count(typeid(SPFontFace)))
enum FontFaceStyleType{
SP_FONTFACE_STYLE_ALL,
diff --git a/src/sp-font.h b/src/sp-font.h
index 1bddc7503..44b24b6f2 100644
--- a/src/sp-font.h
+++ b/src/sp-font.h
@@ -19,10 +19,8 @@
#include "sp-object.h"
#define SP_TYPE_FONT (sp_font_get_type ())
-#define SP_FONT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SP_TYPE_FONT, SPFont))
-#define SP_FONT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SP_TYPE_FONT, SPFontClass))
-#define SP_IS_FONT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SP_TYPE_FONT))
-#define SP_IS_FONT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SP_TYPE_FONT))
+#define SP_FONT(obj) ((SPFont*)obj)
+#define SP_IS_FONT(obj) (obj != NULL && static_cast<const SPObject*>(obj)->typeHierarchy.count(typeid(SPFont)))
class CFont;
diff --git a/src/sp-glyph-kerning.h b/src/sp-glyph-kerning.h
index fdb93ca59..2e7fe6e82 100644
--- a/src/sp-glyph-kerning.h
+++ b/src/sp-glyph-kerning.h
@@ -20,16 +20,24 @@
#include "unicoderange.h"
#define SP_TYPE_HKERN (sp_glyph_kerning_h_get_type ())
-#define SP_HKERN(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SP_TYPE_HKERN, SPHkern))
-#define SP_HKERN_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SP_TYPE_HKERN, SPGlyphKerningClass))
-#define SP_IS_HKERN(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SP_TYPE_HKERN))
-#define SP_IS_HKERN_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SP_TYPE_HKERN))
+//#define SP_HKERN(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SP_TYPE_HKERN, SPHkern))
+//#define SP_HKERN_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SP_TYPE_HKERN, SPGlyphKerningClass))
+//#define SP_IS_HKERN(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SP_TYPE_HKERN))
+//#define SP_IS_HKERN_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SP_TYPE_HKERN))
+
+#define SP_HKERN(obj) ((SPHkern*)obj)
+#define SP_IS_HKERN(obj) (obj != NULL && static_cast<const SPObject*>(obj)->typeHierarchy.count(typeid(SPHkern)))
#define SP_TYPE_VKERN (sp_glyph_kerning_v_get_type ())
-#define SP_VKERN(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SP_TYPE_VKERN, SPVkern))
-#define SP_VKERN_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SP_TYPE_VKERN, SPGlyphKerningClass))
-#define SP_IS_VKERN(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SP_TYPE_VKERN))
-#define SP_IS_VKERN_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SP_TYPE_VKERN))
+//#define SP_VKERN(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SP_TYPE_VKERN, SPVkern))
+//#define SP_VKERN_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SP_TYPE_VKERN, SPGlyphKerningClass))
+//#define SP_IS_VKERN(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SP_TYPE_VKERN))
+//#define SP_IS_VKERN_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SP_TYPE_VKERN))
+
+#define SP_VKERN(obj) ((SPVkern*)obj)
+#define SP_IS_VKERN(obj) (obj != NULL && static_cast<const SPObject*>(obj)->typeHierarchy.count(typeid(SPVkern)))
+
+// CPPIFY: These casting macros are buggy, as Vkern and Hkern aren't "real" classes.
class GlyphNames{
public:
diff --git a/src/sp-glyph.h b/src/sp-glyph.h
index 6543b1af2..4746a18e1 100644
--- a/src/sp-glyph.h
+++ b/src/sp-glyph.h
@@ -19,10 +19,8 @@
#include "sp-object.h"
#define SP_TYPE_GLYPH (sp_glyph_get_type ())
-#define SP_GLYPH(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SP_TYPE_GLYPH, SPGlyph))
-#define SP_GLYPH_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SP_TYPE_GLYPH, SPGlyphClass))
-#define SP_IS_GLYPH(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SP_TYPE_GLYPH))
-#define SP_IS_GLYPH_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SP_TYPE_GLYPH))
+#define SP_GLYPH(obj) ((SPGlyph*)obj)
+#define SP_IS_GLYPH(obj) (obj != NULL && static_cast<const SPObject*>(obj)->typeHierarchy.count(typeid(SPGlyph)))
enum glyphArabicForm {
GLYPH_ARABIC_FORM_INITIAL,
diff --git a/src/sp-gradient.h b/src/sp-gradient.h
index e5744fab4..cd52b7ff5 100644
--- a/src/sp-gradient.h
+++ b/src/sp-gradient.h
@@ -31,10 +31,8 @@ class SPGradientReference;
struct SPStop;
#define SP_TYPE_GRADIENT (SPGradient::getType())
-#define SP_GRADIENT(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), SP_TYPE_GRADIENT, SPGradient))
-#define SP_GRADIENT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), SP_TYPE_GRADIENT, SPGradientClass))
-#define SP_IS_GRADIENT(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SP_TYPE_GRADIENT))
-#define SP_IS_GRADIENT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), SP_TYPE_GRADIENT))
+#define SP_GRADIENT(obj) ((SPGradient*)obj)
+#define SP_IS_GRADIENT(obj) (obj != NULL && static_cast<const SPObject*>(obj)->typeHierarchy.count(typeid(SPGradient)))
enum SPGradientType {
SP_GRADIENT_TYPE_UNKNOWN,
diff --git a/src/sp-guide.h b/src/sp-guide.h
index 23cc17900..7c09b6482 100644
--- a/src/sp-guide.h
+++ b/src/sp-guide.h
@@ -26,11 +26,8 @@ class SPDesktop;
G_BEGIN_DECLS
#define SP_TYPE_GUIDE (sp_guide_get_type())
-#define SP_GUIDE(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), SP_TYPE_GUIDE, SPGuide))
-#define SP_GUIDE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), SP_TYPE_GUIDE, SPGuideClass))
-#define SP_IS_GUIDE(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SP_TYPE_GUIDE))
-#define SP_IS_GUIDE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), SP_TYPE_GUIDE))
-
+#define SP_GUIDE(obj) ((SPGuide*)obj)
+#define SP_IS_GUIDE(obj) (obj != NULL && static_cast<const SPObject*>(obj)->typeHierarchy.count(typeid(SPGuide)))
class CGuide;
diff --git a/src/sp-image.h b/src/sp-image.h
index a095d9eb4..7389683ab 100644
--- a/src/sp-image.h
+++ b/src/sp-image.h
@@ -15,10 +15,8 @@
*/
#define SP_TYPE_IMAGE (sp_image_get_type ())
-#define SP_IMAGE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SP_TYPE_IMAGE, SPImage))
-#define SP_IMAGE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SP_TYPE_IMAGE, SPImageClass))
-#define SP_IS_IMAGE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SP_TYPE_IMAGE))
-#define SP_IS_IMAGE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SP_TYPE_IMAGE))
+#define SP_IMAGE(obj) ((SPImage*)obj)
+#define SP_IS_IMAGE(obj) (obj != NULL && static_cast<const SPObject*>(obj)->typeHierarchy.count(typeid(SPImage)))
class CImage;
diff --git a/src/sp-item-group.h b/src/sp-item-group.h
index 9f22e2ef8..4e04b47f0 100644
--- a/src/sp-item-group.h
+++ b/src/sp-item-group.h
@@ -17,10 +17,8 @@
#include "sp-lpe-item.h"
#define SP_TYPE_GROUP (sp_group_get_type ())
-#define SP_GROUP(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SP_TYPE_GROUP, SPGroup))
-#define SP_GROUP_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SP_TYPE_GROUP, SPGroupClass))
-#define SP_IS_GROUP(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SP_TYPE_GROUP))
-#define SP_IS_GROUP_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SP_TYPE_GROUP))
+#define SP_GROUP(obj) ((SPGroup*)obj)
+#define SP_IS_GROUP(obj) (obj != NULL && static_cast<const SPObject*>(obj)->typeHierarchy.count(typeid(SPGroup)))
#define SP_IS_LAYER(obj) (SP_IS_GROUP(obj) && SP_GROUP(obj)->layerMode() == SPGroup::LAYER)
diff --git a/src/sp-item.h b/src/sp-item.h
index 870dae031..f3002487d 100644
--- a/src/sp-item.h
+++ b/src/sp-item.h
@@ -102,9 +102,8 @@ class SPItemClass;
class CItem;
#define SP_TYPE_ITEM (sp_item_get_type ())
-#define SP_ITEM(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SP_TYPE_ITEM, SPItem))
-#define SP_ITEM_CLASS(clazz) (G_TYPE_CHECK_CLASS_CAST((clazz), SP_TYPE_ITEM, SPItemClass))
-#define SP_IS_ITEM(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SP_TYPE_ITEM))
+#define SP_ITEM(obj) ((SPItem*)obj)
+#define SP_IS_ITEM(obj) (obj != NULL && static_cast<const SPObject*>(obj)->typeHierarchy.count(typeid(SPItem)))
GType sp_item_get_type() G_GNUC_CONST;
diff --git a/src/sp-line.h b/src/sp-line.h
index e59c15e9c..964c9717d 100644
--- a/src/sp-line.h
+++ b/src/sp-line.h
@@ -20,10 +20,8 @@
#define SP_TYPE_LINE (sp_line_get_type())
-#define SP_LINE(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), SP_TYPE_LINE, SPLine))
-#define SP_LINE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), SP_TYPE_LINE, SPLineClass))
-#define SP_IS_LINE(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SP_TYPE_LINE))
-#define SP_IS_LINE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), SP_TYPE_LINE))
+#define SP_LINE(obj) ((SPLine*)obj)
+#define SP_IS_LINE(obj) (obj != NULL && static_cast<const SPObject*>(obj)->typeHierarchy.count(typeid(SPLine)))
class SPLine;
class SPLineClass;
diff --git a/src/sp-lpe-item.h b/src/sp-lpe-item.h
index 60fef13b7..847461116 100644
--- a/src/sp-lpe-item.h
+++ b/src/sp-lpe-item.h
@@ -19,10 +19,8 @@
#include <list>
#define SP_TYPE_LPE_ITEM (sp_lpe_item_get_type())
-#define SP_LPE_ITEM(o) (G_TYPE_CHECK_INSTANCE_CAST((o), SP_TYPE_LPE_ITEM, SPLPEItem))
-#define SP_LPE_ITEM_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SP_TYPE_LPE_ITEM, SPLPEItemClass))
-#define SP_IS_LPE_ITEM(o) (G_TYPE_CHECK_INSTANCE_TYPE((o), SP_TYPE_LPE_ITEM))
-#define SP_IS_LPE_ITEM_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SP_TYPE_LPE_ITEM))
+#define SP_LPE_ITEM(obj) ((SPLPEItem*)obj)
+#define SP_IS_LPE_ITEM(obj) (obj != NULL && static_cast<const SPObject*>(obj)->typeHierarchy.count(typeid(SPLPEItem)))
class CLPEItem;
class LivePathEffectObject;
diff --git a/src/sp-mask.h b/src/sp-mask.h
index e0048c13f..c254591e2 100644
--- a/src/sp-mask.h
+++ b/src/sp-mask.h
@@ -19,10 +19,8 @@
#include "xml/node.h"
#define SP_TYPE_MASK (sp_mask_get_type ())
-#define SP_MASK(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SP_TYPE_MASK, SPMask))
-#define SP_MASK_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SP_TYPE_MASK, SPMaskClass))
-#define SP_IS_MASK(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SP_TYPE_MASK))
-#define SP_IS_MASK_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SP_TYPE_MASK))
+#define SP_MASK(obj) ((SPMask*)obj)
+#define SP_IS_MASK(obj) (obj != NULL && static_cast<const SPObject*>(obj)->typeHierarchy.count(typeid(SPMask)))
struct SPMaskView;
diff --git a/src/sp-mesh-patch.h b/src/sp-mesh-patch.h
index 58655d65a..7ff7eeb47 100644
--- a/src/sp-mesh-patch.h
+++ b/src/sp-mesh-patch.h
@@ -23,10 +23,8 @@ struct SPMeshPatch;
struct SPMeshPatchClass;
#define SP_TYPE_MESHPATCH (sp_meshpatch_get_type())
-#define SP_MESHPATCH(o) (G_TYPE_CHECK_INSTANCE_CAST((o), SP_TYPE_MESHPATCH, SPMeshPatch))
-#define SP_MESHPATCH_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), SP_TYPE_MESHPATCH, SPMeshPatchClass))
-#define SP_IS_MESHPATCH(o) (G_TYPE_CHECK_INSTANCE_TYPE((o), SP_TYPE_MESHPATCH))
-#define SP_IS_MESHPATCH_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE((k), SP_TYPE_MESHPATCH))
+#define SP_MESHPATCH(obj) ((SPMeshPatch*)obj)
+#define SP_IS_MESHPATCH(obj) (obj != NULL && static_cast<const SPObject*>(obj)->typeHierarchy.count(typeid(SPMeshPatch)))
GType sp_meshpatch_get_type();
diff --git a/src/sp-mesh-row.h b/src/sp-mesh-row.h
index 98187b124..595424a1c 100644
--- a/src/sp-mesh-row.h
+++ b/src/sp-mesh-row.h
@@ -20,10 +20,8 @@ struct SPMeshRow;
struct SPMeshRowClass;
#define SP_TYPE_MESHROW (sp_meshrow_get_type())
-#define SP_MESHROW(o) (G_TYPE_CHECK_INSTANCE_CAST((o), SP_TYPE_MESHROW, SPMeshRow))
-#define SP_MESHROW_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), SP_TYPE_MESHROW, SPMeshRowClass))
-#define SP_IS_MESHROW(o) (G_TYPE_CHECK_INSTANCE_TYPE((o), SP_TYPE_MESHROW))
-#define SP_IS_MESHROW_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE((k), SP_TYPE_MESHROW))
+#define SP_MESHROW(obj) ((SPMeshRow*)obj)
+#define SP_IS_MESHROW(obj) (obj != NULL && static_cast<const SPObject*>(obj)->typeHierarchy.count(typeid(SPMeshRow)))
GType sp_meshrow_get_type();
diff --git a/src/sp-metadata.h b/src/sp-metadata.h
index d610a1592..36da719f0 100644
--- a/src/sp-metadata.h
+++ b/src/sp-metadata.h
@@ -18,8 +18,8 @@
/* Metadata base class */
#define SP_TYPE_METADATA (sp_metadata_get_type ())
-#define SP_METADATA(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), SP_TYPE_METADATA, SPMetadata))
-#define SP_IS_METADATA(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), SP_TYPE_METADATA))
+#define SP_METADATA(obj) ((SPMetadata*)obj)
+#define SP_IS_METADATA(obj) (obj != NULL && static_cast<const SPObject*>(obj)->typeHierarchy.count(typeid(SPMetadata)))
class CMetadata;
diff --git a/src/sp-missing-glyph.h b/src/sp-missing-glyph.h
index 213b98d97..cdd50cf51 100644
--- a/src/sp-missing-glyph.h
+++ b/src/sp-missing-glyph.h
@@ -19,10 +19,8 @@
#include "sp-object.h"
#define SP_TYPE_MISSING_GLYPH (sp_missing_glyph_get_type ())
-#define SP_MISSING_GLYPH(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SP_TYPE_MISSING_GLYPH, SPMissingGlyph))
-#define SP_MISSING_GLYPH_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SP_TYPE_MISSING_GLYPH, SPMissingGlyphClass))
-#define SP_IS_MISSING_GLYPH(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SP_TYPE_MISSING_GLYPH))
-#define SP_IS_MISSING_GLYPH_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SP_TYPE_MISSING_GLYPH))
+#define SP_MISSING_GLYPH(obj) ((SPMissingGlyph*)obj)
+#define SP_IS_MISSING_GLYPH(obj) (obj != NULL && static_cast<const SPObject*>(obj)->typeHierarchy.count(typeid(SPMissingGlyph)))
class CMissingGlyph;
diff --git a/src/sp-namedview.h b/src/sp-namedview.h
index 294f39d59..0adccde75 100644
--- a/src/sp-namedview.h
+++ b/src/sp-namedview.h
@@ -15,10 +15,8 @@
*/
#define SP_TYPE_NAMEDVIEW (sp_namedview_get_type())
-#define SP_NAMEDVIEW(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), SP_TYPE_NAMEDVIEW, SPNamedView))
-#define SP_NAMEDVIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), SP_TYPE_NAMEDVIEW, SPNamedViewClass))
-#define SP_IS_NAMEDVIEW(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SP_TYPE_NAMEDVIEW))
-#define SP_IS_NAMEDVIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), SP_TYPE_NAMEDVIEW))
+#define SP_NAMEDVIEW(obj) ((SPNamedView*)obj)
+#define SP_IS_NAMEDVIEW(obj) (obj != NULL && static_cast<const SPObject*>(obj)->typeHierarchy.count(typeid(SPNamedView)))
#include "sp-object-group.h"
#include "sp-metric.h"
diff --git a/src/sp-object-group.h b/src/sp-object-group.h
index aa54092e6..e1e4b279e 100644
--- a/src/sp-object-group.h
+++ b/src/sp-object-group.h
@@ -17,10 +17,8 @@
#include "sp-object.h"
#define SP_TYPE_OBJECTGROUP (sp_objectgroup_get_type ())
-#define SP_OBJECTGROUP(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SP_TYPE_OBJECTGROUP, SPObjectGroup))
-#define SP_OBJECTGROUP_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SP_TYPE_OBJECTGROUP, SPObjectGroupClass))
-#define SP_IS_OBJECTGROUP(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SP_TYPE_OBJECTGROUP))
-#define SP_IS_OBJECTGROUP_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SP_TYPE_OBJECTGROUP))
+#define SP_OBJECTGROUP(obj) ((SPObjectGroup*)obj)
+#define SP_IS_OBJECTGROUP(obj) (obj != NULL && static_cast<const SPObject*>(obj)->typeHierarchy.count(typeid(SPObjectGroup)))
GType sp_objectgroup_get_type() G_GNUC_CONST;
class CObjectGroup;
diff --git a/src/sp-object.h b/src/sp-object.h
index cd6dbc247..1b40e5a97 100644
--- a/src/sp-object.h
+++ b/src/sp-object.h
@@ -19,9 +19,8 @@ class SPObject;
class SPObjectClass;
#define SP_TYPE_OBJECT (sp_object_get_type())
-#define SP_OBJECT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SP_TYPE_OBJECT, SPObject))
-#define SP_OBJECT_CLASS(clazz) (G_TYPE_CHECK_CLASS_CAST((clazz), SP_TYPE_OBJECT, SPObjectClass))
-#define SP_IS_OBJECT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SP_TYPE_OBJECT))
+#define SP_OBJECT(obj) ((SPObject*)obj)
+#define SP_IS_OBJECT(obj) (obj != NULL && static_cast<const SPObject*>(obj)->typeHierarchy.count(typeid(SPObject)))
/* Async modification flags */
#define SP_OBJECT_MODIFIED_FLAG (1 << 0)
diff --git a/src/sp-offset.h b/src/sp-offset.h
index a18f2d889..78c5b6468 100644
--- a/src/sp-offset.h
+++ b/src/sp-offset.h
@@ -17,10 +17,8 @@
#include <sigc++/sigc++.h>
#define SP_TYPE_OFFSET (sp_offset_get_type ())
-#define SP_OFFSET(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SP_TYPE_OFFSET, SPOffset))
-#define SP_OFFSET_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SP_TYPE_OFFSET, SPOffsetClass))
-#define SP_IS_OFFSET(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SP_TYPE_OFFSET))
-#define SP_IS_OFFSET_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SP_TYPE_OFFSET))
+#define SP_OFFSET(obj) ((SPOffset*)obj)
+#define SP_IS_OFFSET(obj) (obj != NULL && static_cast<const SPObject*>(obj)->typeHierarchy.count(typeid(SPOffset)))
class COffset;
class SPUseReference;
diff --git a/src/sp-paint-server.h b/src/sp-paint-server.h
index a44a0040f..53e728827 100644
--- a/src/sp-paint-server.h
+++ b/src/sp-paint-server.h
@@ -21,10 +21,8 @@
#include "uri-references.h"
#define SP_TYPE_PAINT_SERVER (sp_paint_server_get_type())
-#define SP_PAINT_SERVER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SP_TYPE_PAINT_SERVER, SPPaintServer))
-#define SP_PAINT_SERVER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SP_TYPE_PAINT_SERVER, SPPaintServerClass))
-#define SP_IS_PAINT_SERVER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SP_TYPE_PAINT_SERVER))
-#define SP_IS_PAINT_SERVER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SP_TYPE_PAINT_SERVER))
+#define SP_PAINT_SERVER(obj) ((SPPaintServer*)obj)
+#define SP_IS_PAINT_SERVER(obj) (obj != NULL && static_cast<const SPObject*>(obj)->typeHierarchy.count(typeid(SPPaintServer)))
GType sp_paint_server_get_type(void) G_GNUC_CONST;
diff --git a/src/sp-path.h b/src/sp-path.h
index 27d5b739d..21e830d4c 100644
--- a/src/sp-path.h
+++ b/src/sp-path.h
@@ -23,8 +23,8 @@ class SPCurve;
class CPath;
#define SP_TYPE_PATH (sp_path_get_type ())
-#define SP_PATH(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SP_TYPE_PATH, SPPath))
-#define SP_IS_PATH(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SP_TYPE_PATH))
+#define SP_PATH(obj) ((SPPath*)obj)
+#define SP_IS_PATH(obj) (obj != NULL && static_cast<const SPObject*>(obj)->typeHierarchy.count(typeid(SPPath)))
/**
* SVG <path> implementation
diff --git a/src/sp-pattern.h b/src/sp-pattern.h
index 782b24940..5a35db4d2 100644
--- a/src/sp-pattern.h
+++ b/src/sp-pattern.h
@@ -17,14 +17,12 @@
#include "sp-item.h"
#define SP_TYPE_PATTERN (sp_pattern_get_type ())
-#define SP_PATTERN(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), SP_TYPE_PATTERN, SPPattern))
-#define SP_PATTERN_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), SP_TYPE_PATTERN, SPPatternClass))
-#define SP_IS_PATTERN(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), SP_TYPE_PATTERN))
-#define SP_IS_PATTERN_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), SP_TYPE_PATTERN))
+#define SP_PATTERN(obj) ((SPPattern*)obj)
+#define SP_IS_PATTERN(obj) (obj != NULL && static_cast<const SPObject*>(obj)->typeHierarchy.count(typeid(SPPattern)))
GType sp_pattern_get_type (void);
-struct SPPattern;
+struct SPPatternReference;
#include "svg/svg-length.h"
#include "sp-paint-server.h"
@@ -34,24 +32,6 @@ struct SPPattern;
#include <sigc++/connection.h>
-class SPPatternReference : public Inkscape::URIReference {
-public:
- SPPatternReference (SPObject *obj) : URIReference(obj) {}
- SPPattern *getObject() const {
- return reinterpret_cast<SPPattern *>(URIReference::getObject());
- }
-
-protected:
- virtual bool _acceptObject(SPObject *obj) const {
- return SP_IS_PATTERN (obj);
- }
-};
-
-enum {
- SP_PATTERN_UNITS_USERSPACEONUSE,
- SP_PATTERN_UNITS_OBJECTBOUNDINGBOX
-};
-
class CPattern;
class SPPattern : public SPPaintServer {
@@ -104,6 +84,24 @@ protected:
};
+class SPPatternReference : public Inkscape::URIReference {
+public:
+ SPPatternReference (SPObject *obj) : URIReference(obj) {}
+ SPPattern *getObject() const {
+ return reinterpret_cast<SPPattern *>(URIReference::getObject());
+ }
+
+protected:
+ virtual bool _acceptObject(SPObject *obj) const {
+ return SP_IS_PATTERN (obj);
+ }
+};
+
+enum {
+ SP_PATTERN_UNITS_USERSPACEONUSE,
+ SP_PATTERN_UNITS_OBJECTBOUNDINGBOX
+};
+
guint pattern_users (SPPattern *pattern);
SPPattern *pattern_chain (SPPattern *pattern);
SPPattern *sp_pattern_clone_if_necessary (SPItem *item, SPPattern *pattern, const gchar *property);
diff --git a/src/sp-polygon.h b/src/sp-polygon.h
index 68ba35293..2d82c7014 100644
--- a/src/sp-polygon.h
+++ b/src/sp-polygon.h
@@ -16,10 +16,8 @@
#include "sp-shape.h"
#define SP_TYPE_POLYGON (sp_polygon_get_type ())
-#define SP_POLYGON(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SP_TYPE_POLYGON, SPPolygon))
-#define SP_POLYGON_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SP_TYPE_POLYGON, SPPolygonClass))
-#define SP_IS_POLYGON(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SP_TYPE_POLYGON))
-#define SP_IS_POLYGON_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SP_TYPE_POLYGON))
+#define SP_POLYGON(obj) ((SPPolygon*)obj)
+#define SP_IS_POLYGON(obj) (obj != NULL && static_cast<const SPObject*>(obj)->typeHierarchy.count(typeid(SPPolygon)))
class CPolygon;
diff --git a/src/sp-polyline.h b/src/sp-polyline.h
index 306b1db1a..acba1bb8b 100644
--- a/src/sp-polyline.h
+++ b/src/sp-polyline.h
@@ -6,10 +6,8 @@
#define SP_TYPE_POLYLINE (sp_polyline_get_type ())
-#define SP_POLYLINE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SP_TYPE_POLYLINE, SPPolyLine))
-#define SP_POLYLINE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SP_TYPE_POLYLINE, SPPolyLineClass))
-#define SP_IS_POLYLINE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SP_TYPE_POLYLINE))
-#define SP_IS_POLYLINE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SP_TYPE_POLYLINE))
+#define SP_POLYLINE(obj) ((SPPolyLine*)obj)
+#define SP_IS_POLYLINE(obj) (obj != NULL && static_cast<const SPObject*>(obj)->typeHierarchy.count(typeid(SPPolyLine)))
class SPPolyLine;
class SPPolyLineClass;
diff --git a/src/sp-rect.h b/src/sp-rect.h
index e8f1e87a8..0bea4e253 100644
--- a/src/sp-rect.h
+++ b/src/sp-rect.h
@@ -21,10 +21,8 @@
G_BEGIN_DECLS
#define SP_TYPE_RECT (sp_rect_get_type ())
-#define SP_RECT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SP_TYPE_RECT, SPRect))
-#define SP_RECT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SP_TYPE_RECT, SPRectClass))
-#define SP_IS_RECT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SP_TYPE_RECT))
-#define SP_IS_RECT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SP_TYPE_RECT))
+#define SP_RECT(obj) ((SPRect*)obj)
+#define SP_IS_RECT(obj) (obj != NULL && static_cast<const SPObject*>(obj)->typeHierarchy.count(typeid(SPRect)))
class CRect;
diff --git a/src/sp-root.h b/src/sp-root.h
index 9e5002b35..56814ef2c 100644
--- a/src/sp-root.h
+++ b/src/sp-root.h
@@ -20,10 +20,8 @@
#include "sp-item-group.h"
#define SP_TYPE_ROOT (sp_root_get_type())
-#define SP_ROOT(o) (G_TYPE_CHECK_INSTANCE_CAST((o), SP_TYPE_ROOT, SPRoot))
-#define SP_ROOT_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), SP_TYPE_ROOT, SPRootClass))
-#define SP_IS_ROOT(o) (G_TYPE_CHECK_INSTANCE_TYPE((o), SP_TYPE_ROOT))
-#define SP_IS_ROOT_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE((k), SP_TYPE_ROOT))
+#define SP_ROOT(obj) ((SPRoot*)obj)
+#define SP_IS_ROOT(obj) (obj != NULL && static_cast<const SPObject*>(obj)->typeHierarchy.count(typeid(SPRoot)))
class SPDefs;
class CRoot;
diff --git a/src/sp-script.h b/src/sp-script.h
index a8ec05db7..b62ae22fc 100644
--- a/src/sp-script.h
+++ b/src/sp-script.h
@@ -15,10 +15,8 @@
#include "sp-item.h"
#define SP_TYPE_SCRIPT (sp_script_get_type())
-#define SP_SCRIPT(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), SP_TYPE_SCRIPT, SPScript))
-#define SP_SCRIPT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), SP_TYPE_SCRIPT, SPScriptClass))
-#define SP_IS_SCRIPT(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SP_TYPE_SCRIPT))
-#define SP_IS_SCRIPT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), SP_TYPE_SCRIPT))
+#define SP_SCRIPT(obj) ((SPScript*)obj)
+#define SP_IS_SCRIPT(obj) (obj != NULL && static_cast<const SPObject*>(obj)->typeHierarchy.count(typeid(SPScript)))
/* SPScript */
diff --git a/src/sp-shape.h b/src/sp-shape.h
index 85ac89a00..e0be6cbea 100644
--- a/src/sp-shape.h
+++ b/src/sp-shape.h
@@ -23,10 +23,8 @@
#include <sigc++/connection.h>
#define SP_TYPE_SHAPE (sp_shape_get_type ())
-#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))
-#define SP_IS_SHAPE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SP_TYPE_SHAPE))
+#define SP_SHAPE(obj) ((SPShape*)obj)
+#define SP_IS_SHAPE(obj) (obj != NULL && static_cast<const SPObject*>(obj)->typeHierarchy.count(typeid(SPShape)))
#define SP_SHAPE_WRITE_PATH (1 << 2)
diff --git a/src/sp-spiral.h b/src/sp-spiral.h
index 5c62139e3..0ef82defc 100644
--- a/src/sp-spiral.h
+++ b/src/sp-spiral.h
@@ -24,10 +24,8 @@
#define SAMPLE_SIZE 8 ///< sample size per one bezier
#define SP_TYPE_SPIRAL (sp_spiral_get_type ())
-#define SP_SPIRAL(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SP_TYPE_SPIRAL, SPSpiral))
-#define SP_SPIRAL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SP_TYPE_SPIRAL, SPSpiralClass))
-#define SP_IS_SPIRAL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SP_TYPE_SPIRAL))
-#define SP_IS_SPIRAL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SP_TYPE_SPIRAL))
+#define SP_SPIRAL(obj) ((SPSpiral*)obj)
+#define SP_IS_SPIRAL(obj) (obj != NULL && static_cast<const SPObject*>(obj)->typeHierarchy.count(typeid(SPSpiral)))
class CSpiral;
/**
diff --git a/src/sp-star.h b/src/sp-star.h
index 60de2a6aa..43ba217ef 100644
--- a/src/sp-star.h
+++ b/src/sp-star.h
@@ -17,10 +17,8 @@
#include "sp-polygon.h"
#define SP_TYPE_STAR (sp_star_get_type ())
-#define SP_STAR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SP_TYPE_STAR, SPStar))
-#define SP_STAR_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SP_TYPE_STAR, SPStarClass))
-#define SP_IS_STAR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SP_TYPE_STAR))
-#define SP_IS_STAR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SP_TYPE_STAR))
+#define SP_STAR(obj) ((SPStar*)obj)
+#define SP_IS_STAR(obj) (obj != NULL && static_cast<const SPObject*>(obj)->typeHierarchy.count(typeid(SPStar)))
class CStar;
typedef enum {
diff --git a/src/sp-stop.h b/src/sp-stop.h
index 55786bfd7..2dcf04d6c 100644
--- a/src/sp-stop.h
+++ b/src/sp-stop.h
@@ -17,10 +17,8 @@ class ustring;
}
#define SP_TYPE_STOP (sp_stop_get_type())
-#define SP_STOP(o) (G_TYPE_CHECK_INSTANCE_CAST((o), SP_TYPE_STOP, SPStop))
-#define SP_STOP_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), SP_TYPE_STOP, SPStopClass))
-#define SP_IS_STOP(o) (G_TYPE_CHECK_INSTANCE_TYPE((o), SP_TYPE_STOP))
-#define SP_IS_STOP_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE((k), SP_TYPE_STOP))
+#define SP_STOP(obj) ((SPStop*)obj)
+#define SP_IS_STOP(obj) (obj != NULL && static_cast<const SPObject*>(obj)->typeHierarchy.count(typeid(SPStop)))
GType sp_stop_get_type();
diff --git a/src/sp-string.h b/src/sp-string.h
index 790964214..9e12f8429 100644
--- a/src/sp-string.h
+++ b/src/sp-string.h
@@ -11,10 +11,8 @@
#include "sp-object.h"
#define SP_TYPE_STRING (sp_string_get_type ())
-#define SP_STRING(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SP_TYPE_STRING, SPString))
-#define SP_STRING_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SP_TYPE_STRING, SPStringClass))
-#define SP_IS_STRING(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SP_TYPE_STRING))
-#define SP_IS_STRING_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SP_TYPE_STRING))
+#define SP_STRING(obj) ((SPString*)obj)
+#define SP_IS_STRING(obj) (obj != NULL && static_cast<const SPObject*>(obj)->typeHierarchy.count(typeid(SPString)))
class CString;
diff --git a/src/sp-style-elem.h b/src/sp-style-elem.h
index 6e3fc3cce..46ae73f7d 100644
--- a/src/sp-style-elem.h
+++ b/src/sp-style-elem.h
@@ -5,10 +5,8 @@
#include "media.h"
#define SP_TYPE_STYLE_ELEM (sp_style_elem_get_type())
-#define SP_STYLE_ELEM(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), SP_TYPE_STYLE_ELEM, SPStyleElem))
-#define SP_STYLE_ELEM_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), SP_TYPE_STYLE_ELEM, SPStyleElemClass))
-#define SP_IS_STYLE_ELEM(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SP_TYPE_STYLE_ELEM))
-#define SP_IS_STYLE_ELEM_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), SP_TYPE_STYLE_ELEM))
+#define SP_STYLE_ELEM(obj) ((SPStyleElem*)obj)
+#define SP_IS_STYLE_ELEM(obj) (obj != NULL && static_cast<const SPObject*>(obj)->typeHierarchy.count(typeid(SPStyleElem)))
class CStyleElem;
diff --git a/src/sp-switch.h b/src/sp-switch.h
index aae8a8a14..391815959 100644
--- a/src/sp-switch.h
+++ b/src/sp-switch.h
@@ -20,10 +20,8 @@
G_BEGIN_DECLS
#define SP_TYPE_SWITCH (sp_switch_get_type())
-#define SP_SWITCH(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SP_TYPE_SWITCH, SPSwitch))
-#define SP_SWITCH_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SP_TYPE_SWITCH, SPSwitchClass))
-#define SP_IS_SWITCH(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SP_TYPE_SWITCH))
-#define SP_IS_SWITCH_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SP_TYPE_SWITCH))
+#define SP_SWITCH(obj) ((SPSwitch*)obj)
+#define SP_IS_SWITCH(obj) (obj != NULL && static_cast<const SPObject*>(obj)->typeHierarchy.count(typeid(SPSwitch)))
GType sp_switch_get_type() G_GNUC_CONST;
class CSwitch;
diff --git a/src/sp-symbol.h b/src/sp-symbol.h
index 0c2ecae36..1ced63c52 100644
--- a/src/sp-symbol.h
+++ b/src/sp-symbol.h
@@ -18,8 +18,8 @@
*/
#define SP_TYPE_SYMBOL (sp_symbol_get_type ())
-#define SP_SYMBOL(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), SP_TYPE_SYMBOL, SPSymbol))
-#define SP_IS_SYMBOL(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), SP_TYPE_SYMBOL))
+#define SP_SYMBOL(obj) ((SPSymbol*)obj)
+#define SP_IS_SYMBOL(obj) (obj != NULL && static_cast<const SPObject*>(obj)->typeHierarchy.count(typeid(SPSymbol)))
class CSymbol;
diff --git a/src/sp-text.h b/src/sp-text.h
index 7e2cffd18..51d248e1a 100644
--- a/src/sp-text.h
+++ b/src/sp-text.h
@@ -23,10 +23,8 @@
#define SP_TYPE_TEXT (sp_text_get_type())
-#define SP_TEXT(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), SP_TYPE_TEXT, SPText))
-#define SP_TEXT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), SP_TYPE_TEXT, SPTextClass))
-#define SP_IS_TEXT(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SP_TYPE_TEXT))
-#define SP_IS_TEXT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), SP_TYPE_TEXT))
+#define SP_TEXT(obj) ((SPText*)obj)
+#define SP_IS_TEXT(obj) (obj != NULL && static_cast<const SPObject*>(obj)->typeHierarchy.count(typeid(SPText)))
/* Text specific flags */
#define SP_TEXT_CONTENT_MODIFIED_FLAG SP_OBJECT_USER_MODIFIED_FLAG_A
diff --git a/src/sp-textpath.h b/src/sp-textpath.h
index 18fc645d5..52b18a735 100644
--- a/src/sp-textpath.h
+++ b/src/sp-textpath.h
@@ -10,10 +10,8 @@ class Path;
#define SP_TYPE_TEXTPATH (sp_textpath_get_type())
-#define SP_TEXTPATH(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), SP_TYPE_TEXTPATH, SPTextPath))
-#define SP_TEXTPATH_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), SP_TYPE_TEXTPATH, SPTextPathClass))
-#define SP_IS_TEXTPATH(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SP_TYPE_TEXTPATH))
-#define SP_IS_TEXTPATH_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), SP_TYPE_TEXTPATH))
+#define SP_TEXTPATH(obj) ((SPTextPath*)obj)
+#define SP_IS_TEXTPATH(obj) (obj != NULL && static_cast<const SPObject*>(obj)->typeHierarchy.count(typeid(SPTextPath)))
class CTextPath;
diff --git a/src/sp-title.h b/src/sp-title.h
index 17559c488..f276ab177 100644
--- a/src/sp-title.h
+++ b/src/sp-title.h
@@ -15,7 +15,8 @@
#include "sp-object.h"
#define SP_TYPE_TITLE (sp_title_get_type ())
-#define SP_IS_TITLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SP_TYPE_TITLE))
+#define SP_TITLE(obj) ((SPTitle*)obj)
+#define SP_IS_TITLE(obj) (obj != NULL && static_cast<const SPObject*>(obj)->typeHierarchy.count(typeid(SPTitle)))
class CTitle;
diff --git a/src/sp-tref.h b/src/sp-tref.h
index 17ec2f591..e953a95be 100644
--- a/src/sp-tref.h
+++ b/src/sp-tref.h
@@ -23,10 +23,8 @@
/* tref base class */
#define SP_TYPE_TREF (sp_tref_get_type())
-#define SP_TREF(o) (G_TYPE_CHECK_INSTANCE_CAST((o), SP_TYPE_TREF, SPTRef))
-#define SP_TREF_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), SP_TYPE_TREF, SPTSpanClass))
-#define SP_IS_TREF(o) (G_TYPE_CHECK_INSTANCE_TYPE((o), SP_TYPE_TREF))
-#define SP_IS_TREF_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), SP_TYPE_TREF))
+#define SP_TREF(obj) ((SPTRef*)obj)
+#define SP_IS_TREF(obj) (obj != NULL && static_cast<const SPObject*>(obj)->typeHierarchy.count(typeid(SPTRef)))
class CTRef;
diff --git a/src/sp-tspan.h b/src/sp-tspan.h
index ed4bc4506..e9dd25569 100644
--- a/src/sp-tspan.h
+++ b/src/sp-tspan.h
@@ -12,10 +12,8 @@
G_BEGIN_DECLS
#define SP_TYPE_TSPAN (sp_tspan_get_type())
-#define SP_TSPAN(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), SP_TYPE_TSPAN, SPTSpan))
-#define SP_TSPAN_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), SP_TYPE_TSPAN, SPTSpanClass))
-#define SP_IS_TSPAN(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SP_TYPE_TSPAN))
-#define SP_IS_TSPAN_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), SP_TYPE_TSPAN))
+#define SP_TSPAN(obj) ((SPTSpan*)obj)
+#define SP_IS_TSPAN(obj) (obj != NULL && static_cast<const SPObject*>(obj)->typeHierarchy.count(typeid(SPTSpan)))
enum {
SP_TSPAN_ROLE_UNSPECIFIED,
diff --git a/src/sp-use.h b/src/sp-use.h
index 4107f45af..171b4787a 100644
--- a/src/sp-use.h
+++ b/src/sp-use.h
@@ -20,10 +20,8 @@
#define SP_TYPE_USE (sp_use_get_type ())
-#define SP_USE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SP_TYPE_USE, SPUse))
-#define SP_USE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SP_TYPE_USE, SPUseClass))
-#define SP_IS_USE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SP_TYPE_USE))
-#define SP_IS_USE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SP_TYPE_USE))
+#define SP_USE(obj) ((SPUse*)obj)
+#define SP_IS_USE(obj) (obj != NULL && static_cast<const SPObject*>(obj)->typeHierarchy.count(typeid(SPUse)))
class SPUseReference;
class CUse;
diff --git a/src/widgets/gradient-toolbar.cpp b/src/widgets/gradient-toolbar.cpp
index ea125a380..291e19016 100644
--- a/src/widgets/gradient-toolbar.cpp
+++ b/src/widgets/gradient-toolbar.cpp
@@ -91,7 +91,8 @@ void gr_apply_gradient_to_item( SPItem *item, SPGradient *gr, SPGradientType ini
bool isFill = (mode == Inkscape::FOR_FILL);
if (style
&& (isFill ? style->fill.isPaintserver() : style->stroke.isPaintserver())
- && SP_IS_GRADIENT(isFill ? style->getFillPaintServer() : style->getStrokePaintServer()) ) {
+ //&& SP_IS_GRADIENT(isFill ? style->getFillPaintServer() : style->getStrokePaintServer()) ) {
+ && (isFill ? SP_IS_GRADIENT(style->getFillPaintServer()) : SP_IS_GRADIENT(style->getStrokePaintServer())) ) {
SPPaintServer *server = isFill ? style->getFillPaintServer() : style->getStrokePaintServer();
if ( SP_IS_LINEARGRADIENT(server) ) {
sp_item_set_gradient(item, gr, SP_GRADIENT_TYPE_LINEAR, mode);