X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=src%2Fdisplay%2Fnr-filter-flood.cpp;h=ef95b87e5fe2eb425a5fcacc234804dfc10f719f;hb=41e827f33b58d59f16117bf43ff1288ff38022f5;hp=5bd3466370c5dd78033ff508a928b26b43078188;hpb=76f8b79291ff270e0602159704dc2f07024e5132;p=inkscape.git diff --git a/src/display/nr-filter-flood.cpp b/src/display/nr-filter-flood.cpp index 5bd346637..ef95b87e5 100644 --- a/src/display/nr-filter-flood.cpp +++ b/src/display/nr-filter-flood.cpp @@ -10,12 +10,12 @@ */ #include "display/nr-filter-flood.h" +#include "display/nr-filter-utils.h" + namespace NR { FilterFlood::FilterFlood() -{ - g_warning("FilterFlood::render not implemented."); -} +{} FilterPrimitive * FilterFlood::create() { return new FilterFlood(); @@ -24,25 +24,52 @@ FilterPrimitive * FilterFlood::create() { FilterFlood::~FilterFlood() {} -int FilterFlood::render(FilterSlot &slot, Matrix const &trans) { +int FilterFlood::render(FilterSlot &slot, FilterUnits const &/*units*/) { NRPixBlock *in = slot.get(_input); + if (!in) { + g_warning("Missing source image for feFlood (in=%d)", _input); + 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, + nr_pixblock_setup_fast(out, NR_PIXBLOCK_MODE_R8G8B8A8N, 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! - + unsigned char r,g,b,a; + r = CLAMP_D_TO_U8((color >> 24) % 256); + g = CLAMP_D_TO_U8((color >> 16) % 256); + b = CLAMP_D_TO_U8((color >> 8) % 256); + a = CLAMP_D_TO_U8(opacity*255); + + 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::area_enlarge(NRRectL &area, Matrix const &trans) +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*/) { }