diff options
| author | Krzysztof Kosi??ski <tweenk.pl@gmail.com> | 2010-07-14 02:32:10 +0000 |
|---|---|---|
| committer | Krzysztof Kosiński <tweenk.pl@gmail.com> | 2010-07-14 02:32:10 +0000 |
| commit | bb8404b19557519bd828113fa93604b10e9e7fe3 (patch) | |
| tree | 01fd9c531829445801184b172fd7636cde1ab86e /src | |
| parent | Gaussian blur (diff) | |
| download | inkscape-bb8404b19557519bd828113fa93604b10e9e7fe3.tar.gz inkscape-bb8404b19557519bd828113fa93604b10e9e7fe3.zip | |
Merge redundant *-fns.h into respective filter headers.
Move gaussian blur to filters directory.
Blend filter effect.
(bzr r9508.1.16)
Diffstat (limited to 'src')
76 files changed, 705 insertions, 1466 deletions
diff --git a/src/Makefile_insert b/src/Makefile_insert index 36c9de34f..2298ddb42 100644 --- a/src/Makefile_insert +++ b/src/Makefile_insert @@ -152,7 +152,6 @@ ink_common_sources += \ sp-desc.cpp sp-desc.h \ sp-ellipse.cpp sp-ellipse.h \ sp-filter.cpp sp-filter.h number-opt-number.h \ - sp-filter-fns.h \ sp-filter-primitive.cpp sp-filter-primitive.h \ sp-filter-reference.cpp sp-filter-reference.h \ sp-filter-units.h \ @@ -161,8 +160,6 @@ ink_common_sources += \ sp-flowtext.h sp-flowtext.cpp \ sp-font.cpp sp-font.h \ sp-font-face.cpp sp-font-face.h \ - sp-gaussian-blur.cpp sp-gaussian-blur.h \ - sp-gaussian-blur-fns.h \ sp-glyph.cpp sp-glyph.h \ sp-glyph-kerning.cpp sp-glyph-kerning.h \ sp-gradient.cpp sp-gradient.h \ diff --git a/src/desktop-style.cpp b/src/desktop-style.cpp index 26f29d172..1b277a381 100644 --- a/src/desktop-style.cpp +++ b/src/desktop-style.cpp @@ -28,7 +28,7 @@ #include "filters/blend.h" #include "sp-filter.h" #include "sp-filter-reference.h" -#include "sp-gaussian-blur.h" +#include "filters/gaussian-blur.h" #include "sp-flowtext.h" #include "sp-flowregion.h" #include "sp-flowdiv.h" diff --git a/src/display/cairo-utils.cpp b/src/display/cairo-utils.cpp index a063a62bb..36202f42e 100644 --- a/src/display/cairo-utils.cpp +++ b/src/display/cairo-utils.cpp @@ -337,11 +337,21 @@ ink_cairo_surface_copy(cairo_surface_t *s) { cairo_surface_t *ns = ink_cairo_surface_create_identical(s); - cairo_t *ct = cairo_create(ns); - cairo_set_source_surface(ct, s, 0, 0); - cairo_set_operator(ct, CAIRO_OPERATOR_SOURCE); - cairo_paint(ct); - cairo_destroy(ct); + if (cairo_surface_get_type(s) == CAIRO_SURFACE_TYPE_IMAGE) { + // use memory copy instead of using a Cairo context + cairo_surface_flush(s); + int stride = cairo_image_surface_get_stride(s); + int h = cairo_image_surface_get_height(s); + memcpy(cairo_image_surface_get_data(ns), cairo_image_surface_get_data(s), stride * h); + cairo_surface_mark_dirty(ns); + } else { + // generic implementation + cairo_t *ct = cairo_create(ns); + cairo_set_source_surface(ct, s, 0, 0); + cairo_set_operator(ct, CAIRO_OPERATOR_SOURCE); + cairo_paint(ct); + cairo_destroy(ct); + } return ns; } diff --git a/src/display/nr-arena-group.cpp b/src/display/nr-arena-group.cpp index 0fa5f332a..3bc78ea56 100644 --- a/src/display/nr-arena-group.cpp +++ b/src/display/nr-arena-group.cpp @@ -14,12 +14,10 @@ #include "display/nr-arena-group.h" #include "display/nr-filter.h" -#include "display/nr-filter-gaussian.h" #include "display/nr-filter-types.h" #include "style.h" #include "sp-filter.h" #include "sp-filter-reference.h" -#include "sp-gaussian-blur.h" #include "filters/blend.h" #include "display/nr-filter-blend.h" #include "helper/geom.h" diff --git a/src/display/nr-arena-image.cpp b/src/display/nr-arena-image.cpp index 325cff65a..422b691b7 100644 --- a/src/display/nr-arena-image.cpp +++ b/src/display/nr-arena-image.cpp @@ -21,12 +21,8 @@ #include "display/cairo-utils.h" #include "display/nr-arena.h" #include "display/nr-filter.h" -#include "display/nr-filter-gaussian.h" #include "sp-filter.h" #include "sp-filter-reference.h" -#include "sp-gaussian-blur.h" -#include "filters/blend.h" -#include "display/nr-filter-blend.h" int nr_arena_image_x_sample = 1; int nr_arena_image_y_sample = 1; diff --git a/src/display/nr-arena-item.h b/src/display/nr-arena-item.h index 468d352bc..447307535 100644 --- a/src/display/nr-arena-item.h +++ b/src/display/nr-arena-item.h @@ -1,6 +1,3 @@ -#ifndef __NR_ARENA_ITEM_H__ -#define __NR_ARENA_ITEM_H__ - /* * RGBA display list system for inkscape * @@ -13,6 +10,22 @@ * Released under GNU GPL, read the file 'COPYING' for more information */ +#ifndef SEEN_DISPLAY_NR_ARENA_ITEM_H +#define SEEN_DISPLAY_NR_ARENA_ITEM_H + +#include <cairo.h> +#include <2geom/matrix.h> +#include <libnr/nr-rect-l.h> +#include <libnr/nr-pixblock.h> +#include <libnr/nr-object.h> +#include "gc-soft-ptr.h" +#include "nr-arena-forward.h" + +namespace Inkscape { +namespace Filters { +class Filter; +} } + #define NR_TYPE_ARENA_ITEM (nr_arena_item_get_type ()) #define NR_ARENA_ITEM(o) (NR_CHECK_INSTANCE_CAST ((o), NR_TYPE_ARENA_ITEM, NRArenaItem)) #define NR_IS_ARENA_ITEM(o) (NR_CHECK_INSTANCE_TYPE ((o), NR_TYPE_ARENA_ITEM)) @@ -52,15 +65,6 @@ #define NR_ARENA_ITEM_RENDER_NO_CACHE (1 << 0) -#include <2geom/matrix.h> -#include <libnr/nr-rect-l.h> -#include <libnr/nr-pixblock.h> -#include <libnr/nr-object.h> -#include "gc-soft-ptr.h" -#include "nr-arena-forward.h" -#include "display/nr-filter.h" -#include <cairo.h> - struct NRGC { NRGC(NRGC const *p) : parent(p) {} NRGC const *parent; @@ -181,8 +185,7 @@ NRArenaItem *nr_arena_item_detach (NRArenaItem *parent, NRArenaItem *child); #define NR_ARENA_ITEM_SET_KEY(i,k) (((NRArenaItem *) (i))->key = (k)) #define NR_ARENA_ITEM_GET_KEY(i) (((NRArenaItem *) (i))->key) - -#endif /* !__NR_ARENA_ITEM_H__ */ +#endif /* !SEEN_DISPLAY_NR_ARENA_ITEM_H */ /* Local Variables: diff --git a/src/display/nr-filter-blend.cpp b/src/display/nr-filter-blend.cpp index 4645d9bc0..4ce37ae3b 100644 --- a/src/display/nr-filter-blend.cpp +++ b/src/display/nr-filter-blend.cpp @@ -15,6 +15,11 @@ * Released under GNU GPL, read the file 'COPYING' for more information */ +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "display/cairo-utils.h" #include "display/nr-filter-blend.h" #include "display/nr-filter-pixops.h" #include "display/nr-filter-primitive.h" @@ -24,6 +29,7 @@ #include "libnr/nr-pixblock.h" #include "libnr/nr-blit.h" #include "libnr/nr-pixops.h" +#include "preferences.h" namespace Inkscape { namespace Filters { @@ -125,6 +131,247 @@ FilterPrimitive * FilterBlend::create() { FilterBlend::~FilterBlend() {} +#define EXTRACT_ARGB32(px,a,r,g,b) \ + guint32 a, r, g, b; \ + a = (px & 0xff000000) >> 24; \ + r = (px & 0x00ff0000) >> 16; \ + g = (px & 0x0000ff00) >> 8; \ + b = (px & 0x000000ff); + +#define ASSEMBLE_ARGB32(px,a,r,g,b) \ + guint32 px = (a << 24) | (r << 16) | (g << 8) | b; + +// cr = (1-qa)*cb + (1-qb)*ca + ca*cb +struct BlendMultiply { + void operator()(guint32 in1, guint32 in2, guint32 *out) + { + EXTRACT_ARGB32(in1, aa, ra, ga, ba) + EXTRACT_ARGB32(in2, ab, rb, gb, bb) + + guint32 ao = 255*255 - (255-aa)*(255-ab); ao = (ao + 127) / 255; + guint32 ro = (255-aa)*rb + (255-ab)*ra + ra*rb; ro = (ro + 127) / 255; + guint32 go = (255-aa)*gb + (255-ab)*ga + ga*gb; go = (go + 127) / 255; + guint32 bo = (255-aa)*bb + (255-ab)*ba + ba*bb; bo = (bo + 127) / 255; + + ASSEMBLE_ARGB32(pxout, ao, ro, go, bo) + *out = pxout; + } +}; + +// cr = cb + ca - ca * cb +struct BlendScreen { + void operator()(guint32 in1, guint32 in2, guint32 *out) + { + EXTRACT_ARGB32(in1, aa, ra, ga, ba) + EXTRACT_ARGB32(in2, ab, rb, gb, bb) + + guint32 ao = 255*255 - (255-aa)*(255-ab); ao = (ao + 127) / 255; + guint32 ro = 255*(rb + ra) - ra * rb; ro = (ro + 127) / 255; + guint32 go = 255*(gb + ga) - ga * gb; go = (go + 127) / 255; + guint32 bo = 255*(bb + ba) - ba * bb; bo = (bo + 127) / 255; + + ASSEMBLE_ARGB32(pxout, ao, ro, go, bo) + *out = pxout; + } +}; + +// cr = Min ((1 - qa) * cb + ca, (1 - qb) * ca + cb) +struct BlendDarken { + void operator()(guint32 in1, guint32 in2, guint32 *out) + { + EXTRACT_ARGB32(in1, aa, ra, ga, ba) + EXTRACT_ARGB32(in2, ab, rb, gb, bb) + + guint32 ao = 255*255 - (255-aa)*(255-ab); ao = (ao + 127) / 255; + guint32 ro = std::min((255-aa)*rb + 255*ra, (255-ab)*ra + 255*rb); ro = (ro + 127) / 255; + guint32 go = std::min((255-aa)*gb + 255*ga, (255-ab)*ga + 255*gb); go = (go + 127) / 255; + guint32 bo = std::min((255-aa)*bb + 255*ba, (255-ab)*ba + 255*bb); bo = (bo + 127) / 255; + + ASSEMBLE_ARGB32(pxout, ao, ro, go, bo) + *out = pxout; + } +}; + +// cr = Max ((1 - qa) * cb + ca, (1 - qb) * ca + cb) +struct BlendLighten { + void operator()(guint32 in1, guint32 in2, guint32 *out) + { + EXTRACT_ARGB32(in1, aa, ra, ga, ba) + EXTRACT_ARGB32(in2, ab, rb, gb, bb) + + guint32 ao = 255*255 - (255-aa)*(255-ab); ao = (ao + 127) / 255; + guint32 ro = std::max((255-aa)*rb + 255*ra, (255-ab)*ra + 255*rb); ro = (ro + 127) / 255; + guint32 go = std::max((255-aa)*gb + 255*ga, (255-ab)*ga + 255*gb); go = (go + 127) / 255; + guint32 bo = std::max((255-aa)*bb + 255*ba, (255-ab)*ba + 255*bb); bo = (bo + 127) / 255; + + ASSEMBLE_ARGB32(pxout, ao, ro, go, bo) + *out = pxout; + } +}; + +/* +struct BlendAlpha +static inline void blend_alpha(guint32 in1, guint32 in2, guint32 *out) +{ + EXTRACT_ARGB32(in1, a1, a2, a3, a4); + EXTRACT_ARGB32(in2, b1, b2, b3, b4); + + guint32 o1 = 255*255 - (255-a1)*(255-b1); o1 = (o1+127) / 255; + guint32 o2 = 255*255 - (255-a2)*(255-b2); o2 = (o2+127) / 255; + guint32 o3 = 255*255 - (255-a3)*(255-b3); o3 = (o3+127) / 255; + guint32 o4 = 255*255 - (255-a4)*(255-b4); o4 = (o4+127) / 255; + + ASSEMBLE_ARGB32(pxout, o1, o2, o3, o4); + *out = pxout; +} +*/ + +template <typename Blend> +void surface_blend(cairo_surface_t *in1, cairo_surface_t *in2, cairo_surface_t *out) +{ + cairo_surface_flush(in1); + cairo_surface_flush(in2); + + // WARNING: code below assumes that: + // 1. Cairo ARGB32 surface strides are always divisible by 4 + // 2. We can only receive CAIRO_FORMAT_ARGB32 or CAIRO_FORMAT_A8 surfaces + + int w = cairo_image_surface_get_width(in2); + int h = cairo_image_surface_get_height(in2); + int stride1 = cairo_image_surface_get_stride(in1); + int stride2 = cairo_image_surface_get_stride(in2); + int strideout = cairo_image_surface_get_stride(out); + int bpp1 = cairo_image_surface_get_format(in1) == CAIRO_FORMAT_A8 ? 1 : 4; + int bpp2 = cairo_image_surface_get_format(in2) == CAIRO_FORMAT_A8 ? 1 : 4; + // assumption: out surface is CAIRO_FORMAT_ARGB32 if at least one input is ARGB32 + + guint32 *const in1_data = (guint32*) cairo_image_surface_get_data(in1); + guint32 *const in2_data = (guint32*) cairo_image_surface_get_data(in2); + guint32 *const out_data = (guint32*) cairo_image_surface_get_data(out); + + #if HAVE_OPENMP + Inkscape::Preferences *prefs = Inkscape::Preferences::get(); + int num_threads = prefs->getIntLimited("/options/threading/numthreads", omp_get_num_procs(), 1, 256); + #endif + + if (bpp1 == 4) { + if (bpp2 == 4) { + #if HAVE_OPENMP + #pragma omp parallel for num_threads(num_threads) + #endif + for (int i = 0; i < h; ++i) { + guint32 *in1_p = in1_data + i * stride1/4; + guint32 *in2_p = in2_data + i * stride2/4; + guint32 *out_p = out_data + i * strideout/4; + for (int j = 0; j < w; ++j) { + Blend()(*in1_p, *in2_p, out_p); + ++in1_p; + ++in2_p; + ++out_p; + } + } + } else { + // bpp2 == 1 + #if HAVE_OPENMP + #pragma omp parallel for num_threads(num_threads) + #endif + for (int i = 0; i < h; ++i) { + guint32 *in1_p = in1_data + i * stride1/4; + guint8 *in2_p = reinterpret_cast<guint8*>(in2_data) + i * stride2; + guint32 *out_p = out_data + i * strideout/4; + for (int j = 0; j < w; ++j) { + guint32 in2_px = *in2_p; + in2_px <<= 24; + Blend()(*in1_p, in2_px, out_p); + ++in1_p; + ++in2_p; + ++out_p; + } + } + } + } else { + if (bpp2 == 4) { + // bpp1 == 1 + #if HAVE_OPENMP + #pragma omp parallel for num_threads(num_threads) + #endif + for (int i = 0; i < h; ++i) { + guint8 *in1_p = reinterpret_cast<guint8*>(in1_data) + i * stride1; + guint32 *in2_p = in2_data + i * stride2/4; + guint32 *out_p = out_data + i * strideout/4; + for (int j = 0; j < w; ++j) { + guint32 in1_px = *in1_p; + in1_px <<= 24; + Blend()(in1_px, *in2_p, out_p); + ++in1_p; + ++in2_p; + ++out_p; + } + } + } else { + // bpp1 == 1 && bpp2 == 1 + // don't do anything - this should have been handled via Cairo blending + g_assert_not_reached(); + } + } + + cairo_surface_mark_dirty(out); +} + +void FilterBlend::render_cairo(FilterSlot &slot) +{ + cairo_surface_t *input1 = slot.getcairo(_input); + cairo_surface_t *input2 = slot.getcairo(_input2); + + cairo_content_t ct1 = cairo_surface_get_content(input1); + cairo_content_t ct2 = cairo_surface_get_content(input2); + + // input2 is the "background" image + // out should be ARGB32 if any of the inputs is ARGB32 + cairo_surface_t *out = NULL; + if ((ct1 == CAIRO_CONTENT_ALPHA && ct2 == CAIRO_CONTENT_ALPHA) + || _blend_mode == BLEND_NORMAL) + { + out = ink_cairo_surface_copy(input2); + cairo_t *out_ct = cairo_create(out); + cairo_set_source_surface(out_ct, input1, 0, 0); + cairo_paint(out_ct); + cairo_destroy(out_ct); + } else { + // blend mode != normal and at least 1 surface is not pure alpha + // create surface identical to the ARGB32 surface + if (ct1 == CAIRO_CONTENT_ALPHA) { + out = ink_cairo_surface_create_identical(input2); + } else { + out = ink_cairo_surface_create_identical(input1); + } + + // TODO: convert to Cairo blending operators once we start using the 1.10 series + switch (_blend_mode) { + case BLEND_MULTIPLY: + surface_blend<BlendMultiply>(input1, input2, out); + break; + case BLEND_SCREEN: + surface_blend<BlendScreen>(input1, input2, out); + break; + case BLEND_DARKEN: + surface_blend<BlendDarken>(input1, input2, out); + break; + case BLEND_LIGHTEN: + surface_blend<BlendLighten>(input1, input2, out); + break; + case BLEND_NORMAL: + default: + // this was handled before + g_assert_not_reached(); + break; + } + } + + slot.set(_output, out); + cairo_surface_destroy(out); +} + int FilterBlend::render(FilterSlot &slot, FilterUnits const & /*units*/) { NRPixBlock *in1 = slot.get(_input); NRPixBlock *in2 = slot.get(_input2); @@ -202,6 +449,12 @@ int FilterBlend::render(FilterSlot &slot, FilterUnits const & /*units*/) { return 0; } +bool FilterBlend::can_handle_affine(Geom::Matrix const &) +{ + // blend is a per-pixel primitive and is immutable under transformations + return true; +} + void FilterBlend::set_input(int slot) { _input = slot; } diff --git a/src/display/nr-filter-blend.h b/src/display/nr-filter-blend.h index ffdd62118..45da07f27 100644 --- a/src/display/nr-filter-blend.h +++ b/src/display/nr-filter-blend.h @@ -39,7 +39,9 @@ public: static FilterPrimitive *create(); virtual ~FilterBlend(); + virtual void render_cairo(FilterSlot &slot); virtual int render(FilterSlot &slot, FilterUnits const &units); + virtual bool can_handle_affine(Geom::Matrix const &); virtual void set_input(int slot); virtual void set_input(int input, int slot); diff --git a/src/display/nr-filter-gaussian.cpp b/src/display/nr-filter-gaussian.cpp index 2e6bed070..1e59748c4 100644 --- a/src/display/nr-filter-gaussian.cpp +++ b/src/display/nr-filter-gaussian.cpp @@ -32,8 +32,6 @@ #include "display/nr-filter-gaussian.h" #include "display/nr-filter-types.h" #include "display/nr-filter-units.h" -#include "libnr/nr-blit.h" -#include "libnr/nr-pixblock.h" #include <2geom/matrix.h> #include "util/fixed_point.h" #include "preferences.h" @@ -193,21 +191,6 @@ _effect_subsample_step_log2(double const deviation, int const quality) return stepsize_l2; } -/** - * Sanity check function for indexing pixblocks. - * Catches reading and writing outside the pixblock area. - * When enabled, decreases filter rendering speed massively. - */ -static inline void -_check_index(NRPixBlock const * const pb, int const location, int const line) -{ - if (false) { - int max_loc = pb->rs * (pb->area.y1 - pb->area.y0); - if (location < 0 || location >= max_loc) - g_warning("Location %d out of bounds (0 ... %d) at line %d", location, max_loc, line); - } -} - static void calcFilter(double const sigma, double b[N]) { assert(N==3); std::complex<double> const d1_org(1.40098, 1.00236); @@ -287,8 +270,10 @@ filter2D_IIR(PT *const dest, int const dstr1, int const dstr2, { #if G_BYTE_ORDER == G_LITTLE_ENDIAN static unsigned int const alpha_PC = PC-1; + #define PREMUL_ALPHA_LOOP for(unsigned int c=0; c<PC-1; ++c) #else static unsigned int const alpha_PC = 0; + #define PREMUL_ALPHA_LOOP for(unsigned int c=1; c<PC; ++c) #endif #if HAVE_OPENMP @@ -327,7 +312,7 @@ filter2D_IIR(PT *const dest, int const dstr1, int const dstr2, dstimg -= dstr1; if ( PREMULTIPLIED_ALPHA ) { dstimg[alpha_PC] = clip_round_cast<PT>(v[0][alpha_PC]); - for(unsigned int c=0; c<alpha_PC; c++) dstimg[c] = clip_round_cast<PT>(v[0][c], std::numeric_limits<PT>::min(), dstimg[alpha_PC]); + PREMUL_ALPHA_LOOP dstimg[c] = clip_round_cast<PT>(v[0][c], std::numeric_limits<PT>::min(), dstimg[alpha_PC]); } else { for(unsigned int c=0; c<PC; c++) dstimg[c] = clip_round_cast<PT>(v[0][c]); } @@ -342,7 +327,7 @@ filter2D_IIR(PT *const dest, int const dstr1, int const dstr2, dstimg -= dstr1; if ( PREMULTIPLIED_ALPHA ) { dstimg[alpha_PC] = clip_round_cast<PT>(v[0][alpha_PC]); - for(unsigned int c=0; c<alpha_PC; c++) dstimg[c] = clip_round_cast<PT>(v[0][c], std::numeric_limits<PT>::min(), dstimg[alpha_PC]); + PREMUL_ALPHA_LOOP dstimg[c] = clip_round_cast<PT>(v[0][c], std::numeric_limits<PT>::min(), dstimg[alpha_PC]); } else { for(unsigned int c=0; c<PC; c++) dstimg[c] = clip_round_cast<PT>(v[0][c]); } @@ -457,93 +442,6 @@ filter2D_FIR(PT *const dst, int const dstr1, int const dstr2, } } -template<typename PT, unsigned int PC> -static void -downsample(PT *const dst, int const dstr1, int const dstr2, int const dn1, int const dn2, - PT const *const src, int const sstr1, int const sstr2, int const sn1, int const sn2, - int const step1_l2, int const step2_l2) -{ - unsigned int const divisor_l2 = step1_l2+step2_l2; // step1*step2=2^(step1_l2+step2_l2) - unsigned int const round_offset = (1<<divisor_l2)/2; - int const step1 = 1<<step1_l2; - int const step2 = 1<<step2_l2; - int const step1_2 = step1/2; - int const step2_2 = step2/2; - for(int dc2 = 0 ; dc2 < dn2 ; dc2++) { - int const sc2_begin = (dc2<<step2_l2)-step2_2; - int const sc2_end = sc2_begin+step2; - for(int dc1 = 0 ; dc1 < dn1 ; dc1++) { - int const sc1_begin = (dc1<<step1_l2)-step1_2; - int const sc1_end = sc1_begin+step1; - unsigned int sum[PC]; - std::fill_n(sum, PC, 0); - for(int sc2 = sc2_begin ; sc2 < sc2_end ; sc2++) { - for(int sc1 = sc1_begin ; sc1 < sc1_end ; sc1++) { - for(unsigned int ch = 0 ; ch < PC ; ch++) { - sum[ch] += src[clip(sc2,0,sn2-1)*sstr2+clip(sc1,0,sn1-1)*sstr1+ch]; - } - } - } - for(unsigned int ch = 0 ; ch < PC ; ch++) { - dst[dc2*dstr2+dc1*dstr1+ch] = static_cast<PT>((sum[ch]+round_offset)>>divisor_l2); - } - } - } -} - -template<typename PT, unsigned int PC> -static void -upsample(PT *const dst, int const dstr1, int const dstr2, unsigned int const dn1, unsigned int const dn2, - PT const *const src, int const sstr1, int const sstr2, unsigned int const sn1, unsigned int const sn2, - unsigned int const step1_l2, unsigned int const step2_l2) -{ - assert(((sn1-1)<<step1_l2)>=dn1 && ((sn2-1)<<step2_l2)>=dn2); // The last pixel of the source image should fall outside the destination image - unsigned int const divisor_l2 = step1_l2+step2_l2; // step1*step2=2^(step1_l2+step2_l2) - unsigned int const round_offset = (1<<divisor_l2)/2; - unsigned int const step1 = 1<<step1_l2; - unsigned int const step2 = 1<<step2_l2; - for ( unsigned int sc2 = 0 ; sc2 < sn2-1 ; sc2++ ) { - unsigned int const dc2_begin = (sc2 << step2_l2); - unsigned int const dc2_end = std::min(dn2, dc2_begin+step2); - for ( unsigned int sc1 = 0 ; sc1 < sn1-1 ; sc1++ ) { - unsigned int const dc1_begin = (sc1 << step1_l2); - unsigned int const dc1_end = std::min(dn1, dc1_begin+step1); - for ( unsigned int byte = 0 ; byte < PC ; byte++) { - - // get 4 values at the corners of the pixel from src - PT a00 = src[sstr2* sc2 + sstr1* sc1 + byte]; - PT a10 = src[sstr2* sc2 + sstr1*(sc1+1) + byte]; - PT a01 = src[sstr2*(sc2+1) + sstr1* sc1 + byte]; - PT a11 = src[sstr2*(sc2+1) + sstr1*(sc1+1) + byte]; - - // initialize values for linear interpolation - unsigned int a0 = a00*step2/*+a01*0*/; - unsigned int a1 = a10*step2/*+a11*0*/; - - // iterate over the rectangle to be interpolated - for ( unsigned int dc2 = dc2_begin ; dc2 < dc2_end ; dc2++ ) { - - // prepare linear interpolation for this row - unsigned int a = a0*step1/*+a1*0*/+round_offset; - - for ( unsigned int dc1 = dc1_begin ; dc1 < dc1_end ; dc1++ ) { - - // simple linear interpolation - dst[dstr2*dc2 + dstr1*dc1 + byte] = static_cast<PT>(a>>divisor_l2); - - // compute a = a0*(ix-1)+a1*(xi+1)+round_offset - a = a - a0 + a1; - } - - // compute a0 = a00*(iy-1)+a01*(yi+1) and similar for a1 - a0 = a0 - a00 + a01; - a1 = a1 - a10 + a11; - } - } - } - } -} - static void gaussian_pass_IIR(Geom::Dim2 d, double deviation, cairo_surface_t *src, cairo_surface_t *dest, IIRValue **tmpdata, int num_threads) @@ -735,315 +633,6 @@ void FilterGaussian::render_cairo(FilterSlot &slot) } } -int FilterGaussian::render(FilterSlot &slot, FilterUnits const &units) -{ - // TODO: Meaningful return values? (If they're checked at all.) - - /* in holds the input pixblock */ - NRPixBlock *original_in = slot.get(_input); - - /* If to either direction, the standard deviation is zero or - * input image is not defined, - * a transparent black image should be returned. */ - if (_deviation_x <= 0 || _deviation_y <= 0 || original_in == NULL) { - NRPixBlock *src = original_in; - if (src == NULL) { - g_warning("Missing source image for feGaussianBlur (in=%d)", _input); - // A bit guessing here, but source graphic is likely to be of - // right size - src = slot.get(NR_FILTER_SOURCEGRAPHIC); - } - NRPixBlock *out = new NRPixBlock; - nr_pixblock_setup_fast(out, src->mode, src->area.x0, src->area.y0, - src->area.x1, src->area.y1, true); - if (out->size != NR_PIXBLOCK_SIZE_TINY && out->data.px != NULL) { - out->empty = false; - slot.set(_output, out); - } - return 0; - } - - // Gaussian blur is defined to operate on non-premultiplied color values. - // So, convert the input first it uses non-premultiplied color values. - // And please note that this should not be done AFTER resampling, as resampling a non-premultiplied image - // does not simply yield a non-premultiplied version of the resampled premultiplied image!!! - NRPixBlock *in = original_in; - if (in->mode == NR_PIXBLOCK_MODE_R8G8B8A8N) { - in = nr_pixblock_new_fast(NR_PIXBLOCK_MODE_R8G8B8A8P, - original_in->area.x0, original_in->area.y0, - original_in->area.x1, original_in->area.y1, - false); - if (!in) { - // ran out of memory - return 0; - } - nr_blit_pixblock_pixblock(in, original_in); - } - - Geom::Matrix trans = units.get_matrix_primitiveunits2pb(); - - // Some common constants - int const width_org = in->area.x1-in->area.x0, height_org = in->area.y1-in->area.y0; - double const deviation_x_org = _deviation_x * trans.expansionX(); - double const deviation_y_org = _deviation_y * trans.expansionY(); - int const PC = NR_PIXBLOCK_BPP(in); -#if HAVE_OPENMP - int const NTHREADS = std::max(1,std::min(8, Inkscape::Preferences::get()->getInt("/options/threading/numthreads", omp_get_num_procs()))); -#else - int const NTHREADS = 1; -#endif // HAVE_OPENMP - - // Subsampling constants - int const quality = slot.get_blurquality(); - int const x_step_l2 = _effect_subsample_step_log2(deviation_x_org, quality); - int const y_step_l2 = _effect_subsample_step_log2(deviation_y_org, quality); - int const x_step = 1<<x_step_l2; - int const y_step = 1<<y_step_l2; - bool const resampling = x_step > 1 || y_step > 1; - int const width = resampling ? static_cast<int>(ceil(static_cast<double>(width_org)/x_step))+1 : width_org; - int const height = resampling ? static_cast<int>(ceil(static_cast<double>(height_org)/y_step))+1 : height_org; - double const deviation_x = deviation_x_org / x_step; - double const deviation_y = deviation_y_org / y_step; - int const scr_len_x = _effect_area_scr(deviation_x); - int const scr_len_y = _effect_area_scr(deviation_y); - - // Decide which filter to use for X and Y - // This threshold was determined by trial-and-error for one specific machine, - // so there's a good chance that it's not optimal. - // Whatever you do, don't go below 1 (and preferrably not even below 2), as - // the IIR filter gets unstable there. - bool const use_IIR_x = deviation_x > 3; - bool const use_IIR_y = deviation_y > 3; - - // new buffer for the subsampled output - NRPixBlock *out = new NRPixBlock; - nr_pixblock_setup_fast(out, in->mode, in->area.x0/x_step, in->area.y0/y_step, - in->area.x0/x_step+width, in->area.y0/y_step+height, true); - if (out->size != NR_PIXBLOCK_SIZE_TINY && out->data.px == NULL) { - // alas, we've accomplished a lot, but ran out of memory - so abort - if (in != original_in) nr_pixblock_free(in); - delete out; - return 0; - } - // Temporary storage for IIR filter - // NOTE: This can be eliminated, but it reduces the precision a bit - IIRValue * tmpdata[NTHREADS]; - std::fill_n(tmpdata, NTHREADS, (IIRValue*)0); - if ( use_IIR_x || use_IIR_y ) { - for(int i=0; i<NTHREADS; i++) { - tmpdata[i] = new IIRValue[std::max(width,height)*PC]; - if (tmpdata[i] == NULL) { - if (in != original_in) nr_pixblock_free(in); - nr_pixblock_release(out); - while(i-->0) { - delete[] tmpdata[i]; - } - delete out; - return 0; - } - } - } - - // Resampling (if necessary), goes from in -> out (setting ssin to out if used) - NRPixBlock *ssin = in; - if ( resampling ) { - ssin = out; - // Downsample - switch(in->mode) { - case NR_PIXBLOCK_MODE_A8: ///< Grayscale - downsample<unsigned char,1>(NR_PIXBLOCK_PX(out), 1, out->rs, width, height, NR_PIXBLOCK_PX(in), 1, in->rs, width_org, height_org, x_step_l2, y_step_l2); - break; - case NR_PIXBLOCK_MODE_R8G8B8: ///< 8 bit RGB - downsample<unsigned char,3>(NR_PIXBLOCK_PX(out), 3, out->rs, width, height, NR_PIXBLOCK_PX(in), 3, in->rs, width_org, height_org, x_step_l2, y_step_l2); - break; - //case NR_PIXBLOCK_MODE_R8G8B8A8N: ///< Normal 8 bit RGBA - // downsample<unsigned char,4>(NR_PIXBLOCK_PX(out), 4, out->rs, width, height, NR_PIXBLOCK_PX(in), 4, in->rs, width_org, height_org, x_step_l2, y_step_l2); - // break; - case NR_PIXBLOCK_MODE_R8G8B8A8P: ///< Premultiplied 8 bit RGBA - downsample<unsigned char,4>(NR_PIXBLOCK_PX(out), 4, out->rs, width, height, NR_PIXBLOCK_PX(in), 4, in->rs, width_org, height_org, x_step_l2, y_step_l2); - break; - default: - assert(false); - }; - } - - // Horizontal filtering, goes from ssin -> out (ssin might be equal to out, but these algorithms can be used in-place) - if (use_IIR_x) { - // Filter variables - IIRValue b[N+1]; // scaling coefficient + filter coefficients (can be 10.21 fixed point) - double bf[N]; // computed filter coefficients - double M[N*N]; // matrix used for initialization procedure (has to be double) - - // Compute filter (x) - calcFilter(deviation_x, bf); - for(size_t i=0; i<N; i++) bf[i] = -bf[i]; - b[0] = 1; // b[0] == alpha (scaling coefficient) - for(size_t i=0; i<N; i++) { - b[i+1] = bf[i]; - b[0] -= b[i+1]; - } - - // Compute initialization matrix (x) - calcTriggsSdikaM(bf, M); - - // Filter (x) - switch(in->mode) { - case NR_PIXBLOCK_MODE_A8: ///< Grayscale - filter2D_IIR<unsigned char,1,false>(NR_PIXBLOCK_PX(out), 1, out->rs, NR_PIXBLOCK_PX(ssin), 1, ssin->rs, width, height, b, M, tmpdata, NTHREADS); - break; - case NR_PIXBLOCK_MODE_R8G8B8: ///< 8 bit RGB - filter2D_IIR<unsigned char,3,false>(NR_PIXBLOCK_PX(out), 3, out->rs, NR_PIXBLOCK_PX(ssin), 3, ssin->rs, width, height, b, M, tmpdata, NTHREADS); - break; - //case NR_PIXBLOCK_MODE_R8G8B8A8N: ///< Normal 8 bit RGBA - // filter2D_IIR<unsigned char,4,false>(NR_PIXBLOCK_PX(out), 4, out->rs, NR_PIXBLOCK_PX(ssin), 4, ssin->rs, width, height, b, M, tmpdata, NTHREADS); - // break; - case NR_PIXBLOCK_MODE_R8G8B8A8P: ///< Premultiplied 8 bit RGBA - filter2D_IIR<unsigned char,4,true >(NR_PIXBLOCK_PX(out), 4, out->rs, NR_PIXBLOCK_PX(ssin), 4, ssin->rs, width, height, b, M, tmpdata, NTHREADS); - break; - default: - assert(false); - }; - } else if ( scr_len_x > 0 ) { // !use_IIR_x - // Filter kernel for x direction - FIRValue kernel[scr_len_x+1]; - _make_kernel(kernel, deviation_x); - - // Filter (x) - switch(in->mode) { - case NR_PIXBLOCK_MODE_A8: ///< Grayscale - filter2D_FIR<unsigned char,1>(NR_PIXBLOCK_PX(out), 1, out->rs, NR_PIXBLOCK_PX(ssin), 1, ssin->rs, width, height, kernel, scr_len_x, NTHREADS); - break; - case NR_PIXBLOCK_MODE_R8G8B8: ///< 8 bit RGB - filter2D_FIR<unsigned char,3>(NR_PIXBLOCK_PX(out), 3, out->rs, NR_PIXBLOCK_PX(ssin), 3, ssin->rs, width, height, kernel, scr_len_x, NTHREADS); - break; - //case NR_PIXBLOCK_MODE_R8G8B8A8N: ///< Normal 8 bit RGBA - // filter2D_FIR<unsigned char,4>(NR_PIXBLOCK_PX(out), 4, out->rs, NR_PIXBLOCK_PX(ssin), 4, ssin->rs, width, height, kernel, scr_len_x, NTHREADS); - // break; - case NR_PIXBLOCK_MODE_R8G8B8A8P: ///< Premultiplied 8 bit RGBA - filter2D_FIR<unsigned char,4>(NR_PIXBLOCK_PX(out), 4, out->rs, NR_PIXBLOCK_PX(ssin), 4, ssin->rs, width, height, kernel, scr_len_x, NTHREADS); - break; - default: - assert(false); - }; - } else if ( out != ssin ) { // out can be equal to ssin if resampling is used - nr_blit_pixblock_pixblock(out, ssin); - } - - // Vertical filtering, goes from out -> out - if (use_IIR_y) { - // Filter variables - IIRValue b[N+1]; // scaling coefficient + filter coefficients (can be 10.21 fixed point) - double bf[N]; // computed filter coefficients - double M[N*N]; // matrix used for initialization procedure (has to be double) - - // Compute filter (y) - calcFilter(deviation_y, bf); - for(size_t i=0; i<N; i++) bf[i] = -bf[i]; - b[0] = 1; // b[0] == alpha (scaling coefficient) - for(size_t i=0; i<N; i++) { - b[i+1] = bf[i]; - b[0] -= b[i+1]; - } - - // Compute initialization matrix (y) - calcTriggsSdikaM(bf, M); - - // Filter (y) - switch(in->mode) { - case NR_PIXBLOCK_MODE_A8: ///< Grayscale - filter2D_IIR<unsigned char,1,false>(NR_PIXBLOCK_PX(out), out->rs, 1, NR_PIXBLOCK_PX(out), out->rs, 1, height, width, b, M, tmpdata, NTHREADS); - break; - case NR_PIXBLOCK_MODE_R8G8B8: ///< 8 bit RGB - filter2D_IIR<unsigned char,3,false>(NR_PIXBLOCK_PX(out), out->rs, 3, NR_PIXBLOCK_PX(out), out->rs, 3, height, width, b, M, tmpdata, NTHREADS); - break; - //case NR_PIXBLOCK_MODE_R8G8B8A8N: ///< Normal 8 bit RGBA - // filter2D_IIR<unsigned char,4,false>(NR_PIXBLOCK_PX(out), out->rs, 4, NR_PIXBLOCK_PX(out), out->rs, 4, height, width, b, M, tmpdata, NTHREADS); - // break; - case NR_PIXBLOCK_MODE_R8G8B8A8P: ///< Premultiplied 8 bit RGBA - filter2D_IIR<unsigned char,4,true >(NR_PIXBLOCK_PX(out), out->rs, 4, NR_PIXBLOCK_PX(out), out->rs, 4, height, width, b, M, tmpdata, NTHREADS); - break; - default: - assert(false); - }; - } else if ( scr_len_y > 0 ) { // !use_IIR_y - // Filter kernel for y direction - FIRValue kernel[scr_len_y+1]; - _make_kernel(kernel, deviation_y); - - // Filter (y) - switch(in->mode) { - case NR_PIXBLOCK_MODE_A8: ///< Grayscale - filter2D_FIR<unsigned char,1>(NR_PIXBLOCK_PX(out), out->rs, 1, NR_PIXBLOCK_PX(out), out->rs, 1, height, width, kernel, scr_len_y, NTHREADS); - break; - case NR_PIXBLOCK_MODE_R8G8B8: ///< 8 bit RGB - filter2D_FIR<unsigned char,3>(NR_PIXBLOCK_PX(out), out->rs, 3, NR_PIXBLOCK_PX(out), out->rs, 3, height, width, kernel, scr_len_y, NTHREADS); - break; - //case NR_PIXBLOCK_MODE_R8G8B8A8N: ///< Normal 8 bit RGBA - // filter2D_FIR<unsigned char,4>(NR_PIXBLOCK_PX(out), out->rs, 4, NR_PIXBLOCK_PX(out), out->rs, 4, height, width, kernel, scr_len_y, NTHREADS); - // break; - case NR_PIXBLOCK_MODE_R8G8B8A8P: ///< Premultiplied 8 bit RGBA - filter2D_FIR<unsigned char,4>(NR_PIXBLOCK_PX(out), out->rs, 4, NR_PIXBLOCK_PX(out), out->rs, 4, height, width, kernel, scr_len_y, NTHREADS); - break; - default: - assert(false); - }; - } - - for(int i=0; i<NTHREADS; i++) { - delete[] tmpdata[i]; // deleting a nullptr has no effect, so this is safe - } - - // Upsampling, stores (the upsampled) out using slot.set(_output, ...) - if ( !resampling ) { - // No upsampling needed - out->empty = FALSE; - slot.set(_output, out); - } else { - // New buffer for the final output, same resolution as the in buffer - NRPixBlock *finalout = new NRPixBlock; - nr_pixblock_setup_fast(finalout, in->mode, in->area.x0, in->area.y0, - in->area.x1, in->area.y1, true); - if (finalout->size != NR_PIXBLOCK_SIZE_TINY && finalout->data.px == NULL) { - // alas, we've accomplished a lot, but ran out of memory - so abort - if (in != original_in) nr_pixblock_free(in); - nr_pixblock_release(out); - delete out; - return 0; - } - - // Upsample - switch(in->mode) { - case NR_PIXBLOCK_MODE_A8: ///< Grayscale - upsample<unsigned char,1>(NR_PIXBLOCK_PX(finalout), 1, finalout->rs, width_org, height_org, NR_PIXBLOCK_PX(out), 1, out->rs, width, height, x_step_l2, y_step_l2); - break; - case NR_PIXBLOCK_MODE_R8G8B8: ///< 8 bit RGB - upsample<unsigned char,3>(NR_PIXBLOCK_PX(finalout), 3, finalout->rs, width_org, height_org, NR_PIXBLOCK_PX(out), 3, out->rs, width, height, x_step_l2, y_step_l2); - break; - //case NR_PIXBLOCK_MODE_R8G8B8A8N: ///< Normal 8 bit RGBA - // upsample<unsigned char,4>(NR_PIXBLOCK_PX(finalout), 4, finalout->rs, width_org, height_org, NR_PIXBLOCK_PX(out), 4, out->rs, width, height, x_step_l2, y_step_l2); - // break; - case NR_PIXBLOCK_MODE_R8G8B8A8P: ///< Premultiplied 8 bit RGBA - upsample<unsigned char,4>(NR_PIXBLOCK_PX(finalout), 4, finalout->rs, width_org, height_org, NR_PIXBLOCK_PX(out), 4, out->rs, width, height, x_step_l2, y_step_l2); - break; - default: - assert(false); - }; - - // We don't need the out buffer anymore - nr_pixblock_release(out); - delete out; - - // The final out buffer gets returned - finalout->empty = FALSE; - slot.set(_output, finalout); - } - - // If we downsampled the input, clean up the downsampled data - if (in != original_in) nr_pixblock_free(in); - - return 0; -} - void FilterGaussian::area_enlarge(NRRectL &area, Geom::Matrix const &trans) { int area_x = _effect_area_scr(_deviation_x * trans.expansionX()); @@ -1057,8 +646,14 @@ void FilterGaussian::area_enlarge(NRRectL &area, Geom::Matrix const &trans) area.y1 += area_max; } -FilterTraits FilterGaussian::get_input_traits() { - return TRAIT_PARALLER; +bool FilterGaussian::can_handle_affine(Geom::Matrix const &m) +{ + if (Geom::are_near(_deviation_x, _deviation_y)) { + // TODO after 2Geom sync, change this to m.preservesAngles() + return Geom::are_near(m[0], m[3]) && Geom::are_near(m[1], -m[2]); + } else { + return false; + } } void FilterGaussian::set_deviation(double deviation) diff --git a/src/display/nr-filter-gaussian.h b/src/display/nr-filter-gaussian.h index 7bcabdba9..01ce9efcb 100644 --- a/src/display/nr-filter-gaussian.h +++ b/src/display/nr-filter-gaussian.h @@ -39,9 +39,8 @@ public: virtual ~FilterGaussian(); virtual void render_cairo(FilterSlot &slot); - virtual int render(FilterSlot &slot, FilterUnits const &units); virtual void area_enlarge(NRRectL &area, Geom::Matrix const &m); - virtual FilterTraits get_input_traits(); + virtual bool can_handle_affine(Geom::Matrix const &m); /** * Set the standard deviation value for gaussian blur. Deviation along diff --git a/src/display/nr-filter-primitive.h b/src/display/nr-filter-primitive.h index a7ae0125e..89927fdbd 100644 --- a/src/display/nr-filter-primitive.h +++ b/src/display/nr-filter-primitive.h @@ -44,7 +44,7 @@ public: virtual ~FilterPrimitive(); virtual void render_cairo(FilterSlot &slot); - virtual int render(FilterSlot &slot, FilterUnits const &units) = 0; + virtual int render(FilterSlot &slot, FilterUnits const &units) { return 0; } virtual void area_enlarge(NRRectL &area, Geom::Matrix const &m); /** @@ -109,6 +109,20 @@ public: */ virtual FilterTraits get_input_traits(); + /** @brief Indicate whether the filter primitive can handle the given affine. + * + * Results of some filter primitives depend on the coordinate system used when rendering. + * A gaussian blur will equal x and y deviation will remain unchanged by rotations. + * Per-pixel filters like color matrix and blend will not change regardless of + * the transformation. + * + * When any filter returns false, filter rendering is performed on an intermediate surface + * with edges parallel to the axes of the user coordinate system. This means + * the matrices from FilterUnits will contain at most a (possibly non-uniform) scale + * and a translation. When all primitives of the filter return false, the rendering is + * performed in display coordinate space and no intermediate surface is used. */ + virtual bool can_handle_affine(Geom::Matrix const &) { return false; } + protected: int _input; int _output; diff --git a/src/display/nr-filter-slot.cpp b/src/display/nr-filter-slot.cpp index d700cd433..5371499e4 100644 --- a/src/display/nr-filter-slot.cpp +++ b/src/display/nr-filter-slot.cpp @@ -20,7 +20,6 @@ #include "display/nr-filter-types.h" #include "display/nr-filter-gaussian.h" #include "display/nr-filter-slot.h" -#include "display/nr-filter-getalpha.h" #include "display/nr-filter-units.h" #include "display/pixblock-scaler.h" #include "display/pixblock-transform.h" @@ -131,10 +130,9 @@ cairo_surface_t *FilterSlot::getcairo(int slot_nr) cairo_surface_destroy(tr); } break; case NR_FILTER_BACKGROUNDIMAGE: { - // TODO - //cairo_surface_t *bg = _get_transformed_background(); - //_set_internal(NR_FILTER_BACKGROUNDIMAGE, bg); - //cairo_surface_destroy(bg); + cairo_surface_t *bg = _get_transformed_background(); + _set_internal(NR_FILTER_BACKGROUNDIMAGE, bg); + cairo_surface_destroy(bg); } break; case NR_FILTER_SOURCEALPHA: { cairo_surface_t *src = getcairo(NR_FILTER_SOURCEGRAPHIC); @@ -158,8 +156,12 @@ cairo_surface_t *FilterSlot::getcairo(int slot_nr) if (s == _slots.end()) { // create empty surface - // TODO - return NULL; + cairo_surface_t *empty = cairo_surface_create_similar( + _source_graphic, cairo_surface_get_content(_source_graphic), + _slot_area.x1 - _slot_area.x0, _slot_area.y1 - _slot_area.y0); + _set_internal(slot_nr, empty); + cairo_surface_destroy(empty); + s = _slots.find(slot_nr); } return s->second; @@ -189,7 +191,23 @@ cairo_surface_t *FilterSlot::_get_transformed_source_graphic() cairo_surface_t *FilterSlot::_get_transformed_background() { - return NULL; + Geom::Matrix trans = _units.get_matrix_display2pb(); + + cairo_surface_t *bg = cairo_get_target(_background_ct); + cairo_surface_t *tbg = cairo_surface_create_similar( + bg, cairo_surface_get_content(bg), + _slot_area.x1 - _slot_area.x0, _slot_area.y1 - _slot_area.y0); + cairo_t *tbg_ct = cairo_create(tbg); + + cairo_translate(tbg_ct, -_slot_area.x0, -_slot_area.y0); + ink_cairo_transform(tbg_ct, trans); + cairo_translate(tbg_ct, _background_area->x0, _background_area->y0); + cairo_set_source_surface(tbg_ct, bg, 0, 0); + cairo_set_operator(tbg_ct, CAIRO_OPERATOR_SOURCE); + cairo_paint(tbg_ct); + cairo_destroy(tbg_ct); + + return tbg; } cairo_surface_t *FilterSlot::get_result(int res) @@ -299,11 +317,6 @@ void FilterSlot::set(int slot_nr, cairo_surface_t *surface) trans[1] * x1 + trans[3] * y0 + trans[5], trans[1] * x1 + trans[3] * y1 + trans[5]); - cairo_surface_t *trans_s = cairo_surface_create_similar(s, - CAIRO_CONTENT_COLOR, max_x - min_x, max_y - min_y); - cairo_t *ct = cairo_create(trans_s); - - nr_pixblock_setup_fast(trans_pb, pb->mode, min_x, min_y, max_x, max_y, true); diff --git a/src/filter-chemistry.cpp b/src/filter-chemistry.cpp index 363663ac3..298531db0 100644 --- a/src/filter-chemistry.cpp +++ b/src/filter-chemistry.cpp @@ -22,9 +22,9 @@ #include "filter-enums.h" #include "filters/blend.h" +#include "filters/gaussian-blur.h" #include "sp-filter.h" #include "sp-filter-reference.h" -#include "sp-gaussian-blur.h" #include "svg/css-ostringstream.h" #include "libnr/nr-matrix-fns.h" diff --git a/src/filter-chemistry.h b/src/filter-chemistry.h index 1b18ec11a..67531d630 100644 --- a/src/filter-chemistry.h +++ b/src/filter-chemistry.h @@ -1,6 +1,3 @@ -#ifndef __SP_FILTER_CHEMISTRY_H__ -#define __SP_FILTER_CHEMISTRY_H__ - /* * Various utility methods for filters * @@ -14,8 +11,14 @@ * Released under GNU GPL, read the file 'COPYING' for more information */ +#ifndef SEEN_SP_FILTER_CHEMISTRY_H +#define SEEN_SP_FILTER_CHEMISTRY_H + #include "forward.h" -#include "sp-filter.h" +#include "display/nr-filter-types.h" + +class SPFilter; +class SPFilterPrimitive; SPFilterPrimitive *filter_add_primitive(SPFilter *filter, Inkscape::Filters::FilterPrimitiveType); SPFilter *new_filter (SPDocument *document); diff --git a/src/filters/Makefile_insert b/src/filters/Makefile_insert index dde7cdb68..ea9ff4b56 100644 --- a/src/filters/Makefile_insert +++ b/src/filters/Makefile_insert @@ -1,59 +1,46 @@ ## Makefile.am fragment sourced by src/Makefile.am. ink_common_sources += \ - filters/blend.cpp \ - filters/blend-fns.h \ - filters/blend.h \ - filters/colormatrix.cpp \ - filters/colormatrix-fns.h \ - filters/colormatrix.h \ - filters/componenttransfer.cpp \ - filters/componenttransfer-fns.h \ + filters/blend.cpp \ + filters/blend.h \ + filters/colormatrix.cpp \ + filters/colormatrix.h \ + filters/componenttransfer.cpp \ filters/componenttransfer-funcnode.cpp \ filters/componenttransfer-funcnode.h \ - filters/componenttransfer.h \ - filters/composite.cpp \ - filters/composite-fns.h \ - filters/composite.h \ - filters/convolvematrix.cpp \ - filters/convolvematrix-fns.h \ - filters/convolvematrix.h \ - filters/diffuselighting.cpp \ - filters/diffuselighting-fns.h \ - filters/diffuselighting.h \ - filters/displacementmap.cpp \ - filters/displacementmap-fns.h \ - filters/displacementmap.h \ - filters/distantlight.cpp \ - filters/distantlight.h \ - filters/flood.cpp \ - filters/flood-fns.h \ - filters/flood.h \ - filters/image.cpp \ - filters/image-fns.h \ - filters/image.h \ - filters/merge.cpp \ - filters/merge-fns.h \ - filters/merge.h \ - filters/mergenode.cpp \ - filters/mergenode.h \ - filters/morphology.cpp \ - filters/morphology-fns.h \ - filters/morphology.h \ - filters/offset.cpp \ - filters/offset-fns.h \ - filters/offset.h \ - filters/pointlight.cpp \ - filters/pointlight.h \ - filters/specularlighting.cpp \ - filters/specularlighting-fns.h \ - filters/specularlighting.h \ - filters/spotlight.cpp \ - filters/spotlight.h \ - filters/tile.cpp \ - filters/tile-fns.h \ - filters/tile.h \ - filters/turbulence.cpp \ - filters/turbulence-fns.h \ + filters/componenttransfer.h \ + filters/composite.cpp \ + filters/composite.h \ + filters/convolvematrix.cpp \ + filters/convolvematrix.h \ + filters/diffuselighting.cpp \ + filters/diffuselighting.h \ + filters/displacementmap.cpp \ + filters/displacementmap.h \ + filters/distantlight.cpp \ + filters/distantlight.h \ + filters/flood.cpp \ + filters/flood.h \ + filters/gaussian-blur.cpp \ + filters/gaussian-blur.h \ + filters/image.cpp \ + filters/image.h \ + filters/merge.cpp \ + filters/merge.h \ + filters/mergenode.cpp \ + filters/mergenode.h \ + filters/morphology.cpp \ + filters/morphology.h \ + filters/offset.cpp \ + filters/offset.h \ + filters/pointlight.cpp \ + filters/pointlight.h \ + filters/specularlighting.cpp \ + filters/specularlighting.h \ + filters/spotlight.cpp \ + filters/spotlight.h \ + filters/tile.cpp \ + filters/tile.h \ + filters/turbulence.cpp \ filters/turbulence.h diff --git a/src/filters/blend-fns.h b/src/filters/blend-fns.h deleted file mode 100644 index f08ed9dd1..000000000 --- a/src/filters/blend-fns.h +++ /dev/null @@ -1,38 +0,0 @@ -#ifndef SP_FEBLEND_FNS_H -#define SP_FEBLEND_FNS_H - -/** \file - * Macros and fn declarations related to gaussian blur filter. - */ - -#include <glib-object.h> -#include <glib/gtypes.h> - -namespace Inkscape { -namespace XML { -class Node; -} -} - -class SPFeBlend; - -#define SP_TYPE_FEBLEND (sp_feBlend_get_type()) -#define SP_FEBLEND(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), SP_TYPE_FEBLEND, SPFeBlend)) -#define SP_FEBLEND_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), SP_TYPE_FEBLEND, SPFeBlendClass)) -#define SP_IS_FEBLEND(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SP_TYPE_FEBLEND)) -#define SP_IS_FEBLEND_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), SP_TYPE_FEBLEND)) - -GType sp_feBlend_get_type(); - -#endif /* !SP_FEBLEND_FNS_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/filters/blend.cpp b/src/filters/blend.cpp index 5998d7be3..795cbff20 100644 --- a/src/filters/blend.cpp +++ b/src/filters/blend.cpp @@ -20,9 +20,10 @@ #include <string.h> +#include "sp-filter.h" +#include "filters/blend.h" #include "attributes.h" #include "svg/svg.h" -#include "blend.h" #include "xml/repr.h" #include "display/nr-filter.h" diff --git a/src/filters/blend.h b/src/filters/blend.h index 9f3cab475..4fd763166 100644 --- a/src/filters/blend.h +++ b/src/filters/blend.h @@ -1,10 +1,6 @@ -#ifndef SP_FEBLEND_H_SEEN -#define SP_FEBLEND_H_SEEN - -/** \file - * SVG <feBlend> implementation, see Blend.cpp. - */ -/* +/** @file + * @brief SVG blend filter effect + *//* * Authors: * Hugo Rodrigues <haa.rodrigues@gmail.com> * Niko Kiirala <niko@kiirala.com> @@ -14,16 +10,21 @@ * Released under GNU GPL, read the file 'COPYING' for more information */ -#include "sp-filter.h" -#include "blend-fns.h" +#ifndef SP_FEBLEND_H_SEEN +#define SP_FEBLEND_H_SEEN +#include "sp-filter-primitive.h" #include "display/nr-filter-blend.h" -/* FeBlend base class */ +#define SP_TYPE_FEBLEND (sp_feBlend_get_type()) +#define SP_FEBLEND(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), SP_TYPE_FEBLEND, SPFeBlend)) +#define SP_FEBLEND_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), SP_TYPE_FEBLEND, SPFeBlendClass)) +#define SP_IS_FEBLEND(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SP_TYPE_FEBLEND)) +#define SP_IS_FEBLEND_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), SP_TYPE_FEBLEND)) + class SPFeBlendClass; struct SPFeBlend : public SPFilterPrimitive { - /** BLEND ATTRIBUTES HERE */ Inkscape::Filters::FilterBlendMode blend_mode; int in2; }; diff --git a/src/filters/colormatrix-fns.h b/src/filters/colormatrix-fns.h deleted file mode 100644 index 3a4a8d35c..000000000 --- a/src/filters/colormatrix-fns.h +++ /dev/null @@ -1,38 +0,0 @@ -#ifndef SP_FECOLORMATRIX_FNS_H -#define SP_FECOLORMATRIX_FNS_H - -/** \file - * Macros and fn declarations related to gaussian blur filter. - */ - -#include <glib-object.h> -#include <glib/gtypes.h> - -namespace Inkscape { -namespace XML { -class Node; -} -} - -class SPFeColorMatrix; - -#define SP_TYPE_FECOLORMATRIX (sp_feColorMatrix_get_type()) -#define SP_FECOLORMATRIX(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), SP_TYPE_FECOLORMATRIX, SPFeColorMatrix)) -#define SP_FECOLORMATRIX_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), SP_TYPE_FECOLORMATRIX, SPFeColorMatrixClass)) -#define SP_IS_FECOLORMATRIX(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SP_TYPE_FECOLORMATRIX)) -#define SP_IS_FECOLORMATRIX_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), SP_TYPE_FECOLORMATRIX)) - -GType sp_feColorMatrix_get_type(); - -#endif /* !SP_FECOLORMATRIX_FNS_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/filters/colormatrix.cpp b/src/filters/colormatrix.cpp index 3f60ea05c..07567cce6 100644 --- a/src/filters/colormatrix.cpp +++ b/src/filters/colormatrix.cpp @@ -27,6 +27,7 @@ #include "xml/repr.h" #include "helper-fns.h" +#include "display/nr-filter.h" #include "display/nr-filter-colormatrix.h" /* FeColorMatrix base class */ diff --git a/src/filters/colormatrix.h b/src/filters/colormatrix.h index 69be96928..71c19db4d 100644 --- a/src/filters/colormatrix.h +++ b/src/filters/colormatrix.h @@ -1,10 +1,6 @@ -#ifndef SP_FECOLORMATRIX_H_SEEN -#define SP_FECOLORMATRIX_H_SEEN - -/** \file - * SVG <feColorMatrix> implementation, see ColorMatrix.cpp. - */ -/* +/** @file + * @brief SVG color matrix filter effect + *//* * Authors: * Hugo Rodrigues <haa.rodrigues@gmail.com> * @@ -12,17 +8,22 @@ * * Released under GNU GPL, read the file 'COPYING' for more information */ +#ifndef SP_FECOLORMATRIX_H_SEEN +#define SP_FECOLORMATRIX_H_SEEN -#include "sp-filter.h" -#include "colormatrix-fns.h" -#include "display/nr-filter-colormatrix.h" #include <vector> +#include "sp-filter-primitive.h" +#include "display/nr-filter-colormatrix.h" + +#define SP_TYPE_FECOLORMATRIX (sp_feColorMatrix_get_type()) +#define SP_FECOLORMATRIX(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), SP_TYPE_FECOLORMATRIX, SPFeColorMatrix)) +#define SP_FECOLORMATRIX_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), SP_TYPE_FECOLORMATRIX, SPFeColorMatrixClass)) +#define SP_IS_FECOLORMATRIX(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SP_TYPE_FECOLORMATRIX)) +#define SP_IS_FECOLORMATRIX_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), SP_TYPE_FECOLORMATRIX)) -/* FeColorMatrix base class */ class SPFeColorMatrixClass; struct SPFeColorMatrix : public SPFilterPrimitive { - /** COLORMATRIX ATTRIBUTES HERE */ Inkscape::Filters::FilterColorMatrixType type; gdouble value; std::vector<gdouble> values; @@ -34,7 +35,6 @@ struct SPFeColorMatrixClass { GType sp_feColorMatrix_get_type(); - #endif /* !SP_FECOLORMATRIX_H_SEEN */ /* diff --git a/src/filters/componenttransfer-fns.h b/src/filters/componenttransfer-fns.h deleted file mode 100644 index 49983770a..000000000 --- a/src/filters/componenttransfer-fns.h +++ /dev/null @@ -1,38 +0,0 @@ -#ifndef SP_FECOMPONENTTRANSFER_FNS_H -#define SP_FECOMPONENTTRANSFER_FNS_H - -/** \file - * Macros and fn declarations related to gaussian blur filter. - */ - -#include <glib-object.h> -#include <glib/gtypes.h> - -namespace Inkscape { -namespace XML { -class Node; -} -} - -class SPFeComponentTransfer; - -#define SP_TYPE_FECOMPONENTTRANSFER (sp_feComponentTransfer_get_type()) -#define SP_FECOMPONENTTRANSFER(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), SP_TYPE_FECOMPONENTTRANSFER, SPFeComponentTransfer)) -#define SP_FECOMPONENTTRANSFER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), SP_TYPE_FECOMPONENTTRANSFER, SPFeComponentTransferClass)) -#define SP_IS_FECOMPONENTTRANSFER(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SP_TYPE_FECOMPONENTTRANSFER)) -#define SP_IS_FECOMPONENTTRANSFER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), SP_TYPE_FECOMPONENTTRANSFER)) - -GType sp_feComponentTransfer_get_type(); - -#endif /* !SP_FECOMPONENTTRANSFER_FNS_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/filters/componenttransfer.cpp b/src/filters/componenttransfer.cpp index 27e63eaa6..4853ab8cd 100644 --- a/src/filters/componenttransfer.cpp +++ b/src/filters/componenttransfer.cpp @@ -22,9 +22,10 @@ #include "document.h" #include "attributes.h" #include "svg/svg.h" -#include "componenttransfer.h" -#include "componenttransfer-funcnode.h" +#include "filters/componenttransfer.h" +#include "filters/componenttransfer-funcnode.h" #include "xml/repr.h" +#include "display/nr-filter.h" #include "display/nr-filter-component-transfer.h" /* FeComponentTransfer base class */ diff --git a/src/filters/componenttransfer.h b/src/filters/componenttransfer.h index 8281d9aea..be66d5a82 100644 --- a/src/filters/componenttransfer.h +++ b/src/filters/componenttransfer.h @@ -1,10 +1,6 @@ -#ifndef SP_FECOMPONENTTRANSFER_H_SEEN -#define SP_FECOMPONENTTRANSFER_H_SEEN - -/** \file - * SVG <feComponentTransfer> implementation, see ComponentTransfer.cpp. - */ -/* +/** @file + * @brief SVG component transferfilter effect + *//* * Authors: * Hugo Rodrigues <haa.rodrigues@gmail.com> * @@ -12,18 +8,25 @@ * * Released under GNU GPL, read the file 'COPYING' for more information */ +#ifndef SP_FECOMPONENTTRANSFER_H_SEEN +#define SP_FECOMPONENTTRANSFER_H_SEEN + +#include "sp-filter-primitive.h" -#include "sp-filter.h" -#include "componenttransfer-fns.h" -#include "display/nr-filter-component-transfer.h" -#include <vector> +#define SP_TYPE_FECOMPONENTTRANSFER (sp_feComponentTransfer_get_type()) +#define SP_FECOMPONENTTRANSFER(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), SP_TYPE_FECOMPONENTTRANSFER, SPFeComponentTransfer)) +#define SP_FECOMPONENTTRANSFER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), SP_TYPE_FECOMPONENTTRANSFER, SPFeComponentTransferClass)) +#define SP_IS_FECOMPONENTTRANSFER(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SP_TYPE_FECOMPONENTTRANSFER)) +#define SP_IS_FECOMPONENTTRANSFER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), SP_TYPE_FECOMPONENTTRANSFER)) + +namespace Inkscape { +namespace Filters { +class FilterComponentTransfer; +} } -/* FeComponentTransfer base class */ class SPFeComponentTransferClass; struct SPFeComponentTransfer : public SPFilterPrimitive { - /** COMPONENTTRANSFER ATTRIBUTES HERE */ - Inkscape::Filters::FilterComponentTransfer *renderer; }; diff --git a/src/filters/composite-fns.h b/src/filters/composite-fns.h deleted file mode 100644 index c79cb17bb..000000000 --- a/src/filters/composite-fns.h +++ /dev/null @@ -1,38 +0,0 @@ -#ifndef SP_FECOMPOSITE_FNS_H -#define SP_FECOMPOSITE_FNS_H - -/** \file - * Macros and fn declarations related to gaussian blur filter. - */ - -#include <glib-object.h> -#include <glib/gtypes.h> - -namespace Inkscape { -namespace XML { -class Node; -} -} - -class SPFeComposite; - -#define SP_TYPE_FECOMPOSITE (sp_feComposite_get_type()) -#define SP_FECOMPOSITE(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), SP_TYPE_FECOMPOSITE, SPFeComposite)) -#define SP_FECOMPOSITE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), SP_TYPE_FECOMPOSITE, SPFeCompositeClass)) -#define SP_IS_FECOMPOSITE(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SP_TYPE_FECOMPOSITE)) -#define SP_IS_FECOMPOSITE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), SP_TYPE_FECOMPOSITE)) - -GType sp_feComposite_get_type(); - -#endif /* !SP_FECOMPOSITE_FNS_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/filters/composite.cpp b/src/filters/composite.cpp index 93c692f94..0c534e01d 100644 --- a/src/filters/composite.cpp +++ b/src/filters/composite.cpp @@ -19,10 +19,12 @@ #include "attributes.h" #include "svg/svg.h" -#include "composite.h" +#include "filters/composite.h" #include "helper-fns.h" #include "xml/repr.h" +#include "display/nr-filter.h" #include "display/nr-filter-composite.h" +#include "sp-filter.h" /* FeComposite base class */ diff --git a/src/filters/composite.h b/src/filters/composite.h index 095d7616d..126d8e71b 100644 --- a/src/filters/composite.h +++ b/src/filters/composite.h @@ -1,10 +1,6 @@ -#ifndef SP_FECOMPOSITE_H_SEEN -#define SP_FECOMPOSITE_H_SEEN - -/** \file - * SVG <feComposite> implementation, see Composite.cpp. - */ -/* +/** @file + * @brief SVG composite filter effect + *//* * Authors: * Hugo Rodrigues <haa.rodrigues@gmail.com> * @@ -12,9 +8,16 @@ * * Released under GNU GPL, read the file 'COPYING' for more information */ +#ifndef SP_FECOMPOSITE_H_SEEN +#define SP_FECOMPOSITE_H_SEEN -#include "sp-filter.h" -#include "composite-fns.h" +#include "sp-filter-primitive.h" + +#define SP_TYPE_FECOMPOSITE (sp_feComposite_get_type()) +#define SP_FECOMPOSITE(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), SP_TYPE_FECOMPOSITE, SPFeComposite)) +#define SP_FECOMPOSITE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), SP_TYPE_FECOMPOSITE, SPFeCompositeClass)) +#define SP_IS_FECOMPOSITE(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SP_TYPE_FECOMPOSITE)) +#define SP_IS_FECOMPOSITE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), SP_TYPE_FECOMPOSITE)) enum FeCompositeOperator { // Default value is 'over', but let's distinquish specifying the @@ -29,7 +32,6 @@ enum FeCompositeOperator { COMPOSITE_ENDOPERATOR }; -/* FeComposite base class */ class SPFeCompositeClass; struct SPFeComposite : public SPFilterPrimitive { @@ -44,7 +46,6 @@ struct SPFeCompositeClass { GType sp_feComposite_get_type(); - #endif /* !SP_FECOMPOSITE_H_SEEN */ /* diff --git a/src/filters/convolvematrix-fns.h b/src/filters/convolvematrix-fns.h deleted file mode 100644 index 76baf7f41..000000000 --- a/src/filters/convolvematrix-fns.h +++ /dev/null @@ -1,38 +0,0 @@ -#ifndef SP_FECONVOLVEMATRIX_FNS_H -#define SP_FECONVOLVEMATRIX_FNS_H - -/** \file - * Macros and fn declarations related to gaussian blur filter. - */ - -#include <glib-object.h> -#include <glib/gtypes.h> - -namespace Inkscape { -namespace XML { -class Node; -} -} - -class SPFeConvolveMatrix; - -#define SP_TYPE_FECONVOLVEMATRIX (sp_feConvolveMatrix_get_type()) -#define SP_FECONVOLVEMATRIX(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), SP_TYPE_FECONVOLVEMATRIX, SPFeConvolveMatrix)) -#define SP_FECONVOLVEMATRIX_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), SP_TYPE_FECONVOLVEMATRIX, SPFeConvolveMatrixClass)) -#define SP_IS_FECONVOLVEMATRIX(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SP_TYPE_FECONVOLVEMATRIX)) -#define SP_IS_FECONVOLVEMATRIX_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), SP_TYPE_FECONVOLVEMATRIX)) - -GType sp_feConvolveMatrix_get_type(); - -#endif /* !SP_FECONVOLVEMATRIX_FNS_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/filters/convolvematrix.cpp b/src/filters/convolvematrix.cpp index 6440f340a..4444b82ce 100644 --- a/src/filters/convolvematrix.cpp +++ b/src/filters/convolvematrix.cpp @@ -19,15 +19,15 @@ #endif #include <string.h> - +#include <math.h> #include <vector> #include "attributes.h" #include "svg/svg.h" -#include "convolvematrix.h" +#include "filters/convolvematrix.h" #include "helper-fns.h" #include "xml/repr.h" +#include "display/nr-filter.h" #include "display/nr-filter-convolve-matrix.h" -#include <math.h> /* FeConvolveMatrix base class */ diff --git a/src/filters/convolvematrix.h b/src/filters/convolvematrix.h index 1e8545040..11120698d 100644 --- a/src/filters/convolvematrix.h +++ b/src/filters/convolvematrix.h @@ -1,8 +1,5 @@ -#ifndef SP_FECONVOLVEMATRIX_H_SEEN -#define SP_FECONVOLVEMATRIX_H_SEEN - -/** \file - * SVG <feConvolveMatrix> implementation, see ConvolveMatrix.cpp. +/** @file + * @brief SVG matrix convolution filter effect */ /* * Authors: @@ -13,18 +10,23 @@ * * Released under GNU GPL, read the file 'COPYING' for more information */ +#ifndef SP_FECONVOLVEMATRIX_H_SEEN +#define SP_FECONVOLVEMATRIX_H_SEEN -#include "sp-filter.h" -#include "convolvematrix-fns.h" +#include <vector> +#include "sp-filter-primitive.h" #include "number-opt-number.h" #include "display/nr-filter-convolve-matrix.h" -#include <vector> -/* FeConvolveMatrix base class */ +#define SP_TYPE_FECONVOLVEMATRIX (sp_feConvolveMatrix_get_type()) +#define SP_FECONVOLVEMATRIX(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), SP_TYPE_FECONVOLVEMATRIX, SPFeConvolveMatrix)) +#define SP_FECONVOLVEMATRIX_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), SP_TYPE_FECONVOLVEMATRIX, SPFeConvolveMatrixClass)) +#define SP_IS_FECONVOLVEMATRIX(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SP_TYPE_FECONVOLVEMATRIX)) +#define SP_IS_FECONVOLVEMATRIX_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), SP_TYPE_FECONVOLVEMATRIX)) + class SPFeConvolveMatrixClass; struct SPFeConvolveMatrix : public SPFilterPrimitive { - /* CONVOLVEMATRIX ATTRIBUTES */ NumberOptNumber order; std::vector<gdouble> kernelMatrix; double divisor, bias; @@ -32,7 +34,7 @@ struct SPFeConvolveMatrix : public SPFilterPrimitive { Inkscape::Filters::FilterConvolveMatrixEdgeMode edgeMode; NumberOptNumber kernelUnitLength; bool preserveAlpha; - //some helper variables: + bool targetXIsSet; bool targetYIsSet; bool divisorIsSet; @@ -45,7 +47,6 @@ struct SPFeConvolveMatrixClass { GType sp_feConvolveMatrix_get_type(); - #endif /* !SP_FECONVOLVEMATRIX_H_SEEN */ /* diff --git a/src/filters/diffuselighting-fns.h b/src/filters/diffuselighting-fns.h deleted file mode 100644 index b91ed80f6..000000000 --- a/src/filters/diffuselighting-fns.h +++ /dev/null @@ -1,38 +0,0 @@ -#ifndef SP_FEDIFFUSELIGHTING_FNS_H -#define SP_FEDIFFUSELIGHTING_FNS_H - -/** \file - * Macros and fn declarations related to gaussian blur filter. - */ - -#include <glib-object.h> -#include <glib/gtypes.h> - -namespace Inkscape { -namespace XML { -class Node; -} -} - -class SPFeDiffuseLighting; - -#define SP_TYPE_FEDIFFUSELIGHTING (sp_feDiffuseLighting_get_type()) -#define SP_FEDIFFUSELIGHTING(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), SP_TYPE_FEDIFFUSELIGHTING, SPFeDiffuseLighting)) -#define SP_FEDIFFUSELIGHTING_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), SP_TYPE_FEDIFFUSELIGHTING, SPFeDiffuseLightingClass)) -#define SP_IS_FEDIFFUSELIGHTING(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SP_TYPE_FEDIFFUSELIGHTING)) -#define SP_IS_FEDIFFUSELIGHTING_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), SP_TYPE_FEDIFFUSELIGHTING)) - -GType sp_feDiffuseLighting_get_type(); - -#endif /* !SP_FEDIFFUSELIGHTING_FNS_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/filters/diffuselighting.cpp b/src/filters/diffuselighting.cpp index bdc569083..117b9d145 100644 --- a/src/filters/diffuselighting.cpp +++ b/src/filters/diffuselighting.cpp @@ -23,7 +23,8 @@ #include "svg/svg.h" #include "sp-object.h" #include "svg/svg-color.h" -#include "diffuselighting.h" +#include "filters/diffuselighting.h" +#include "display/nr-filter.h" #include "xml/repr.h" #include "display/nr-filter-diffuselighting.h" diff --git a/src/filters/diffuselighting.h b/src/filters/diffuselighting.h index 3c6c0ae73..0cb62c5a7 100644 --- a/src/filters/diffuselighting.h +++ b/src/filters/diffuselighting.h @@ -1,46 +1,46 @@ -#ifndef SP_FEDIFFUSELIGHTING_H_SEEN -#define SP_FEDIFFUSELIGHTING_H_SEEN - -/** \file - * SVG <feDiffuseLighting> implementation, see DiffuseLighting.cpp. - */ -/* +/** @file + * @brief SVG diffuse lighting filter effect + *//* * Authors: * Hugo Rodrigues <haa.rodrigues@gmail.com> * Jean-Rene Reinhard <jr@komite.net> * - * Copyright (C) 2006 Hugo Rodrigues - * 2007 authors - * + * Copyright (C) 2006-2007 Authors * Released under GNU GPL, read the file 'COPYING' for more information */ -#include "sp-filter.h" -#include "diffuselighting-fns.h" +#ifndef SP_FEDIFFUSELIGHTING_H_SEEN +#define SP_FEDIFFUSELIGHTING_H_SEEN + +#include "sp-filter-primitive.h" +#include "number-opt-number.h" namespace Inkscape { namespace Filters { class FilterDiffuseLighting; -} -} +} } + +#define SP_TYPE_FEDIFFUSELIGHTING (sp_feDiffuseLighting_get_type()) +#define SP_FEDIFFUSELIGHTING(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), SP_TYPE_FEDIFFUSELIGHTING, SPFeDiffuseLighting)) +#define SP_FEDIFFUSELIGHTING_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), SP_TYPE_FEDIFFUSELIGHTING, SPFeDiffuseLightingClass)) +#define SP_IS_FEDIFFUSELIGHTING(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SP_TYPE_FEDIFFUSELIGHTING)) +#define SP_IS_FEDIFFUSELIGHTING_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), SP_TYPE_FEDIFFUSELIGHTING)) + +namespace Inkscape { +namespace Filters { +class FilterDiffuseLighting; +} } -/* FeDiffuseLighting base class */ class SPFeDiffuseLightingClass; struct SPFeDiffuseLighting : public SPFilterPrimitive { - /** DIFFUSELIGHTING ATTRIBUTES HERE */ - /** surfaceScale attribute */ gfloat surfaceScale; guint surfaceScale_set : 1; - /** diffuseConstant attribute */ gfloat diffuseConstant; guint diffuseConstant_set : 1; - /** kernelUnitLength attribute */ NumberOptNumber kernelUnitLength; - /** lighting-color property */ guint32 lighting_color; guint lighting_color_set : 1; - /** pointer to the associated renderer */ Inkscape::Filters::FilterDiffuseLighting *renderer; }; @@ -50,7 +50,6 @@ struct SPFeDiffuseLightingClass { GType sp_feDiffuseLighting_get_type(); - #endif /* !SP_FEDIFFUSELIGHTING_H_SEEN */ /* diff --git a/src/filters/displacementmap-fns.h b/src/filters/displacementmap-fns.h deleted file mode 100644 index 6d92c6b78..000000000 --- a/src/filters/displacementmap-fns.h +++ /dev/null @@ -1,38 +0,0 @@ -#ifndef SP_FEDISPLACEMENTMAP_FNS_H -#define SP_FEDISPLACEMENTMAP_FNS_H - -/** \file - * Macros and fn declarations related to gaussian blur filter. - */ - -#include <glib-object.h> -#include <glib/gtypes.h> - -namespace Inkscape { -namespace XML { -class Node; -} -} - -class SPFeDisplacementMap; - -#define SP_TYPE_FEDISPLACEMENTMAP (sp_feDisplacementMap_get_type()) -#define SP_FEDISPLACEMENTMAP(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), SP_TYPE_FEDISPLACEMENTMAP, SPFeDisplacementMap)) -#define SP_FEDISPLACEMENTMAP_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), SP_TYPE_FEDISPLACEMENTMAP, SPFeDisplacementMapClass)) -#define SP_IS_FEDISPLACEMENTMAP(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SP_TYPE_FEDISPLACEMENTMAP)) -#define SP_IS_FEDISPLACEMENTMAP_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), SP_TYPE_FEDISPLACEMENTMAP)) - -GType sp_feDisplacementMap_get_type(); - -#endif /* !SP_FEDISPLACEMENTMAP_FNS_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/filters/displacementmap.cpp b/src/filters/displacementmap.cpp index baa17d785..cfa8e427e 100644 --- a/src/filters/displacementmap.cpp +++ b/src/filters/displacementmap.cpp @@ -19,10 +19,12 @@ #include "attributes.h" #include "svg/svg.h" -#include "displacementmap.h" +#include "filters/displacementmap.h" #include "xml/repr.h" -#include "display/nr-filter-displacement-map.h" +#include "sp-filter.h" #include "helper-fns.h" +#include "display/nr-filter.h" +#include "display/nr-filter-displacement-map.h" /* FeDisplacementMap base class */ diff --git a/src/filters/displacementmap.h b/src/filters/displacementmap.h index 6a8ac9cd9..414b3e663 100644 --- a/src/filters/displacementmap.h +++ b/src/filters/displacementmap.h @@ -1,10 +1,6 @@ -#ifndef SP_FEDISPLACEMENTMAP_H_SEEN -#define SP_FEDISPLACEMENTMAP_H_SEEN - /** \file - * SVG <feDisplacementMap> implementation, see DisplacementMap.cpp. - */ -/* + * SVG displacement map filter effect + *//* * Authors: * Hugo Rodrigues <haa.rodrigues@gmail.com> * @@ -13,8 +9,16 @@ * Released under GNU GPL, read the file 'COPYING' for more information */ -#include "sp-filter.h" -#include "displacementmap-fns.h" +#ifndef SP_FEDISPLACEMENTMAP_H_SEEN +#define SP_FEDISPLACEMENTMAP_H_SEEN + +#include "sp-filter-primitive.h" + +#define SP_TYPE_FEDISPLACEMENTMAP (sp_feDisplacementMap_get_type()) +#define SP_FEDISPLACEMENTMAP(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), SP_TYPE_FEDISPLACEMENTMAP, SPFeDisplacementMap)) +#define SP_FEDISPLACEMENTMAP_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), SP_TYPE_FEDISPLACEMENTMAP, SPFeDisplacementMapClass)) +#define SP_IS_FEDISPLACEMENTMAP(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SP_TYPE_FEDISPLACEMENTMAP)) +#define SP_IS_FEDISPLACEMENTMAP_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), SP_TYPE_FEDISPLACEMENTMAP)) enum FilterDisplacementMapChannelSelector { DISPLACEMENTMAP_CHANNEL_RED, @@ -24,11 +28,9 @@ enum FilterDisplacementMapChannelSelector { DISPLACEMENTMAP_CHANNEL_ENDTYPE }; -/* FeDisplacementMap base class */ class SPFeDisplacementMapClass; struct SPFeDisplacementMap : public SPFilterPrimitive { - /** DISPLACEMENTMAP ATTRIBUTES HERE */ int in2; double scale; FilterDisplacementMapChannelSelector xChannelSelector; @@ -41,7 +43,6 @@ struct SPFeDisplacementMapClass { GType sp_feDisplacementMap_get_type(); - #endif /* !SP_FEDISPLACEMENTMAP_H_SEEN */ /* diff --git a/src/filters/distantlight.cpp b/src/filters/distantlight.cpp index 41584c4a4..de33d967e 100644 --- a/src/filters/distantlight.cpp +++ b/src/filters/distantlight.cpp @@ -22,9 +22,9 @@ #include "attributes.h" #include "document.h" -#include "distantlight.h" -#include "diffuselighting-fns.h" -#include "specularlighting-fns.h" +#include "filters/distantlight.h" +#include "filters/diffuselighting.h" +#include "filters/specularlighting.h" #include "xml/repr.h" #define SP_MACROS_SILENT diff --git a/src/filters/flood-fns.h b/src/filters/flood-fns.h deleted file mode 100644 index 8cc507274..000000000 --- a/src/filters/flood-fns.h +++ /dev/null @@ -1,38 +0,0 @@ -#ifndef SP_FEFLOOD_FNS_H -#define SP_FEFLOOD_FNS_H - -/** \file - * Macros and fn declarations related to gaussian blur filter. - */ - -#include <glib-object.h> -#include <glib/gtypes.h> - -namespace Inkscape { -namespace XML { -class Node; -} -} - -class SPFeFlood; - -#define SP_TYPE_FEFLOOD (sp_feFlood_get_type()) -#define SP_FEFLOOD(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), SP_TYPE_FEFLOOD, SPFeFlood)) -#define SP_FEFLOOD_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), SP_TYPE_FEFLOOD, SPFeFloodClass)) -#define SP_IS_FEFLOOD(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SP_TYPE_FEFLOOD)) -#define SP_IS_FEFLOOD_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), SP_TYPE_FEFLOOD)) - -GType sp_feFlood_get_type(); - -#endif /* !SP_FEFLOOD_FNS_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/filters/flood.cpp b/src/filters/flood.cpp index 221b0daf2..8b7d4c5cd 100644 --- a/src/filters/flood.cpp +++ b/src/filters/flood.cpp @@ -21,9 +21,12 @@ #include "attributes.h" #include "svg/svg.h" -#include "flood.h" +#include "svg/svg-color.h" +#include "filters/flood.h" #include "xml/repr.h" #include "helper-fns.h" +#include "display/nr-filter.h" +#include "display/nr-filter-flood.h" /* FeFlood base class */ diff --git a/src/filters/flood.h b/src/filters/flood.h index f386e2cd4..220faca83 100644 --- a/src/filters/flood.h +++ b/src/filters/flood.h @@ -1,10 +1,6 @@ -#ifndef SP_FEFLOOD_H_SEEN -#define SP_FEFLOOD_H_SEEN - -/** \file - * SVG <feFlood> implementation, see Flood.cpp. - */ -/* +/** @file + * @brief SVG flood filter effect + *//* * Authors: * Hugo Rodrigues <haa.rodrigues@gmail.com> * @@ -13,18 +9,21 @@ * Released under GNU GPL, read the file 'COPYING' for more information */ -#include "sp-filter.h" -#include "flood-fns.h" +#ifndef SP_FEFLOOD_H_SEEN +#define SP_FEFLOOD_H_SEEN + +#include "sp-filter-primitive.h" #include "svg/svg-icc-color.h" -#include "display/nr-filter.h" -#include "display/nr-filter-flood.h" +#define SP_TYPE_FEFLOOD (sp_feFlood_get_type()) +#define SP_FEFLOOD(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), SP_TYPE_FEFLOOD, SPFeFlood)) +#define SP_FEFLOOD_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), SP_TYPE_FEFLOOD, SPFeFloodClass)) +#define SP_IS_FEFLOOD(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SP_TYPE_FEFLOOD)) +#define SP_IS_FEFLOOD_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), SP_TYPE_FEFLOOD)) -/* FeFlood base class */ class SPFeFloodClass; struct SPFeFlood : public SPFilterPrimitive { - /** FLOOD ATTRIBUTES HERE */ guint32 color; SVGICCColor *icc; double opacity; diff --git a/src/sp-gaussian-blur.cpp b/src/filters/gaussian-blur.cpp index e6eab5032..3f7cea0c9 100644 --- a/src/sp-gaussian-blur.cpp +++ b/src/filters/gaussian-blur.cpp @@ -20,7 +20,7 @@ #include "attributes.h" #include "svg/svg.h" -#include "sp-gaussian-blur.h" +#include "filters/gaussian-blur.h" #include "xml/repr.h" #include "display/nr-filter.h" diff --git a/src/sp-gaussian-blur-fns.h b/src/filters/gaussian-blur.h index 030739263..5607080fe 100644 --- a/src/sp-gaussian-blur-fns.h +++ b/src/filters/gaussian-blur.h @@ -1,20 +1,19 @@ -#ifndef SP_GAUSSIANBLUR_FNS_H -#define SP_GAUSSIANBLUR_FNS_H - -/** \file - * Macros and fn declarations related to gaussian blur filter. +/** @file + * @brief SVG Gaussian blur filter effect + *//* + * Authors: + * Hugo Rodrigues <haa.rodrigues@gmail.com> + * + * Copyright (C) 2006 Hugo Rodrigues + * + * Released under GNU GPL, read the file 'COPYING' for more information */ -#include <glib-object.h> -#include <glib/gtypes.h> - -namespace Inkscape { -namespace XML { -class Node; -} -} +#ifndef SP_GAUSSIANBLUR_H_SEEN +#define SP_GAUSSIANBLUR_H_SEEN -class SPGaussianBlur; +#include "sp-filter-primitive.h" +#include "number-opt-number.h" #define SP_TYPE_GAUSSIANBLUR (sp_gaussianBlur_get_type()) #define SP_GAUSSIANBLUR(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), SP_TYPE_GAUSSIANBLUR, SPGaussianBlur)) @@ -22,11 +21,23 @@ class SPGaussianBlur; #define SP_IS_GAUSSIANBLUR(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SP_TYPE_GAUSSIANBLUR)) #define SP_IS_GAUSSIANBLUR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), SP_TYPE_GAUSSIANBLUR)) +/* GaussianBlur base class */ +class SPGaussianBlurClass; + +struct SPGaussianBlur : public SPFilterPrimitive { + /** stdDeviation attribute */ + NumberOptNumber stdDeviation; +}; + +struct SPGaussianBlurClass { + SPFilterPrimitiveClass parent_class; +}; + GType sp_gaussianBlur_get_type(); void sp_gaussianBlur_setDeviation(SPGaussianBlur *blur, float num); void sp_gaussianBlur_setDeviation(SPGaussianBlur *blur, float num, float optnum); -#endif /* !SP_GAUSSIANBLUR_FNS_H */ +#endif /* !SP_GAUSSIANBLUR_H_SEEN */ /* Local Variables: diff --git a/src/filters/image-fns.h b/src/filters/image-fns.h deleted file mode 100644 index 0a8b453fe..000000000 --- a/src/filters/image-fns.h +++ /dev/null @@ -1,38 +0,0 @@ -#ifndef SP_FEIMAGE_FNS_H -#define SP_FEIMAGE_FNS_H - -/** \file - * Macros and fn declarations related to gaussian blur filter. - */ - -#include <glib-object.h> -#include <glib/gtypes.h> - -namespace Inkscape { -namespace XML { -class Node; -} -} - -class SPFeImage; - -#define SP_TYPE_FEIMAGE (sp_feImage_get_type()) -#define SP_FEIMAGE(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), SP_TYPE_FEIMAGE, SPFeImage)) -#define SP_FEIMAGE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), SP_TYPE_FEIMAGE, SPFeImageClass)) -#define SP_IS_FEIMAGE(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SP_TYPE_FEIMAGE)) -#define SP_IS_FEIMAGE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), SP_TYPE_FEIMAGE)) - -GType sp_feImage_get_type(); - -#endif /* !SP_FEIMAGE_FNS_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/filters/image.h b/src/filters/image.h index 78e719ac7..a8fb65d6a 100644 --- a/src/filters/image.h +++ b/src/filters/image.h @@ -1,10 +1,6 @@ -#ifndef SP_FEIMAGE_H_SEEN -#define SP_FEIMAGE_H_SEEN - -/** \file - * SVG <feImage> implementation, see Image.cpp. - */ -/* +/** @file + * @brief SVG image filter effect + *//* * Authors: * Felipe Corrêa da Silva Sanches <juca@members.fsf.org> * Hugo Rodrigues <haa.rodrigues@gmail.com> @@ -14,17 +10,23 @@ * Released under GNU GPL, read the file 'COPYING' for more information */ -#include "sp-filter.h" -#include "image-fns.h" +#ifndef SP_FEIMAGE_H_SEEN +#define SP_FEIMAGE_H_SEEN + +#include "sp-filter-primitive.h" #include "svg/svg-length.h" #include "sp-item.h" #include "uri-references.h" -/* FeImage base class */ +#define SP_TYPE_FEIMAGE (sp_feImage_get_type()) +#define SP_FEIMAGE(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), SP_TYPE_FEIMAGE, SPFeImage)) +#define SP_FEIMAGE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), SP_TYPE_FEIMAGE, SPFeImageClass)) +#define SP_IS_FEIMAGE(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SP_TYPE_FEIMAGE)) +#define SP_IS_FEIMAGE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), SP_TYPE_FEIMAGE)) + class SPFeImageClass; struct SPFeImage : public SPFilterPrimitive { - /** IMAGE ATTRIBUTES HERE */ gchar *href; SVGLength x, y, height, width; SPDocument *document; @@ -41,7 +43,6 @@ struct SPFeImageClass { GType sp_feImage_get_type(); - #endif /* !SP_FEIMAGE_H_SEEN */ /* diff --git a/src/filters/merge-fns.h b/src/filters/merge-fns.h deleted file mode 100644 index 24bda1ae2..000000000 --- a/src/filters/merge-fns.h +++ /dev/null @@ -1,38 +0,0 @@ -#ifndef SP_FEMERGE_FNS_H -#define SP_FEMERGE_FNS_H - -/** \file - * Macros and fn declarations related to gaussian blur filter. - */ - -#include <glib-object.h> -#include <glib/gtypes.h> - -namespace Inkscape { -namespace XML { -class Node; -} -} - -class SPFeMerge; - -#define SP_TYPE_FEMERGE (sp_feMerge_get_type()) -#define SP_FEMERGE(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), SP_TYPE_FEMERGE, SPFeMerge)) -#define SP_FEMERGE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), SP_TYPE_FEMERGE, SPFeMergeClass)) -#define SP_IS_FEMERGE(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SP_TYPE_FEMERGE)) -#define SP_IS_FEMERGE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), SP_TYPE_FEMERGE)) - -GType sp_feMerge_get_type(); - -#endif /* !SP_FEMERGE_FNS_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/filters/merge.cpp b/src/filters/merge.cpp index 437cb4b55..798b7dfcc 100644 --- a/src/filters/merge.cpp +++ b/src/filters/merge.cpp @@ -23,6 +23,7 @@ #include "merge.h" #include "mergenode.h" +#include "display/nr-filter.h" #include "display/nr-filter-merge.h" /* FeMerge base class */ diff --git a/src/filters/merge.h b/src/filters/merge.h index 5d28faba9..c28eaa1f6 100644 --- a/src/filters/merge.h +++ b/src/filters/merge.h @@ -1,22 +1,23 @@ -#ifndef SP_FEMERGE_H_SEEN -#define SP_FEMERGE_H_SEEN - /** \file - * SVG <feMerge> implementation, see Merge.cpp. - */ -/* + * SVG merge filter effect + *//* * Authors: * Hugo Rodrigues <haa.rodrigues@gmail.com> * * Copyright (C) 2006 Hugo Rodrigues - * * Released under GNU GPL, read the file 'COPYING' for more information */ +#ifndef SP_FEMERGE_H_SEEN +#define SP_FEMERGE_H_SEEN + +#include "sp-filter-primitive.h" -#include "sp-filter.h" -#include "merge-fns.h" +#define SP_TYPE_FEMERGE (sp_feMerge_get_type()) +#define SP_FEMERGE(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), SP_TYPE_FEMERGE, SPFeMerge)) +#define SP_FEMERGE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), SP_TYPE_FEMERGE, SPFeMergeClass)) +#define SP_IS_FEMERGE(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SP_TYPE_FEMERGE)) +#define SP_IS_FEMERGE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), SP_TYPE_FEMERGE)) -/* FeMerge base class */ class SPFeMergeClass; struct SPFeMerge : public SPFilterPrimitive { diff --git a/src/filters/mergenode.cpp b/src/filters/mergenode.cpp index 8a4e0dd0a..4ff569364 100644 --- a/src/filters/mergenode.cpp +++ b/src/filters/mergenode.cpp @@ -20,8 +20,9 @@ #include "attributes.h" #include "xml/repr.h" -#include "mergenode.h" -#include "merge.h" +#include "filters/mergenode.h" +#include "filters/merge.h" +#include "display/nr-filter-types.h" static void sp_feMergeNode_class_init(SPFeMergeNodeClass *klass); static void sp_feMergeNode_init(SPFeMergeNode *skeleton); diff --git a/src/filters/morphology-fns.h b/src/filters/morphology-fns.h deleted file mode 100644 index a0550405d..000000000 --- a/src/filters/morphology-fns.h +++ /dev/null @@ -1,38 +0,0 @@ -#ifndef SP_FEMORPHOLOGY_FNS_H -#define SP_FEMORPHOLOGY_FNS_H - -/** \file - * Macros and fn declarations related to gaussian blur filter. - */ - -#include <glib-object.h> -#include <glib/gtypes.h> - -namespace Inkscape { -namespace XML { -class Node; -} -} - -class SPFeMorphology; - -#define SP_TYPE_FEMORPHOLOGY (sp_feMorphology_get_type()) -#define SP_FEMORPHOLOGY(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), SP_TYPE_FEMORPHOLOGY, SPFeMorphology)) -#define SP_FEMORPHOLOGY_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), SP_TYPE_FEMORPHOLOGY, SPFeMorphologyClass)) -#define SP_IS_FEMORPHOLOGY(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SP_TYPE_FEMORPHOLOGY)) -#define SP_IS_FEMORPHOLOGY_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), SP_TYPE_FEMORPHOLOGY)) - -GType sp_feMorphology_get_type(); - -#endif /* !SP_FEMORPHOLOGY_FNS_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/filters/morphology.cpp b/src/filters/morphology.cpp index 1530dae8c..f6f9dc609 100644 --- a/src/filters/morphology.cpp +++ b/src/filters/morphology.cpp @@ -24,6 +24,7 @@ #include "svg/svg.h" #include "morphology.h" #include "xml/repr.h" +#include "display/nr-filter.h" #include "display/nr-filter-morphology.h" /* FeMorphology base class */ diff --git a/src/filters/morphology.h b/src/filters/morphology.h index 20abf8a8d..01eb2f59b 100644 --- a/src/filters/morphology.h +++ b/src/filters/morphology.h @@ -1,10 +1,6 @@ -#ifndef SP_FEMORPHOLOGY_H_SEEN -#define SP_FEMORPHOLOGY_H_SEEN - /** \file - * SVG <feMorphology> implementation, see Morphology.cpp. - */ -/* + * @brief SVG morphology filter effect + *//* * Authors: * Hugo Rodrigues <haa.rodrigues@gmail.com> * @@ -13,18 +9,22 @@ * Released under GNU GPL, read the file 'COPYING' for more information */ -#include "sp-filter.h" -#include "morphology-fns.h" +#ifndef SP_FEMORPHOLOGY_H_SEEN +#define SP_FEMORPHOLOGY_H_SEEN + +#include "sp-filter-primitive.h" #include "number-opt-number.h" -#include "display/nr-filter.h" #include "display/nr-filter-morphology.h" +#define SP_TYPE_FEMORPHOLOGY (sp_feMorphology_get_type()) +#define SP_FEMORPHOLOGY(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), SP_TYPE_FEMORPHOLOGY, SPFeMorphology)) +#define SP_FEMORPHOLOGY_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), SP_TYPE_FEMORPHOLOGY, SPFeMorphologyClass)) +#define SP_IS_FEMORPHOLOGY(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SP_TYPE_FEMORPHOLOGY)) +#define SP_IS_FEMORPHOLOGY_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), SP_TYPE_FEMORPHOLOGY)) -/* FeMorphology base class */ class SPFeMorphologyClass; struct SPFeMorphology : public SPFilterPrimitive { - /** MORPHOLOGY ATTRIBUTES HERE */ Inkscape::Filters::FilterMorphologyOperator Operator; NumberOptNumber radius; }; diff --git a/src/filters/offset-fns.h b/src/filters/offset-fns.h deleted file mode 100644 index 38561c188..000000000 --- a/src/filters/offset-fns.h +++ /dev/null @@ -1,38 +0,0 @@ -#ifndef SP_FEOFFSET_FNS_H -#define SP_FEOFFSET_FNS_H - -/** \file - * Macros and fn declarations related to gaussian blur filter. - */ - -#include <glib-object.h> -#include <glib/gtypes.h> - -namespace Inkscape { -namespace XML { -class Node; -} -} - -class SPFeOffset; - -#define SP_TYPE_FEOFFSET (sp_feOffset_get_type()) -#define SP_FEOFFSET(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), SP_TYPE_FEOFFSET, SPFeOffset)) -#define SP_FEOFFSET_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), SP_TYPE_FEOFFSET, SPFeOffsetClass)) -#define SP_IS_FEOFFSET(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SP_TYPE_FEOFFSET)) -#define SP_IS_FEOFFSET_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), SP_TYPE_FEOFFSET)) - -GType sp_feOffset_get_type(); - -#endif /* !SP_FEOFFSET_FNS_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/filters/offset.cpp b/src/filters/offset.cpp index 61ea45ff2..b436fd0fb 100644 --- a/src/filters/offset.cpp +++ b/src/filters/offset.cpp @@ -20,9 +20,10 @@ #include "attributes.h" #include "svg/svg.h" -#include "offset.h" +#include "filters/offset.h" #include "helper-fns.h" #include "xml/repr.h" +#include "display/nr-filter.h" #include "display/nr-filter-offset.h" /* FeOffset base class */ diff --git a/src/filters/offset.h b/src/filters/offset.h index 72d852514..5319ff84e 100644 --- a/src/filters/offset.h +++ b/src/filters/offset.h @@ -1,10 +1,6 @@ -#ifndef SP_FEOFFSET_H_SEEN -#define SP_FEOFFSET_H_SEEN - -/** \file - * SVG <feOffset> implementation, see Offset.cpp. - */ -/* +/** @file + * @brief SVG offset filter effect + *//* * Authors: * Hugo Rodrigues <haa.rodrigues@gmail.com> * @@ -13,14 +9,20 @@ * Released under GNU GPL, read the file 'COPYING' for more information */ -#include "sp-filter.h" -#include "offset-fns.h" +#ifndef SP_FEOFFSET_H_SEEN +#define SP_FEOFFSET_H_SEEN + +#include "sp-filter-primitive.h" + +#define SP_TYPE_FEOFFSET (sp_feOffset_get_type()) +#define SP_FEOFFSET(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), SP_TYPE_FEOFFSET, SPFeOffset)) +#define SP_FEOFFSET_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), SP_TYPE_FEOFFSET, SPFeOffsetClass)) +#define SP_IS_FEOFFSET(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SP_TYPE_FEOFFSET)) +#define SP_IS_FEOFFSET_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), SP_TYPE_FEOFFSET)) -/* FeOffset base class */ class SPFeOffsetClass; struct SPFeOffset : public SPFilterPrimitive { - /** OFFSET ATTRIBUTES HERE */ double dx, dy; }; diff --git a/src/filters/pointlight.cpp b/src/filters/pointlight.cpp index ce58cf13e..5bb662c0f 100644 --- a/src/filters/pointlight.cpp +++ b/src/filters/pointlight.cpp @@ -22,9 +22,9 @@ #include "attributes.h" #include "document.h" -#include "pointlight.h" -#include "diffuselighting-fns.h" -#include "specularlighting-fns.h" +#include "filters/pointlight.h" +#include "filters/diffuselighting.h" +#include "filters/specularlighting.h" #include "xml/repr.h" #define SP_MACROS_SILENT diff --git a/src/filters/specularlighting-fns.h b/src/filters/specularlighting-fns.h deleted file mode 100644 index bd48ba684..000000000 --- a/src/filters/specularlighting-fns.h +++ /dev/null @@ -1,38 +0,0 @@ -#ifndef SP_FESPECULARLIGHTING_FNS_H -#define SP_FESPECULARLIGHTING_FNS_H - -/** \file - * Macros and fn declarations related to gaussian blur filter. - */ - -#include <glib-object.h> -#include <glib/gtypes.h> - -namespace Inkscape { -namespace XML { -class Node; -} -} - -class SPFeSpecularLighting; - -#define SP_TYPE_FESPECULARLIGHTING (sp_feSpecularLighting_get_type()) -#define SP_FESPECULARLIGHTING(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), SP_TYPE_FESPECULARLIGHTING, SPFeSpecularLighting)) -#define SP_FESPECULARLIGHTING_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), SP_TYPE_FESPECULARLIGHTING, SPFeSpecularLightingClass)) -#define SP_IS_FESPECULARLIGHTING(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SP_TYPE_FESPECULARLIGHTING)) -#define SP_IS_FESPECULARLIGHTING_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), SP_TYPE_FESPECULARLIGHTING)) - -GType sp_feSpecularLighting_get_type(); - -#endif /* !SP_FESPECULARLIGHTING_FNS_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/filters/specularlighting.cpp b/src/filters/specularlighting.cpp index 03a0c7f96..1b6000522 100644 --- a/src/filters/specularlighting.cpp +++ b/src/filters/specularlighting.cpp @@ -25,6 +25,7 @@ #include "svg/svg-color.h" #include "specularlighting.h" #include "xml/repr.h" +#include "display/nr-filter.h" #include "display/nr-filter-specularlighting.h" /* FeSpecularLighting base class */ diff --git a/src/filters/specularlighting.h b/src/filters/specularlighting.h index cdca5f99f..8d26b8cfe 100644 --- a/src/filters/specularlighting.h +++ b/src/filters/specularlighting.h @@ -1,10 +1,6 @@ -#ifndef SP_FESPECULARLIGHTING_H_SEEN -#define SP_FESPECULARLIGHTING_H_SEEN - -/** \file - * SVG <feSpecularLighting> implementation, see SpecularLighting.cpp. - */ -/* +/** @file + * @brief SVG specular lighting filter effect + *//* * Authors: * Hugo Rodrigues <haa.rodrigues@gmail.com> * Jean-Rene Reinhard <jr@komite.net> @@ -15,8 +11,17 @@ * Released under GNU GPL, read the file 'COPYING' for more information */ -#include "sp-filter.h" -#include "specularlighting-fns.h" +#ifndef SP_FESPECULARLIGHTING_H_SEEN +#define SP_FESPECULARLIGHTING_H_SEEN + +#include "sp-filter-primitive.h" +#include "number-opt-number.h" + +#define SP_TYPE_FESPECULARLIGHTING (sp_feSpecularLighting_get_type()) +#define SP_FESPECULARLIGHTING(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), SP_TYPE_FESPECULARLIGHTING, SPFeSpecularLighting)) +#define SP_FESPECULARLIGHTING_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), SP_TYPE_FESPECULARLIGHTING, SPFeSpecularLightingClass)) +#define SP_IS_FESPECULARLIGHTING(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SP_TYPE_FESPECULARLIGHTING)) +#define SP_IS_FESPECULARLIGHTING_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), SP_TYPE_FESPECULARLIGHTING)) namespace Inkscape { namespace Filters { @@ -24,23 +29,16 @@ class FilterSpecularLighting; } } -/* FeSpecularLighting base class */ class SPFeSpecularLightingClass; struct SPFeSpecularLighting : public SPFilterPrimitive { - /** SPECULARLIGHTING ATTRIBUTES HERE */ - /** surfaceScale attribute */ gfloat surfaceScale; guint surfaceScale_set : 1; - /** specularConstant attribute */ gfloat specularConstant; guint specularConstant_set : 1; - /** specularConstant attribute */ gfloat specularExponent; guint specularExponent_set : 1; - /** kernelUnitLenght attribute */ NumberOptNumber kernelUnitLength; - /** lighting-color property */ guint32 lighting_color; guint lighting_color_set : 1; diff --git a/src/filters/spotlight.cpp b/src/filters/spotlight.cpp index 3b518f0b4..10815cfb1 100644 --- a/src/filters/spotlight.cpp +++ b/src/filters/spotlight.cpp @@ -22,9 +22,9 @@ #include "attributes.h" #include "document.h" -#include "spotlight.h" -#include "diffuselighting-fns.h" -#include "specularlighting-fns.h" +#include "filters/spotlight.h" +#include "filters/diffuselighting.h" +#include "filters/specularlighting.h" #include "xml/repr.h" #define SP_MACROS_SILENT diff --git a/src/filters/tile-fns.h b/src/filters/tile-fns.h deleted file mode 100644 index b7c4c5f27..000000000 --- a/src/filters/tile-fns.h +++ /dev/null @@ -1,38 +0,0 @@ -#ifndef SP_FETILE_FNS_H -#define SP_FETILE_FNS_H - -/** \file - * Macros and fn declarations related to gaussian blur filter. - */ - -#include <glib-object.h> -#include <glib/gtypes.h> - -namespace Inkscape { -namespace XML { -class Node; -} -} - -class SPFeTile; - -#define SP_TYPE_FETILE (sp_feTile_get_type()) -#define SP_FETILE(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), SP_TYPE_FETILE, SPFeTile)) -#define SP_FETILE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), SP_TYPE_FETILE, SPFeTileClass)) -#define SP_IS_FETILE(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SP_TYPE_FETILE)) -#define SP_IS_FETILE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), SP_TYPE_FETILE)) - -GType sp_feTile_get_type(); - -#endif /* !SP_FETILE_FNS_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/filters/tile.cpp b/src/filters/tile.cpp index 877f70b27..c87d78554 100644 --- a/src/filters/tile.cpp +++ b/src/filters/tile.cpp @@ -19,9 +19,10 @@ #include "attributes.h" #include "svg/svg.h" -#include "tile.h" +#include "filters/tile.h" #include "xml/repr.h" - +#include "display/nr-filter.h" +#include "display/nr-filter-tile.h" /* FeTile base class */ diff --git a/src/filters/tile.h b/src/filters/tile.h index 9e12ca7ee..45c43213d 100644 --- a/src/filters/tile.h +++ b/src/filters/tile.h @@ -1,10 +1,6 @@ -#ifndef SP_FETILE_H_SEEN -#define SP_FETILE_H_SEEN - -/** \file - * SVG <feTile> implementation, see Tile.cpp. - */ -/* +/** @file + * @brief SVG tile filter effect + *//* * Authors: * Hugo Rodrigues <haa.rodrigues@gmail.com> * @@ -13,17 +9,21 @@ * Released under GNU GPL, read the file 'COPYING' for more information */ -#include "sp-filter.h" -#include "tile-fns.h" +#ifndef SP_FETILE_H_SEEN +#define SP_FETILE_H_SEEN -#include "display/nr-filter.h" -#include "display/nr-filter-tile.h" +#include "sp-filter-primitive.h" + +#define SP_TYPE_FETILE (sp_feTile_get_type()) +#define SP_FETILE(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), SP_TYPE_FETILE, SPFeTile)) +#define SP_FETILE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), SP_TYPE_FETILE, SPFeTileClass)) +#define SP_IS_FETILE(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SP_TYPE_FETILE)) +#define SP_IS_FETILE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), SP_TYPE_FETILE)) /* FeTile base class */ class SPFeTileClass; struct SPFeTile : public SPFilterPrimitive { - /** TILE ATTRIBUTES HERE */ }; @@ -33,7 +33,6 @@ struct SPFeTileClass { GType sp_feTile_get_type(); - #endif /* !SP_FETILE_H_SEEN */ /* diff --git a/src/filters/turbulence-fns.h b/src/filters/turbulence-fns.h deleted file mode 100644 index 43b4450a5..000000000 --- a/src/filters/turbulence-fns.h +++ /dev/null @@ -1,38 +0,0 @@ -#ifndef SP_FETURBULENCE_FNS_H -#define SP_FETURBULENCE_FNS_H - -/** \file - * Macros and fn declarations related to gaussian blur filter. - */ - -#include <glib-object.h> -#include <glib/gtypes.h> - -namespace Inkscape { -namespace XML { -class Node; -} -} - -class SPFeTurbulence; - -#define SP_TYPE_FETURBULENCE (sp_feTurbulence_get_type()) -#define SP_FETURBULENCE(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), SP_TYPE_FETURBULENCE, SPFeTurbulence)) -#define SP_FETURBULENCE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), SP_TYPE_FETURBULENCE, SPFeTurbulenceClass)) -#define SP_IS_FETURBULENCE(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SP_TYPE_FETURBULENCE)) -#define SP_IS_FETURBULENCE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), SP_TYPE_FETURBULENCE)) - -GType sp_feTurbulence_get_type(); - -#endif /* !SP_FETURBULENCE_FNS_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/filters/turbulence.h b/src/filters/turbulence.h index 792a6181a..e9403a164 100644 --- a/src/filters/turbulence.h +++ b/src/filters/turbulence.h @@ -1,10 +1,6 @@ -#ifndef SP_FETURBULENCE_H_SEEN -#define SP_FETURBULENCE_H_SEEN - -/** \file - * SVG <feTurbulence> implementation, see Turbulence.cpp. - */ -/* +/** @file + * @brief SVG turbulence filter effect + *//* * Authors: * Felipe Corrêa da Silva Sanches <juca@members.fsf.org> * Hugo Rodrigues <haa.rodrigues@gmail.com> @@ -14,11 +10,19 @@ * Released under GNU GPL, read the file 'COPYING' for more information */ -#include "sp-filter.h" -#include "turbulence-fns.h" +#ifndef SP_FETURBULENCE_H_SEEN +#define SP_FETURBULENCE_H_SEEN + +#include "sp-filter-primitive.h" #include "number-opt-number.h" #include "display/nr-filter-turbulence.h" +#define SP_TYPE_FETURBULENCE (sp_feTurbulence_get_type()) +#define SP_FETURBULENCE(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), SP_TYPE_FETURBULENCE, SPFeTurbulence)) +#define SP_FETURBULENCE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), SP_TYPE_FETURBULENCE, SPFeTurbulenceClass)) +#define SP_IS_FETURBULENCE(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SP_TYPE_FETURBULENCE)) +#define SP_IS_FETURBULENCE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), SP_TYPE_FETURBULENCE)) + /* FeTurbulence base class */ class SPFeTurbulenceClass; diff --git a/src/preferences-skeleton.h b/src/preferences-skeleton.h index c334ae31e..0c8834951 100644 --- a/src/preferences-skeleton.h +++ b/src/preferences-skeleton.h @@ -344,7 +344,6 @@ static char const preferences_skeleton[] = " <group id=\"workarounds\"\n" " colorsontop=\"0\"\n" " partialdynamic=\"0\"/>\n" -" <group id=\"threading\" numthreads=\"1\"/>\n" " </group>\n" "\n" " <group id=\"extensions\">" diff --git a/src/sp-filter-fns.h b/src/sp-filter-fns.h deleted file mode 100644 index 4e1b012a3..000000000 --- a/src/sp-filter-fns.h +++ /dev/null @@ -1,53 +0,0 @@ -#ifndef SEEN_SP_FILTER_FNS_H -#define SEEN_SP_FILTER_FNS_H - -/** \file - * Macros and fn declarations related to filters. - */ - -#include <glib/gtypes.h> -#include <glib-object.h> -#include "libnr/nr-forward.h" -#include "sp-filter-units.h" -#include "sp-filter-primitive.h" - -class SPFilter; - -namespace Inkscape { -namespace XML { -class Node; -} -} - -#define SP_TYPE_FILTER (sp_filter_get_type()) -#define SP_FILTER(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), SP_TYPE_FILTER, SPFilter)) -#define SP_FILTER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), SP_TYPE_FILTER, SPFilterClass)) -#define SP_IS_FILTER(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SP_TYPE_FILTER)) -#define SP_IS_FILTER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), SP_TYPE_FILTER)) - -#define SP_FILTER_FILTER_UNITS(f) (SP_FILTER(f)->filterUnits) -#define SP_FILTER_PRIMITIVE_UNITS(f) (SP_FILTER(f)->primitiveUnits) - -GType sp_filter_get_type(); - -//need to define function -void sp_filter_set_filter_units(SPFilter *filter, SPFilterUnits filterUnits); -//need to define function -void sp_filter_set_primitive_units(SPFilter *filter, SPFilterUnits filterUnits); - -SPFilterPrimitive *add_primitive(SPFilter *filter, SPFilterPrimitive *primitive); -SPFilterPrimitive *get_primitive(SPFilter *filter, int index); - - -#endif /* !SEEN_SP_FILTER_FNS_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/sp-filter-primitive.h b/src/sp-filter-primitive.h index 3a7e73861..1ed101489 100644 --- a/src/sp-filter-primitive.h +++ b/src/sp-filter-primitive.h @@ -15,9 +15,6 @@ */ #include "sp-object.h" -#include "display/nr-filter.h" -#include "display/nr-filter-primitive.h" -#include "display/nr-filter-types.h" #define SP_TYPE_FILTER_PRIMITIVE (sp_filter_primitive_get_type ()) #define SP_FILTER_PRIMITIVE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SP_TYPE_FILTER_PRIMITIVE, SPFilterPrimitive)) @@ -27,6 +24,12 @@ class SPFilterPrimitive; class SPFilterPrimitiveClass; +namespace Inkscape { +namespace Filters { +class Filter; +class FilterPrimitive; +} } + struct SPFilterPrimitive : public SPObject { int image_in, image_out; diff --git a/src/sp-filter-reference.cpp b/src/sp-filter-reference.cpp index 18e187603..79860d5d8 100644 --- a/src/sp-filter-reference.cpp +++ b/src/sp-filter-reference.cpp @@ -1,3 +1,4 @@ +#include "sp-filter.h" #include "sp-filter-reference.h" bool diff --git a/src/sp-filter-reference.h b/src/sp-filter-reference.h index 216ff1d6f..e5a3bc8ec 100644 --- a/src/sp-filter-reference.h +++ b/src/sp-filter-reference.h @@ -2,8 +2,10 @@ #define SEEN_SP_FILTER_REFERENCE_H #include "uri-references.h" -#include "sp-filter-fns.h" + class SPObject; +class SPDocument; +class SPFilter; class SPFilterReference : public Inkscape::URIReference { public: @@ -18,7 +20,6 @@ protected: virtual bool _acceptObject(SPObject *obj) const; }; - #endif /* !SEEN_SP_FILTER_REFERENCE_H */ /* diff --git a/src/sp-filter.cpp b/src/sp-filter.cpp index 4cbafe50c..44db09b86 100644 --- a/src/sp-filter.cpp +++ b/src/sp-filter.cpp @@ -28,6 +28,7 @@ using std::pair; #include "document.h" #include "sp-filter.h" #include "sp-filter-reference.h" +#include "sp-filter-primitive.h" #include "uri.h" #include "xml/repr.h" #include <cstring> diff --git a/src/sp-filter.h b/src/sp-filter.h index 5ad3863e5..527a0b8a1 100644 --- a/src/sp-filter.h +++ b/src/sp-filter.h @@ -1,10 +1,6 @@ -#ifndef SP_FILTER_H_SEEN -#define SP_FILTER_H_SEEN - /** \file - * SVG <filter> implementation, see sp-filter.cpp. - */ -/* + * SVG <filter> element + *//* * Authors: * Hugo Rodrigues <haa.rodrigues@gmail.com> * Niko Kiirala <niko@kiirala.com> @@ -13,6 +9,8 @@ * * Released under GNU GPL, read the file 'COPYING' for more information */ +#ifndef SP_FILTER_H_SEEN +#define SP_FILTER_H_SEEN #include <map> @@ -21,18 +19,24 @@ #include "number-opt-number.h" #include "sp-object.h" #include "sp-filter-units.h" -#include "sp-filter-fns.h" #include "svg/svg-length.h" -#include "display/nr-filter.h" -/* Filter base class */ +#define SP_TYPE_FILTER (sp_filter_get_type()) +#define SP_FILTER(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), SP_TYPE_FILTER, SPFilter)) +#define SP_FILTER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), SP_TYPE_FILTER, SPFilterClass)) +#define SP_IS_FILTER(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SP_TYPE_FILTER)) +#define SP_IS_FILTER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), SP_TYPE_FILTER)) -/* MACROS DEFINED IN FILE sp-filter-fns.h */ +#define SP_FILTER_FILTER_UNITS(f) (SP_FILTER(f)->filterUnits) +#define SP_FILTER_PRIMITIVE_UNITS(f) (SP_FILTER(f)->primitiveUnits) -struct SPFilterReference; +namespace Inkscape { +namespace Filters { +class Filter; +} } -class SPFilter; -class SPFilterClass; +struct SPFilterReference; +class SPFilterPrimitive; struct ltstr { bool operator()(const char* s1, const char* s2) const; @@ -70,34 +74,31 @@ struct SPFilterClass { SPObjectClass parent_class; }; -/* - * Initializes the given Inkscape::Filters::Filter object as a renderer for this - * SPFilter object. - */ +GType sp_filter_get_type(); + +void sp_filter_set_filter_units(SPFilter *filter, SPFilterUnits filterUnits); +void sp_filter_set_primitive_units(SPFilter *filter, SPFilterUnits filterUnits); +SPFilterPrimitive *add_primitive(SPFilter *filter, SPFilterPrimitive *primitive); +SPFilterPrimitive *get_primitive(SPFilter *filter, int index); + +/* Initializes the given Inkscape::Filters::Filter object as a renderer for this + * SPFilter object. */ void sp_filter_build_renderer(SPFilter *sp_filter, Inkscape::Filters::Filter *nr_filter); -/* - * Returns the number of filter primitives in this SPFilter object. - */ +/// Returns the number of filter primitives in this SPFilter object. int sp_filter_primitive_count(SPFilter *filter); -/** - * Returns a slot number for given image name, or -1 for unknown name. - */ +/// Returns a slot number for given image name, or -1 for unknown name. int sp_filter_get_image_name(SPFilter *filter, gchar const *name); -/** - * Returns slot number for given image name, even if it's unknown. - */ + +/// Returns slot number for given image name, even if it's unknown. int sp_filter_set_image_name(SPFilter *filter, gchar const *name); -/** - * Finds image name based on it's slot number. Returns 0 for unknown slot - * numbers. - */ + +/** Finds image name based on it's slot number. Returns 0 for unknown slot + * numbers. */ gchar const *sp_filter_name_for_image(SPFilter const *filter, int const image); -/* - * Returns a result image name that is not in use inside this filter. - */ +/// Returns a result image name that is not in use inside this filter. Glib::ustring sp_filter_get_new_result_name(SPFilter *filter); #endif /* !SP_FILTER_H_SEEN */ diff --git a/src/sp-gaussian-blur.h b/src/sp-gaussian-blur.h deleted file mode 100644 index c86ee3288..000000000 --- a/src/sp-gaussian-blur.h +++ /dev/null @@ -1,45 +0,0 @@ -#ifndef SP_GAUSSIANBLUR_H_SEEN -#define SP_GAUSSIANBLUR_H_SEEN - -/** \file - * SVG <gaussianBlur> implementation, see sp-gaussianBlur.cpp. - */ -/* - * Authors: - * Hugo Rodrigues <haa.rodrigues@gmail.com> - * - * Copyright (C) 2006 Hugo Rodrigues - * - * Released under GNU GPL, read the file 'COPYING' for more information - */ - -#include "sp-filter.h" -#include "sp-gaussian-blur-fns.h" - -/* GaussianBlur base class */ -class SPGaussianBlurClass; - -struct SPGaussianBlur : public SPFilterPrimitive { - /** stdDeviation attribute */ - NumberOptNumber stdDeviation; -}; - -struct SPGaussianBlurClass { - SPFilterPrimitiveClass parent_class; -}; - -GType sp_gaussianBlur_get_type(); - - -#endif /* !SP_GAUSSIANBLUR_H_SEEN */ - -/* - 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/sp-object-repr.cpp b/src/sp-object-repr.cpp index 62143e3ab..cc289317e 100644 --- a/src/sp-object-repr.cpp +++ b/src/sp-object-repr.cpp @@ -59,7 +59,6 @@ #include "color-profile-fns.h" #include "xml/repr.h" #include "sp-filter.h" -#include "sp-gaussian-blur.h" #include "filters/blend.h" #include "filters/colormatrix.h" #include "filters/componenttransfer.h" @@ -70,6 +69,7 @@ #include "filters/distantlight.h" #include "filters/displacementmap.h" #include "filters/flood.h" +#include "filters/gaussian-blur.h" #include "filters/image.h" #include "filters/merge.h" #include "filters/morphology.h" diff --git a/src/spray-context.cpp b/src/spray-context.cpp index 2bdac197f..ee168f136 100644 --- a/src/spray-context.cpp +++ b/src/spray-context.cpp @@ -1,5 +1,3 @@ -#define __SP_SPRAY_CONTEXT_C__ - /* * Spray Tool * @@ -36,7 +34,6 @@ #include "desktop.h" #include "desktop-events.h" #include "desktop-handles.h" -#include "unistd.h" #include "desktop-style.h" #include "message-context.h" #include "pixmaps/cursor-spray.xpm" @@ -72,9 +69,6 @@ #include "style.h" #include "box3d.h" #include "sp-item-transform.h" -#include "filter-chemistry.h" -#include "sp-gaussian-blur-fns.h" -#include "sp-gaussian-blur.h" #include "spray-context.h" #include "ui/dialog/dialog-manager.h" diff --git a/src/tweak-context.cpp b/src/tweak-context.cpp index 13299b5a4..36357ab84 100644 --- a/src/tweak-context.cpp +++ b/src/tweak-context.cpp @@ -72,8 +72,7 @@ #include "box3d.h" #include "sp-item-transform.h" #include "filter-chemistry.h" -#include "sp-gaussian-blur-fns.h" -#include "sp-gaussian-blur.h" +#include "filters/gaussian-blur.h" #include "tweak-context.h" diff --git a/src/ui/dialog/filter-effects-dialog.cpp b/src/ui/dialog/filter-effects-dialog.cpp index 1672c4b69..4ec719bf4 100644 --- a/src/ui/dialog/filter-effects-dialog.cpp +++ b/src/ui/dialog/filter-effects-dialog.cpp @@ -48,13 +48,13 @@ #include "filters/convolvematrix.h" #include "filters/displacementmap.h" #include "filters/distantlight.h" +#include "filters/gaussian-blur.h" #include "filters/merge.h" #include "filters/mergenode.h" #include "filters/offset.h" #include "filters/pointlight.h" #include "filters/spotlight.h" #include "sp-filter-primitive.h" -#include "sp-gaussian-blur.h" #include "style.h" #include "svg/svg-color.h" |
