summaryrefslogtreecommitdiff
path: root/cppcanvas
diff options
context:
space:
mode:
Diffstat (limited to 'cppcanvas')
-rw-r--r--cppcanvas/CppunitTest_cppcanvas_emfplus.mk1
-rw-r--r--cppcanvas/CppunitTest_cppcanvas_test.mk3
-rw-r--r--cppcanvas/Module_cppcanvas.mk2
-rw-r--r--cppcanvas/inc/pch/precompiled_cppcanvas.hxx1
-rw-r--r--cppcanvas/qa/extras/emfplus/emfplus.cxx37
-rw-r--r--cppcanvas/qa/unit/test.cxx185
-rw-r--r--cppcanvas/source/inc/canvasgraphichelper.hxx2
-rw-r--r--cppcanvas/source/inc/implrenderer.hxx10
-rw-r--r--cppcanvas/source/mtfrenderer/cachedprimitivebase.cxx5
-rw-r--r--cppcanvas/source/mtfrenderer/cachedprimitivebase.hxx2
-rw-r--r--cppcanvas/source/mtfrenderer/implrenderer.cxx86
-rw-r--r--cppcanvas/source/mtfrenderer/lineaction.cxx7
-rw-r--r--cppcanvas/source/mtfrenderer/mtftools.cxx2
-rw-r--r--cppcanvas/source/mtfrenderer/pointaction.cxx7
-rw-r--r--cppcanvas/source/mtfrenderer/polypolyaction.cxx8
-rw-r--r--cppcanvas/source/mtfrenderer/textaction.cxx103
-rw-r--r--cppcanvas/source/mtfrenderer/textaction.hxx8
-rw-r--r--cppcanvas/source/mtfrenderer/textlineshelper.cxx7
-rw-r--r--cppcanvas/source/mtfrenderer/textlineshelper.hxx2
-rw-r--r--cppcanvas/source/mtfrenderer/transparencygroupaction.cxx97
-rw-r--r--cppcanvas/source/mtfrenderer/transparencygroupaction.hxx9
-rw-r--r--cppcanvas/source/tools/canvasgraphichelper.cxx6
-rw-r--r--cppcanvas/source/wrapper/implcanvas.cxx6
-rw-r--r--cppcanvas/source/wrapper/implcanvas.hxx2
-rw-r--r--cppcanvas/source/wrapper/implpolypolygon.cxx5
-rw-r--r--cppcanvas/source/wrapper/implpolypolygon.hxx4
-rw-r--r--cppcanvas/source/wrapper/implsprite.cxx10
-rw-r--r--cppcanvas/source/wrapper/implsprite.hxx6
28 files changed, 408 insertions, 215 deletions
diff --git a/cppcanvas/CppunitTest_cppcanvas_emfplus.mk b/cppcanvas/CppunitTest_cppcanvas_emfplus.mk
index ee47d8af0a18..7e692bdd53e0 100644
--- a/cppcanvas/CppunitTest_cppcanvas_emfplus.mk
+++ b/cppcanvas/CppunitTest_cppcanvas_emfplus.mk
@@ -25,6 +25,7 @@ $(eval $(call gb_CppunitTest_use_libraries,cppcanvas_emfplus, \
test \
tl \
unotest \
+ utl \
vcl \
))
diff --git a/cppcanvas/CppunitTest_cppcanvas_test.mk b/cppcanvas/CppunitTest_cppcanvas_test.mk
index e6e7a39d3bae..9e9a1c9eaf60 100644
--- a/cppcanvas/CppunitTest_cppcanvas_test.mk
+++ b/cppcanvas/CppunitTest_cppcanvas_test.mk
@@ -39,7 +39,8 @@ $(eval $(call gb_CppunitTest_use_ure,cppcanvas_test))
$(eval $(call gb_CppunitTest_use_vcl,cppcanvas_test))
$(eval $(call gb_CppunitTest_use_components,cppcanvas_test,\
- canvas/source/cairo/cairocanvas \
+ $(if $(ENABLE_CAIRO_CANVAS),canvas/source/cairo/cairocanvas) \
+ canvas/source/vcl/vclcanvas \
canvas/source/factory/canvasfactory \
configmgr/source/configmgr \
i18npool/util/i18npool \
diff --git a/cppcanvas/Module_cppcanvas.mk b/cppcanvas/Module_cppcanvas.mk
index b341bc00d60b..2522c0a02007 100644
--- a/cppcanvas/Module_cppcanvas.mk
+++ b/cppcanvas/Module_cppcanvas.mk
@@ -25,11 +25,11 @@ $(eval $(call gb_Module_add_targets,cppcanvas,\
))
# FIXME: should generalize these ...
-ifeq ($(ENABLE_CAIRO_CANVAS),TRUE)
$(eval $(call gb_Module_add_check_targets,cppcanvas,\
CppunitTest_cppcanvas_test \
))
+ifeq ($(ENABLE_CAIRO_CANVAS),TRUE)
ifneq ($(DISPLAY),)
$(eval $(call gb_Module_add_slowcheck_targets,cppcanvas,\
CppunitTest_cppcanvas_emfplus \
diff --git a/cppcanvas/inc/pch/precompiled_cppcanvas.hxx b/cppcanvas/inc/pch/precompiled_cppcanvas.hxx
index 44c0bb3db4c4..408286c2ac96 100644
--- a/cppcanvas/inc/pch/precompiled_cppcanvas.hxx
+++ b/cppcanvas/inc/pch/precompiled_cppcanvas.hxx
@@ -77,7 +77,6 @@
#include <vcl/dllapi.h>
#include <vcl/mapmod.hxx>
#include <vcl/region.hxx>
-#include <vcl/scopedbitmapaccess.hxx>
#include <vcl/vclenum.hxx>
#endif // PCH_LEVEL >= 2
#if PCH_LEVEL >= 3
diff --git a/cppcanvas/qa/extras/emfplus/emfplus.cxx b/cppcanvas/qa/extras/emfplus/emfplus.cxx
index 6866310b5508..1ba179404f28 100644
--- a/cppcanvas/qa/extras/emfplus/emfplus.cxx
+++ b/cppcanvas/qa/extras/emfplus/emfplus.cxx
@@ -7,15 +7,12 @@
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
-#include <com/sun/star/frame/Desktop.hpp>
+#include <test/unoapi_test.hxx>
-#include <comphelper/processfactory.hxx>
-#include <sfx2/app.hxx>
#include <sfx2/objsh.hxx>
#include <sfx2/sfxbasemodel.hxx>
-#include <test/unoapi_test.hxx>
#include <vcl/BitmapReadAccess.hxx>
-#include <vcl/pngwrite.hxx>
+#include <vcl/filter/PngImageWriter.hxx>
#include <vcl/gdimtf.hxx>
#include <tools/stream.hxx>
@@ -29,29 +26,9 @@ public:
{
}
- virtual void setUp() override
- {
- UnoApiTest::setUp();
- mxDesktop.set(
- frame::Desktop::create(comphelper::getComponentContext(getMultiServiceFactory())));
- SfxApplication::GetOrCreate();
- };
-
- virtual void tearDown() override
- {
- if (mxComponent.is())
- {
- closeDocument(mxComponent);
- mxComponent->dispose();
- }
- UnoApiTest::tearDown();
- };
-
Bitmap load(const char* pName)
{
- OUString aFileURL;
- createFileURL(OUString::createFromAscii(pName), aFileURL);
- mxComponent = loadFromDesktop(aFileURL, "com.sun.star.drawing.DrawingDocument");
+ loadFromFile(OUString::createFromAscii(pName));
SfxBaseModel* pModel = dynamic_cast<SfxBaseModel*>(mxComponent.get());
CPPUNIT_ASSERT(pModel);
SfxObjectShell* pShell = pModel->GetObjectShell();
@@ -63,20 +40,18 @@ public:
if (pEnv)
{
SvFileStream aStream(OUString::fromUtf8(pEnv), StreamMode::WRITE);
- vcl::PNGWriter aWriter(aResultBitmap);
- CPPUNIT_ASSERT(aWriter.Write(aStream));
+ vcl::PngImageWriter aWriter(aStream);
+ CPPUNIT_ASSERT(aWriter.write(aResultBitmap));
}
return aResultBitmap.GetBitmap();
}
-
- uno::Reference<lang::XComponent> mxComponent;
};
CPPUNIT_TEST_FIXTURE(Test, testFdo77229)
{
Bitmap aBitmap = load("fdo77229.emf");
- Bitmap::ScopedReadAccess pAccess(aBitmap);
+ BitmapScopedReadAccess pAccess(aBitmap);
// The green star was missing.
Color aColor(pAccess->GetPixel(284, 280));
CPPUNIT_ASSERT_EQUAL(sal_uInt8(0), aColor.GetRed());
diff --git a/cppcanvas/qa/unit/test.cxx b/cppcanvas/qa/unit/test.cxx
index 303eecd86a16..ad278f10834b 100644
--- a/cppcanvas/qa/unit/test.cxx
+++ b/cppcanvas/qa/unit/test.cxx
@@ -7,65 +7,99 @@
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
-#include <sal/config.h>
+#include <config_cairo_canvas.h>
-#include <test/bootstrapfixture.hxx>
+#include <sal/config.h>
#include <vcl/wrkwin.hxx>
#include <vcl/canvastools.hxx>
+#include <vcl/virdev.hxx>
+#include <vcl/gdimtf.hxx>
+#include <vcl/metaact.hxx>
#include <com/sun/star/rendering/XBitmap.hpp>
#include <com/sun/star/rendering/XCanvas.hpp>
#include <com/sun/star/rendering/XBitmapCanvas.hpp>
+#include <cppcanvas/vclfactory.hxx>
+
using namespace ::com::sun::star;
-class CanvasTest : public test::BootstrapFixture
+static std::ostream& operator<<(std::ostream& rStream, const KernArray& rArray)
{
-public:
- CanvasTest() : BootstrapFixture(true, false) {}
+ if (rArray.empty())
+ {
+ rStream << "{ }";
+ return rStream;
+ }
- void testComposite();
+ rStream << "{ ";
+ for (size_t i = 0; i < rArray.size() - 1; i++)
+ rStream << rArray[i] << ", ";
+ rStream << rArray.back();
+ rStream << " }";
+ return rStream;
+}
+
+static std::ostream& operator<<(std::ostream& rStream, const std::vector<sal_Bool>& rVec)
+{
+ if (rVec.empty())
+ {
+ rStream << "{ }";
+ return rStream;
+ }
+
+ rStream << "{ ";
+ for (size_t i = 0; i < rVec.size() - 1; i++)
+ rStream << std::boolalpha << bool(rVec[i]) << ", ";
+ rStream << std::boolalpha << bool(rVec.back());
+ rStream << " }";
+ return rStream;
+}
- CPPUNIT_TEST_SUITE(CanvasTest);
- CPPUNIT_TEST(testComposite);
- CPPUNIT_TEST_SUITE_END();
+#include <test/bootstrapfixture.hxx>
+
+class CanvasTest : public test::BootstrapFixture
+{
+public:
+ CanvasTest()
+ : BootstrapFixture(true, false)
+ {
+ }
};
-void CanvasTest::testComposite()
+CPPUNIT_TEST_FIXTURE(CanvasTest, testComposite)
{
-#ifdef LINUX
- ScopedVclPtrInstance<WorkWindow> pWin( nullptr, WB_STDWORK );
+ ScopedVclPtrInstance<WorkWindow> pWin(nullptr, WB_STDWORK);
- uno::Reference<rendering::XCanvas> xCanvas = pWin->GetOutDev()->GetCanvas ();
- if( !xCanvas.is() )
- return; // can't get a canvas working at all - truly headless ?
+ uno::Reference<rendering::XCanvas> xCanvas = pWin->GetOutDev()->GetCanvas();
+ CPPUNIT_ASSERT(xCanvas.is());
// a huge canvas ...
- Size aSize (1, 1);
- uno::Reference<rendering::XBitmap> xBitmap = xCanvas->getDevice ()->createCompatibleAlphaBitmap(
- vcl::unotools::integerSize2DFromSize( aSize ) );
- CPPUNIT_ASSERT( xBitmap.is() );
+ Size aSize(1, 1);
+ uno::Reference<rendering::XBitmap> xBitmap = xCanvas->getDevice()->createCompatibleAlphaBitmap(
+ vcl::unotools::integerSize2DFromSize(aSize));
+ CPPUNIT_ASSERT(xBitmap.is());
- uno::Reference< rendering::XBitmapCanvas > xBitmapCanvas( xBitmap, uno::UNO_QUERY );
- CPPUNIT_ASSERT( xBitmapCanvas.is() );
+ uno::Reference<rendering::XBitmapCanvas> xBitmapCanvas(xBitmap, uno::UNO_QUERY);
+ CPPUNIT_ASSERT(xBitmapCanvas.is());
BitmapEx aBitmapEx;
{
// clear the canvas and basic sanity check ...
xBitmapCanvas->clear();
- CPPUNIT_ASSERT( aBitmapEx.Create( xBitmapCanvas, aSize ) );
- CPPUNIT_ASSERT( aBitmapEx.IsAlpha() );
- CPPUNIT_ASSERT( !aBitmapEx.GetAlpha().IsEmpty() );
+ CPPUNIT_ASSERT(aBitmapEx.Create(xBitmapCanvas, aSize));
+ CPPUNIT_ASSERT(aBitmapEx.IsAlpha());
+ CPPUNIT_ASSERT(!aBitmapEx.GetAlphaMask().IsEmpty());
}
{
// render something
rendering::RenderState aDefaultState;
- uno::Sequence< double > aRedTransparent{ 1.0, // R
- 0.0, // G
- 0.0, // B
- 0.5 }; // A
+ uno::Sequence<double> aRedTransparent{ 1.0, // R
+ 0.0, // G
+ 0.0, // B
+ 0.5 }; // A
aDefaultState.DeviceColor = aRedTransparent;
#if 0
// words fail me to describe the sheer beauty of allocating a UNO
@@ -74,11 +108,100 @@ void CanvasTest::testComposite()
XCachedPrimitive fillPolyPolygon( [in] XPolyPolygon2D xPolyPolygon, [in] ViewState aViewState, [in] RenderState aRenderState )
#endif
}
-
-#endif
}
-CPPUNIT_TEST_SUITE_REGISTRATION(CanvasTest);
+CPPUNIT_TEST_FIXTURE(CanvasTest, testTdf155810)
+{
+ GDIMetaFile aInputMetaFile, aOutputMetaFile;
+ KernArray aDXArray;
+ std::vector<sal_Bool> aKashidaArray;
+
+ // First create a meta file with a text array action that has Kashida adjustments.
+ {
+ ScopedVclPtrInstance<VirtualDevice> pDev;
+
+ vcl::Font aFont(u"Noto Naskh Arabic"_ustr, u"Regular"_ustr, Size(0, 72));
+ pDev->SetFont(aFont);
+
+ aInputMetaFile.Record(pDev.get());
+
+ OUString aText(u"خالد"_ustr);
+ pDev->GetTextArray(aText, &aDXArray);
+
+ auto nKashida = 200;
+ aDXArray.set(0, aDXArray[0] + nKashida);
+ aDXArray.set(2, aDXArray[2] + nKashida);
+ aKashidaArray = { true, false, true, false };
+
+ pDev->DrawTextArray(Point(0, 0), aText, aDXArray, aKashidaArray, 0, -1);
+
+ aInputMetaFile.Stop();
+ }
+
+ // Then draw it using canvas
+ {
+ ScopedVclPtrInstance<VirtualDevice> pDev;
+
+ aOutputMetaFile.Record(pDev.get());
+
+ auto xCanvas = pDev->GetCanvas();
+ CPPUNIT_ASSERT(xCanvas.is());
+ auto pCanvas = cppcanvas::VCLFactory::createCanvas(xCanvas);
+
+ auto pRenderer = cppcanvas::VCLFactory::createRenderer(pCanvas, aInputMetaFile, {});
+ pRenderer->draw();
+
+ aOutputMetaFile.Stop();
+ }
+
+ // Then check that the text array drawn by the canvas renderer didn’t loose
+ // the Kashida insertion positions.
+ {
+ auto pInputAction = aInputMetaFile.GetAction(aInputMetaFile.GetActionSize() - 1);
+ auto pOutputAction = aOutputMetaFile.GetAction(aOutputMetaFile.GetActionSize() - 2);
+
+ CPPUNIT_ASSERT_EQUAL(MetaActionType::TEXTARRAY, pInputAction->GetType());
+ CPPUNIT_ASSERT_EQUAL(pInputAction->GetType(), pOutputAction->GetType());
+
+ MetaTextArrayAction* pInputTextAction = static_cast<MetaTextArrayAction*>(pInputAction);
+ MetaTextArrayAction* pOutputTextAction = static_cast<MetaTextArrayAction*>(pOutputAction);
+
+ CPPUNIT_ASSERT_EQUAL(pInputTextAction->GetDXArray(), aDXArray);
+ CPPUNIT_ASSERT_EQUAL(pInputTextAction->GetDXArray(), pOutputTextAction->GetDXArray());
+
+ CPPUNIT_ASSERT_EQUAL(pInputTextAction->GetKashidaArray(), aKashidaArray);
+ CPPUNIT_ASSERT_EQUAL(pInputTextAction->GetKashidaArray(),
+ pOutputTextAction->GetKashidaArray());
+ }
+
+ // Now, test drawSubset
+ {
+ ScopedVclPtrInstance<VirtualDevice> pDev;
+
+ aOutputMetaFile.Clear();
+ aOutputMetaFile.Record(pDev.get());
+
+ auto xCanvas = pDev->GetCanvas();
+ CPPUNIT_ASSERT(xCanvas.is());
+ auto pCanvas = cppcanvas::VCLFactory::createCanvas(xCanvas);
+
+ auto pRenderer = cppcanvas::VCLFactory::createRenderer(pCanvas, aInputMetaFile, {});
+ pRenderer->drawSubset(1, 3);
+
+ aOutputMetaFile.Stop();
+ }
+
+ {
+ auto pOutputAction = aOutputMetaFile.GetAction(aOutputMetaFile.GetActionSize() - 2);
+
+ CPPUNIT_ASSERT_EQUAL(MetaActionType::TEXTARRAY, pOutputAction->GetType());
+
+ MetaTextArrayAction* pOutputTextAction = static_cast<MetaTextArrayAction*>(pOutputAction);
+ std::vector<sal_Bool> aSubsetKashidaArray({ false, true });
+
+ CPPUNIT_ASSERT_EQUAL(aSubsetKashidaArray, pOutputTextAction->GetKashidaArray());
+ }
+}
CPPUNIT_PLUGIN_IMPLEMENT();
diff --git a/cppcanvas/source/inc/canvasgraphichelper.hxx b/cppcanvas/source/inc/canvasgraphichelper.hxx
index 0716199ddbeb..03f6b91b6f46 100644
--- a/cppcanvas/source/inc/canvasgraphichelper.hxx
+++ b/cppcanvas/source/inc/canvasgraphichelper.hxx
@@ -41,7 +41,7 @@ namespace cppcanvas::internal
class CanvasGraphicHelper : public virtual CanvasGraphic
{
public:
- CanvasGraphicHelper( const CanvasSharedPtr& rParentCanvas );
+ CanvasGraphicHelper( CanvasSharedPtr xParentCanvas );
// CanvasGraphic implementation
virtual void setTransformation( const ::basegfx::B2DHomMatrix& rMatrix ) override;
diff --git a/cppcanvas/source/inc/implrenderer.hxx b/cppcanvas/source/inc/implrenderer.hxx
index 4e39cea723dc..1f367280598f 100644
--- a/cppcanvas/source/inc/implrenderer.hxx
+++ b/cppcanvas/source/inc/implrenderer.hxx
@@ -22,8 +22,8 @@
#include <sal/config.h>
#include <sal/types.h>
-#include <o3tl/span.hxx>
#include <tools/stream.hxx>
+#include <utility>
#include <vcl/metaactiontypes.hxx>
#include <cppcanvas/renderer.hxx>
#include <cppcanvas/canvas.hxx>
@@ -35,6 +35,7 @@
#include <osl/diagnose.h>
#include <memory>
+#include <span>
#include <vector>
class GDIMetaFile;
@@ -137,9 +138,9 @@ namespace cppcanvas::internal
// public, since some functors need it, too.
struct MtfAction
{
- MtfAction( const std::shared_ptr<Action>& rAction,
+ MtfAction( std::shared_ptr<Action> xAction,
sal_Int32 nOrigIndex ) :
- mpAction( rAction ),
+ mpAction(std::move( xAction )),
mnOrigIndex( nOrigIndex )
{
}
@@ -193,7 +194,8 @@ namespace cppcanvas::internal
const OUString& rString,
int nIndex,
int nLength,
- o3tl::span<const sal_Int32> pCharWidths,
+ KernArraySpan pCharWidths,
+ std::span<const sal_Bool> pKashidaArray,
const ActionFactoryParameters& rParms,
bool bSubsettable );
diff --git a/cppcanvas/source/mtfrenderer/cachedprimitivebase.cxx b/cppcanvas/source/mtfrenderer/cachedprimitivebase.cxx
index 8001ae8733f5..e5664cabfc1d 100644
--- a/cppcanvas/source/mtfrenderer/cachedprimitivebase.cxx
+++ b/cppcanvas/source/mtfrenderer/cachedprimitivebase.cxx
@@ -26,14 +26,15 @@
#include "cachedprimitivebase.hxx"
#include <sal/log.hxx>
+#include <utility>
using namespace ::com::sun::star;
namespace cppcanvas::internal
{
- CachedPrimitiveBase::CachedPrimitiveBase( const CanvasSharedPtr& rCanvas,
+ CachedPrimitiveBase::CachedPrimitiveBase( CanvasSharedPtr xCanvas,
bool bOnlyRedrawWithSameTransform ) :
- mpCanvas( rCanvas ),
+ mpCanvas(std::move( xCanvas )),
mbOnlyRedrawWithSameTransform( bOnlyRedrawWithSameTransform )
{
// TODO(F2): also store last view transform, and refuse to
diff --git a/cppcanvas/source/mtfrenderer/cachedprimitivebase.hxx b/cppcanvas/source/mtfrenderer/cachedprimitivebase.hxx
index 2f32d887b515..48a31db5d294 100644
--- a/cppcanvas/source/mtfrenderer/cachedprimitivebase.hxx
+++ b/cppcanvas/source/mtfrenderer/cachedprimitivebase.hxx
@@ -57,7 +57,7 @@ namespace cppcanvas::internal
same. Otherwise, repaints are always performed via the
cached primitive.
*/
- CachedPrimitiveBase( const CanvasSharedPtr& rCanvas,
+ CachedPrimitiveBase( CanvasSharedPtr xCanvas,
bool bOnlyRedrawWithSameTransform );
CachedPrimitiveBase(const CachedPrimitiveBase&) = delete;
diff --git a/cppcanvas/source/mtfrenderer/implrenderer.cxx b/cppcanvas/source/mtfrenderer/implrenderer.cxx
index f7fe8db551f0..d3cfe793f45f 100644
--- a/cppcanvas/source/mtfrenderer/implrenderer.cxx
+++ b/cppcanvas/source/mtfrenderer/implrenderer.cxx
@@ -17,8 +17,9 @@
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
*/
-#include <tools/diagnose_ex.h>
+#include <comphelper/diagnose_ex.hxx>
#include <tools/debug.hxx>
+#include <utility>
#include <vcl/svapp.hxx>
#include <comphelper/propertysequence.hxx>
#include <comphelper/propertyvalue.hxx>
@@ -66,7 +67,6 @@
#include "polypolyaction.hxx"
#include "textaction.hxx"
#include "transparencygroupaction.hxx"
-#include <utility>
#include <vector>
#include <algorithm>
#include <memory>
@@ -208,9 +208,9 @@ namespace
aWhite, rMaskColor
};
- Bitmap aMask( rBitmap.CreateMask( aWhite ));
+ AlphaMask aMask( rBitmap.CreateAlphaMask( aWhite ));
Bitmap aSolid( rBitmap.GetSizePixel(),
- vcl::PixelFormat::N1_BPP,
+ vcl::PixelFormat::N8_BPP,
&aBiLevelPalette );
aSolid.Erase( rMaskColor );
@@ -549,7 +549,7 @@ namespace cppcanvas::internal
uno::Sequence< uno::Sequence < double > > aColors;
uno::Sequence< double > aStops;
- if( rGradient.GetStyle() == GradientStyle::Axial )
+ if( rGradient.GetStyle() == css::awt::GradientStyle_AXIAL )
{
aStops = { 0.0, 0.5, 1.0 };
aColors = { aEndColor, aStartColor, aEndColor };
@@ -575,7 +575,7 @@ namespace cppcanvas::internal
OUString aGradientService;
switch( rGradient.GetStyle() )
{
- case GradientStyle::Linear:
+ case css::awt::GradientStyle_LINEAR:
aGradInfo = basegfx::utils::createLinearODFGradientInfo(
aBounds,
nSteps,
@@ -587,7 +587,7 @@ namespace cppcanvas::internal
aGradientService = "LinearGradient";
break;
- case GradientStyle::Axial:
+ case css::awt::GradientStyle_AXIAL:
{
// Adapt the border so that it is suitable
// for the axial gradient. An axial
@@ -621,7 +621,7 @@ namespace cppcanvas::internal
break;
}
- case GradientStyle::Radial:
+ case css::awt::GradientStyle_RADIAL:
aGradInfo = basegfx::utils::createRadialODFGradientInfo(
aBounds,
aOffset,
@@ -630,7 +630,7 @@ namespace cppcanvas::internal
aGradientService = "EllipticalGradient";
break;
- case GradientStyle::Elliptical:
+ case css::awt::GradientStyle_ELLIPTICAL:
aGradInfo = basegfx::utils::createEllipticalODFGradientInfo(
aBounds,
aOffset,
@@ -640,7 +640,7 @@ namespace cppcanvas::internal
aGradientService = "EllipticalGradient";
break;
- case GradientStyle::Square:
+ case css::awt::GradientStyle_SQUARE:
aGradInfo = basegfx::utils::createSquareODFGradientInfo(
aBounds,
aOffset,
@@ -650,7 +650,7 @@ namespace cppcanvas::internal
aGradientService = "RectangularGradient";
break;
- case GradientStyle::Rect:
+ case css::awt::GradientStyle_RECT:
aGradInfo = basegfx::utils::createRectangularODFGradientInfo(
aBounds,
aOffset,
@@ -825,7 +825,7 @@ namespace cppcanvas::internal
else
aFontMatrix.m11 *= nScaleY / nScaleX;
}
- aFontRequest.CellSize = (rState.mapModeTransform * vcl::unotools::b2DSizeFromSize(rFontSizeLog)).getY();
+ aFontRequest.CellSize = (rState.mapModeTransform * vcl::unotools::b2DSizeFromSize(rFontSizeLog)).getHeight();
if (rFont.GetEmphasisMark() != FontEmphasisMark::NONE)
{
@@ -846,7 +846,8 @@ namespace cppcanvas::internal
const OUString& rString,
int nIndex,
int nLength,
- o3tl::span<const sal_Int32> pCharWidths,
+ KernArraySpan pCharWidths,
+ std::span<const sal_Bool> pKashidaArray,
const ActionFactoryParameters& rParms,
bool bSubsettableActions )
{
@@ -943,6 +944,7 @@ namespace cppcanvas::internal
nIndex,
nLength,
pCharWidths,
+ pKashidaArray,
rParms.mrVDev,
rParms.mrCanvas,
rState,
@@ -963,7 +965,7 @@ namespace cppcanvas::internal
pChars[3]=pChars[2]=pChars[1]=pChars[0];
::tools::Long nStrikeoutWidth = (rParms.mrVDev.GetTextWidth(
- OUString(pChars, SAL_N_ELEMENTS(pChars))) + 2) / 4;
+ OUString(pChars, std::size(pChars))) + 2) / 4;
if( nStrikeoutWidth <= 0 )
nStrikeoutWidth = 1;
@@ -984,16 +986,16 @@ namespace cppcanvas::internal
{
::tools::Long nInterval = ( nWidth - nStrikeoutWidth * nLen ) / nLen;
nStrikeoutWidth += nInterval;
- std::vector<sal_Int32> aStrikeoutCharWidths(nLen);
+ KernArray aStrikeoutCharWidths;
for ( int i = 0;i<nLen; i++)
{
- aStrikeoutCharWidths[i] = nStrikeoutWidth;
+ aStrikeoutCharWidths.push_back(nStrikeoutWidth);
}
for ( int i = 1;i< nLen; i++ )
{
- aStrikeoutCharWidths[ i ] += aStrikeoutCharWidths[ i-1 ];
+ aStrikeoutCharWidths.adjust(i, aStrikeoutCharWidths[i - 1]);
}
pStrikeoutTextAction =
@@ -1008,6 +1010,7 @@ namespace cppcanvas::internal
0/*nStartPos*/,
nLen,
aStrikeoutCharWidths,
+ pKashidaArray,
rParms.mrVDev,
rParms.mrCanvas,
rState,
@@ -1492,7 +1495,7 @@ namespace cppcanvas::internal
// TODO(Q2): define and use appropriate enumeration types
rState.textReliefStyle = rFont.GetRelief();
rState.textOverlineStyle = static_cast<sal_Int8>(rFont.GetOverline());
- rState.textUnderlineStyle = rParms.maFontUnderline ?
+ rState.textUnderlineStyle = rParms.maFontUnderline.has_value() ?
(*rParms.maFontUnderline ? sal_Int8(LINESTYLE_SINGLE) : sal_Int8(LINESTYLE_NONE)) :
static_cast<sal_Int8>(rFont.GetUnderline());
rState.textStrikeoutStyle = static_cast<sal_Int8>(rFont.GetStrikeout());
@@ -1542,7 +1545,7 @@ namespace cppcanvas::internal
case MetaActionType::GRADIENT:
{
MetaGradientAction* pGradAct = static_cast<MetaGradientAction*>(pCurrAct);
- createGradientAction( ::tools::Polygon( pGradAct->GetRect() ),
+ createGradientAction( ::tools::PolyPolygon( pGradAct->GetRect() ),
pGradAct->GetGradient(),
rFactoryParms,
true,
@@ -2137,10 +2140,8 @@ namespace cppcanvas::internal
std::shared_ptr<Action> pBmpAction(
internal::BitmapActionFactory::createBitmapAction(
BitmapEx(pAct->GetBitmap()),
- rStates.getState().mapModeTransform *
- vcl::unotools::b2DPointFromPoint( pAct->GetPoint() ),
- rStates.getState().mapModeTransform *
- vcl::unotools::b2DSizeFromSize( pAct->GetSize() ),
+ rStates.getState().mapModeTransform * vcl::unotools::b2DPointFromPoint( pAct->GetPoint() ),
+ rStates.getState().mapModeTransform * vcl::unotools::b2DVectorFromSize( pAct->GetSize() ),
rCanvas,
rStates.getState() ) );
@@ -2172,7 +2173,7 @@ namespace cppcanvas::internal
rStates.getState().mapModeTransform *
vcl::unotools::b2DPointFromPoint( pAct->GetDestPoint() ),
rStates.getState().mapModeTransform *
- vcl::unotools::b2DSizeFromSize( pAct->GetDestSize() ),
+ vcl::unotools::b2DVectorFromSize( pAct->GetDestSize() ),
rCanvas,
rStates.getState() ) );
@@ -2220,7 +2221,7 @@ namespace cppcanvas::internal
rStates.getState().mapModeTransform *
vcl::unotools::b2DPointFromPoint( pAct->GetPoint() ),
rStates.getState().mapModeTransform *
- vcl::unotools::b2DSizeFromSize( pAct->GetSize() ),
+ vcl::unotools::b2DVectorFromSize( pAct->GetSize() ),
rCanvas,
rStates.getState() ) );
@@ -2252,7 +2253,7 @@ namespace cppcanvas::internal
rStates.getState().mapModeTransform *
vcl::unotools::b2DPointFromPoint( pAct->GetDestPoint() ),
rStates.getState().mapModeTransform *
- vcl::unotools::b2DSizeFromSize( pAct->GetDestSize() ),
+ vcl::unotools::b2DVectorFromSize( pAct->GetDestSize() ),
rCanvas,
rStates.getState() ) );
@@ -2312,7 +2313,7 @@ namespace cppcanvas::internal
rStates.getState().mapModeTransform *
vcl::unotools::b2DPointFromPoint( pAct->GetPoint() ),
rStates.getState().mapModeTransform *
- vcl::unotools::b2DSizeFromSize( pAct->GetSize() ),
+ vcl::unotools::b2DVectorFromSize( pAct->GetSize() ),
rCanvas,
rStates.getState() ) );
@@ -2349,7 +2350,7 @@ namespace cppcanvas::internal
rStates.getState().mapModeTransform *
vcl::unotools::b2DPointFromPoint( pAct->GetDestPoint() ),
rStates.getState().mapModeTransform *
- vcl::unotools::b2DSizeFromSize( pAct->GetDestSize() ),
+ vcl::unotools::b2DVectorFromSize( pAct->GetDestSize() ),
rCanvas,
rStates.getState() ) );
@@ -2406,12 +2407,11 @@ namespace cppcanvas::internal
{
MetaFloatTransparentAction* pAct = static_cast<MetaFloatTransparentAction*>(pCurrAct);
- internal::MtfAutoPtr pMtf(
+ std::unique_ptr< GDIMetaFile > pMtf(
new ::GDIMetaFile( pAct->GetGDIMetaFile() ) );
// TODO(P2): Use native canvas gradients here (saves a lot of UNO calls)
- internal::GradientAutoPtr pGradient(
- new Gradient( pAct->GetGradient() ) );
+ std::optional< Gradient > pGradient( pAct->GetGradient() );
DBG_TESTSOLARMUTEX();
@@ -2422,7 +2422,7 @@ namespace cppcanvas::internal
rStates.getState().mapModeTransform *
vcl::unotools::b2DPointFromPoint( pAct->GetPoint() ),
rStates.getState().mapModeTransform *
- vcl::unotools::b2DSizeFromSize( pAct->GetSize() ),
+ vcl::unotools::b2DVectorFromSize( pAct->GetSize() ),
rCanvas,
rStates.getState() ) );
@@ -2453,6 +2453,7 @@ namespace cppcanvas::internal
pAct->GetIndex(),
nLen,
{},
+ {},
rFactoryParms,
bSubsettableActions );
}
@@ -2474,6 +2475,7 @@ namespace cppcanvas::internal
pAct->GetIndex(),
nLen,
pAct->GetDXArray(),
+ pAct->GetKashidaArray(),
rFactoryParms,
bSubsettableActions );
}
@@ -2496,8 +2498,8 @@ namespace cppcanvas::internal
rState.mapModeTransform *
::basegfx::B2DPoint(
vcl::unotools::b2DPointFromPoint(pAct->GetStartPoint()) +
- vcl::unotools::b2DSizeFromSize(aBaselineOffset)),
- aSize.getX(),
+ vcl::unotools::b2DVectorFromSize(aBaselineOffset)),
+ aSize.getWidth(),
tools::createTextLineInfo( rVDev,
rState )),
rCanvas,
@@ -2556,7 +2558,7 @@ namespace cppcanvas::internal
// generating a DX array, and uniformly
// distributing the excess/insufficient width
// to every logical character.
- std::vector<sal_Int32> aDXArray;
+ KernArray aDXArray;
rVDev.GetTextArray( pAct->GetText(), &aDXArray,
pAct->GetIndex(), pAct->GetLen() );
@@ -2564,7 +2566,6 @@ namespace cppcanvas::internal
const sal_Int32 nWidthDifference( pAct->GetWidth() - aDXArray[ nLen-1 ] );
// Last entry of pDXArray contains total width of the text
- sal_Int32* p = aDXArray.data();
for (sal_Int32 i = 1; i <= nLen; ++i)
{
// calc ratio for every array entry, to
@@ -2573,7 +2574,7 @@ namespace cppcanvas::internal
// entry represents the 'end' position of
// the corresponding character, thus, we
// let i run from 1 to nLen.
- *p++ += i * nWidthDifference / nLen;
+ aDXArray.adjust(i - 1, i * nWidthDifference / nLen);
}
createTextAction(
@@ -2582,6 +2583,7 @@ namespace cppcanvas::internal
pAct->GetIndex(),
nLen,
aDXArray,
+ {},
rFactoryParms,
bSubsettableActions );
}
@@ -2607,8 +2609,8 @@ namespace cppcanvas::internal
class ActionRenderer
{
public:
- explicit ActionRenderer( const ::basegfx::B2DHomMatrix& rTransformation ) :
- maTransformation( rTransformation ),
+ explicit ActionRenderer( ::basegfx::B2DHomMatrix aTransformation ) :
+ maTransformation(std::move( aTransformation )),
mbRet( true )
{
}
@@ -2642,8 +2644,8 @@ namespace cppcanvas::internal
class AreaQuery
{
public:
- explicit AreaQuery( const ::basegfx::B2DHomMatrix& rTransformation ) :
- maTransformation( rTransformation )
+ explicit AreaQuery( ::basegfx::B2DHomMatrix aTransformation ) :
+ maTransformation(std::move( aTransformation ))
{
}
@@ -2930,7 +2932,7 @@ namespace cppcanvas::internal
if( rParams.maFontName ||
rParams.maFontWeight ||
rParams.maFontLetterForm ||
- rParams.maFontUnderline )
+ rParams.maFontUnderline.has_value() )
{
::cppcanvas::internal::OutDevState& rState = aStateStack.getState();
diff --git a/cppcanvas/source/mtfrenderer/lineaction.cxx b/cppcanvas/source/mtfrenderer/lineaction.cxx
index 9c8734fdf450..4bc55d929958 100644
--- a/cppcanvas/source/mtfrenderer/lineaction.cxx
+++ b/cppcanvas/source/mtfrenderer/lineaction.cxx
@@ -30,6 +30,7 @@
#include <sal/log.hxx>
#include <cppcanvas/canvas.hxx>
+#include <utility>
#include "mtftools.hxx"
@@ -45,7 +46,7 @@ namespace cppcanvas::internal
public:
LineAction( const ::basegfx::B2DPoint&,
const ::basegfx::B2DPoint&,
- const CanvasSharedPtr&,
+ CanvasSharedPtr,
const OutDevState& );
LineAction(const LineAction&) = delete;
@@ -70,11 +71,11 @@ namespace cppcanvas::internal
LineAction::LineAction( const ::basegfx::B2DPoint& rStartPoint,
const ::basegfx::B2DPoint& rEndPoint,
- const CanvasSharedPtr& rCanvas,
+ CanvasSharedPtr xCanvas,
const OutDevState& rState ) :
maStartPoint( rStartPoint ),
maEndPoint( rEndPoint ),
- mpCanvas( rCanvas )
+ mpCanvas(std::move( xCanvas ))
{
tools::initRenderState(maState,rState);
maState.DeviceColor = rState.lineColor;
diff --git a/cppcanvas/source/mtfrenderer/mtftools.cxx b/cppcanvas/source/mtfrenderer/mtftools.cxx
index 0181fa78ec9c..94a83da70c19 100644
--- a/cppcanvas/source/mtfrenderer/mtftools.cxx
+++ b/cppcanvas/source/mtfrenderer/mtftools.cxx
@@ -18,7 +18,7 @@
*/
-#include <tools/diagnose_ex.h>
+#include <comphelper/diagnose_ex.hxx>
#include <com/sun/star/rendering/XCanvas.hpp>
#include <basegfx/utils/canvastools.hxx>
#include <basegfx/polygon/b2dpolygontools.hxx>
diff --git a/cppcanvas/source/mtfrenderer/pointaction.cxx b/cppcanvas/source/mtfrenderer/pointaction.cxx
index 72550db5480b..449f4b9b4249 100644
--- a/cppcanvas/source/mtfrenderer/pointaction.cxx
+++ b/cppcanvas/source/mtfrenderer/pointaction.cxx
@@ -22,6 +22,7 @@
#include <sal/types.h>
#include <sal/log.hxx>
+#include <utility>
#include <vcl/canvastools.hxx>
#include <basegfx/range/b2drange.hxx>
@@ -45,7 +46,7 @@ namespace cppcanvas::internal
{
public:
PointAction( const ::basegfx::B2DPoint&,
- const CanvasSharedPtr&,
+ CanvasSharedPtr,
const OutDevState& );
PointAction( const ::basegfx::B2DPoint&,
const CanvasSharedPtr&,
@@ -72,10 +73,10 @@ namespace cppcanvas::internal
};
PointAction::PointAction( const ::basegfx::B2DPoint& rPoint,
- const CanvasSharedPtr& rCanvas,
+ CanvasSharedPtr xCanvas,
const OutDevState& rState ) :
maPoint( rPoint ),
- mpCanvas( rCanvas )
+ mpCanvas(std::move( xCanvas ))
{
tools::initRenderState(maState,rState);
maState.DeviceColor = rState.lineColor;
diff --git a/cppcanvas/source/mtfrenderer/polypolyaction.cxx b/cppcanvas/source/mtfrenderer/polypolyaction.cxx
index e191e512ec61..955727a31309 100644
--- a/cppcanvas/source/mtfrenderer/polypolyaction.cxx
+++ b/cppcanvas/source/mtfrenderer/polypolyaction.cxx
@@ -28,11 +28,13 @@
#include <basegfx/polygon/b2dpolypolygontools.hxx>
#include <basegfx/matrix/b2dhommatrix.hxx>
#include <canvas/canvastools.hxx>
+#include <osl/diagnose.h>
#include <sal/log.hxx>
#include "cachedprimitivebase.hxx"
#include "polypolyaction.hxx"
#include <outdevstate.hxx>
+#include <utility>
#include "mtftools.hxx"
@@ -337,7 +339,7 @@ namespace cppcanvas::internal
StrokedPolyPolyAction( const ::basegfx::B2DPolyPolygon& rPoly,
const CanvasSharedPtr& rCanvas,
const OutDevState& rState,
- const rendering::StrokeAttributes& rStrokeAttributes );
+ rendering::StrokeAttributes aStrokeAttributes );
virtual bool renderSubset( const ::basegfx::B2DHomMatrix& rTransformation,
const Subset& rSubset ) const override;
@@ -363,12 +365,12 @@ namespace cppcanvas::internal
StrokedPolyPolyAction::StrokedPolyPolyAction( const ::basegfx::B2DPolyPolygon& rPolyPoly,
const CanvasSharedPtr& rCanvas,
const OutDevState& rState,
- const rendering::StrokeAttributes& rStrokeAttributes ) :
+ rendering::StrokeAttributes aStrokeAttributes ) :
CachedPrimitiveBase( rCanvas, false ),
mxPolyPoly( ::basegfx::unotools::xPolyPolygonFromB2DPolyPolygon( rCanvas->getUNOCanvas()->getDevice(), rPolyPoly) ),
maBounds( ::basegfx::utils::getRange(rPolyPoly) ),
mpCanvas( rCanvas ),
- maStrokeAttributes( rStrokeAttributes )
+ maStrokeAttributes(std::move( aStrokeAttributes ))
{
tools::initRenderState(maState,rState);
maState.DeviceColor = rState.lineColor;
diff --git a/cppcanvas/source/mtfrenderer/textaction.cxx b/cppcanvas/source/mtfrenderer/textaction.cxx
index 091dde1c456c..2f2148c44dbd 100644
--- a/cppcanvas/source/mtfrenderer/textaction.cxx
+++ b/cppcanvas/source/mtfrenderer/textaction.cxx
@@ -18,7 +18,7 @@
*/
-#include <tools/diagnose_ex.h>
+#include <comphelper/diagnose_ex.hxx>
#include <com/sun/star/rendering/PathCapType.hpp>
#include <com/sun/star/rendering/PathJoinType.hpp>
@@ -33,6 +33,7 @@
#include <basegfx/matrix/b2dhommatrixtools.hxx>
#include <tools/gen.hxx>
+#include <utility>
#include <vcl/canvastools.hxx>
#include <vcl/virdev.hxx>
@@ -157,7 +158,7 @@ namespace cppcanvas::internal
rLayoutWidth = *(std::max_element(rOffsets.begin(), rOffsets.end()));
}
- uno::Sequence< double > setupDXArray( o3tl::span<const sal_Int32> rCharWidths,
+ uno::Sequence< double > setupDXArray( KernArraySpan rCharWidths,
sal_Int32 nLen,
const OutDevState& rState )
{
@@ -169,11 +170,10 @@ namespace cppcanvas::internal
// array, by circumventing integer-based
// OutDev-mapping
const double nScale( rState.mapModeTransform.get(0,0) );
- sal_Int32 const * pCharWidths = rCharWidths.data();
for( int i = 0; i < nLen; ++i )
{
// TODO(F2): use correct scale direction
- *pOutputWidths++ = *pCharWidths++ * nScale;
+ *pOutputWidths++ = rCharWidths[i] * nScale;
}
return aCharWidthSeq;
@@ -187,7 +187,7 @@ namespace cppcanvas::internal
{
// no external DX array given, create one from given
// string
- std::vector<sal_Int32> aCharWidths;
+ KernArray aCharWidths;
rVDev.GetTextArray( rText, &aCharWidths, nStartPos, nLen );
@@ -229,6 +229,7 @@ namespace cppcanvas::internal
sal_Int32 nStartPos,
sal_Int32 nLen,
const uno::Sequence< double >& rOffsets,
+ const uno::Sequence< sal_Bool >& rKashidas,
const CanvasSharedPtr& rCanvas,
const OutDevState& rState,
const ::basegfx::B2DHomMatrix* pTextTransform )
@@ -255,6 +256,7 @@ namespace cppcanvas::internal
"::cppcanvas::internal::initArrayAction(): Invalid font" );
o_rTextLayout->applyLogicalAdvancements( rOffsets );
+ o_rTextLayout->applyKashidaPositions( rKashidas );
}
@@ -268,7 +270,7 @@ namespace cppcanvas::internal
static_cast<sal_uInt16>(rStringContext.Length) ),
0 );
- return (rState.mapModeTransform * aSize).getX();
+ return (rState.mapModeTransform * aSize).getWidth();
}
uno::Sequence< double >
@@ -457,6 +459,10 @@ namespace cppcanvas::internal
io_rTextLayout,
nLayoutWidth,
rSubset ) );
+ uno::Sequence< sal_Bool > aOrigKashidaPositions(io_rTextLayout->queryKashidaPositions());
+ uno::Sequence< sal_Bool > aKashidaPositions(aOrigKashidaPositions.getArray() + rSubset.mnSubsetBegin,
+ rSubset.mnSubsetEnd - rSubset.mnSubsetBegin);
+ xTextLayout->applyKashidaPositions(aKashidaPositions);
}
io_rTextLayout = xTextLayout;
@@ -503,8 +509,8 @@ namespace cppcanvas::internal
rendering::RenderState aShadowState( rRenderState );
::basegfx::B2DHomMatrix aTranslate;
- aTranslate.translate( rShadowOffset.getX(),
- rShadowOffset.getY() );
+ aTranslate.translate(rShadowOffset.getWidth(),
+ rShadowOffset.getHeight());
::canvas::tools::appendToRenderState(aShadowState, aTranslate);
@@ -521,8 +527,8 @@ namespace cppcanvas::internal
rendering::RenderState aReliefState( rRenderState );
::basegfx::B2DHomMatrix aTranslate;
- aTranslate.translate( rReliefOffset.getX(),
- rReliefOffset.getY() );
+ aTranslate.translate(rReliefOffset.getWidth(),
+ rReliefOffset.getHeight());
::canvas::tools::appendToRenderState(aReliefState, aTranslate);
@@ -555,15 +561,15 @@ namespace cppcanvas::internal
// TODO(Q3): Provide this functionality at the B2DRange
::basegfx::B2DRange aTotalBounds( aBounds );
aTotalBounds.expand(
- ::basegfx::B2DRange( aBounds.getMinX() + rReliefOffset.getX(),
- aBounds.getMinY() + rReliefOffset.getY(),
- aBounds.getMaxX() + rReliefOffset.getX(),
- aBounds.getMaxY() + rReliefOffset.getY() ) );
+ ::basegfx::B2DRange( aBounds.getMinX() + rReliefOffset.getWidth(),
+ aBounds.getMinY() + rReliefOffset.getHeight(),
+ aBounds.getMaxX() + rReliefOffset.getWidth(),
+ aBounds.getMaxY() + rReliefOffset.getHeight() ) );
aTotalBounds.expand(
- ::basegfx::B2DRange( aBounds.getMinX() + rShadowOffset.getX(),
- aBounds.getMinY() + rShadowOffset.getY(),
- aBounds.getMaxX() + rShadowOffset.getX(),
- aBounds.getMaxY() + rShadowOffset.getY() ) );
+ ::basegfx::B2DRange( aBounds.getMinX() + rShadowOffset.getWidth(),
+ aBounds.getMinY() + rShadowOffset.getHeight(),
+ aBounds.getMaxX() + rShadowOffset.getWidth(),
+ aBounds.getMaxY() + rShadowOffset.getHeight() ) );
return tools::calcDevicePixelBounds( aTotalBounds,
rViewState,
@@ -579,8 +585,8 @@ namespace cppcanvas::internal
const ::basegfx::B2DPolyPolygon aPoly(
tools::createTextLinesPolyPolygon( 0.0, nLineWidth,
rLineInfo ) );
-
- o_rOverallSize = ::basegfx::utils::getRange( aPoly ).getRange();
+ auto aRange = basegfx::utils::getRange( aPoly ).getRange();
+ o_rOverallSize = basegfx::B2DSize(aRange.getX(), aRange.getY());
o_rTextLines = ::basegfx::unotools::xPolyPolygonFromB2DPolyPolygon(
rCanvas->getUNOCanvas()->getDevice(),
@@ -979,8 +985,8 @@ namespace cppcanvas::internal
return calcEffectTextBounds( ::basegfx::unotools::b2DRectangleFromRealRectangle2D(
queryTextBounds() ),
::basegfx::B2DRange( 0,0,
- maLinesOverallSize.getX(),
- maLinesOverallSize.getY() ),
+ maLinesOverallSize.getWidth(),
+ maLinesOverallSize.getHeight() ),
maReliefOffset,
maShadowOffset,
aLocalState,
@@ -1017,6 +1023,7 @@ namespace cppcanvas::internal
sal_Int32 nStartPos,
sal_Int32 nLen,
const uno::Sequence< double >& rOffsets,
+ const uno::Sequence< sal_Bool >& rKashidas,
const CanvasSharedPtr& rCanvas,
const OutDevState& rState );
@@ -1025,6 +1032,7 @@ namespace cppcanvas::internal
sal_Int32 nStartPos,
sal_Int32 nLen,
const uno::Sequence< double >& rOffsets,
+ const uno::Sequence< sal_Bool >& rKashidas,
const CanvasSharedPtr& rCanvas,
const OutDevState& rState,
const ::basegfx::B2DHomMatrix& rTextTransform );
@@ -1061,6 +1069,7 @@ namespace cppcanvas::internal
sal_Int32 nStartPos,
sal_Int32 nLen,
const uno::Sequence< double >& rOffsets,
+ const uno::Sequence< sal_Bool >& rKashidas,
const CanvasSharedPtr& rCanvas,
const OutDevState& rState ) :
mpCanvas( rCanvas )
@@ -1074,6 +1083,7 @@ namespace cppcanvas::internal
nStartPos,
nLen,
rOffsets,
+ rKashidas,
rCanvas,
rState, nullptr );
}
@@ -1083,6 +1093,7 @@ namespace cppcanvas::internal
sal_Int32 nStartPos,
sal_Int32 nLen,
const uno::Sequence< double >& rOffsets,
+ const uno::Sequence< sal_Bool >& rKashidas,
const CanvasSharedPtr& rCanvas,
const OutDevState& rState,
const ::basegfx::B2DHomMatrix& rTextTransform ) :
@@ -1097,6 +1108,7 @@ namespace cppcanvas::internal
nStartPos,
nLen,
rOffsets,
+ rKashidas,
rCanvas,
rState,
&rTextTransform );
@@ -1206,6 +1218,7 @@ namespace cppcanvas::internal
sal_Int32 nStartPos,
sal_Int32 nLen,
const uno::Sequence< double >& rOffsets,
+ const uno::Sequence< sal_Bool >& rKashidas,
VirtualDevice const & rVDev,
const CanvasSharedPtr& rCanvas,
const OutDevState& rState );
@@ -1219,6 +1232,7 @@ namespace cppcanvas::internal
sal_Int32 nStartPos,
sal_Int32 nLen,
const uno::Sequence< double >& rOffsets,
+ const uno::Sequence< sal_Bool >& rKashidas,
VirtualDevice const & rVDev,
const CanvasSharedPtr& rCanvas,
const OutDevState& rState,
@@ -1273,6 +1287,7 @@ namespace cppcanvas::internal
sal_Int32 nStartPos,
sal_Int32 nLen,
const uno::Sequence< double >& rOffsets,
+ const uno::Sequence< sal_Bool >& rKashidas,
VirtualDevice const & rVDev,
const CanvasSharedPtr& rCanvas,
const OutDevState& rState ) :
@@ -1296,6 +1311,7 @@ namespace cppcanvas::internal
nStartPos,
nLen,
rOffsets,
+ rKashidas,
rCanvas,
rState, nullptr );
}
@@ -1310,6 +1326,7 @@ namespace cppcanvas::internal
sal_Int32 nStartPos,
sal_Int32 nLen,
const uno::Sequence< double >& rOffsets,
+ const uno::Sequence< sal_Bool >& rKashidas,
VirtualDevice const & rVDev,
const CanvasSharedPtr& rCanvas,
const OutDevState& rState,
@@ -1334,6 +1351,7 @@ namespace cppcanvas::internal
nStartPos,
nLen,
rOffsets,
+ rKashidas,
rCanvas,
rState,
&rTextTransform );
@@ -1505,9 +1523,9 @@ namespace cppcanvas::internal
return calcEffectTextBounds( ::basegfx::unotools::b2DRectangleFromRealRectangle2D(
mxTextLayout->queryTextBounds() ),
- ::basegfx::B2DRange( 0,0,
- aSize.getX(),
- aSize.getY() ),
+ basegfx::B2DRange(0, 0,
+ aSize.getWidth(),
+ aSize.getHeight()),
maReliefOffset,
maShadowOffset,
aLocalState,
@@ -1575,7 +1593,7 @@ namespace cppcanvas::internal
const ::basegfx::B2DSize& rShadowOffset,
const ::Color& rShadowColor,
const ::basegfx::B2DRectangle& rOutlineBounds,
- const uno::Reference< rendering::XPolyPolygon2D >& rTextPoly,
+ uno::Reference< rendering::XPolyPolygon2D > xTextPoly,
const uno::Sequence< double >& rOffsets,
VirtualDevice const & rVDev,
const CanvasSharedPtr& rCanvas,
@@ -1586,7 +1604,7 @@ namespace cppcanvas::internal
const ::basegfx::B2DSize& rShadowOffset,
const ::Color& rShadowColor,
const ::basegfx::B2DRectangle& rOutlineBounds,
- const uno::Reference< rendering::XPolyPolygon2D >& rTextPoly,
+ uno::Reference< rendering::XPolyPolygon2D > xTextPoly,
const uno::Sequence< double >& rOffsets,
VirtualDevice const & rVDev,
const CanvasSharedPtr& rCanvas,
@@ -1642,7 +1660,7 @@ namespace cppcanvas::internal
rVDev.GetFont().GetFontHeight() / 64.0 );
const double nOutlineWidth(
- (rState.mapModeTransform * aFontSize).getY() );
+ (rState.mapModeTransform * aFontSize).getHeight() );
return nOutlineWidth < 1.0 ? 1.0 : nOutlineWidth;
}
@@ -1653,12 +1671,12 @@ namespace cppcanvas::internal
const ::basegfx::B2DSize& rShadowOffset,
const ::Color& rShadowColor,
const ::basegfx::B2DRectangle& rOutlineBounds,
- const uno::Reference< rendering::XPolyPolygon2D >& rTextPoly,
+ uno::Reference< rendering::XPolyPolygon2D > xTextPoly,
const uno::Sequence< double >& rOffsets,
VirtualDevice const & rVDev,
const CanvasSharedPtr& rCanvas,
const OutDevState& rState ) :
- mxTextPoly( rTextPoly ),
+ mxTextPoly(std::move( xTextPoly )),
maOffsets( rOffsets ),
mpCanvas( rCanvas ),
mnOutlineWidth( calcOutlineWidth(rState,rVDev) ),
@@ -1695,13 +1713,13 @@ namespace cppcanvas::internal
const ::basegfx::B2DSize& rShadowOffset,
const ::Color& rShadowColor,
const ::basegfx::B2DRectangle& rOutlineBounds,
- const uno::Reference< rendering::XPolyPolygon2D >& rTextPoly,
+ uno::Reference< rendering::XPolyPolygon2D > xTextPoly,
const uno::Sequence< double >& rOffsets,
VirtualDevice const & rVDev,
const CanvasSharedPtr& rCanvas,
const OutDevState& rState,
const ::basegfx::B2DHomMatrix& rTextTransform ) :
- mxTextPoly( rTextPoly ),
+ mxTextPoly(std::move( xTextPoly )),
maOffsets( rOffsets ),
mpCanvas( rCanvas ),
mnOutlineWidth( calcOutlineWidth(rState,rVDev) ),
@@ -1925,9 +1943,9 @@ namespace cppcanvas::internal
::canvas::tools::prependToRenderState(aLocalState, rTransformation);
return calcEffectTextBounds( maOutlineBounds,
- ::basegfx::B2DRange( 0,0,
- maLinesOverallSize.getX(),
- maLinesOverallSize.getY() ),
+ ::basegfx::B2DRange(0, 0,
+ maLinesOverallSize.getWidth(),
+ maLinesOverallSize.getHeight()),
maReliefOffset,
maShadowOffset,
aLocalState,
@@ -1966,7 +1984,8 @@ namespace cppcanvas::internal
const OUString& rText,
sal_Int32 nStartPos,
sal_Int32 nLen,
- o3tl::span<const sal_Int32> pDXArray,
+ KernArraySpan pDXArray,
+ std::span<const sal_Bool> pKashidaArray,
VirtualDevice& rVDev,
const CanvasSharedPtr& rCanvas,
const OutDevState& rState,
@@ -1994,7 +2013,7 @@ namespace cppcanvas::internal
static_cast<sal_uInt16>(nStartPos),
static_cast<sal_uInt16>(nStartPos),
static_cast<sal_uInt16>(nLen),
- 0, pDXArray ) );
+ 0, pDXArray, pKashidaArray ) );
rVDev.SetFont(aOrigFont);
if( !bHaveOutlines )
@@ -2096,7 +2115,8 @@ namespace cppcanvas::internal
const OUString& rText,
sal_Int32 nStartPos,
sal_Int32 nLen,
- o3tl::span<const sal_Int32> pDXArray,
+ KernArraySpan pDXArray,
+ std::span<const sal_Bool> pKashidaArray,
VirtualDevice& rVDev,
const CanvasSharedPtr& rCanvas,
const OutDevState& rState,
@@ -2129,6 +2149,7 @@ namespace cppcanvas::internal
nStartPos,
nLen,
pDXArray,
+ pKashidaArray,
rVDev,
rCanvas,
rState,
@@ -2146,6 +2167,8 @@ namespace cppcanvas::internal
rVDev,
rState ));
+ const uno::Sequence< sal_Bool > aKashidas(pKashidaArray.data(), pKashidaArray.size());
+
// determine type of text action to create
// =======================================
@@ -2240,6 +2263,7 @@ namespace cppcanvas::internal
nStartPos,
nLen,
aCharWidths,
+ aKashidas,
rCanvas,
rState,
*rParms.maTextTransformation );
@@ -2250,6 +2274,7 @@ namespace cppcanvas::internal
nStartPos,
nLen,
aCharWidths,
+ aKashidas,
rCanvas,
rState );
}
@@ -2268,6 +2293,7 @@ namespace cppcanvas::internal
nStartPos,
nLen,
aCharWidths,
+ aKashidas,
rVDev,
rCanvas,
rState,
@@ -2284,6 +2310,7 @@ namespace cppcanvas::internal
nStartPos,
nLen,
aCharWidths,
+ aKashidas,
rVDev,
rCanvas,
rState );
diff --git a/cppcanvas/source/mtfrenderer/textaction.hxx b/cppcanvas/source/mtfrenderer/textaction.hxx
index f59ed4115c76..9f7349caccc9 100644
--- a/cppcanvas/source/mtfrenderer/textaction.hxx
+++ b/cppcanvas/source/mtfrenderer/textaction.hxx
@@ -19,10 +19,13 @@
#pragma once
+#include <sal/config.h>
+
+#include <span>
+
#include <action.hxx>
#include <cppcanvas/canvas.hxx>
#include <cppcanvas/renderer.hxx>
-#include <o3tl/span.hxx>
class VirtualDevice;
class Point;
@@ -68,7 +71,8 @@ namespace cppcanvas::internal
const OUString& rText,
sal_Int32 nStartPos,
sal_Int32 nLen,
- o3tl::span<const sal_Int32> pDXArray,
+ KernArraySpan pDXArray,
+ std::span<const sal_Bool> pKashidaArray,
VirtualDevice& rVDev,
const CanvasSharedPtr& rCanvas,
const OutDevState& rState,
diff --git a/cppcanvas/source/mtfrenderer/textlineshelper.cxx b/cppcanvas/source/mtfrenderer/textlineshelper.cxx
index 6bdc172e30ac..125c3385afec 100644
--- a/cppcanvas/source/mtfrenderer/textlineshelper.cxx
+++ b/cppcanvas/source/mtfrenderer/textlineshelper.cxx
@@ -13,6 +13,7 @@
#include <basegfx/polygon/b2dpolypolygontools.hxx>
#include <basegfx/utils/canvastools.hxx>
#include <outdevstate.hxx>
+#include <utility>
#include "textlineshelper.hxx"
#include "mtftools.hxx"
@@ -30,8 +31,8 @@ void initLineStyleWaveline(sal_uInt32 nLineStyle, bool& bIsWaveline, bool& bIsBo
namespace cppcanvas::internal
{
-TextLinesHelper::TextLinesHelper(const CanvasSharedPtr& rCanvas, const OutDevState& rState)
- : mpCanvas(rCanvas)
+TextLinesHelper::TextLinesHelper(CanvasSharedPtr xCanvas, const OutDevState& rState)
+ : mpCanvas(std::move(xCanvas))
, mbIsOverlineColorSet(rState.isTextOverlineColorSet)
, maOverlineColor(rState.textOverlineColor)
, mbIsUnderlineColorSet(rState.isTextLineColorSet)
@@ -74,7 +75,7 @@ void TextLinesHelper::init(double nLineWidth, const tools::TextLineInfo& rLineIn
mxStrikeout = ::basegfx::unotools::xPolyPolygonFromB2DPolyPolygon(xDevice, aStrikeout);
}
- maOverallSize = aRange.getRange();
+ maOverallSize = basegfx::B2DSize(aRange.getRange().getX(), aRange.getRange().getY());
initLineStyleWaveline(rLineInfo.mnOverlineStyle, mbOverlineWaveline, mbOverlineWavelineBold);
diff --git a/cppcanvas/source/mtfrenderer/textlineshelper.hxx b/cppcanvas/source/mtfrenderer/textlineshelper.hxx
index 38105961ee05..f0a53ff7a07d 100644
--- a/cppcanvas/source/mtfrenderer/textlineshelper.hxx
+++ b/cppcanvas/source/mtfrenderer/textlineshelper.hxx
@@ -53,7 +53,7 @@ class TextLinesHelper
bool mbUnderlineWavelineBold;
public:
- TextLinesHelper(const CanvasSharedPtr& rCanvas, const OutDevState& rState);
+ TextLinesHelper(CanvasSharedPtr xCanvas, const OutDevState& rState);
::basegfx::B2DSize const& getOverallSize() const { return maOverallSize; }
diff --git a/cppcanvas/source/mtfrenderer/transparencygroupaction.cxx b/cppcanvas/source/mtfrenderer/transparencygroupaction.cxx
index e0562361e3ce..c3c1cfdf50f6 100644
--- a/cppcanvas/source/mtfrenderer/transparencygroupaction.cxx
+++ b/cppcanvas/source/mtfrenderer/transparencygroupaction.cxx
@@ -83,8 +83,8 @@ namespace cppcanvas::internal
Size of the transparency group object, in current
state coordinate system.
*/
- TransparencyGroupAction( MtfAutoPtr&& rGroupMtf,
- GradientAutoPtr&& rAlphaGradient,
+ TransparencyGroupAction( std::unique_ptr< GDIMetaFile >&& rGroupMtf,
+ std::optional< Gradient >&& rAlphaGradient,
const ::basegfx::B2DPoint& rDstPoint,
const ::basegfx::B2DVector& rDstSize,
const CanvasSharedPtr& rCanvas,
@@ -104,8 +104,8 @@ namespace cppcanvas::internal
virtual sal_Int32 getActionCount() const override;
private:
- MtfAutoPtr mpGroupMtf;
- GradientAutoPtr mpAlphaGradient;
+ std::unique_ptr< GDIMetaFile > mpGroupMtf;
+ std::optional< Gradient > mpAlphaGradient;
const ::basegfx::B2DSize maDstSize;
@@ -135,15 +135,15 @@ namespace cppcanvas::internal
aLocalTransformation );
}
- TransparencyGroupAction::TransparencyGroupAction( MtfAutoPtr&& rGroupMtf,
- GradientAutoPtr&& rAlphaGradient,
+ TransparencyGroupAction::TransparencyGroupAction( std::unique_ptr< GDIMetaFile >&& rGroupMtf,
+ std::optional< Gradient >&& rAlphaGradient,
const ::basegfx::B2DPoint& rDstPoint,
const ::basegfx::B2DVector& rDstSize,
const CanvasSharedPtr& rCanvas,
const OutDevState& rState ) :
mpGroupMtf( std::move(rGroupMtf) ),
mpAlphaGradient( std::move(rAlphaGradient) ),
- maDstSize( rDstSize ),
+ maDstSize(rDstSize.getX(), rDstSize.getY()),
mpCanvas( rCanvas )
{
tools::initRenderState(maState,rState);
@@ -205,6 +205,8 @@ namespace cppcanvas::internal
return false;
}
+ ::Point aMtfOffsetPoint;
+
// if there's no buffer bitmap, or as soon as the
// total transformation changes, we've got to
// re-render the bitmap
@@ -215,21 +217,65 @@ namespace cppcanvas::internal
{
DBG_TESTSOLARMUTEX();
+ // tdf#150610 fix broken rendering of text meta actions
+ // Even when drawing to a VirtualDevice where antialiasing
+ // is disabled, text will still be drawn with some
+ // antialiased pixels on HiDPI displays. So, expand the
+ // size of the VirtualDevice slightly to capture any of
+ // the pixels drawn past the edges of the destination
+ // bounds.
+ bool bHasTextActions = false;
+ MetaAction* pCurrAct;
+ int nCurrActionIndex;
+ for( nCurrActionIndex=0, pCurrAct=mpGroupMtf->FirstAction();
+ pCurrAct && !bHasTextActions;
+ ++nCurrActionIndex, pCurrAct = mpGroupMtf->NextAction() )
+ {
+ switch( pCurrAct->GetType() )
+ {
+ case MetaActionType::TEXT:
+ case MetaActionType::TEXTARRAY:
+ case MetaActionType::STRETCHTEXT:
+ case MetaActionType::TEXTRECT:
+ if( ( rSubset.mnSubsetBegin == 0 && rSubset.mnSubsetEnd == -1 ) || ( rSubset.mnSubsetBegin <= nCurrActionIndex && rSubset.mnSubsetEnd > nCurrActionIndex ) )
+ bHasTextActions = true;
+ break;
+ default:
+ break;
+ }
+ }
+
// output size of metafile
- ::Size aOutputSizePixel( ::basegfx::fround( aScale.getX() * maDstSize.getX() ),
- ::basegfx::fround( aScale.getY() * maDstSize.getY() ) );
+ ::Size aOutputSizePixel( ::basegfx::fround<::tools::Long>( aScale.getX() * maDstSize.getWidth() ),
+ ::basegfx::fround<::tools::Long>( aScale.getY() * maDstSize.getHeight() ) );
- // pixel size of cache bitmap: round up to nearest int
- ::Size aBitmapSizePixel( static_cast<sal_Int32>( aScale.getX() * maDstSize.getX() )+1,
- static_cast<sal_Int32>( aScale.getY() * maDstSize.getY() )+1 );
+ sal_Int32 nBitmapExtra;
+ if ( bHasTextActions )
+ {
+ nBitmapExtra = 10;
+ aMtfOffsetPoint = ::Point( nBitmapExtra / 2, nBitmapExtra / 2 );
+ }
+ else
+ {
+ // Related tdf#150610 assume antialiasing is enabled
+ // Although antialiasing is normally disabled in the
+ // VirtualDevice, lines in tdf#150610 will draw past
+ // the edge of the VirtualDevice when running a
+ // slideshow so always add an extra pixel on the
+ // right and bottom edges.
+ nBitmapExtra = 1;
+ }
- ::Point aEmptyPoint;
+ // pixel size of cache bitmap: round up to nearest int
+ ::Point aBitmapPoint;
+ ::Size aBitmapSizePixel( static_cast<sal_Int32>( aScale.getX() * maDstSize.getWidth() ) + nBitmapExtra,
+ static_cast<sal_Int32>( aScale.getY() * maDstSize.getHeight() ) + nBitmapExtra );
// render our content into an appropriately sized
// VirtualDevice with alpha channel
ScopedVclPtrInstance<VirtualDevice> aVDev(
- *::Application::GetDefaultDevice(), DeviceFormat::DEFAULT, DeviceFormat::DEFAULT );
- aVDev->SetOutputSizePixel( aBitmapSizePixel );
+ *::Application::GetDefaultDevice(), DeviceFormat::WITH_ALPHA );
+ aVDev->SetOutputSizePixel( aBitmapSizePixel, true, true );
aVDev->SetMapMode();
if( rSubset.mnSubsetBegin != 0 ||
@@ -238,8 +284,6 @@ namespace cppcanvas::internal
// true subset - extract referenced
// metaactions from mpGroupMtf
GDIMetaFile aMtf;
- MetaAction* pCurrAct;
- int nCurrActionIndex;
// extract subset actions
for( nCurrActionIndex=0,
@@ -320,7 +364,9 @@ namespace cppcanvas::internal
}
aVDev->DrawTransparent( aMtf,
- aEmptyPoint,
+ aBitmapPoint,
+ aBitmapSizePixel,
+ aMtfOffsetPoint,
aOutputSizePixel,
*mpAlphaGradient );
}
@@ -328,7 +374,9 @@ namespace cppcanvas::internal
{
// no subsetting - render whole mtf
aVDev->DrawTransparent( *mpGroupMtf,
- aEmptyPoint,
+ aBitmapPoint,
+ aBitmapSizePixel,
+ aMtfOffsetPoint,
aOutputSizePixel,
*mpAlphaGradient );
}
@@ -338,7 +386,7 @@ namespace cppcanvas::internal
BitmapSharedPtr aBmp( VCLFactory::createBitmap(
mpCanvas,
aVDev->GetBitmapEx(
- aEmptyPoint,
+ aBitmapPoint,
aBitmapSizePixel ) ) );
mxBufferBitmap = aBmp->getUNOBitmap();
maLastTransformation = aTotalTransform;
@@ -362,6 +410,7 @@ namespace cppcanvas::internal
// the contained scaling, we've got to right-multiply with
// the inverse.
::basegfx::B2DHomMatrix aScaleCorrection;
+ aScaleCorrection.translate( -aMtfOffsetPoint.X(), -aMtfOffsetPoint.Y() );
aScaleCorrection.scale( 1/aScale.getX(), 1/aScale.getY() );
aTransform = aTransform * aScaleCorrection;
@@ -423,8 +472,8 @@ namespace cppcanvas::internal
return tools::calcDevicePixelBounds(
::basegfx::B2DRange( 0,0,
- maDstSize.getX(),
- maDstSize.getY() ),
+ maDstSize.getWidth(),
+ maDstSize.getHeight() ),
mpCanvas->getViewState(),
aLocalState );
}
@@ -453,8 +502,8 @@ namespace cppcanvas::internal
}
- std::shared_ptr<Action> TransparencyGroupActionFactory::createTransparencyGroupAction( MtfAutoPtr&& rGroupMtf,
- GradientAutoPtr&& rAlphaGradient,
+ std::shared_ptr<Action> TransparencyGroupActionFactory::createTransparencyGroupAction( std::unique_ptr< GDIMetaFile >&& rGroupMtf,
+ std::optional< Gradient >&& rAlphaGradient,
const ::basegfx::B2DPoint& rDstPoint,
const ::basegfx::B2DVector& rDstSize,
const CanvasSharedPtr& rCanvas,
diff --git a/cppcanvas/source/mtfrenderer/transparencygroupaction.hxx b/cppcanvas/source/mtfrenderer/transparencygroupaction.hxx
index f863d18ed4c7..ddf01ca00934 100644
--- a/cppcanvas/source/mtfrenderer/transparencygroupaction.hxx
+++ b/cppcanvas/source/mtfrenderer/transparencygroupaction.hxx
@@ -20,6 +20,7 @@
#pragma once
#include <cppcanvas/canvas.hxx>
+#include <vcl/gradient.hxx>
#include <action.hxx>
#include <memory>
@@ -30,7 +31,6 @@ namespace basegfx {
}
class GDIMetaFile;
-class Gradient;
/* Definition of internal::TransparencyGroupActionFactory */
@@ -39,9 +39,6 @@ namespace cppcanvas::internal
{
struct OutDevState;
- typedef std::unique_ptr< GDIMetaFile > MtfAutoPtr;
- typedef std::unique_ptr< Gradient > GradientAutoPtr;
-
/** Transparency group action.
This action groups a bunch of other actions, to be
@@ -75,8 +72,8 @@ namespace cppcanvas::internal
Size of the transparency group object, in current
state coordinate system.
*/
- std::shared_ptr<Action> createTransparencyGroupAction( MtfAutoPtr&& rGroupMtf,
- GradientAutoPtr&& rAlphaGradient,
+ std::shared_ptr<Action> createTransparencyGroupAction( std::unique_ptr< GDIMetaFile >&& rGroupMtf,
+ std::optional< Gradient >&& rAlphaGradient,
const ::basegfx::B2DPoint& rDstPoint,
const ::basegfx::B2DVector& rDstSize,
const CanvasSharedPtr& rCanvas,
diff --git a/cppcanvas/source/tools/canvasgraphichelper.cxx b/cppcanvas/source/tools/canvasgraphichelper.cxx
index 632294834cce..491c743f5216 100644
--- a/cppcanvas/source/tools/canvasgraphichelper.cxx
+++ b/cppcanvas/source/tools/canvasgraphichelper.cxx
@@ -25,6 +25,8 @@
#include <canvas/canvastools.hxx>
#include <basegfx/utils/canvastools.hxx>
#include <basegfx/matrix/b2dhommatrix.hxx>
+#include <osl/diagnose.h>
+#include <utility>
using namespace ::com::sun::star;
@@ -33,8 +35,8 @@ using namespace ::com::sun::star;
namespace cppcanvas::internal
{
- CanvasGraphicHelper::CanvasGraphicHelper( const CanvasSharedPtr& rParentCanvas ) :
- mpCanvas( rParentCanvas )
+ CanvasGraphicHelper::CanvasGraphicHelper( CanvasSharedPtr xParentCanvas ) :
+ mpCanvas(std::move( xParentCanvas ))
{
OSL_ENSURE( mpCanvas && mpCanvas->getUNOCanvas().is(),
"CanvasGraphicHelper::CanvasGraphicHelper: no valid canvas" );
diff --git a/cppcanvas/source/wrapper/implcanvas.cxx b/cppcanvas/source/wrapper/implcanvas.cxx
index 2760311d5ef7..81b5a3759fd6 100644
--- a/cppcanvas/source/wrapper/implcanvas.cxx
+++ b/cppcanvas/source/wrapper/implcanvas.cxx
@@ -21,10 +21,12 @@
#include <basegfx/matrix/b2dhommatrix.hxx>
#include <basegfx/polygon/b2dpolypolygon.hxx>
#include <basegfx/utils/canvastools.hxx>
+#include <osl/diagnose.h>
#include <com/sun/star/rendering/XCanvas.hpp>
#include <canvas/canvastools.hxx>
+#include <utility>
#include "implcanvas.hxx"
@@ -34,8 +36,8 @@ using namespace ::com::sun::star;
namespace cppcanvas::internal
{
- ImplCanvas::ImplCanvas( const uno::Reference< rendering::XCanvas >& xCanvas ) :
- mxCanvas( xCanvas )
+ ImplCanvas::ImplCanvas( uno::Reference< rendering::XCanvas > xCanvas ) :
+ mxCanvas(std::move( xCanvas ))
{
OSL_ENSURE( mxCanvas.is(), "Canvas::Canvas() invalid XCanvas" );
diff --git a/cppcanvas/source/wrapper/implcanvas.hxx b/cppcanvas/source/wrapper/implcanvas.hxx
index d49116c92860..cc49c819eeef 100644
--- a/cppcanvas/source/wrapper/implcanvas.hxx
+++ b/cppcanvas/source/wrapper/implcanvas.hxx
@@ -47,7 +47,7 @@ namespace cppcanvas::internal
class ImplCanvas : public virtual Canvas
{
public:
- explicit ImplCanvas( const css::uno::Reference< css::rendering::XCanvas >& rCanvas );
+ explicit ImplCanvas( css::uno::Reference< css::rendering::XCanvas > xCanvas );
virtual ~ImplCanvas() override;
ImplCanvas(ImplCanvas const &) = default;
diff --git a/cppcanvas/source/wrapper/implpolypolygon.cxx b/cppcanvas/source/wrapper/implpolypolygon.cxx
index 182bf6b47f42..536bfa60a53b 100644
--- a/cppcanvas/source/wrapper/implpolypolygon.cxx
+++ b/cppcanvas/source/wrapper/implpolypolygon.cxx
@@ -27,6 +27,7 @@
#include "implpolypolygon.hxx"
#include <tools.hxx>
+#include <utility>
using namespace ::com::sun::star;
@@ -35,9 +36,9 @@ using namespace ::com::sun::star;
namespace cppcanvas::internal
{
ImplPolyPolygon::ImplPolyPolygon( const CanvasSharedPtr& rParentCanvas,
- const uno::Reference< rendering::XPolyPolygon2D >& rPolyPoly ) :
+ uno::Reference< rendering::XPolyPolygon2D > xPolyPoly ) :
CanvasGraphicHelper( rParentCanvas ),
- mxPolyPoly( rPolyPoly ),
+ mxPolyPoly(std::move( xPolyPoly )),
maStrokeAttributes(1.0,
10.0,
uno::Sequence< double >(),
diff --git a/cppcanvas/source/wrapper/implpolypolygon.hxx b/cppcanvas/source/wrapper/implpolypolygon.hxx
index 341531fba74f..a756b4400795 100644
--- a/cppcanvas/source/wrapper/implpolypolygon.hxx
+++ b/cppcanvas/source/wrapper/implpolypolygon.hxx
@@ -39,8 +39,8 @@ namespace cppcanvas::internal
{
public:
ImplPolyPolygon( const CanvasSharedPtr& rParentCanvas,
- const css::uno::Reference<
- css::rendering::XPolyPolygon2D >& rPolyPoly );
+ css::uno::Reference<
+ css::rendering::XPolyPolygon2D > xPolyPoly );
virtual ~ImplPolyPolygon() override;
diff --git a/cppcanvas/source/wrapper/implsprite.cxx b/cppcanvas/source/wrapper/implsprite.cxx
index c0450880d75d..d0b2d617944e 100644
--- a/cppcanvas/source/wrapper/implsprite.cxx
+++ b/cppcanvas/source/wrapper/implsprite.cxx
@@ -21,6 +21,8 @@
#include <basegfx/utils/canvastools.hxx>
#include <basegfx/polygon/b2dpolypolygon.hxx>
#include <canvas/canvastools.hxx>
+#include <osl/diagnose.h>
+#include <utility>
#include "implsprite.hxx"
@@ -31,10 +33,10 @@ namespace cppcanvas::internal
{
ImplSprite::ImplSprite( const uno::Reference< rendering::XSpriteCanvas >& rParentCanvas,
- const uno::Reference< rendering::XSprite >& rSprite,
- const ImplSpriteCanvas::TransformationArbiterSharedPtr& rTransformArbiter ) :
- mxSprite( rSprite ),
- mpTransformArbiter( rTransformArbiter )
+ uno::Reference< rendering::XSprite > rSprite,
+ ImplSpriteCanvas::TransformationArbiterSharedPtr xTransformArbiter ) :
+ mxSprite(std::move( rSprite )),
+ mpTransformArbiter(std::move( xTransformArbiter ))
{
// Avoiding ternary operator in initializer list (Solaris
// compiler bug, when function call and temporary is
diff --git a/cppcanvas/source/wrapper/implsprite.hxx b/cppcanvas/source/wrapper/implsprite.hxx
index 220dfb9489fc..d40fb0574a96 100644
--- a/cppcanvas/source/wrapper/implsprite.hxx
+++ b/cppcanvas/source/wrapper/implsprite.hxx
@@ -32,9 +32,9 @@ namespace cppcanvas::internal
public:
ImplSprite( const css::uno::Reference<
css::rendering::XSpriteCanvas >& rParentCanvas,
- const css::uno::Reference<
- css::rendering::XSprite >& rSprite,
- const ImplSpriteCanvas::TransformationArbiterSharedPtr& rTransformArbiter );
+ css::uno::Reference<
+ css::rendering::XSprite > xSprite,
+ ImplSpriteCanvas::TransformationArbiterSharedPtr xTransformArbiter );
virtual ~ImplSprite() override;
virtual void setAlpha( const double& rAlpha ) override;