diff options
| author | Niko Kiirala <niko@kiirala.com> | 2009-05-29 07:25:08 +0000 |
|---|---|---|
| committer | kiirala <kiirala@users.sourceforge.net> | 2009-05-29 07:25:08 +0000 |
| commit | c38fddedd6907d291a8296da56f02f2520ba2a39 (patch) | |
| tree | f38134366eb0149c170eb387f86dbd5e321f37a4 /src | |
| parent | Windows cleanups. Fixes bug #381374. (diff) | |
| download | inkscape-c38fddedd6907d291a8296da56f02f2520ba2a39.tar.gz inkscape-c38fddedd6907d291a8296da56f02f2520ba2a39.zip | |
Fixed area_enlarge in couple filters, to prevent white lines in rendering
(bzr r7961)
Diffstat (limited to 'src')
| -rw-r--r-- | src/display/nr-filter-diffuselighting.cpp | 13 | ||||
| -rw-r--r-- | src/display/nr-filter-diffuselighting.h | 1 | ||||
| -rw-r--r-- | src/display/nr-filter-morphology.cpp | 5 | ||||
| -rw-r--r-- | src/display/nr-filter-specularlighting.cpp | 13 | ||||
| -rw-r--r-- | src/display/nr-filter-specularlighting.h | 1 |
5 files changed, 31 insertions, 2 deletions
diff --git a/src/display/nr-filter-diffuselighting.cpp b/src/display/nr-filter-diffuselighting.cpp index 8915c88b1..0fe4c5947 100644 --- a/src/display/nr-filter-diffuselighting.cpp +++ b/src/display/nr-filter-diffuselighting.cpp @@ -168,6 +168,19 @@ int FilterDiffuseLighting::render(FilterSlot &slot, FilterUnits const &units) { return 0; } +void FilterDiffuseLighting::area_enlarge(NRRectL &area, Geom::Matrix const &trans) +{ + // TODO: support kernelUnitLength + double scalex = std::fabs(trans[0]) + std::fabs(trans[1]); + double scaley = std::fabs(trans[2]) + std::fabs(trans[3]); + + //FIXME: no +2 should be there!... (noticable only for big scales at big zoom factor) + area.x0 -= (int)(scalex) + 2; + area.x1 += (int)(scalex) + 2; + area.y0 -= (int)(scaley) + 2; + area.y1 += (int)(scaley) + 2; +} + FilterTraits FilterDiffuseLighting::get_input_traits() { return TRAIT_PARALLER; } diff --git a/src/display/nr-filter-diffuselighting.h b/src/display/nr-filter-diffuselighting.h index a1c6964cb..708c7a0a2 100644 --- a/src/display/nr-filter-diffuselighting.h +++ b/src/display/nr-filter-diffuselighting.h @@ -42,6 +42,7 @@ public: static FilterPrimitive *create(); virtual ~FilterDiffuseLighting(); virtual int render(FilterSlot &slot, FilterUnits const &units); + virtual void area_enlarge(NRRectL &area, Geom::Matrix const &trans); virtual FilterTraits get_input_traits(); private: diff --git a/src/display/nr-filter-morphology.cpp b/src/display/nr-filter-morphology.cpp index fb51099d5..2df3ff807 100644 --- a/src/display/nr-filter-morphology.cpp +++ b/src/display/nr-filter-morphology.cpp @@ -9,6 +9,7 @@ * Released under GNU GPL, read the file 'COPYING' for more information */ +#include <cmath> #include "display/nr-filter-morphology.h" #include "display/nr-filter-units.h" #include "libnr/nr-blit.h" @@ -113,8 +114,8 @@ int FilterMorphology::render(FilterSlot &slot, FilterUnits const &units) { void FilterMorphology::area_enlarge(NRRectL &area, Geom::Matrix const &trans) { - int const enlarge_x = (int)round(this->xradius * trans.expansionX()); - int const enlarge_y = (int)round(this->yradius * trans.expansionY()); + int const enlarge_x = (int)std::ceil(this->xradius * (std::fabs(trans[0]) + std::fabs(trans[1]))); + int const enlarge_y = (int)std::ceil(this->yradius * (std::fabs(trans[2]) + std::fabs(trans[3]))); area.x0 -= enlarge_x; area.x1 += enlarge_x; diff --git a/src/display/nr-filter-specularlighting.cpp b/src/display/nr-filter-specularlighting.cpp index b096ee49d..6a6ce38a8 100644 --- a/src/display/nr-filter-specularlighting.cpp +++ b/src/display/nr-filter-specularlighting.cpp @@ -188,6 +188,19 @@ int FilterSpecularLighting::render(FilterSlot &slot, FilterUnits const &units) { return 0; } +void FilterSpecularLighting::area_enlarge(NRRectL &area, Geom::Matrix const &trans) +{ + // TODO: support kernelUnitLength + double scalex = std::fabs(trans[0]) + std::fabs(trans[1]); + double scaley = std::fabs(trans[2]) + std::fabs(trans[3]); + + //FIXME: no +2 should be there!... (noticable only for big scales at big zoom factor) + area.x0 -= (int)(scalex) + 2; + area.x1 += (int)(scalex) + 2; + area.y0 -= (int)(scaley) + 2; + area.y1 += (int)(scaley) + 2; +} + FilterTraits FilterSpecularLighting::get_input_traits() { return TRAIT_PARALLER; } diff --git a/src/display/nr-filter-specularlighting.h b/src/display/nr-filter-specularlighting.h index e141f8f1f..0f9e6dfe9 100644 --- a/src/display/nr-filter-specularlighting.h +++ b/src/display/nr-filter-specularlighting.h @@ -43,6 +43,7 @@ public: static FilterPrimitive *create(); virtual ~FilterSpecularLighting(); virtual int render(FilterSlot &slot, FilterUnits const &units); + virtual void area_enlarge(NRRectL &area, Geom::Matrix const &trans); virtual FilterTraits get_input_traits(); private: |
