[Libreoffice-commits] core.git: Branch 'feature/opengl-vcl' - vcl/inc vcl/Library_vcl.mk vcl/source

Markus Mohrhard markus.mohrhard at collabora.co.uk
Tue Oct 21 00:02:30 PDT 2014


 vcl/Library_vcl.mk            |    1 
 vcl/inc/salgdiimpl.hxx        |  196 ++++++++++++++++++++++++++++++++++++++++++
 vcl/source/gdi/salgdiimpl.cxx |   26 +++++
 3 files changed, 223 insertions(+)

New commits:
commit 68a6645f6d625bcff56ea93294754a9a695b01e0
Author: Markus Mohrhard <markus.mohrhard at collabora.co.uk>
Date:   Tue Oct 21 08:48:02 2014 +0200

    add Impl version for SalGraphics
    
    Using an Impl pattern here allows us to switch the rendering in each
    plugin without introducing any additional plugins.
    
    The SalGraphics subclass will just forward the rendering call to the
    Impl which can either be the normal native one or the OpenGL one.
    
    Change-Id: Id234c60335305bfb42bf3d2b912f02d1f542bd06

diff --git a/vcl/Library_vcl.mk b/vcl/Library_vcl.mk
index dea1d8d..52a224c 100644
--- a/vcl/Library_vcl.mk
+++ b/vcl/Library_vcl.mk
@@ -273,6 +273,7 @@ $(eval $(call gb_Library_add_exception_objects,vcl,\
     vcl/source/gdi/region \
     vcl/source/gdi/regionband \
     vcl/source/gdi/salgdilayout \
+    vcl/source/gdi/salgdiimpl \
     vcl/source/gdi/sallayout \
     vcl/source/gdi/salmisc \
     vcl/source/gdi/salnativewidgets-none \
diff --git a/vcl/inc/salgdiimpl.hxx b/vcl/inc/salgdiimpl.hxx
new file mode 100644
index 0000000..58d6c1a
--- /dev/null
+++ b/vcl/inc/salgdiimpl.hxx
@@ -0,0 +1,196 @@
+/* -*- 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/.
+ *
+ * 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 <rtl/ustring.hxx>
+
+#include <tools/solar.h>
+
+#include <vcl/salgtype.hxx>
+#include <vcl/region.hxx>
+#include <vcl/salnativewidgets.hxx>
+
+#include <com/sun/star/drawing/LineCap.hpp>
+
+class SalGraphics;
+class SalBitmap;
+
+class SalGraphicsImpl
+{
+public:
+
+    virtual ~SalGraphicsImpl();
+
+    virtual bool setClipRegion( const vcl::Region& ) = 0;
+    //
+    // get the depth of the device
+    virtual sal_uInt16          GetBitCount() const = 0;
+
+    // get the width of the device
+    virtual long                GetGraphicsWidth() const = 0;
+
+    // set the clip region to empty
+    virtual void                ResetClipRegion() = 0;
+
+    // set the line color to transparent (= don't draw lines)
+
+    virtual void                SetLineColor() = 0;
+
+    // set the line color to a specific color
+    virtual void                SetLineColor( SalColor nSalColor ) = 0;
+
+    // set the fill color to transparent (= don't fill)
+    virtual void                SetFillColor() = 0;
+
+    // set the fill color to a specific color, shapes will be
+    // filled accordingly
+    virtual void                SetFillColor( SalColor nSalColor ) = 0;
+
+    // enable/disable XOR drawing
+    virtual void                SetXORMode( bool bSet, bool bInvertOnly ) = 0;
+
+    // set line color for raster operations
+    virtual void                SetROPLineColor( SalROPColor nROPColor ) = 0;
+
+    // set fill color for raster operations
+    virtual void                SetROPFillColor( SalROPColor nROPColor ) = 0;
+
+    // draw --> LineColor and FillColor and RasterOp and ClipRegion
+    virtual void drawPixel( long nX, long nY ) = 0;
+    virtual void drawPixel( long nX, long nY, SalColor nSalColor ) = 0;
+
+    virtual void drawLine( long nX1, long nY1, long nX2, long nY2 ) = 0;
+
+    virtual void drawRect( long nX, long nY, long nWidth, long nHeight ) = 0;
+
+    virtual void drawPolyLine( sal_uInt32 nPoints, const SalPoint* pPtAry ) = 0;
+
+    virtual void drawPolygon( sal_uInt32 nPoints, const SalPoint* pPtAry ) = 0;
+
+    virtual void drawPolyPolygon( sal_uInt32 nPoly, const sal_uInt32* pPoints, PCONSTSALPOINT* pPtAry ) = 0;
+    virtual bool drawPolyPolygon( const ::basegfx::B2DPolyPolygon&, double fTransparency ) = 0;
+
+    virtual bool drawPolyLine(
+                const ::basegfx::B2DPolygon&,
+                double fTransparency,
+                const ::basegfx::B2DVector& rLineWidths,
+                basegfx::B2DLineJoin,
+                com::sun::star::drawing::LineCap) = 0;
+
+    virtual bool drawPolyLineBezier(
+                sal_uInt32 nPoints,
+                const SalPoint* pPtAry,
+                const sal_uInt8* pFlgAry ) = 0;
+
+    virtual bool drawPolygonBezier(
+                sal_uInt32 nPoints,
+                const SalPoint* pPtAry,
+                const sal_uInt8* pFlgAry ) = 0;
+
+    virtual bool drawPolyPolygonBezier(
+                sal_uInt32 nPoly,
+                const sal_uInt32* pPoints,
+                const SalPoint* const* pPtAry,
+                const sal_uInt8* const* pFlgAry ) = 0;
+
+    // CopyArea --> No RasterOp, but ClipRegion
+    virtual void copyArea(
+                long nDestX, long nDestY,
+                long nSrcX, long nSrcY,
+                long nSrcWidth, long nSrcHeight,
+                sal_uInt16 nFlags ) = 0;
+
+    // CopyBits and DrawBitmap --> RasterOp and ClipRegion
+    // CopyBits() --> pSrcGraphics == NULL, then CopyBits on same Graphics
+    virtual void copyBits( const SalTwoRect& rPosAry, SalGraphics* pSrcGraphics ) = 0;
+
+    virtual void drawBitmap( const SalTwoRect& rPosAry, const SalBitmap& rSalBitmap ) = 0;
+
+    virtual void drawBitmap(
+                const SalTwoRect& rPosAry,
+                const SalBitmap& rSalBitmap,
+                SalColor nTransparentColor ) = 0;
+
+    virtual void drawBitmap(
+                const SalTwoRect& rPosAry,
+                const SalBitmap& rSalBitmap,
+                const SalBitmap& rMaskBitmap ) = 0;
+
+    virtual void drawMask(
+                const SalTwoRect& rPosAry,
+                const SalBitmap& rSalBitmap,
+                SalColor nMaskColor ) = 0;
+
+    virtual SalBitmap* getBitmap( long nX, long nY, long nWidth, long nHeight ) = 0;
+
+    virtual SalColor getPixel( long nX, long nY ) = 0;
+
+    // invert --> ClipRegion (only Windows or VirDevs)
+    virtual void invert(
+                long nX, long nY,
+                long nWidth, long nHeight,
+                SalInvert nFlags) = 0;
+
+    virtual void invert( sal_uInt32 nPoints, const SalPoint* pPtAry, SalInvert nFlags ) = 0;
+
+    virtual bool drawEPS(
+                long nX, long nY,
+                long nWidth, long nHeight,
+                void* pPtr,
+                sal_uLong nSize ) = 0;
+
+    /** Render bitmap with alpha channel
+
+        @param rSourceBitmap
+        Source bitmap to blit
+
+        @param rAlphaBitmap
+        Alpha channel to use for blitting
+
+        @return true, if the operation succeeded, and false
+        otherwise. In this case, clients should try to emulate alpha
+        compositing themselves
+     */
+    virtual bool drawAlphaBitmap(
+                const SalTwoRect&,
+                const SalBitmap& rSourceBitmap,
+                const SalBitmap& rAlphaBitmap ) = 0;
+
+    /** draw transformed bitmap (maybe with alpha) where Null, X, Y define the coordinate system */
+    virtual bool drawTransformedBitmap(
+                const basegfx::B2DPoint& rNull,
+                const basegfx::B2DPoint& rX,
+                const basegfx::B2DPoint& rY,
+                const SalBitmap& rSourceBitmap,
+                const SalBitmap* pAlphaBitmap) = 0;
+
+    /** Render solid rectangle with given transparency
+
+        @param nTransparency
+        Transparency value (0-255) to use. 0 blits and opaque, 255 a
+        fully transparent rectangle
+     */
+    virtual bool drawAlphaRect(
+                    long nX, long nY,
+                    long nWidth, long nHeight,
+                    sal_uInt8 nTransparency ) = 0;
+
+
+};
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/vcl/source/gdi/salgdiimpl.cxx b/vcl/source/gdi/salgdiimpl.cxx
new file mode 100644
index 0000000..96ba382
--- /dev/null
+++ b/vcl/source/gdi/salgdiimpl.cxx
@@ -0,0 +1,26 @@
+/* -*- 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/.
+ *
+ * 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 "salgdiimpl.hxx"
+
+SalGraphicsImpl::~SalGraphicsImpl()
+{
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */


More information about the Libreoffice-commits mailing list