diff options
| author | bulia byak <buliabyak@gmail.com> | 2008-03-23 04:12:33 +0000 |
|---|---|---|
| committer | buliabyak <buliabyak@users.sourceforge.net> | 2008-03-23 04:12:33 +0000 |
| commit | 4e86a24269bef9719af45e40cef77db00c329ed1 (patch) | |
| tree | e638aba1a72cecf25b26bb6e522f1eff996a7f7f /src | |
| parent | make sure we explicitly use geometric bbox for calculating blur margins (diff) | |
| download | inkscape-4e86a24269bef9719af45e40cef77db00c329ed1.tar.gz inkscape-4e86a24269bef9719af45e40cef77db00c329ed1.zip | |
helper functions to access a single blur primitive in a filter
(bzr r5174)
Diffstat (limited to 'src')
| -rw-r--r-- | src/filter-chemistry.cpp | 29 | ||||
| -rw-r--r-- | src/filter-chemistry.h | 2 |
2 files changed, 29 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++ diff --git a/src/filter-chemistry.h b/src/filter-chemistry.h index 25ba0c997..219f79c8c 100644 --- a/src/filter-chemistry.h +++ b/src/filter-chemistry.h @@ -24,6 +24,8 @@ SPFilter *new_filter_simple_from_item (SPDocument *document, SPItem *item, const SPFilter *modify_filter_gaussian_blur_from_item (SPDocument *document, SPItem *item, gdouble stdDeviation); void remove_filter (SPObject *item, bool recursive); void remove_filter_gaussian_blur (SPObject *item); +bool filter_is_single_gaussian_blur(SPFilter *filter); +double get_single_gaussian_blur_radius(SPFilter *filter); #endif |
