From 69fa0307807ee7cbaa0d06fb70fa64e37f7b1589 Mon Sep 17 00:00:00 2001 From: Felipe Corr??a da Silva Sanches Date: Thu, 26 Jul 2007 03:08:18 +0000 Subject: feImage boilerplate code. (bzr r3301) --- src/display/Makefile_insert | 2 + src/display/nr-filter-image.cpp | 86 +++++++++++++++++++++++++++++++++++++++++ src/display/nr-filter-image.h | 47 ++++++++++++++++++++++ src/display/nr-filter.cpp | 1 + 4 files changed, 136 insertions(+) create mode 100644 src/display/nr-filter-image.cpp create mode 100644 src/display/nr-filter-image.h (limited to 'src/display') diff --git a/src/display/Makefile_insert b/src/display/Makefile_insert index f31236674..baeaaec62 100644 --- a/src/display/Makefile_insert +++ b/src/display/Makefile_insert @@ -85,6 +85,8 @@ display_libspdisplay_a_SOURCES = \ display/nr-filter-convolve-matrix.h \ display/nr-filter-displacement-map.cpp \ display/nr-filter-displacement-map.h \ + display/nr-filter-image.cpp \ + display/nr-filter-image.h \ display/nr-filter-slot.cpp \ display/nr-filter-slot.h \ display/nr-filter-getalpha.cpp \ diff --git a/src/display/nr-filter-image.cpp b/src/display/nr-filter-image.cpp new file mode 100644 index 000000000..62a8caf20 --- /dev/null +++ b/src/display/nr-filter-image.cpp @@ -0,0 +1,86 @@ +/* + * feImage filter primitive renderer + * + * Authors: + * Felipe CorrĂȘa da Silva Sanches + * + * Copyright (C) 2007 authors + * + * Released under GNU GPL, read the file 'COPYING' for more information + */ + +#include "display/nr-filter-image.h" +// #include +// #include + +namespace NR { + +FilterImage::FilterImage() +{ +/* Testing with hardcoded xlink:href : + image = Gdk::Pixbuf::create_from_file("/home/felipe/images/image1.jpg"); + //TODO: handle errors + width = image->get_width()+1; + height = image->get_height()+1; + image_pixbuf = image->get_pixels();*/ +} + +FilterPrimitive * FilterImage::create() { + return new FilterImage(); +} + +FilterImage::~FilterImage() +{} + +int FilterImage::render(FilterSlot &slot, Matrix const &trans) { +/* TODO: Implement this renderer method. +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) +*/ + +/* int w,x,y; + NRPixBlock *in = slot.get(_input); + NRPixBlock *out = new NRPixBlock; + + int x0 = in->area.x0, y0 = in->area.y0; + int x1 = in->area.x1, y1 = in->area.y1; + if (x0<0) x0 = 0; + if (x1>width-1) x1 = width-1; + + if (y0<0) y0 = 0; + if (y1>height-1) y1 = height-1; + + nr_pixblock_setup_fast(out, in->mode, x0, y0, x1, y1, true); + + w = x1 - x0; + 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))] = (unsigned char) image_pixbuf[3*(x+width*y)]; //Red + out_data[4*((x - x0)+w*(y - y0)) + 1] = (unsigned char) image_pixbuf[3*(x+width*y) + 1]; //Green + out_data[4*((x - x0)+w*(y - y0)) + 2] = (unsigned char) image_pixbuf[3*(x+width*y) + 2]; //Blue + out_data[4*((x - x0)+w*(y - y0)) + 3] = 255; //Alpha + } + } + + 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-image.h b/src/display/nr-filter-image.h new file mode 100644 index 000000000..cad5d4ee1 --- /dev/null +++ b/src/display/nr-filter-image.h @@ -0,0 +1,47 @@ +#ifndef __NR_FILTER_IMAGE_H__ +#define __NR_FILTER_IMAGE_H__ + +/* + * feImage filter primitive renderer + * + * Authors: + * Niko Kiirala + * + * 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" +#include + +namespace NR { + +class FilterImage : public FilterPrimitive { +public: + FilterImage(); + static FilterPrimitive *create(); + virtual ~FilterImage(); + + virtual int render(FilterSlot &slot, Matrix const &trans); + +private: + guint8* image_pixbuf; + Glib::RefPtr image; + int width, height; +}; + +} /* namespace NR */ + +#endif /* __NR_FILTER_IMAGE_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 2491fba35..eb6a48e6c 100644 --- a/src/display/nr-filter.cpp +++ b/src/display/nr-filter.cpp @@ -29,6 +29,7 @@ #include "display/nr-filter-composite.h" #include "display/nr-filter-diffuselighting.h" #include "display/nr-filter-specularlighting.h" +#include "display/nr-filter-image.h" #include "display/nr-arena-item.h" #include "libnr/nr-pixblock.h" -- cgit v1.2.3