diff options
| author | Markus Engel <markus.engel@tum.de> | 2013-03-29 23:46:57 +0000 |
|---|---|---|
| committer | Markus Engel <markus.engel@tum.de> | 2013-03-29 23:46:57 +0000 |
| commit | 957c3e4b7909d42c5a13f1b1dd583f877fc32259 (patch) | |
| tree | bd7bba5a2b55bdc882bd9c35d12897a922ba900b /src/sp-glyph.cpp | |
| parent | Replaced calls to "pattern_new". (diff) | |
| download | inkscape-957c3e4b7909d42c5a13f1b1dd583f877fc32259.tar.gz inkscape-957c3e4b7909d42c5a13f1b1dd583f877fc32259.zip | |
Removed function pointers from SPObject and subclasses.
Added some missing virtual pads for classes that were hidden by preprocessor macros.
(bzr r11608.1.55)
Diffstat (limited to 'src/sp-glyph.cpp')
| -rw-r--r-- | src/sp-glyph.cpp | 334 |
1 files changed, 270 insertions, 64 deletions
diff --git a/src/sp-glyph.cpp b/src/sp-glyph.cpp index 15b718fd0..9905988f3 100644 --- a/src/sp-glyph.cpp +++ b/src/sp-glyph.cpp @@ -64,14 +64,24 @@ static void sp_glyph_class_init(SPGlyphClass *gc) parent_class = (SPObjectClass*)g_type_class_peek_parent(gc); //sp_object_class->build = sp_glyph_build; - sp_object_class->release = sp_glyph_release; - sp_object_class->set = sp_glyph_set; - sp_object_class->write = sp_glyph_write; - sp_object_class->update = sp_glyph_update; +// sp_object_class->release = sp_glyph_release; +// sp_object_class->set = sp_glyph_set; +// sp_object_class->write = sp_glyph_write; +// sp_object_class->update = sp_glyph_update; +} + +CGlyph::CGlyph(SPGlyph* glyph) : CObject(glyph) { + this->spglyph = glyph; +} + +CGlyph::~CGlyph() { } static void sp_glyph_init(SPGlyph *glyph) { + glyph->cglyph = new CGlyph(glyph); + glyph->cobject = glyph->cglyph; + //TODO: correct these values: new (&glyph->unicode) Glib::ustring(); @@ -86,32 +96,56 @@ static void sp_glyph_init(SPGlyph *glyph) glyph->vert_adv_y = 0; } -static void sp_glyph_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr) -{ -// if (((SPObjectClass *) (parent_class))->build) { -// ((SPObjectClass *) (parent_class))->build(object, document, repr); -// } - // CPPIFY: todo - - object->readAttr( "unicode" ); - object->readAttr( "glyph-name" ); - object->readAttr( "d" ); - object->readAttr( "orientation" ); - object->readAttr( "arabic-form" ); - object->readAttr( "lang" ); - object->readAttr( "horiz-adv-x" ); - object->readAttr( "vert-origin-x" ); - object->readAttr( "vert-origin-y" ); - object->readAttr( "vert-adv-y" ); +//static void sp_glyph_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr) +//{ +//// if (((SPObjectClass *) (parent_class))->build) { +//// ((SPObjectClass *) (parent_class))->build(object, document, repr); +//// } +// +// object->readAttr( "unicode" ); +// object->readAttr( "glyph-name" ); +// object->readAttr( "d" ); +// object->readAttr( "orientation" ); +// object->readAttr( "arabic-form" ); +// object->readAttr( "lang" ); +// object->readAttr( "horiz-adv-x" ); +// object->readAttr( "vert-origin-x" ); +// object->readAttr( "vert-origin-y" ); +// object->readAttr( "vert-adv-y" ); +//} + +void CGlyph::onBuild(SPDocument *document, Inkscape::XML::Node *repr) { + // if (((SPObjectClass *) (parent_class))->build) { + // ((SPObjectClass *) (parent_class))->build(object, document, repr); + // } + CObject::onBuild(document, repr); + + SPGlyph* object = this->spglyph; + + object->readAttr( "unicode" ); + object->readAttr( "glyph-name" ); + object->readAttr( "d" ); + object->readAttr( "orientation" ); + object->readAttr( "arabic-form" ); + object->readAttr( "lang" ); + object->readAttr( "horiz-adv-x" ); + object->readAttr( "vert-origin-x" ); + object->readAttr( "vert-origin-y" ); + object->readAttr( "vert-adv-y" ); } static void sp_glyph_release(SPObject *object) { //SPGlyph *glyph = SP_GLYPH(object); - if (((SPObjectClass *) parent_class)->release) { - ((SPObjectClass *) parent_class)->release(object); - } +// if (((SPObjectClass *) parent_class)->release) { +// ((SPObjectClass *) parent_class)->release(object); +// } + ((SPGlyph*)object)->cglyph->onRelease(); +} + +void CGlyph::onRelease() { + CObject::onRelease(); } static glyphArabicForm sp_glyph_read_arabic_form(gchar const *value){ @@ -147,6 +181,105 @@ static glyphOrientation sp_glyph_read_orientation(gchar const *value){ static void sp_glyph_set(SPObject *object, unsigned int key, const gchar *value) { +// SPGlyph *glyph = SP_GLYPH(object); +// +// switch (key) { +// case SP_ATTR_UNICODE: +// { +// glyph->unicode.clear(); +// if (value) glyph->unicode.append(value); +// object->requestModified(SP_OBJECT_MODIFIED_FLAG); +// break; +// } +// case SP_ATTR_GLYPH_NAME: +// { +// glyph->glyph_name.clear(); +// if (value) glyph->glyph_name.append(value); +// object->requestModified(SP_OBJECT_MODIFIED_FLAG); +// break; +// } +// case SP_ATTR_D: +// { +// if (glyph->d) g_free(glyph->d); +// glyph->d = g_strdup(value); +// object->requestModified(SP_OBJECT_MODIFIED_FLAG); +// break; +// } +// case SP_ATTR_ORIENTATION: +// { +// glyphOrientation orient = sp_glyph_read_orientation(value); +// if (glyph->orientation != orient){ +// glyph->orientation = orient; +// object->requestModified(SP_OBJECT_MODIFIED_FLAG); +// } +// break; +// } +// case SP_ATTR_ARABIC_FORM: +// { +// glyphArabicForm form = sp_glyph_read_arabic_form(value); +// if (glyph->arabic_form != form){ +// glyph->arabic_form = form; +// object->requestModified(SP_OBJECT_MODIFIED_FLAG); +// } +// break; +// } +// case SP_ATTR_LANG: +// { +// if (glyph->lang) g_free(glyph->lang); +// glyph->lang = g_strdup(value); +// object->requestModified(SP_OBJECT_MODIFIED_FLAG); +// break; +// } +// case SP_ATTR_HORIZ_ADV_X: +// { +// double number = value ? g_ascii_strtod(value, 0) : 0; +// if (number != glyph->horiz_adv_x){ +// glyph->horiz_adv_x = number; +// object->requestModified(SP_OBJECT_MODIFIED_FLAG); +// } +// break; +// } +// case SP_ATTR_VERT_ORIGIN_X: +// { +// double number = value ? g_ascii_strtod(value, 0) : 0; +// if (number != glyph->vert_origin_x){ +// glyph->vert_origin_x = number; +// object->requestModified(SP_OBJECT_MODIFIED_FLAG); +// } +// break; +// } +// case SP_ATTR_VERT_ORIGIN_Y: +// { +// double number = value ? g_ascii_strtod(value, 0) : 0; +// if (number != glyph->vert_origin_y){ +// glyph->vert_origin_y = number; +// object->requestModified(SP_OBJECT_MODIFIED_FLAG); +// } +// break; +// } +// case SP_ATTR_VERT_ADV_Y: +// { +// double number = value ? g_ascii_strtod(value, 0) : 0; +// if (number != glyph->vert_adv_y){ +// glyph->vert_adv_y = number; +// object->requestModified(SP_OBJECT_MODIFIED_FLAG); +// } +// break; +// } +// default: +// { +// if (((SPObjectClass *) (parent_class))->set) { +// ((SPObjectClass *) (parent_class))->set(object, key, value); +// } +// break; +// } +// } + ((SPGlyph*)object)->cglyph->onSet(key, value); +} + +void CGlyph::onSet(unsigned int key, const gchar *value) { + SPGlyph* object = this->spglyph; + SPGlyph *glyph = SP_GLYPH(object); switch (key) { @@ -234,9 +367,10 @@ static void sp_glyph_set(SPObject *object, unsigned int key, const gchar *value) } default: { - if (((SPObjectClass *) (parent_class))->set) { - ((SPObjectClass *) (parent_class))->set(object, key, value); - } +// if (((SPObjectClass *) (parent_class))->set) { +// ((SPObjectClass *) (parent_class))->set(object, key, value); +// } + CObject::onSet(key, value); break; } } @@ -248,6 +382,32 @@ static void sp_glyph_set(SPObject *object, unsigned int key, const gchar *value) static void sp_glyph_update(SPObject *object, SPCtx *ctx, guint flags) { +// SPGlyph *glyph = SP_GLYPH(object); +// (void)glyph; +// +// if (flags & SP_OBJECT_MODIFIED_FLAG) { +// /* do something to trigger redisplay, updates? */ +// object->readAttr( "unicode" ); +// object->readAttr( "glyph-name" ); +// object->readAttr( "d" ); +// object->readAttr( "orientation" ); +// object->readAttr( "arabic-form" ); +// object->readAttr( "lang" ); +// object->readAttr( "horiz-adv-x" ); +// object->readAttr( "vert-origin-x" ); +// object->readAttr( "vert-origin-y" ); +// object->readAttr( "vert-adv-y" ); +// } +// +// if (((SPObjectClass *) parent_class)->update) { +// ((SPObjectClass *) parent_class)->update(object, ctx, flags); +// } + ((SPGlyph*)object)->cglyph->onUpdate(ctx, flags); +} + +void CGlyph::onUpdate(SPCtx *ctx, guint flags) { + SPGlyph* object = this->spglyph; + SPGlyph *glyph = SP_GLYPH(object); (void)glyph; @@ -265,53 +425,99 @@ sp_glyph_update(SPObject *object, SPCtx *ctx, guint flags) object->readAttr( "vert-adv-y" ); } - if (((SPObjectClass *) parent_class)->update) { - ((SPObjectClass *) parent_class)->update(object, ctx, flags); - } +// if (((SPObjectClass *) parent_class)->update) { +// ((SPObjectClass *) parent_class)->update(object, ctx, flags); +// } + CObject::onUpdate(ctx, flags); } #define COPY_ATTR(rd,rs,key) (rd)->setAttribute((key), rs->attribute(key)); static Inkscape::XML::Node *sp_glyph_write(SPObject *object, Inkscape::XML::Document *xml_doc, Inkscape::XML::Node *repr, guint flags) { -// SPGlyph *glyph = SP_GLYPH(object); +//// SPGlyph *glyph = SP_GLYPH(object); +// +// if ((flags & SP_OBJECT_WRITE_BUILD) && !repr) { +// repr = xml_doc->createElement("svg:glyph"); +// } +// +///* I am commenting out this part because I am not certain how does it work. I will have to study it later. Juca +// repr->setAttribute("unicode", glyph->unicode); +// repr->setAttribute("glyph-name", glyph->glyph_name); +// repr->setAttribute("d", glyph->d); +// sp_repr_set_svg_double(repr, "orientation", (double) glyph->orientation); +// sp_repr_set_svg_double(repr, "arabic-form", (double) glyph->arabic_form); +// repr->setAttribute("lang", glyph->lang); +// sp_repr_set_svg_double(repr, "horiz-adv-x", glyph->horiz_adv_x); +// sp_repr_set_svg_double(repr, "vert-origin-x", glyph->vert_origin_x); +// sp_repr_set_svg_double(repr, "vert-origin-y", glyph->vert_origin_y); +// sp_repr_set_svg_double(repr, "vert-adv-y", glyph->vert_adv_y); +//*/ +// if (repr != object->getRepr()) { +// // All the COPY_ATTR functions below use +// // XML Tree directly while they shouldn't. +// COPY_ATTR(repr, object->getRepr(), "unicode"); +// COPY_ATTR(repr, object->getRepr(), "glyph-name"); +// COPY_ATTR(repr, object->getRepr(), "d"); +// COPY_ATTR(repr, object->getRepr(), "orientation"); +// COPY_ATTR(repr, object->getRepr(), "arabic-form"); +// COPY_ATTR(repr, object->getRepr(), "lang"); +// COPY_ATTR(repr, object->getRepr(), "horiz-adv-x"); +// COPY_ATTR(repr, object->getRepr(), "vert-origin-x"); +// COPY_ATTR(repr, object->getRepr(), "vert-origin-y"); +// COPY_ATTR(repr, object->getRepr(), "vert-adv-y"); +// } +// +// if (((SPObjectClass *) (parent_class))->write) { +// ((SPObjectClass *) (parent_class))->write(object, xml_doc, repr, flags); +// } +// +// return repr; + return ((SPGlyph*)object)->cglyph->onWrite(xml_doc, repr, flags); +} - if ((flags & SP_OBJECT_WRITE_BUILD) && !repr) { - repr = xml_doc->createElement("svg:glyph"); - } +Inkscape::XML::Node* CGlyph::onWrite(Inkscape::XML::Document *xml_doc, Inkscape::XML::Node *repr, guint flags) { + SPGlyph* object = this->spglyph; -/* I am commenting out this part because I am not certain how does it work. I will have to study it later. Juca - repr->setAttribute("unicode", glyph->unicode); - repr->setAttribute("glyph-name", glyph->glyph_name); - repr->setAttribute("d", glyph->d); - sp_repr_set_svg_double(repr, "orientation", (double) glyph->orientation); - sp_repr_set_svg_double(repr, "arabic-form", (double) glyph->arabic_form); - repr->setAttribute("lang", glyph->lang); - sp_repr_set_svg_double(repr, "horiz-adv-x", glyph->horiz_adv_x); - sp_repr_set_svg_double(repr, "vert-origin-x", glyph->vert_origin_x); - sp_repr_set_svg_double(repr, "vert-origin-y", glyph->vert_origin_y); - sp_repr_set_svg_double(repr, "vert-adv-y", glyph->vert_adv_y); -*/ - if (repr != object->getRepr()) { - // All the COPY_ATTR functions below use - // XML Tree directly while they shouldn't. - COPY_ATTR(repr, object->getRepr(), "unicode"); - COPY_ATTR(repr, object->getRepr(), "glyph-name"); - COPY_ATTR(repr, object->getRepr(), "d"); - COPY_ATTR(repr, object->getRepr(), "orientation"); - COPY_ATTR(repr, object->getRepr(), "arabic-form"); - COPY_ATTR(repr, object->getRepr(), "lang"); - COPY_ATTR(repr, object->getRepr(), "horiz-adv-x"); - COPY_ATTR(repr, object->getRepr(), "vert-origin-x"); - COPY_ATTR(repr, object->getRepr(), "vert-origin-y"); - COPY_ATTR(repr, object->getRepr(), "vert-adv-y"); - } + // SPGlyph *glyph = SP_GLYPH(object); - if (((SPObjectClass *) (parent_class))->write) { - ((SPObjectClass *) (parent_class))->write(object, xml_doc, repr, flags); - } + if ((flags & SP_OBJECT_WRITE_BUILD) && !repr) { + repr = xml_doc->createElement("svg:glyph"); + } + + /* I am commenting out this part because I am not certain how does it work. I will have to study it later. Juca + repr->setAttribute("unicode", glyph->unicode); + repr->setAttribute("glyph-name", glyph->glyph_name); + repr->setAttribute("d", glyph->d); + sp_repr_set_svg_double(repr, "orientation", (double) glyph->orientation); + sp_repr_set_svg_double(repr, "arabic-form", (double) glyph->arabic_form); + repr->setAttribute("lang", glyph->lang); + sp_repr_set_svg_double(repr, "horiz-adv-x", glyph->horiz_adv_x); + sp_repr_set_svg_double(repr, "vert-origin-x", glyph->vert_origin_x); + sp_repr_set_svg_double(repr, "vert-origin-y", glyph->vert_origin_y); + sp_repr_set_svg_double(repr, "vert-adv-y", glyph->vert_adv_y); + */ + if (repr != object->getRepr()) { + // All the COPY_ATTR functions below use + // XML Tree directly while they shouldn't. + COPY_ATTR(repr, object->getRepr(), "unicode"); + COPY_ATTR(repr, object->getRepr(), "glyph-name"); + COPY_ATTR(repr, object->getRepr(), "d"); + COPY_ATTR(repr, object->getRepr(), "orientation"); + COPY_ATTR(repr, object->getRepr(), "arabic-form"); + COPY_ATTR(repr, object->getRepr(), "lang"); + COPY_ATTR(repr, object->getRepr(), "horiz-adv-x"); + COPY_ATTR(repr, object->getRepr(), "vert-origin-x"); + COPY_ATTR(repr, object->getRepr(), "vert-origin-y"); + COPY_ATTR(repr, object->getRepr(), "vert-adv-y"); + } + +// if (((SPObjectClass *) (parent_class))->write) { +// ((SPObjectClass *) (parent_class))->write(object, xml_doc, repr, flags); +// } + CObject::onWrite(xml_doc, repr, flags); - return repr; + return repr; } #endif //#ifdef ENABLE_SVG_FONTS /* |
