summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--canvas/source/vcl/canvashelper_texturefill.cxx23
-rw-r--r--cppcanvas/source/mtfrenderer/implrenderer.cxx12
2 files changed, 30 insertions, 5 deletions
diff --git a/canvas/source/vcl/canvashelper_texturefill.cxx b/canvas/source/vcl/canvashelper_texturefill.cxx
index 6127aa8f401b..571a8c4fc5a3 100644
--- a/canvas/source/vcl/canvashelper_texturefill.cxx
+++ b/canvas/source/vcl/canvashelper_texturefill.cxx
@@ -892,9 +892,9 @@ namespace vclcanvas
}
else if( textures[0].Bitmap.is() )
{
- OSL_ENSURE( textures[0].RepeatModeX == rendering::TexturingMode::REPEAT &&
- textures[0].RepeatModeY == rendering::TexturingMode::REPEAT,
- "CanvasHelper::fillTexturedPolyPolygon(): VCL canvas cannot currently clamp textures." );
+// OSL_ENSURE( textures[0].RepeatModeX == rendering::TexturingMode::REPEAT &&
+// textures[0].RepeatModeY == rendering::TexturingMode::REPEAT,
+// "CanvasHelper::fillTexturedPolyPolygon(): VCL canvas cannot currently clamp textures." );
const geometry::IntegerSize2D aBmpSize( textures[0].Bitmap->getSize() );
@@ -970,6 +970,23 @@ namespace vclcanvas
aLocalState );
}
}
+ else if ( textures[0].RepeatModeX == rendering::TexturingMode::CLAMP &&
+ textures[0].RepeatModeY == rendering::TexturingMode::CLAMP )
+ {
+ rendering::RenderState aLocalState( renderState );
+ ::canvas::tools::appendToRenderState(aLocalState,
+ aTextureTransform);
+ ::basegfx::B2DHomMatrix aScaleCorrection;
+ aScaleCorrection.scale( 1.0/aBmpSize.Width,
+ 1.0/aBmpSize.Height );
+ ::canvas::tools::appendToRenderState(aLocalState,
+ aScaleCorrection);
+
+ return drawBitmap( pCanvas,
+ textures[0].Bitmap,
+ viewState,
+ aLocalState );
+ }
else
{
// No easy mapping to drawBitmap() - calculate
diff --git a/cppcanvas/source/mtfrenderer/implrenderer.cxx b/cppcanvas/source/mtfrenderer/implrenderer.cxx
index acf858536f9b..6269cfb11ef4 100644
--- a/cppcanvas/source/mtfrenderer/implrenderer.cxx
+++ b/cppcanvas/source/mtfrenderer/implrenderer.cxx
@@ -1870,8 +1870,16 @@ namespace cppcanvas
::vcl::unotools::xBitmapFromBitmapEx(
rCanvas->getUNOCanvas()->getDevice(),
aBmpEx );
- aTexture.RepeatModeX = rendering::TexturingMode::REPEAT;
- aTexture.RepeatModeY = rendering::TexturingMode::REPEAT;
+ if( aFill.isTiling() )
+ {
+ aTexture.RepeatModeX = rendering::TexturingMode::REPEAT;
+ aTexture.RepeatModeY = rendering::TexturingMode::REPEAT;
+ }
+ else
+ {
+ aTexture.RepeatModeX = rendering::TexturingMode::CLAMP;
+ aTexture.RepeatModeY = rendering::TexturingMode::CLAMP;
+ }
::PolyPolygon aPath;
aFill.getPath( aPath );