36 double getRandomColorRange()
59 rBColor.
setRed(getRandomColorRange());
60 rBColor.
setGreen(getRandomColorRange());
61 rBColor.
setBlue(getRandomColorRange());
75 sal_uInt32 nRequestedSteps,
78 : maDefinitionRange(rDefinitionRange)
79 , mnRequestedSteps(nRequestedSteps)
80 , mnColorStops(rColorStops)
82 , maLastColorStopRange()
105 sal_uInt32 nRequestedSteps,
120 if(rDefinitionRange != rOutputRange)
149 if (bPenultimateUsed)
163 aPattern.
scale(0.5, 0.5);
174 const double fOffsetStart(cs_l->getStopOffset());
175 const double fOffsetEnd(cs_r->getStopOffset());
189 const double fStripeWidth((fOffsetEnd - fOffsetStart) / nSteps);
197 const sal_uInt32 nStartInnerLoop(cs_l ==
mnColorStops.begin() ? 1 : 0);
199 for (sal_uInt32 innerLoop(nStartInnerLoop); innerLoop < nSteps; innerLoop++)
202 const double fPos(fOffsetStart + (fStripeWidth * innerLoop));
206 double fHeight(1.0 - fPos);
215 aNew.
scale(1.0, fHeight);
225 if (bPenultimateUsed)
253 sal_uInt32 nRequestedSteps,
273 if(rDefinitionRange != rOutputRange)
301 if (bPenultimateUsed)
311 aPattern.
scale(0.5, 1.0);
322 const double fOffsetStart(cs_l->getStopOffset());
323 const double fOffsetEnd(cs_r->getStopOffset());
337 const double fStripeWidth((fOffsetEnd - fOffsetStart) / nSteps);
340 const sal_uInt32 nStartInnerLoop(cs_l ==
mnColorStops.begin() ? 1 : 0);
342 for (sal_uInt32 innerLoop(nStartInnerLoop); innerLoop < nSteps; innerLoop++)
345 const double fPos(fOffsetStart + (fStripeWidth * innerLoop));
349 aNew.
scale(1.0, 1.0 - fPos);
358 if (bPenultimateUsed)
389 sal_uInt32 nRequestedSteps,
421 if (bPenultimateUsed)
431 const double fOffsetStart(cs_l->getStopOffset());
432 const double fOffsetEnd(cs_r->getStopOffset());
445 const double fStripeWidth((fOffsetEnd - fOffsetStart) / nSteps);
448 const sal_uInt32 nStartInnerLoop(cs_l ==
mnColorStops.begin() ? 1 : 0);
450 for (sal_uInt32 innerLoop(nStartInnerLoop); innerLoop < nSteps; innerLoop++)
453 const double fSize(1.0 - (fOffsetStart + (fStripeWidth * innerLoop)));
462 if (bPenultimateUsed)
490 sal_uInt32 nRequestedSteps,
524 if (bPenultimateUsed)
532 const bool bMTO(fAR > 1.0);
538 const double fOffsetStart(cs_l->getStopOffset());
539 const double fOffsetEnd(cs_r->getStopOffset());
552 const double fStripeWidth((fOffsetEnd - fOffsetStart) / nSteps);
555 const sal_uInt32 nStartInnerLoop(cs_l ==
mnColorStops.begin() ? 1 : 0);
557 for (sal_uInt32 innerLoop(nStartInnerLoop); innerLoop < nSteps; innerLoop++)
560 const double fSize(fOffsetStart + (fStripeWidth * innerLoop));
566 1.0 - (bMTO ? fSize / fAR : fSize),
567 1.0 - (bMTO ? fSize : fSize * fAR)),
572 if (bPenultimateUsed)
600 sal_uInt32 nRequestedSteps,
634 if (bPenultimateUsed)
644 const double fOffsetStart(cs_l->getStopOffset());
645 const double fOffsetEnd(cs_r->getStopOffset());
658 const double fStripeWidth((fOffsetEnd - fOffsetStart) / nSteps);
661 const sal_uInt32 nStartInnerLoop(cs_l ==
mnColorStops.begin() ? 1 : 0);
663 for (sal_uInt32 innerLoop(nStartInnerLoop); innerLoop < nSteps; innerLoop++)
666 const double fSize(1.0 - (fOffsetStart + (fStripeWidth * innerLoop)));
675 if (bPenultimateUsed)
703 sal_uInt32 nRequestedSteps,
737 if (bPenultimateUsed)
745 const bool bMTO(fAR > 1.0);
751 const double fOffsetStart(cs_l->getStopOffset());
752 const double fOffsetEnd(cs_r->getStopOffset());
765 const double fStripeWidth((fOffsetEnd - fOffsetStart) / nSteps);
768 const sal_uInt32 nStartInnerLoop(cs_l ==
mnColorStops.begin() ? 1 : 0);
770 for (sal_uInt32 innerLoop(nStartInnerLoop); innerLoop < nSteps; innerLoop++)
773 const double fSize(fOffsetStart + (fStripeWidth * innerLoop));
779 1.0 - (bMTO ? fSize / fAR : fSize),
780 1.0 - (bMTO ? fSize : fSize * fAR)),
785 if (bPenultimateUsed)
816 : maOutputRange(rOutputRange),
820 mbDefinitionRangeEqualsOutputRange(rDefinitionRange == rOutputRange)
822 double fTargetSizeX(rDefinitionRange.
getWidth());
823 double fTargetSizeY(rDefinitionRange.
getHeight());
824 double fTargetOffsetX(rDefinitionRange.
getMinX());
825 double fTargetOffsetY(rDefinitionRange.
getMinY());
832 const double fAbsCos(fabs(cos(fAngle)));
833 const double fAbsSin(fabs(sin(fAngle)));
834 const double fNewX(fTargetSizeX * fAbsCos + fTargetSizeY * fAbsSin);
835 const double fNewY(fTargetSizeY * fAbsCos + fTargetSizeX * fAbsSin);
836 fTargetOffsetX -= (fNewX - fTargetSizeX) / 2.0;
837 fTargetOffsetY -= (fNewY - fTargetSizeY) / 2.0;
838 fTargetSizeX = fNewX;
839 fTargetSizeY = fNewY;
859 const double fSteps((0.0 != fDistance) ? fTargetSizeY / fDistance : 10.0);
887 const double fOffset(
mfDistance *
static_cast<double>(
a));
889 aNew.
set(1, 2, fOffset);
905 sal_uInt32 nMaxIntegerSteps(std::min(nNeededIntegerSteps, sal_uInt32(10000)));
907 while(fStart < aBackUnitRange.
getMaxY() && nMaxIntegerSteps)
919 aNew.
set(1, 2, fStart);
939 double fX = rUV.
getX();
940 double fY = rUV.
getY();
943 rMat.
get(1, 0) * fX +
944 rMat.
get(1, 1) * fY +
967 mfOffsetX(
std::clamp(fOffsetX, 0.0, 1.0)),
968 mfOffsetY(
std::clamp(fOffsetY, 0.0, 1.0))
992 sal_Int32 nTiles = 0;
1029 const sal_Int32 nDiff(
static_cast<sal_Int32
>(floor(fStartX / fWidth)) + 1);
1032 fStartX -= nDiff * fWidth;
1037 const sal_Int32 nDiff(
static_cast<sal_Int32
>(floor(-fStartX / fWidth)));
1040 fStartX += nDiff * fWidth;
1045 const sal_Int32 nDiff(
static_cast<sal_Int32
>(floor(fStartY / fHeight)) + 1);
1048 fStartY -= nDiff * fHeight;
1053 const sal_Int32 nDiff(
static_cast<sal_Int32
>(floor(-fStartY / fHeight)));
1056 fStartY += nDiff * fHeight;
1063 for(
double fPosY((nPosX % 2) ? fStartY - fHeight + (
mfOffsetY * fHeight) : fStartY);
1065 aFunc(fPosX, fPosY);
1072 for(
double fPosX((nPosY % 2) ? fStartX - fWidth + (
mfOffsetX * fWidth) : fStartX);
1074 aFunc(fPosX, fPosY);
void set(sal_uInt16 nRow, sal_uInt16 nColumn, double fValue)
void translate(double fX, double fY)
double get(sal_uInt16 nRow, sal_uInt16 nColumn) const
void scale(double fX, double fY)
BASEGFX_DLLPUBLIC void transform(const B2DHomMatrix &rMatrix)
bool checkPenultimate() const
BColor getInterpolatedBColor(double fPosition, sal_uInt32 nRequestedSteps, BColorStopRange &rLastColorStopRange) const
void setBlue(double fNew)
void setGreen(double fNew)
GeoTexSvxGradientAxial(const basegfx::B2DRange &rDefinitionRange, const basegfx::B2DRange &rOutputRange, sal_uInt32 nRequestedSteps, const basegfx::BColorStops &rColorStops, double fBorder, double fAngle)
virtual void modifyBColor(const basegfx::B2DPoint &rUV, basegfx::BColor &rBColor, double &rfOpacity) const override
virtual ~GeoTexSvxGradientAxial() override
virtual void appendTransformationsAndColors(std::function< void(const basegfx::B2DHomMatrix &rMatrix, const basegfx::BColor &rColor)> aCallback) override
GeoTexSvxGradientElliptical(const basegfx::B2DRange &rDefinitionRange, sal_uInt32 nRequestedSteps, const basegfx::BColorStops &rColorStops, double fBorder, double fOffsetX, double fOffsetY, double fAngle)
virtual void modifyBColor(const basegfx::B2DPoint &rUV, basegfx::BColor &rBColor, double &rfOpacity) const override
virtual ~GeoTexSvxGradientElliptical() override
virtual void appendTransformationsAndColors(std::function< void(const basegfx::B2DHomMatrix &rMatrix, const basegfx::BColor &rColor)> aCallback) override
virtual void appendTransformationsAndColors(std::function< void(const basegfx::B2DHomMatrix &rMatrix, const basegfx::BColor &rColor)> aCallback) override
virtual ~GeoTexSvxGradientLinear() override
virtual void modifyBColor(const basegfx::B2DPoint &rUV, basegfx::BColor &rBColor, double &rfOpacity) const override
GeoTexSvxGradientLinear(const basegfx::B2DRange &rDefinitionRange, const basegfx::B2DRange &rOutputRange, sal_uInt32 nRequestedSteps, const basegfx::BColorStops &rColorStops, double fBorder, double fAngle)
virtual ~GeoTexSvxGradientRadial() override
virtual void appendTransformationsAndColors(std::function< void(const basegfx::B2DHomMatrix &rMatrix, const basegfx::BColor &rColor)> aCallback) override
GeoTexSvxGradientRadial(const basegfx::B2DRange &rDefinitionRange, sal_uInt32 nRequestedSteps, const basegfx::BColorStops &rColorStops, double fBorder, double fOffsetX, double fOffsetY)
virtual void modifyBColor(const basegfx::B2DPoint &rUV, basegfx::BColor &rBColor, double &rfOpacity) const override
GeoTexSvxGradientRect(const basegfx::B2DRange &rDefinitionRange, sal_uInt32 nRequestedSteps, const basegfx::BColorStops &rColorStops, double fBorder, double fOffsetX, double fOffsetY, double fAngle)
virtual void appendTransformationsAndColors(std::function< void(const basegfx::B2DHomMatrix &rMatrix, const basegfx::BColor &rColor)> aCallback) override
virtual void modifyBColor(const basegfx::B2DPoint &rUV, basegfx::BColor &rBColor, double &rfOpacity) const override
virtual ~GeoTexSvxGradientRect() override
virtual void appendTransformationsAndColors(std::function< void(const basegfx::B2DHomMatrix &rMatrix, const basegfx::BColor &rColor)> aCallback) override
virtual void modifyBColor(const basegfx::B2DPoint &rUV, basegfx::BColor &rBColor, double &rfOpacity) const override
GeoTexSvxGradientSquare(const basegfx::B2DRange &rDefinitionRange, sal_uInt32 nRequestedSteps, const basegfx::BColorStops &rColorStops, double fBorder, double fOffsetX, double fOffsetY, double fAngle)
virtual ~GeoTexSvxGradientSquare() override
virtual ~GeoTexSvxGradient() override
sal_uInt32 mnRequestedSteps
basegfx::BColorStops::BColorStopRange maLastColorStopRange
basegfx::B2DRange maDefinitionRange
virtual bool operator==(const GeoTexSvx &rGeoTexSvx) const override
basegfx::ODFGradientInfo maGradientInfo
basegfx::BColorStops mnColorStops
GeoTexSvxGradient(const basegfx::B2DRange &rDefinitionRange, sal_uInt32 nRequestedSteps, const basegfx::BColorStops &rColorStops, double fBorder)
basegfx::B2DHomMatrix maBackTextureTransform
virtual bool operator==(const GeoTexSvx &rGeoTexSvx) const override
void appendTransformations(::std::vector< basegfx::B2DHomMatrix > &rMatrices)
virtual ~GeoTexSvxHatch() override
bool mbDefinitionRangeEqualsOutputRange
GeoTexSvxHatch(const basegfx::B2DRange &rDefinitionRange, const basegfx::B2DRange &rOutputRange, double fDistance, double fAngle)
double getDistanceToHatch(const basegfx::B2DPoint &rUV) const
basegfx::B2DHomMatrix maTextureTransform
basegfx::B2DRange maOutputRange
const basegfx::B2DHomMatrix & getBackTextureTransform() const
sal_uInt32 getNumberOfTiles() const
GeoTexSvxTiled(const basegfx::B2DRange &rRange, double fOffsetX=0.0, double fOffsetY=0.0)
void appendTransformations(::std::vector< basegfx::B2DHomMatrix > &rMatrices) const
virtual ~GeoTexSvxTiled() override
basegfx::B2DRange maRange
virtual bool operator==(const GeoTexSvx &rGeoTexSvx) const override
void iterateTiles(std::function< void(double fPosX, double fPosY)> aFunc) const
virtual bool operator==(const GeoTexSvx &rGeoTexSvx) const
virtual void modifyOpacity(const basegfx::B2DPoint &rUV, double &rfOpacity) const
virtual void modifyBColor(const basegfx::B2DPoint &rUV, basegfx::BColor &rBColor, double &rfOpacity) const
ODFGradientInfo createRadialODFGradientInfo(const B2DRange &rTargetArea, const B2DVector &rOffset, sal_uInt32 nRequestedSteps, double fBorder)
B2DHomMatrix createScaleTranslateB2DHomMatrix(double fScaleX, double fScaleY, double fTranslateX, double fTranslateY)
double getAxialGradientAlpha(const B2DPoint &rUV, const ODFGradientInfo &rGradInfo)
ODFGradientInfo createAxialODFGradientInfo(const B2DRange &rTargetArea, sal_uInt32 nRequestedSteps, double fBorder, double fAngle)
double getLinearGradientAlpha(const B2DPoint &rUV, const ODFGradientInfo &rGradInfo)
B2DHomMatrix createRotateAroundPoint(double fPointX, double fPointY, double fRadiant)
double getRectangularGradientAlpha(const B2DPoint &rUV, const ODFGradientInfo &rGradInfo)
double getEllipticalGradientAlpha(const B2DPoint &rUV, const ODFGradientInfo &rGradInfo)
double getSquareGradientAlpha(const B2DPoint &rUV, const ODFGradientInfo &rGradInfo)
B2DHomMatrix createScaleB2DHomMatrix(double fScaleX, double fScaleY)
ODFGradientInfo createLinearODFGradientInfo(const B2DRange &rTargetArea, sal_uInt32 nRequestedSteps, double fBorder, double fAngle)
double getRadialGradientAlpha(const B2DPoint &rUV, const ODFGradientInfo &rGradInfo)
ODFGradientInfo createSquareODFGradientInfo(const B2DRange &rTargetArea, const B2DVector &rOffset, sal_uInt32 nRequestedSteps, double fBorder, double fAngle)
ODFGradientInfo createEllipticalODFGradientInfo(const B2DRange &rTargetArea, const B2DVector &rOffset, sal_uInt32 nRequestedSteps, double fBorder, double fAngle)
ODFGradientInfo createRectangularODFGradientInfo(const B2DRange &rTargetArea, const B2DVector &rOffset, sal_uInt32 nRequestedSteps, double fBorder, double fAngle)
sal_uInt32 calculateNumberOfSteps(sal_uInt32 nRequestedSteps, const BColor &rStart, const BColor &rEnd)
double snapToNearestMultiple(double v, const double fStep)
B2IRange fround(const B2DRange &rRange)
double uniform_real_distribution(double a=0.0, double b=1.0)
HSLColor interpolate(const HSLColor &rFrom, const HSLColor &rTo, double t, bool bCCW)