summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorUlf Erikson <ulferikson@gmail.com>2006-07-02 12:50:47 +0000
committerulferikson <ulferikson@users.sourceforge.net>2006-07-02 12:50:47 +0000
commit036773027d3fc9c3ef9bcdc86b55337eefc29bf2 (patch)
treecf2ffa6f25792ce34910fdfe14bb5a2651b24b81 /src
parentupdated po files (diff)
downloadinkscape-036773027d3fc9c3ef9bcdc86b55337eefc29bf2.tar.gz
inkscape-036773027d3fc9c3ef9bcdc86b55337eefc29bf2.zip
The stack of alphas must be pushed/poped for each bind/release pair;
not only for those with an opacity set. (bzr r1335)
Diffstat (limited to 'src')
-rw-r--r--src/extension/internal/pdf.cpp48
1 files changed, 14 insertions, 34 deletions
diff --git a/src/extension/internal/pdf.cpp b/src/extension/internal/pdf.cpp
index 0951d97f2..796e410cb 100644
--- a/src/extension/internal/pdf.cpp
+++ b/src/extension/internal/pdf.cpp
@@ -480,30 +480,14 @@ PrintPDF::bind(Inkscape::Extension::Print *mod, NRMatrix const *transform, float
<< transform->c[4] << " "
<< transform->c[5] << " cm\n";
- if (opacity!=1.0) {
- float alpha = opacity * _pushed_alphas[_curr_alpha];
-
- fprintf(stderr, "bind: opacity=%f, pushed=%f, alpha=%f\n",
- opacity, _pushed_alphas[_curr_alpha], alpha);
-
- _curr_alpha++;
- if (_curr_alpha >= _num_alphas) {
- _num_alphas = _num_alphas*2;
- _pushed_alphas = (float *) realloc(_pushed_alphas, _num_alphas*sizeof(float));
- }
- _pushed_alphas[_curr_alpha] = alpha;
-
- PdfObject *pdf_alpha = pdf_file->begin_resource(pdf_extgstate);
- *pdf_alpha << "<< /Type /ExtGState\n";
- *pdf_alpha << " /ca " << alpha << "\n";
- *pdf_alpha << " /AIS false\n";
- *pdf_alpha << ">>\n";
-
- *page_stream << pdf_alpha->get_name()
- << " gs\n";
+ float alpha = opacity * _pushed_alphas[_curr_alpha];
- pdf_file->end_resource(pdf_alpha);
+ _curr_alpha++;
+ if (_curr_alpha >= _num_alphas) {
+ _num_alphas = _num_alphas*2;
+ _pushed_alphas = (float *) realloc(_pushed_alphas, _num_alphas*sizeof(float));
}
+ _pushed_alphas[_curr_alpha] = alpha;
return 1;
}
@@ -514,7 +498,8 @@ PrintPDF::release(Inkscape::Extension::Print *mod)
if (!_stream) return 0; // XXX: fixme, returning -1 as unsigned.
if (_bitmap) return 0;
- _curr_alpha--;
+ if (_curr_alpha > 0)
+ _curr_alpha--;
*page_stream << "Q\n";
@@ -542,23 +527,17 @@ PrintPDF::print_fill_alpha(SVGOStringStream &/*os*/, SPStyle const *const style,
if (style->fill.type == SP_PAINT_TYPE_COLOR) {
float alpha = 1.0;
alpha *= SP_SCALE24_TO_FLOAT(style->fill_opacity.value);
+ alpha *= _pushed_alphas[_curr_alpha];
if (alpha != 1.0) {
PdfObject *pdf_alpha = pdf_file->begin_resource(pdf_extgstate);
*pdf_alpha << "<< /Type /ExtGState\n";
- *pdf_alpha << " /ca " << alpha*_pushed_alphas[_curr_alpha] << "\n";
+ *pdf_alpha << " /ca " << alpha << "\n";
*pdf_alpha << " /AIS false\n";
*pdf_alpha << ">>\n";
*page_stream << pdf_alpha->get_name()
<< " gs\n";
-
-
- fprintf(stderr, "print_fill_alpha: opacity=%f, fill-opacity=%f, pushed_alphas=%f ==> %f\n",
- SP_SCALE24_TO_FLOAT(style->opacity.value),
- SP_SCALE24_TO_FLOAT(style->fill_opacity.value),
- _pushed_alphas[_curr_alpha],
- alpha*_pushed_alphas[_curr_alpha]);
pdf_file->end_resource(pdf_alpha);
}
@@ -586,7 +565,7 @@ PrintPDF::print_fill_alpha(SVGOStringStream &/*os*/, SPStyle const *const style,
alpha *= lg->vector.stops[i].opacity;
}
- if (alpha != 1.0) {
+ if (alpha != 1.0 || _pushed_alphas[_curr_alpha] != 1.0) {
PdfObject *pdf_gstate = pdf_file->begin_resource(pdf_extgstate);
*pdf_gstate << "<< /Type /ExtGState\n";
@@ -715,7 +694,7 @@ PrintPDF::print_fill_alpha(SVGOStringStream &/*os*/, SPStyle const *const style,
alpha *= rg->vector.stops[i].opacity;
}
- if (alpha != 1.0) {
+ if (alpha != 1.0 || _pushed_alphas[_curr_alpha] != 1.0) {
PdfObject *pdf_gstate = pdf_file->begin_resource(pdf_extgstate);
*pdf_gstate << "<< /Type /ExtGState\n";
@@ -951,11 +930,12 @@ PrintPDF::print_stroke_style(SVGOStringStream &os, SPStyle const *style)
float alpha = 1.0;
alpha *= SP_SCALE24_TO_FLOAT(style->stroke_opacity.value);
+ alpha *= _pushed_alphas[_curr_alpha];
if (alpha != 1.0) {
PdfObject *pdf_alpha = pdf_file->begin_resource(pdf_extgstate);
*pdf_alpha << "<< /Type /ExtGState\n";
- *pdf_alpha << " /CA " << alpha*_pushed_alphas[_curr_alpha] << "\n";
+ *pdf_alpha << " /CA " << alpha << "\n";
*pdf_alpha << " /AIS false\n";
*pdf_alpha << ">>\n";