summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/vcl/outdev.hxx4
-rw-r--r--solenv/clang-format/excludelist1
-rw-r--r--vcl/Library_vcl.mk1
-rw-r--r--vcl/qa/cppunit/outdev.cxx69
-rw-r--r--vcl/source/outdev/fill.cxx103
-rw-r--r--vcl/source/outdev/outdevstate.cxx70
6 files changed, 176 insertions, 72 deletions
diff --git a/include/vcl/outdev.hxx b/include/vcl/outdev.hxx
index b529763099ca..7d4a7e533356 100644
--- a/include/vcl/outdev.hxx
+++ b/include/vcl/outdev.hxx
@@ -506,8 +506,8 @@ public:
void SetFillColor();
void SetFillColor( const Color& rColor );
- const Color& GetFillColor() const { return maFillColor; }
- bool IsFillColor() const { return mbFillColor; }
+ const Color& GetFillColor() const;
+ bool IsFillColor() const;
void SetBackground();
void SetBackground( const Wallpaper& rBackground );
diff --git a/solenv/clang-format/excludelist b/solenv/clang-format/excludelist
index 7cf7ea89c1f2..51d61da54d09 100644
--- a/solenv/clang-format/excludelist
+++ b/solenv/clang-format/excludelist
@@ -15032,6 +15032,7 @@ vcl/source/outdev/background.cxx
vcl/source/outdev/bitmap.cxx
vcl/source/outdev/clipping.cxx
vcl/source/outdev/curvedshapes.cxx
+vcl/source/outdev/fill.cxx
vcl/source/outdev/font.cxx
vcl/source/outdev/gradient.cxx
vcl/source/outdev/hatch.cxx
diff --git a/vcl/Library_vcl.mk b/vcl/Library_vcl.mk
index a19c23b7b926..e7ed402ef0d8 100644
--- a/vcl/Library_vcl.mk
+++ b/vcl/Library_vcl.mk
@@ -216,6 +216,7 @@ $(eval $(call gb_Library_add_exception_objects,vcl,\
vcl/source/outdev/outdev \
vcl/source/outdev/outdevstate \
vcl/source/outdev/clipping \
+ vcl/source/outdev/fill \
vcl/source/outdev/polygon \
vcl/source/outdev/transparent \
vcl/source/outdev/mask \
diff --git a/vcl/qa/cppunit/outdev.cxx b/vcl/qa/cppunit/outdev.cxx
index e9d9924a2ab8..ed84ae7ac456 100644
--- a/vcl/qa/cppunit/outdev.cxx
+++ b/vcl/qa/cppunit/outdev.cxx
@@ -45,6 +45,9 @@ public:
void testDrawTransformedBitmapExFlip();
void testRTL();
void testRTLGuard();
+ void testDefaultFillColor();
+ void testTransparentFillColor();
+ void testFillColor();
CPPUNIT_TEST_SUITE(VclOutdevTest);
CPPUNIT_TEST(testVirtualDevice);
@@ -63,6 +66,9 @@ public:
CPPUNIT_TEST(testDrawTransformedBitmapExFlip);
CPPUNIT_TEST(testRTL);
CPPUNIT_TEST(testRTLGuard);
+ CPPUNIT_TEST(testDefaultFillColor);
+ CPPUNIT_TEST(testTransparentFillColor);
+ CPPUNIT_TEST(testFillColor);
CPPUNIT_TEST_SUITE_END();
};
@@ -460,6 +466,69 @@ void VclOutdevTest::testRTLGuard()
CPPUNIT_ASSERT(aGuard.GetRenderContext()->IsRTLEnabled());
}
+void VclOutdevTest::testDefaultFillColor()
+{
+ // Create a virtual device, and connect a metafile to it.
+ ScopedVclPtrInstance<VirtualDevice> pVDev;
+
+ GDIMetaFile aMtf;
+ aMtf.Record(pVDev.get());
+
+ CPPUNIT_ASSERT(pVDev->IsFillColor());
+ CPPUNIT_ASSERT_EQUAL(Color(0xFF, 0xFF, 0xFF), pVDev->GetFillColor());
+
+ pVDev->SetFillColor();
+ CPPUNIT_ASSERT(!pVDev->IsFillColor());
+ CPPUNIT_ASSERT_EQUAL(COL_TRANSPARENT, pVDev->GetFillColor());
+ MetaAction* pAction = aMtf.GetAction(0);
+ CPPUNIT_ASSERT_EQUAL(MetaActionType::FILLCOLOR, pAction->GetType());
+ auto pFillAction = static_cast<MetaFillColorAction*>(pAction);
+ const Color& rColor = pFillAction->GetColor();
+ CPPUNIT_ASSERT_EQUAL(Color(), rColor);
+}
+
+void VclOutdevTest::testTransparentFillColor()
+{
+ // Create a virtual device, and connect a metafile to it.
+ ScopedVclPtrInstance<VirtualDevice> pVDev;
+
+ GDIMetaFile aMtf;
+ aMtf.Record(pVDev.get());
+
+ CPPUNIT_ASSERT(pVDev->IsFillColor());
+ CPPUNIT_ASSERT_EQUAL(Color(0xFF, 0xFF, 0xFF), pVDev->GetFillColor());
+
+ pVDev->SetFillColor(COL_TRANSPARENT);
+ CPPUNIT_ASSERT(!pVDev->IsFillColor());
+ CPPUNIT_ASSERT_EQUAL(COL_TRANSPARENT, pVDev->GetFillColor());
+ MetaAction* pAction = aMtf.GetAction(0);
+ CPPUNIT_ASSERT_EQUAL(MetaActionType::FILLCOLOR, pAction->GetType());
+ auto pFillAction = static_cast<MetaFillColorAction*>(pAction);
+ const Color& rColor = pFillAction->GetColor();
+ CPPUNIT_ASSERT_EQUAL(COL_TRANSPARENT, rColor);
+}
+
+void VclOutdevTest::testFillColor()
+{
+ // Create a virtual device, and connect a metafile to it.
+ ScopedVclPtrInstance<VirtualDevice> pVDev;
+
+ GDIMetaFile aMtf;
+ aMtf.Record(pVDev.get());
+
+ CPPUNIT_ASSERT(pVDev->IsFillColor());
+ CPPUNIT_ASSERT_EQUAL(Color(0xFF, 0xFF, 0xFF), pVDev->GetFillColor());
+
+ pVDev->SetFillColor(COL_RED);
+ CPPUNIT_ASSERT(pVDev->IsFillColor());
+ CPPUNIT_ASSERT_EQUAL(COL_RED, pVDev->GetFillColor());
+ MetaAction* pAction = aMtf.GetAction(0);
+ CPPUNIT_ASSERT_EQUAL(MetaActionType::FILLCOLOR, pAction->GetType());
+ auto pFillAction = static_cast<MetaFillColorAction*>(pAction);
+ const Color& rColor = pFillAction->GetColor();
+ CPPUNIT_ASSERT_EQUAL(COL_RED, rColor);
+}
+
CPPUNIT_TEST_SUITE_REGISTRATION(VclOutdevTest);
CPPUNIT_PLUGIN_IMPLEMENT();
diff --git a/vcl/source/outdev/fill.cxx b/vcl/source/outdev/fill.cxx
new file mode 100644
index 000000000000..ea00990cbece
--- /dev/null
+++ b/vcl/source/outdev/fill.cxx
@@ -0,0 +1,103 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <tools/debug.hxx>
+
+#include <vcl/metaact.hxx>
+#include <vcl/settings.hxx>
+#include <vcl/virdev.hxx>
+
+#include <drawmode.hxx>
+#include <salgdi.hxx>
+
+Color const& OutputDevice::GetFillColor() const { return maFillColor; }
+
+bool OutputDevice::IsFillColor() const { return mbFillColor; }
+
+void OutputDevice::SetFillColor()
+{
+
+ if ( mpMetaFile )
+ mpMetaFile->AddAction( new MetaFillColorAction( Color(), false ) );
+
+ if ( mbFillColor )
+ {
+ mbInitFillColor = true;
+ mbFillColor = false;
+ maFillColor = COL_TRANSPARENT;
+ }
+
+ if( mpAlphaVDev )
+ mpAlphaVDev->SetFillColor();
+}
+
+void OutputDevice::SetFillColor( const Color& rColor )
+{
+ Color aColor(vcl::drawmode::GetFillColor(rColor, GetDrawMode(), GetSettings().GetStyleSettings()));
+
+ if ( mpMetaFile )
+ mpMetaFile->AddAction( new MetaFillColorAction( aColor, true ) );
+
+ if ( aColor.IsTransparent() )
+ {
+ if ( mbFillColor )
+ {
+ mbInitFillColor = true;
+ mbFillColor = false;
+ maFillColor = COL_TRANSPARENT;
+ }
+ }
+ else
+ {
+ if ( maFillColor != aColor )
+ {
+ mbInitFillColor = true;
+ mbFillColor = true;
+ maFillColor = aColor;
+ }
+ }
+
+ if( mpAlphaVDev )
+ mpAlphaVDev->SetFillColor( COL_BLACK );
+}
+
+void OutputDevice::InitFillColor()
+{
+ DBG_TESTSOLARMUTEX();
+
+ if( mbFillColor )
+ {
+ if( RasterOp::N0 == meRasterOp )
+ mpGraphics->SetROPFillColor( SalROPColor::N0 );
+ else if( RasterOp::N1 == meRasterOp )
+ mpGraphics->SetROPFillColor( SalROPColor::N1 );
+ else if( RasterOp::Invert == meRasterOp )
+ mpGraphics->SetROPFillColor( SalROPColor::Invert );
+ else
+ mpGraphics->SetFillColor( maFillColor );
+ }
+ else
+ {
+ mpGraphics->SetFillColor();
+ }
+
+ mbInitFillColor = false;
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */
diff --git a/vcl/source/outdev/outdevstate.cxx b/vcl/source/outdev/outdevstate.cxx
index fa1af5ab576d..41ee775a84e6 100644
--- a/vcl/source/outdev/outdevstate.cxx
+++ b/vcl/source/outdev/outdevstate.cxx
@@ -285,54 +285,6 @@ void OutputDevice::SetRasterOp( RasterOp eRasterOp )
mpAlphaVDev->SetRasterOp( eRasterOp );
}
-
-void OutputDevice::SetFillColor()
-{
-
- if ( mpMetaFile )
- mpMetaFile->AddAction( new MetaFillColorAction( Color(), false ) );
-
- if ( mbFillColor )
- {
- mbInitFillColor = true;
- mbFillColor = false;
- maFillColor = COL_TRANSPARENT;
- }
-
- if( mpAlphaVDev )
- mpAlphaVDev->SetFillColor();
-}
-
-void OutputDevice::SetFillColor( const Color& rColor )
-{
- Color aColor(vcl::drawmode::GetFillColor(rColor, GetDrawMode(), GetSettings().GetStyleSettings()));
-
- if ( mpMetaFile )
- mpMetaFile->AddAction( new MetaFillColorAction( aColor, true ) );
-
- if ( aColor.IsTransparent() )
- {
- if ( mbFillColor )
- {
- mbInitFillColor = true;
- mbFillColor = false;
- maFillColor = COL_TRANSPARENT;
- }
- }
- else
- {
- if ( maFillColor != aColor )
- {
- mbInitFillColor = true;
- mbFillColor = true;
- maFillColor = aColor;
- }
- }
-
- if( mpAlphaVDev )
- mpAlphaVDev->SetFillColor( COL_BLACK );
-}
-
void OutputDevice::SetLineColor()
{
@@ -449,26 +401,4 @@ void OutputDevice::InitLineColor()
mbInitLineColor = false;
}
-
-void OutputDevice::InitFillColor()
-{
- DBG_TESTSOLARMUTEX();
-
- if( mbFillColor )
- {
- if( RasterOp::N0 == meRasterOp )
- mpGraphics->SetROPFillColor( SalROPColor::N0 );
- else if( RasterOp::N1 == meRasterOp )
- mpGraphics->SetROPFillColor( SalROPColor::N1 );
- else if( RasterOp::Invert == meRasterOp )
- mpGraphics->SetROPFillColor( SalROPColor::Invert );
- else
- mpGraphics->SetFillColor( maFillColor );
- }
- else
- mpGraphics->SetFillColor();
-
- mbInitFillColor = false;
-}
-
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */