#i105937# Fixed a few remaining gradient glitches

* linear/axial gradient were f*cked up when border and rotation
   was given
 * found another place where drawinglayer was generating helper
   polygons for gradients (vclgradienthelper.cxx), adapted to new
   value ranges
 * fixed build breakage in debug build in oox
 * fixed order of gradient color generation
This commit is contained in:
thb
2010-01-16 02:20:50 +01:00
parent 42c0c069b7
commit a3de1ad361
2 changed files with 12 additions and 18 deletions

View File

@@ -72,31 +72,28 @@ namespace basegfx
fTargetSizeY = fNewY; fTargetSizeY = fNewY;
} }
double fSizeWithoutBorder=0; const double fSizeWithoutBorder=1.0 - fBorder;
double fTranslateY=0;
if( bAxial ) if( bAxial )
{ {
fSizeWithoutBorder = (1.0 - fBorder) * 0.5; o_rGradientInfo.maTextureTransform.scale(1.0, fSizeWithoutBorder * .5);
fTranslateY = 0.5; o_rGradientInfo.maTextureTransform.translate(0.0, 0.5);
} }
else else
{ {
fSizeWithoutBorder = 1.0 - fBorder; if(!fTools::equal(fSizeWithoutBorder, 1.0))
fTranslateY = fBorder; {
o_rGradientInfo.maTextureTransform.scale(1.0, fSizeWithoutBorder);
o_rGradientInfo.maTextureTransform.translate(0.0, fBorder);
}
} }
if(!fTools::equal(fSizeWithoutBorder, 0.0))
o_rGradientInfo.maTextureTransform.scale(1.0, fSizeWithoutBorder);
o_rGradientInfo.maTextureTransform.translate(0.0, fTranslateY);
o_rGradientInfo.maTextureTransform.scale(fTargetSizeX, fTargetSizeY); o_rGradientInfo.maTextureTransform.scale(fTargetSizeX, fTargetSizeY);
// add texture rotate after scale to keep perpendicular angles // add texture rotate after scale to keep perpendicular angles
if(0.0 != fAngle) if(0.0 != fAngle)
{ {
B2DPoint aCenter(0.5, 0.5); const B2DPoint aCenter(0.5*fTargetSizeX,
aCenter *= o_rGradientInfo.maTextureTransform; 0.5*fTargetSizeY);
o_rGradientInfo.maTextureTransform.translate(-aCenter.getX(), -aCenter.getY()); o_rGradientInfo.maTextureTransform.translate(-aCenter.getX(), -aCenter.getY());
o_rGradientInfo.maTextureTransform.rotate(fAngle); o_rGradientInfo.maTextureTransform.rotate(fAngle);
o_rGradientInfo.maTextureTransform.translate(aCenter.getX(), aCenter.getY()); o_rGradientInfo.maTextureTransform.translate(aCenter.getX(), aCenter.getY());
@@ -153,8 +150,7 @@ namespace basegfx
} }
const double fHalfBorder((1.0 - fBorder) * 0.5); const double fHalfBorder((1.0 - fBorder) * 0.5);
if(!fTools::equal(fHalfBorder, 0.0)) o_rGradientInfo.maTextureTransform.scale(fHalfBorder, fHalfBorder);
o_rGradientInfo.maTextureTransform.scale(fHalfBorder, fHalfBorder);
o_rGradientInfo.maTextureTransform.translate(0.5, 0.5); o_rGradientInfo.maTextureTransform.translate(0.5, 0.5);
o_rGradientInfo.maTextureTransform.scale(fTargetSizeX, fTargetSizeY); o_rGradientInfo.maTextureTransform.scale(fTargetSizeX, fTargetSizeY);
@@ -226,8 +222,7 @@ namespace basegfx
} }
const double fHalfBorder((1.0 - fBorder) * 0.5); const double fHalfBorder((1.0 - fBorder) * 0.5);
if(!fTools::equal(fHalfBorder, 0.0)) o_rGradientInfo.maTextureTransform.scale(fHalfBorder, fHalfBorder);
o_rGradientInfo.maTextureTransform.scale(fHalfBorder, fHalfBorder);
o_rGradientInfo.maTextureTransform.translate(0.5, 0.5); o_rGradientInfo.maTextureTransform.translate(0.5, 0.5);
o_rGradientInfo.maTextureTransform.scale(fTargetSizeX, fTargetSizeY); o_rGradientInfo.maTextureTransform.scale(fTargetSizeX, fTargetSizeY);

View File

@@ -7,5 +7,4 @@ cv canvas\source\simplecanvas nmake - all cv_simplecanvas cv_tools cv_inc
cv canvas\source\cairo nmake - all cv_cairo cv_tools cv_inc NULL cv canvas\source\cairo nmake - all cv_cairo cv_tools cv_inc NULL
cv canvas\source\directx nmake - w cv_directx cv_tools cv_inc NULL cv canvas\source\directx nmake - w cv_directx cv_tools cv_inc NULL
cv canvas\source\null nmake - all cv_null cv_tools cv_inc NULL cv canvas\source\null nmake - all cv_null cv_tools cv_inc NULL
cv canvas\source\java nmake - all cv_java cv_inc NULL
cv canvas\source\factory nmake - all cv_factory cv_inc NULL cv canvas\source\factory nmake - all cv_factory cv_inc NULL