summaryrefslogtreecommitdiffstats
path: root/src/display
diff options
context:
space:
mode:
authorFelipe Corr??a da Silva Sanches <juca@members.fsf.org>2007-07-26 08:02:07 +0000
committerjucablues <jucablues@users.sourceforge.net>2007-07-26 08:02:07 +0000
commit2bfd492fe4020ac67daa342e8c0e715db42ae1f1 (patch)
tree3339917f51456b04c7f047f153f42473056a10d2 /src/display
parentFilter effects dialog: (diff)
downloadinkscape-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_insert26
-rw-r--r--src/display/nr-filter-convolve-matrix.cpp11
-rw-r--r--src/display/nr-filter-convolve-matrix.h6
-rw-r--r--src/display/nr-filter-displacement-map.cpp2
-rw-r--r--src/display/nr-filter-image.cpp9
-rw-r--r--src/display/nr-filter-turbulence.cpp104
-rw-r--r--src/display/nr-filter-turbulence.h53
-rw-r--r--src/display/nr-filter.cpp19
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;
}