r22978 by jghali -
scribus-commit
scribus-commit at lists.scribus.net
Thu May 16 11:55:25 UTC 2019
Author: jghali
Date: Thu May 16 11:55:24 2019
New Revision: 22978
URL: http://scribus.net/websvn/listing.php?repname=Scribus&sc=1&rev=22978
Log:
#15685: Multi-step gradient incorrectly imported from PDF
Modified:
trunk/Scribus/scribus/plugins/import/pdf/slaoutput.cpp
Modified: trunk/Scribus/scribus/plugins/import/pdf/slaoutput.cpp
URL: http://scribus.net/websvn/diff.php?repname=Scribus&rev=22978&path=/trunk/Scribus/scribus/plugins/import/pdf/slaoutput.cpp
==============================================================================
--- trunk/Scribus/scribus/plugins/import/pdf/slaoutput.cpp (original)
+++ trunk/Scribus/scribus/plugins/import/pdf/slaoutput.cpp Thu May 16 11:55:24 2019
@@ -1755,33 +1755,35 @@
StitchingFunction *stitchingFunc = (StitchingFunction*)func;
const double *bounds = stitchingFunc->getBounds();
int num_funcs = stitchingFunc->getNumFuncs();
+ double domain_min = stitchingFunc->getDomainMin(0);
+ double domain_max = stitchingFunc->getDomainMax(0);
+ if (fabs(domain_max - domain_min) < 1e-6)
+ {
+ domain_min = 0.0;
+ domain_max = 1.0;
+ }
// Add stops from all the stitched functions
- for ( int i = 0 ; i < num_funcs ; i++ )
+ for (int i = 0 ; i <= num_funcs ; i++)
{
GfxColor temp;
- ((GfxAxialShading*)shading)->getColor(bounds[i], &temp);
+ shading->getColor(bounds[i], &temp);
QString stopColor = getColor(color_space, &temp, &shade);
- FillGradient.addStop( ScColorEngine::getShadeColor(m_doc->PageColors[stopColor], m_doc, shade), bounds[i], 0.5, 1.0, stopColor, shade );
- if (i == num_funcs - 1)
- {
- ((GfxAxialShading*)shading)->getColor(bounds[i+1], &temp);
- QString stopColor = getColor(color_space, &temp, &shade);
- FillGradient.addStop( ScColorEngine::getShadeColor(m_doc->PageColors[stopColor], m_doc, shade), bounds[i+1], 0.5, 1.0, stopColor, shade );
- }
+ double stopPoint = (bounds[i] - domain_min) / (domain_max - domain_min);
+ FillGradient.addStop( ScColorEngine::getShadeColor(m_doc->PageColors[stopColor], m_doc, shade), stopPoint, 0.5, 1.0, stopColor, shade );
}
}
else if ((func->getType() == 2) || (func->getType() == 0))
{
GfxColor stop1;
- ((GfxAxialShading*)shading)->getColor(0.0, &stop1);
+ shading->getColor(0.0, &stop1);
QString stopColor1 = getColor(color_space, &stop1, &shade);
FillGradient.addStop( ScColorEngine::getShadeColor(m_doc->PageColors[stopColor1], m_doc, shade), 0.0, 0.5, 1.0, stopColor1, shade );
GfxColor stop2;
- ((GfxAxialShading*)shading)->getColor(1.0, &stop2);
+ shading->getColor(1.0, &stop2);
QString stopColor2 = getColor(color_space, &stop2, &shade);
FillGradient.addStop( ScColorEngine::getShadeColor(m_doc->PageColors[stopColor2], m_doc, shade), 1.0, 0.5, 1.0, stopColor2, shade );
}
- ((GfxAxialShading*)shading)->getCoords(&GrStartX, &GrStartY, &GrEndX, &GrEndY);
+ shading->getCoords(&GrStartX, &GrStartY, &GrEndX, &GrEndY);
double xmin, ymin, xmax, ymax;
// get the clip region bbox
state->getClipBBox(&xmin, &ymin, &xmax, &ymax);
@@ -1865,34 +1867,36 @@
StitchingFunction *stitchingFunc = (StitchingFunction*)func;
const double *bounds = stitchingFunc->getBounds();
int num_funcs = stitchingFunc->getNumFuncs();
+ double domain_min = stitchingFunc->getDomainMin(0);
+ double domain_max = stitchingFunc->getDomainMax(0);
+ if (fabs(domain_max - domain_min) < 1e-6)
+ {
+ domain_min = 0.0;
+ domain_max = 1.0;
+ }
// Add stops from all the stitched functions
- for ( int i = 0 ; i < num_funcs ; i++ )
+ for (int i = 0 ; i <= num_funcs ; i++)
{
GfxColor temp;
- ((GfxRadialShading*)shading)->getColor(bounds[i], &temp);
+ shading->getColor(bounds[i], &temp);
QString stopColor = getColor(color_space, &temp, &shade);
- FillGradient.addStop( ScColorEngine::getShadeColor(m_doc->PageColors[stopColor], m_doc, shade), bounds[i], 0.5, 1.0, stopColor, shade );
- if (i == num_funcs - 1)
- {
- ((GfxRadialShading*)shading)->getColor(bounds[i+1], &temp);
- QString stopColor = getColor(color_space, &temp, &shade);
- FillGradient.addStop( ScColorEngine::getShadeColor(m_doc->PageColors[stopColor], m_doc, shade), bounds[i+1], 0.5, 1.0, stopColor, shade );
- }
+ double stopPoint = (bounds[i] - domain_min) / (domain_max - domain_min);
+ FillGradient.addStop( ScColorEngine::getShadeColor(m_doc->PageColors[stopColor], m_doc, shade), stopPoint, 0.5, 1.0, stopColor, shade );
}
}
else if ((func->getType() == 2) || (func->getType() == 0))
{
GfxColor stop1;
- ((GfxRadialShading*)shading)->getColor(0.0, &stop1);
+ shading->getColor(0.0, &stop1);
QString stopColor1 = getColor(color_space, &stop1, &shade);
FillGradient.addStop( ScColorEngine::getShadeColor(m_doc->PageColors[stopColor1], m_doc, shade), 0.0, 0.5, 1.0, stopColor1, shade );
GfxColor stop2;
- ((GfxRadialShading*)shading)->getColor(1.0, &stop2);
+ shading->getColor(1.0, &stop2);
QString stopColor2 = getColor(color_space, &stop2, &shade);
FillGradient.addStop( ScColorEngine::getShadeColor(m_doc->PageColors[stopColor2], m_doc, shade), 1.0, 0.5, 1.0, stopColor2, shade );
}
double r0, x1, y1, r1;
- ((GfxRadialShading*)shading)->getCoords(&GrStartX, &GrStartY, &r0, &x1, &y1, &r1);
+ shading->getCoords(&GrStartX, &GrStartY, &r0, &x1, &y1, &r1);
double xmin, ymin, xmax, ymax;
// get the clip region bbox
state->getClipBBox(&xmin, &ymin, &xmax, &ymax);
More information about the scribus-commit
mailing list