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 +++++++++++++++++++++++++++++++- src/display/nr-filter.cpp | 15 +++++++++++++-- 2 files changed, 44 insertions(+), 3 deletions(-) (limited to 'src/display') 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); } diff --git a/src/display/nr-filter.cpp b/src/display/nr-filter.cpp index bda64c50c..a96b02a62 100644 --- a/src/display/nr-filter.cpp +++ b/src/display/nr-filter.cpp @@ -34,10 +34,12 @@ namespace NR { Filter::Filter() { - _primitive_count = 1; + _primitive_count = 0; _primitive_table_size = 1; _primitive = new FilterPrimitive*[1]; - _primitive[0] = new FilterGaussian; + _primitive[0] = NULL; + //_primitive_count = 1; + //_primitive[0] = new FilterGaussian; _common_init(); } @@ -317,6 +319,15 @@ void Filter::clear_primitives() _primitive_count = 0; } +void Filter::set_x(SVGLength &lenght) +{ /*write me*/ } +void Filter::set_y(SVGLength &length) +{ /*write me*/ } +void Filter::set_width(SVGLength &length) +{ /*write me*/ } +void Filter::set_height(SVGLength &length) +{ /*write me*/ } + } /* namespace NR */ /* -- cgit v1.2.3