summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--vcl/Library_vcl.mk1
-rw-r--r--vcl/inc/unx/GenPspGfxBackend.hxx126
-rw-r--r--vcl/inc/unx/genpspgraphics.h14
-rw-r--r--vcl/unx/generic/print/GenPspGfxBackend.cxx412
-rw-r--r--vcl/unx/generic/print/genpspgraphics.cxx388
5 files changed, 654 insertions, 287 deletions
diff --git a/vcl/Library_vcl.mk b/vcl/Library_vcl.mk
index c788fb164ce9..998eed0e0766 100644
--- a/vcl/Library_vcl.mk
+++ b/vcl/Library_vcl.mk
@@ -572,6 +572,7 @@ vcl_headless_freetype_code=\
vcl/unx/generic/print/glyphset \
vcl/unx/generic/print/printerjob \
vcl/unx/generic/print/psputil \
+ vcl/unx/generic/print/GenPspGfxBackend \
vcl/unx/generic/print/genpspgraphics \
vcl/unx/generic/print/genprnpsp \
vcl/unx/generic/print/prtsetup \
diff --git a/vcl/inc/unx/GenPspGfxBackend.hxx b/vcl/inc/unx/GenPspGfxBackend.hxx
new file mode 100644
index 000000000000..662bca8cc854
--- /dev/null
+++ b/vcl/inc/unx/GenPspGfxBackend.hxx
@@ -0,0 +1,126 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * 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/.
+ *
+ */
+
+#pragma once
+
+#include <salgdiimpl.hxx>
+
+namespace psp
+{
+class PrinterGfx;
+}
+
+class VCL_DLLPUBLIC GenPspGfxBackend final : public SalGraphicsImpl
+{
+private:
+ psp::PrinterGfx* m_pPrinterGfx;
+
+public:
+ GenPspGfxBackend(psp::PrinterGfx* pPrinterGfx);
+ ~GenPspGfxBackend() override;
+
+ void Init() override;
+ void freeResources() override;
+ OUString getRenderBackendName() const override { return "genpsp"; }
+
+ bool setClipRegion(vcl::Region const& rRegion) override;
+ void ResetClipRegion() override;
+
+ sal_uInt16 GetBitCount() const override;
+
+ tools::Long GetGraphicsWidth() const override;
+
+ void SetLineColor() override;
+ void SetLineColor(Color nColor) override;
+ void SetFillColor() override;
+ void SetFillColor(Color nColor) override;
+ void SetXORMode(bool bSet, bool bInvertOnly) override;
+ void SetROPLineColor(SalROPColor nROPColor) override;
+ void SetROPFillColor(SalROPColor nROPColor) override;
+
+ void drawPixel(tools::Long nX, tools::Long nY) override;
+ void drawPixel(tools::Long nX, tools::Long nY, Color nColor) override;
+
+ void drawLine(tools::Long nX1, tools::Long nY1, tools::Long nX2, tools::Long nY2) override;
+ void drawRect(tools::Long nX, tools::Long nY, tools::Long nWidth, tools::Long nHeight) override;
+ void drawPolyLine(sal_uInt32 nPoints, const Point* pPointArray) override;
+ void drawPolygon(sal_uInt32 nPoints, const Point* pPointArray) override;
+ void drawPolyPolygon(sal_uInt32 nPoly, const sal_uInt32* pPoints,
+ const Point** pPointArray) override;
+
+ bool drawPolyPolygon(const basegfx::B2DHomMatrix& rObjectToDevice,
+ const basegfx::B2DPolyPolygon&, double fTransparency) override;
+
+ bool drawPolyLine(const basegfx::B2DHomMatrix& rObjectToDevice, const basegfx::B2DPolygon&,
+ double fTransparency, double fLineWidth, const std::vector<double>* pStroke,
+ basegfx::B2DLineJoin, css::drawing::LineCap, double fMiterMinimumAngle,
+ bool bPixelSnapHairline) override;
+
+ bool drawPolyLineBezier(sal_uInt32 nPoints, const Point* pPointArray,
+ const PolyFlags* pFlagArray) override;
+
+ bool drawPolygonBezier(sal_uInt32 nPoints, const Point* pPointArray,
+ const PolyFlags* pFlagArray) override;
+
+ bool drawPolyPolygonBezier(sal_uInt32 nPoly, const sal_uInt32* pPoints,
+ const Point* const* pPointArray,
+ const PolyFlags* const* pFlagArray) override;
+
+ void copyArea(tools::Long nDestX, tools::Long nDestY, tools::Long nSrcX, tools::Long nSrcY,
+ tools::Long nSrcWidth, tools::Long nSrcHeight, bool bWindowInvalidate) override;
+
+ void copyBits(const SalTwoRect& rPosAry, SalGraphics* pSrcGraphics) override;
+
+ void drawBitmap(const SalTwoRect& rPosAry, const SalBitmap& rSalBitmap) override;
+
+ void drawBitmap(const SalTwoRect& rPosAry, const SalBitmap& rSalBitmap,
+ const SalBitmap& rMaskBitmap) override;
+
+ void drawMask(const SalTwoRect& rPosAry, const SalBitmap& rSalBitmap,
+ Color nMaskColor) override;
+
+ std::shared_ptr<SalBitmap> getBitmap(tools::Long nX, tools::Long nY, tools::Long nWidth,
+ tools::Long nHeight) override;
+
+ Color getPixel(tools::Long nX, tools::Long nY) override;
+
+ void invert(tools::Long nX, tools::Long nY, tools::Long nWidth, tools::Long nHeight,
+ SalInvert nFlags) override;
+
+ void invert(sal_uInt32 nPoints, const Point* pPtAry, SalInvert nFlags) override;
+
+ bool drawEPS(tools::Long nX, tools::Long nY, tools::Long nWidth, tools::Long nHeight,
+ void* pPtr, sal_uInt32 nSize) override;
+
+ bool blendBitmap(const SalTwoRect&, const SalBitmap& rBitmap) override;
+
+ bool blendAlphaBitmap(const SalTwoRect&, const SalBitmap& rSrcBitmap,
+ const SalBitmap& rMaskBitmap, const SalBitmap& rAlphaBitmap) override;
+
+ bool drawAlphaBitmap(const SalTwoRect&, const SalBitmap& rSourceBitmap,
+ const SalBitmap& rAlphaBitmap) override;
+
+ bool drawTransformedBitmap(const basegfx::B2DPoint& rNull, const basegfx::B2DPoint& rX,
+ const basegfx::B2DPoint& rY, const SalBitmap& rSourceBitmap,
+ const SalBitmap* pAlphaBitmap, double fAlpha) override;
+
+ bool hasFastDrawTransformedBitmap() const override;
+
+ bool drawAlphaRect(tools::Long nX, tools::Long nY, tools::Long nWidth, tools::Long nHeight,
+ sal_uInt8 nTransparency) override;
+
+ bool drawGradient(const tools::PolyPolygon& rPolygon, const Gradient& rGradient) override;
+ bool implDrawGradient(basegfx::B2DPolyPolygon const& rPolyPolygon,
+ SalGradient const& rGradient) override;
+
+ bool supportsOperation(OutDevSupportType eType) const override;
+};
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/vcl/inc/unx/genpspgraphics.h b/vcl/inc/unx/genpspgraphics.h
index d3ff919a9778..6c6c60cdf762 100644
--- a/vcl/inc/unx/genpspgraphics.h
+++ b/vcl/inc/unx/genpspgraphics.h
@@ -27,6 +27,8 @@
#include <salgdi.hxx>
#include <sallayout.hxx>
+#include <unx/GenPspGfxBackend.hxx>
+
class PhysicalFontFace;
class PhysicalFontCollection;
@@ -39,6 +41,8 @@ class ImplFontMetricData;
class VCL_DLLPUBLIC GenPspGraphics final : public SalGraphics
{
+ std::unique_ptr<GenPspGfxBackend> m_pBackend;
+
psp::JobData* m_pJobData;
psp::PrinterGfx* m_pPrinterGfx;
@@ -65,7 +69,11 @@ public:
const psp::FastPrintFontInfo& );
// override all pure virtual methods
- virtual SalGraphicsImpl*GetImpl() const override { return nullptr; };
+ virtual SalGraphicsImpl* GetImpl() const override
+ {
+ return m_pBackend.get();
+ }
+
virtual void GetResolution( sal_Int32& rDPIX, sal_Int32& rDPIY ) override;
virtual sal_uInt16 GetBitCount() const override;
virtual tools::Long GetGraphicsWidth() const override;
@@ -148,7 +156,6 @@ public:
const sal_uInt32* pPoints,
const Point* const* pPtAry,
const PolyFlags* const* pFlgAry ) override;
- virtual bool drawGradient( const tools::PolyPolygon&, const Gradient& ) override { return false; };
virtual void copyArea( tools::Long nDestX,
tools::Long nDestY,
@@ -195,6 +202,9 @@ public:
virtual bool drawAlphaRect( tools::Long nX, tools::Long nY, tools::Long nWidth, tools::Long nHeight,
sal_uInt8 nTransparency ) override;
+ virtual bool drawGradient(const tools::PolyPolygon& rPolygon, const Gradient& rGradient) override;
+ virtual bool implDrawGradient(basegfx::B2DPolyPolygon const& rPolyPolygon, SalGradient const& rGradient) override;
+
virtual SystemGraphicsData GetGraphicsData() const override;
virtual OUString getRenderBackendName() const override { return "genpsp"; }
diff --git a/vcl/unx/generic/print/GenPspGfxBackend.cxx b/vcl/unx/generic/print/GenPspGfxBackend.cxx
new file mode 100644
index 000000000000..7b461ff4f5c6
--- /dev/null
+++ b/vcl/unx/generic/print/GenPspGfxBackend.cxx
@@ -0,0 +1,412 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * 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/.
+ *
+ */
+
+#include <unx/GenPspGfxBackend.hxx>
+#include <unx/printergfx.hxx>
+#include <vcl/BitmapReadAccess.hxx>
+#include <salbmp.hxx>
+
+// ----- Implementation of PrinterBmp by means of SalBitmap/BitmapBuffer ---------------
+
+namespace
+{
+class SalPrinterBmp : public psp::PrinterBmp
+{
+private:
+ BitmapBuffer* mpBmpBuffer;
+
+ FncGetPixel mpFncGetPixel;
+ Scanline mpScanAccess;
+ sal_PtrDiff mnScanOffset;
+
+public:
+ explicit SalPrinterBmp(BitmapBuffer* pBitmap);
+
+ virtual sal_uInt32 GetPaletteColor(sal_uInt32 nIdx) const override;
+ virtual sal_uInt32 GetPaletteEntryCount() const override;
+ virtual sal_uInt32 GetPixelRGB(sal_uInt32 nRow, sal_uInt32 nColumn) const override;
+ virtual sal_uInt8 GetPixelGray(sal_uInt32 nRow, sal_uInt32 nColumn) const override;
+ virtual sal_uInt8 GetPixelIdx(sal_uInt32 nRow, sal_uInt32 nColumn) const override;
+ virtual sal_uInt32 GetDepth() const override;
+};
+}
+
+SalPrinterBmp::SalPrinterBmp(BitmapBuffer* pBuffer)
+ : mpBmpBuffer(pBuffer)
+{
+ assert(mpBmpBuffer && "SalPrinterBmp::SalPrinterBmp () can't acquire Bitmap");
+
+ // calibrate scanline buffer
+ if (mpBmpBuffer->mnFormat & ScanlineFormat::TopDown)
+ {
+ mpScanAccess = mpBmpBuffer->mpBits;
+ mnScanOffset = mpBmpBuffer->mnScanlineSize;
+ }
+ else
+ {
+ mpScanAccess
+ = mpBmpBuffer->mpBits + (mpBmpBuffer->mnHeight - 1) * mpBmpBuffer->mnScanlineSize;
+ mnScanOffset = -mpBmpBuffer->mnScanlineSize;
+ }
+
+ // request read access to the pixels
+ mpFncGetPixel = BitmapReadAccess::GetPixelFunction(mpBmpBuffer->mnFormat);
+}
+
+sal_uInt32 SalPrinterBmp::GetDepth() const
+{
+ sal_uInt32 nDepth;
+
+ switch (mpBmpBuffer->mnBitCount)
+ {
+ case 1:
+ nDepth = 1;
+ break;
+
+ case 4:
+ case 8:
+ nDepth = 8;
+ break;
+
+ case 24:
+ case 32:
+ nDepth = 24;
+ break;
+
+ default:
+ nDepth = 1;
+ assert(false && "Error: unsupported bitmap depth in SalPrinterBmp::GetDepth()");
+ break;
+ }
+
+ return nDepth;
+}
+
+sal_uInt32 SalPrinterBmp::GetPaletteEntryCount() const
+{
+ return mpBmpBuffer->maPalette.GetEntryCount();
+}
+
+sal_uInt32 SalPrinterBmp::GetPaletteColor(sal_uInt32 nIdx) const
+{
+ BitmapColor aColor(mpBmpBuffer->maPalette[nIdx]);
+
+ return ((aColor.GetBlue()) & 0x000000ff) | ((aColor.GetGreen() << 8) & 0x0000ff00)
+ | ((aColor.GetRed() << 16) & 0x00ff0000);
+}
+
+sal_uInt32 SalPrinterBmp::GetPixelRGB(sal_uInt32 nRow, sal_uInt32 nColumn) const
+{
+ Scanline pScan = mpScanAccess + nRow * mnScanOffset;
+ BitmapColor aColor = mpFncGetPixel(pScan, nColumn, mpBmpBuffer->maColorMask);
+
+ if (!!mpBmpBuffer->maPalette)
+ GetPaletteColor(aColor.GetIndex());
+
+ return ((aColor.GetBlue()) & 0x000000ff) | ((aColor.GetGreen() << 8) & 0x0000ff00)
+ | ((aColor.GetRed() << 16) & 0x00ff0000);
+}
+
+sal_uInt8 SalPrinterBmp::GetPixelGray(sal_uInt32 nRow, sal_uInt32 nColumn) const
+{
+ Scanline pScan = mpScanAccess + nRow * mnScanOffset;
+ BitmapColor aColor = mpFncGetPixel(pScan, nColumn, mpBmpBuffer->maColorMask);
+
+ if (!!mpBmpBuffer->maPalette)
+ aColor = mpBmpBuffer->maPalette[aColor.GetIndex()];
+
+ return (aColor.GetBlue() * 28UL + aColor.GetGreen() * 151UL + aColor.GetRed() * 77UL) >> 8;
+}
+
+sal_uInt8 SalPrinterBmp::GetPixelIdx(sal_uInt32 nRow, sal_uInt32 nColumn) const
+{
+ Scanline pScan = mpScanAccess + nRow * mnScanOffset;
+ BitmapColor aColor = mpFncGetPixel(pScan, nColumn, mpBmpBuffer->maColorMask);
+
+ if (!!mpBmpBuffer->maPalette)
+ return aColor.GetIndex();
+ else
+ return 0;
+}
+
+GenPspGfxBackend::GenPspGfxBackend(psp::PrinterGfx* pPrinterGfx)
+ : m_pPrinterGfx(pPrinterGfx)
+{
+}
+
+GenPspGfxBackend::~GenPspGfxBackend() {}
+
+void GenPspGfxBackend::Init() {}
+void GenPspGfxBackend::freeResources() {}
+
+bool GenPspGfxBackend::setClipRegion(vcl::Region const& rRegion)
+{
+ // TODO: support polygonal clipregions here
+ RectangleVector aRectangles;
+ rRegion.GetRegionRectangles(aRectangles);
+ m_pPrinterGfx->BeginSetClipRegion();
+
+ for (auto const& rectangle : aRectangles)
+ {
+ const tools::Long nWidth(rectangle.GetWidth());
+ const tools::Long nHeight(rectangle.GetHeight());
+
+ if (nWidth && nHeight)
+ {
+ m_pPrinterGfx->UnionClipRegion(rectangle.Left(), rectangle.Top(), nWidth, nHeight);
+ }
+ }
+
+ m_pPrinterGfx->EndSetClipRegion();
+
+ return true;
+}
+
+void GenPspGfxBackend::ResetClipRegion() { m_pPrinterGfx->ResetClipRegion(); }
+
+sal_uInt16 GenPspGfxBackend::GetBitCount() const { return m_pPrinterGfx->GetBitCount(); }
+
+tools::Long GenPspGfxBackend::GetGraphicsWidth() const { return 0; }
+
+void GenPspGfxBackend::SetLineColor() { m_pPrinterGfx->SetLineColor(); }
+
+void GenPspGfxBackend::SetLineColor(Color nColor)
+{
+ psp::PrinterColor aColor(nColor.GetRed(), nColor.GetGreen(), nColor.GetBlue());
+ m_pPrinterGfx->SetLineColor(aColor);
+}
+
+void GenPspGfxBackend::SetFillColor() { m_pPrinterGfx->SetFillColor(); }
+
+void GenPspGfxBackend::SetFillColor(Color nColor)
+{
+ psp::PrinterColor aColor(nColor.GetRed(), nColor.GetGreen(), nColor.GetBlue());
+ m_pPrinterGfx->SetFillColor(aColor);
+}
+
+void GenPspGfxBackend::SetXORMode(bool bSet, bool /*bInvertOnly*/)
+{
+ SAL_WARN_IF(bSet, "vcl", "Error: PrinterGfx::SetXORMode() not implemented");
+}
+
+void GenPspGfxBackend::SetROPLineColor(SalROPColor /*nROPColor*/)
+{
+ SAL_WARN("vcl", "Error: PrinterGfx::SetROPLineColor() not implemented");
+}
+
+void GenPspGfxBackend::SetROPFillColor(SalROPColor /*nROPColor*/)
+{
+ SAL_WARN("vcl", "Error: PrinterGfx::SetROPFillColor() not implemented");
+}
+
+void GenPspGfxBackend::drawPixel(tools::Long nX, tools::Long nY)
+{
+ m_pPrinterGfx->DrawPixel(Point(nX, nY));
+}
+void GenPspGfxBackend::drawPixel(tools::Long nX, tools::Long nY, Color nColor)
+{
+ psp::PrinterColor aColor(nColor.GetRed(), nColor.GetGreen(), nColor.GetBlue());
+ m_pPrinterGfx->DrawPixel(Point(nX, nY), aColor);
+}
+
+void GenPspGfxBackend::drawLine(tools::Long nX1, tools::Long nY1, tools::Long nX2, tools::Long nY2)
+{
+ m_pPrinterGfx->DrawLine(Point(nX1, nY1), Point(nX2, nY2));
+}
+void GenPspGfxBackend::drawRect(tools::Long nX, tools::Long nY, tools::Long nWidth,
+ tools::Long nHeight)
+{
+ m_pPrinterGfx->DrawRect(tools::Rectangle(Point(nX, nY), Size(nWidth, nHeight)));
+}
+
+void GenPspGfxBackend::drawPolyLine(sal_uInt32 nPoints, const Point* pPointArray)
+{
+ m_pPrinterGfx->DrawPolyLine(nPoints, pPointArray);
+}
+
+void GenPspGfxBackend::drawPolygon(sal_uInt32 nPoints, const Point* pPointArray)
+{
+ // Point must be equal to Point! see include/vcl/salgtype.hxx
+ m_pPrinterGfx->DrawPolygon(nPoints, pPointArray);
+}
+
+void GenPspGfxBackend::drawPolyPolygon(sal_uInt32 nPoly, const sal_uInt32* pPoints,
+ const Point** pPointArray)
+{
+ m_pPrinterGfx->DrawPolyPolygon(nPoly, pPoints, pPointArray);
+}
+
+bool GenPspGfxBackend::drawPolyPolygon(const basegfx::B2DHomMatrix& /*rObjectToDevice*/,
+ const basegfx::B2DPolyPolygon&, double /*fTransparency*/)
+{
+ // TODO: implement and advertise OutDevSupportType::B2DDraw support
+ return false;
+}
+
+bool GenPspGfxBackend::drawPolyLine(const basegfx::B2DHomMatrix& /*rObjectToDevice*/,
+ const basegfx::B2DPolygon& /*rPolygon*/,
+ double /*fTransparency*/, double /*fLineWidth*/,
+ const std::vector<double>* /*pStroke*/, basegfx::B2DLineJoin,
+ css::drawing::LineCap, double /*fMiterMinimumAngle*/,
+ bool /*bPixelSnapHairline*/)
+{
+ // TODO: a PS printer can draw B2DPolyLines almost directly
+ return false;
+}
+
+bool GenPspGfxBackend::drawPolyLineBezier(sal_uInt32 nPoints, const Point* pPointArray,
+ const PolyFlags* pFlagArray)
+{
+ m_pPrinterGfx->DrawPolyLineBezier(nPoints, pPointArray, pFlagArray);
+ return true;
+}
+
+bool GenPspGfxBackend::drawPolygonBezier(sal_uInt32 nPoints, const Point* pPointArray,
+ const PolyFlags* pFlagArray)
+{
+ m_pPrinterGfx->DrawPolygonBezier(nPoints, pPointArray, pFlagArray);
+ return true;
+}
+
+bool GenPspGfxBackend::drawPolyPolygonBezier(sal_uInt32 nPoly, const sal_uInt32* pPoints,
+ const Point* const* pPointArray,
+ const PolyFlags* const* pFlagArray)
+{
+ // Point must be equal to Point! see include/vcl/salgtype.hxx
+ m_pPrinterGfx->DrawPolyPolygonBezier(nPoly, pPoints, pPointArray, pFlagArray);
+ return true;
+}
+
+void GenPspGfxBackend::copyArea(tools::Long /*nDestX*/, tools::Long /*nDestY*/,
+ tools::Long /*nSrcX*/, tools::Long /*nSrcY*/,
+ tools::Long /*nSrcWidth*/, tools::Long /*nSrcHeight*/,
+ bool /*bWindowInvalidate*/)
+{
+ OSL_FAIL("Error: PrinterGfx::CopyArea() not implemented");
+}
+
+void GenPspGfxBackend::copyBits(const SalTwoRect& /*rPosAry*/, SalGraphics* /*pSrcGraphics*/)
+{
+ OSL_FAIL("Error: PrinterGfx::CopyBits() not implemented");
+}
+
+void GenPspGfxBackend::drawBitmap(const SalTwoRect& rPosAry, const SalBitmap& rSalBitmap)
+{
+ tools::Rectangle aSrc(Point(rPosAry.mnSrcX, rPosAry.mnSrcY),
+ Size(rPosAry.mnSrcWidth, rPosAry.mnSrcHeight));
+
+ tools::Rectangle aDst(Point(rPosAry.mnDestX, rPosAry.mnDestY),
+ Size(rPosAry.mnDestWidth, rPosAry.mnDestHeight));
+
+ BitmapBuffer* pBuffer
+ = const_cast<SalBitmap&>(rSalBitmap).AcquireBuffer(BitmapAccessMode::Read);
+
+ SalPrinterBmp aBmp(pBuffer);
+ m_pPrinterGfx->DrawBitmap(aDst, aSrc, aBmp);
+
+ const_cast<SalBitmap&>(rSalBitmap).ReleaseBuffer(pBuffer, BitmapAccessMode::Read);
+}
+
+void GenPspGfxBackend::drawBitmap(const SalTwoRect& /*rPosAry*/, const SalBitmap& /*rSalBitmap*/,
+ const SalBitmap& /*rMaskBitmap*/)
+{
+ OSL_FAIL("Error: no PrinterGfx::DrawBitmap() for transparent bitmap");
+}
+
+void GenPspGfxBackend::drawMask(const SalTwoRect& /*rPosAry*/, const SalBitmap& /*rSalBitmap*/,
+ Color /*nMaskColor*/)
+{
+ OSL_FAIL("Error: PrinterGfx::DrawMask() not implemented");
+}
+
+std::shared_ptr<SalBitmap> GenPspGfxBackend::getBitmap(tools::Long /*nX*/, tools::Long /*nY*/,
+ tools::Long /*nWidth*/,
+ tools::Long /*nHeight*/)
+{
+ SAL_INFO("vcl", "Warning: PrinterGfx::GetBitmap() not implemented");
+ return nullptr;
+}
+
+Color GenPspGfxBackend::getPixel(tools::Long /*nX*/, tools::Long /*nY*/)
+{
+ OSL_FAIL("Warning: PrinterGfx::GetPixel() not implemented");
+ return Color();
+}
+
+void GenPspGfxBackend::invert(tools::Long /*nX*/, tools::Long /*nY*/, tools::Long /*nWidth*/,
+ tools::Long /*nHeight*/, SalInvert /*nFlags*/)
+{
+ OSL_FAIL("Warning: PrinterGfx::Invert() not implemented");
+}
+
+void GenPspGfxBackend::invert(sal_uInt32 /*nPoints*/, const Point* /*pPtAry*/, SalInvert /*nFlags*/)
+{
+ SAL_WARN("vcl", "Error: PrinterGfx::Invert() not implemented");
+}
+
+bool GenPspGfxBackend::drawEPS(tools::Long nX, tools::Long nY, tools::Long nWidth,
+ tools::Long nHeight, void* pPtr, sal_uInt32 nSize)
+{
+ return m_pPrinterGfx->DrawEPS(tools::Rectangle(Point(nX, nY), Size(nWidth, nHeight)), pPtr,
+ nSize);
+}
+
+bool GenPspGfxBackend::blendBitmap(const SalTwoRect& /*rPosAry*/, const SalBitmap& /*rBitmap*/)
+{
+ return false;
+}
+
+bool GenPspGfxBackend::blendAlphaBitmap(const SalTwoRect& /*rPosAry*/,
+ const SalBitmap& /*rSrcBitmap*/,
+ const SalBitmap& /*rMaskBitmap*/,
+ const SalBitmap& /*rAlphaBitmap*/)
+{
+ return false;
+}
+
+bool GenPspGfxBackend::drawAlphaBitmap(const SalTwoRect& /*rPosAry*/,
+ const SalBitmap& /*rSourceBitmap*/,
+ const SalBitmap& /*rAlphaBitmap*/)
+{
+ return false;
+}
+
+bool GenPspGfxBackend::drawTransformedBitmap(const basegfx::B2DPoint& /*rNull*/,
+ const basegfx::B2DPoint& /*rX*/,
+ const basegfx::B2DPoint& /*rY*/,
+ const SalBitmap& /*rSourceBitmap*/,
+ const SalBitmap* /*pAlphaBitmap*/, double /*fAlpha*/)
+{
+ return false;
+}
+
+bool GenPspGfxBackend::hasFastDrawTransformedBitmap() const { return false; }
+
+bool GenPspGfxBackend::drawAlphaRect(tools::Long /*nX*/, tools::Long /*nY*/, tools::Long /*nWidth*/,
+ tools::Long /*nHeight*/, sal_uInt8 /*nTransparency*/)
+{
+ return false;
+}
+
+bool GenPspGfxBackend::drawGradient(const tools::PolyPolygon& /*rPolygon*/,
+ const Gradient& /*rGradient*/)
+{
+ return false;
+}
+
+bool GenPspGfxBackend::implDrawGradient(basegfx::B2DPolyPolygon const& /*rPolyPolygon*/,
+ SalGradient const& /*rGradient*/)
+{
+ return false;
+}
+
+bool GenPspGfxBackend::supportsOperation(OutDevSupportType /*eType*/) const { return false; }
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/vcl/unx/generic/print/genpspgraphics.cxx b/vcl/unx/generic/print/genpspgraphics.cxx
index da5092da4809..0d255e2ec79d 100644
--- a/vcl/unx/generic/print/genpspgraphics.cxx
+++ b/vcl/unx/generic/print/genpspgraphics.cxx
@@ -30,7 +30,6 @@
#include <sys/stat.h>
#include <i18nlangtag/mslangid.hxx>
-#include <vcl/BitmapReadAccess.hxx>
#include <jobdata.hxx>
#include <vcl/settings.hxx>
#include <vcl/svapp.hxx>
@@ -49,157 +48,23 @@
#include <impfontmetricdata.hxx>
#include <PhysicalFontCollection.hxx>
#include <PhysicalFontFace.hxx>
-#include <salbmp.hxx>
#include <sallayout.hxx>
using namespace psp;
-// ----- Implementation of PrinterBmp by means of SalBitmap/BitmapBuffer ---------------
-
-namespace {
-
-class SalPrinterBmp : public psp::PrinterBmp
-{
-private:
- BitmapBuffer* mpBmpBuffer;
-
- FncGetPixel mpFncGetPixel;
- Scanline mpScanAccess;
- sal_PtrDiff mnScanOffset;
-
-public:
- explicit SalPrinterBmp (BitmapBuffer* pBitmap);
-
- virtual sal_uInt32 GetPaletteColor (sal_uInt32 nIdx) const override;
- virtual sal_uInt32 GetPaletteEntryCount () const override;
- virtual sal_uInt32 GetPixelRGB (sal_uInt32 nRow, sal_uInt32 nColumn) const override;
- virtual sal_uInt8 GetPixelGray (sal_uInt32 nRow, sal_uInt32 nColumn) const override;
- virtual sal_uInt8 GetPixelIdx (sal_uInt32 nRow, sal_uInt32 nColumn) const override;
- virtual sal_uInt32 GetDepth () const override;
-};
-
-}
-
-SalPrinterBmp::SalPrinterBmp (BitmapBuffer* pBuffer)
- : mpBmpBuffer(pBuffer)
-{
- assert(mpBmpBuffer && "SalPrinterBmp::SalPrinterBmp () can't acquire Bitmap");
-
- // calibrate scanline buffer
- if( mpBmpBuffer->mnFormat & ScanlineFormat::TopDown )
- {
- mpScanAccess = mpBmpBuffer->mpBits;
- mnScanOffset = mpBmpBuffer->mnScanlineSize;
- }
- else
- {
- mpScanAccess = mpBmpBuffer->mpBits
- + (mpBmpBuffer->mnHeight - 1) * mpBmpBuffer->mnScanlineSize;
- mnScanOffset = - mpBmpBuffer->mnScanlineSize;
- }
-
- // request read access to the pixels
- mpFncGetPixel = BitmapReadAccess::GetPixelFunction( mpBmpBuffer->mnFormat );
-}
-
-sal_uInt32
-SalPrinterBmp::GetDepth () const
-{
- sal_uInt32 nDepth;
-
- switch (mpBmpBuffer->mnBitCount)
- {
- case 1:
- nDepth = 1;
- break;
-
- case 4:
- case 8:
- nDepth = 8;
- break;
-
- case 24:
- case 32:
- nDepth = 24;
- break;
-
- default:
- nDepth = 1;
- assert(false && "Error: unsupported bitmap depth in SalPrinterBmp::GetDepth()");
- break;
- }
-
- return nDepth;
-}
-
-sal_uInt32
-SalPrinterBmp::GetPaletteEntryCount () const
-{
- return mpBmpBuffer->maPalette.GetEntryCount ();
-}
-
-sal_uInt32
-SalPrinterBmp::GetPaletteColor(sal_uInt32 nIdx) const
-{
- BitmapColor aColor(mpBmpBuffer->maPalette[nIdx]);
-
- return ((aColor.GetBlue()) & 0x000000ff)
- | ((aColor.GetGreen() << 8) & 0x0000ff00)
- | ((aColor.GetRed() << 16) & 0x00ff0000);
-}
-
-sal_uInt32
-SalPrinterBmp::GetPixelRGB (sal_uInt32 nRow, sal_uInt32 nColumn) const
-{
- Scanline pScan = mpScanAccess + nRow * mnScanOffset;
- BitmapColor aColor = mpFncGetPixel (pScan, nColumn, mpBmpBuffer->maColorMask);
-
- if (!!mpBmpBuffer->maPalette)
- GetPaletteColor(aColor.GetIndex());
-
- return ((aColor.GetBlue()) & 0x000000ff)
- | ((aColor.GetGreen() << 8) & 0x0000ff00)
- | ((aColor.GetRed() << 16) & 0x00ff0000);
-}
-
-sal_uInt8
-SalPrinterBmp::GetPixelGray (sal_uInt32 nRow, sal_uInt32 nColumn) const
-{
- Scanline pScan = mpScanAccess + nRow * mnScanOffset;
- BitmapColor aColor = mpFncGetPixel (pScan, nColumn, mpBmpBuffer->maColorMask);
-
- if (!!mpBmpBuffer->maPalette)
- aColor = mpBmpBuffer->maPalette[aColor.GetIndex()];
-
- return ( aColor.GetBlue() * 28UL
- + aColor.GetGreen() * 151UL
- + aColor.GetRed() * 77UL ) >> 8;
-
-}
-
-sal_uInt8
-SalPrinterBmp::GetPixelIdx (sal_uInt32 nRow, sal_uInt32 nColumn) const
-{
- Scanline pScan = mpScanAccess + nRow * mnScanOffset;
- BitmapColor aColor = mpFncGetPixel (pScan, nColumn, mpBmpBuffer->maColorMask);
-
- if (!!mpBmpBuffer->maPalette)
- return aColor.GetIndex();
- else
- return 0;
-}
-
/*******************************************************
- * GenPspGraphics *
+ * GenPspGraphics
*******************************************************/
+
GenPspGraphics::GenPspGraphics()
- : m_pJobData( nullptr ),
- m_pPrinterGfx( nullptr )
+ : m_pJobData( nullptr )
+ , m_pPrinterGfx( nullptr )
{
}
void GenPspGraphics::Init(psp::JobData* pJob, psp::PrinterGfx* pGfx)
{
+ m_pBackend = std::make_unique<GenPspGfxBackend>(pGfx);
m_pJobData = pJob;
m_pPrinterGfx = pGfx;
SetLayout( SalLayoutFlags::NONE );
@@ -223,166 +88,126 @@ void GenPspGraphics::GetResolution( sal_Int32 &rDPIX, sal_Int32 &rDPIY )
sal_uInt16 GenPspGraphics::GetBitCount() const
{
- return m_pPrinterGfx->GetBitCount();
+ return m_pBackend->GetBitCount();
}
tools::Long GenPspGraphics::GetGraphicsWidth() const
{
- return 0;
+ return m_pBackend->GetGraphicsWidth();
}
void GenPspGraphics::ResetClipRegion()
{
- m_pPrinterGfx->ResetClipRegion();
+ m_pBackend->ResetClipRegion();
}
bool GenPspGraphics::setClipRegion( const vcl::Region& i_rClip )
{
- // TODO: support polygonal clipregions here
- RectangleVector aRectangles;
- i_rClip.GetRegionRectangles(aRectangles);
- m_pPrinterGfx->BeginSetClipRegion();
-
- for (auto const& rectangle : aRectangles)
- {
- const tools::Long nW(rectangle.GetWidth());
-
- if(nW)
- {
- const tools::Long nH(rectangle.GetHeight());
-
- if(nH)
- {
- m_pPrinterGfx->UnionClipRegion(
- rectangle.Left(),
- rectangle.Top(),
- nW,
- nH);
- }
- }
- }
-
- m_pPrinterGfx->EndSetClipRegion();
-
- return true;
+ return m_pBackend->setClipRegion(i_rClip);
}
void GenPspGraphics::SetLineColor()
{
- m_pPrinterGfx->SetLineColor ();
+ m_pBackend->SetLineColor();
}
void GenPspGraphics::SetLineColor( Color nColor )
{
- psp::PrinterColor aColor (nColor.GetRed(),
- nColor.GetGreen(),
- nColor.GetBlue());
- m_pPrinterGfx->SetLineColor (aColor);
+ m_pBackend->SetLineColor(nColor);
}
void GenPspGraphics::SetFillColor()
{
- m_pPrinterGfx->SetFillColor ();
+ m_pBackend->SetFillColor();
}
void GenPspGraphics::SetFillColor( Color nColor )
{
- psp::PrinterColor aColor (nColor.GetRed(),
- nColor.GetGreen(),
- nColor.GetBlue());
- m_pPrinterGfx->SetFillColor (aColor);
+ m_pBackend->SetFillColor (nColor);
}
-void GenPspGraphics::SetROPLineColor( SalROPColor )
+void GenPspGraphics::SetROPLineColor(SalROPColor aColor)
{
- SAL_WARN( "vcl", "Error: PrinterGfx::SetROPLineColor() not implemented" );
+ m_pBackend->SetROPLineColor(aColor);
}
-void GenPspGraphics::SetROPFillColor( SalROPColor )
+void GenPspGraphics::SetROPFillColor( SalROPColor aColor)
{
- SAL_WARN( "vcl", "Error: PrinterGfx::SetROPFillColor() not implemented" );
+ m_pBackend->SetROPFillColor(aColor);
}
-void GenPspGraphics::SetXORMode( bool bSet, bool )
+void GenPspGraphics::SetXORMode(bool bSet, bool bInvertOnly)
{
- SAL_WARN_IF( bSet, "vcl", "Error: PrinterGfx::SetXORMode() not implemented" );
+ m_pBackend->SetXORMode(bSet, bInvertOnly);
}
void GenPspGraphics::drawPixel( tools::Long nX, tools::Long nY )
{
- m_pPrinterGfx->DrawPixel (Point(nX, nY));
+ m_pBackend->drawPixel(nX, nY);
}
void GenPspGraphics::drawPixel( tools::Long nX, tools::Long nY, Color nColor )
{
- psp::PrinterColor aColor (nColor.GetRed(),
- nColor.GetGreen(),
- nColor.GetBlue());
- m_pPrinterGfx->DrawPixel (Point(nX, nY), aColor);
+ m_pBackend->drawPixel(nX, nY, nColor);
}
void GenPspGraphics::drawLine( tools::Long nX1, tools::Long nY1, tools::Long nX2, tools::Long nY2 )
{
- m_pPrinterGfx->DrawLine (Point(nX1, nY1), Point(nX2, nY2));
+ m_pBackend->drawLine(nX1, nY1, nX2, nY2);
}
void GenPspGraphics::drawRect( tools::Long nX, tools::Long nY, tools::Long nDX, tools::Long nDY )
{
- m_pPrinterGfx->DrawRect (tools::Rectangle(Point(nX, nY), Size(nDX, nDY)));
+ m_pBackend->drawRect(nX, nY, nDX, nDY);
}
void GenPspGraphics::drawPolyLine( sal_uInt32 nPoints, const Point *pPtAry )
{
- m_pPrinterGfx->DrawPolyLine (nPoints, pPtAry);
+ m_pBackend->drawPolyLine(nPoints, pPtAry);
}
void GenPspGraphics::drawPolygon( sal_uInt32 nPoints, const Point* pPtAry )
{
- // Point must be equal to Point! see include/vcl/salgtype.hxx
- m_pPrinterGfx->DrawPolygon (nPoints, pPtAry);
+ m_pBackend->drawPolygon(nPoints, pPtAry);
}
void GenPspGraphics::drawPolyPolygon( sal_uInt32 nPoly,
const sal_uInt32 *pPoints,
const Point* *pPtAry )
{
- m_pPrinterGfx->DrawPolyPolygon (nPoly, pPoints, pPtAry);
+ m_pBackend->drawPolyPolygon (nPoly, pPoints, pPtAry);
}
bool GenPspGraphics::drawPolyPolygon(
- const basegfx::B2DHomMatrix& /*rObjectToDevice*/,
- const basegfx::B2DPolyPolygon&,
- double /*fTransparency*/)
+ const basegfx::B2DHomMatrix& rObjectToDevice,
+ const basegfx::B2DPolyPolygon& rPolyPolygon,
+ double fTransparency)
{
- // TODO: implement and advertise OutDevSupportType::B2DDraw support
- return false;
+ return m_pBackend->drawPolyPolygon(rObjectToDevice, rPolyPolygon, fTransparency);
}
bool GenPspGraphics::drawPolyLine(
- const basegfx::B2DHomMatrix& /* rObjectToDevice */,
- const basegfx::B2DPolygon&,
- double /*fTransparency*/,
- double /*fLineWidth*/,
- const std::vector< double >* /*pStroke*/, // MM01
- basegfx::B2DLineJoin /*eJoin*/,
- css::drawing::LineCap /*eLineCap*/,
- double /*fMiterMinimumAngle*/,
- bool /* bPixelSnapHairline */)
-{
- // TODO: a PS printer can draw B2DPolyLines almost directly
- return false;
+ const basegfx::B2DHomMatrix& rObjectToDevice,
+ const basegfx::B2DPolygon& rPolygon,
+ double fTransparency,
+ double fLineWidth,
+ const std::vector< double >* pStroke, // MM01
+ basegfx::B2DLineJoin eJoin,
+ css::drawing::LineCap eLineCap,
+ double fMiterMinimumAngle,
+ bool bPixelSnapHairline)
+{
+ return m_pBackend->drawPolyLine(rObjectToDevice, rPolygon, fTransparency, fLineWidth, pStroke, eJoin, eLineCap, fMiterMinimumAngle, bPixelSnapHairline);
}
bool GenPspGraphics::drawPolyLineBezier( sal_uInt32 nPoints, const Point* pPtAry, const PolyFlags* pFlgAry )
{
- m_pPrinterGfx->DrawPolyLineBezier (nPoints, pPtAry, pFlgAry);
- return true;
+ return m_pBackend->drawPolyLineBezier(nPoints, pPtAry, pFlgAry);
}
bool GenPspGraphics::drawPolygonBezier( sal_uInt32 nPoints, const Point* pPtAry, const PolyFlags* pFlgAry )
{
- m_pPrinterGfx->DrawPolygonBezier (nPoints, pPtAry, pFlgAry);
- return true;
+ return m_pBackend->drawPolygonBezier(nPoints, pPtAry, pFlgAry);
}
bool GenPspGraphics::drawPolyPolygonBezier( sal_uInt32 nPoly,
@@ -390,78 +215,62 @@ bool GenPspGraphics::drawPolyPolygonBezier( sal_uInt32 nPoly,
const Point* const* pPtAry,
const PolyFlags* const* pFlgAry )
{
- // Point must be equal to Point! see include/vcl/salgtype.hxx
- m_pPrinterGfx->DrawPolyPolygonBezier (nPoly, pPoints, pPtAry, pFlgAry);
- return true;
+ return m_pBackend->drawPolyPolygonBezier(nPoly, pPoints, pPtAry, pFlgAry);
}
-void GenPspGraphics::invert( sal_uInt32,
- const Point*,
- SalInvert )
+void GenPspGraphics::invert(tools::Long nX, tools::Long nY, tools::Long nWidth, tools::Long nHeight,
+ SalInvert nFlags)
{
- SAL_WARN( "vcl", "Error: PrinterGfx::Invert() not implemented" );
+ m_pBackend->invert(nX, nY, nWidth, nHeight, nFlags);
}
-bool GenPspGraphics::drawEPS( tools::Long nX, tools::Long nY, tools::Long nWidth, tools::Long nHeight, void* pPtr, sal_uInt32 nSize )
+void GenPspGraphics::invert(sal_uInt32 nPoints, const Point* pPtAry, SalInvert nFlags)
{
- return m_pPrinterGfx->DrawEPS( tools::Rectangle( Point( nX, nY ), Size( nWidth, nHeight ) ), pPtr, nSize );
+ m_pBackend->invert(nPoints, pPtAry, nFlags);
}
-void GenPspGraphics::copyBits( const SalTwoRect&,
- SalGraphics* )
+bool GenPspGraphics::drawEPS(tools::Long nX, tools::Long nY, tools::Long nWidth,
+ tools::Long nHeight, void* pPtr, sal_uInt32 nSize)
{
- OSL_FAIL( "Error: PrinterGfx::CopyBits() not implemented" );
+ return m_pBackend->drawEPS(nX, nY, nWidth, nHeight, pPtr, nSize);
}
-void GenPspGraphics::copyArea ( tools::Long,tools::Long,tools::Long,tools::Long,tools::Long,tools::Long,bool )
+void GenPspGraphics::copyBits(const SalTwoRect& rPosAry, SalGraphics* pSrcGraphics)
{
- OSL_FAIL( "Error: PrinterGfx::CopyArea() not implemented" );
+ m_pBackend->copyBits(rPosAry, pSrcGraphics);
}
-void GenPspGraphics::drawBitmap( const SalTwoRect& rPosAry, const SalBitmap& rSalBitmap )
+void GenPspGraphics::copyArea (tools::Long nDestX, tools::Long nDestY, tools::Long nSrcX,
+ tools::Long nSrcY, tools::Long nSrcWidth, tools::Long nSrcHeight,
+ bool bWindowInvalidate)
{
- tools::Rectangle aSrc (Point(rPosAry.mnSrcX, rPosAry.mnSrcY),
- Size(rPosAry.mnSrcWidth, rPosAry.mnSrcHeight));
- tools::Rectangle aDst (Point(rPosAry.mnDestX, rPosAry.mnDestY),
- Size(rPosAry.mnDestWidth, rPosAry.mnDestHeight));
-
- BitmapBuffer* pBuffer= const_cast<SalBitmap&>(rSalBitmap).AcquireBuffer(BitmapAccessMode::Read);
-
- SalPrinterBmp aBmp (pBuffer);
- m_pPrinterGfx->DrawBitmap (aDst, aSrc, aBmp);
-
- const_cast<SalBitmap&>(rSalBitmap).ReleaseBuffer (pBuffer, BitmapAccessMode::Read);
+ m_pBackend->copyArea(nDestX, nDestY, nSrcX, nSrcY, nSrcWidth, nSrcHeight, bWindowInvalidate);
}
-void GenPspGraphics::drawBitmap( const SalTwoRect&,
- const SalBitmap&,
- const SalBitmap& )
+void GenPspGraphics::drawBitmap(const SalTwoRect& rPosAry, const SalBitmap& rSalBitmap)
{
- OSL_FAIL("Error: no PrinterGfx::DrawBitmap() for transparent bitmap");
+ m_pBackend->drawBitmap(rPosAry, rSalBitmap);
}
-void GenPspGraphics::drawMask( const SalTwoRect&,
- const SalBitmap &,
- Color )
+void GenPspGraphics::drawBitmap(const SalTwoRect& rPosAry, const SalBitmap& rSalBitmap, const SalBitmap& rMaskBitmap)
{
- OSL_FAIL("Error: PrinterGfx::DrawMask() not implemented");
+
+ m_pBackend->drawBitmap(rPosAry, rSalBitmap, rMaskBitmap);
}
-std::shared_ptr<SalBitmap> GenPspGraphics::getBitmap( tools::Long, tools::Long, tools::Long, tools::Long )
+void GenPspGraphics::drawMask(const SalTwoRect& rPosAry, const SalBitmap& rSalBitmap, Color nMaskColor)
{
- SAL_INFO("vcl", "Warning: PrinterGfx::GetBitmap() not implemented");
- return nullptr;
+ m_pBackend->drawMask(rPosAry, rSalBitmap, nMaskColor);
}
-Color GenPspGraphics::getPixel( tools::Long, tools::Long )
+std::shared_ptr<SalBitmap> GenPspGraphics::getBitmap(tools::Long nX, tools::Long nY, tools::Long nWidth, tools::Long nHeight)
{
- OSL_FAIL("Warning: PrinterGfx::GetPixel() not implemented");
- return 0;
+ return m_pBackend->getBitmap(nX, nY, nWidth, nHeight);
}
-void GenPspGraphics::invert(tools::Long,tools::Long,tools::Long,tools::Long,SalInvert)
+Color GenPspGraphics::getPixel(tools::Long nX, tools::Long nY)
{
- OSL_FAIL("Warning: PrinterGfx::Invert() not implemented");
+ return m_pBackend->getPixel(nX, nY);
}
namespace {
@@ -812,43 +621,57 @@ void GenPspGraphics::AnnounceFonts( PhysicalFontCollection* pFontCollection, con
pFontCollection->Add( pFD.get() );
}
-bool GenPspGraphics::blendBitmap( const SalTwoRect&, const SalBitmap& )
+bool GenPspGraphics::blendBitmap(const SalTwoRect& rPosAry, const SalBitmap& rBitmap)
{
- return false;
+ return m_pBackend->blendBitmap(rPosAry, rBitmap);
}
-bool GenPspGraphics::blendAlphaBitmap( const SalTwoRect&, const SalBitmap&, const SalBitmap&, const SalBitmap& )
+bool GenPspGraphics::blendAlphaBitmap(const SalTwoRect& rPosAry, const SalBitmap& rSourceBitmap,
+ const SalBitmap& rMaskBitmap, const SalBitmap& rAlphaBitmap)
{
- return false;
+ return m_pBackend->blendAlphaBitmap(rPosAry, rSourceBitmap, rMaskBitmap, rAlphaBitmap);
}
-bool GenPspGraphics::drawAlphaBitmap( const SalTwoRect&,
- const SalBitmap&,
- const SalBitmap& )
+bool GenPspGraphics::drawAlphaBitmap(const SalTwoRect& rPosAry, const SalBitmap& rSourceBitmap,
+ const SalBitmap& rAlphaBitmap)
{
- return false;
+ return m_pBackend->drawAlphaBitmap(rPosAry, rSourceBitmap, rAlphaBitmap);
}
-bool GenPspGraphics::drawTransformedBitmap(
- const basegfx::B2DPoint&,
- const basegfx::B2DPoint&,
- const basegfx::B2DPoint&,
- const SalBitmap&,
- const SalBitmap*,
- double)
+bool GenPspGraphics::drawTransformedBitmap(const basegfx::B2DPoint& rNull,
+ const basegfx::B2DPoint& rX,
+ const basegfx::B2DPoint& rY,
+ const SalBitmap& rSourceBitmap,
+ const SalBitmap* pAlphaBitmap, double fAlpha)
{
- // here direct support for transformed bitmaps can be implemented
- return false;
+ return m_pBackend->drawTransformedBitmap(rNull, rX, rY, rSourceBitmap, pAlphaBitmap, fAlpha);
}
bool GenPspGraphics::hasFastDrawTransformedBitmap() const
{
- return false;
+ return m_pBackend->hasFastDrawTransformedBitmap();
}
-bool GenPspGraphics::drawAlphaRect( tools::Long, tools::Long, tools::Long, tools::Long, sal_uInt8 )
+bool GenPspGraphics::drawAlphaRect(tools::Long nX, tools::Long nY, tools::Long nWidth,
+ tools::Long nHeight, sal_uInt8 nTransparency)
{
- return false;
+ return m_pBackend->drawAlphaRect(nX, nY, nWidth, nHeight, nTransparency);
+}
+
+bool GenPspGraphics::drawGradient(const tools::PolyPolygon& rPolygon, const Gradient& rGradient)
+{
+ return m_pBackend->drawGradient(rPolygon, rGradient);
+}
+
+bool GenPspGraphics::implDrawGradient(basegfx::B2DPolyPolygon const& rPolyPolygon,
+ SalGradient const& rGradient)
+{
+ return m_pBackend->implDrawGradient(rPolyPolygon, rGradient);
+}
+
+bool GenPspGraphics::supportsOperation(OutDevSupportType eType) const
+{
+ return m_pBackend->supportsOperation(eType);
}
SystemGraphicsData GenPspGraphics::GetGraphicsData() const
@@ -885,11 +708,6 @@ css::uno::Any GenPspGraphics::GetNativeSurfaceHandle(cairo::SurfaceSharedPtr& /*
#endif // ENABLE_CAIRO_CANVAS
-bool GenPspGraphics::supportsOperation( OutDevSupportType ) const
-{
- return false;
-}
-
void GenPspGraphics::DoFreeEmbedFontData( const void* pData, tools::Long nLen )
{
if( pData )