summaryrefslogtreecommitdiffstats
path: root/src/sp-string.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/sp-string.cpp')
-rw-r--r--src/sp-string.cpp55
1 files changed, 43 insertions, 12 deletions
diff --git a/src/sp-string.cpp b/src/sp-string.cpp
index 3512aa45a..45bf98ea6 100644
--- a/src/sp-string.cpp
+++ b/src/sp-string.cpp
@@ -84,35 +84,53 @@ sp_string_class_init(SPStringClass *classname)
sp_object_class->update = sp_string_update;
}
+CString::CString(SPString* str) : CObject(str) {
+ this->spstring = str;
+}
+
+CString::~CString() {
+}
+
static void
sp_string_init(SPString *string)
{
+ string->cstring = new CString(string);
+ string->cobject = string->cstring;
+
new (&string->string) Glib::ustring();
}
-static void
-sp_string_build(SPObject *object, SPDocument *doc, Inkscape::XML::Node *repr)
-{
+void CString::onBuild(SPDocument *doc, Inkscape::XML::Node *repr) {
+ SPString* object = this->spstring;
sp_string_read_content(object);
- if (((SPObjectClass *) string_parent_class)->build)
- ((SPObjectClass *) string_parent_class)->build(object, doc, repr);
+ CObject::onBuild(doc, repr);
}
static void
-sp_string_release(SPObject *object)
+sp_string_build(SPObject *object, SPDocument *doc, Inkscape::XML::Node *repr)
{
+ ((SPString*)object)->cstring->onBuild(doc, repr);
+}
+
+void CString::onRelease() {
+ SPString* object = this->spstring;
SPString *string = SP_STRING(object);
string->string.~ustring();
- if (((SPObjectClass *) string_parent_class)->release)
- ((SPObjectClass *) string_parent_class)->release(object);
+ CObject::onRelease();
}
static void
-sp_string_read_content(SPObject *object)
+sp_string_release(SPObject *object)
{
+ ((SPString*)object)->cstring->onRelease();
+}
+
+void CString::onReadContent() {
+ SPString* object = this->spstring;
+
SPString *string = SP_STRING(object);
string->string.clear();
@@ -154,10 +172,17 @@ sp_string_read_content(SPObject *object)
}
static void
-sp_string_update(SPObject *object, SPCtx *ctx, unsigned flags)
+sp_string_read_content(SPObject *object)
{
- if (((SPObjectClass *) string_parent_class)->update)
- ((SPObjectClass *) string_parent_class)->update(object, ctx, flags);
+ ((SPString*)object)->cstring->onReadContent();
+}
+
+void CString::onUpdate(SPCtx *ctx, unsigned flags) {
+ // CPPIFY: This doesn't make no sense.
+ // CObject::onUpdate is pure. What was the idea behind these lines?
+// if (((SPObjectClass *) string_parent_class)->update)
+// ((SPObjectClass *) string_parent_class)->update(object, ctx, flags);
+// CObject::onUpdate(ctx, flags);
if (flags & (SP_OBJECT_STYLE_MODIFIED_FLAG | SP_OBJECT_MODIFIED_FLAG)) {
/* Parent style or we ourselves changed, so recalculate */
@@ -165,6 +190,12 @@ sp_string_update(SPObject *object, SPCtx *ctx, unsigned flags)
}
}
+static void
+sp_string_update(SPObject *object, SPCtx *ctx, unsigned flags)
+{
+ ((SPString*)object)->cstring->onUpdate(ctx, flags);
+}
+
/*
Local Variables: