summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorAlex Valavanis <valavanisalex@gmail.com>2013-01-17 00:59:37 +0000
committerAlex Valavanis <valavanisalex@gmail.com>2013-01-17 00:59:37 +0000
commitcd0794c0d76a46a0ae47b6c450167015ee41bc35 (patch)
tree2f0c97f37dadbda4122e622e6aa249294a978336 /src
parentextensions. dxf output. set flag if LWPOLYLINE is closed (Bug 1098283) (diff)
downloadinkscape-cd0794c0d76a46a0ae47b6c450167015ee41bc35.tar.gz
inkscape-cd0794c0d76a46a0ae47b6c450167015ee41bc35.zip
Cleanup more GObject type definitions
(bzr r12034)
Diffstat (limited to 'src')
-rw-r--r--src/draw-context.cpp36
-rw-r--r--src/draw-context.h4
-rw-r--r--src/eraser-context.cpp45
-rw-r--r--src/eraser-context.h4
-rw-r--r--src/filters/flood.cpp47
-rw-r--r--src/filters/flood.h14
-rw-r--r--src/sp-animation.cpp128
-rw-r--r--src/sp-animation.h4
-rw-r--r--src/sp-clippath.cpp5
-rw-r--r--src/sp-guide.cpp39
-rw-r--r--src/sp-guide.h3
-rw-r--r--src/sp-mask.cpp2
-rw-r--r--src/sp-object-group.cpp98
-rw-r--r--src/sp-object-group.h25
-rw-r--r--src/sp-object.cpp184
-rw-r--r--src/sp-object.h82
-rw-r--r--src/sp-rect.cpp46
-rw-r--r--src/sp-rect.h6
-rw-r--r--src/sp-switch.cpp30
-rw-r--r--src/sp-switch.h10
-rw-r--r--src/sp-text.cpp64
21 files changed, 313 insertions, 563 deletions
diff --git a/src/draw-context.cpp b/src/draw-context.cpp
index 5996d600b..e62435004 100644
--- a/src/draw-context.cpp
+++ b/src/draw-context.cpp
@@ -50,8 +50,6 @@
using Inkscape::DocumentUndo;
-static void sp_draw_context_class_init(SPDrawContextClass *klass);
-static void sp_draw_context_init(SPDrawContext *dc);
static void sp_draw_context_dispose(GObject *object);
static void sp_draw_context_setup(SPEventContext *ec);
@@ -76,27 +74,7 @@ static void spdc_flush_white(SPDrawContext *dc, SPCurve *gc);
static void spdc_reset_white(SPDrawContext *dc);
static void spdc_free_colors(SPDrawContext *dc);
-
-static SPEventContextClass *draw_parent_class;
-
-GType sp_draw_context_get_type(void)
-{
- static GType type = 0;
- if (!type) {
- GTypeInfo info = {
- sizeof(SPDrawContextClass),
- NULL, NULL,
- (GClassInitFunc) sp_draw_context_class_init,
- NULL, NULL,
- sizeof(SPDrawContext),
- 4,
- (GInstanceInitFunc) sp_draw_context_init,
- NULL, // value_table
- };
- type = g_type_register_static(SP_TYPE_EVENT_CONTEXT, "SPDrawContext", &info, (GTypeFlags)0);
- }
- return type;
-}
+G_DEFINE_TYPE(SPDrawContext, sp_draw_context, SP_TYPE_EVENT_CONTEXT);
static void sp_draw_context_class_init(SPDrawContextClass *klass)
{
@@ -106,8 +84,6 @@ static void sp_draw_context_class_init(SPDrawContextClass *klass)
object_class = (GObjectClass *)klass;
ec_class = SP_EVENT_CONTEXT_CLASS(klass);
- draw_parent_class = SP_EVENT_CONTEXT_CLASS(g_type_class_peek_parent(klass));
-
object_class->dispose = sp_draw_context_dispose;
ec_class->setup = sp_draw_context_setup;
@@ -167,7 +143,7 @@ static void sp_draw_context_dispose(GObject *object)
spdc_free_colors(dc);
- G_OBJECT_CLASS(draw_parent_class)->dispose(object);
+ G_OBJECT_CLASS(sp_draw_context_parent_class)->dispose(object);
}
static void sp_draw_context_setup(SPEventContext *ec)
@@ -175,8 +151,8 @@ static void sp_draw_context_setup(SPEventContext *ec)
SPDrawContext *dc = SP_DRAW_CONTEXT(ec);
SPDesktop *dt = ec->desktop;
- if ((SP_EVENT_CONTEXT_CLASS(draw_parent_class))->setup) {
- (SP_EVENT_CONTEXT_CLASS(draw_parent_class))->setup(ec);
+ if ((SP_EVENT_CONTEXT_CLASS(sp_draw_context_parent_class))->setup) {
+ (SP_EVENT_CONTEXT_CLASS(sp_draw_context_parent_class))->setup(ec);
}
dc->selection = sp_desktop_selection(dt);
@@ -261,8 +237,8 @@ gint sp_draw_context_root_handler(SPEventContext *ec, GdkEvent *event)
}
if (!ret) {
- if ((SP_EVENT_CONTEXT_CLASS(draw_parent_class))->root_handler) {
- ret = (SP_EVENT_CONTEXT_CLASS(draw_parent_class))->root_handler(ec, event);
+ if ((SP_EVENT_CONTEXT_CLASS(sp_draw_context_parent_class))->root_handler) {
+ ret = (SP_EVENT_CONTEXT_CLASS(sp_draw_context_parent_class))->root_handler(ec, event);
}
}
diff --git a/src/draw-context.h b/src/draw-context.h
index 202dd85b2..98309c0cb 100644
--- a/src/draw-context.h
+++ b/src/draw-context.h
@@ -20,6 +20,7 @@
#include "event-context.h"
#include "live_effects/effect.h"
+G_BEGIN_DECLS
/* Freehand context */
#define SP_TYPE_DRAW_CONTEXT (sp_draw_context_get_type())
@@ -82,7 +83,7 @@ struct SPDrawContext : public SPEventContext{
struct SPDrawContextClass : public SPEventContextClass{};
-GType sp_draw_context_get_type(void);
+GType sp_draw_context_get_type(void) G_GNUC_CONST;
/**
* Returns FIRST active anchor (the activated one).
@@ -119,6 +120,7 @@ void spdc_check_for_and_apply_waiting_LPE(SPDrawContext *dc, SPItem *item);
*/
void spdc_create_single_dot(SPEventContext *ec, Geom::Point const &pt, char const *tool, guint event_state);
+G_END_DECLS
#endif // SEEN_SP_DRAW_CONTEXT_H
/*
diff --git a/src/eraser-context.cpp b/src/eraser-context.cpp
index c4560d462..cd0b1dc3b 100644
--- a/src/eraser-context.cpp
+++ b/src/eraser-context.cpp
@@ -83,9 +83,6 @@ using Inkscape::DocumentUndo;
#define DRAG_DEFAULT 1.0
#define DRAG_MAX 1.0
-
-static void sp_eraser_context_class_init(SPEraserContextClass *klass);
-static void sp_eraser_context_init(SPEraserContext *erc);
static void sp_eraser_context_dispose(GObject *object);
static void sp_eraser_context_setup(SPEventContext *ec);
@@ -104,29 +101,7 @@ static Geom::Point sp_eraser_get_npoint(SPEraserContext const *erc, Geom::Point
static Geom::Point sp_eraser_get_vpoint(SPEraserContext const *erc, Geom::Point n);
static void draw_temporary_box(SPEraserContext *dc);
-
-static SPEventContextClass *eraser_parent_class = 0;
-
-GType sp_eraser_context_get_type(void)
-{
- static GType type = 0;
- if (!type) {
- GTypeInfo info = {
- sizeof(SPEraserContextClass),
- 0, // base_init
- 0, // base_finalize
- (GClassInitFunc)sp_eraser_context_class_init,
- 0, // class_finalize
- 0, // class_data
- sizeof(SPEraserContext),
- 0, // n_preallocs
- (GInstanceInitFunc)sp_eraser_context_init,
- 0 // value_table
- };
- type = g_type_register_static(SP_TYPE_COMMON_CONTEXT, "SPEraserContext", &info, static_cast<GTypeFlags>(0));
- }
- return type;
-}
+G_DEFINE_TYPE(SPEraserContext, sp_eraser_context, SP_TYPE_COMMON_CONTEXT);
static void
sp_eraser_context_class_init(SPEraserContextClass *klass)
@@ -134,8 +109,6 @@ sp_eraser_context_class_init(SPEraserContextClass *klass)
GObjectClass *object_class = G_OBJECT_CLASS(klass);
SPEventContextClass *event_context_class = SP_EVENT_CONTEXT_CLASS(klass);
- eraser_parent_class = SP_EVENT_CONTEXT_CLASS(g_type_class_peek_parent(klass));
-
object_class->dispose = sp_eraser_context_dispose;
event_context_class->setup = sp_eraser_context_setup;
@@ -154,9 +127,7 @@ sp_eraser_context_init(SPEraserContext *erc)
static void
sp_eraser_context_dispose(GObject *object)
{
- //SPEraserContext *erc = SP_ERASER_CONTEXT(object);
-
- G_OBJECT_CLASS(eraser_parent_class)->dispose(object);
+ G_OBJECT_CLASS(sp_eraser_context_parent_class)->dispose(object);
}
static void
@@ -165,8 +136,8 @@ sp_eraser_context_setup(SPEventContext *ec)
SPEraserContext *erc = SP_ERASER_CONTEXT(ec);
SPDesktop *desktop = ec->desktop;
- if ((SP_EVENT_CONTEXT_CLASS(eraser_parent_class))->setup)
- (SP_EVENT_CONTEXT_CLASS(eraser_parent_class))->setup(ec);
+ if ((SP_EVENT_CONTEXT_CLASS(sp_eraser_context_parent_class))->setup)
+ (SP_EVENT_CONTEXT_CLASS(sp_eraser_context_parent_class))->setup(ec);
erc->accumulated = new SPCurve();
erc->currentcurve = new SPCurve();
@@ -222,8 +193,8 @@ static void
sp_eraser_context_set(SPEventContext *ec, Inkscape::Preferences::Entry *val)
{
//pass on up to parent class to handle common attributes.
- if ( eraser_parent_class->set ) {
- eraser_parent_class->set(ec, val);
+ if (SP_EVENT_CONTEXT_CLASS(sp_eraser_context_parent_class)->set ) {
+ SP_EVENT_CONTEXT_CLASS(sp_eraser_context_parent_class)->set(ec, val);
}
}
@@ -689,8 +660,8 @@ sp_eraser_context_root_handler(SPEventContext *event_context,
}
if (!ret) {
- if ((SP_EVENT_CONTEXT_CLASS(eraser_parent_class))->root_handler) {
- ret = (SP_EVENT_CONTEXT_CLASS(eraser_parent_class))->root_handler(event_context, event);
+ if ((SP_EVENT_CONTEXT_CLASS(sp_eraser_context_parent_class))->root_handler) {
+ ret = (SP_EVENT_CONTEXT_CLASS(sp_eraser_context_parent_class))->root_handler(event_context, event);
}
}
diff --git a/src/eraser-context.h b/src/eraser-context.h
index 68ed04ad5..7c147c32f 100644
--- a/src/eraser-context.h
+++ b/src/eraser-context.h
@@ -21,6 +21,8 @@
#include "common-context.h"
+G_BEGIN_DECLS
+
#define SP_TYPE_ERASER_CONTEXT (sp_eraser_context_get_type())
#define SP_ERASER_CONTEXT(o) (G_TYPE_CHECK_INSTANCE_CAST((o), SP_TYPE_ERASER_CONTEXT, SPEraserContext))
#define SP_ERASER_CONTEXT_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), SP_TYPE_ERASER_CONTEXT, SPEraserContextClass))
@@ -45,6 +47,8 @@ struct SPEraserContextClass : public SPEventContextClass{};
GType sp_eraser_context_get_type(void);
+G_END_DECLS
+
#endif // SP_ERASER_CONTEXT_H_SEEN
/*
diff --git a/src/filters/flood.cpp b/src/filters/flood.cpp
index 170bed767..51b139b34 100644
--- a/src/filters/flood.cpp
+++ b/src/filters/flood.cpp
@@ -29,9 +29,6 @@
/* FeFlood base class */
-static void sp_feFlood_class_init(SPFeFloodClass *klass);
-static void sp_feFlood_init(SPFeFlood *feFlood);
-
static void sp_feFlood_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr);
static void sp_feFlood_release(SPObject *object);
static void sp_feFlood_set(SPObject *object, unsigned int key, gchar const *value);
@@ -39,35 +36,13 @@ static void sp_feFlood_update(SPObject *object, SPCtx *ctx, guint flags);
static Inkscape::XML::Node *sp_feFlood_write(SPObject *object, Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, guint flags);
static void sp_feFlood_build_renderer(SPFilterPrimitive *primitive, Inkscape::Filters::Filter *filter);
-static SPFilterPrimitiveClass *feFlood_parent_class;
-
-GType sp_feFlood_get_type()
-{
- static GType feFlood_type = 0;
-
- if (!feFlood_type) {
- GTypeInfo feFlood_info = {
- sizeof(SPFeFloodClass),
- NULL, NULL,
- (GClassInitFunc) sp_feFlood_class_init,
- NULL, NULL,
- sizeof(SPFeFlood),
- 16,
- (GInstanceInitFunc) sp_feFlood_init,
- NULL, /* value_table */
- };
- feFlood_type = g_type_register_static(SP_TYPE_FILTER_PRIMITIVE, "SPFeFlood", &feFlood_info, (GTypeFlags)0);
- }
- return feFlood_type;
-}
+G_DEFINE_TYPE(SPFeFlood, sp_feFlood, SP_TYPE_FILTER_PRIMITIVE);
static void sp_feFlood_class_init(SPFeFloodClass *klass)
{
SPObjectClass *sp_object_class = (SPObjectClass *)klass;
SPFilterPrimitiveClass *sp_primitive_class = (SPFilterPrimitiveClass *)klass;
- feFlood_parent_class = (SPFilterPrimitiveClass*)g_type_class_peek_parent(klass);
-
sp_object_class->build = sp_feFlood_build;
sp_object_class->release = sp_feFlood_release;
sp_object_class->write = sp_feFlood_write;
@@ -90,8 +65,8 @@ static void sp_feFlood_init(SPFeFlood *feFlood)
static void
sp_feFlood_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr)
{
- if (((SPObjectClass *) feFlood_parent_class)->build) {
- ((SPObjectClass *) feFlood_parent_class)->build(object, document, repr);
+ if ((SP_OBJECT_CLASS(sp_feFlood_parent_class))->build) {
+ (SP_OBJECT_CLASS(sp_feFlood_parent_class))->build(object, document, repr);
}
/*LOAD ATTRIBUTES FROM REPR HERE*/
@@ -104,8 +79,8 @@ sp_feFlood_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *re
*/
static void sp_feFlood_release(SPObject *object)
{
- if (((SPObjectClass *) feFlood_parent_class)->release)
- ((SPObjectClass *) feFlood_parent_class)->release(object);
+ if ((SP_OBJECT_CLASS(sp_feFlood_parent_class))->release)
+ (SP_OBJECT_CLASS(sp_feFlood_parent_class))->release(object);
}
/**
@@ -170,8 +145,8 @@ sp_feFlood_set(SPObject *object, unsigned int key, gchar const *value)
}
break;
default:
- if (((SPObjectClass *) feFlood_parent_class)->set)
- ((SPObjectClass *) feFlood_parent_class)->set(object, key, value);
+ if ((SP_OBJECT_CLASS(sp_feFlood_parent_class))->set)
+ (SP_OBJECT_CLASS(sp_feFlood_parent_class))->set(object, key, value);
break;
}
@@ -190,8 +165,8 @@ sp_feFlood_update(SPObject *object, SPCtx *ctx, guint flags)
}
- if (((SPObjectClass *) feFlood_parent_class)->update) {
- ((SPObjectClass *) feFlood_parent_class)->update(object, ctx, flags);
+ if ((SP_OBJECT_CLASS(sp_feFlood_parent_class))->update) {
+ (SP_OBJECT_CLASS(sp_feFlood_parent_class))->update(object, ctx, flags);
}
}
@@ -207,8 +182,8 @@ sp_feFlood_write(SPObject *object, Inkscape::XML::Document *doc, Inkscape::XML::
repr = object->getRepr()->duplicate(doc);
}
- if (((SPObjectClass *) feFlood_parent_class)->write) {
- ((SPObjectClass *) feFlood_parent_class)->write(object, doc, repr, flags);
+ if ((SP_OBJECT_CLASS(sp_feFlood_parent_class))->write) {
+ (SP_OBJECT_CLASS(sp_feFlood_parent_class))->write(object, doc, repr, flags);
}
return repr;
diff --git a/src/filters/flood.h b/src/filters/flood.h
index 0083def70..d60321689 100644
--- a/src/filters/flood.h
+++ b/src/filters/flood.h
@@ -15,10 +15,12 @@
#include "sp-filter-primitive.h"
#include "svg/svg-icc-color.h"
-#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))
+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))
class SPFeFloodClass;
@@ -33,9 +35,9 @@ struct SPFeFloodClass {
SPFilterPrimitiveClass parent_class;
};
-GType sp_feFlood_get_type();
-
+GType sp_feFlood_get_type() G_GNUC_CONST;
+G_END_DECLS
#endif /* !SP_FEFLOOD_H_SEEN */
/*
diff --git a/src/sp-animation.cpp b/src/sp-animation.cpp
index 2951a76fd..e1dba552e 100644
--- a/src/sp-animation.cpp
+++ b/src/sp-animation.cpp
@@ -15,20 +15,7 @@
#include "sp-animation.h"
-#if 0
-/* Feel free to remove this function and its calls. */
-static void log_set_attr(char const *const classname, unsigned int const key, char const *const value)
-{
- unsigned char const *const attr_name = sp_attribute_name(key);
- if (value) {
- g_print("%s: Set %s=%s\n", classname, attr_name, value);
- } else {
- g_print("%s: unset %s.\n", classname, attr_name);
- }
-}
-#else
# define log_set_attr(_classname, _key, _value) static_cast<void>(0)
-#endif
/* Animation base class */
@@ -39,49 +26,26 @@ static void sp_animation_build(SPObject *object, SPDocument *document, Inkscape:
static void sp_animation_release(SPObject *object);
static void sp_animation_set(SPObject *object, unsigned int key, gchar const *value);
-static SPObjectClass *animation_parent_class;
-
-GType sp_animation_get_type(void)
-{
- static GType animation_type = 0;
-
- if (!animation_type) {
- GTypeInfo animation_info = {
- sizeof(SPAnimationClass),
- NULL, NULL,
- (GClassInitFunc) sp_animation_class_init,
- NULL, NULL,
- sizeof(SPAnimation),
- 16,
- (GInstanceInitFunc) sp_animation_init,
- NULL, /* value_table */
- };
- animation_type = g_type_register_static(SP_TYPE_OBJECT, "SPAnimation", &animation_info, (GTypeFlags)0);
- }
- return animation_type;
-}
+G_DEFINE_TYPE(SPAnimation, sp_animation, SP_TYPE_OBJECT);
static void sp_animation_class_init(SPAnimationClass *klass)
{
- //GObjectClass *gobject_class = (GObjectClass *) klass;
SPObjectClass *sp_object_class = (SPObjectClass *) klass;
- animation_parent_class = (SPObjectClass*)g_type_class_peek_parent(klass);
-
sp_object_class->build = sp_animation_build;
sp_object_class->release = sp_animation_release;
sp_object_class->set = sp_animation_set;
}
-static void sp_animation_init(SPAnimation */*animation*/)
+static void sp_animation_init(SPAnimation * /*animation*/)
{
}
static void sp_animation_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr)
{
- if (((SPObjectClass *) animation_parent_class)->build)
- ((SPObjectClass *) animation_parent_class)->build(object, document, repr);
+ if ((SP_OBJECT_CLASS(sp_animation_parent_class))->build)
+ (SP_OBJECT_CLASS(sp_animation_parent_class))->build(object, document, repr);
object->readAttr( "xlink:href" );
object->readAttr( "attributeName" );
@@ -103,12 +67,10 @@ static void sp_animation_release(SPObject */*object*/)
static void sp_animation_set(SPObject *object, unsigned int key, gchar const *value)
{
- //SPAnimation *animation = SP_ANIMATION(object);
-
log_set_attr("SPAnimation", key, value);
- if (((SPObjectClass *) animation_parent_class)->set)
- ((SPObjectClass *) animation_parent_class)->set(object, key, value);
+ if ((SP_OBJECT_CLASS(sp_animation_parent_class))->set)
+ (SP_OBJECT_CLASS(sp_animation_parent_class))->set(object, key, value);
}
/* Interpolated animation base class */
@@ -120,49 +82,26 @@ static void sp_ianimation_build(SPObject *object, SPDocument *document, Inkscape
static void sp_ianimation_release(SPObject *object);
static void sp_ianimation_set(SPObject *object, unsigned int key, gchar const *value);
-static SPObjectClass *ianimation_parent_class;
-
-GType sp_ianimation_get_type(void)
-{
- static GType type = 0;
-
- if (!type) {
- GTypeInfo info = {
- sizeof(SPIAnimationClass),
- NULL, NULL,
- (GClassInitFunc) sp_ianimation_class_init,
- NULL, NULL,
- sizeof(SPIAnimation),
- 16,
- (GInstanceInitFunc) sp_ianimation_init,
- NULL, /* value_table */
- };
- type = g_type_register_static(SP_TYPE_OBJECT, "SPIAnimation", &info, (GTypeFlags)0);
- }
- return type;
-}
+G_DEFINE_TYPE(SPIanimationClass, sp_ianimation, SP_TYPE_OBJECT);
static void sp_ianimation_class_init(SPIAnimationClass *klass)
{
- //GObjectClass *gobject_class = (GObjectClass *) klass;
SPObjectClass *sp_object_class = (SPObjectClass *) klass;
- ianimation_parent_class = (SPObjectClass*)g_type_class_peek_parent(klass);
-
sp_object_class->build = sp_ianimation_build;
sp_object_class->release = sp_ianimation_release;
sp_object_class->set = sp_ianimation_set;
}
-static void sp_ianimation_init(SPIAnimation */*animation*/)
+static void sp_ianimation_init(SPIAnimation * /*animation*/)
{
}
static void sp_ianimation_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr)
{
- if (((SPObjectClass *) ianimation_parent_class)->build)
- ((SPObjectClass *) ianimation_parent_class)->build(object, document, repr);
+ if ((SP_OBJECT_CLASS(sp_ianimation_parent_class))->build)
+ (SP_OBJECT_CLASS(sp_ianimation_parent_class))->build(object, document, repr);
object->readAttr( "calcMode" );
object->readAttr( "values" );
@@ -175,18 +114,16 @@ static void sp_ianimation_build(SPObject *object, SPDocument *document, Inkscape
object->readAttr( "accumulate" );
}
-static void sp_ianimation_release(SPObject */*object*/)
+static void sp_ianimation_release(SPObject * /*object*/)
{
}
static void sp_ianimation_set(SPObject *object, unsigned int key, gchar const *value)
{
- //SPIAnimation *ianimation = SP_IANIMATION(object);
-
log_set_attr("SPIAnimation", key, value);
- if (((SPObjectClass *) ianimation_parent_class)->set)
- ((SPObjectClass *) ianimation_parent_class)->set(object, key, value);
+ if ((SP_OBJECT_CLASS(sp_ianimation_parent_class))->set)
+ (SP_OBJECT_CLASS(sp_ianimation_parent_class))->set(object, key, value);
}
/* SVG <animate> */
@@ -198,63 +135,38 @@ static void sp_animate_build(SPObject *object, SPDocument *document, Inkscape::X
static void sp_animate_release(SPObject *object);
static void sp_animate_set(SPObject *object, unsigned int key, gchar const *value);
-static SPIAnimationClass *animate_parent_class;
-
-GType sp_animate_get_type(void)
-{
- static GType type = 0;
-
- if (!type) {
- GTypeInfo info = {
- sizeof(SPAnimateClass),
- NULL, NULL,
- (GClassInitFunc) sp_animate_class_init,
- NULL, NULL,
- sizeof(SPAnimate),
- 16,
- (GInstanceInitFunc) sp_animate_init,
- NULL, /* value_table */
- };
- type = g_type_register_static(SP_TYPE_IANIMATION, "SPAnimate", &info, (GTypeFlags)0);
- }
- return type;
-}
+G_DEFINE_TYPE(SPAnimate, sp_animate, SP_TYPE_IANIMATION);
static void sp_animate_class_init(SPAnimateClass *klass)
{
- //GObjectClass *gobject_class = (GObjectClass *) klass;
SPObjectClass *sp_object_class = (SPObjectClass *) klass;
- animate_parent_class = (SPIAnimationClass*)g_type_class_peek_parent(klass);
-
sp_object_class->build = sp_animate_build;
sp_object_class->release = sp_animate_release;
sp_object_class->set = sp_animate_set;
}
-static void sp_animate_init(SPAnimate */*animate*/)
+static void sp_animate_init(SPAnimate * /*animate*/)
{
}
static void sp_animate_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr)
{
- if (((SPObjectClass *) animate_parent_class)->build)
- ((SPObjectClass *) animate_parent_class)->build(object, document, repr);
+ if ((SP_OBJECT_CLASS(sp_animate_parent_class))->build)
+ (SP_OBJECT_CLASS(sp_animate_parent_class))->build(object, document, repr);
}
-static void sp_animate_release(SPObject */*object*/)
+static void sp_animate_release(SPObject * /*object*/)
{
}
static void sp_animate_set(SPObject *object, unsigned int key, gchar const *value)
{
- //SPAnimate *animate = SP_ANIMATE(object);
-
log_set_attr("SPAnimate", key, value);
- if (((SPObjectClass *) animate_parent_class)->set)
- ((SPObjectClass *) animate_parent_class)->set(object, key, value);
+ if ((SP_OBJECT_CLASS(sp_animate_parent_class))->set)
+ (SP_OBJECT_CLASS(sp_animate_parent_class))->set(object, key, value);
}
diff --git a/src/sp-animation.h b/src/sp-animation.h
index 407419f5b..cd502b6bc 100644
--- a/src/sp-animation.h
+++ b/src/sp-animation.h
@@ -14,7 +14,7 @@
#include "sp-object.h"
-
+G_BEGIN_DECLS
/* Animation base class */
@@ -70,6 +70,6 @@ struct SPAnimateClass {
GType sp_animate_get_type (void);
-
+G_END_DECLS
#endif
diff --git a/src/sp-clippath.cpp b/src/sp-clippath.cpp
index 2213443a5..47d9be2c1 100644
--- a/src/sp-clippath.cpp
+++ b/src/sp-clippath.cpp
@@ -64,9 +64,8 @@ SPClipPath::sp_clippath_get_type(void)
void SPClipPathClass::sp_clippath_class_init(SPClipPathClass *klass)
{
- SPObjectClass *sp_object_class = (SPObjectClass *) klass;
-
- static_parent_class = (SPObjectGroupClass*)g_type_class_ref(SP_TYPE_OBJECTGROUP);
+ SPObjectClass *sp_object_class = SP_OBJECT_CLASS(klass);
+ static_parent_class = SP_OBJECTGROUP_CLASS(g_type_class_ref(SP_TYPE_OBJECTGROUP));
sp_object_class->build = SPClipPath::build;
sp_object_class->release = SPClipPath::release;
diff --git a/src/sp-guide.cpp b/src/sp-guide.cpp
index 6a71cf4f0..7445b0b75 100644
--- a/src/sp-guide.cpp
+++ b/src/sp-guide.cpp
@@ -53,8 +53,6 @@ enum {
PROP_HICOLOR
};
-static void sp_guide_class_init(SPGuideClass *gc);
-static void sp_guide_init(SPGuide *guide);
static void sp_guide_set_property(GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec);
static void sp_guide_get_property(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec);
@@ -62,36 +60,13 @@ static void sp_guide_build(SPObject *object, SPDocument *document, Inkscape::XML
static void sp_guide_release(SPObject *object);
static void sp_guide_set(SPObject *object, unsigned int key, const gchar *value);
-static SPObjectClass *parent_class;
-
-GType sp_guide_get_type(void)
-{
- static GType guide_type = 0;
-
- if (!guide_type) {
- GTypeInfo guide_info = {
- sizeof(SPGuideClass),
- NULL, NULL,
- (GClassInitFunc) sp_guide_class_init,
- NULL, NULL,
- sizeof(SPGuide),
- 16,
- (GInstanceInitFunc) sp_guide_init,
- NULL, /* value_table */
- };
- guide_type = g_type_register_static(SP_TYPE_OBJECT, "SPGuide", &guide_info, (GTypeFlags) 0);
- }
-
- return guide_type;
-}
+G_DEFINE_TYPE(SPGuide, sp_guide, SP_TYPE_OBJECT);
static void sp_guide_class_init(SPGuideClass *gc)
{
GObjectClass *gobject_class = (GObjectClass *) gc;
SPObjectClass *sp_object_class = (SPObjectClass *) gc;
- parent_class = (SPObjectClass*) g_type_class_ref(SP_TYPE_OBJECT);
-
gobject_class->set_property = sp_guide_set_property;
gobject_class->get_property = sp_guide_get_property;
@@ -158,8 +133,8 @@ static void sp_guide_get_property(GObject *object, guint prop_id, GValue *value,
static void sp_guide_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr)
{
- if (((SPObjectClass *) (parent_class))->build) {
- (* ((SPObjectClass *) (parent_class))->build)(object, document, repr);
+ if ((SP_OBJECT_CLASS(sp_guide_parent_class))->build) {
+ (* (SP_OBJECT_CLASS(sp_guide_parent_class))->build)(object, document, repr);
}
object->readAttr( "inkscape:label" );
@@ -184,8 +159,8 @@ static void sp_guide_release(SPObject *object)
object->document->removeResource("guide", object);
}
- if (((SPObjectClass *) parent_class)->release) {
- ((SPObjectClass *) parent_class)->release(object);
+ if ((SP_OBJECT_CLASS(sp_guide_parent_class))->release) {
+ (SP_OBJECT_CLASS(sp_guide_parent_class))->release(object);
}
}
@@ -260,8 +235,8 @@ static void sp_guide_set(SPObject *object, unsigned int key, const gchar *value)
}
break;
default:
- if (((SPObjectClass *) (parent_class))->set) {
- ((SPObjectClass *) (parent_class))->set(object, key, value);
+ if ((SP_OBJECT_CLASS(sp_guide_parent_class))->set) {
+ (SP_OBJECT_CLASS(sp_guide_parent_class))->set(object, key, value);
}
break;
}
diff --git a/src/sp-guide.h b/src/sp-guide.h
index 319e12305..c39252066 100644
--- a/src/sp-guide.h
+++ b/src/sp-guide.h
@@ -22,6 +22,8 @@
struct SPCanvas;
struct SPCanvasGroup;
+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))
@@ -70,6 +72,7 @@ void sp_guide_remove(SPGuide *guide);
char *sp_guide_description(SPGuide const *guide, const bool verbose = true);
+G_END_DECLS
#endif // SEEN_SP_GUIDE_H
diff --git a/src/sp-mask.cpp b/src/sp-mask.cpp
index f955e5428..785a626f8 100644
--- a/src/sp-mask.cpp
+++ b/src/sp-mask.cpp
@@ -73,7 +73,7 @@ sp_mask_get_type (void)
static void
sp_mask_class_init (SPMaskClass *klass)
{
- parent_class = (SPObjectGroupClass*) g_type_class_ref (SP_TYPE_OBJECTGROUP);
+ parent_class = SP_OBJECTGROUP_CLASS(g_type_class_ref(SP_TYPE_OBJECTGROUP));
SPObjectClass *sp_object_class = (SPObjectClass *) klass;
sp_object_class->build = sp_mask_build;
diff --git a/src/sp-object-group.cpp b/src/sp-object-group.cpp
index 65fbc0295..5158ec70a 100644
--- a/src/sp-object-group.cpp
+++ b/src/sp-object-group.cpp
@@ -16,74 +16,82 @@
#include "xml/repr.h"
#include "document.h"
-SPObjectClass * SPObjectGroupClass::static_parent_class = 0;
+static void sp_objectgroup_child_added(SPObject *object,
+ Inkscape::XML::Node *child,
+ Inkscape::XML::Node *ref);
-GType SPObjectGroup::sp_objectgroup_get_type(void)
-{
- static GType objectgroup_type = 0;
- if (!objectgroup_type) {
- GTypeInfo objectgroup_info = {
- sizeof(SPObjectGroupClass),
- NULL, /* base_init */
- NULL, /* base_finalize */
- (GClassInitFunc) SPObjectGroupClass::sp_objectgroup_class_init,
- NULL, /* class_finalize */
- NULL, /* class_data */
- sizeof(SPObjectGroup),
- 16, /* n_preallocs */
- (GInstanceInitFunc) init,
- NULL, /* value_table */
- };
- objectgroup_type = g_type_register_static(SP_TYPE_OBJECT, "SPObjectGroup", &objectgroup_info, (GTypeFlags)0);
- }
- return objectgroup_type;
-}
+static void sp_objectgroup_remove_child(SPObject *object,
+ Inkscape::XML::Node *child);
-void SPObjectGroupClass::sp_objectgroup_class_init(SPObjectGroupClass *klass)
-{
- //GObjectClass * object_class = (GObjectClass *) klass;
- SPObjectClass * sp_object_class = (SPObjectClass *) klass;
+static void sp_objectgroup_order_changed(SPObject *object,
+ Inkscape::XML::Node *child,
+ Inkscape::XML::Node *old_ref,
+ Inkscape::XML::Node *new_ref);
- static_parent_class = (SPObjectClass *)g_type_class_ref(SP_TYPE_OBJECT);
+static Inkscape::XML::Node* sp_objectgroup_write(SPObject *object,
+ Inkscape::XML::Document *doc,
+ Inkscape::XML::Node *repr,
+ guint flags);
+
+G_DEFINE_TYPE(SPObjectGroup, sp_objectgroup, SP_TYPE_OBJECT);
+
+static void
+sp_objectgroup_class_init(SPObjectGroupClass *klass)
+{
+ SPObjectClass * sp_object_class = SP_OBJECT_CLASS(klass);
- sp_object_class->child_added = SPObjectGroup::childAdded;
- sp_object_class->remove_child = SPObjectGroup::removeChild;
- sp_object_class->order_changed = SPObjectGroup::orderChanged;
- sp_object_class->write = SPObjectGroup::write;
+ sp_object_class->child_added = sp_objectgroup_child_added;
+ sp_object_class->remove_child = sp_objectgroup_remove_child;
+ sp_object_class->order_changed = sp_objectgroup_order_changed;
+ sp_object_class->write = sp_objectgroup_write;
}
-void SPObjectGroup::init(SPObjectGroup * /*objectgroup*/)
+static void
+sp_objectgroup_init(SPObjectGroup * /*objectgroup*/)
{
}
-void SPObjectGroup::childAdded(SPObject *object, Inkscape::XML::Node *child, Inkscape::XML::Node *ref)
+static void
+sp_objectgroup_child_added(SPObject *object,
+ Inkscape::XML::Node *child,
+ Inkscape::XML::Node *ref)
{
- if (((SPObjectClass *) (SPObjectGroupClass::static_parent_class))->child_added) {
- (* ((SPObjectClass *) (SPObjectGroupClass::static_parent_class))->child_added)(object, child, ref);
+ if ((SP_OBJECT_CLASS(sp_objectgroup_parent_class))->child_added) {
+ (* (SP_OBJECT_CLASS(sp_objectgroup_parent_class))->child_added)(object, child, ref);
}
object->requestModified(SP_OBJECT_MODIFIED_FLAG);
}
-void SPObjectGroup::removeChild(SPObject *object, Inkscape::XML::Node *child)
+static void
+sp_objectgroup_remove_child(SPObject *object,
+ Inkscape::XML::Node *child)
{
- if (((SPObjectClass *) (SPObjectGroupClass::static_parent_class))->remove_child) {
- (* ((SPObjectClass *) (SPObjectGroupClass::static_parent_class))->remove_child)(object, child);
+ if ((SP_OBJECT_CLASS(sp_objectgroup_parent_class))->remove_child) {
+ (* (SP_OBJECT_CLASS(sp_objectgroup_parent_class))->remove_child)(object, child);
}
object->requestModified(SP_OBJECT_MODIFIED_FLAG);
}
-void SPObjectGroup::orderChanged(SPObject *object, Inkscape::XML::Node *child, Inkscape::XML::Node *old_ref, Inkscape::XML::Node *new_ref)
+static void
+sp_objectgroup_order_changed(SPObject *object,
+ Inkscape::XML::Node *child,
+ Inkscape::XML::Node *old_ref,
+ Inkscape::XML::Node *new_ref)
{
- if (((SPObjectClass *) (SPObjectGroupClass::static_parent_class))->order_changed) {
- (* ((SPObjectClass *) (SPObjectGroupClass::static_parent_class))->order_changed)(object, child, old_ref, new_ref);
+ if ((SP_OBJECT_CLASS(sp_objectgroup_parent_class))->order_changed) {
+ (* (SP_OBJECT_CLASS(sp_objectgroup_parent_class))->order_changed)(object, child, old_ref, new_ref);
}
object->requestModified(SP_OBJECT_MODIFIED_FLAG);
}
-Inkscape::XML::Node *SPObjectGroup::write(SPObject *object, Inkscape::XML::Document *xml_doc, Inkscape::XML::Node *repr, guint flags)
+static Inkscape::XML::Node*
+sp_objectgroup_write(SPObject *object,
+ Inkscape::XML::Document *xml_doc,
+ Inkscape::XML::Node *repr,
+ guint flags)
{
SP_OBJECTGROUP(object); // Ensure we have the right type of SPObject
@@ -99,8 +107,8 @@ Inkscape::XML::Node *SPObjectGroup::write(SPObject *object, Inkscape::XML::Docum
}
}
while (l) {
- repr->addChild((Inkscape::XML::Node *) l->data, NULL);
- Inkscape::GC::release((Inkscape::XML::Node *) l->data);
+ repr->addChild(static_cast<Inkscape::XML::Node *>(l->data), NULL);
+ Inkscape::GC::release(static_cast<Inkscape::XML::Node *>(l->data));
l = g_slist_remove(l, l->data);
}
} else {
@@ -109,8 +117,8 @@ Inkscape::XML::Node *SPObjectGroup::write(SPObject *object, Inkscape::XML::Docum
}
}
- if (((SPObjectClass *) (SPObjectGroupClass::static_parent_class))->write) {
- ((SPObjectClass *) (SPObjectGroupClass::static_parent_class))->write(object, xml_doc, repr, flags);
+ if ((SP_OBJECT_CLASS(sp_objectgroup_parent_class))->write) {
+ (SP_OBJECT_CLASS(sp_objectgroup_parent_class))->write(object, xml_doc, repr, flags);
}
return repr;
diff --git a/src/sp-object-group.h b/src/sp-object-group.h
index a666a316a..88e0e0f4e 100644
--- a/src/sp-object-group.h
+++ b/src/sp-object-group.h
@@ -16,25 +16,17 @@
#include "sp-object.h"
-#define SP_TYPE_OBJECTGROUP (SPObjectGroup::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_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))
-class SPObjectGroup : public SPObject {
-public:
- static GType sp_objectgroup_get_type(void);
+GType sp_objectgroup_get_type() G_GNUC_CONST;
+class SPObjectGroup : public SPObject {
private:
- static void init(SPObjectGroup *objectgroup);
-
- static void childAdded(SPObject * object, Inkscape::XML::Node * child, Inkscape::XML::Node * ref);
- static void removeChild(SPObject * object, Inkscape::XML::Node * child);
- static void orderChanged(SPObject * object, Inkscape::XML::Node * child, Inkscape::XML::Node * old_ref, Inkscape::XML::Node * new_ref);
- static Inkscape::XML::Node *write(SPObject *object, Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, guint flags);
-
- friend class SPObjectGroupClass;
+ friend class SPObjectGroupClass;
};
class SPObjectGroupClass {
@@ -42,9 +34,6 @@ public:
SPObjectClass parent_class;
private:
- static void sp_objectgroup_class_init(SPObjectGroupClass *klass);
- static SPObjectClass *static_parent_class;
-
friend class SPObjectGroup;
};
diff --git a/src/sp-object.cpp b/src/sp-object.cpp
index 2cf28137a..4d2a5a709 100644
--- a/src/sp-object.cpp
+++ b/src/sp-object.cpp
@@ -101,48 +101,63 @@ public:
}
};
+static void sp_object_child_added(SPObject *object,
+ Inkscape::XML::Node *child,
+ Inkscape::XML::Node *ref);
-GObjectClass * SPObjectClass::static_parent_class = 0;
+static void sp_object_finalize(GObject *object);
-GType SPObject::get_type()
-{
- static GType type = 0;
- if (!type) {
- GTypeInfo info = {
- sizeof(SPObjectClass),
- NULL, NULL,
- (GClassInitFunc) SPObjectClass::init,
- NULL, NULL,
- sizeof(SPObject),
- 16,
- (GInstanceInitFunc)init,
- NULL
- };
- type = g_type_register_static(G_TYPE_OBJECT, "SPObject", &info, (GTypeFlags)0);
- }
- return type;
-}
-
-void SPObjectClass::init(SPObjectClass *klass)
-{
- GObjectClass *object_class;
+static void sp_object_remove_child(SPObject *object,
+ Inkscape::XML::Node *child);
+
+static void sp_object_order_changed(SPObject *object,
+ Inkscape::XML::Node *child,
+ Inkscape::XML::Node *old_ref,
+ Inkscape::XML::Node *new_ref);
- object_class = (GObjectClass *) klass;
+static void sp_object_release(SPObject *object);
+static void sp_object_build(SPObject *object,
+ SPDocument *document,
+ Inkscape::XML::Node *repr);
- static_parent_class = (GObjectClass *) g_type_class_ref(G_TYPE_OBJECT);
+static void sp_object_private_set(SPObject *object,
+ unsigned int key,
+ gchar const *value);
- object_class->finalize = SPObject::finalize;
+static Inkscape::XML::Node *sp_object_private_write(SPObject *object,
+ Inkscape::XML::Document *doc,
+ Inkscape::XML::Node *repr,
+ guint flags);
+
+static gchar *sp_object_get_unique_id(SPObject *object,
+ gchar const *defid);
+
+G_DEFINE_TYPE(SPObject, sp_object, G_TYPE_OBJECT);
+
+/**
+ * Initializes the SPObject vtable.
+ */
+static void
+sp_object_class_init(SPObjectClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS(klass);
+
+ object_class->finalize = sp_object_finalize;
- klass->child_added = SPObject::child_added;
- klass->remove_child = SPObject::remove_child;
- klass->order_changed = SPObject::order_changed;
- klass->release = SPObject::release;
- klass->build = SPObject::build;
- klass->set = SPObject::private_set;
- klass->write = SPObject::private_write;
+ klass->child_added = sp_object_child_added;
+ klass->remove_child = sp_object_remove_child;
+ klass->order_changed = sp_object_order_changed;
+ klass->release = sp_object_release;
+ klass->build = sp_object_build;
+ klass->set = sp_object_private_set;
+ klass->write = sp_object_private_write;
}
-void SPObject::init(SPObject *object)
+/**
+ * Callback to initialize the SPObject object.
+ */
+static void
+sp_object_init(SPObject *object)
{
debug("id=%x, typename=%s",object, g_type_name_from_instance((GTypeInstance*)object));
@@ -175,7 +190,11 @@ void SPObject::init(SPObject *object)
object->_default_label = NULL;
}
-void SPObject::finalize(GObject *object)
+/**
+ * Callback to destroy all members and connections of object and itself.
+ */
+static void
+sp_object_finalize(GObject *object)
{
SPObject *spobject = (SPObject *)object;
@@ -194,8 +213,8 @@ void SPObject::finalize(GObject *object)
spobject->_delete_signal.~signal();
spobject->_position_changed_signal.~signal();
- if (((GObjectClass *) (SPObjectClass::static_parent_class))->finalize) {
- (* ((GObjectClass *) (SPObjectClass::static_parent_class))->finalize)(object);
+ if (((GObjectClass *) (sp_object_parent_class))->finalize) {
+ (* ((GObjectClass *) (sp_object_parent_class))->finalize)(object);
}
}
@@ -613,7 +632,14 @@ SPObject *SPObject::get_child_by_repr(Inkscape::XML::Node *repr)
return result;
}
-void SPObject::child_added(SPObject *object, Inkscape::XML::Node *child, Inkscape::XML::Node *ref)
+/**
+ * Callback for child_added event.
+ * Invoked whenever the given mutation event happens in the XML tree.
+ */
+static void
+sp_object_child_added(SPObject *object,
+ Inkscape::XML::Node *child,
+ Inkscape::XML::Node *ref)
{
GType type = sp_repr_type_lookup(child);
if (!type) {
@@ -627,7 +653,19 @@ void SPObject::child_added(SPObject *object, Inkscape::XML::Node *child, Inkscap
ochild->invoke_build(object->document, child, object->cloned);
}
-void SPObject::release(SPObject *object)
+/**
+ * Removes, releases and unrefs all children of object.
+ *
+ * This is the opposite of build. It has to be invoked as soon as the
+ * object is removed from the tree, even if it is still alive according
+ * to reference count. The frontend unregisters the object from the
+ * document and releases the SPRepr bindings; implementations should free
+ * state data and release all child objects. Invoking release on
+ * SPRoot destroys the whole document tree.
+ * @see sp_object_build()
+ */
+static void
+sp_object_release(SPObject *object)
{
debug("id=%x, typename=%s", object, g_type_name_from_instance((GTypeInstance*)object));
while (object->children) {
@@ -635,7 +673,17 @@ void SPObject::release(SPObject *object)
}
}
-void SPObject::remove_child(SPObject *object, Inkscape::XML::Node *child)
+/**
+ * Remove object's child whose node equals repr, release and
+ * unref it.
+ *
+ * Invoked whenever the given mutation event happens in the XML
+ * tree, BEFORE removal from the XML tree happens, so grouping
+ * objects can safely release the child data.
+ */
+static void
+sp_object_remove_child(SPObject *object,
+ Inkscape::XML::Node *child)
{
debug("id=%x, typename=%s", object, g_type_name_from_instance((GTypeInstance*)object));
SPObject *ochild = object->get_child_by_repr(child);
@@ -645,8 +693,17 @@ void SPObject::remove_child(SPObject *object, Inkscape::XML::Node *child)
}
}
-void SPObject::order_changed(SPObject *object, Inkscape::XML::Node *child, Inkscape::XML::Node * /*old_ref*/,
- Inkscape::XML::Node *new_ref)
+/**
+ * Move object corresponding to child after sibling object corresponding
+ * to new_ref.
+ * Invoked whenever the given mutation event happens in the XML tree.
+ * @param old_ref Ignored
+ */
+static void
+sp_object_order_changed(SPObject *object,
+ Inkscape::XML::Node *child,
+ Inkscape::XML::Node * /*old_ref*/,
+ Inkscape::XML::Node *new_ref)
{
SPObject *ochild = object->get_child_by_repr(child);
g_return_if_fail(ochild != NULL);
@@ -655,7 +712,21 @@ void SPObject::order_changed(SPObject *object, Inkscape::XML::Node *child, Inksc
ochild->_position_changed_signal.emit(ochild);
}
-void SPObject::build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr)
+/**
+ * Virtual build callback.
+ *
+ * This has to be invoked immediately after creation of an SPObject. The
+ * frontend method ensures that the new object is properly attached to
+ * the document and repr; implementation then will parse all of the attributes,
+ * generate the children objects and so on. Invoking build on the SPRoot
+ * object results in creation of the whole document tree (this is, what
+ * SPDocument does after the creation of the XML tree).
+ * @see release()
+ */
+static void
+sp_object_build(SPObject *object,
+ SPDocument *document,
+ Inkscape::XML::Node *repr)
{
/* Nothing specific here */
debug("id=%x, typename=%s", object, g_type_name_from_instance((GTypeInstance*)object));
@@ -706,7 +777,7 @@ void SPObject::invoke_build(SPDocument *document, Inkscape::XML::Node *repr, uns
gchar const *id = this->repr->attribute("id");
if (!document->isSeeking()) {
{
- gchar *realid = get_unique_id(this, id);
+ gchar *realid = sp_object_get_unique_id(this, id);
g_assert(realid != NULL);
this->document->bindObjectToId(realid, this);
@@ -844,7 +915,12 @@ void SPObject::repr_order_changed(Inkscape::XML::Node * /*repr*/, Inkscape::XML:
}
}
-void SPObject::private_set(SPObject *object, unsigned int key, gchar const *value)
+/**
+ * Callback for set event.
+ */
+static void sp_object_private_set(SPObject *object,
+ unsigned int key,
+ gchar const *value)
{
g_assert(key != SP_ATTR_INVALID);
@@ -866,7 +942,7 @@ void SPObject::private_set(SPObject *object, unsigned int key, gchar const *valu
if (!document->isSeeking()) {
sp_object_ref(conflict, NULL);
// give the conflicting object a new ID
- gchar *new_conflict_id = get_unique_id(conflict, NULL);
+ gchar *new_conflict_id = sp_object_get_unique_id(conflict, NULL);
conflict->getRepr()->setAttribute("id", new_conflict_id);
g_free(new_conflict_id);
sp_object_unref(conflict, NULL);
@@ -994,7 +1070,14 @@ static gchar const *sp_xml_get_space_string(unsigned int space)
}
}
-Inkscape::XML::Node * SPObject::private_write(SPObject *object, Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, guint flags)
+/**
+ * Callback for write event.
+ */
+static Inkscape::XML::Node*
+sp_object_private_write(SPObject *object,
+ Inkscape::XML::Document *doc,
+ Inkscape::XML::Node *repr,
+ guint flags)
{
if (!repr && (flags & SP_OBJECT_WRITE_BUILD)) {
repr = object->getRepr()->duplicate(doc);
@@ -1297,9 +1380,10 @@ bool SPObject::storeAsDouble( gchar const *key, double *val ) const
return sp_repr_get_double(((Inkscape::XML::Node *)(this->getRepr())),key,val);
}
-/* Helper */
-
-gchar * SPObject::get_unique_id(SPObject *object, gchar const *id)
+/** Helper */
+static gchar*
+sp_object_get_unique_id(SPObject *object,
+ gchar const *id)
{
static unsigned long count = 0;
diff --git a/src/sp-object.h b/src/sp-object.h
index 0c4429a74..296b9d9e9 100644
--- a/src/sp-object.h
+++ b/src/sp-object.h
@@ -18,7 +18,7 @@
class SPObject;
class SPObjectClass;
-#define SP_TYPE_OBJECT (SPObject::get_type ())
+#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))
@@ -122,6 +122,7 @@ struct SPIXmlSpace {
guint value : 1;
};
+GType sp_object_get_type() G_GNUC_CONST;
/*
* Refcounting
@@ -796,78 +797,6 @@ private:
*/
GString * textualContent() const;
- /**
- * Callback to initialize the SPObject object.
- */
- static void init(SPObject *object);
-
- /**
- * Callback to destroy all members and connections of object and itself.
- */
- static void finalize(GObject *object);
-
- /**
- * Callback for child_added event.
- * Invoked whenever the given mutation event happens in the XML tree.
- */
- static void child_added(SPObject *object, Inkscape::XML::Node *child, Inkscape::XML::Node *ref);
-
- /**
- * Remove object's child whose node equals repr, release and
- * unref it.
- *
- * Invoked whenever the given mutation event happens in the XML
- * tree, BEFORE removal from the XML tree happens, so grouping
- * objects can safely release the child data.
- */
- static void remove_child(SPObject *object, Inkscape::XML::Node *child);
-
- /**
- * Move object corresponding to child after sibling object corresponding
- * to new_ref.
- * Invoked whenever the given mutation event happens in the XML tree.
- * @param old_ref Ignored
- */
- static void order_changed(SPObject *object, Inkscape::XML::Node *child, Inkscape::XML::Node *old_ref, Inkscape::XML::Node *new_ref);
-
- /**
- * Removes, releases and unrefs all children of object.
- *
- * This is the opposite of build. It has to be invoked as soon as the
- * object is removed from the tree, even if it is still alive according
- * to reference count. The frontend unregisters the object from the
- * document and releases the SPRepr bindings; implementations should free
- * state data and release all child objects. Invoking release on
- * SPRoot destroys the whole document tree.
- * @see build()
- */
- static void release(SPObject *object);
-
- /**
- * Virtual build callback.
- *
- * This has to be invoked immediately after creation of an SPObject. The
- * frontend method ensures that the new object is properly attached to
- * the document and repr; implementation then will parse all of the attributes,
- * generate the children objects and so on. Invoking build on the SPRoot
- * object results in creation of the whole document tree (this is, what
- * SPDocument does after the creation of the XML tree).
- * @see release()
- */
- static void build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr);
-
- /**
- * Callback for set event.
- */
- static void private_set(SPObject *object, unsigned int key, gchar const *value);
-
- /**
- * Callback for write event.
- */
- static Inkscape::XML::Node *private_write(SPObject *object, Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, guint flags);
-
- static gchar *get_unique_id(SPObject *object, gchar const *defid);
-
/* Real handlers of repr signals */
public:
@@ -935,13 +864,6 @@ public:
Inkscape::XML::Node * (* write) (SPObject *object, Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, unsigned int flags);
private:
- static GObjectClass *static_parent_class;
-
- /**
- * Initializes the SPObject vtable.
- */
- static void init(SPObjectClass *klass);
-
friend class SPObject;
};
diff --git a/src/sp-rect.cpp b/src/sp-rect.cpp
index f33d234ee..e7e1432c2 100644
--- a/src/sp-rect.cpp
+++ b/src/sp-rect.cpp
@@ -31,9 +31,6 @@
#define noRECT_VERBOSE
-static void sp_rect_class_init(SPRectClass *klass);
-static void sp_rect_init(SPRect *rect);
-
static void sp_rect_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr);
static void sp_rect_set(SPObject *object, unsigned key, gchar const *value);
static void sp_rect_update(SPObject *object, SPCtx *ctx, guint flags);
@@ -46,30 +43,7 @@ static void sp_rect_convert_to_guides(SPItem *item);
static void sp_rect_set_shape(SPShape *shape);
static void sp_rect_snappoints(SPItem const *item, std::vector<Inkscape::SnapCandidatePoint> &p, Inkscape::SnapPreferences const *snapprefs);
-static SPShapeClass *parent_class;
-
-GType
-sp_rect_get_type(void)
-{
- static GType type = 0;
-
- if (!type) {
- GTypeInfo info = {
- sizeof(SPRectClass),
- NULL, /* base_init */
- NULL, /* base_finalize */
- (GClassInitFunc) sp_rect_class_init,
- NULL, /* class_finalize */
- NULL, /* class_data */
- sizeof(SPRect),
- 16, /* n_preallocs */
- (GInstanceInitFunc) sp_rect_init,
- NULL, /* value_table */
- };
- type = g_type_register_static(SP_TYPE_SHAPE, "SPRect", &info, (GTypeFlags)0);
- }
- return type;
-}
+G_DEFINE_TYPE(SPRect, sp_rect, SP_TYPE_SHAPE);
static void
sp_rect_class_init(SPRectClass *klass)
@@ -78,8 +52,6 @@ sp_rect_class_init(SPRectClass *klass)
SPItemClass *item_class = (SPItemClass *) klass;
SPShapeClass *shape_class = (SPShapeClass *) klass;
- parent_class = (SPShapeClass *)g_type_class_ref(SP_TYPE_SHAPE);
-
sp_object_class->build = sp_rect_build;
sp_object_class->write = sp_rect_write;
sp_object_class->set = sp_rect_set;
@@ -108,8 +80,8 @@ sp_rect_init(SPRect */*rect*/)
static void
sp_rect_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr)
{
- if (((SPObjectClass *) parent_class)->build)
- ((SPObjectClass *) parent_class)->build(object, document, repr);
+ if ((SP_OBJECT_CLASS(sp_rect_parent_class))->build)
+ (SP_OBJECT_CLASS(sp_rect_parent_class))->build(object, document, repr);
object->readAttr( "x" );
object->readAttr( "y" );
@@ -160,8 +132,8 @@ sp_rect_set(SPObject *object, unsigned key, gchar const *value)
object->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG);
break;
default:
- if (((SPObjectClass *) parent_class)->set)
- ((SPObjectClass *) parent_class)->set(object, key, value);
+ if ((SP_OBJECT_CLASS(sp_rect_parent_class))->set)
+ (SP_OBJECT_CLASS(sp_rect_parent_class))->set(object, key, value);
break;
}
}
@@ -187,8 +159,8 @@ sp_rect_update(SPObject *object, SPCtx *ctx, guint flags)
flags &= ~SP_OBJECT_USER_MODIFIED_FLAG_B; // since we change the description, it's not a "just translation" anymore
}
- if (((SPObjectClass *) parent_class)->update)
- ((SPObjectClass *) parent_class)->update(object, ctx, flags);
+ if ((SP_OBJECT_CLASS(sp_rect_parent_class))->update)
+ (SP_OBJECT_CLASS(sp_rect_parent_class))->update(object, ctx, flags);
}
static Inkscape::XML::Node *
@@ -209,8 +181,8 @@ sp_rect_write(SPObject *object, Inkscape::XML::Document *xml_doc, Inkscape::XML:
sp_rect_set_shape ((SPShape *) rect); // evaluate SPCurve
- if (((SPObjectClass *) parent_class)->write)
- ((SPObjectClass *) parent_class)->write(object, xml_doc, repr, flags);
+ if ((SP_OBJECT_CLASS(sp_rect_parent_class))->write)
+ (SP_OBJECT_CLASS(sp_rect_parent_class))->write(object, xml_doc, repr, flags);
return repr;
}
diff --git a/src/sp-rect.h b/src/sp-rect.h
index 7bc85dd8a..5e518dcd7 100644
--- a/src/sp-rect.h
+++ b/src/sp-rect.h
@@ -18,7 +18,7 @@
#include "sp-shape.h"
#include <2geom/forward.h>
-
+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))
@@ -44,7 +44,7 @@ struct SPRectClass {
/* Standard GType function */
-GType sp_rect_get_type (void);
+GType sp_rect_get_type (void) G_GNUC_CONST;
void sp_rect_position_set (SPRect * rect, gdouble x, gdouble y, gdouble width, gdouble height);
@@ -65,6 +65,8 @@ gdouble sp_rect_get_visible_height (SPRect *rect);
void sp_rect_compensate_rxry (SPRect *rect, Geom::Affine xform);
+G_END_DECLS
+
#endif // SEEN_SP_RECT_H
/*
diff --git a/src/sp-switch.cpp b/src/sp-switch.cpp
index 500e43c9c..be9866e16 100644
--- a/src/sp-switch.cpp
+++ b/src/sp-switch.cpp
@@ -25,35 +25,11 @@
#include <sigc++/functors/ptr_fun.h>
#include <sigc++/adaptors/bind.h>
-static void sp_switch_class_init (SPSwitchClass *klass);
-static void sp_switch_init (SPSwitch *group);
-
-static SPGroupClass * parent_class;
-
-GType CSwitch::getType (void)
-{
- static GType switch_type = 0;
- if (!switch_type) {
- GTypeInfo switch_info = {
- sizeof (SPSwitchClass),
- NULL, /* base_init */
- NULL, /* base_finalize */
- (GClassInitFunc) sp_switch_class_init,
- NULL, /* class_finalize */
- NULL, /* class_data */
- sizeof (SPSwitch),
- 16, /* n_preallocs */
- (GInstanceInitFunc) sp_switch_init,
- NULL, /* value_table */
- };
- switch_type = g_type_register_static (SP_TYPE_GROUP, "SPSwitch", &switch_info, (GTypeFlags)0);
- }
- return switch_type;
-}
+G_DEFINE_TYPE(SPSwitch, sp_switch, SP_TYPE_GROUP);
static void
-sp_switch_class_init (SPSwitchClass *) {
- parent_class = (SPGroupClass *)g_type_class_ref (SP_TYPE_GROUP);
+sp_switch_class_init (SPSwitchClass *)
+{
}
static void sp_switch_init (SPSwitch *group)
diff --git a/src/sp-switch.h b/src/sp-switch.h
index c2c98e3b3..f0442f27b 100644
--- a/src/sp-switch.h
+++ b/src/sp-switch.h
@@ -17,12 +17,16 @@
#include <stddef.h>
#include <sigc++/connection.h>
-#define SP_TYPE_SWITCH (CSwitch::getType())
+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))
+GType sp_switch_get_type() G_GNUC_CONST;
+
/*
* Virtual methods of SPSwitch
*/
@@ -32,8 +36,6 @@ public:
virtual ~CSwitch();
friend class SPSwitch;
-
- static GType getType();
virtual void onChildAdded(Inkscape::XML::Node *child);
virtual void onChildRemoved(Inkscape::XML::Node *child);
@@ -61,4 +63,6 @@ struct SPSwitch : public SPGroup {
struct SPSwitchClass : public SPGroupClass {
};
+G_END_DECLS
+
#endif
diff --git a/src/sp-text.cpp b/src/sp-text.cpp
index 0b60c1960..1b4246483 100644
--- a/src/sp-text.cpp
+++ b/src/sp-text.cpp
@@ -62,8 +62,6 @@
# SPTEXT
#####################################################*/
-static void sp_text_class_init (SPTextClass *classname);
-static void sp_text_init (SPText *text);
static void sp_text_release (SPObject *object);
static void sp_text_build (SPObject *object, SPDocument *document, Inkscape::XML::Node *repr);
@@ -82,29 +80,7 @@ static void sp_text_snappoints(SPItem const *item, std::vector<Inkscape::SnapCan
static Geom::Affine sp_text_set_transform(SPItem *item, Geom::Affine const &xform);
static void sp_text_print (SPItem *item, SPPrintContext *gpc);
-static SPItemClass *text_parent_class;
-
-GType
-sp_text_get_type ()
-{
- static GType type = 0;
- if (!type) {
- GTypeInfo info = {
- sizeof (SPTextClass),
- NULL, /* base_init */
- NULL, /* base_finalize */
- (GClassInitFunc) sp_text_class_init,
- NULL, /* class_finalize */
- NULL, /* class_data */
- sizeof (SPText),
- 16, /* n_preallocs */
- (GInstanceInitFunc) sp_text_init,
- NULL, /* value_table */
- };
- type = g_type_register_static (SP_TYPE_ITEM, "SPText", &info, (GTypeFlags)0);
- }
- return type;
-}
+G_DEFINE_TYPE(SPText, sp_text, SP_TYPE_ITEM);
static void
sp_text_class_init (SPTextClass *classname)
@@ -112,8 +88,6 @@ sp_text_class_init (SPTextClass *classname)
SPObjectClass *sp_object_class = (SPObjectClass *) classname;
SPItemClass *item_class = (SPItemClass *) classname;
- text_parent_class = (SPItemClass*)g_type_class_ref (SP_TYPE_ITEM);
-
sp_object_class->release = sp_text_release;
sp_object_class->build = sp_text_build;
sp_object_class->set = sp_text_set;
@@ -146,8 +120,8 @@ sp_text_release (SPObject *object)
text->attributes.~TextTagAttributes();
text->layout.~Layout();
- if (((SPObjectClass *) text_parent_class)->release)
- ((SPObjectClass *) text_parent_class)->release(object);
+ if ((SP_OBJECT_CLASS(sp_text_parent_class))->release)
+ (SP_OBJECT_CLASS(sp_text_parent_class))->release(object);
}
static void
@@ -159,8 +133,8 @@ sp_text_build (SPObject *object, SPDocument *doc, Inkscape::XML::Node *repr)
object->readAttr( "dy" );
object->readAttr( "rotate" );
- if (((SPObjectClass *) text_parent_class)->build)
- ((SPObjectClass *) text_parent_class)->build(object, doc, repr);
+ if ((SP_OBJECT_CLASS(sp_text_parent_class))->build)
+ (SP_OBJECT_CLASS(sp_text_parent_class))->build(object, doc, repr);
object->readAttr( "sodipodi:linespacing" ); // has to happen after the styles are read
}
@@ -186,8 +160,8 @@ sp_text_set(SPObject *object, unsigned key, gchar const *value)
object->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG | SP_TEXT_LAYOUT_MODIFIED_FLAG);
break;
default:
- if (((SPObjectClass *) text_parent_class)->set)
- ((SPObjectClass *) text_parent_class)->set (object, key, value);
+ if ((SP_OBJECT_CLASS(sp_text_parent_class))->set)
+ (SP_OBJECT_CLASS(sp_text_parent_class))->set (object, key, value);
break;
}
}
@@ -198,8 +172,8 @@ sp_text_child_added (SPObject *object, Inkscape::XML::Node *rch, Inkscape::XML::
{
SPText *text = SP_TEXT (object);
- if (((SPObjectClass *) text_parent_class)->child_added)
- ((SPObjectClass *) text_parent_class)->child_added (object, rch, ref);
+ if ((SP_OBJECT_CLASS(sp_text_parent_class))->child_added)
+ (SP_OBJECT_CLASS(sp_text_parent_class))->child_added (object, rch, ref);
text->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG | SP_TEXT_CONTENT_MODIFIED_FLAG | SP_TEXT_LAYOUT_MODIFIED_FLAG);
}
@@ -209,8 +183,8 @@ sp_text_remove_child (SPObject *object, Inkscape::XML::Node *rch)
{
SPText *text = SP_TEXT (object);
- if (((SPObjectClass *) text_parent_class)->remove_child)
- ((SPObjectClass *) text_parent_class)->remove_child (object, rch);
+ if ((SP_OBJECT_CLASS(sp_text_parent_class))->remove_child)
+ (SP_OBJECT_CLASS(sp_text_parent_class))->remove_child (object, rch);
text->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG | SP_TEXT_CONTENT_MODIFIED_FLAG | SP_TEXT_LAYOUT_MODIFIED_FLAG);
}
@@ -219,8 +193,8 @@ static void sp_text_update(SPObject *object, SPCtx *ctx, guint flags)
{
SPText *text = SP_TEXT (object);
- if (((SPObjectClass *) text_parent_class)->update)
- ((SPObjectClass *) text_parent_class)->update (object, ctx, flags);
+ if ((SP_OBJECT_CLASS(sp_text_parent_class))->update)
+ (SP_OBJECT_CLASS(sp_text_parent_class))->update (object, ctx, flags);
guint cflags = (flags & SP_OBJECT_MODIFIED_CASCADE);
if (flags & SP_OBJECT_MODIFIED_FLAG) cflags |= SP_OBJECT_PARENT_MODIFIED_FLAG;
@@ -264,8 +238,8 @@ static void sp_text_update(SPObject *object, SPCtx *ctx, guint flags)
static void sp_text_modified(SPObject *object, guint flags)
{
- if (((SPObjectClass *) text_parent_class)->modified) {
- ((SPObjectClass *) text_parent_class)->modified (object, flags);
+ if ((SP_OBJECT_CLASS(sp_text_parent_class))->modified) {
+ (SP_OBJECT_CLASS(sp_text_parent_class))->modified (object, flags);
}
guint cflags = (flags & SP_OBJECT_MODIFIED_CASCADE);
@@ -357,8 +331,8 @@ static Inkscape::XML::Node *sp_text_write(SPObject *object, Inkscape::XML::Docum
text->getRepr()->setAttribute("sodipodi:linespacing", NULL);
}
- if (((SPObjectClass *) (text_parent_class))->write) {
- ((SPObjectClass *) (text_parent_class))->write (object, xml_doc, repr, flags);
+ if ((SP_OBJECT_CLASS(sp_text_parent_class))->write) {
+ (SP_OBJECT_CLASS(sp_text_parent_class))->write (object, xml_doc, repr, flags);
}
return repr;
@@ -396,8 +370,8 @@ sp_text_show(SPItem *item, Inkscape::Drawing &drawing, unsigned /* key*/, unsign
static void
sp_text_hide(SPItem *item, unsigned key)
{
- if (((SPItemClass *) text_parent_class)->hide)
- ((SPItemClass *) text_parent_class)->hide (item, key);
+ if ((SP_ITEM_CLASS(sp_text_parent_class))->hide)
+ (SP_ITEM_CLASS(sp_text_parent_class))->hide (item, key);
}
static char * sp_text_description(SPItem *item)