From bf7c3e8d98b557cb64447804399797d93e1cedc0 Mon Sep 17 00:00:00 2001 From: John Smith Date: Wed, 19 Sep 2012 10:52:19 +0900 Subject: Fix for 643150 : Auto-palette swatches duplicated on copy and paste (bzr r11677) --- src/sp-gradient.cpp | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) (limited to 'src/sp-gradient.cpp') diff --git a/src/sp-gradient.cpp b/src/sp-gradient.cpp index 262c35db1..5efa3c84f 100644 --- a/src/sp-gradient.cpp +++ b/src/sp-gradient.cpp @@ -346,6 +346,41 @@ void SPGradient::setSwatch( bool swatch ) } } + +/** + * return true if this gradient is "equivalent" to that gradient. + * Equivalent meaning they have the same stop count, same stop colors and same stop opacity + * @param that - A gradient to compare this to + */ +gboolean SPGradient::isEquivalent(SPGradient *that) +{ + //TODO Make this work for mesh gradients + + if (this->getStopCount() != that->getStopCount()) + return FALSE; + + if (this->hasStops() != that->hasStops()) + return FALSE; + + if (!this->getVector() || !that->getVector()) + return FALSE; + + SPStop *as = this->getVector()->getFirstStop(); + SPStop *bs = that->getVector()->getFirstStop(); + + while (as && bs) { + if (!as->getEffectiveColor().isClose(bs->getEffectiveColor(), 0.001) || + as->offset != bs->offset) { + return FALSE; + } + as = as->getNextStop(); + bs = bs->getNextStop(); + } + + return TRUE; +} + + /** * Return stop's color as 32bit value. */ @@ -2211,6 +2246,7 @@ sp_meshgradient_repr_write(SPMeshGradient *mg) mg->array.write( mg ); } + /* Local Variables: mode:c++ -- cgit v1.2.3 From 6d4a392c8b87a48d596c7c872e95b5d6f6de000c Mon Sep 17 00:00:00 2001 From: Nicolas Dufour Date: Sat, 10 Nov 2012 23:14:13 +0100 Subject: Build. Fixing win32 build with cairo > 1.11.4 (replacing uint with unsigned int). (bzr r11866) --- src/sp-gradient.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'src/sp-gradient.cpp') diff --git a/src/sp-gradient.cpp b/src/sp-gradient.cpp index 5efa3c84f..f9f9a5015 100644 --- a/src/sp-gradient.cpp +++ b/src/sp-gradient.cpp @@ -2104,15 +2104,15 @@ static cairo_pattern_t *sp_meshgradient_create_pattern(SPPaintServer *ps, cp = cairo_pattern_create_mesh(); - for( uint i = 0; i < array->patch_rows(); ++i ) { - for( uint j = 0; j < array->patch_columns(); ++j ) { + for( unsigned int i = 0; i < array->patch_rows(); ++i ) { + for( unsigned int j = 0; j < array->patch_columns(); ++j ) { SPMeshPatchI patch( &(array->nodes), i, j ); cairo_mesh_pattern_begin_patch( cp ); cairo_mesh_pattern_move_to( cp, patch.getPoint( 0, 0 )[X], patch.getPoint( 0, 0 )[Y] ); - for( uint k = 0; k < 4; ++k ) { + for( unsigned int k = 0; k < 4; ++k ) { #ifdef DEBUG_MESH std::cout << i << " " << j << " " << patch.getPathType( k ) << " ("; -- cgit v1.2.3 From 8af73b0d457e33172951f97c01d523bcd31d89cb Mon Sep 17 00:00:00 2001 From: Tavmjong Bah Date: Tue, 20 Nov 2012 21:17:26 +0100 Subject: Fix for #970355, radial gradient using object bounding box. (bzr r11887) --- src/sp-gradient.cpp | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) (limited to 'src/sp-gradient.cpp') diff --git a/src/sp-gradient.cpp b/src/sp-gradient.cpp index f9f9a5015..d7add805d 100644 --- a/src/sp-gradient.cpp +++ b/src/sp-gradient.cpp @@ -2051,13 +2051,32 @@ sp_radialgradient_create_pattern(SPPaintServer *ps, double scale = 1.0; double tolerance = cairo_get_tolerance(ct); + // NOTE: SVG2 will allow the use of a focus circle which can + // have its center outside the first circle. + // code below suggested by Cairo devs to overcome tolerance problems // more: https://bugs.freedesktop.org/show_bug.cgi?id=40918 + + // Corrected for + // https://bugs.launchpad.net/inkscape/+bug/970355 + + Geom::Affine gs2user = gr->gradientTransform; + Geom::Scale gs2user_scale; + + if (gr->getUnits() == SP_GRADIENT_UNITS_OBJECTBOUNDINGBOX && bbox) { + Geom::Affine bbox2user(bbox->width(), 0, 0, bbox->height(), bbox->left(), bbox->top()); + gs2user *= bbox2user; + gs2user_scale = Geom::Scale( gs2user[0], gs2user[3] ); + } + Geom::Point d = focus - center; - if (d.length() + tolerance > radius) { - scale = radius / d.length(); + Geom::Point d_user = d * gs2user_scale; + Geom::Point r_user( radius, 0 ); + r_user *= gs2user_scale; - double dx = d.x(), dy = d.y(); + if (d_user.length() + tolerance > r_user.length()) { + scale = r_user.length() / d_user.length(); + double dx = d_user.x(), dy = d_user.y(); cairo_user_to_device_distance(ct, &dx, &dy); if (!Geom::are_near(dx, 0, tolerance) || !Geom::are_near(dy, 0, tolerance)) -- cgit v1.2.3 From 4569747878f930a0992a2b089460f3f8cdcb39c5 Mon Sep 17 00:00:00 2001 From: Alex Valavanis Date: Wed, 23 Jan 2013 12:22:14 +0000 Subject: Clean up more GObject type definitions (bzr r12055) --- src/sp-gradient.cpp | 250 ++++++++-------------------------------------------- 1 file changed, 38 insertions(+), 212 deletions(-) (limited to 'src/sp-gradient.cpp') diff --git a/src/sp-gradient.cpp b/src/sp-gradient.cpp index d7add805d..1f2cfdd41 100644 --- a/src/sp-gradient.cpp +++ b/src/sp-gradient.cpp @@ -61,36 +61,24 @@ //#define NCOLORS NR_GRADIENT_VECTOR_LENGTH // SPStop -static void sp_stop_class_init(SPStopClass *klass); -static void sp_stop_init(SPStop *stop); - static void sp_stop_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr); static void sp_stop_set(SPObject *object, unsigned key, gchar const *value); static Inkscape::XML::Node *sp_stop_write(SPObject *object, Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, guint flags); - -static SPObjectClass *stop_parent_class; +G_DEFINE_TYPE(SPStop, sp_stop, SP_TYPE_OBJECT); // SPMeshRow -static void sp_meshrow_class_init(SPMeshRowClass *klass); -static void sp_meshrow_init(SPMeshRow *meshrow); - static void sp_meshrow_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr); static void sp_meshrow_set(SPObject *object, unsigned key, gchar const *value); static Inkscape::XML::Node *sp_meshrow_write(SPObject *object, Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, guint flags); - -static SPObjectClass *meshrow_parent_class; +G_DEFINE_TYPE(SPMeshRow, sp_meshrow, SP_TYPE_OBJECT); // SPMeshPatch -static void sp_meshpatch_class_init(SPMeshPatchClass *klass); -static void sp_meshpatch_init(SPMeshPatch *meshpatch); - static void sp_meshpatch_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr); static void sp_meshpatch_set(SPObject *object, unsigned key, gchar const *value); static Inkscape::XML::Node *sp_meshpatch_write(SPObject *object, Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, guint flags); - -static SPObjectClass *meshpatch_parent_class; +G_DEFINE_TYPE(SPMeshPatch, sp_meshpatch, SP_TYPE_OBJECT); class SPGradientImpl @@ -116,29 +104,6 @@ class SPGradientImpl static void setGradientAttr(SPObject *object, unsigned key, gchar const *value); }; -/** - * Registers SPStop class and returns its type. - */ -GType -sp_stop_get_type() -{ - static GType type = 0; - if (!type) { - GTypeInfo info = { - sizeof(SPStopClass), - NULL, NULL, - (GClassInitFunc) sp_stop_class_init, - NULL, NULL, - sizeof(SPStop), - 16, - (GInstanceInitFunc) sp_stop_init, - NULL, /* value_table */ - }; - type = g_type_register_static(SP_TYPE_OBJECT, "SPStop", &info, (GTypeFlags)0); - } - return type; -} - /** * Callback to initialize SPStop vtable. */ @@ -146,8 +111,6 @@ static void sp_stop_class_init(SPStopClass *klass) { SPObjectClass *sp_object_class = (SPObjectClass *) klass; - stop_parent_class = (SPObjectClass *) g_type_class_ref(SP_TYPE_OBJECT); - sp_object_class->build = sp_stop_build; sp_object_class->set = sp_stop_set; sp_object_class->write = sp_stop_write; @@ -170,8 +133,8 @@ sp_stop_init(SPStop *stop) */ static void sp_stop_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr) { - if (((SPObjectClass *) stop_parent_class)->build) - (* ((SPObjectClass *) stop_parent_class)->build)(object, document, repr); + if (((SPObjectClass *) sp_stop_parent_class)->build) + (* ((SPObjectClass *) sp_stop_parent_class)->build)(object, document, repr); object->readAttr( "offset" ); object->readAttr( "stop-color" ); @@ -256,8 +219,8 @@ sp_stop_set(SPObject *object, unsigned key, gchar const *value) break; } default: { - if (((SPObjectClass *) stop_parent_class)->set) - (* ((SPObjectClass *) stop_parent_class)->set)(object, key, value); + if (((SPObjectClass *) sp_stop_parent_class)->set) + (* ((SPObjectClass *) sp_stop_parent_class)->set)(object, key, value); break; } } @@ -278,8 +241,8 @@ sp_stop_write(SPObject *object, Inkscape::XML::Document *xml_doc, Inkscape::XML: Glib::ustring colorStr = stop->specified_color.toString(); gfloat opacity = stop->opacity; - if (((SPObjectClass *) stop_parent_class)->write) { - (* ((SPObjectClass *) stop_parent_class)->write)(object, xml_doc, repr, flags); + if (((SPObjectClass *) sp_stop_parent_class)->write) { + (* ((SPObjectClass *) sp_stop_parent_class)->write)(object, xml_doc, repr, flags); } // Since we do a hackish style setting here (because SPStyle does not support stop-color and @@ -409,29 +372,6 @@ sp_stop_get_rgba32(SPStop const *const stop) * Mesh Row */ -/** - * Registers SPMeshRow class and returns its type. - */ -GType -sp_meshrow_get_type() -{ - static GType type = 0; - if (!type) { - GTypeInfo info = { - sizeof(SPMeshRowClass), - NULL, NULL, - (GClassInitFunc) sp_meshrow_class_init, - NULL, NULL, - sizeof(SPMeshRow), - 16, - (GInstanceInitFunc) sp_meshrow_init, - NULL, /* value_table */ - }; - type = g_type_register_static(SP_TYPE_OBJECT, "SPMeshRow", &info, (GTypeFlags)0); - } - return type; -} - /** * Callback to initialize SPMeshRow vtable. */ @@ -439,8 +379,6 @@ static void sp_meshrow_class_init(SPMeshRowClass *klass) { SPObjectClass *sp_object_class = (SPObjectClass *) klass; - meshrow_parent_class = (SPObjectClass *) g_type_class_ref(SP_TYPE_OBJECT); - sp_object_class->build = sp_meshrow_build; sp_object_class->set = sp_meshrow_set; sp_object_class->write = sp_meshrow_write; @@ -459,8 +397,8 @@ static void sp_meshrow_init(SPMeshRow * /*meshrow*/) */ static void sp_meshrow_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr) { - if (((SPObjectClass *) meshrow_parent_class)->build) - (* ((SPObjectClass *) meshrow_parent_class)->build)(object, document, repr); + if (((SPObjectClass *) sp_meshrow_parent_class)->build) + (* ((SPObjectClass *) sp_meshrow_parent_class)->build)(object, document, repr); // No attributes } @@ -485,8 +423,8 @@ sp_meshrow_write(SPObject *object, Inkscape::XML::Document *xml_doc, Inkscape::X repr = xml_doc->createElement("svg:meshRow"); } - if (((SPObjectClass *) meshrow_parent_class)->write) { - (* ((SPObjectClass *) meshrow_parent_class)->write)(object, xml_doc, repr, flags); + if (((SPObjectClass *) sp_meshrow_parent_class)->write) { + (* ((SPObjectClass *) sp_meshrow_parent_class)->write)(object, xml_doc, repr, flags); } return repr; @@ -496,29 +434,6 @@ sp_meshrow_write(SPObject *object, Inkscape::XML::Document *xml_doc, Inkscape::X * Mesh Patch */ -/** - * Registers SPMeshPatch class and returns its type. - */ -GType -sp_meshpatch_get_type() -{ - static GType type = 0; - if (!type) { - GTypeInfo info = { - sizeof(SPMeshPatchClass), - NULL, NULL, - (GClassInitFunc) sp_meshpatch_class_init, - NULL, NULL, - sizeof(SPMeshPatch), - 16, - (GInstanceInitFunc) sp_meshpatch_init, - NULL, /* value_table */ - }; - type = g_type_register_static(SP_TYPE_OBJECT, "SPMeshPatch", &info, (GTypeFlags)0); - } - return type; -} - /** * Callback to initialize SPMeshPatch vtable. */ @@ -526,8 +441,6 @@ static void sp_meshpatch_class_init(SPMeshPatchClass *klass) { SPObjectClass *sp_object_class = (SPObjectClass *) klass; - meshpatch_parent_class = (SPObjectClass *) g_type_class_ref(SP_TYPE_OBJECT); - sp_object_class->build = sp_meshpatch_build; sp_object_class->set = sp_meshpatch_set; sp_object_class->write = sp_meshpatch_write; @@ -546,8 +459,8 @@ static void sp_meshpatch_init(SPMeshPatch * /*meshpatch*/) */ static void sp_meshpatch_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr) { - if (((SPObjectClass *) meshpatch_parent_class)->build) - (* ((SPObjectClass *) meshpatch_parent_class)->build)(object, document, repr); + if (((SPObjectClass *) sp_meshpatch_parent_class)->build) + (* ((SPObjectClass *) sp_meshpatch_parent_class)->build)(object, document, repr); object->readAttr( "tensor" ); } @@ -586,8 +499,8 @@ sp_meshpatch_write(SPObject *object, Inkscape::XML::Document *xml_doc, Inkscape: repr = xml_doc->createElement("svg:meshPatch"); } - if (((SPObjectClass *) meshpatch_parent_class)->write) { - (* ((SPObjectClass *) meshpatch_parent_class)->write)(object, xml_doc, repr, flags); + if (((SPObjectClass *) sp_meshpatch_parent_class)->write) { + (* ((SPObjectClass *) sp_meshpatch_parent_class)->write)(object, xml_doc, repr, flags); } return repr; @@ -1496,9 +1409,6 @@ sp_gradient_set_gs2d_matrix(SPGradient *gr, Geom::Affine const &ctm, * Linear Gradient */ -static void sp_lineargradient_class_init(SPLinearGradientClass *klass); -static void sp_lineargradient_init(SPLinearGradient *lg); - static void sp_lineargradient_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr); @@ -1506,31 +1416,7 @@ static void sp_lineargradient_set(SPObject *object, unsigned key, gchar const *v static Inkscape::XML::Node *sp_lineargradient_write(SPObject *object, Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, guint flags); static cairo_pattern_t *sp_lineargradient_create_pattern(SPPaintServer *ps, cairo_t *ct, Geom::OptRect const &bbox, double opacity); - -static SPGradientClass *lg_parent_class; - -/** - * Register SPLinearGradient class and return its type. - */ -GType -sp_lineargradient_get_type() -{ - static GType type = 0; - if (!type) { - GTypeInfo info = { - sizeof(SPLinearGradientClass), - NULL, NULL, - (GClassInitFunc) sp_lineargradient_class_init, - NULL, NULL, - sizeof(SPLinearGradient), - 16, - (GInstanceInitFunc) sp_lineargradient_init, - NULL, /* value_table */ - }; - type = g_type_register_static(SP_TYPE_GRADIENT, "SPLinearGradient", &info, (GTypeFlags)0); - } - return type; -} +G_DEFINE_TYPE(SPLinearGradient, sp_lineargradient, SP_TYPE_GRADIENT); /** * SPLinearGradient vtable initialization. @@ -1540,8 +1426,6 @@ static void sp_lineargradient_class_init(SPLinearGradientClass *klass) SPObjectClass *sp_object_class = (SPObjectClass *) klass; SPPaintServerClass *ps_class = (SPPaintServerClass *) klass; - lg_parent_class = (SPGradientClass*)g_type_class_ref(SP_TYPE_GRADIENT); - sp_object_class->build = sp_lineargradient_build; sp_object_class->set = sp_lineargradient_set; sp_object_class->write = sp_lineargradient_write; @@ -1567,8 +1451,8 @@ static void sp_lineargradient_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr) { - if (((SPObjectClass *) lg_parent_class)->build) - (* ((SPObjectClass *) lg_parent_class)->build)(object, document, repr); + if (((SPObjectClass *) sp_lineargradient_parent_class)->build) + (* ((SPObjectClass *) sp_lineargradient_parent_class)->build)(object, document, repr); object->readAttr( "x1" ); object->readAttr( "y1" ); @@ -1602,8 +1486,8 @@ sp_lineargradient_set(SPObject *object, unsigned key, gchar const *value) object->requestModified(SP_OBJECT_MODIFIED_FLAG); break; default: - if (((SPObjectClass *) lg_parent_class)->set) - (* ((SPObjectClass *) lg_parent_class)->set)(object, key, value); + if (((SPObjectClass *) sp_lineargradient_parent_class)->set) + (* ((SPObjectClass *) sp_lineargradient_parent_class)->set)(object, key, value); break; } } @@ -1629,8 +1513,8 @@ sp_lineargradient_write(SPObject *object, Inkscape::XML::Document *xml_doc, Inks if ((flags & SP_OBJECT_WRITE_ALL) || lg->y2._set) sp_repr_set_svg_double(repr, "y2", lg->y2.computed); - if (((SPObjectClass *) lg_parent_class)->write) - (* ((SPObjectClass *) lg_parent_class)->write)(object, xml_doc, repr, flags); + if (((SPObjectClass *) sp_lineargradient_parent_class)->write) + (* ((SPObjectClass *) sp_lineargradient_parent_class)->write)(object, xml_doc, repr, flags); return repr; } @@ -1659,9 +1543,6 @@ sp_lineargradient_set_position(SPLinearGradient *lg, * Radial Gradient */ -static void sp_radialgradient_class_init(SPRadialGradientClass *klass); -static void sp_radialgradient_init(SPRadialGradient *rg); - static void sp_radialgradient_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr); @@ -1669,31 +1550,7 @@ static void sp_radialgradient_set(SPObject *object, unsigned key, gchar const *v static Inkscape::XML::Node *sp_radialgradient_write(SPObject *object, Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, guint flags); static cairo_pattern_t *sp_radialgradient_create_pattern(SPPaintServer *ps, cairo_t *ct, Geom::OptRect const &bbox, double opacity); - -static SPGradientClass *rg_parent_class; - -/** - * Register SPRadialGradient class and return its type. - */ -GType -sp_radialgradient_get_type() -{ - static GType type = 0; - if (!type) { - GTypeInfo info = { - sizeof(SPRadialGradientClass), - NULL, NULL, - (GClassInitFunc) sp_radialgradient_class_init, - NULL, NULL, - sizeof(SPRadialGradient), - 16, - (GInstanceInitFunc) sp_radialgradient_init, - NULL, /* value_table */ - }; - type = g_type_register_static(SP_TYPE_GRADIENT, "SPRadialGradient", &info, (GTypeFlags)0); - } - return type; -} +G_DEFINE_TYPE(SPRadialGradient, sp_radialgradient, SP_TYPE_GRADIENT); /** * SPRadialGradient vtable initialization. @@ -1703,8 +1560,6 @@ static void sp_radialgradient_class_init(SPRadialGradientClass *klass) SPObjectClass *sp_object_class = (SPObjectClass *) klass; SPPaintServerClass *ps_class = (SPPaintServerClass *) klass; - rg_parent_class = (SPGradientClass*)g_type_class_ref(SP_TYPE_GRADIENT); - sp_object_class->build = sp_radialgradient_build; sp_object_class->set = sp_radialgradient_set; sp_object_class->write = sp_radialgradient_write; @@ -1731,8 +1586,8 @@ sp_radialgradient_init(SPRadialGradient *rg) static void sp_radialgradient_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr) { - if (((SPObjectClass *) rg_parent_class)->build) - (* ((SPObjectClass *) rg_parent_class)->build)(object, document, repr); + if (((SPObjectClass *) sp_radialgradient_parent_class)->build) + (* ((SPObjectClass *) sp_radialgradient_parent_class)->build)(object, document, repr); object->readAttr( "cx" ); object->readAttr( "cy" ); @@ -1789,8 +1644,8 @@ sp_radialgradient_set(SPObject *object, unsigned key, gchar const *value) object->requestModified(SP_OBJECT_MODIFIED_FLAG); break; default: - if (((SPObjectClass *) rg_parent_class)->set) - ((SPObjectClass *) rg_parent_class)->set(object, key, value); + if (((SPObjectClass *) sp_radialgradient_parent_class)->set) + ((SPObjectClass *) sp_radialgradient_parent_class)->set(object, key, value); break; } } @@ -1813,8 +1668,8 @@ sp_radialgradient_write(SPObject *object, Inkscape::XML::Document *xml_doc, Inks if ((flags & SP_OBJECT_WRITE_ALL) || rg->fx._set) sp_repr_set_svg_double(repr, "fx", rg->fx.computed); if ((flags & SP_OBJECT_WRITE_ALL) || rg->fy._set) sp_repr_set_svg_double(repr, "fy", rg->fy.computed); - if (((SPObjectClass *) rg_parent_class)->write) - (* ((SPObjectClass *) rg_parent_class)->write)(object, xml_doc, repr, flags); + if (((SPObjectClass *) sp_radialgradient_parent_class)->write) + (* ((SPObjectClass *) sp_radialgradient_parent_class)->write)(object, xml_doc, repr, flags); return repr; } @@ -1845,9 +1700,6 @@ sp_radialgradient_set_position(SPRadialGradient *rg, //#define MESH_DEBUG -static void sp_meshgradient_class_init(SPMeshGradientClass *klass); -static void sp_meshgradient_init(SPMeshGradient *mg); - static void sp_meshgradient_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr); @@ -1855,31 +1707,7 @@ static void sp_meshgradient_set(SPObject *object, unsigned key, gchar const *val static Inkscape::XML::Node *sp_meshgradient_write(SPObject *object, Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, guint flags); static cairo_pattern_t *sp_meshgradient_create_pattern(SPPaintServer *ps, cairo_t *ct, Geom::OptRect const &bbox, double opacity); - -static SPGradientClass *mg_parent_class; - -/** - * Register SPMeshGradient class and return its type. - */ -GType -sp_meshgradient_get_type() -{ - static GType type = 0; - if (!type) { - GTypeInfo info = { - sizeof(SPMeshGradientClass), - NULL, NULL, - (GClassInitFunc) sp_meshgradient_class_init, - NULL, NULL, - sizeof(SPMeshGradient), - 16, - (GInstanceInitFunc) sp_meshgradient_init, - NULL, /* value_table */ - }; - type = g_type_register_static(SP_TYPE_GRADIENT, "SPMeshGradient", &info, (GTypeFlags)0); - } - return type; -} +G_DEFINE_TYPE(SPMeshGradient, sp_meshgradient, SP_TYPE_GRADIENT); /** * SPMeshGradient vtable initialization. @@ -1892,8 +1720,6 @@ static void sp_meshgradient_class_init(SPMeshGradientClass *klass) SPObjectClass *sp_object_class = (SPObjectClass *) klass; SPPaintServerClass *ps_class = (SPPaintServerClass *) klass; - mg_parent_class = (SPGradientClass*)g_type_class_ref(SP_TYPE_GRADIENT); - sp_object_class->build = sp_meshgradient_build; sp_object_class->set = sp_meshgradient_set; sp_object_class->write = sp_meshgradient_write; @@ -1918,8 +1744,8 @@ sp_meshgradient_init(SPMeshGradient *mg) static void sp_meshgradient_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr) { - if (((SPObjectClass *) mg_parent_class)->build) - (* ((SPObjectClass *) mg_parent_class)->build)(object, document, repr); + if (((SPObjectClass *) sp_meshgradient_parent_class)->build) + (* ((SPObjectClass *) sp_meshgradient_parent_class)->build)(object, document, repr); // Start coordinate of mesh object->readAttr( "x" ); @@ -1948,8 +1774,8 @@ sp_meshgradient_set(SPObject *object, unsigned key, gchar const *value) object->requestModified(SP_OBJECT_MODIFIED_FLAG); break; default: - if (((SPObjectClass *) mg_parent_class)->set) - ((SPObjectClass *) mg_parent_class)->set(object, key, value); + if (((SPObjectClass *) sp_meshgradient_parent_class)->set) + ((SPObjectClass *) sp_meshgradient_parent_class)->set(object, key, value); break; } } @@ -1973,8 +1799,8 @@ sp_meshgradient_write(SPObject *object, Inkscape::XML::Document *xml_doc, Inksca if ((flags & SP_OBJECT_WRITE_ALL) || mg->x._set) sp_repr_set_svg_double(repr, "x", mg->x.computed); if ((flags & SP_OBJECT_WRITE_ALL) || mg->y._set) sp_repr_set_svg_double(repr, "y", mg->y.computed); - if (((SPObjectClass *) mg_parent_class)->write) - (* ((SPObjectClass *) mg_parent_class)->write)(object, xml_doc, repr, flags); + if (((SPObjectClass *) sp_meshgradient_parent_class)->write) + (* ((SPObjectClass *) sp_meshgradient_parent_class)->write)(object, xml_doc, repr, flags); return repr; } -- cgit v1.2.3