diff options
-rw-r--r-- | canvas/source/vcl/canvashelper_texturefill.cxx | 23 | ||||
-rw-r--r-- | cppcanvas/source/mtfrenderer/implrenderer.cxx | 12 |
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 ); |