summaryrefslogtreecommitdiffstats
path: root/src/display
diff options
context:
space:
mode:
authorFelipe Corr??a da Silva Sanches <juca@members.fsf.org>2008-01-16 10:35:46 +0000
committerjucablues <jucablues@users.sourceforge.net>2008-01-16 10:35:46 +0000
commit5d82b3de8585b08cda97027067e7e9461ea79e2f (patch)
treeae2456e685ff75e7f16d5fb156a6f64dba68a445 /src/display
parentAdd option in Preferences to keep objects after conversion to guides (diff)
downloadinkscape-5d82b3de8585b08cda97027067e7e9461ea79e2f.tar.gz
inkscape-5d82b3de8585b08cda97027067e7e9461ea79e2f.zip
implementation of Flood Filter Effect renderer
(bzr r4515)
Diffstat (limited to 'src/display')
-rw-r--r--src/display/nr-filter-flood.cpp34
-rw-r--r--src/display/nr-filter-flood.h7
2 files changed, 32 insertions, 9 deletions
diff --git a/src/display/nr-filter-flood.cpp b/src/display/nr-filter-flood.cpp
index 7eade2789..951e5e460 100644
--- a/src/display/nr-filter-flood.cpp
+++ b/src/display/nr-filter-flood.cpp
@@ -10,14 +10,12 @@
*/
#include "display/nr-filter-flood.h"
-#include "display/nr-filter-units.h"
+#include "display/nr-filter-utils.h"
namespace NR {
FilterFlood::FilterFlood()
-{
- g_warning("FilterFlood::render not implemented.");
-}
+{}
FilterPrimitive * FilterFlood::create() {
return new FilterFlood();
@@ -33,24 +31,44 @@ int FilterFlood::render(FilterSlot &slot, FilterUnits const &/*units*/) {
return 1;
}
+ int i;
+ int in_w = in->area.x1 - in->area.x0;
+ int in_h = in->area.y1 - in->area.y0;
+
NRPixBlock *out = new NRPixBlock;
nr_pixblock_setup_fast(out, in->mode,
in->area.x0, in->area.y0, in->area.x1, in->area.y1,
true);
- unsigned char *in_data = NR_PIXBLOCK_PX(in);
unsigned char *out_data = NR_PIXBLOCK_PX(out);
-//IMPLEMENT ME!
- (void)in_data;
- (void)out_data;
+ unsigned char r,g,b,a;
+ r = (unsigned char) (color >> 24) % 256;
+ g = (unsigned char) (color >> 16) % 256;
+ b = (unsigned char) (color >> 8) % 256;
+ a = CLAMP_D_TO_U8(opacity*256);
+
+ for(i=0; i < 4*in_h*in_w; i+=4){
+ out_data[i]=r;
+ out_data[i+1]=g;
+ out_data[i+2]=b;
+ out_data[i+3]=a;
+ }
out->empty = FALSE;
slot.set(_output, out);
return 0;
}
+void FilterFlood::set_color(guint32 c) {
+ color = c;
+}
+
+void FilterFlood::set_opacity(double o) {
+ opacity = o;
+}
+
void FilterFlood::area_enlarge(NRRectL &/*area*/, Matrix const &/*trans*/)
{
}
diff --git a/src/display/nr-filter-flood.h b/src/display/nr-filter-flood.h
index 34cde5a78..6f7779a73 100644
--- a/src/display/nr-filter-flood.h
+++ b/src/display/nr-filter-flood.h
@@ -23,9 +23,14 @@ public:
FilterFlood();
static FilterPrimitive *create();
virtual ~FilterFlood();
-
+
+ virtual void set_opacity(double o);
+ virtual void set_color(guint32 c);
virtual int render(FilterSlot &slot, FilterUnits const &units);
virtual void area_enlarge(NRRectL &area, Matrix const &trans);
+private:
+ double opacity;
+ guint32 color;
};
} /* namespace NR */