Kaydet (Commit) 8b74ad05 authored tarafından Armin Le Grand's avatar Armin Le Grand Kaydeden (comit) Caolán McNamara

WaE and numerical inconsequence in gradient fallback render handling

(cherry picked from commit d8dfdae3)

Conflicts:
	drawinglayer/inc/drawinglayer/primitive2d/svggradientprimitive2d.hxx
	drawinglayer/source/primitive2d/svggradientprimitive2d.cxx

Change-Id: Ifcc795a3474efad1c1bca77088adfef36258ee95
üst a024849c
...@@ -299,7 +299,11 @@ namespace drawinglayer ...@@ -299,7 +299,11 @@ namespace drawinglayer
{ {
} }
bool SvgGradientHelper::equalTo(const SvgGradientHelper& rSvgGradientHelper) const SvgGradientHelper::~SvgGradientHelper()
{
}
bool SvgGradientHelper::operator==(const SvgGradientHelper& rSvgGradientHelper) const
{ {
const SvgGradientHelper& rCompare = static_cast< const SvgGradientHelper& >(rSvgGradientHelper); const SvgGradientHelper& rCompare = static_cast< const SvgGradientHelper& >(rSvgGradientHelper);
...@@ -578,7 +582,7 @@ namespace drawinglayer ...@@ -578,7 +582,7 @@ namespace drawinglayer
{ {
const SvgGradientHelper* pSvgGradientHelper = dynamic_cast< const SvgGradientHelper* >(&rPrimitive); const SvgGradientHelper* pSvgGradientHelper = dynamic_cast< const SvgGradientHelper* >(&rPrimitive);
if(pSvgGradientHelper && SvgGradientHelper::equalTo(*pSvgGradientHelper)) if(pSvgGradientHelper && SvgGradientHelper::operator==(*pSvgGradientHelper))
{ {
const SvgLinearGradientPrimitive2D& rCompare = static_cast< const SvgLinearGradientPrimitive2D& >(rPrimitive); const SvgLinearGradientPrimitive2D& rCompare = static_cast< const SvgLinearGradientPrimitive2D& >(rPrimitive);
...@@ -878,7 +882,7 @@ namespace drawinglayer ...@@ -878,7 +882,7 @@ namespace drawinglayer
{ {
const SvgGradientHelper* pSvgGradientHelper = dynamic_cast< const SvgGradientHelper* >(&rPrimitive); const SvgGradientHelper* pSvgGradientHelper = dynamic_cast< const SvgGradientHelper* >(&rPrimitive);
if(pSvgGradientHelper && SvgGradientHelper::equalTo(*pSvgGradientHelper)) if(pSvgGradientHelper && SvgGradientHelper::operator==(*pSvgGradientHelper))
{ {
const SvgRadialGradientPrimitive2D& rCompare = static_cast< const SvgRadialGradientPrimitive2D& >(rPrimitive); const SvgRadialGradientPrimitive2D& rCompare = static_cast< const SvgRadialGradientPrimitive2D& >(rPrimitive);
......
...@@ -1396,8 +1396,10 @@ namespace drawinglayer ...@@ -1396,8 +1396,10 @@ namespace drawinglayer
{ {
const basegfx::BColor aColorA(maBColorModifierStack.getModifiedColor(rCandidate.getColorA())); const basegfx::BColor aColorA(maBColorModifierStack.getModifiedColor(rCandidate.getColorA()));
const basegfx::BColor aColorB(maBColorModifierStack.getModifiedColor(rCandidate.getColorB())); const basegfx::BColor aColorB(maBColorModifierStack.getModifiedColor(rCandidate.getColorB()));
// calculate discrete unit in WorldCoordinates; use diagonal (1.0, 1.0) and divide by sqrt(2)
const basegfx::B2DVector aDiscreteVector(getViewInformation2D().getInverseObjectToViewTransformation() * basegfx::B2DVector(1.0, 1.0)); const basegfx::B2DVector aDiscreteVector(getViewInformation2D().getInverseObjectToViewTransformation() * basegfx::B2DVector(1.0, 1.0));
const double fDiscreteUnit(std::min(fabs(aDiscreteVector.getX()), fabs(aDiscreteVector.getY()))); const double fDiscreteUnit(aDiscreteVector.getLength() * (1.0 / 1.414213562373));
// use color distance and discrete lengths to calculate step count // use color distance and discrete lengths to calculate step count
const sal_uInt32 nSteps(calculateStepsForSvgGradient(aColorA, aColorB, fDelta, fDiscreteUnit)); const sal_uInt32 nSteps(calculateStepsForSvgGradient(aColorA, aColorB, fDelta, fDiscreteUnit));
...@@ -1439,8 +1441,10 @@ namespace drawinglayer ...@@ -1439,8 +1441,10 @@ namespace drawinglayer
{ {
const basegfx::BColor aColorA(maBColorModifierStack.getModifiedColor(rCandidate.getColorA())); const basegfx::BColor aColorA(maBColorModifierStack.getModifiedColor(rCandidate.getColorA()));
const basegfx::BColor aColorB(maBColorModifierStack.getModifiedColor(rCandidate.getColorB())); const basegfx::BColor aColorB(maBColorModifierStack.getModifiedColor(rCandidate.getColorB()));
// calculate discrete unit in WorldCoordinates; use diagonal (1.0, 1.0) and divide by sqrt(2)
const basegfx::B2DVector aDiscreteVector(getViewInformation2D().getInverseObjectToViewTransformation() * basegfx::B2DVector(1.0, 1.0)); const basegfx::B2DVector aDiscreteVector(getViewInformation2D().getInverseObjectToViewTransformation() * basegfx::B2DVector(1.0, 1.0));
const double fDiscreteUnit(std::min(fabs(aDiscreteVector.getX()), fabs(aDiscreteVector.getY()))); const double fDiscreteUnit(aDiscreteVector.getLength() * (1.0 / 1.414213562373));
// use color distance and discrete lengths to calculate step count // use color distance and discrete lengths to calculate step count
const sal_uInt32 nSteps(calculateStepsForSvgGradient(aColorA, aColorB, fDeltaScale, fDiscreteUnit)); const sal_uInt32 nSteps(calculateStepsForSvgGradient(aColorA, aColorB, fDeltaScale, fDiscreteUnit));
......
...@@ -156,7 +156,7 @@ namespace drawinglayer ...@@ -156,7 +156,7 @@ namespace drawinglayer
const basegfx::B2DPoint& rStart, const basegfx::B2DPoint& rStart,
bool bUseUnitCoordinates, bool bUseUnitCoordinates,
SpreadMethod aSpreadMethod = Spread_pad); SpreadMethod aSpreadMethod = Spread_pad);
virtual ~SvgGradientHelper() {} virtual ~SvgGradientHelper();
/// data read access /// data read access
const basegfx::B2DHomMatrix& getGradientTransform() const { return maGradientTransform; } const basegfx::B2DHomMatrix& getGradientTransform() const { return maGradientTransform; }
...@@ -167,7 +167,7 @@ namespace drawinglayer ...@@ -167,7 +167,7 @@ namespace drawinglayer
SpreadMethod getSpreadMethod() const { return maSpreadMethod; } SpreadMethod getSpreadMethod() const { return maSpreadMethod; }
/// compare operator /// compare operator
bool equalTo(const SvgGradientHelper& rSvgGradientHelper) const; bool operator==(const SvgGradientHelper& rSvgGradientHelper) const;
}; };
} // end of namespace primitive2d } // end of namespace primitive2d
} // end of namespace drawinglayer } // end of namespace drawinglayer
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment