diff options
| author | Jasper van de Gronde <jasper.vandegronde@gmail.com> | 2009-04-21 14:13:06 +0000 |
|---|---|---|
| committer | jaspervdg <jaspervdg@users.sourceforge.net> | 2009-04-21 14:13:06 +0000 |
| commit | 2dd8926ab069ce4f278d407e8698ba7d8aaa9afd (patch) | |
| tree | 134e4bf18f9f2b7d508324fa54508b6ff1f2ca69 /src/filters | |
| parent | Better color handling in Bumps (diff) | |
| download | inkscape-2dd8926ab069ce4f278d407e8698ba7d8aaa9afd.tar.gz inkscape-2dd8926ab069ce4f278d407e8698ba7d8aaa9afd.zip | |
Partial fix for bug 193926 , thanks to Preben Soeberg.
(bzr r7752)
Diffstat (limited to 'src/filters')
| -rw-r--r-- | src/filters/convolvematrix.cpp | 32 |
1 files changed, 18 insertions, 14 deletions
diff --git a/src/filters/convolvematrix.cpp b/src/filters/convolvematrix.cpp index 7402dc8cb..a5a40811c 100644 --- a/src/filters/convolvematrix.cpp +++ b/src/filters/convolvematrix.cpp @@ -175,31 +175,35 @@ sp_feConvolveMatrix_set(SPObject *object, unsigned int key, gchar const *value) if (value){ feConvolveMatrix->kernelMatrixIsSet = true; feConvolveMatrix->kernelMatrix = helperfns_read_vector(value, (int) (feConvolveMatrix->order.getNumber() * feConvolveMatrix->order.getOptNumber())); + if (! feConvolveMatrix->divisorIsSet) { + feConvolveMatrix->divisor = 0; + for (unsigned int i = 0; i< feConvolveMatrix->kernelMatrix.size(); i++) + feConvolveMatrix->divisor += feConvolveMatrix->kernelMatrix[i]; + if (feConvolveMatrix->divisor == 0) feConvolveMatrix->divisor = 1; + } object->parent->requestModified(SP_OBJECT_MODIFIED_FLAG); } else { g_warning("For feConvolveMatrix you MUST pass a kernelMatrix parameter!"); } break; case SP_ATTR_DIVISOR: - if (!value){ - read_num = 1; - } else { + if (value) { read_num = helperfns_read_number(value); if (read_num == 0) { - if (feConvolveMatrix->kernelMatrixIsSet){ - g_warning("You shouldn't pass a divisor value equal to 0! Assuming the sum of all values in kernelMatrix as the default value."); - for (unsigned int i = 0; i< feConvolveMatrix->kernelMatrix.size(); i++) - read_num += feConvolveMatrix->kernelMatrix[i]; - } else { - g_warning("You shouldn't pass a divisor value equal to 0! Assuming 1 as the default value."); - read_num = 1; + // This should actually be an error, but given our UI it is more useful to simply set divisor to the default. + for (unsigned int i = 0; i< feConvolveMatrix->kernelMatrix.size(); i++) + read_num += feConvolveMatrix->kernelMatrix[i]; + if (read_num == 0) read_num = 1; + if (feConvolveMatrix->divisorIsSet || feConvolveMatrix->divisor!=read_num) { + feConvolveMatrix->divisorIsSet = false; + feConvolveMatrix->divisor = read_num; + object->parent->requestModified(SP_OBJECT_MODIFIED_FLAG); } + } else if (!feConvolveMatrix->divisorIsSet || feConvolveMatrix->divisor!=read_num) { + feConvolveMatrix->divisorIsSet = true; + feConvolveMatrix->divisor = read_num; } } - if (read_num != feConvolveMatrix->divisor){ - feConvolveMatrix->divisor = read_num; - object->parent->requestModified(SP_OBJECT_MODIFIED_FLAG); - } break; case SP_ATTR_BIAS: read_num = 0; |
