index fc03e564f8ce8483ac7c9d2d0166e4ab4945e592..ef95b87e5fe2eb425a5fcacc234804dfc10f719f 100644 (file)
*/
#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();
FilterFlood::~FilterFlood()
{}
-int FilterFlood::render(FilterSlot &slot, FilterUnits const &units) {
+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*/)
{
}