diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/sp-string.cpp | 55 | ||||
| -rw-r--r-- | src/sp-string.h | 24 |
2 files changed, 66 insertions, 13 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: diff --git a/src/sp-string.h b/src/sp-string.h index 7242589c6..428e2c557 100644 --- a/src/sp-string.h +++ b/src/sp-string.h @@ -16,8 +16,12 @@ #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)) +class CString; + +class SPString : public SPObject { +public: + CString* cstring; -struct SPString : public SPObject { Glib::ustring string; }; @@ -25,6 +29,24 @@ struct SPStringClass { SPObjectClass parent_class; }; + +class CString : public CObject { +public: + CString(SPString* str); + virtual ~CString(); + + virtual void onBuild(SPDocument* doc, Inkscape::XML::Node* repr); + virtual void onRelease(); + + virtual void onReadContent(); + + virtual void onUpdate(SPCtx* ctx, unsigned int flags); + +protected: + SPString* spstring; +}; + + GType sp_string_get_type (); #endif |
