X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=src%2Fdisplay%2Fnr-filter-gaussian.cpp;h=76b541ace61029b0ac3d855ccb1e99015b049dbc;hb=77eda576f455eeb23c7b92510f38bc60738473ab;hp=fdab94f1d7c82ba284fe2cfceb141cf088743fdd;hpb=fb86717633bfcfe161571aed7058ea6a39b7a69b;p=inkscape.git diff --git a/src/display/nr-filter-gaussian.cpp b/src/display/nr-filter-gaussian.cpp index fdab94f1d..76b541ace 100644 --- a/src/display/nr-filter-gaussian.cpp +++ b/src/display/nr-filter-gaussian.cpp @@ -17,9 +17,10 @@ #include #include #include +#include #include -#include "isnan.h" +#include "2geom/isnan.h" #include "display/nr-filter-primitive.h" #include "display/nr-filter-gaussian.h" @@ -27,6 +28,7 @@ #include "display/nr-filter-units.h" #include "libnr/nr-pixblock.h" #include "libnr/nr-matrix.h" +#include "libnr/nr-matrix-fns.h" #include "util/fixed_point.h" #include "prefs-utils.h" @@ -508,9 +510,14 @@ upsample(PT *const dst, int const dstr1, int const dstr2, unsigned int const dn1 int FilterGaussian::render(FilterSlot &slot, FilterUnits const &units) { - Matrix trans = units.get_matrix_primitiveunits2pb(); /* in holds the input pixblock */ NRPixBlock *in = slot.get(_input); + if (!in) { + g_warning("Missing source image for feGaussianBlur (in=%d)", _input); + return 1; + } + + Matrix trans = units.get_matrix_primitiveunits2pb(); /* If to either direction, the standard deviation is zero or * input image is not defined, @@ -533,8 +540,8 @@ int FilterGaussian::render(FilterSlot &slot, FilterUnits const &units) // 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(); + double const deviation_x_org = _deviation_x * NR::expansionX(trans); + double const deviation_y_org = _deviation_y * NR::expansionY(trans); int const PC = NR_PIXBLOCK_BPP(in); // Subsampling constants @@ -768,8 +775,8 @@ int FilterGaussian::render(FilterSlot &slot, FilterUnits const &units) void FilterGaussian::area_enlarge(NRRectL &area, Matrix const &trans) { - int area_x = _effect_area_scr(_deviation_x * trans.expansionX()); - int area_y = _effect_area_scr(_deviation_y * trans.expansionY()); + int area_x = _effect_area_scr(_deviation_x * NR::expansionX(trans)); + int area_y = _effect_area_scr(_deviation_y * NR::expansionY(trans)); // maximum is used because rotations can mix up these directions // TODO: calculate a more tight-fitting rendering area int area_max = std::max(area_x, area_y); @@ -785,14 +792,14 @@ FilterTraits FilterGaussian::get_input_traits() { void FilterGaussian::set_deviation(double deviation) { - if(isFinite(deviation) && deviation >= 0) { + if(IS_FINITE(deviation) && deviation >= 0) { _deviation_x = _deviation_y = deviation; } } void FilterGaussian::set_deviation(double x, double y) { - if(isFinite(x) && x >= 0 && isFinite(y) && y >= 0) { + if(IS_FINITE(x) && x >= 0 && IS_FINITE(y) && y >= 0) { _deviation_x = x; _deviation_y = y; }