void sp_conn_end_pair_build(SPObject *object) { sp_object_read_attr(object, "inkscape:connector-type"); sp_object_read_attr(object, "inkscape:connection-start"); sp_object_read_attr(object, "inkscape:connection-end"); }
static void sp_guide_build (SPObject * object, SPDocument * document, SPRepr * repr) { if (((SPObjectClass *) (parent_class))->build) (* ((SPObjectClass *) (parent_class))->build) (object, document, repr); sp_object_read_attr (object, "orientation"); sp_object_read_attr (object, "position"); }
static void sp_circle_build (SPObject *object, SPDocument *document, SPRepr *repr) { if (((SPObjectClass *) circle_parent_class)->build) (* ((SPObjectClass *) circle_parent_class)->build) (object, document, repr); sp_object_read_attr (object, "cx"); sp_object_read_attr (object, "cy"); sp_object_read_attr (object, "r"); }
static void sp_line_build (SPObject * object, SPDocument * document, Inkscape::XML::Node * repr) { if (((SPObjectClass *) parent_class)->build) { ((SPObjectClass *) parent_class)->build (object, document, repr); } sp_object_read_attr (object, "x1"); sp_object_read_attr (object, "y1"); sp_object_read_attr (object, "x2"); sp_object_read_attr (object, "y2"); }
/** * Reads the Inkscape::XML::Node, and initializes SPFeTurbulence variables. For this to get called, * our name must be associated with a repr via "sp_object_type_register". Best done through * sp-object-repr.cpp's repr_name_entries array. */ static void sp_feTurbulence_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr) { if (((SPObjectClass *) feTurbulence_parent_class)->build) { ((SPObjectClass *) feTurbulence_parent_class)->build(object, document, repr); } /*LOAD ATTRIBUTES FROM REPR HERE*/ sp_object_read_attr(object, "baseFrequency"); sp_object_read_attr(object, "numOctaves"); sp_object_read_attr(object, "seed"); sp_object_read_attr(object, "stitchTiles"); sp_object_read_attr(object, "type"); }
/** * Reads the Inkscape::XML::Node, and initializes SPPointLight variables. For this to get called, * our name must be associated with a repr via "sp_object_type_register". Best done through * sp-object-repr.cpp's repr_name_entries array. */ static void sp_fepointlight_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr) { if (((SPObjectClass *) fePointLight_parent_class)->build) { ((SPObjectClass *) fePointLight_parent_class)->build(object, document, repr); } //Read values of key attributes from XML nodes into object. sp_object_read_attr(object, "x"); sp_object_read_attr(object, "y"); sp_object_read_attr(object, "z"); //is this necessary? sp_document_add_resource(document, "fepointlight", object); }
static void sp_mask_build (SPObject *object, SPDocument *document, SPRepr *repr) { SPMask *mask; mask = SP_MASK (object); if (((SPObjectClass *) parent_class)->build) ((SPObjectClass *) parent_class)->build (object, document, repr); sp_object_read_attr (object, "maskUnits"); sp_object_read_attr (object, "maskContentUnits"); /* Register ourselves */ sp_document_add_resource (document, "mask", object); }
static void sp_polygon_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr) { if (((SPObjectClass *) parent_class)->build) { ((SPObjectClass *) parent_class)->build(object, document, repr); } sp_object_read_attr(object, "points"); }
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); } sp_object_read_attr(object, "unicode"); sp_object_read_attr(object, "glyph-name"); sp_object_read_attr(object, "d"); sp_object_read_attr(object, "orientation"); sp_object_read_attr(object, "arabic-form"); sp_object_read_attr(object, "lang"); sp_object_read_attr(object, "horiz-adv-x"); sp_object_read_attr(object, "vert-origin-x"); sp_object_read_attr(object, "vert-origin-y"); sp_object_read_attr(object, "vert-adv-y"); }
/** * * Receives update notifications. * */ static void sp_fepointlight_update(SPObject *object, SPCtx *ctx, guint flags) { SPFePointLight *fePointLight = SP_FEPOINTLIGHT(object); (void)fePointLight; if (flags & SP_OBJECT_MODIFIED_FLAG) { /* do something to trigger redisplay, updates? */ sp_object_read_attr(object, "x"); sp_object_read_attr(object, "y"); sp_object_read_attr(object, "z"); } if (((SPObjectClass *) fePointLight_parent_class)->update) { ((SPObjectClass *) fePointLight_parent_class)->update(object, ctx, flags); } }
static void sp_textpath_build(SPObject *object, SPDocument *doc, Inkscape::XML::Node *repr) { //SPTextPath *textpath = SP_TEXTPATH(object); sp_object_read_attr(object, "x"); sp_object_read_attr(object, "y"); sp_object_read_attr(object, "dx"); sp_object_read_attr(object, "dy"); sp_object_read_attr(object, "rotate"); sp_object_read_attr(object, "startOffset"); sp_object_read_attr(object, "xlink:href"); bool no_content=true; for (Inkscape::XML::Node* rch = repr->firstChild() ; rch != NULL; rch = rch->next()) { if ( rch->type() == Inkscape::XML::TEXT_NODE ) {no_content=false;break;} } if ( no_content ) { Inkscape::XML::Document *xml_doc = sp_document_repr_doc(doc); Inkscape::XML::Node* rch = xml_doc->createTextNode(""); repr->addChild(rch, NULL); } if (((SPObjectClass *) textpath_parent_class)->build) ((SPObjectClass *) textpath_parent_class)->build(object, doc, repr); }
/** * Reads the Inkscape::XML::Node, and initializes SPFeImage variables. For this to get called, * our name must be associated with a repr via "sp_object_type_register". Best done through * sp-object-repr.cpp's repr_name_entries array. */ static void sp_feImage_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr) { // Save document reference so we can load images with relative paths. SPFeImage *feImage = SP_FEIMAGE(object); feImage->document = document; if (((SPObjectClass *) feImage_parent_class)->build) { ((SPObjectClass *) feImage_parent_class)->build(object, document, repr); } /*LOAD ATTRIBUTES FROM REPR HERE*/ sp_object_read_attr(object, "x"); sp_object_read_attr(object, "y"); sp_object_read_attr(object, "width"); sp_object_read_attr(object, "height"); sp_object_read_attr(object, "xlink:href"); }
static void sp_clippath_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr) { if (((SPObjectClass *) parent_class)->build) ((SPObjectClass *) parent_class)->build(object, document, repr); sp_object_read_attr(object, "clipPathUnits"); /* Register ourselves */ sp_document_add_resource(document, "clipPath", object); }
/** * Reads the Inkscape::XML::Node, and initializes SPFeComposite variables. For this to get called, * our name must be associated with a repr via "sp_object_type_register". Best done through * sp-object-repr.cpp's repr_name_entries array. */ static void sp_feComposite_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr) { if (((SPObjectClass *) feComposite_parent_class)->build) { ((SPObjectClass *) feComposite_parent_class)->build(object, document, repr); } SPFeComposite *comp = SP_FECOMPOSITE(object); sp_object_read_attr(object, "operator"); if (comp->composite_operator == COMPOSITE_ARITHMETIC) { sp_object_read_attr(object, "k1"); sp_object_read_attr(object, "k2"); sp_object_read_attr(object, "k3"); sp_object_read_attr(object, "k4"); } sp_object_read_attr(object, "in2"); /* Unlike normal in, in2 is required attribute. Make sure, we can call * it by some name. */ if (comp->in2 == Inkscape::Filters::NR_FILTER_SLOT_NOT_SET || comp->in2 == Inkscape::Filters::NR_FILTER_UNNAMED_SLOT) { SPFilter *parent = SP_FILTER(object->parent); comp->in2 = sp_filter_primitive_name_previous_out(comp); repr->setAttribute("in2", sp_filter_name_for_image(parent, comp->in2)); } }
/** * Reads the Inkscape::XML::Node, and initializes SPFeBlend variables. For this to get called, * our name must be associated with a repr via "sp_object_type_register". Best done through * sp-object-repr.cpp's repr_name_entries array. */ static void sp_feBlend_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr) { SPFeBlend *blend = SP_FEBLEND(object); if (((SPObjectClass *) feBlend_parent_class)->build) { ((SPObjectClass *) feBlend_parent_class)->build(object, document, repr); } /*LOAD ATTRIBUTES FROM REPR HERE*/ sp_object_read_attr(object, "mode"); sp_object_read_attr(object, "in2"); /* Unlike normal in, in2 is required attribute. Make sure, we can call * it by some name. */ if (blend->in2 == Inkscape::Filters::NR_FILTER_SLOT_NOT_SET || blend->in2 == Inkscape::Filters::NR_FILTER_UNNAMED_SLOT) { SPFilter *parent = SP_FILTER(object->parent); blend->in2 = sp_filter_primitive_name_previous_out(blend); repr->setAttribute("in2", sp_filter_name_for_image(parent, blend->in2)); } }
/** * * Receives update notifications. * */ 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? */ sp_object_read_attr(object, "unicode"); sp_object_read_attr(object, "glyph-name"); sp_object_read_attr(object, "d"); sp_object_read_attr(object, "orientation"); sp_object_read_attr(object, "arabic-form"); sp_object_read_attr(object, "lang"); sp_object_read_attr(object, "horiz-adv-x"); sp_object_read_attr(object, "vert-origin-x"); sp_object_read_attr(object, "vert-origin-y"); sp_object_read_attr(object, "vert-adv-y"); } if (((SPObjectClass *) parent_class)->update) { ((SPObjectClass *) parent_class)->update(object, ctx, flags); } }
static void sp_clippath_build (SPObject *object, SPDocument *document, SPRepr *repr) { SPClipPath *cp; cp = SP_CLIPPATH (object); if (((SPObjectClass *) parent_class)->build) ((SPObjectClass *) parent_class)->build (object, document, repr); sp_object_read_attr (object, "clipPathUnits"); /* Register ourselves */ sp_document_add_resource (document, "clipPath", object); }
/** * Receives update notifications. */ static void sp_feBlend_update(SPObject *object, SPCtx *ctx, guint flags) { SPFeBlend *blend = SP_FEBLEND(object); if (flags & SP_OBJECT_MODIFIED_FLAG) { sp_object_read_attr(object, "mode"); sp_object_read_attr(object, "in2"); } /* Unlike normal in, in2 is required attribute. Make sure, we can call * it by some name. */ if (blend->in2 == Inkscape::Filters::NR_FILTER_SLOT_NOT_SET || blend->in2 == Inkscape::Filters::NR_FILTER_UNNAMED_SLOT) { SPFilter *parent = SP_FILTER(object->parent); blend->in2 = sp_filter_primitive_name_previous_out(blend); object->repr->setAttribute("in2", sp_filter_name_for_image(parent, blend->in2)); } if (((SPObjectClass *) feBlend_parent_class)->update) { ((SPObjectClass *) feBlend_parent_class)->update(object, ctx, flags); } }
static void sp_spiral_build (SPObject * object, SPDocument * document, SPRepr * repr) { if (((SPObjectClass *) parent_class)->build) ((SPObjectClass *) parent_class)->build (object, document, repr); sp_object_read_attr (object, "sodipodi:cx"); sp_object_read_attr (object, "sodipodi:cy"); sp_object_read_attr (object, "sodipodi:expansion"); sp_object_read_attr (object, "sodipodi:revolution"); sp_object_read_attr (object, "sodipodi:radius"); sp_object_read_attr (object, "sodipodi:argument"); sp_object_read_attr (object, "sodipodi:t0"); }
static void sp_tspan_build(SPObject *object, SPDocument *doc, Inkscape::XML::Node *repr) { //SPTSpan *tspan = SP_TSPAN(object); sp_object_read_attr(object, "x"); sp_object_read_attr(object, "y"); sp_object_read_attr(object, "dx"); sp_object_read_attr(object, "dy"); sp_object_read_attr(object, "rotate"); sp_object_read_attr(object, "sodipodi:role"); if (((SPObjectClass *) tspan_parent_class)->build) ((SPObjectClass *) tspan_parent_class)->build(object, doc, repr); }
/** * Receives update notifications. */ static void sp_fontface_update(SPObject *object, SPCtx *ctx, guint flags) { if (flags & (SP_OBJECT_MODIFIED_FLAG)) { sp_object_read_attr(object, "font-family"); sp_object_read_attr(object, "font-style"); sp_object_read_attr(object, "font-variant"); sp_object_read_attr(object, "font-weight"); sp_object_read_attr(object, "font-stretch"); sp_object_read_attr(object, "font-size"); sp_object_read_attr(object, "unicode-range"); sp_object_read_attr(object, "units-per-em"); sp_object_read_attr(object, "panose-1"); sp_object_read_attr(object, "stemv"); sp_object_read_attr(object, "stemh"); sp_object_read_attr(object, "slope"); sp_object_read_attr(object, "cap-height"); sp_object_read_attr(object, "x-height"); sp_object_read_attr(object, "accent-height"); sp_object_read_attr(object, "ascent"); sp_object_read_attr(object, "descent"); sp_object_read_attr(object, "widths"); sp_object_read_attr(object, "bbox"); sp_object_read_attr(object, "ideographic"); sp_object_read_attr(object, "alphabetic"); sp_object_read_attr(object, "mathematical"); sp_object_read_attr(object, "hanging"); sp_object_read_attr(object, "v-ideographic"); sp_object_read_attr(object, "v-alphabetic"); sp_object_read_attr(object, "v-mathematical"); sp_object_read_attr(object, "v-hanging"); sp_object_read_attr(object, "underline-position"); sp_object_read_attr(object, "underline-thickness"); sp_object_read_attr(object, "strikethrough-position"); sp_object_read_attr(object, "strikethrough-thickness"); sp_object_read_attr(object, "overline-position"); sp_object_read_attr(object, "overline-thickness"); } if (((SPObjectClass *) parent_class)->update) { ((SPObjectClass *) parent_class)->update(object, ctx, flags); } }
static void sp_arc_build (SPObject *object, SPDocument *document, SPRepr *repr) { SPVersion version; if (((SPObjectClass *) arc_parent_class)->build) (* ((SPObjectClass *) arc_parent_class)->build) (object, document, repr); version = sp_object_get_sodipodi_version (object); if (sp_version_inside_range (version, 0, 0, 0, 25)) { /* Old spec violating arc attributes */ sp_object_read_attr (object, "cx"); sp_object_read_attr (object, "cy"); sp_object_read_attr (object, "rx"); sp_object_read_attr (object, "ry"); } else { /* New attributes */ sp_object_read_attr (object, "sodipodi:cx"); sp_object_read_attr (object, "sodipodi:cy"); sp_object_read_attr (object, "sodipodi:rx"); sp_object_read_attr (object, "sodipodi:ry"); } sp_object_read_attr (object, "sodipodi:start"); sp_object_read_attr (object, "sodipodi:end"); sp_object_read_attr (object, "sodipodi:open"); if (sp_version_inside_range (version, 0, 0, 0, 25)) { /* fixme: I am 99.9% sure we can do this here safely, but check nevertheless (Lauris) */ sp_arc_write (object, repr, SP_OBJECT_WRITE_EXT); sp_repr_set_attr (repr, "cx", NULL); sp_repr_set_attr (repr, "cy", NULL); sp_repr_set_attr (repr, "rx", NULL); sp_repr_set_attr (repr, "ry", NULL); } }
void sp_sel_trans_ungrab (SPSelTrans * seltrans) { SPItem * item; const GSList * l; gchar tstr[80]; NRPointD p; unsigned int updh; g_return_if_fail (seltrans->grabbed); updh = TRUE; if (!seltrans->empty && seltrans->changed) { l = sp_selection_item_list (SP_DT_SELECTION (seltrans->desktop)); tstr[79] = '\0'; while (l != NULL) { item = SP_ITEM (l->data); /* fixme: We do not have to set it here (Lauris) */ if (seltrans->show == SP_SELTRANS_SHOW_OUTLINE) { NRMatrixF i2d, i2dnew; sp_item_i2d_affine (item, &i2d); nr_matrix_multiply_ffd (&i2dnew, &i2d, &seltrans->current); sp_item_set_i2d_affine (item, &i2dnew); } if (seltrans->transform == SP_SELTRANS_TRANSFORM_OPTIMIZE) { sp_item_write_transform (item, SP_OBJECT_REPR (item), &item->transform); /* because item/repr affines may be out of sync, invoke reread */ /* fixme: We should test equality to avoid unnecessary rereads */ /* fixme: This probably is not needed (Lauris) */ sp_object_read_attr (SP_OBJECT (item), "transform"); } else { if (sp_svg_transform_write (tstr, 79, &item->transform)) { sp_repr_set_attr (SP_OBJECT (item)->repr, "transform", tstr); } else { sp_repr_set_attr (SP_OBJECT (item)->repr, "transform", NULL); } } l = l->next; } p = seltrans->center; seltrans->center.x = NR_MATRIX_DF_TRANSFORM_X (&seltrans->current, p.x, p.y); seltrans->center.y = NR_MATRIX_DF_TRANSFORM_Y (&seltrans->current, p.x, p.y); sp_document_done (SP_DT_DOCUMENT (seltrans->desktop)); sp_selection_changed (SP_DT_SELECTION (seltrans->desktop)); updh = FALSE; } if (seltrans->items) { int i; for (i = 0; i < seltrans->nitems; i++) sp_object_unref (SP_OBJECT (seltrans->items[i]), NULL); nr_free (seltrans->items); seltrans->items = NULL; } if (seltrans->transforms) { nr_free (seltrans->transforms); seltrans->transforms = NULL; } seltrans->nitems = 0; seltrans->grabbed = FALSE; seltrans->show_handles = TRUE; sp_canvas_item_hide (seltrans->norm); sp_canvas_item_hide (seltrans->grip); if (seltrans->show == SP_SELTRANS_SHOW_OUTLINE) { sp_canvas_item_hide (seltrans->l1); sp_canvas_item_hide (seltrans->l2); sp_canvas_item_hide (seltrans->l3); sp_canvas_item_hide (seltrans->l4); } sp_sel_trans_update_volatile_state (seltrans); if (updh) sp_sel_trans_update_handles (seltrans); if (seltrans->stamp_cache) { g_slist_free(seltrans->stamp_cache); seltrans->stamp_cache = NULL; } }
/** * Given a repr, this sets the data items in the path object such as * fill & style attributes, markers, and CSS properties. */ static void sp_path_build (SPObject *object, SPDocument *document, SPRepr *repr) { SPPath *path; SPVersion version; const gchar* marker_value; path = SP_PATH (object); version = sp_object_get_sodipodi_version (object); /* Fixes old Sodipodi nodetype to namespaced parameter */ if (sp_version_inside_range (version, 0, 0, 0, 25)) { const gchar *str; str = sp_repr_attr (repr, "INKSCAPE-PATH-NODE-TYPES"); sp_repr_set_attr (repr, "sodipodi:nodetypes", str); sp_repr_set_attr (repr, "INKSCAPE-PATH-NODE-TYPES", NULL); } sp_object_read_attr (object, "d"); /* Are these calls actually necessary? */ sp_object_read_attr (object, "marker"); sp_object_read_attr (object, "marker-start"); sp_object_read_attr (object, "marker-mid"); sp_object_read_attr (object, "marker-end"); if (sp_version_inside_range (version, 0, 0, 0, 25)) { SPShape *shape; SPCSSAttr *css; const gchar *val; gboolean changed; gboolean open; shape = (SPShape *) path; /* Remove fill from open paths for compatibility with inkscape < 0.25 */ /* And set fill-rule of closed paths to evenodd */ /* We force style rewrite at moment (Lauris) */ changed = TRUE; open = FALSE; if (shape->curve && shape->curve->bpath) { ArtBpath *bp; for (bp = shape->curve->bpath; bp->code != ART_END; bp++) { if (bp->code == ART_MOVETO_OPEN) { open = TRUE; break; } } } css = sp_repr_css_attr (repr, "style"); if (open) { val = sp_repr_css_property (css, "fill", NULL); if (val && strcmp (val, "none")) { sp_repr_css_set_property (css, "fill", "none"); changed = TRUE; } } else { val = sp_repr_css_property (css, "fill-rule", NULL); if (!val) { sp_repr_css_set_property (css, "fill-rule", "evenodd"); changed = TRUE; } } if (changed) { sp_repr_css_set (repr, css, "style"); } sp_repr_css_attr_unref (css); } if (((SPObjectClass *) parent_class)->build) { ((SPObjectClass *) parent_class)->build (object, document, repr); } }
static void sp_fontface_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr) { if (((SPObjectClass *) (parent_class))->build) { ((SPObjectClass *) (parent_class))->build(object, document, repr); } sp_object_read_attr(object, "font-family"); sp_object_read_attr(object, "font-style"); sp_object_read_attr(object, "font-variant"); sp_object_read_attr(object, "font-weight"); sp_object_read_attr(object, "font-stretch"); sp_object_read_attr(object, "font-size"); sp_object_read_attr(object, "unicode-range"); sp_object_read_attr(object, "units-per-em"); sp_object_read_attr(object, "panose-1"); sp_object_read_attr(object, "stem-v"); sp_object_read_attr(object, "stem-h"); sp_object_read_attr(object, "slope"); sp_object_read_attr(object, "cap-height"); sp_object_read_attr(object, "x-height"); sp_object_read_attr(object, "accent-height"); sp_object_read_attr(object, "ascent"); sp_object_read_attr(object, "descent"); sp_object_read_attr(object, "widths"); sp_object_read_attr(object, "bbox"); sp_object_read_attr(object, "ideographic"); sp_object_read_attr(object, "alphabetic"); sp_object_read_attr(object, "mathematical"); sp_object_read_attr(object, "ranging"); sp_object_read_attr(object, "v-ideogaphic"); sp_object_read_attr(object, "v-alphabetic"); sp_object_read_attr(object, "v-mathematical"); sp_object_read_attr(object, "v-hanging"); sp_object_read_attr(object, "underline-position"); sp_object_read_attr(object, "underline-thickness"); sp_object_read_attr(object, "strikethrough-position"); sp_object_read_attr(object, "strikethrough-thickness"); sp_object_read_attr(object, "overline-position"); sp_object_read_attr(object, "overline-thickness"); }