X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=src%2Fsp-flowregion.cpp;h=680589b551e4090e0336703a4ec4f69f6291c1ec;hb=6302669b796eadd6994ecdc2e70f0119b29194dd;hp=3981aa9ba4874fbd7daff7abc69055ec2ecba0ba;hpb=f1244c7e85def8dc339fc92a29c0bd26ffc247d7;p=inkscape.git diff --git a/src/sp-flowregion.cpp b/src/sp-flowregion.cpp index 3981aa9ba..680589b55 100644 --- a/src/sp-flowregion.cpp +++ b/src/sp-flowregion.cpp @@ -1,5 +1,3 @@ -#define __SP_FLOWREGION_C__ - /* */ @@ -15,6 +13,8 @@ #include "sp-use.h" #include "style.h" #include "document.h" +#include "sp-title.h" +#include "sp-desc.h" #include "sp-flowregion.h" @@ -32,7 +32,7 @@ static void sp_flowregion_child_added (SPObject * object, Inkscape::XML::Node * static void sp_flowregion_remove_child (SPObject * object, Inkscape::XML::Node * child); static void sp_flowregion_update (SPObject *object, SPCtx *ctx, guint flags); static void sp_flowregion_modified (SPObject *object, guint flags); -static Inkscape::XML::Node *sp_flowregion_write (SPObject *object, Inkscape::XML::Node *repr, guint flags); +static Inkscape::XML::Node *sp_flowregion_write (SPObject *object, Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, guint flags); static gchar * sp_flowregion_description (SPItem * item); @@ -46,14 +46,14 @@ static void sp_flowregionexclude_child_added (SPObject * object, Inkscape::XML:: static void sp_flowregionexclude_remove_child (SPObject * object, Inkscape::XML::Node * child); static void sp_flowregionexclude_update (SPObject *object, SPCtx *ctx, guint flags); static void sp_flowregionexclude_modified (SPObject *object, guint flags); -static Inkscape::XML::Node *sp_flowregionexclude_write (SPObject *object, Inkscape::XML::Node *repr, guint flags); +static Inkscape::XML::Node *sp_flowregionexclude_write (SPObject *object, Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, guint flags); static gchar * sp_flowregionexclude_description (SPItem * item); static SPItemClass * flowregionexclude_parent_class; -static void GetDest(SPObject* child,Shape **computed,NR::Matrix itr_mat); +static void GetDest(SPObject* child,Shape **computed); GType sp_flowregion_get_type (void) @@ -141,108 +141,101 @@ sp_flowregion_remove_child (SPObject * object, Inkscape::XML::Node * child) } -static void -sp_flowregion_update (SPObject *object, SPCtx *ctx, unsigned int flags) +static void sp_flowregion_update(SPObject *object, SPCtx *ctx, unsigned int flags) { - SPFlowregion *group; - SPObject *child; - SPItemCtx *ictx, cctx; - GSList *l; + SPFlowregion *group = SP_FLOWREGION(object); - group = SP_FLOWREGION (object); - ictx = (SPItemCtx *) ctx; - cctx = *ictx; + SPItemCtx *ictx = reinterpret_cast(ctx); + SPItemCtx cctx = *ictx; - if (((SPObjectClass *) (flowregion_parent_class))->update) - ((SPObjectClass *) (flowregion_parent_class))->update (object, ctx, flags); + if (((SPObjectClass *) (flowregion_parent_class))->update) { + ((SPObjectClass *) (flowregion_parent_class))->update (object, ctx, flags); + } - if (flags & SP_OBJECT_MODIFIED_FLAG) flags |= SP_OBJECT_PARENT_MODIFIED_FLAG; - flags &= SP_OBJECT_MODIFIED_CASCADE; + if (flags & SP_OBJECT_MODIFIED_FLAG) { + flags |= SP_OBJECT_PARENT_MODIFIED_FLAG; + } + flags &= SP_OBJECT_MODIFIED_CASCADE; - l = NULL; - for (child = sp_object_first_child(object) ; child != NULL ; child = SP_OBJECT_NEXT(child) ) { - g_object_ref (G_OBJECT (child)); - l = g_slist_prepend (l, child); - } - l = g_slist_reverse (l); - while (l) { - 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); - cctx.i2doc = chi.transform * ictx->i2doc; - cctx.i2vp = chi.transform * ictx->i2vp; - child->updateDisplay((SPCtx *)&cctx, flags); - } else { - child->updateDisplay(ctx, flags); - } - } - g_object_unref (G_OBJECT (child)); - } + GSList *l = NULL; + for ( SPObject *child = object->firstChild() ; child ; child = child->getNext() ) { + g_object_ref( G_OBJECT(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); + cctx.i2doc = chi.transform * ictx->i2doc; + cctx.i2vp = chi.transform * ictx->i2vp; + child->updateDisplay((SPCtx *)&cctx, flags); + } else { + child->updateDisplay(ctx, flags); + } + } + g_object_unref (G_OBJECT(child)); + } - group->UpdateComputed(); + group->UpdateComputed(); } -void SPFlowregion::UpdateComputed(void) +void SPFlowregion::UpdateComputed(void) { - SPObject* object=SP_OBJECT(this); - - NR::Matrix itr_mat=sp_item_i2root_affine (SP_ITEM(object)); - itr_mat=itr_mat.inverse(); - - for (std::vector::iterator it = computed.begin() ; it != computed.end() ; it++) + for (std::vector::iterator it = computed.begin() ; it != computed.end() ; it++) { delete *it; + } computed.clear(); - for (SPObject* child = sp_object_first_child(object) ; child != NULL ; child = SP_OBJECT_NEXT(child) ) { - Shape *shape = NULL; - GetDest(child,&shape,itr_mat); + for (SPObject* child = firstChild() ; child ; child = child->getNext() ) { + Shape *shape = 0; + GetDest(child, &shape); computed.push_back(shape); - } + } } -static void -sp_flowregion_modified (SPObject *object, guint flags) +static void sp_flowregion_modified(SPObject *object, guint flags) { - SPFlowregion *group; - SPObject *child; - GSList *l; - - group = SP_FLOWREGION (object); + SP_FLOWREGION(object); // ensure it is the proper type. - if (flags & SP_OBJECT_MODIFIED_FLAG) flags |= SP_OBJECT_PARENT_MODIFIED_FLAG; - flags &= SP_OBJECT_MODIFIED_CASCADE; + if (flags & SP_OBJECT_MODIFIED_FLAG) { + flags |= SP_OBJECT_PARENT_MODIFIED_FLAG; + } + flags &= SP_OBJECT_MODIFIED_CASCADE; - l = NULL; - for (child = sp_object_first_child(object) ; child != NULL ; child = SP_OBJECT_NEXT(child) ) { - g_object_ref (G_OBJECT (child)); - l = g_slist_prepend (l, child); - } - l = g_slist_reverse (l); - while (l) { - child = SP_OBJECT (l->data); - l = g_slist_remove (l, child); - if (flags || (child->mflags & (SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_CHILD_MODIFIED_FLAG))) { - child->emitModified(flags); - } - g_object_unref (G_OBJECT (child)); - } + GSList *l = NULL; + for ( SPObject *child = object->firstChild() ; child ; child = child->getNext() ) { + g_object_ref( G_OBJECT(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->mflags & (SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_CHILD_MODIFIED_FLAG))) { + child->emitModified(flags); + } + g_object_unref( G_OBJECT(child) ); + } } -static Inkscape::XML::Node * -sp_flowregion_write (SPObject *object, Inkscape::XML::Node *repr, guint flags) +static Inkscape::XML::Node *sp_flowregion_write(SPObject *object, Inkscape::XML::Document *xml_doc, Inkscape::XML::Node *repr, guint flags) { if (flags & SP_OBJECT_WRITE_BUILD) { - if ( repr == NULL ) { - Inkscape::XML::Document *xml_doc = sp_document_repr_doc(SP_OBJECT_DOCUMENT(object)); + if ( repr == NULL ) { repr = xml_doc->createElement("svg:flowRegion"); - } + } GSList *l = NULL; - for ( SPObject *child = sp_object_first_child(object) ; child != NULL; child = SP_OBJECT_NEXT(child) ) { - Inkscape::XML::Node *crepr = child->updateRepr(NULL, flags); - if (crepr) l = g_slist_prepend(l, crepr); + for ( SPObject *child = object->firstChild() ; child; child = child->getNext() ) { + if ( !SP_IS_TITLE(child) && !SP_IS_DESC(child) ) { + Inkscape::XML::Node *crepr = child->updateRepr(xml_doc, NULL, flags); + if (crepr) { + l = g_slist_prepend(l, crepr); + } + } } while (l) { @@ -252,19 +245,22 @@ sp_flowregion_write (SPObject *object, Inkscape::XML::Node *repr, guint flags) } } else { - for ( SPObject *child = sp_object_first_child(object) ; child != NULL; child = SP_OBJECT_NEXT(child) ) { - child->updateRepr(flags); + for ( SPObject *child = object->firstChild() ; child; child = child->getNext() ) { + if ( !SP_IS_TITLE(child) && !SP_IS_DESC(child) ) { + child->updateRepr(flags); + } } } - if (((SPObjectClass *) (flowregion_parent_class))->write) - ((SPObjectClass *) (flowregion_parent_class))->write (object, repr, flags); - - return repr; + if (((SPObjectClass *) (flowregion_parent_class))->write) { + ((SPObjectClass *) (flowregion_parent_class))->write (object, xml_doc, repr, flags); + } + + return repr; } -static gchar *sp_flowregion_description(SPItem *item) +static gchar *sp_flowregion_description(SPItem */*item*/) { // TRANSLATORS: "Flow region" is an area where text is allowed to flow return g_strdup_printf(_("Flow region")); @@ -361,105 +357,97 @@ sp_flowregionexclude_remove_child (SPObject * object, Inkscape::XML::Node * chil } -static void -sp_flowregionexclude_update (SPObject *object, SPCtx *ctx, unsigned int flags) +static void sp_flowregionexclude_update(SPObject *object, SPCtx *ctx, unsigned int flags) { - SPFlowregionExclude *group; - SPObject *child; - SPItemCtx *ictx, cctx; - GSList *l; + SPFlowregionExclude *group = SP_FLOWREGIONEXCLUDE (object); - group = SP_FLOWREGIONEXCLUDE (object); - ictx = (SPItemCtx *) ctx; - cctx = *ictx; + SPItemCtx *ictx = reinterpret_cast(ctx); + SPItemCtx cctx = *ictx; - if (((SPObjectClass *) (flowregionexclude_parent_class))->update) - ((SPObjectClass *) (flowregionexclude_parent_class))->update (object, ctx, flags); + if (((SPObjectClass *) (flowregionexclude_parent_class))->update) { + ((SPObjectClass *) (flowregionexclude_parent_class))->update (object, ctx, flags); + } - if (flags & SP_OBJECT_MODIFIED_FLAG) flags |= SP_OBJECT_PARENT_MODIFIED_FLAG; - flags &= SP_OBJECT_MODIFIED_CASCADE; + if (flags & SP_OBJECT_MODIFIED_FLAG) { + flags |= SP_OBJECT_PARENT_MODIFIED_FLAG; + } + flags &= SP_OBJECT_MODIFIED_CASCADE; - l = NULL; - for (child = sp_object_first_child(object) ; child != NULL ; child = SP_OBJECT_NEXT(child) ) { - g_object_ref (G_OBJECT (child)); - l = g_slist_prepend (l, child); - } - l = g_slist_reverse (l); - while (l) { - 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); - cctx.i2doc = chi.transform * ictx->i2doc; - cctx.i2vp = chi.transform * ictx->i2vp; - child->updateDisplay((SPCtx *)&cctx, flags); - } else { - child->updateDisplay(ctx, flags); - } - } - g_object_unref (G_OBJECT (child)); - } + GSList *l = NULL; + for ( SPObject *child = object->firstChild() ; child ; child = child->getNext() ) { + g_object_ref( G_OBJECT(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); + cctx.i2doc = chi.transform * ictx->i2doc; + cctx.i2vp = chi.transform * ictx->i2vp; + child->updateDisplay((SPCtx *)&cctx, flags); + } else { + child->updateDisplay(ctx, flags); + } + } + g_object_unref( G_OBJECT(child) ); + } - group->UpdateComputed(); + group->UpdateComputed(); } -void SPFlowregionExclude::UpdateComputed(void) -{ - SPObject* object=SP_OBJECT(this); - if (computed) { +void SPFlowregionExclude::UpdateComputed(void) +{ + if (computed) { delete computed; computed = NULL; } - NR::Matrix itr_mat=sp_item_i2root_affine (SP_ITEM(object)); - itr_mat=itr_mat.inverse(); - for (SPObject* child = sp_object_first_child(object) ; child != NULL ; child = SP_OBJECT_NEXT(child) ) { - GetDest(child,&computed,itr_mat); - } + for ( SPObject* child = firstChild() ; child ; child = child->getNext() ) { + GetDest(child, &computed); + } } -static void -sp_flowregionexclude_modified (SPObject *object, guint flags) +static void sp_flowregionexclude_modified(SPObject *object, guint flags) { - SPFlowregionExclude *group; - SPObject *child; - GSList *l; + SP_FLOWREGIONEXCLUDE(object); // Ensure it is the proper type - group = SP_FLOWREGIONEXCLUDE (object); - - if (flags & SP_OBJECT_MODIFIED_FLAG) flags |= SP_OBJECT_PARENT_MODIFIED_FLAG; - flags &= SP_OBJECT_MODIFIED_CASCADE; + if (flags & SP_OBJECT_MODIFIED_FLAG) { + flags |= SP_OBJECT_PARENT_MODIFIED_FLAG; + } + flags &= SP_OBJECT_MODIFIED_CASCADE; - l = NULL; - for (child = sp_object_first_child(object) ; child != NULL ; child = SP_OBJECT_NEXT(child) ) { - g_object_ref (G_OBJECT (child)); - l = g_slist_prepend (l, child); - } - l = g_slist_reverse (l); - while (l) { - child = SP_OBJECT (l->data); - l = g_slist_remove (l, child); - if (flags || (child->mflags & (SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_CHILD_MODIFIED_FLAG))) { - child->emitModified(flags); - } - g_object_unref (G_OBJECT (child)); - } + GSList *l = NULL; + for ( SPObject *child = object->firstChild() ; child ; child = child->getNext() ) { + g_object_ref( G_OBJECT(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->mflags & (SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_CHILD_MODIFIED_FLAG))) { + child->emitModified(flags); + } + g_object_unref( G_OBJECT(child) ); + } } -static Inkscape::XML::Node * -sp_flowregionexclude_write (SPObject *object, Inkscape::XML::Node *repr, guint flags) +static Inkscape::XML::Node *sp_flowregionexclude_write(SPObject *object, Inkscape::XML::Document *xml_doc, Inkscape::XML::Node *repr, guint flags) { if (flags & SP_OBJECT_WRITE_BUILD) { if ( repr == NULL ) { - Inkscape::XML::Document *xml_doc = sp_document_repr_doc(SP_OBJECT_DOCUMENT(object)); repr = xml_doc->createElement("svg:flowRegionExclude"); - } + } GSList *l = NULL; - for ( SPObject *child = sp_object_first_child(object) ; child != NULL; child = SP_OBJECT_NEXT(child) ) { - Inkscape::XML::Node *crepr = child->updateRepr(NULL, flags); - if (crepr) l = g_slist_prepend(l, crepr); + for ( SPObject *child = object->firstChild() ; child; child = child->getNext() ) { + Inkscape::XML::Node *crepr = child->updateRepr(xml_doc, NULL, flags); + if (crepr) { + l = g_slist_prepend(l, crepr); + } } while (l) { @@ -469,19 +457,20 @@ sp_flowregionexclude_write (SPObject *object, Inkscape::XML::Node *repr, guint f } } else { - for ( SPObject *child = sp_object_first_child(object) ; child != NULL; child = SP_OBJECT_NEXT(child) ) { + for ( SPObject *child = object->firstChild() ; child; child = child->getNext() ) { child->updateRepr(flags); } } - if (((SPObjectClass *) (flowregionexclude_parent_class))->write) - ((SPObjectClass *) (flowregionexclude_parent_class))->write (object, repr, flags); - - return repr; + if (((SPObjectClass *) (flowregionexclude_parent_class))->write) { + ((SPObjectClass *) (flowregionexclude_parent_class))->write (object, xml_doc, repr, flags); + } + + return repr; } -static gchar *sp_flowregionexclude_description(SPItem *item) +static gchar *sp_flowregionexclude_description(SPItem */*item*/) { /* TRANSLATORS: A region "cut out of" a flow region; text is not allowed to flow inside the * flow excluded region. flowRegionExclude in SVG 1.2: see @@ -508,27 +497,29 @@ static void UnionShape(Shape **base_shape, Shape const *add_shape) } } -static void GetDest(SPObject* child,Shape **computed,NR::Matrix itr_mat) +static void GetDest(SPObject* child,Shape **computed) { if ( child == NULL ) return; SPCurve *curve=NULL; + Geom::Matrix tr_mat; SPObject* u_child=child; if ( SP_IS_USE(u_child) ) { u_child=SP_USE(u_child)->child; + tr_mat = SP_ITEM(u_child)->getRelativeTransform(SP_OBJECT_PARENT(child)); + } else { + tr_mat = SP_ITEM(u_child)->transform; } if ( SP_IS_SHAPE (u_child) ) { - curve = sp_shape_get_curve (SP_SHAPE (u_child)); + curve = SP_SHAPE (u_child)->getCurve (); } else if ( SP_IS_TEXT (u_child) ) { curve = SP_TEXT (u_child)->getNormalizedBpath (); } if ( curve ) { Path* temp=new Path; - NR::Matrix tr_mat=sp_item_i2root_affine (SP_ITEM(u_child)); - tr_mat=itr_mat*tr_mat; - temp->LoadArtBPath(SP_CURVE_BPATH(curve),tr_mat,true); + temp->LoadPathVector(curve->get_pathvector(), tr_mat, true); Shape* n_shp=new Shape; temp->Convert(0.25); temp->Fill(n_shp,0); @@ -543,9 +534,19 @@ static void GetDest(SPObject* child,Shape **computed,NR::Matrix itr_mat) delete uncross; delete n_shp; delete temp; - sp_curve_unref(curve); + curve->unref(); } else { // printf("no curve\n"); } } +/* + Local Variables: + mode:c++ + c-file-style:"stroustrup" + c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +)) + indent-tabs-mode:nil + fill-column:99 + End: +*/ +// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:fileencoding=utf-8:textwidth=99 :