From 99cb30e28d4ee193f39e23464abbd7630cac8a2d Mon Sep 17 00:00:00 2001 From: Markus Engel Date: Sat, 6 Oct 2012 23:56:27 +0200 Subject: Added virtual pad to SPFlowtext; removed old calls to virtual SPItem methods. (bzr r11608.1.46) --- src/sp-flowtext.cpp | 183 ++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 136 insertions(+), 47 deletions(-) (limited to 'src/sp-flowtext.cpp') diff --git a/src/sp-flowtext.cpp b/src/sp-flowtext.cpp index dc5b1d8bd..3779a19b5 100644 --- a/src/sp-flowtext.cpp +++ b/src/sp-flowtext.cpp @@ -82,7 +82,7 @@ sp_flowtext_class_init(SPFlowtextClass *klass) { GObjectClass *object_class = (GObjectClass *) klass; SPObjectClass *sp_object_class = (SPObjectClass *) klass; - SPItemClass *item_class = (SPItemClass *) klass; + //SPItemClass *item_class = (SPItemClass *) klass; parent_class = (SPItemClass *)g_type_class_ref(SP_TYPE_ITEM); @@ -96,17 +96,28 @@ sp_flowtext_class_init(SPFlowtextClass *klass) sp_object_class->build = sp_flowtext_build; sp_object_class->set = sp_flowtext_set; - item_class->bbox = sp_flowtext_bbox; - item_class->print = sp_flowtext_print; - item_class->description = sp_flowtext_description; - item_class->snappoints = sp_flowtext_snappoints; - item_class->show = sp_flowtext_show; - item_class->hide = sp_flowtext_hide; +// item_class->bbox = sp_flowtext_bbox; +// item_class->print = sp_flowtext_print; +// item_class->description = sp_flowtext_description; +// item_class->snappoints = sp_flowtext_snappoints; +// item_class->show = sp_flowtext_show; +// item_class->hide = sp_flowtext_hide; +} + +CFlowtext::CFlowtext(SPFlowtext* flowtext) : CItem(flowtext) { + this->spflowtext = flowtext; +} + +CFlowtext::~CFlowtext() { } static void sp_flowtext_init(SPFlowtext *group) { + group->cflowtext = new CFlowtext(group); + group->citem = group->cflowtext; + group->cobject = group->cflowtext; + group->par_indent = 0; new (&group->layout) Inkscape::Text::Layout(); } @@ -119,35 +130,49 @@ sp_flowtext_dispose(GObject *object) group->layout.~Layout(); } +void CFlowtext::onChildAdded(Inkscape::XML::Node* child, Inkscape::XML::Node* ref) { + CItem::onChildAdded(child, ref); + + this->spflowtext->requestModified(SP_OBJECT_MODIFIED_FLAG); +} + static void sp_flowtext_child_added(SPObject *object, Inkscape::XML::Node *child, Inkscape::XML::Node *ref) { - if (((SPObjectClass *) (parent_class))->child_added) - (* ((SPObjectClass *) (parent_class))->child_added)(object, child, ref); - - object->requestModified(SP_OBJECT_MODIFIED_FLAG); +// if (((SPObjectClass *) (parent_class))->child_added) +// (* ((SPObjectClass *) (parent_class))->child_added)(object, child, ref); +// +// object->requestModified(SP_OBJECT_MODIFIED_FLAG); } /* fixme: hide (Lauris) */ +void CFlowtext::onRemoveChild(Inkscape::XML::Node* child) { + CItem::onRemoveChild(child); + + this->spflowtext->requestModified(SP_OBJECT_MODIFIED_FLAG); +} + static void sp_flowtext_remove_child(SPObject *object, Inkscape::XML::Node *child) { - if (((SPObjectClass *) (parent_class))->remove_child) - (* ((SPObjectClass *) (parent_class))->remove_child)(object, child); - - object->requestModified(SP_OBJECT_MODIFIED_FLAG); +// if (((SPObjectClass *) (parent_class))->remove_child) +// (* ((SPObjectClass *) (parent_class))->remove_child)(object, child); +// +// object->requestModified(SP_OBJECT_MODIFIED_FLAG); } -static void sp_flowtext_update(SPObject *object, SPCtx *ctx, unsigned flags) -{ +void CFlowtext::onUpdate(SPCtx* ctx, unsigned int flags) { + SPFlowtext* object = this->spflowtext; + SPFlowtext *group = SP_FLOWTEXT(object); SPItemCtx *ictx = (SPItemCtx *) ctx; SPItemCtx cctx = *ictx; - if (((SPObjectClass *) (parent_class))->update) { - ((SPObjectClass *) (parent_class))->update(object, ctx, flags); - } +// if (((SPObjectClass *) (parent_class))->update) { +// ((SPObjectClass *) (parent_class))->update(object, ctx, flags); +// } + CItem::onUpdate(ctx, flags); if (flags & SP_OBJECT_MODIFIED_FLAG) flags |= SP_OBJECT_PARENT_MODIFIED_FLAG; flags &= SP_OBJECT_MODIFIED_CASCADE; @@ -186,8 +211,13 @@ static void sp_flowtext_update(SPObject *object, SPCtx *ctx, unsigned flags) } } -static void sp_flowtext_modified(SPObject *object, guint flags) +static void sp_flowtext_update(SPObject *object, SPCtx *ctx, unsigned flags) { + ((SPFlowtext*)object)->cflowtext->onUpdate(ctx, flags); +} + +void CFlowtext::onModified(unsigned int flags) { + SPFlowtext* object = this->spflowtext; SPObject *ft = object; SPObject *region = NULL; @@ -220,21 +250,32 @@ static void sp_flowtext_modified(SPObject *object, guint flags) } } -static void -sp_flowtext_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr) +static void sp_flowtext_modified(SPObject *object, guint flags) { + ((SPFlowtext*)object)->cflowtext->onModified(flags); +} + +void CFlowtext::onBuild(SPDocument* doc, Inkscape::XML::Node* repr) { + SPFlowtext* object = this->spflowtext; + object->_requireSVGVersion(Inkscape::Version(1, 2)); - if (((SPObjectClass *) (parent_class))->build) { - (* ((SPObjectClass *) (parent_class))->build)(object, document, repr); - } +// if (((SPObjectClass *) (parent_class))->build) { +// (* ((SPObjectClass *) (parent_class))->build)(object, document, repr); +// } + CItem::onBuild(doc, repr); object->readAttr( "inkscape:layoutOptions" ); // must happen after css has been read } static void -sp_flowtext_set(SPObject *object, unsigned key, gchar const *value) +sp_flowtext_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr) { + ((SPFlowtext*)object)->cflowtext->onBuild(document, repr); +} + +void CFlowtext::onSet(unsigned int key, const gchar* value) { + SPFlowtext* object = this->spflowtext; SPFlowtext *group = (SPFlowtext *) object; switch (key) { @@ -284,24 +325,32 @@ sp_flowtext_set(SPObject *object, unsigned key, gchar const *value) break; } 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); +// } + CItem::onSet(key, value); break; } } -static Inkscape::XML::Node *sp_flowtext_write(SPObject *object, Inkscape::XML::Document *xml_doc, Inkscape::XML::Node *repr, guint flags) +static void +sp_flowtext_set(SPObject *object, unsigned key, gchar const *value) { + ((SPFlowtext*)object)->cflowtext->onSet(key, value); +} + +Inkscape::XML::Node* CFlowtext::onWrite(Inkscape::XML::Document* doc, Inkscape::XML::Node* repr, guint flags) { + SPFlowtext* object = this->spflowtext; + if ( flags & SP_OBJECT_WRITE_BUILD ) { if ( repr == NULL ) { - repr = xml_doc->createElement("svg:flowRoot"); + repr = doc->createElement("svg:flowRoot"); } GSList *l = NULL; for (SPObject *child = object->firstChild() ; child ; child = child->getNext() ) { Inkscape::XML::Node *c_repr = NULL; if ( SP_IS_FLOWDIV(child) || SP_IS_FLOWPARA(child) || SP_IS_FLOWREGION(child) || SP_IS_FLOWREGIONEXCLUDE(child)) { - c_repr = child->updateRepr(xml_doc, NULL, flags); + c_repr = child->updateRepr(doc, NULL, flags); } if ( c_repr ) { l = g_slist_prepend(l, c_repr); @@ -320,16 +369,22 @@ static Inkscape::XML::Node *sp_flowtext_write(SPObject *object, Inkscape::XML::D } } - if (((SPObjectClass *) (parent_class))->write) { - ((SPObjectClass *) (parent_class))->write(object, xml_doc, repr, flags); - } +// if (((SPObjectClass *) (parent_class))->write) { +// ((SPObjectClass *) (parent_class))->write(object, doc, repr, flags); +// } + CItem::onWrite(doc, repr, flags); return repr; } -static Geom::OptRect -sp_flowtext_bbox(SPItem const *item, Geom::Affine const &transform, SPItem::BBoxType type) +static Inkscape::XML::Node *sp_flowtext_write(SPObject *object, Inkscape::XML::Document *xml_doc, Inkscape::XML::Node *repr, guint flags) { + return ((SPFlowtext*)object)->cflowtext->onWrite(xml_doc, repr, flags); +} + +Geom::OptRect CFlowtext::onBbox(Geom::Affine const &transform, SPItem::BBoxType type) { + SPFlowtext* item = this->spflowtext; + SPFlowtext *group = SP_FLOWTEXT(item); Geom::OptRect bbox = group->layout.bounds(transform); @@ -342,9 +397,15 @@ sp_flowtext_bbox(SPItem const *item, Geom::Affine const &transform, SPItem::BBox return bbox; } -static void -sp_flowtext_print(SPItem *item, SPPrintContext *ctx) +static Geom::OptRect +sp_flowtext_bbox(SPItem const *item, Geom::Affine const &transform, SPItem::BBoxType type) { + return ((SPFlowtext*)item)->cflowtext->onBbox(transform, type); +} + +void CFlowtext::onPrint(SPPrintContext *ctx) { + SPFlowtext* item = this->spflowtext; + SPFlowtext *group = SP_FLOWTEXT(item); Geom::OptRect pbox, bbox, dbox; @@ -356,9 +417,15 @@ sp_flowtext_print(SPItem *item, SPPrintContext *ctx) group->layout.print(ctx, pbox, dbox, bbox, ctm); } - -static gchar *sp_flowtext_description(SPItem *item) +static void +sp_flowtext_print(SPItem *item, SPPrintContext *ctx) { + ((SPFlowtext*)item)->cflowtext->onPrint(ctx); +} + +gchar* CFlowtext::onDescription() { + SPFlowtext* item = this->spflowtext; + Inkscape::Text::Layout const &layout = SP_FLOWTEXT(item)->layout; int const nChars = layout.iteratorToCharIndex(layout.end()); @@ -371,8 +438,14 @@ static gchar *sp_flowtext_description(SPItem *item) } } -static void sp_flowtext_snappoints(SPItem const *item, std::vector &p, Inkscape::SnapPreferences const *snapprefs) +static gchar *sp_flowtext_description(SPItem *item) { + return ((SPFlowtext*)item)->cflowtext->onDescription(); +} + +void CFlowtext::onSnappoints(std::vector &p, Inkscape::SnapPreferences const *snapprefs) { + SPFlowtext* item = this->spflowtext; + if (snapprefs->isTargetSnappable(Inkscape::SNAPTARGET_TEXT_BASELINE)) { // Choose a point on the baseline for snapping from or to, with the horizontal position // of this point depending on the text alignment (left vs. right) @@ -386,9 +459,14 @@ static void sp_flowtext_snappoints(SPItem const *item, std::vector &p, Inkscape::SnapPreferences const *snapprefs) { + ((SPFlowtext*)item)->cflowtext->onSnappoints(p, snapprefs); +} + +Inkscape::DrawingItem* CFlowtext::onShow(Inkscape::Drawing &drawing, unsigned int key, unsigned int flags) { + SPFlowtext* item = this->spflowtext; + SPFlowtext *group = (SPFlowtext *) item; Inkscape::DrawingGroup *flowed = new Inkscape::DrawingGroup(drawing); flowed->setPickChildren(false); @@ -401,11 +479,22 @@ sp_flowtext_show(SPItem *item, Inkscape::Drawing &drawing, unsigned/* key*/, uns return flowed; } +static Inkscape::DrawingItem * +sp_flowtext_show(SPItem *item, Inkscape::Drawing &drawing, unsigned key, unsigned flags) +{ + return ((SPFlowtext*)item)->cflowtext->onShow(drawing, key, flags); +} + +void CFlowtext::onHide(unsigned int key) { + CItem::onHide(key); +} + static void sp_flowtext_hide(SPItem *item, unsigned int key) { - if (((SPItemClass *) parent_class)->hide) - ((SPItemClass *) parent_class)->hide(item, key); +// if (((SPItemClass *) parent_class)->hide) +// ((SPItemClass *) parent_class)->hide(item, key); + ((SPFlowtext*)item)->cflowtext->onHide(key); } -- cgit v1.2.3 From 55b2e59196c6e980bdb3f03379de6707dd91082b Mon Sep 17 00:00:00 2001 From: Alex Valavanis Date: Sat, 26 Jan 2013 16:18:08 +0000 Subject: More GObject boilerplate reduction (bzr r12064) --- src/sp-flowtext.cpp | 56 ++++++++++++++--------------------------------------- 1 file changed, 15 insertions(+), 41 deletions(-) (limited to 'src/sp-flowtext.cpp') diff --git a/src/sp-flowtext.cpp b/src/sp-flowtext.cpp index dc5b1d8bd..1d95c2f8a 100644 --- a/src/sp-flowtext.cpp +++ b/src/sp-flowtext.cpp @@ -34,8 +34,6 @@ #include "display/drawing-text.h" -static void sp_flowtext_class_init(SPFlowtextClass *klass); -static void sp_flowtext_init(SPFlowtext *group); static void sp_flowtext_dispose(GObject *object); static void sp_flowtext_child_added(SPObject *object, Inkscape::XML::Node *child, Inkscape::XML::Node *ref); @@ -53,29 +51,7 @@ static void sp_flowtext_snappoints(SPItem const *item, std::vectordispose = sp_flowtext_dispose; sp_object_class->child_added = sp_flowtext_child_added; @@ -122,8 +96,8 @@ sp_flowtext_dispose(GObject *object) static void sp_flowtext_child_added(SPObject *object, Inkscape::XML::Node *child, Inkscape::XML::Node *ref) { - if (((SPObjectClass *) (parent_class))->child_added) - (* ((SPObjectClass *) (parent_class))->child_added)(object, child, ref); + if (((SPObjectClass *) (sp_flowtext_parent_class))->child_added) + (* ((SPObjectClass *) (sp_flowtext_parent_class))->child_added)(object, child, ref); object->requestModified(SP_OBJECT_MODIFIED_FLAG); } @@ -133,8 +107,8 @@ sp_flowtext_child_added(SPObject *object, Inkscape::XML::Node *child, Inkscape:: static void sp_flowtext_remove_child(SPObject *object, Inkscape::XML::Node *child) { - if (((SPObjectClass *) (parent_class))->remove_child) - (* ((SPObjectClass *) (parent_class))->remove_child)(object, child); + if (((SPObjectClass *) (sp_flowtext_parent_class))->remove_child) + (* ((SPObjectClass *) (sp_flowtext_parent_class))->remove_child)(object, child); object->requestModified(SP_OBJECT_MODIFIED_FLAG); } @@ -145,8 +119,8 @@ static void sp_flowtext_update(SPObject *object, SPCtx *ctx, unsigned flags) SPItemCtx *ictx = (SPItemCtx *) ctx; SPItemCtx cctx = *ictx; - if (((SPObjectClass *) (parent_class))->update) { - ((SPObjectClass *) (parent_class))->update(object, ctx, flags); + if (((SPObjectClass *) (sp_flowtext_parent_class))->update) { + ((SPObjectClass *) (sp_flowtext_parent_class))->update(object, ctx, flags); } if (flags & SP_OBJECT_MODIFIED_FLAG) flags |= SP_OBJECT_PARENT_MODIFIED_FLAG; @@ -225,8 +199,8 @@ sp_flowtext_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *r { object->_requireSVGVersion(Inkscape::Version(1, 2)); - if (((SPObjectClass *) (parent_class))->build) { - (* ((SPObjectClass *) (parent_class))->build)(object, document, repr); + if (((SPObjectClass *) (sp_flowtext_parent_class))->build) { + (* ((SPObjectClass *) (sp_flowtext_parent_class))->build)(object, document, repr); } object->readAttr( "inkscape:layoutOptions" ); // must happen after css has been read @@ -284,8 +258,8 @@ sp_flowtext_set(SPObject *object, unsigned key, gchar const *value) break; } default: - if (((SPObjectClass *) (parent_class))->set) { - (* ((SPObjectClass *) (parent_class))->set)(object, key, value); + if (((SPObjectClass *) (sp_flowtext_parent_class))->set) { + (* ((SPObjectClass *) (sp_flowtext_parent_class))->set)(object, key, value); } break; } @@ -320,8 +294,8 @@ static Inkscape::XML::Node *sp_flowtext_write(SPObject *object, Inkscape::XML::D } } - if (((SPObjectClass *) (parent_class))->write) { - ((SPObjectClass *) (parent_class))->write(object, xml_doc, repr, flags); + if (((SPObjectClass *) (sp_flowtext_parent_class))->write) { + ((SPObjectClass *) (sp_flowtext_parent_class))->write(object, xml_doc, repr, flags); } return repr; @@ -404,8 +378,8 @@ sp_flowtext_show(SPItem *item, Inkscape::Drawing &drawing, unsigned/* key*/, uns static void sp_flowtext_hide(SPItem *item, unsigned int key) { - if (((SPItemClass *) parent_class)->hide) - ((SPItemClass *) parent_class)->hide(item, key); + if (((SPItemClass *) sp_flowtext_parent_class)->hide) + ((SPItemClass *) sp_flowtext_parent_class)->hide(item, key); } -- cgit v1.2.3 From a0a8d020201e0e38a63d9aa3dce228d7d9e6fb35 Mon Sep 17 00:00:00 2001 From: Markus Engel Date: Thu, 14 Mar 2013 12:42:39 +0100 Subject: Various changes. (bzr r11608.1.48) --- src/sp-flowtext.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/sp-flowtext.cpp') diff --git a/src/sp-flowtext.cpp b/src/sp-flowtext.cpp index 3779a19b5..b4d80e11d 100644 --- a/src/sp-flowtext.cpp +++ b/src/sp-flowtext.cpp @@ -93,7 +93,7 @@ sp_flowtext_class_init(SPFlowtextClass *klass) sp_object_class->update = sp_flowtext_update; sp_object_class->modified = sp_flowtext_modified; sp_object_class->write = sp_flowtext_write; - sp_object_class->build = sp_flowtext_build; + //sp_object_class->build = sp_flowtext_build; sp_object_class->set = sp_flowtext_set; // item_class->bbox = sp_flowtext_bbox; -- cgit v1.2.3 From 957c3e4b7909d42c5a13f1b1dd583f877fc32259 Mon Sep 17 00:00:00 2001 From: Markus Engel Date: Sat, 30 Mar 2013 00:46:57 +0100 Subject: Removed function pointers from SPObject and subclasses. Added some missing virtual pads for classes that were hidden by preprocessor macros. (bzr r11608.1.55) --- src/sp-flowtext.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) (limited to 'src/sp-flowtext.cpp') diff --git a/src/sp-flowtext.cpp b/src/sp-flowtext.cpp index b4d80e11d..7ee5827b0 100644 --- a/src/sp-flowtext.cpp +++ b/src/sp-flowtext.cpp @@ -88,13 +88,13 @@ sp_flowtext_class_init(SPFlowtextClass *klass) object_class->dispose = sp_flowtext_dispose; - sp_object_class->child_added = sp_flowtext_child_added; - sp_object_class->remove_child = sp_flowtext_remove_child; - sp_object_class->update = sp_flowtext_update; - sp_object_class->modified = sp_flowtext_modified; - sp_object_class->write = sp_flowtext_write; - //sp_object_class->build = sp_flowtext_build; - sp_object_class->set = sp_flowtext_set; +// sp_object_class->child_added = sp_flowtext_child_added; +// sp_object_class->remove_child = sp_flowtext_remove_child; +// sp_object_class->update = sp_flowtext_update; +// sp_object_class->modified = sp_flowtext_modified; +// sp_object_class->write = sp_flowtext_write; +// //sp_object_class->build = sp_flowtext_build; +// sp_object_class->set = sp_flowtext_set; // item_class->bbox = sp_flowtext_bbox; // item_class->print = sp_flowtext_print; -- cgit v1.2.3 From 7df6616da5ea2debb86838366ddf746841549cdb Mon Sep 17 00:00:00 2001 From: Markus Engel Date: Sat, 30 Mar 2013 00:56:13 +0100 Subject: Renamed virtual function names. (bzr r11608.1.57) --- src/sp-flowtext.cpp | 40 ++++++++++++++++++++-------------------- 1 file changed, 20 insertions(+), 20 deletions(-) (limited to 'src/sp-flowtext.cpp') diff --git a/src/sp-flowtext.cpp b/src/sp-flowtext.cpp index 2759e4c47..89b718781 100644 --- a/src/sp-flowtext.cpp +++ b/src/sp-flowtext.cpp @@ -75,8 +75,8 @@ sp_flowtext_dispose(GObject *object) group->layout.~Layout(); } -void CFlowtext::onChildAdded(Inkscape::XML::Node* child, Inkscape::XML::Node* ref) { - CItem::onChildAdded(child, ref); +void CFlowtext::child_added(Inkscape::XML::Node* child, Inkscape::XML::Node* ref) { + CItem::child_added(child, ref); this->spflowtext->requestModified(SP_OBJECT_MODIFIED_FLAG); } @@ -84,21 +84,21 @@ void CFlowtext::onChildAdded(Inkscape::XML::Node* child, Inkscape::XML::Node* re /* fixme: hide (Lauris) */ -void CFlowtext::onRemoveChild(Inkscape::XML::Node* child) { - CItem::onRemoveChild(child); +void CFlowtext::remove_child(Inkscape::XML::Node* child) { + CItem::remove_child(child); this->spflowtext->requestModified(SP_OBJECT_MODIFIED_FLAG); } -void CFlowtext::onUpdate(SPCtx* ctx, unsigned int flags) { +void CFlowtext::update(SPCtx* ctx, unsigned int flags) { SPFlowtext* object = this->spflowtext; SPFlowtext *group = SP_FLOWTEXT(object); SPItemCtx *ictx = (SPItemCtx *) ctx; SPItemCtx cctx = *ictx; - CItem::onUpdate(ctx, flags); + CItem::update(ctx, flags); if (flags & SP_OBJECT_MODIFIED_FLAG) flags |= SP_OBJECT_PARENT_MODIFIED_FLAG; flags &= SP_OBJECT_MODIFIED_CASCADE; @@ -137,7 +137,7 @@ void CFlowtext::onUpdate(SPCtx* ctx, unsigned int flags) { } } -void CFlowtext::onModified(unsigned int flags) { +void CFlowtext::modified(unsigned int flags) { SPFlowtext* object = this->spflowtext; SPObject *ft = object; SPObject *region = NULL; @@ -171,17 +171,17 @@ void CFlowtext::onModified(unsigned int flags) { } } -void CFlowtext::onBuild(SPDocument* doc, Inkscape::XML::Node* repr) { +void CFlowtext::build(SPDocument* doc, Inkscape::XML::Node* repr) { SPFlowtext* object = this->spflowtext; object->_requireSVGVersion(Inkscape::Version(1, 2)); - CItem::onBuild(doc, repr); + CItem::build(doc, repr); object->readAttr( "inkscape:layoutOptions" ); // must happen after css has been read } -void CFlowtext::onSet(unsigned int key, const gchar* value) { +void CFlowtext::set(unsigned int key, const gchar* value) { SPFlowtext* object = this->spflowtext; SPFlowtext *group = (SPFlowtext *) object; @@ -232,12 +232,12 @@ void CFlowtext::onSet(unsigned int key, const gchar* value) { break; } default: - CItem::onSet(key, value); + CItem::set(key, value); break; } } -Inkscape::XML::Node* CFlowtext::onWrite(Inkscape::XML::Document* doc, Inkscape::XML::Node* repr, guint flags) { +Inkscape::XML::Node* CFlowtext::write(Inkscape::XML::Document* doc, Inkscape::XML::Node* repr, guint flags) { SPFlowtext* object = this->spflowtext; if ( flags & SP_OBJECT_WRITE_BUILD ) { @@ -267,12 +267,12 @@ Inkscape::XML::Node* CFlowtext::onWrite(Inkscape::XML::Document* doc, Inkscape:: } } - CItem::onWrite(doc, repr, flags); + CItem::write(doc, repr, flags); return repr; } -Geom::OptRect CFlowtext::onBbox(Geom::Affine const &transform, SPItem::BBoxType type) { +Geom::OptRect CFlowtext::bbox(Geom::Affine const &transform, SPItem::BBoxType type) { SPFlowtext* item = this->spflowtext; SPFlowtext *group = SP_FLOWTEXT(item); @@ -287,7 +287,7 @@ Geom::OptRect CFlowtext::onBbox(Geom::Affine const &transform, SPItem::BBoxType return bbox; } -void CFlowtext::onPrint(SPPrintContext *ctx) { +void CFlowtext::print(SPPrintContext *ctx) { SPFlowtext* item = this->spflowtext; SPFlowtext *group = SP_FLOWTEXT(item); @@ -301,7 +301,7 @@ void CFlowtext::onPrint(SPPrintContext *ctx) { group->layout.print(ctx, pbox, dbox, bbox, ctm); } -gchar* CFlowtext::onDescription() { +gchar* CFlowtext::description() { SPFlowtext* item = this->spflowtext; Inkscape::Text::Layout const &layout = SP_FLOWTEXT(item)->layout; @@ -316,7 +316,7 @@ gchar* CFlowtext::onDescription() { } } -void CFlowtext::onSnappoints(std::vector &p, Inkscape::SnapPreferences const *snapprefs) { +void CFlowtext::snappoints(std::vector &p, Inkscape::SnapPreferences const *snapprefs) { SPFlowtext* item = this->spflowtext; if (snapprefs->isTargetSnappable(Inkscape::SNAPTARGET_TEXT_BASELINE)) { @@ -332,7 +332,7 @@ void CFlowtext::onSnappoints(std::vector &p, Inksc } } -Inkscape::DrawingItem* CFlowtext::onShow(Inkscape::Drawing &drawing, unsigned int key, unsigned int flags) { +Inkscape::DrawingItem* CFlowtext::show(Inkscape::Drawing &drawing, unsigned int key, unsigned int flags) { SPFlowtext* item = this->spflowtext; SPFlowtext *group = (SPFlowtext *) item; @@ -347,8 +347,8 @@ Inkscape::DrawingItem* CFlowtext::onShow(Inkscape::Drawing &drawing, unsigned in return flowed; } -void CFlowtext::onHide(unsigned int key) { - CItem::onHide(key); +void CFlowtext::hide(unsigned int key) { + CItem::hide(key); } -- cgit v1.2.3 From f51227a487f3d80e096c04470a969f5efa911a98 Mon Sep 17 00:00:00 2001 From: Markus Engel Date: Sat, 30 Mar 2013 21:49:36 +0100 Subject: Turned all functions concerning SPRect into member functions. (bzr r11608.1.60) --- src/sp-flowtext.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/sp-flowtext.cpp') diff --git a/src/sp-flowtext.cpp b/src/sp-flowtext.cpp index 89b718781..6496d017d 100644 --- a/src/sp-flowtext.cpp +++ b/src/sp-flowtext.cpp @@ -649,7 +649,7 @@ SPItem *create_flowtext_with_internal_frame (SPDesktop *desktop, Geom::Point p0, Geom::Coord const w = x1 - x0; Geom::Coord const h = y1 - y0; - sp_rect_position_set(rect, x0, y0, w, h); + rect->setPosition(x0, y0, w, h); rect->updateRepr(); Inkscape::XML::Node *para_repr = xml_doc->createElement("svg:flowPara"); -- cgit v1.2.3 From a5d6e692d661f0bf7648e64e8fcb04588bb8f3ab Mon Sep 17 00:00:00 2001 From: Markus Engel Date: Mon, 1 Apr 2013 00:07:00 +0200 Subject: Prepared exchange of casting macros. (bzr r11608.1.63) --- src/sp-flowtext.cpp | 1 + 1 file changed, 1 insertion(+) (limited to 'src/sp-flowtext.cpp') diff --git a/src/sp-flowtext.cpp b/src/sp-flowtext.cpp index 6496d017d..7a695d68d 100644 --- a/src/sp-flowtext.cpp +++ b/src/sp-flowtext.cpp @@ -58,6 +58,7 @@ static void sp_flowtext_init(SPFlowtext *group) { group->cflowtext = new CFlowtext(group); + group->typeHierarchy.insert(typeid(SPFlowtext)); delete group->citem; group->citem = group->cflowtext; -- cgit v1.2.3 From 7eb077e4097aed62c11e5b4e97ff4b16039e73fa Mon Sep 17 00:00:00 2001 From: Markus Engel Date: Mon, 1 Apr 2013 23:04:54 +0200 Subject: Replaced calls to g_object_(un)ref with sp_object_(un)ref. (bzr r11608.1.65) --- src/sp-flowtext.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src/sp-flowtext.cpp') diff --git a/src/sp-flowtext.cpp b/src/sp-flowtext.cpp index 7a695d68d..0afd91379 100644 --- a/src/sp-flowtext.cpp +++ b/src/sp-flowtext.cpp @@ -106,7 +106,7 @@ void CFlowtext::update(SPCtx* ctx, unsigned int flags) { GSList *l = NULL; for (SPObject *child = object->firstChild() ; child ; child = child->getNext() ) { - g_object_ref(G_OBJECT(child)); + sp_object_ref(child); l = g_slist_prepend(l, child); } l = g_slist_reverse(l); @@ -123,7 +123,7 @@ void CFlowtext::update(SPCtx* ctx, unsigned int flags) { child->updateDisplay(ctx, flags); } } - g_object_unref(G_OBJECT(child)); + sp_object_unref(child); } group->rebuildLayout(); -- cgit v1.2.3 From 69f3b6f1abb2bb422935d43262e1e99aab359954 Mon Sep 17 00:00:00 2001 From: Markus Engel Date: Tue, 2 Apr 2013 01:41:30 +0200 Subject: Added constructors to SP classes. (bzr r11608.1.67) --- src/sp-flowtext.cpp | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) (limited to 'src/sp-flowtext.cpp') diff --git a/src/sp-flowtext.cpp b/src/sp-flowtext.cpp index 0afd91379..8b6cf4a25 100644 --- a/src/sp-flowtext.cpp +++ b/src/sp-flowtext.cpp @@ -37,7 +37,7 @@ static void sp_flowtext_init(SPFlowtext *group); static void sp_flowtext_dispose(GObject *object); -G_DEFINE_TYPE(SPFlowtext, sp_flowtext, SP_TYPE_ITEM); +G_DEFINE_TYPE(SPFlowtext, sp_flowtext, G_TYPE_OBJECT); static void sp_flowtext_class_init(SPFlowtextClass *klass) @@ -54,9 +54,9 @@ CFlowtext::CFlowtext(SPFlowtext* flowtext) : CItem(flowtext) { CFlowtext::~CFlowtext() { } -static void -sp_flowtext_init(SPFlowtext *group) -{ +SPFlowtext::SPFlowtext() : SPItem() { + SPFlowtext* group = this; + group->cflowtext = new CFlowtext(group); group->typeHierarchy.insert(typeid(SPFlowtext)); @@ -68,6 +68,12 @@ sp_flowtext_init(SPFlowtext *group) new (&group->layout) Inkscape::Text::Layout(); } +static void +sp_flowtext_init(SPFlowtext *group) +{ + new (group) SPFlowtext(); +} + static void sp_flowtext_dispose(GObject *object) { -- cgit v1.2.3 From d1af3566872dfff2aeec84859c87f1f8d13f79df Mon Sep 17 00:00:00 2001 From: Markus Engel Date: Tue, 2 Apr 2013 19:14:36 +0200 Subject: Registered classes with new factory. Hkern, Vkern and FeFuncX have to be rewritten, as they aren't real classes. (bzr r11608.1.69) --- src/sp-flowtext.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'src/sp-flowtext.cpp') diff --git a/src/sp-flowtext.cpp b/src/sp-flowtext.cpp index 8b6cf4a25..1d08b8256 100644 --- a/src/sp-flowtext.cpp +++ b/src/sp-flowtext.cpp @@ -37,6 +37,16 @@ static void sp_flowtext_init(SPFlowtext *group); static void sp_flowtext_dispose(GObject *object); +#include "sp-factory.h" + +namespace { + SPObject* createFlowtext() { + return new SPFlowtext(); + } + + bool flowtextRegistered = SPFactory::instance().registerObject("svg:flowRoot", createFlowtext); +} + G_DEFINE_TYPE(SPFlowtext, sp_flowtext, G_TYPE_OBJECT); static void -- cgit v1.2.3 From 61003d31ea058fdf94f4f80c753c3e38426f35e4 Mon Sep 17 00:00:00 2001 From: Markus Engel Date: Fri, 5 Apr 2013 21:07:38 +0200 Subject: Merged FlowX classes. (bzr r11608.1.79) --- src/sp-flowtext.cpp | 220 ++++++++++++++++++++++------------------------------ 1 file changed, 91 insertions(+), 129 deletions(-) (limited to 'src/sp-flowtext.cpp') diff --git a/src/sp-flowtext.cpp b/src/sp-flowtext.cpp index 1d08b8256..8cdf52000 100644 --- a/src/sp-flowtext.cpp +++ b/src/sp-flowtext.cpp @@ -33,10 +33,6 @@ #include "display/drawing-text.h" - -static void sp_flowtext_init(SPFlowtext *group); -static void sp_flowtext_dispose(GObject *object); - #include "sp-factory.h" namespace { @@ -47,71 +43,35 @@ namespace { bool flowtextRegistered = SPFactory::instance().registerObject("svg:flowRoot", createFlowtext); } -G_DEFINE_TYPE(SPFlowtext, sp_flowtext, G_TYPE_OBJECT); - -static void -sp_flowtext_class_init(SPFlowtextClass *klass) -{ - GObjectClass *object_class = (GObjectClass *) klass; - - object_class->dispose = sp_flowtext_dispose; -} - -CFlowtext::CFlowtext(SPFlowtext* flowtext) : CItem(flowtext) { - this->spflowtext = flowtext; -} - -CFlowtext::~CFlowtext() { -} - -SPFlowtext::SPFlowtext() : SPItem() { - SPFlowtext* group = this; - - group->cflowtext = new CFlowtext(group); - group->typeHierarchy.insert(typeid(SPFlowtext)); - - delete group->citem; - group->citem = group->cflowtext; - group->cobject = group->cflowtext; - - group->par_indent = 0; - new (&group->layout) Inkscape::Text::Layout(); -} +SPFlowtext::SPFlowtext() : SPItem(), CItem(this) { + delete this->citem; + this->citem = this; + this->cobject = this; -static void -sp_flowtext_init(SPFlowtext *group) -{ - new (group) SPFlowtext(); + this->par_indent = 0; + new (&this->layout) Inkscape::Text::Layout(); } -static void -sp_flowtext_dispose(GObject *object) -{ - SPFlowtext *group = (SPFlowtext*)object; - - group->layout.~Layout(); +SPFlowtext::~SPFlowtext() { + this->layout.~Layout(); } -void CFlowtext::child_added(Inkscape::XML::Node* child, Inkscape::XML::Node* ref) { +void SPFlowtext::child_added(Inkscape::XML::Node* child, Inkscape::XML::Node* ref) { CItem::child_added(child, ref); - this->spflowtext->requestModified(SP_OBJECT_MODIFIED_FLAG); + this->requestModified(SP_OBJECT_MODIFIED_FLAG); } /* fixme: hide (Lauris) */ -void CFlowtext::remove_child(Inkscape::XML::Node* child) { +void SPFlowtext::remove_child(Inkscape::XML::Node* child) { CItem::remove_child(child); - this->spflowtext->requestModified(SP_OBJECT_MODIFIED_FLAG); + this->requestModified(SP_OBJECT_MODIFIED_FLAG); } - -void CFlowtext::update(SPCtx* ctx, unsigned int flags) { - SPFlowtext* object = this->spflowtext; - - SPFlowtext *group = SP_FLOWTEXT(object); +void SPFlowtext::update(SPCtx* ctx, unsigned int flags) { SPItemCtx *ictx = (SPItemCtx *) ctx; SPItemCtx cctx = *ictx; @@ -121,14 +81,18 @@ void CFlowtext::update(SPCtx* ctx, unsigned int flags) { flags &= SP_OBJECT_MODIFIED_CASCADE; GSList *l = NULL; - for (SPObject *child = object->firstChild() ; child ; child = child->getNext() ) { + + for (SPObject *child = this->firstChild() ; child ; child = child->getNext() ) { sp_object_ref(child); l = g_slist_prepend(l, child); } + l = g_slist_reverse(l); + while (l) { SPObject *child = SP_OBJECT(l->data); l = g_slist_remove(l, child); + if (flags || (child->uflags & (SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_CHILD_MODIFIED_FLAG))) { if (SP_IS_ITEM(child)) { SPItem const &chi = *SP_ITEM(child); @@ -139,42 +103,46 @@ void CFlowtext::update(SPCtx* ctx, unsigned int flags) { child->updateDisplay(ctx, flags); } } + sp_object_unref(child); } - group->rebuildLayout(); + this->rebuildLayout(); - Geom::OptRect pbox = group->geometricBounds(); - for (SPItemView *v = group->display; v != NULL; v = v->next) { + Geom::OptRect pbox = this->geometricBounds(); + + for (SPItemView *v = this->display; v != NULL; v = v->next) { Inkscape::DrawingGroup *g = dynamic_cast(v->arenaitem); - group->_clearFlow(g); - g->setStyle(object->style); + this->_clearFlow(g); + g->setStyle(this->style); // pass the bbox of the flowtext object as paintbox (used for paintserver fills) - group->layout.show(g, pbox); + this->layout.show(g, pbox); } } -void CFlowtext::modified(unsigned int flags) { - SPFlowtext* object = this->spflowtext; - SPObject *ft = object; +void SPFlowtext::modified(unsigned int flags) { SPObject *region = NULL; - if (flags & SP_OBJECT_MODIFIED_FLAG) flags |= SP_OBJECT_PARENT_MODIFIED_FLAG; + if (flags & SP_OBJECT_MODIFIED_FLAG) { + flags |= SP_OBJECT_PARENT_MODIFIED_FLAG; + } + flags &= SP_OBJECT_MODIFIED_CASCADE; // FIXME: the below stanza is copied over from sp_text_modified, consider factoring it out if (flags & ( SP_OBJECT_STYLE_MODIFIED_FLAG )) { - SPFlowtext *text = SP_FLOWTEXT(object); + SPFlowtext *text = SP_FLOWTEXT(this); Geom::OptRect pbox = text->geometricBounds(); + for (SPItemView* v = text->display; v != NULL; v = v->next) { Inkscape::DrawingGroup *g = dynamic_cast(v->arenaitem); text->_clearFlow(g); - g->setStyle(object->style); + g->setStyle(this->style); text->layout.show(g, pbox); } } - for ( SPObject *o = ft->firstChild() ; o ; o = o->getNext() ) { + for ( SPObject *o = this->firstChild() ; o ; o = o->getNext() ) { if (SP_IS_FLOWREGION(o)) { region = o; break; @@ -188,36 +156,33 @@ void CFlowtext::modified(unsigned int flags) { } } -void CFlowtext::build(SPDocument* doc, Inkscape::XML::Node* repr) { - SPFlowtext* object = this->spflowtext; - - object->_requireSVGVersion(Inkscape::Version(1, 2)); +void SPFlowtext::build(SPDocument* doc, Inkscape::XML::Node* repr) { + this->_requireSVGVersion(Inkscape::Version(1, 2)); CItem::build(doc, repr); - object->readAttr( "inkscape:layoutOptions" ); // must happen after css has been read + this->readAttr( "inkscape:layoutOptions" ); // must happen after css has been read } -void CFlowtext::set(unsigned int key, const gchar* value) { - SPFlowtext* object = this->spflowtext; - SPFlowtext *group = (SPFlowtext *) object; - +void SPFlowtext::set(unsigned int key, const gchar* value) { switch (key) { case SP_ATTR_LAYOUT_OPTIONS: { // deprecated attribute, read for backward compatibility only //XML Tree being directly used while it shouldn't be. - SPCSSAttr *opts = sp_repr_css_attr(group->getRepr(), "inkscape:layoutOptions"); + SPCSSAttr *opts = sp_repr_css_attr(this->getRepr(), "inkscape:layoutOptions"); { gchar const *val = sp_repr_css_property(opts, "justification", NULL); - if (val != NULL && !object->style->text_align.set) { + + if (val != NULL && !this->style->text_align.set) { if ( strcmp(val, "0") == 0 || strcmp(val, "false") == 0 ) { - object->style->text_align.value = SP_CSS_TEXT_ALIGN_LEFT; + this->style->text_align.value = SP_CSS_TEXT_ALIGN_LEFT; } else { - object->style->text_align.value = SP_CSS_TEXT_ALIGN_JUSTIFY; + this->style->text_align.value = SP_CSS_TEXT_ALIGN_JUSTIFY; } - object->style->text_align.set = TRUE; - object->style->text_align.inherit = FALSE; - object->style->text_align.computed = object->style->text_align.value; + + this->style->text_align.set = TRUE; + this->style->text_align.inherit = FALSE; + this->style->text_align.computed = this->style->text_align.value; } } /* no equivalent css attribute for these two (yet) @@ -238,46 +203,52 @@ void CFlowtext::set(unsigned int key, const gchar* value) { */ { // This would probably translate to padding-left, if SPStyle had it. gchar const *val = sp_repr_css_property(opts, "par-indent", NULL); + if ( val == NULL ) { - group->par_indent = 0.0; + this->par_indent = 0.0; } else { - sp_repr_get_double((Inkscape::XML::Node*)opts, "par-indent", &group->par_indent); + sp_repr_get_double((Inkscape::XML::Node*)opts, "par-indent", &this->par_indent); } } + sp_repr_css_attr_unref(opts); - object->requestModified(SP_OBJECT_MODIFIED_FLAG); + this->requestModified(SP_OBJECT_MODIFIED_FLAG); break; } + default: CItem::set(key, value); break; } } -Inkscape::XML::Node* CFlowtext::write(Inkscape::XML::Document* doc, Inkscape::XML::Node* repr, guint flags) { - SPFlowtext* object = this->spflowtext; - +Inkscape::XML::Node* SPFlowtext::write(Inkscape::XML::Document* doc, Inkscape::XML::Node* repr, guint flags) { if ( flags & SP_OBJECT_WRITE_BUILD ) { if ( repr == NULL ) { repr = doc->createElement("svg:flowRoot"); } + GSList *l = NULL; - for (SPObject *child = object->firstChild() ; child ; child = child->getNext() ) { + + for (SPObject *child = this->firstChild() ; child ; child = child->getNext() ) { Inkscape::XML::Node *c_repr = NULL; + if ( SP_IS_FLOWDIV(child) || SP_IS_FLOWPARA(child) || SP_IS_FLOWREGION(child) || SP_IS_FLOWREGIONEXCLUDE(child)) { c_repr = child->updateRepr(doc, NULL, flags); } + if ( c_repr ) { l = g_slist_prepend(l, c_repr); } } + while ( l ) { repr->addChild((Inkscape::XML::Node *) l->data, NULL); Inkscape::GC::release((Inkscape::XML::Node *) l->data); l = g_slist_remove(l, l->data); } } else { - for (SPObject *child = object->firstChild() ; child ; child = child->getNext() ) { + for (SPObject *child = this->firstChild() ; child ; child = child->getNext() ) { if ( SP_IS_FLOWDIV(child) || SP_IS_FLOWPARA(child) || SP_IS_FLOWREGION(child) || SP_IS_FLOWREGIONEXCLUDE(child) ) { child->updateRepr(flags); } @@ -289,91 +260,79 @@ Inkscape::XML::Node* CFlowtext::write(Inkscape::XML::Document* doc, Inkscape::XM return repr; } -Geom::OptRect CFlowtext::bbox(Geom::Affine const &transform, SPItem::BBoxType type) { - SPFlowtext* item = this->spflowtext; - - SPFlowtext *group = SP_FLOWTEXT(item); - Geom::OptRect bbox = group->layout.bounds(transform); +Geom::OptRect SPFlowtext::bbox(Geom::Affine const &transform, SPItem::BBoxType type) { + Geom::OptRect bbox = this->layout.bounds(transform); // Add stroke width // FIXME this code is incorrect - if (bbox && type == SPItem::VISUAL_BBOX && !item->style->stroke.isNone()) { + if (bbox && type == SPItem::VISUAL_BBOX && !this->style->stroke.isNone()) { double scale = transform.descrim(); - bbox->expandBy(0.5 * item->style->stroke_width.computed * scale); + bbox->expandBy(0.5 * this->style->stroke_width.computed * scale); } + return bbox; } -void CFlowtext::print(SPPrintContext *ctx) { - SPFlowtext* item = this->spflowtext; - - SPFlowtext *group = SP_FLOWTEXT(item); +void SPFlowtext::print(SPPrintContext *ctx) { Geom::OptRect pbox, bbox, dbox; + pbox = this->geometricBounds(); + bbox = this->desktopVisualBounds(); + dbox = Geom::Rect::from_xywh(Geom::Point(0,0), this->document->getDimensions()); - pbox = item->geometricBounds(); - bbox = item->desktopVisualBounds(); - dbox = Geom::Rect::from_xywh(Geom::Point(0,0), item->document->getDimensions()); - Geom::Affine const ctm (item->i2dt_affine()); + Geom::Affine const ctm (this->i2dt_affine()); - group->layout.print(ctx, pbox, dbox, bbox, ctm); + this->layout.print(ctx, pbox, dbox, bbox, ctm); } -gchar* CFlowtext::description() { - SPFlowtext* item = this->spflowtext; - - Inkscape::Text::Layout const &layout = SP_FLOWTEXT(item)->layout; +gchar* SPFlowtext::description() { + Inkscape::Text::Layout const &layout = SP_FLOWTEXT(this)->layout; int const nChars = layout.iteratorToCharIndex(layout.end()); char const *trunc = (layout.inputTruncated()) ? _(" [truncated]") : ""; - if (SP_FLOWTEXT(item)->has_internal_frame()) { + if (SP_FLOWTEXT(this)->has_internal_frame()) { return g_strdup_printf(ngettext("Flowed text (%d character%s)", "Flowed text (%d characters%s)", nChars), nChars, trunc); } else { return g_strdup_printf(ngettext("Linked flowed text (%d character%s)", "Linked flowed text (%d characters%s)", nChars), nChars, trunc); } } -void CFlowtext::snappoints(std::vector &p, Inkscape::SnapPreferences const *snapprefs) { - SPFlowtext* item = this->spflowtext; - +void SPFlowtext::snappoints(std::vector &p, Inkscape::SnapPreferences const *snapprefs) { if (snapprefs->isTargetSnappable(Inkscape::SNAPTARGET_TEXT_BASELINE)) { // Choose a point on the baseline for snapping from or to, with the horizontal position // of this point depending on the text alignment (left vs. right) - Inkscape::Text::Layout const *layout = te_get_layout((SPItem *) item); + Inkscape::Text::Layout const *layout = te_get_layout((SPItem *) this); + if (layout != NULL && layout->outputExists()) { boost::optional pt = layout->baselineAnchorPoint(); + if (pt) { - p.push_back(Inkscape::SnapCandidatePoint((*pt) * item->i2dt_affine(), Inkscape::SNAPSOURCE_TEXT_ANCHOR, Inkscape::SNAPTARGET_TEXT_ANCHOR)); + p.push_back(Inkscape::SnapCandidatePoint((*pt) * this->i2dt_affine(), Inkscape::SNAPSOURCE_TEXT_ANCHOR, Inkscape::SNAPTARGET_TEXT_ANCHOR)); } } } } -Inkscape::DrawingItem* CFlowtext::show(Inkscape::Drawing &drawing, unsigned int key, unsigned int flags) { - SPFlowtext* item = this->spflowtext; - - SPFlowtext *group = (SPFlowtext *) item; +Inkscape::DrawingItem* SPFlowtext::show(Inkscape::Drawing &drawing, unsigned int key, unsigned int flags) { Inkscape::DrawingGroup *flowed = new Inkscape::DrawingGroup(drawing); flowed->setPickChildren(false); - flowed->setStyle(group->style); + flowed->setStyle(this->style); // pass the bbox of the flowtext object as paintbox (used for paintserver fills) - Geom::OptRect bbox = group->geometricBounds(); - group->layout.show(flowed, bbox); + Geom::OptRect bbox = this->geometricBounds(); + this->layout.show(flowed, bbox); return flowed; } -void CFlowtext::hide(unsigned int key) { +void SPFlowtext::hide(unsigned int key) { CItem::hide(key); } - /* * */ - void SPFlowtext::_buildLayoutInput(SPObject *root, Shape const *exclusion_shape, std::list *shapes, SPObject **pending_line_break_object) { Inkscape::Text::Layout::OptionalTextTagAttrs pi; @@ -446,13 +405,14 @@ void SPFlowtext::_buildLayoutInput(SPObject *root, Shape const *exclusion_shape, Shape* SPFlowtext::_buildExclusionShape() const { - Shape *shape = new Shape; - Shape *shape_temp = new Shape; + Shape *shape = new Shape(); + Shape *shape_temp = new Shape(); for (SPObject *child = children ; child ; child = child->getNext() ) { // RH: is it right that this shouldn't be recursive? if ( SP_IS_FLOWREGIONEXCLUDE(child) ) { SPFlowregionExclude *c_child = SP_FLOWREGIONEXCLUDE(child); + if ( c_child->computed && c_child->computed->hasEdges() ) { if (shape->hasEdges()) { shape_temp->Booleen(shape, c_child->computed, bool_op_union); @@ -463,7 +423,9 @@ Shape* SPFlowtext::_buildExclusionShape() const } } } + delete shape_temp; + return shape; } -- cgit v1.2.3 From 8073924aacdda310fb7492750f78d5389b3186af Mon Sep 17 00:00:00 2001 From: Markus Engel Date: Fri, 5 Apr 2013 22:45:01 +0200 Subject: Merged Item. (bzr r11608.1.81) --- src/sp-flowtext.cpp | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) (limited to 'src/sp-flowtext.cpp') diff --git a/src/sp-flowtext.cpp b/src/sp-flowtext.cpp index 8cdf52000..3b3d3cee7 100644 --- a/src/sp-flowtext.cpp +++ b/src/sp-flowtext.cpp @@ -43,9 +43,7 @@ namespace { bool flowtextRegistered = SPFactory::instance().registerObject("svg:flowRoot", createFlowtext); } -SPFlowtext::SPFlowtext() : SPItem(), CItem(this) { - delete this->citem; - this->citem = this; +SPFlowtext::SPFlowtext() : SPItem() { this->cobject = this; this->par_indent = 0; @@ -57,7 +55,7 @@ SPFlowtext::~SPFlowtext() { } void SPFlowtext::child_added(Inkscape::XML::Node* child, Inkscape::XML::Node* ref) { - CItem::child_added(child, ref); + SPItem::child_added(child, ref); this->requestModified(SP_OBJECT_MODIFIED_FLAG); } @@ -66,7 +64,7 @@ void SPFlowtext::child_added(Inkscape::XML::Node* child, Inkscape::XML::Node* re /* fixme: hide (Lauris) */ void SPFlowtext::remove_child(Inkscape::XML::Node* child) { - CItem::remove_child(child); + SPItem::remove_child(child); this->requestModified(SP_OBJECT_MODIFIED_FLAG); } @@ -75,7 +73,7 @@ void SPFlowtext::update(SPCtx* ctx, unsigned int flags) { SPItemCtx *ictx = (SPItemCtx *) ctx; SPItemCtx cctx = *ictx; - CItem::update(ctx, flags); + SPItem::update(ctx, flags); if (flags & SP_OBJECT_MODIFIED_FLAG) flags |= SP_OBJECT_PARENT_MODIFIED_FLAG; flags &= SP_OBJECT_MODIFIED_CASCADE; @@ -159,7 +157,7 @@ void SPFlowtext::modified(unsigned int flags) { void SPFlowtext::build(SPDocument* doc, Inkscape::XML::Node* repr) { this->_requireSVGVersion(Inkscape::Version(1, 2)); - CItem::build(doc, repr); + SPItem::build(doc, repr); this->readAttr( "inkscape:layoutOptions" ); // must happen after css has been read } @@ -217,7 +215,7 @@ void SPFlowtext::set(unsigned int key, const gchar* value) { } default: - CItem::set(key, value); + SPItem::set(key, value); break; } } @@ -255,7 +253,7 @@ Inkscape::XML::Node* SPFlowtext::write(Inkscape::XML::Document* doc, Inkscape::X } } - CItem::write(doc, repr, flags); + SPItem::write(doc, repr, flags); return repr; } @@ -326,7 +324,7 @@ Inkscape::DrawingItem* SPFlowtext::show(Inkscape::Drawing &drawing, unsigned int } void SPFlowtext::hide(unsigned int key) { - CItem::hide(key); + SPItem::hide(key); } -- cgit v1.2.3 From 27e2102f96a5554bcd5310ec11435d155773b279 Mon Sep 17 00:00:00 2001 From: Markus Engel Date: Sun, 7 Apr 2013 18:28:22 +0200 Subject: Merge Object and subclasses. Merging of SP- and C-classes complete. (bzr r11608.1.86) --- src/sp-flowtext.cpp | 2 -- 1 file changed, 2 deletions(-) (limited to 'src/sp-flowtext.cpp') diff --git a/src/sp-flowtext.cpp b/src/sp-flowtext.cpp index 3b3d3cee7..4ee0a64b1 100644 --- a/src/sp-flowtext.cpp +++ b/src/sp-flowtext.cpp @@ -44,8 +44,6 @@ namespace { } SPFlowtext::SPFlowtext() : SPItem() { - this->cobject = this; - this->par_indent = 0; new (&this->layout) Inkscape::Text::Layout(); } -- cgit v1.2.3 From 127543bae3c0a76770e197c7058a783dea18fe3e Mon Sep 17 00:00:00 2001 From: Markus Engel Date: Wed, 31 Jul 2013 23:23:10 +0200 Subject: Removed placement news / explicit destructor calls. (bzr r11608.1.113) --- src/sp-flowtext.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src/sp-flowtext.cpp') diff --git a/src/sp-flowtext.cpp b/src/sp-flowtext.cpp index 4ee0a64b1..c7ef579ac 100644 --- a/src/sp-flowtext.cpp +++ b/src/sp-flowtext.cpp @@ -45,11 +45,11 @@ namespace { SPFlowtext::SPFlowtext() : SPItem() { this->par_indent = 0; - new (&this->layout) Inkscape::Text::Layout(); + //new (&this->layout) Inkscape::Text::Layout(); } SPFlowtext::~SPFlowtext() { - this->layout.~Layout(); + //this->layout.~Layout(); } void SPFlowtext::child_added(Inkscape::XML::Node* child, Inkscape::XML::Node* ref) { -- cgit v1.2.3 From 2f017d2ef4974eba04515b9a155656ce9f2f7822 Mon Sep 17 00:00:00 2001 From: Markus Engel Date: Tue, 24 Sep 2013 23:32:23 +0200 Subject: Refactored SPUse. (bzr r11608.1.128) --- src/sp-flowtext.cpp | 58 +++++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 50 insertions(+), 8 deletions(-) (limited to 'src/sp-flowtext.cpp') diff --git a/src/sp-flowtext.cpp b/src/sp-flowtext.cpp index c7ef579ac..88564c0ac 100644 --- a/src/sp-flowtext.cpp +++ b/src/sp-flowtext.cpp @@ -28,6 +28,7 @@ #include "text-tag-attributes.h" #include "text-chemistry.h" #include "text-editing.h" +#include "sp-text.h" #include "livarot/Shape.h" @@ -203,7 +204,7 @@ void SPFlowtext::set(unsigned int key, const gchar* value) { if ( val == NULL ) { this->par_indent = 0.0; } else { - sp_repr_get_double((Inkscape::XML::Node*)opts, "par-indent", &this->par_indent); + this->par_indent = g_ascii_strtod(val, NULL); } } @@ -280,17 +281,20 @@ void SPFlowtext::print(SPPrintContext *ctx) { this->layout.print(ctx, pbox, dbox, bbox, ctm); } +const char* SPFlowtext::displayName() { + if (SP_FLOWTEXT(this)->has_internal_frame()) { + return _("Flowed Text"); + } else { + return _("Linked Flowed Text"); + } +} + gchar* SPFlowtext::description() { Inkscape::Text::Layout const &layout = SP_FLOWTEXT(this)->layout; int const nChars = layout.iteratorToCharIndex(layout.end()); - char const *trunc = (layout.inputTruncated()) ? _(" [truncated]") : ""; - if (SP_FLOWTEXT(this)->has_internal_frame()) { - return g_strdup_printf(ngettext("Flowed text (%d character%s)", "Flowed text (%d characters%s)", nChars), nChars, trunc); - } else { - return g_strdup_printf(ngettext("Linked flowed text (%d character%s)", "Linked flowed text (%d characters%s)", nChars), nChars, trunc); - } + return g_strdup_printf(ngettext(_("(%d character%s)"), _("(%d characters%s)"), nChars), nChars, trunc); } void SPFlowtext::snappoints(std::vector &p, Inkscape::SnapPreferences const *snapprefs) { @@ -578,7 +582,7 @@ SPItem *SPFlowtext::get_frame(SPItem *after) } if ( frame && SP_IS_USE(frame) ) { - frame = sp_use_get_original(SP_USE(frame)); + frame = SP_USE(frame)->get_original(); } } return frame; @@ -645,6 +649,44 @@ SPItem *create_flowtext_with_internal_frame (SPDesktop *desktop, Geom::Point p0, return ft_item; } +Geom::Affine SPFlowtext::set_transform (Geom::Affine const &xform) +{ + if ((this->_optimizeScaledText && !xform.withoutTranslation().isNonzeroUniformScale()) + || (!this->_optimizeScaledText && !xform.isNonzeroUniformScale())) { + this->_optimizeScaledText = false; + return xform; + } + this->_optimizeScaledText = false; + + SPText *text = reinterpret_cast(this); + + double const ex = xform.descrim(); + if (ex == 0) { + return xform; + } + + Geom::Affine ret(xform); + ret[0] /= ex; + ret[1] /= ex; + ret[2] /= ex; + ret[3] /= ex; + + // Adjust font size + text->_adjustFontsizeRecursive (this, ex); + + // Adjust stroke width + this->adjust_stroke_width_recursive (ex); + + // Adjust pattern fill + this->adjust_pattern(xform * ret.inverse()); + + // Adjust gradient fill + this->adjust_gradient(xform * ret.inverse()); + + this->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG | SP_TEXT_LAYOUT_MODIFIED_FLAG); + + return ret; +} /* Local Variables: -- cgit v1.2.3 From 45bdb1d8bdfe52de31ca28a2a26d4d1204bb9961 Mon Sep 17 00:00:00 2001 From: buliabyak <> Date: Sat, 28 Sep 2013 11:04:26 -0300 Subject: on hiding, texts must _clearFlow to release arena items, otherwise they leak (bzr r12608) --- src/sp-flowtext.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'src/sp-flowtext.cpp') diff --git a/src/sp-flowtext.cpp b/src/sp-flowtext.cpp index 88564c0ac..266e9dfe0 100644 --- a/src/sp-flowtext.cpp +++ b/src/sp-flowtext.cpp @@ -326,7 +326,12 @@ Inkscape::DrawingItem* SPFlowtext::show(Inkscape::Drawing &drawing, unsigned int } void SPFlowtext::hide(unsigned int key) { - SPItem::hide(key); + for (SPItemView* v = this->display; v != NULL; v = v->next) { + if (v->key == key) { + Inkscape::DrawingGroup *g = dynamic_cast(v->arenaitem); + this->_clearFlow(g); + } + } } -- cgit v1.2.3 From 87d93e27330577c2fd632dbaccbd3103884aa590 Mon Sep 17 00:00:00 2001 From: Krzysztof Kosi??ski Date: Tue, 1 Oct 2013 15:25:44 +0200 Subject: Comprehensive fix for the issues with disappearing filtered objects. Fixes #304407 and possibly a few other bugs. Revert incorrect _item_bbox changes from r12528. Fixed bugs: - https://launchpad.net/bugs/304407 (bzr r12648) --- src/sp-flowtext.cpp | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) (limited to 'src/sp-flowtext.cpp') diff --git a/src/sp-flowtext.cpp b/src/sp-flowtext.cpp index 266e9dfe0..49360f9d9 100644 --- a/src/sp-flowtext.cpp +++ b/src/sp-flowtext.cpp @@ -72,10 +72,11 @@ void SPFlowtext::update(SPCtx* ctx, unsigned int flags) { SPItemCtx *ictx = (SPItemCtx *) ctx; SPItemCtx cctx = *ictx; - SPItem::update(ctx, flags); - - if (flags & SP_OBJECT_MODIFIED_FLAG) flags |= SP_OBJECT_PARENT_MODIFIED_FLAG; - flags &= SP_OBJECT_MODIFIED_CASCADE; + unsigned childflags = flags; + if (flags & SP_OBJECT_MODIFIED_FLAG) { + childflags |= SP_OBJECT_PARENT_MODIFIED_FLAG; + } + childflags &= SP_OBJECT_MODIFIED_CASCADE; GSList *l = NULL; @@ -90,20 +91,22 @@ void SPFlowtext::update(SPCtx* ctx, unsigned int flags) { SPObject *child = SP_OBJECT(l->data); l = g_slist_remove(l, child); - if (flags || (child->uflags & (SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_CHILD_MODIFIED_FLAG))) { + if (childflags || (child->uflags & (SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_CHILD_MODIFIED_FLAG))) { if (SP_IS_ITEM(child)) { SPItem const &chi = *SP_ITEM(child); cctx.i2doc = chi.transform * ictx->i2doc; cctx.i2vp = chi.transform * ictx->i2vp; - child->updateDisplay((SPCtx *)&cctx, flags); + child->updateDisplay((SPCtx *)&cctx, childflags); } else { - child->updateDisplay(ctx, flags); + child->updateDisplay(ctx, childflags); } } sp_object_unref(child); } + SPItem::update(ctx, flags); + this->rebuildLayout(); Geom::OptRect pbox = this->geometricBounds(); -- cgit v1.2.3 From 73edade30f70b4c0ad94c9561b4e4ec0675465b0 Mon Sep 17 00:00:00 2001 From: Markus Engel Date: Sun, 27 Oct 2013 00:00:51 +0200 Subject: Added some consts. (bzr r12729) --- src/sp-flowtext.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'src/sp-flowtext.cpp') diff --git a/src/sp-flowtext.cpp b/src/sp-flowtext.cpp index 49360f9d9..0331df312 100644 --- a/src/sp-flowtext.cpp +++ b/src/sp-flowtext.cpp @@ -260,7 +260,7 @@ Inkscape::XML::Node* SPFlowtext::write(Inkscape::XML::Document* doc, Inkscape::X return repr; } -Geom::OptRect SPFlowtext::bbox(Geom::Affine const &transform, SPItem::BBoxType type) { +Geom::OptRect SPFlowtext::bbox(Geom::Affine const &transform, SPItem::BBoxType type) const { Geom::OptRect bbox = this->layout.bounds(transform); // Add stroke width @@ -284,7 +284,7 @@ void SPFlowtext::print(SPPrintContext *ctx) { this->layout.print(ctx, pbox, dbox, bbox, ctm); } -const char* SPFlowtext::displayName() { +const char* SPFlowtext::displayName() const { if (SP_FLOWTEXT(this)->has_internal_frame()) { return _("Flowed Text"); } else { @@ -292,7 +292,7 @@ const char* SPFlowtext::displayName() { } } -gchar* SPFlowtext::description() { +gchar* SPFlowtext::description() const { Inkscape::Text::Layout const &layout = SP_FLOWTEXT(this)->layout; int const nChars = layout.iteratorToCharIndex(layout.end()); char const *trunc = (layout.inputTruncated()) ? _(" [truncated]") : ""; @@ -300,7 +300,7 @@ gchar* SPFlowtext::description() { return g_strdup_printf(ngettext(_("(%d character%s)"), _("(%d characters%s)"), nChars), nChars, trunc); } -void SPFlowtext::snappoints(std::vector &p, Inkscape::SnapPreferences const *snapprefs) { +void SPFlowtext::snappoints(std::vector &p, Inkscape::SnapPreferences const *snapprefs) const { if (snapprefs->isTargetSnappable(Inkscape::SNAPTARGET_TEXT_BASELINE)) { // Choose a point on the baseline for snapping from or to, with the horizontal position // of this point depending on the text alignment (left vs. right) -- cgit v1.2.3 From 4aa096a5a8537b6e28c4502d817e546b8b7fdd9b Mon Sep 17 00:00:00 2001 From: Kris De Gussem Date: Sun, 27 Oct 2013 20:57:50 +0100 Subject: "fix" some "unused parameter" warnings (bzr r12736) --- src/sp-flowtext.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/sp-flowtext.cpp') diff --git a/src/sp-flowtext.cpp b/src/sp-flowtext.cpp index 0331df312..fee320e90 100644 --- a/src/sp-flowtext.cpp +++ b/src/sp-flowtext.cpp @@ -316,7 +316,7 @@ void SPFlowtext::snappoints(std::vector &p, Inksca } } -Inkscape::DrawingItem* SPFlowtext::show(Inkscape::Drawing &drawing, unsigned int key, unsigned int flags) { +Inkscape::DrawingItem* SPFlowtext::show(Inkscape::Drawing &drawing, unsigned int /*key*/, unsigned int /*flags*/) { Inkscape::DrawingGroup *flowed = new Inkscape::DrawingGroup(drawing); flowed->setPickChildren(false); flowed->setStyle(this->style); -- cgit v1.2.3 From 0093848c04e77a838a69094f801c511bb152402a Mon Sep 17 00:00:00 2001 From: Nicolas Dufour Date: Wed, 6 Nov 2013 13:26:57 +0100 Subject: Partial fix for Bug #1247985 (Incorrect implementation of plural forms). Fixed bugs: - https://launchpad.net/bugs/1247985 (bzr r12780) --- src/sp-flowtext.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/sp-flowtext.cpp') diff --git a/src/sp-flowtext.cpp b/src/sp-flowtext.cpp index fee320e90..0cadb4345 100644 --- a/src/sp-flowtext.cpp +++ b/src/sp-flowtext.cpp @@ -297,7 +297,7 @@ gchar* SPFlowtext::description() const { int const nChars = layout.iteratorToCharIndex(layout.end()); char const *trunc = (layout.inputTruncated()) ? _(" [truncated]") : ""; - return g_strdup_printf(ngettext(_("(%d character%s)"), _("(%d characters%s)"), nChars), nChars, trunc); + return g_strdup_printf(ngettext("(%d character%s)", "(%d characters%s)", nChars), nChars, trunc); } void SPFlowtext::snappoints(std::vector &p, Inkscape::SnapPreferences const *snapprefs) const { -- cgit v1.2.3 From 736d0988d1285e19838251c62d6258209f2c5683 Mon Sep 17 00:00:00 2001 From: Nicolas Dufour Date: Mon, 10 Feb 2014 09:00:55 +0100 Subject: Fixing format-security errors in text debug code. (bzr r13017) --- src/sp-flowtext.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/sp-flowtext.cpp') diff --git a/src/sp-flowtext.cpp b/src/sp-flowtext.cpp index 0cadb4345..b4fd54ee4 100644 --- a/src/sp-flowtext.cpp +++ b/src/sp-flowtext.cpp @@ -447,7 +447,7 @@ void SPFlowtext::rebuildLayout() _buildLayoutInput(this, exclusion_shape, &shapes, &pending_line_break_object); delete exclusion_shape; layout.calculateFlow(); - //g_print(layout.dumpAsText().c_str()); + //g_print("%s", layout.dumpAsText().c_str()); } void SPFlowtext::_clearFlow(Inkscape::DrawingGroup *in_arena) -- cgit v1.2.3