summaryrefslogtreecommitdiffstats
path: root/src/filter-chemistry.cpp
diff options
context:
space:
mode:
authorbulia byak <buliabyak@gmail.com>2008-03-23 04:12:33 +0000
committerbuliabyak <buliabyak@users.sourceforge.net>2008-03-23 04:12:33 +0000
commit4e86a24269bef9719af45e40cef77db00c329ed1 (patch)
treee638aba1a72cecf25b26bb6e522f1eff996a7f7f /src/filter-chemistry.cpp
parentmake sure we explicitly use geometric bbox for calculating blur margins (diff)
downloadinkscape-4e86a24269bef9719af45e40cef77db00c329ed1.tar.gz
inkscape-4e86a24269bef9719af45e40cef77db00c329ed1.zip
helper functions to access a single blur primitive in a filter
(bzr r5174)
Diffstat (limited to 'src/filter-chemistry.cpp')
-rw-r--r--src/filter-chemistry.cpp29
1 files changed, 27 insertions, 2 deletions
diff --git a/src/filter-chemistry.cpp b/src/filter-chemistry.cpp
index 46dbfe0f5..58e2fae6e 100644
--- a/src/filter-chemistry.cpp
+++ b/src/filter-chemistry.cpp
@@ -319,7 +319,7 @@ new_filter_blend_gaussian_blur (SPDocument *document, const char *blendmode, gdo
SPFilter *
new_filter_simple_from_item (SPDocument *document, SPItem *item, const char *mode, gdouble radius)
{
- NR::Maybe<NR::Rect> const r = sp_item_bbox_desktop(item);
+ NR::Maybe<NR::Rect> const r = sp_item_bbox_desktop(item, SPItem::GEOMETRIC_BBOX);
double width;
double height;
@@ -374,7 +374,7 @@ modify_filter_gaussian_blur_from_item(SPDocument *document, SPItem *item,
stdDeviation /= expansion;
// Get the object size
- NR::Maybe<NR::Rect> const r = sp_item_bbox_desktop(item);
+ NR::Maybe<NR::Rect> const r = sp_item_bbox_desktop(item, SPItem::GEOMETRIC_BBOX);
double width;
double height;
if (r) {
@@ -457,6 +457,31 @@ void remove_filter_gaussian_blur (SPObject *item)
}
}
+bool filter_is_single_gaussian_blur(SPFilter *filter)
+{
+ return (SP_OBJECT(filter)->firstChild() &&
+ SP_OBJECT(filter)->firstChild() == SP_OBJECT(filter)->lastChild() &&
+ SP_IS_GAUSSIANBLUR(SP_OBJECT(filter)->firstChild()));
+}
+
+double get_single_gaussian_blur_radius(SPFilter *filter)
+{
+ if (SP_OBJECT(filter)->firstChild() &&
+ SP_OBJECT(filter)->firstChild() == SP_OBJECT(filter)->lastChild() &&
+ SP_IS_GAUSSIANBLUR(SP_OBJECT(filter)->firstChild())) {
+
+ SPGaussianBlur *gb = SP_GAUSSIANBLUR(SP_OBJECT(filter)->firstChild());
+ double x = gb->stdDeviation.getNumber();
+ double y = gb->stdDeviation.getOptNumber();
+ if (x > 0 && y > 0) {
+ return MAX(x, y);
+ }
+ return x;
+ }
+}
+
+
+
/*
Local Variables:
mode:c++