From 53933f5fea9d07d1ba6304b88439fba257ee8c34 Mon Sep 17 00:00:00 2001 From: "Johan B. C. Engelen" Date: Wed, 2 Feb 2011 22:24:36 +0100 Subject: update to latest 2geom ! (bzr r10025) --- src/sp-pattern.cpp | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) (limited to 'src/sp-pattern.cpp') diff --git a/src/sp-pattern.cpp b/src/sp-pattern.cpp index fbba4cc48..b0264ad13 100644 --- a/src/sp-pattern.cpp +++ b/src/sp-pattern.cpp @@ -44,17 +44,17 @@ struct SPPatPainter { SPPainter painter; SPPattern *pat; - Geom::Matrix ps2px; - Geom::Matrix px2ps; - Geom::Matrix pcs2px; + Geom::Affine ps2px; + Geom::Affine px2ps; + Geom::Affine pcs2px; NRArena *arena; unsigned int dkey; NRArenaItem *root; bool use_cached_tile; - Geom::Matrix ca2pa; - Geom::Matrix pa2ca; + Geom::Affine ca2pa; + Geom::Affine pa2ca; NRRectL cached_bbox; NRPixBlock cached_tile; @@ -74,7 +74,7 @@ static void sp_pattern_modified (SPObject *object, unsigned int flags); static void pattern_ref_changed(SPObject *old_ref, SPObject *ref, SPPattern *pat); static void pattern_ref_modified (SPObject *ref, guint flags, SPPattern *pattern); -static SPPainter *sp_pattern_painter_new (SPPaintServer *ps, Geom::Matrix const &full_transform, Geom::Matrix const &parent_transform, const NRRect *bbox); +static SPPainter *sp_pattern_painter_new (SPPaintServer *ps, Geom::Affine const &full_transform, Geom::Affine const &parent_transform, const NRRect *bbox); static void sp_pattern_painter_free (SPPaintServer *ps, SPPainter *painter); static SPPaintServerClass * pattern_parent_class; @@ -228,7 +228,7 @@ sp_pattern_set (SPObject *object, unsigned int key, const gchar *value) object->requestModified(SP_OBJECT_MODIFIED_FLAG); break; case SP_ATTR_PATTERNTRANSFORM: { - Geom::Matrix t; + Geom::Affine t; if (value && sp_svg_transform_read (value, &t)) { pat->patternTransform = t; pat->patternTransform_set = TRUE; @@ -504,7 +504,7 @@ sp_pattern_clone_if_necessary (SPItem *item, SPPattern *pattern, const gchar *pr } void -sp_pattern_transform_multiply (SPPattern *pattern, Geom::Matrix postmul, bool set) +sp_pattern_transform_multiply (SPPattern *pattern, Geom::Affine postmul, bool set) { // this formula is for a different interpretation of pattern transforms as described in (*) in sp-pattern.cpp // for it to work, we also need sp_object_read_attr (SP_OBJECT (item), "transform"); @@ -523,7 +523,7 @@ sp_pattern_transform_multiply (SPPattern *pattern, Geom::Matrix postmul, bool se g_free(c); } -const gchar *pattern_tile(GSList *reprs, Geom::Rect bounds, SPDocument *document, Geom::Matrix transform, Geom::Matrix move) +const gchar *pattern_tile(GSList *reprs, Geom::Rect bounds, SPDocument *document, Geom::Affine transform, Geom::Affine move) { Inkscape::XML::Document *xml_doc = document->getReprDoc(); Inkscape::XML::Node *defsrepr = SP_OBJECT_REPR (SP_DOCUMENT_DEFS (document)); @@ -545,7 +545,7 @@ const gchar *pattern_tile(GSList *reprs, Geom::Rect bounds, SPDocument *document Inkscape::XML::Node *node = (Inkscape::XML::Node *)(i->data); SPItem *copy = SP_ITEM(pat_object->appendChildRepr(node)); - Geom::Matrix dup_transform; + Geom::Affine dup_transform; if (!sp_svg_transform_read (node->attribute("transform"), &dup_transform)) dup_transform = Geom::identity(); dup_transform *= move; @@ -590,7 +590,7 @@ guint pattern_patternContentUnits (SPPattern *pat) return pat->patternContentUnits; } -Geom::Matrix const &pattern_patternTransform(SPPattern const *pat) +Geom::Affine const &pattern_patternTransform(SPPattern const *pat) { for (SPPattern const *pat_i = pat; pat_i != NULL; pat_i = pat_i->ref ? pat_i->ref->getObject() : NULL) { if (pat_i->patternTransform_set) @@ -679,7 +679,7 @@ Creates a painter (i.e. the thing that does actual filling at the given zoom). See (*) below for why the parent_transform may be necessary. */ static SPPainter * -sp_pattern_painter_new (SPPaintServer *ps, Geom::Matrix const &full_transform, Geom::Matrix const &/*parent_transform*/, const NRRect *bbox) +sp_pattern_painter_new (SPPaintServer *ps, Geom::Affine const &full_transform, Geom::Affine const &/*parent_transform*/, const NRRect *bbox) { SPPattern *pat = SP_PATTERN (ps); SPPatPainter *pp = g_new (SPPatPainter, 1); @@ -691,10 +691,10 @@ sp_pattern_painter_new (SPPaintServer *ps, Geom::Matrix const &full_transform, G if (pattern_patternUnits (pat) == SP_PATTERN_UNITS_OBJECTBOUNDINGBOX) { /* BBox to user coordinate system */ - Geom::Matrix bbox2user (bbox->x1 - bbox->x0, 0.0, 0.0, bbox->y1 - bbox->y0, bbox->x0, bbox->y0); + Geom::Affine bbox2user (bbox->x1 - bbox->x0, 0.0, 0.0, bbox->y1 - bbox->y0, bbox->x0, bbox->y0); // the final patternTransform, taking into account bbox - Geom::Matrix const ps2user(pattern_patternTransform(pat) * bbox2user); + Geom::Affine const ps2user(pattern_patternTransform(pat) * bbox2user); // see (*) comment below pp->ps2px = ps2user * full_transform; @@ -725,9 +725,9 @@ sp_pattern_painter_new (SPPaintServer *ps, Geom::Matrix const &full_transform, G gdouble tmp_y = pattern_height (pat) / (pattern_viewBox(pat)->y1 - pattern_viewBox(pat)->y0); // FIXME: preserveAspectRatio must be taken into account here too! - Geom::Matrix vb2ps (tmp_x, 0.0, 0.0, tmp_y, pattern_x(pat) - pattern_viewBox(pat)->x0 * tmp_x, pattern_y(pat) - pattern_viewBox(pat)->y0 * tmp_y); + Geom::Affine vb2ps (tmp_x, 0.0, 0.0, tmp_y, pattern_x(pat) - pattern_viewBox(pat)->x0 * tmp_x, pattern_y(pat) - pattern_viewBox(pat)->y0 * tmp_y); - Geom::Matrix vb2us = vb2ps * pattern_patternTransform(pat); + Geom::Affine vb2us = vb2ps * pattern_patternTransform(pat); // see (*) pp->pcs2px = vb2us * full_transform; @@ -735,9 +735,9 @@ sp_pattern_painter_new (SPPaintServer *ps, Geom::Matrix const &full_transform, G /* No viewbox, have to parse units */ if (pattern_patternContentUnits (pat) == SP_PATTERN_UNITS_OBJECTBOUNDINGBOX) { /* BBox to user coordinate system */ - Geom::Matrix bbox2user (bbox->x1 - bbox->x0, 0.0, 0.0, bbox->y1 - bbox->y0, bbox->x0, bbox->y0); + Geom::Affine bbox2user (bbox->x1 - bbox->x0, 0.0, 0.0, bbox->y1 - bbox->y0, bbox->x0, bbox->y0); - Geom::Matrix pcs2user = pattern_patternTransform(pat) * bbox2user; + Geom::Affine pcs2user = pattern_patternTransform(pat) * bbox2user; // see (*) pp->pcs2px = pcs2user * full_transform; -- cgit v1.2.3 From ccba415bc620a21239f11361078c8c30006106c7 Mon Sep 17 00:00:00 2001 From: "Jon A. Cruz" Date: Sun, 20 Feb 2011 23:59:34 -0800 Subject: Finished cleanup of outated SP_OBJECT_DOCUMENT C macro. (bzr r10060) --- src/sp-pattern.cpp | 68 ++++++++++++++++++++++++++---------------------------- 1 file changed, 33 insertions(+), 35 deletions(-) (limited to 'src/sp-pattern.cpp') diff --git a/src/sp-pattern.cpp b/src/sp-pattern.cpp index b0264ad13..cd2e706f0 100644 --- a/src/sp-pattern.cpp +++ b/src/sp-pattern.cpp @@ -128,7 +128,7 @@ sp_pattern_class_init (SPPatternClass *klass) static void sp_pattern_init (SPPattern *pat) { - pat->ref = new SPPatternReference(SP_OBJECT(pat)); + pat->ref = new SPPatternReference(pat); pat->ref->changedSignal().connect(sigc::bind(sigc::ptr_fun(pattern_ref_changed), pat)); pat->patternUnits = SP_PATTERN_UNITS_OBJECTBOUNDINGBOX; @@ -170,29 +170,27 @@ sp_pattern_build (SPObject *object, SPDocument *document, Inkscape::XML::Node *r document->addResource("pattern", object); } -static void -sp_pattern_release (SPObject *object) +static void sp_pattern_release(SPObject *object) { - SPPattern *pat; + SPPattern *pat = reinterpret_cast(object); - pat = (SPPattern *) object; - - if (SP_OBJECT_DOCUMENT (object)) { - /* Unregister ourselves */ - SP_OBJECT_DOCUMENT (object)->removeResource("pattern", SP_OBJECT (object)); - } + if (object->document) { + // Unregister ourselves + object->document->removeResource("pattern", object); + } - if (pat->ref) { - pat->modified_connection.disconnect(); - pat->ref->detach(); - delete pat->ref; - pat->ref = NULL; - } + if (pat->ref) { + pat->modified_connection.disconnect(); + pat->ref->detach(); + delete pat->ref; + pat->ref = NULL; + } - pat->modified_connection.~connection(); + pat->modified_connection.~connection(); - if (((SPObjectClass *) pattern_parent_class)->release) - ((SPObjectClass *) pattern_parent_class)->release (object); + if (((SPObjectClass *) pattern_parent_class)->release) { + ((SPObjectClass *) pattern_parent_class)->release (object); + } } static void @@ -426,12 +424,12 @@ pattern_ref_changed(SPObject *old_ref, SPObject *ref, SPPattern *pat) /** Gets called when the referenced is changed */ -static void -pattern_ref_modified (SPObject */*ref*/, guint /*flags*/, SPPattern *pattern) +static void pattern_ref_modified (SPObject */*ref*/, guint /*flags*/, SPPattern *pattern) { - if (SP_IS_OBJECT (pattern)) - SP_OBJECT (pattern)->requestModified(SP_OBJECT_MODIFIED_FLAG); - /* Conditional to avoid causing infinite loop if there's a cycle in the href chain. */ + if ( SP_IS_OBJECT(pattern) ) { + pattern->requestModified(SP_OBJECT_MODIFIED_FLAG); + } + // Conditional to avoid causing infinite loop if there's a cycle in the href chain. } @@ -446,7 +444,7 @@ count_pattern_hrefs(SPObject *o, SPPattern *pat) guint i = 0; - SPStyle *style = SP_OBJECT_STYLE(o); + SPStyle *style = o->style; if (style && style->fill.isPaintserver() && SP_IS_PATTERN(SP_STYLE_FILL_SERVER(style)) @@ -471,13 +469,13 @@ count_pattern_hrefs(SPObject *o, SPPattern *pat) SPPattern *pattern_chain(SPPattern *pattern) { - SPDocument *document = SP_OBJECT_DOCUMENT (pattern); + SPDocument *document = pattern->document; Inkscape::XML::Document *xml_doc = document->getReprDoc(); - Inkscape::XML::Node *defsrepr = SP_OBJECT_REPR (SP_DOCUMENT_DEFS (document)); + Inkscape::XML::Node *defsrepr = SP_DOCUMENT_DEFS(document)->getRepr(); Inkscape::XML::Node *repr = xml_doc->createElement("svg:pattern"); repr->setAttribute("inkscape:collect", "always"); - gchar *parent_ref = g_strconcat ("#", SP_OBJECT_REPR(pattern)->attribute("id"), NULL); + gchar *parent_ref = g_strconcat("#", pattern->getRepr()->attribute("id"), NULL); repr->setAttribute("xlink:href", parent_ref); g_free (parent_ref); @@ -494,11 +492,11 @@ sp_pattern_clone_if_necessary (SPItem *item, SPPattern *pattern, const gchar *pr { if (!pattern->href || pattern->hrefcount > count_pattern_hrefs(item, pattern)) { pattern = pattern_chain (pattern); - gchar *href = g_strconcat ("url(#", SP_OBJECT_REPR (pattern)->attribute("id"), ")", NULL); + gchar *href = g_strconcat("url(#", pattern->getRepr()->attribute("id"), ")", NULL); SPCSSAttr *css = sp_repr_css_attr_new (); sp_repr_css_set_property (css, property, href); - sp_repr_css_change_recursive (SP_OBJECT_REPR (item), css, "style"); + sp_repr_css_change_recursive(item->getRepr(), css, "style"); } return pattern; } @@ -507,7 +505,7 @@ void sp_pattern_transform_multiply (SPPattern *pattern, Geom::Affine postmul, bool set) { // this formula is for a different interpretation of pattern transforms as described in (*) in sp-pattern.cpp - // for it to work, we also need sp_object_read_attr (SP_OBJECT (item), "transform"); + // for it to work, we also need sp_object_read_attr( item, "transform"); //pattern->patternTransform = premul * item->transform * pattern->patternTransform * item->transform.inverse() * postmul; // otherwise the formula is much simpler @@ -519,14 +517,14 @@ sp_pattern_transform_multiply (SPPattern *pattern, Geom::Affine postmul, bool se pattern->patternTransform_set = TRUE; gchar *c=sp_svg_transform_write(pattern->patternTransform); - SP_OBJECT_REPR(pattern)->setAttribute("patternTransform", c); + pattern->getRepr()->setAttribute("patternTransform", c); g_free(c); } const gchar *pattern_tile(GSList *reprs, Geom::Rect bounds, SPDocument *document, Geom::Affine transform, Geom::Affine move) { Inkscape::XML::Document *xml_doc = document->getReprDoc(); - Inkscape::XML::Node *defsrepr = SP_OBJECT_REPR (SP_DOCUMENT_DEFS (document)); + Inkscape::XML::Node *defsrepr = SP_DOCUMENT_DEFS(document)->getRepr(); Inkscape::XML::Node *repr = xml_doc->createElement("svg:pattern"); repr->setAttribute("patternUnits", "userSpaceOnUse"); @@ -550,8 +548,8 @@ const gchar *pattern_tile(GSList *reprs, Geom::Rect bounds, SPDocument *document dup_transform = Geom::identity(); dup_transform *= move; - copy->doWriteTransform(SP_OBJECT_REPR(copy), dup_transform, NULL, false); - } + copy->doWriteTransform(copy->getRepr(), dup_transform, NULL, false); + } Inkscape::GC::release(repr); return pat_id; -- cgit v1.2.3 From 4a4047fdd90aede6d16c020ddcd70c57ea4aa218 Mon Sep 17 00:00:00 2001 From: "Johan B. C. Engelen" Date: Mon, 21 Feb 2011 23:28:50 +0100 Subject: NEW: Grayscale color display mode. (toggle assigned keybinding: Shift+keypad5) (bzr r10065) --- src/sp-pattern.cpp | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) (limited to 'src/sp-pattern.cpp') diff --git a/src/sp-pattern.cpp b/src/sp-pattern.cpp index cd2e706f0..9ea0ef891 100644 --- a/src/sp-pattern.cpp +++ b/src/sp-pattern.cpp @@ -30,6 +30,7 @@ #include "uri.h" #include "sp-pattern.h" #include "xml/repr.h" +#include "display/grayscale.h" #include #include @@ -915,10 +916,12 @@ sp_pat_fill (SPPainter *painter, NRPixBlock *pb) if (pattern_width (pp->pat) < NR_EPSILON) return; if (pattern_height (pp->pat) < NR_EPSILON) return; + bool grayscale = Grayscale::activeDesktopIsGrayscale(); // TODO: find good way to access the current rendermode + /* Find buffer area in gradient space */ /* fixme: This is suboptimal (Lauris) */ - if ( pp->use_cached_tile ) { + if ( !grayscale && pp->use_cached_tile ) { double pat_w=pattern_width (pp->pat); double pat_h=pattern_height (pp->pat); if ( pb->mode == NR_PIXBLOCK_MODE_R8G8B8A8N || pb->mode == NR_PIXBLOCK_MODE_R8G8B8A8P ) { // same thing because it's filling an empty pixblock @@ -1031,8 +1034,13 @@ sp_pat_fill (SPPainter *painter, NRPixBlock *pb) // fixme: (Lauris) nr_pixblock_setup_extern (&ppb, pb->mode, area.x0, area.y0, area.x1, area.y1, NR_PIXBLOCK_PX (pb), pb->rs, FALSE, FALSE); + Inkscape::ColorRenderMode saved_colormode = pp->root->arena->colorrendermode; + if (grayscale) { + pp->root->arena->colorrendermode = Inkscape::COLORRENDERMODE_GRAYSCALE; + } nr_arena_item_invoke_render (NULL, pp->root, &area, &ppb, 0); - + pp->root->arena->colorrendermode = saved_colormode; + nr_pixblock_release (&ppb); } } -- cgit v1.2.3