diff options
| author | Felipe Corr??a da Silva Sanches <juca@members.fsf.org> | 2007-07-26 08:02:07 +0000 |
|---|---|---|
| committer | jucablues <jucablues@users.sourceforge.net> | 2007-07-26 08:02:07 +0000 |
| commit | 2bfd492fe4020ac67daa342e8c0e715db42ae1f1 (patch) | |
| tree | 3339917f51456b04c7f047f153f42473056a10d2 /src/display | |
| parent | Filter effects dialog: (diff) | |
| download | inkscape-2bfd492fe4020ac67daa342e8c0e715db42ae1f1.tar.gz inkscape-2bfd492fe4020ac67daa342e8c0e715db42ae1f1.zip | |
boiler plate code for feTurbulence:
*reading attributes and setting default values
same for some more attributes on convolve matrix filter
alphabetical ordering on Makefile_insert and on nr-filter.cpp #includes
(bzr r3305)
Diffstat (limited to 'src/display')
| -rw-r--r-- | src/display/Makefile_insert | 26 | ||||
| -rw-r--r-- | src/display/nr-filter-convolve-matrix.cpp | 11 | ||||
| -rw-r--r-- | src/display/nr-filter-convolve-matrix.h | 6 | ||||
| -rw-r--r-- | src/display/nr-filter-displacement-map.cpp | 2 | ||||
| -rw-r--r-- | src/display/nr-filter-image.cpp | 9 | ||||
| -rw-r--r-- | src/display/nr-filter-turbulence.cpp | 104 | ||||
| -rw-r--r-- | src/display/nr-filter-turbulence.h | 53 | ||||
| -rw-r--r-- | src/display/nr-filter.cpp | 19 |
8 files changed, 203 insertions, 27 deletions
diff --git a/src/display/Makefile_insert b/src/display/Makefile_insert index baeaaec62..624733a42 100644 --- a/src/display/Makefile_insert +++ b/src/display/Makefile_insert @@ -67,30 +67,32 @@ display_libspdisplay_a_SOURCES = \ display/sp-ctrlquadr.h \ display/nr-filter.cpp \ display/nr-filter.h \ - display/nr-filter-primitive.cpp \ - display/nr-filter-primitive.h \ - display/nr-filter-gaussian.cpp \ - display/nr-filter-gaussian.h \ display/nr-filter-blend.cpp \ display/nr-filter-blend.h \ - display/nr-filter-diffuselighting.cpp \ - display/nr-filter-diffuselighting.h \ - display/nr-filter-offset.cpp \ - display/nr-filter-offset.h \ - display/nr-filter-specularlighting.cpp \ - display/nr-filter-specularlighting.h \ display/nr-filter-composite.h \ display/nr-filter-composite.cpp \ display/nr-filter-convolve-matrix.cpp \ display/nr-filter-convolve-matrix.h \ + display/nr-filter-diffuselighting.cpp \ + display/nr-filter-diffuselighting.h \ display/nr-filter-displacement-map.cpp \ display/nr-filter-displacement-map.h \ + display/nr-filter-gaussian.cpp \ + display/nr-filter-gaussian.h \ + display/nr-filter-getalpha.cpp \ + display/nr-filter-getalpha.h \ display/nr-filter-image.cpp \ display/nr-filter-image.h \ + display/nr-filter-offset.cpp \ + display/nr-filter-offset.h \ + display/nr-filter-primitive.cpp \ + display/nr-filter-primitive.h \ display/nr-filter-slot.cpp \ display/nr-filter-slot.h \ - display/nr-filter-getalpha.cpp \ - display/nr-filter-getalpha.h \ + display/nr-filter-specularlighting.cpp \ + display/nr-filter-specularlighting.h \ + display/nr-filter-turbulence.cpp \ + display/nr-filter-turbulence.h \ display/nr-filter-pixops.h \ display/nr-filter-types.h \ display/nr-filter-utils.h \ diff --git a/src/display/nr-filter-convolve-matrix.cpp b/src/display/nr-filter-convolve-matrix.cpp index 75a40df70..f8a00cb4b 100644 --- a/src/display/nr-filter-convolve-matrix.cpp +++ b/src/display/nr-filter-convolve-matrix.cpp @@ -14,6 +14,9 @@ namespace NR { FilterConvolveMatrix::FilterConvolveMatrix() +: bias(0), + edgeMode(0), + preserveAlpha(false) {} FilterPrimitive * FilterConvolveMatrix::create() { @@ -123,6 +126,14 @@ void FilterConvolveMatrix::set_kernelMatrix(std::vector<gdouble> &km) { kernelMatrix = km; } +void FilterConvolveMatrix::set_edgeMode(int mode){ + edgeMode = mode; +} + +void FilterConvolveMatrix::set_preserveAlpha(bool pa){ + preserveAlpha = pa; +} + void FilterConvolveMatrix::area_enlarge(NRRectL &area, Matrix const &trans) { //Seems to me that since this filter's operation is resolution dependent, diff --git a/src/display/nr-filter-convolve-matrix.h b/src/display/nr-filter-convolve-matrix.h index e5b72a71f..f4a823012 100644 --- a/src/display/nr-filter-convolve-matrix.h +++ b/src/display/nr-filter-convolve-matrix.h @@ -36,13 +36,17 @@ public: void set_kernelMatrix(std::vector<gdouble>& km); void set_bias(double b); void set_divisor(double d); + void set_edgeMode(int mode); + void set_preserveAlpha(bool pa); private: std::vector<gdouble> kernelMatrix; int targetX, targetY; int orderX, orderY; gdouble divisor, bias; - int dx, dy; //kernelUnitLength + int dx, dy, kernelUnitLength; + int edgeMode; + bool preserveAlpha; }; } /* namespace NR */ diff --git a/src/display/nr-filter-displacement-map.cpp b/src/display/nr-filter-displacement-map.cpp index 7d32ce2e0..8d2e6dc3c 100644 --- a/src/display/nr-filter-displacement-map.cpp +++ b/src/display/nr-filter-displacement-map.cpp @@ -58,7 +58,7 @@ int FilterDisplacementMap::render(FilterSlot &slot, Matrix const &trans) { x1 = out->area.x1; y1 = out->area.y1; width = x1 - x0; - + for (x=x0 + scale/2; x < x1 - scale/2; x++){ for (y=y0 + scale/2; y < y1 - scale/2; y++){ /* SVG spec states that pixel values must be alpha-demultiplied before processing this filter operation. diff --git a/src/display/nr-filter-image.cpp b/src/display/nr-filter-image.cpp index 62a8caf20..b1a5b4d7a 100644 --- a/src/display/nr-filter-image.cpp +++ b/src/display/nr-filter-image.cpp @@ -17,6 +17,7 @@ namespace NR { FilterImage::FilterImage() { + g_warning("FilterImage::render not implemented."); /* Testing with hardcoded xlink:href : image = Gdk::Pixbuf::create_from_file("/home/felipe/images/image1.jpg"); //TODO: handle errors @@ -33,13 +34,11 @@ FilterImage::~FilterImage() {} int FilterImage::render(FilterSlot &slot, Matrix const &trans) { + return 0; /* TODO: Implement this renderer method. -Specification: http://www.w3.org/TR/SVG11/filters.html#feImage + Specification: http://www.w3.org/TR/SVG11/filters.html#feImage - It would be good to findout how to reuse sp-image.cpp code - -After implementing it, add a reference to FilterImage::create - on Filter::_create_constructor_table() (nr-filter.cpp file) + It would be good to findout how to reuse sp-image.cpp code */ /* int w,x,y; diff --git a/src/display/nr-filter-turbulence.cpp b/src/display/nr-filter-turbulence.cpp new file mode 100644 index 000000000..2dbb33e65 --- /dev/null +++ b/src/display/nr-filter-turbulence.cpp @@ -0,0 +1,104 @@ +/* + * feTurbulence filter primitive renderer + * + * Authors: + * Felipe CorrĂȘa da Silva Sanches <felipe.sanches@gmail.com> + * + * Copyright (C) 2007 authors + * + * Released under GNU GPL, read the file 'COPYING' for more information + */ + +#include "display/nr-filter-turbulence.h" + +namespace NR { + +FilterTurbulence::FilterTurbulence() +: XbaseFrequency(0), + YbaseFrequency(0), + numOctaves(1), + seed(0) +{ + g_warning("FilterTurbulence::render not implemented."); +} + +FilterPrimitive * FilterTurbulence::create() { + return new FilterTurbulence(); +} + +FilterTurbulence::~FilterTurbulence() +{} + +void FilterTurbulence::set_baseFrequency(int axis, double freq){ + if (axis==0) XbaseFrequency=freq; + if (axis==1) YbaseFrequency=freq; +} + +void FilterTurbulence::set_numOctaves(int num){ + numOctaves=num; +} + +void FilterTurbulence::set_seed(double s){ + seed=s; +} + +void FilterTurbulence::set_stitchTiles(bool st){ + stitchTiles=st; +} + +void FilterTurbulence::set_type(int t){ + type=t; +} + + +int FilterTurbulence::render(FilterSlot &slot, Matrix const &trans) { +/* TODO: Implement this renderer method. + Specification: http://www.w3.org/TR/SVG11/filters.html#feTurbulence + +*/ + +/*debug: these are the available parameters + printf("XbaseFrequency = %f; ", XbaseFrequency); + printf("YbaseFrequency = %f; ", YbaseFrequency); + printf("numOctaves = %d;\n", numOctaves); + printf("seed = %f; ", seed); + printf("stitchTiles = %s; ", stitchTiles ? "stitch" : "noStitch"); + printf("type = %s;\n\n", type==0 ? "FractalNoise" : "turbulence"); +*/ + +//sample code: the following fills the whole area in semi-transparent red. + NRPixBlock *in = slot.get(_input); + NRPixBlock *out = new NRPixBlock; + int x,y; + int x0 = in->area.x0, y0 = in->area.y0; + int x1 = in->area.x1, y1 = in->area.y1; + int w = x1 - x0; + nr_pixblock_setup_fast(out, in->mode, x0, y0, x1, y1, true); + + unsigned char *out_data = NR_PIXBLOCK_PX(out); + for (x=x0; x < x1; x++){ + for (y=y0; y < y1; y++){ + out_data[4*((x - x0)+w*(y - y0)) + 0] = 255; + out_data[4*((x - x0)+w*(y - y0)) + 1] = 0; + out_data[4*((x - x0)+w*(y - y0)) + 2] = 0; + out_data[4*((x - x0)+w*(y - y0)) + 3] = 128; + } + } + + out->empty = FALSE; + slot.set(_output, out); + return 0; +} + +} /* namespace NR */ + +/* + Local Variables: + mode:c++ + c-file-style:"stroustrup" + c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +)) + indent-tabs-mode:nil + fill-column:99 + End: +*/ +// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 : diff --git a/src/display/nr-filter-turbulence.h b/src/display/nr-filter-turbulence.h new file mode 100644 index 000000000..bdb52e7b7 --- /dev/null +++ b/src/display/nr-filter-turbulence.h @@ -0,0 +1,53 @@ +#ifndef __NR_FILTER_TURBULENCE_H__ +#define __NR_FILTER_TURBULENCE_H__ + +/* + * feTurbulence filter primitive renderer + * + * Authors: + * Felipe Sanches <felipe.sanches@gmail.com> + * Niko Kiirala <niko@kiirala.com> + * + * Copyright (C) 2007 authors + * + * Released under GNU GPL, read the file 'COPYING' for more information + */ + +#include "display/nr-filter-primitive.h" +#include "display/nr-filter-slot.h" + +namespace NR { + +class FilterTurbulence : public FilterPrimitive { +public: + FilterTurbulence(); + static FilterPrimitive *create(); + virtual ~FilterTurbulence(); + + virtual int render(FilterSlot &slot, Matrix const &trans); + virtual void set_baseFrequency(int axis, double freq); + virtual void set_numOctaves(int num); + virtual void set_seed(double s); + virtual void set_stitchTiles(bool st); + virtual void set_type(int t); +private: + double XbaseFrequency, YbaseFrequency; + int numOctaves; + double seed; + bool stitchTiles; + int type; +}; + +} /* namespace NR */ + +#endif /* __NR_FILTER_TURBULENCE_H__ */ +/* + Local Variables: + mode:c++ + c-file-style:"stroustrup" + c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +)) + indent-tabs-mode:nil + fill-column:99 + End: +*/ +// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 : diff --git a/src/display/nr-filter.cpp b/src/display/nr-filter.cpp index eb6a48e6c..f09573eb4 100644 --- a/src/display/nr-filter.cpp +++ b/src/display/nr-filter.cpp @@ -21,15 +21,16 @@ #include "display/pixblock-scaler.h" #include "display/pixblock-transform.h" -#include "display/nr-filter-displacement-map.h" -#include "display/nr-filter-gaussian.h" -#include "display/nr-filter-convolve-matrix.h" #include "display/nr-filter-blend.h" -#include "display/nr-filter-offset.h" #include "display/nr-filter-composite.h" +#include "display/nr-filter-convolve-matrix.h" #include "display/nr-filter-diffuselighting.h" -#include "display/nr-filter-specularlighting.h" +#include "display/nr-filter-displacement-map.h" +#include "display/nr-filter-gaussian.h" #include "display/nr-filter-image.h" +#include "display/nr-filter-offset.h" +#include "display/nr-filter-specularlighting.h" +#include "display/nr-filter-turbulence.h" #include "display/nr-arena-item.h" #include "libnr/nr-pixblock.h" @@ -312,7 +313,9 @@ void Filter::_create_constructor_table() static bool created = false; if(created) return; - /* Filter effects not yet implemented are set to NULL */ +/* Some filter classes are not implemented yet. + Filters with constructors appearing in this table are not necessarilly already implemented. + Some of them still have only boilerplate-code.*/ _constructor[NR_FILTER_BLEND] = &FilterBlend::create; _constructor[NR_FILTER_COLORMATRIX] = NULL; _constructor[NR_FILTER_COMPONENTTRANSFER] = NULL; @@ -322,13 +325,13 @@ void Filter::_create_constructor_table() _constructor[NR_FILTER_DISPLACEMENTMAP] = &FilterDisplacementMap::create; _constructor[NR_FILTER_FLOOD] = NULL; _constructor[NR_FILTER_GAUSSIANBLUR] = &FilterGaussian::create; - _constructor[NR_FILTER_IMAGE] = NULL; + _constructor[NR_FILTER_IMAGE] = &FilterImage::create; _constructor[NR_FILTER_MERGE] = NULL; _constructor[NR_FILTER_MORPHOLOGY] = NULL; _constructor[NR_FILTER_OFFSET] = &FilterOffset::create; _constructor[NR_FILTER_SPECULARLIGHTING] = &FilterSpecularLighting::create; _constructor[NR_FILTER_TILE] = NULL; - _constructor[NR_FILTER_TURBULENCE] = NULL; + _constructor[NR_FILTER_TURBULENCE] = &FilterTurbulence::create; created = true; } |
