From f8c49ad587d2fbb058a360b677c57692b45aaa08 Mon Sep 17 00:00:00 2001 From: Hugo Rodrigues Date: Mon, 14 Aug 2006 18:54:26 +0000 Subject: Work on filters. spFilterPrimitive structure added. Blur slider updated. Fixed sp-object-repr.cpp typos (bzr r1598) --- src/display/nr-arena-shape.cpp | 32 +++++++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) (limited to 'src/display/nr-arena-shape.cpp') diff --git a/src/display/nr-arena-shape.cpp b/src/display/nr-arena-shape.cpp index 4653b5ce6..f9c203187 100644 --- a/src/display/nr-arena-shape.cpp +++ b/src/display/nr-arena-shape.cpp @@ -17,6 +17,8 @@ #include #include #include "display/nr-filter.h" +#include "display/nr-filter-gaussian.h" +#include "display/nr-filter-types.h" #include #include #include @@ -29,6 +31,8 @@ #include /* prefs-utils used for deciding, whether to run filtering test or not */ #include "prefs-utils.h" +#include "sp-filter.h" +#include "sp-gaussian-blur.h" //int showRuns=0; void nr_pixblock_render_shape_mask_or(NRPixBlock &m,Shape* theS); @@ -1087,9 +1091,35 @@ nr_arena_shape_set_style(NRArenaShape *shape, SPStyle *style) /* TODO: after SPStyle handles filters, get the correct filter * from there. */ - //if (prefs_get_double_attribute("options.filtertest", "value", 0) != 0) if (style->filter.set && style->filter.filter) + { shape->filter = new NR::Filter(); + shape->filter->set_x(style->filter.filter->x); + shape->filter->set_y(style->filter.filter->y); + shape->filter->set_width(style->filter.filter->width); + shape->filter->set_height(style->filter.filter->height); + + //go through all SP filter primitives + for(int i=0; ifilter.filter->_primitive_count; i++) + { + SPFilterPrimitive *primitive = style->filter.filter->_primitives[i]; + //if primitive is gaussianblur +// if(SP_IS_GAUSSIANBLUR(primitive)) + { + NR::FilterGaussian * gaussian = (NR::FilterGaussian *) shape->filter->add_primitive(NR::NR_FILTER_GAUSSIANBLUR); + SPGaussianBlur * spblur = SP_GAUSSIANBLUR(primitive); + float num = spblur->stdDeviation.getNumber(); + if( num>=0.0 ) + { + float optnum = spblur->stdDeviation.getOptNumber(); + if( optnum>=0.0 ) + gaussian->set_deviation((double) num, (double) optnum); + else + gaussian->set_deviation((double) num); + } + } + } + } nr_arena_item_request_update(shape, NR_ARENA_ITEM_STATE_ALL, FALSE); } -- cgit v1.2.3