[Libreoffice-commits] core.git: Branch 'feature/opengl-vcl2' - 6 commits - vcl/headless vcl/inc vcl/opengl vcl/quartz vcl/source vcl/unx vcl/win
Markus Mohrhard
markus.mohrhard at googlemail.com
Mon Dec 1 01:32:35 PST 2014
vcl/headless/svpvd.cxx | 12 ------
vcl/inc/headless/svpvd.hxx | 5 ++
vcl/inc/opengl/win/gdiimpl.hxx | 7 +--
vcl/inc/opengl/x11/gdiimpl.hxx | 7 +--
vcl/inc/opengl/x11/salvd.hxx | 7 ++-
vcl/inc/openglgdiimpl.hxx | 11 +++--
vcl/inc/quartz/salvd.h | 4 +-
vcl/inc/salframe.hxx | 9 ++++
vcl/inc/salgeom.hxx | 12 ++++++
vcl/inc/salvd.hxx | 8 ++--
vcl/inc/unx/salgdi.h | 2 +
vcl/inc/unx/salvd.h | 9 ++--
vcl/inc/win/salgdi.h | 4 +-
vcl/inc/win/salvd.h | 7 +++
vcl/opengl/gdiimpl.cxx | 4 +-
vcl/opengl/win/gdiimpl.cxx | 54 +----------------------------
vcl/opengl/x11/gdiimpl.cxx | 35 ++----------------
vcl/opengl/x11/salvd.cxx | 7 ---
vcl/quartz/salvd.cxx | 22 ++++-------
vcl/source/gdi/virdev.cxx | 6 ---
vcl/unx/generic/gdi/salgdi.cxx | 8 ++++
vcl/unx/generic/gdi/salvd.cxx | 6 ---
vcl/unx/generic/gdi/x11cairotextrender.cxx | 36 ++++++++-----------
vcl/win/source/gdi/salgdi.cxx | 4 +-
vcl/win/source/gdi/salprn.cxx | 2 -
vcl/win/source/gdi/salvd.cxx | 26 ++++++++++---
vcl/win/source/window/salframe.cxx | 4 +-
27 files changed, 132 insertions(+), 186 deletions(-)
New commits:
commit 425c1ff2416db769cf7d92fe45c8b80682aeb084
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date: Sun Nov 30 18:48:33 2014 +0100
implement virtual methods for OSX vcl backend
Change-Id: Ifd7e06529cbf2e20bdd1560586420cda39c5a50c
diff --git a/vcl/inc/quartz/salvd.h b/vcl/inc/quartz/salvd.h
index e1d1d51..e3c68ab 100644
--- a/vcl/inc/quartz/salvd.h
+++ b/vcl/inc/quartz/salvd.h
@@ -61,6 +61,9 @@ public:
virtual SalGraphics* AcquireGraphics() SAL_OVERRIDE;
virtual void ReleaseGraphics( SalGraphics* pGraphics ) SAL_OVERRIDE;
virtual bool SetSize( long nNewDX, long nNewDY ) SAL_OVERRIDE;
+
+ virtual long GetWidth() const SAL_OVERRIDE;
+ virtual long GetHeight() const SAL_OVERRIDE;
};
#endif // INCLUDED_VCL_INC_QUARTZ_SALVD_H
diff --git a/vcl/quartz/salvd.cxx b/vcl/quartz/salvd.cxx
index a524c1e..ceb7e9b 100644
--- a/vcl/quartz/salvd.cxx
+++ b/vcl/quartz/salvd.cxx
@@ -277,4 +277,16 @@ bool AquaSalVirtualDevice::SetSize( long nDX, long nDY )
return (mxLayer != NULL);
}
+long AquaSalVirtualDevice::GetWidth() const
+{
+ const CGSize aSize = CGLayerGetSize( mxLayer );
+ return aSize.width;
+}
+
+long AquaSalVirtualDevice::GetHeight() const
+{
+ const CGSize aSize = CGLayerGetSize( mxLayer );
+ return aSize.height;
+}
+
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
commit 7d7de5073d13fc31abfb14f0d9b156cf52623412
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date: Sun Nov 30 01:33:41 2014 +0100
Werror, Wunused-variable
Change-Id: Ia361b1e37ad8b0daf49ff236c855a70d7d8bf8f4
diff --git a/vcl/opengl/gdiimpl.cxx b/vcl/opengl/gdiimpl.cxx
index 03ac781..f761ebf 100644
--- a/vcl/opengl/gdiimpl.cxx
+++ b/vcl/opengl/gdiimpl.cxx
@@ -1539,7 +1539,6 @@ void OpenGLSalGraphicsImpl::DoCopyBits( const SalTwoRect& rPosAry, OpenGLSalGrap
if( pImpl->mbOffscreen )
{
- Size aSize( pImpl->GetWidth(), pImpl->GetHeight() );
PreDraw();
DrawTexture( pImpl->maOffscreenTex, rPosAry );
PostDraw();
commit c28cc6b423dddcf3ad665676787c4e54ba248abd
Author: Michael Meeks <michael.meeks at collabora.com>
Date: Mon Dec 1 09:27:35 2014 +0000
vcl: re-init windows graphics impl after virtualdevice size change.
Change-Id: I6188617aa2cf2e237ec0724d1442564fbf3fe297
diff --git a/vcl/win/source/gdi/salvd.cxx b/vcl/win/source/gdi/salvd.cxx
index 6758b09..07d9ce8 100644
--- a/vcl/win/source/gdi/salvd.cxx
+++ b/vcl/win/source/gdi/salvd.cxx
@@ -26,6 +26,7 @@
#include <win/salinst.h>
#include <win/salgdi.h>
#include <win/salvd.h>
+#include "opengl/win/gdiimpl.hxx"
HBITMAP WinSalVirtualDevice::ImplCreateVirDevBitmap(HDC hDC, long nDX, long nDY, sal_uInt16 nBitCount, void **ppData)
{
@@ -213,6 +214,14 @@ bool WinSalVirtualDevice::SetSize( long nDX, long nDY )
SelectBitmap( getHDC(), hNewBmp );
DeleteBitmap( mhBmp );
mhBmp = hNewBmp;
+
+ if (mpGraphics)
+ {
+ WinOpenGLSalGraphicsImpl *pImpl;
+ pImpl = dynamic_cast< WinOpenGLSalGraphicsImpl * >(mpGraphics->getImpl());
+ if (pImpl)
+ pImpl->Init();
+ }
return TRUE;
}
else
commit 6c6a5dc0d358c7c895c9d05174cd8bba31478960
Author: Michael Meeks <michael.meeks at collabora.com>
Date: Sat Nov 29 22:55:31 2014 +0000
vcl: Consolidate size information around the GeometryProvider.
Change-Id: I1d764a8dba1850d2475f08e1014a085846f336c3
diff --git a/vcl/inc/opengl/win/gdiimpl.hxx b/vcl/inc/opengl/win/gdiimpl.hxx
index da1a278..30ade23 100644
--- a/vcl/inc/opengl/win/gdiimpl.hxx
+++ b/vcl/inc/opengl/win/gdiimpl.hxx
@@ -24,13 +24,10 @@ private:
WinSalGraphics& mrParent;
public:
- WinOpenGLSalGraphicsImpl(WinSalGraphics& rGraphics);
+ WinOpenGLSalGraphicsImpl(WinSalGraphics& rGraphics,
+ SalGeometryProvider *mpProvider);
protected:
- virtual GLfloat GetWidth() const SAL_OVERRIDE;
- virtual GLfloat GetHeight() const SAL_OVERRIDE;
- virtual bool IsOffscreen() const SAL_OVERRIDE;
-
virtual OpenGLContext* CreateWinContext() SAL_OVERRIDE;
virtual bool UseContext( OpenGLContext* pContext ) SAL_OVERRIDE;
virtual OpenGLContext* CreatePixmapContext() SAL_OVERRIDE;
diff --git a/vcl/inc/opengl/x11/gdiimpl.hxx b/vcl/inc/opengl/x11/gdiimpl.hxx
index 53ebe5b..d6ef010 100644
--- a/vcl/inc/opengl/x11/gdiimpl.hxx
+++ b/vcl/inc/opengl/x11/gdiimpl.hxx
@@ -26,10 +26,6 @@ public:
virtual ~X11OpenGLSalGraphicsImpl();
protected:
- GLfloat GetWidth() const SAL_OVERRIDE;
- GLfloat GetHeight() const SAL_OVERRIDE;
- bool IsOffscreen() const SAL_OVERRIDE;
-
virtual OpenGLContext* CreateWinContext() SAL_OVERRIDE;
virtual OpenGLContext* CreatePixmapContext() SAL_OVERRIDE;
virtual bool UseContext( OpenGLContext* pContext ) SAL_OVERRIDE;
@@ -38,6 +34,9 @@ public:
// implementation of X11GraphicsImpl
virtual void copyBits( const SalTwoRect& rPosAry, SalGraphics* pSrcGraphics ) SAL_OVERRIDE;
+
+ virtual void Init() SAL_OVERRIDE;
+
bool FillPixmapFromScreen( X11Pixmap* pPixmap, int nX, int nY ) SAL_OVERRIDE;
bool RenderPixmapToScreen( X11Pixmap* pPixmap, X11Pixmap* pMask, int nX, int nY ) SAL_OVERRIDE;
};
diff --git a/vcl/inc/openglgdiimpl.hxx b/vcl/inc/openglgdiimpl.hxx
index 043bd95..ad13335 100644
--- a/vcl/inc/openglgdiimpl.hxx
+++ b/vcl/inc/openglgdiimpl.hxx
@@ -20,6 +20,7 @@
#ifndef INCLUDED_VCL_OPENGLGDIIMPL_HXX
#define INCLUDED_VCL_OPENGLGDIIMPL_HXX
+#include "salgeom.hxx"
#include "salgdiimpl.hxx"
#include <vcl/dllapi.h>
@@ -38,6 +39,8 @@ class VCL_PLUGIN_PUBLIC OpenGLSalGraphicsImpl : public SalGraphicsImpl
protected:
OpenGLContext* mpContext;
+ /// Pointer to the SalFrame or SalVirtualDevice
+ SalGeometryProvider* mpParent;
OpenGLFramebuffer* mpFramebuffer;
// clipping
@@ -142,13 +145,13 @@ public:
public:
// get the width of the device
- virtual GLfloat GetWidth() const = 0;
+ GLfloat GetWidth() const { return mpParent ? mpParent->GetWidth() : 1; }
// get the height of the device
- virtual GLfloat GetHeight() const = 0;
+ GLfloat GetHeight() const { return mpParent ? mpParent->GetHeight() : 1; }
// check whether this instance is used for offscreen rendering
- virtual bool IsOffscreen() const = 0;
+ bool IsOffscreen() const { return mpParent ? mpParent->IsOffScreen() : true; }
// operations to do before painting
virtual void PreDraw();
@@ -170,7 +173,7 @@ protected:
virtual bool UseContext( OpenGLContext* pContext ) = 0;
public:
- OpenGLSalGraphicsImpl();
+ OpenGLSalGraphicsImpl(SalGeometryProvider* pParent);
virtual ~OpenGLSalGraphicsImpl ();
OpenGLContext* GetOpenGLContext();
diff --git a/vcl/inc/unx/salgdi.h b/vcl/inc/unx/salgdi.h
index edf47b1..29697a9 100644
--- a/vcl/inc/unx/salgdi.h
+++ b/vcl/inc/unx/salgdi.h
@@ -29,6 +29,7 @@
#include <vcl/metric.hxx>
#include "salgdi.hxx"
+#include "salgeom.hxx"
#include "sallayout.hxx"
#include "vclpluginapi.h"
@@ -132,6 +133,7 @@ public:
inline const SalDisplay* GetDisplay() const;
inline Display* GetXDisplay() const;
inline const SalVisual& GetVisual() const;
+ SalGeometryProvider *GetGeometryProvider() const;
inline Drawable GetDrawable() const { return hDrawable_; }
void SetDrawable( Drawable d, SalX11Screen nXScreen );
XRenderPictFormat* GetXRenderFormat() const;
diff --git a/vcl/inc/win/salgdi.h b/vcl/inc/win/salgdi.h
index 443c1c2..5a46cb1f 100644
--- a/vcl/inc/win/salgdi.h
+++ b/vcl/inc/win/salgdi.h
@@ -21,6 +21,7 @@
#define INCLUDED_VCL_INC_WIN_SALGDI_H
#include "sallayout.hxx"
+#include "salgeom.hxx"
#include "salgdi.hxx"
#include "outfont.hxx"
#include "PhysicalFontFace.hxx"
@@ -243,7 +244,8 @@ public:
HFONT ImplDoSetFont( FontSelectPattern* i_pFont, float& o_rFontScale, HFONT& o_rOldFont );
public:
- explicit WinSalGraphics(WinSalGraphics::Type eType, bool bScreen, HWND hWnd);
+ explicit WinSalGraphics(WinSalGraphics::Type eType, bool bScreen, HWND hWnd,
+ SalGeometryProvider *pProvider);
virtual ~WinSalGraphics();
SalGraphicsImpl* GetImpl() const SAL_OVERRIDE;
diff --git a/vcl/opengl/gdiimpl.cxx b/vcl/opengl/gdiimpl.cxx
index 28f7959..03ac781 100644
--- a/vcl/opengl/gdiimpl.cxx
+++ b/vcl/opengl/gdiimpl.cxx
@@ -63,8 +63,9 @@
((float) aColor.GetBlue()) * nFactor / 25500.0, \
1.0f )
-OpenGLSalGraphicsImpl::OpenGLSalGraphicsImpl()
+OpenGLSalGraphicsImpl::OpenGLSalGraphicsImpl(SalGeometryProvider* pParent)
: mpContext(0)
+ , mpParent(pParent)
, mpFramebuffer(NULL)
, mbUseScissor(false)
, mbUseStencil(false)
diff --git a/vcl/opengl/win/gdiimpl.cxx b/vcl/opengl/win/gdiimpl.cxx
index fb05005..caef995 100644
--- a/vcl/opengl/win/gdiimpl.cxx
+++ b/vcl/opengl/win/gdiimpl.cxx
@@ -13,7 +13,9 @@
#include <win/saldata.hxx>
#include <win/salframe.h>
-WinOpenGLSalGraphicsImpl::WinOpenGLSalGraphicsImpl(WinSalGraphics& rGraphics):
+WinOpenGLSalGraphicsImpl::WinOpenGLSalGraphicsImpl(WinSalGraphics& rGraphics,
+ SalGeometryProvider *mpProvider):
+ OpenGLSalGraphicsImpl(mpProvider),
mrParent(rGraphics)
{
}
@@ -24,56 +26,6 @@ void WinOpenGLSalGraphicsImpl::copyBits( const SalTwoRect& rPosAry, SalGraphics*
OpenGLSalGraphicsImpl::DoCopyBits( rPosAry, pImpl );
}
-GLfloat WinOpenGLSalGraphicsImpl::GetWidth() const
-{
- if( mrParent.gethWnd() && IsWindow( mrParent.gethWnd() ) )
- {
- WinSalFrame* pFrame = GetWindowPtr( mrParent.gethWnd() );
- if( pFrame )
- {
- if( pFrame->maGeometry.nWidth )
- return pFrame->maGeometry.nWidth;
- else
- {
- // TODO: perhaps not needed, maGeometry should always be up-to-date
- RECT aRect;
- GetClientRect( mrParent.gethWnd(), &aRect );
- return aRect.right;
- }
- }
- }
-
- return 1;
-}
-
-GLfloat WinOpenGLSalGraphicsImpl::GetHeight() const
-{
- if( mrParent.gethWnd() && IsWindow( mrParent.gethWnd() ) )
- {
- WinSalFrame* pFrame = GetWindowPtr( mrParent.gethWnd() );
- if( pFrame )
- {
- if( pFrame->maGeometry.nHeight )
- return pFrame->maGeometry.nHeight;
- else
- {
- // TODO: perhaps not needed, maGeometry should always be up-to-date
- RECT aRect;
- GetClientRect( mrParent.gethWnd(), &aRect );
- return aRect.bottom;
- }
- }
- }
-
- return 1;
-}
-
-bool WinOpenGLSalGraphicsImpl::IsOffscreen() const
-{
- WinSalFrame* pFrame = GetWindowPtr( mrParent.gethWnd() );
- return ( pFrame == NULL );
-}
-
OpenGLContext* WinOpenGLSalGraphicsImpl::CreateWinContext()
{
OpenGLContext* pContext = new OpenGLContext();
diff --git a/vcl/opengl/x11/gdiimpl.cxx b/vcl/opengl/x11/gdiimpl.cxx
index d4115fa..0b5fd75 100644
--- a/vcl/opengl/x11/gdiimpl.cxx
+++ b/vcl/opengl/x11/gdiimpl.cxx
@@ -26,7 +26,7 @@
#include <vcl/opengl/OpenGLHelper.hxx>
X11OpenGLSalGraphicsImpl::X11OpenGLSalGraphicsImpl( X11SalGraphics& rParent ):
- OpenGLSalGraphicsImpl(),
+ OpenGLSalGraphicsImpl(rParent.GetGeometryProvider()),
mrParent(rParent)
{
}
@@ -35,36 +35,11 @@ X11OpenGLSalGraphicsImpl::~X11OpenGLSalGraphicsImpl()
{
}
-GLfloat X11OpenGLSalGraphicsImpl::GetWidth() const
+void X11OpenGLSalGraphicsImpl::Init()
{
- if( mrParent.m_pFrame )
- return mrParent.m_pFrame->maGeometry.nWidth;
- else if( mrParent.m_pVDev )
- return static_cast< X11OpenGLSalVirtualDevice* >(mrParent.m_pVDev)->GetWidth();
- return 1;
-}
-
-GLfloat X11OpenGLSalGraphicsImpl::GetHeight() const
-{
- if( mrParent.m_pFrame )
- return mrParent.m_pFrame->maGeometry.nHeight;
- else if( mrParent.m_pVDev )
- return static_cast< X11OpenGLSalVirtualDevice* >(mrParent.m_pVDev)->GetHeight();
- return 1;
-}
-
-bool X11OpenGLSalGraphicsImpl::IsOffscreen() const
-{
- X11WindowProvider *pProvider = dynamic_cast<X11WindowProvider*>(mrParent.m_pFrame);
- if( pProvider )
- return false;
- else if( mrParent.m_pVDev )
- return true;
- else
- {
- SAL_WARN( "vcl.opengl", "what happened here?" );
- return true;
- }
+ // The m_pFrame and m_pVDev pointers are updated late in X11
+ mpParent = mrParent.GetGeometryProvider();
+ OpenGLSalGraphicsImpl::Init();
}
OpenGLContext* X11OpenGLSalGraphicsImpl::CreateWinContext()
diff --git a/vcl/unx/generic/gdi/salgdi.cxx b/vcl/unx/generic/gdi/salgdi.cxx
index d9eb7df..f3cb8a3 100644
--- a/vcl/unx/generic/gdi/salgdi.cxx
+++ b/vcl/unx/generic/gdi/salgdi.cxx
@@ -486,4 +486,12 @@ void X11SalGraphics::EndPaint()
return mpImpl->endPaint();
}
+SalGeometryProvider *X11SalGraphics::GetGeometryProvider() const
+{
+ if (m_pFrame)
+ return static_cast< SalGeometryProvider * >(m_pFrame);
+ else
+ return static_cast< SalGeometryProvider * >(m_pVDev);
+}
+
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/vcl/win/source/gdi/salgdi.cxx b/vcl/win/source/gdi/salgdi.cxx
index 4c36bb3..c2d644d 100644
--- a/vcl/win/source/gdi/salgdi.cxx
+++ b/vcl/win/source/gdi/salgdi.cxx
@@ -613,7 +613,7 @@ OpenGLTexture* OpenGLCompatibleDC::getTexture()
return new OpenGLTexture(maRects.mnSrcWidth, maRects.mnSrcHeight, GL_BGRA, GL_UNSIGNED_BYTE, reinterpret_cast<sal_uInt8*>(mpData));
}
-WinSalGraphics::WinSalGraphics(WinSalGraphics::Type eType, bool bScreen, HWND hWnd):
+WinSalGraphics::WinSalGraphics(WinSalGraphics::Type eType, bool bScreen, HWND hWnd, SalGeometryProvider *pProvider):
mhLocalDC(0),
mbPrinter(eType == WinSalGraphics::PRINTER),
mbVirDev(eType == WinSalGraphics::VIRTUAL_DEVICE),
@@ -634,7 +634,7 @@ WinSalGraphics::WinSalGraphics(WinSalGraphics::Type eType, bool bScreen, HWND hW
mnPenWidth(GSL_PEN_WIDTH)
{
if (OpenGLHelper::isVCLOpenGLEnabled() && !mbPrinter)
- mpImpl.reset(new WinOpenGLSalGraphicsImpl(*this));
+ mpImpl.reset(new WinOpenGLSalGraphicsImpl(*this, pProvider));
else
mpImpl.reset(new WinSalGraphicsImpl(*this));
diff --git a/vcl/win/source/gdi/salprn.cxx b/vcl/win/source/gdi/salprn.cxx
index ad22b4e..7822662 100644
--- a/vcl/win/source/gdi/salprn.cxx
+++ b/vcl/win/source/gdi/salprn.cxx
@@ -1045,7 +1045,7 @@ static HDC ImplCreateSalPrnIC( WinSalInfoPrinter* pPrinter, ImplJobSetup* pSetup
static WinSalGraphics* ImplCreateSalPrnGraphics( HDC hDC )
{
- WinSalGraphics* pGraphics = new WinSalGraphics(WinSalGraphics::PRINTER, false, 0);
+ WinSalGraphics* pGraphics = new WinSalGraphics(WinSalGraphics::PRINTER, false, 0, /* CHECKME */ NULL);
pGraphics->SetLayout( 0 );
pGraphics->setHDC(hDC);
pGraphics->InitGraphics();
diff --git a/vcl/win/source/gdi/salvd.cxx b/vcl/win/source/gdi/salvd.cxx
index cea8a76..6758b09 100644
--- a/vcl/win/source/gdi/salvd.cxx
+++ b/vcl/win/source/gdi/salvd.cxx
@@ -105,7 +105,7 @@ SalVirtualDevice* WinSalInstance::CreateVirtualDevice( SalGraphics* pSGraphics,
{
WinSalVirtualDevice* pVDev = new WinSalVirtualDevice;
SalData* pSalData = GetSalData();
- WinSalGraphics* pVirGraphics = new WinSalGraphics(WinSalGraphics::VIRTUAL_DEVICE, pGraphics->isScreen(), 0);
+ WinSalGraphics* pVirGraphics = new WinSalGraphics(WinSalGraphics::VIRTUAL_DEVICE, pGraphics->isScreen(), 0, pVDev);
pVirGraphics->SetLayout( 0 ); // by default no! mirroring for VirtualDevices, can be enabled with EnableRTL()
pVirGraphics->setHDC(hDC);
if ( pSalData->mhDitherPal && pVirGraphics->isScreen() )
@@ -115,8 +115,8 @@ SalVirtualDevice* WinSalInstance::CreateVirtualDevice( SalGraphics* pSGraphics,
}
pVirGraphics->InitGraphics();
- mnWidth = nDX;
- mnHeight = nDY;
+ pVDev->mnWidth = nDX;
+ pVDev->mnHeight = nDY;
pVDev->setHDC(hDC);
pVDev->mhBmp = hBmp;
if( hBmp )
@@ -207,6 +207,9 @@ bool WinSalVirtualDevice::SetSize( long nDX, long nDY )
HBITMAP hNewBmp = ImplCreateVirDevBitmap(getHDC(), nDX, nDY, mnBitCount, &pDummy);
if ( hNewBmp )
{
+ mnWidth = nDX;
+ mnHeight = nDY;
+
SelectBitmap( getHDC(), hNewBmp );
DeleteBitmap( mhBmp );
mhBmp = hNewBmp;
@@ -215,6 +218,8 @@ bool WinSalVirtualDevice::SetSize( long nDX, long nDY )
else
{
ImplWriteLastError( GetLastError(), "ImplCreateVirDevBitmap in SetSize" );
+ mnWidth = 0;
+ mnHeight = 0;
return FALSE;
}
}
diff --git a/vcl/win/source/window/salframe.cxx b/vcl/win/source/window/salframe.cxx
index d2fef8f..e7cc293 100644
--- a/vcl/win/source/window/salframe.cxx
+++ b/vcl/win/source/window/salframe.cxx
@@ -983,7 +983,7 @@ SalGraphics* WinSalFrame::AcquireGraphics()
if ( !mpGraphics2 )
{
- mpGraphics2 = new WinSalGraphics(WinSalGraphics::WINDOW, true, mhWnd);
+ mpGraphics2 = new WinSalGraphics(WinSalGraphics::WINDOW, true, mhWnd, this);
mpGraphics2->setHDC(0);
}
@@ -1014,7 +1014,7 @@ SalGraphics* WinSalFrame::AcquireGraphics()
HDC hDC = GetDC( mhWnd );
if ( hDC )
{
- mpGraphics = new WinSalGraphics(WinSalGraphics::WINDOW, true, mhWnd);
+ mpGraphics = new WinSalGraphics(WinSalGraphics::WINDOW, true, mhWnd, this);
mpGraphics->setHDC(hDC);
if ( pSalData->mhDitherPal )
{
commit 6c55e8ffe290c537aeabac8c280cd1dcefa6067d
Author: Michael Meeks <michael.meeks at collabora.com>
Date: Sat Nov 29 22:14:36 2014 +0000
vcl: create a GeometryProvider interface.
Implemented by both SalFrame and SalVirtualDevice, to help us to
un-tangle code that needs to operate on resources associated with
both of these without special cases.
Change-Id: If681a002647e20c57186577fe039d4ac85bba872
diff --git a/vcl/inc/headless/svpvd.hxx b/vcl/inc/headless/svpvd.hxx
index 752e91c..27dba60 100644
--- a/vcl/inc/headless/svpvd.hxx
+++ b/vcl/inc/headless/svpvd.hxx
@@ -51,6 +51,10 @@ public:
) SAL_OVERRIDE;
basebmp::BitmapDeviceSharedPtr getBitmapDevice() { return m_aDevice; }
+
+ // SalGeometryProvider
+ virtual long GetWidth() const SAL_OVERRIDE { return m_aDevice.get() ? m_aDevice->getSize().getX() : 0; }
+ virtual long GetHeight() const SAL_OVERRIDE { return m_aDevice.get() ? m_aDevice->getSize().getY() : 0; }
};
#endif // INCLUDED_VCL_INC_HEADLESS_SVPVD_HXX
diff --git a/vcl/inc/opengl/x11/salvd.hxx b/vcl/inc/opengl/x11/salvd.hxx
index 7696e04..7f5f1f5 100644
--- a/vcl/inc/opengl/x11/salvd.hxx
+++ b/vcl/inc/opengl/x11/salvd.hxx
@@ -36,10 +36,12 @@ public:
const SystemGraphicsData *pData );
virtual ~X11OpenGLSalVirtualDevice();
+ // SalGeometryProvider
+ virtual long GetWidth() const SAL_OVERRIDE { return mnWidth; }
+ virtual long GetHeight() const SAL_OVERRIDE { return mnHeight; }
+
SalDisplay * GetDisplay() const { return mpDisplay; }
sal_uInt16 GetDepth() const { return mnDepth; }
- int GetWidth() const { return mnWidth; }
- int GetHeight() const { return mnHeight; }
SalX11Screen GetXScreenNumber() const { return mnXScreen; }
virtual SalGraphics* AcquireGraphics() SAL_OVERRIDE;
diff --git a/vcl/inc/salframe.hxx b/vcl/inc/salframe.hxx
index f427c24..cfc41b7 100644
--- a/vcl/inc/salframe.hxx
+++ b/vcl/inc/salframe.hxx
@@ -96,7 +96,9 @@ typedef sal_uInt64 SalExtStyle;
struct SystemParentData;
-class VCL_PLUGIN_PUBLIC SalFrame : public vcl::DeletionNotifier
+class VCL_PLUGIN_PUBLIC SalFrame
+ : public vcl::DeletionNotifier
+ , public SalGeometryProvider
{
// the VCL window corresponding to this frame
vcl::Window* m_pWindow;
@@ -108,6 +110,11 @@ public:
SalFrameGeometry maGeometry;
+ // SalGeometryProvider
+ virtual long GetWidth() const SAL_OVERRIDE { return maGeometry.nWidth; }
+ virtual long GetHeight() const SAL_OVERRIDE { return maGeometry.nHeight; }
+ virtual bool IsOffScreen() const SAL_OVERRIDE { return false; }
+
// SalGraphics or NULL, but two Graphics for all SalFrames
// must be returned
virtual SalGraphics* AcquireGraphics() = 0;
diff --git a/vcl/inc/salgeom.hxx b/vcl/inc/salgeom.hxx
index 138a6d9..d54c58a 100644
--- a/vcl/inc/salgeom.hxx
+++ b/vcl/inc/salgeom.hxx
@@ -20,6 +20,8 @@
#ifndef INCLUDED_VCL_INC_SALGEOM_HXX
#define INCLUDED_VCL_INC_SALGEOM_HXX
+#include <vcl/dllapi.h>
+
typedef struct _SalFrameGeometry {
// screen position of upper left corner of drawable area in pixel
long nX, nY;
@@ -40,6 +42,16 @@ typedef struct _SalFrameGeometry {
{}
} SalFrameGeometry;
+/// Interface used to share logic on sizing between
+/// SalVirtualDevices and SalFrames
+class VCL_PLUGIN_PUBLIC SalGeometryProvider {
+public:
+ virtual ~SalGeometryProvider() {}
+ virtual long GetWidth() const = 0;
+ virtual long GetHeight() const = 0;
+ virtual bool IsOffScreen() const = 0;
+};
+
#endif // INCLUDED_VCL_INC_SALGEOM_HXX
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/vcl/inc/salvd.hxx b/vcl/inc/salvd.hxx
index 1397935..c07722f 100644
--- a/vcl/inc/salvd.hxx
+++ b/vcl/inc/salvd.hxx
@@ -22,15 +22,20 @@
#include <basebmp/bitmapdevice.hxx>
#include <vcl/dllapi.h>
+#include <salgeom.hxx>
class SalGraphics;
class VCL_PLUGIN_PUBLIC SalVirtualDevice
+ : public SalGeometryProvider
{
public:
SalVirtualDevice() {}
virtual ~SalVirtualDevice();
+ // SalGeometryProvider
+ virtual bool IsOffScreen() const SAL_OVERRIDE { return true; }
+
// SalGraphics or NULL, but two Graphics for all SalVirtualDevices
// must be returned
virtual SalGraphics* AcquireGraphics() = 0;
diff --git a/vcl/inc/unx/salvd.h b/vcl/inc/unx/salvd.h
index 9b520a7..0b08521 100644
--- a/vcl/inc/unx/salvd.h
+++ b/vcl/inc/unx/salvd.h
@@ -64,8 +64,6 @@ public:
}
Pixmap GetDrawable() const { return hDrawable_; }
sal_uInt16 GetDepth() const { return nDepth_; }
- int GetWidth() const { return nDX_; }
- int GetHeight() const { return nDY_; }
SalX11Screen GetXScreenNumber() const { return m_nXScreen; }
virtual SalGraphics* AcquireGraphics() SAL_OVERRIDE;
@@ -73,6 +71,10 @@ public:
/// Set new size, without saving the old contents
virtual bool SetSize( long nNewDX, long nNewDY ) SAL_OVERRIDE;
+
+ // SalGeometryProvider
+ virtual long GetWidth() const SAL_OVERRIDE { return nDX_; }
+ virtual long GetHeight() const SAL_OVERRIDE { return nDY_; }
};
#endif // INCLUDED_VCL_INC_UNX_SALVD_H
diff --git a/vcl/inc/win/salvd.h b/vcl/inc/win/salvd.h
index 9abb46b..6ecba54 100644
--- a/vcl/inc/win/salvd.h
+++ b/vcl/inc/win/salvd.h
@@ -43,6 +43,8 @@ public:
sal_uInt16 mnBitCount; // BitCount (0 or 1)
bool mbGraphics; // is Graphics used
bool mbForeignDC; // uses a foreign DC instead of a bitmap
+ long mnWidth;
+ long mnHeight;
WinSalVirtualDevice();
virtual ~WinSalVirtualDevice();
@@ -52,6 +54,10 @@ public:
virtual bool SetSize( long nNewDX, long nNewDY );
static HBITMAP ImplCreateVirDevBitmap(HDC hDC, long nDX, long nDY, sal_uInt16 nBitCount, void **ppDummy);
+
+ // SalGeometryProvider
+ virtual long GetWidth() const SAL_OVERRIDE { return mnWidth; }
+ virtual long GetHeight() const SAL_OVERRIDE { return mnHeight; }
};
diff --git a/vcl/opengl/x11/salvd.cxx b/vcl/opengl/x11/salvd.cxx
index 4fde8f8..7996cff 100644
--- a/vcl/opengl/x11/salvd.cxx
+++ b/vcl/opengl/x11/salvd.cxx
@@ -80,6 +80,7 @@ void X11OpenGLSalVirtualDevice::ReleaseGraphics( SalGraphics* )
mbGraphics = false;
}
+
bool X11OpenGLSalVirtualDevice::SetSize( long nDX, long nDY )
{
if( !nDX ) nDX = 1;
diff --git a/vcl/unx/generic/gdi/x11cairotextrender.cxx b/vcl/unx/generic/gdi/x11cairotextrender.cxx
index 2533107..0449b98 100644
--- a/vcl/unx/generic/gdi/x11cairotextrender.cxx
+++ b/vcl/unx/generic/gdi/x11cairotextrender.cxx
@@ -96,30 +96,26 @@ void X11CairoTextRender::clipRegion(cairo_t* cr)
size_t X11CairoTextRender::GetWidth() const
{
- if( mrParent.m_pFrame )
- return mrParent.m_pFrame->maGeometry.nWidth;
- else if( mrParent.m_pVDev )
- {
- long nWidth = 0;
- long nHeight = 0;
- mrParent.m_pVDev->GetSize( nWidth, nHeight );
- return nWidth;
- }
- return 1;
+ SalGeometryProvider *pProvider = mrParent.m_pFrame;
+ if( !pProvider )
+ pProvider = mrParent.m_pVDev;
+
+ if( pProvider )
+ return pProvider->GetWidth();
+ else
+ return 1;
}
size_t X11CairoTextRender::GetHeight() const
{
- if( mrParent.m_pFrame )
- return mrParent.m_pFrame->maGeometry.nHeight;
- else if( mrParent.m_pVDev )
- {
- long nWidth = 0;
- long nHeight = 0;
- mrParent.m_pVDev->GetSize( nWidth, nHeight );
- return nHeight;
- }
- return 1;
+ SalGeometryProvider *pProvider = mrParent.m_pFrame;
+ if( !pProvider )
+ pProvider = mrParent.m_pVDev;
+
+ if( pProvider )
+ return pProvider->GetHeight();
+ else
+ return 1;
}
void X11CairoTextRender::drawSurface(cairo_t* /*cr*/)
diff --git a/vcl/win/source/gdi/salvd.cxx b/vcl/win/source/gdi/salvd.cxx
index b5986b1..cea8a76 100644
--- a/vcl/win/source/gdi/salvd.cxx
+++ b/vcl/win/source/gdi/salvd.cxx
@@ -115,6 +115,8 @@ SalVirtualDevice* WinSalInstance::CreateVirtualDevice( SalGraphics* pSGraphics,
}
pVirGraphics->InitGraphics();
+ mnWidth = nDX;
+ mnHeight = nDY;
pVDev->setHDC(hDC);
pVDev->mhBmp = hBmp;
if( hBmp )
@@ -152,6 +154,8 @@ WinSalVirtualDevice::WinSalVirtualDevice()
mnBitCount = 0; // BitCount (0 or 1)
mbGraphics = FALSE; // is Graphics used
mbForeignDC = FALSE; // uses a foreign DC instead of a bitmap
+ mnWidth = 0;
+ mnHeight = 0;
}
WinSalVirtualDevice::~WinSalVirtualDevice()
commit 38511b4027c4268051925a5e5658cff489844b71
Author: Michael Meeks <michael.meeks at collabora.com>
Date: Sat Nov 29 21:42:47 2014 +0000
vcl: remove SalVirtualDevice::GetWidth
It is presumed that #i59315# is fixed already, and that this is no
longer necessary.
Change-Id: Ifb2f6550fac2481c4fec269b38d6e806753cb53e
diff --git a/vcl/headless/svpvd.cxx b/vcl/headless/svpvd.cxx
index dc280db..e2f9042 100644
--- a/vcl/headless/svpvd.cxx
+++ b/vcl/headless/svpvd.cxx
@@ -93,18 +93,6 @@ bool SvpSalVirtualDevice::SetSizeUsingBuffer( long nNewDX, long nNewDY,
return true;
}
-void SvpSalVirtualDevice::GetSize( long& rWidth, long& rHeight )
-{
- if( m_aDevice.get() )
- {
- B2IVector aDevSize( m_aDevice->getSize() );
- rWidth = aDevSize.getX();
- rHeight = aDevSize.getY();
- }
- else
- rWidth = rHeight = 0;
-}
-
#endif
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/vcl/inc/headless/svpvd.hxx b/vcl/inc/headless/svpvd.hxx
index f6a9cc5..752e91c 100644
--- a/vcl/inc/headless/svpvd.hxx
+++ b/vcl/inc/headless/svpvd.hxx
@@ -49,7 +49,6 @@ public:
const basebmp::RawMemorySharedArray &pBuffer,
const bool bTopDown
) SAL_OVERRIDE;
- virtual void GetSize( long& rWidth, long& rHeight ) SAL_OVERRIDE;
basebmp::BitmapDeviceSharedPtr getBitmapDevice() { return m_aDevice; }
};
diff --git a/vcl/inc/opengl/x11/salvd.hxx b/vcl/inc/opengl/x11/salvd.hxx
index 0d7143b..7696e04 100644
--- a/vcl/inc/opengl/x11/salvd.hxx
+++ b/vcl/inc/opengl/x11/salvd.hxx
@@ -47,7 +47,6 @@ public:
// Set new size, without saving the old contents
virtual bool SetSize( long nNewDX, long nNewDY ) SAL_OVERRIDE;
- virtual void GetSize( long& rWidth, long& rHeight ) SAL_OVERRIDE;
};
#endif // INCLUDED_VCL_INC_OPENGL_X11_SALVD_H
diff --git a/vcl/inc/quartz/salvd.h b/vcl/inc/quartz/salvd.h
index f48a19a..e1d1d51 100644
--- a/vcl/inc/quartz/salvd.h
+++ b/vcl/inc/quartz/salvd.h
@@ -61,7 +61,6 @@ public:
virtual SalGraphics* AcquireGraphics() SAL_OVERRIDE;
virtual void ReleaseGraphics( SalGraphics* pGraphics ) SAL_OVERRIDE;
virtual bool SetSize( long nNewDX, long nNewDY ) SAL_OVERRIDE;
- virtual void GetSize( long& rWidth, long& rHeight ) SAL_OVERRIDE;
};
#endif // INCLUDED_VCL_INC_QUARTZ_SALVD_H
diff --git a/vcl/inc/salvd.hxx b/vcl/inc/salvd.hxx
index f5a63ee..1397935 100644
--- a/vcl/inc/salvd.hxx
+++ b/vcl/inc/salvd.hxx
@@ -49,9 +49,6 @@ public:
// pBuffer (and bTopDown).
return SetSize( nNewDX, nNewDY );
}
-
- /// Get actual VDev size in pixel
- virtual void GetSize( long& rWidth, long& rHeight ) = 0;
};
#endif // INCLUDED_VCL_INC_SALVD_HXX
diff --git a/vcl/inc/unx/salvd.h b/vcl/inc/unx/salvd.h
index b1caa68..9b520a7 100644
--- a/vcl/inc/unx/salvd.h
+++ b/vcl/inc/unx/salvd.h
@@ -71,9 +71,8 @@ public:
virtual SalGraphics* AcquireGraphics() SAL_OVERRIDE;
virtual void ReleaseGraphics( SalGraphics* pGraphics ) SAL_OVERRIDE;
- // Set new size, without saving the old contents
+ /// Set new size, without saving the old contents
virtual bool SetSize( long nNewDX, long nNewDY ) SAL_OVERRIDE;
- virtual void GetSize( long& rWidth, long& rHeight ) SAL_OVERRIDE;
};
#endif // INCLUDED_VCL_INC_UNX_SALVD_H
diff --git a/vcl/inc/win/salvd.h b/vcl/inc/win/salvd.h
index 2c59f47..9abb46b 100644
--- a/vcl/inc/win/salvd.h
+++ b/vcl/inc/win/salvd.h
@@ -50,7 +50,6 @@ public:
virtual SalGraphics* AcquireGraphics();
virtual void ReleaseGraphics( SalGraphics* pGraphics );
virtual bool SetSize( long nNewDX, long nNewDY );
- virtual void GetSize( long& rWidth, long& rHeight );
static HBITMAP ImplCreateVirDevBitmap(HDC hDC, long nDX, long nDY, sal_uInt16 nBitCount, void **ppDummy);
};
diff --git a/vcl/opengl/x11/salvd.cxx b/vcl/opengl/x11/salvd.cxx
index b7c4eea..4fde8f8 100644
--- a/vcl/opengl/x11/salvd.cxx
+++ b/vcl/opengl/x11/salvd.cxx
@@ -93,10 +93,4 @@ bool X11OpenGLSalVirtualDevice::SetSize( long nDX, long nDY )
return true;
}
-void X11OpenGLSalVirtualDevice::GetSize( long& rWidth, long& rHeight )
-{
- rWidth = mnWidth;
- rHeight = mnHeight;
-}
-
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/vcl/quartz/salvd.cxx b/vcl/quartz/salvd.cxx
index f430908..a524c1e 100644
--- a/vcl/quartz/salvd.cxx
+++ b/vcl/quartz/salvd.cxx
@@ -277,20 +277,4 @@ bool AquaSalVirtualDevice::SetSize( long nDX, long nDY )
return (mxLayer != NULL);
}
-void AquaSalVirtualDevice::GetSize( long& rWidth, long& rHeight )
-{
- if( mxLayer )
- {
- const CGSize aSize = CGLayerGetSize( mxLayer );
- rWidth = static_cast<long>(aSize.width);
- rHeight = static_cast<long>(aSize.height);
- CG_TRACE( "CGLayerGetSize(" << mxLayer << ") = " << aSize << "(" << rWidth << "x" << rHeight << ")" );
- }
- else
- {
- rWidth = 0;
- rHeight = 0;
- }
-}
-
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/vcl/source/gdi/virdev.cxx b/vcl/source/gdi/virdev.cxx
index 2036523..dc8fd82 100644
--- a/vcl/source/gdi/virdev.cxx
+++ b/vcl/source/gdi/virdev.cxx
@@ -164,12 +164,6 @@ void VirtualDevice::ImplInitVirDev( const OutputDevice* pOutDev,
mbScreenComp = true;
mnAlphaDepth = -1;
- // #i59315# init vdev size from system object, when passed a
- // SystemGraphicsData. Otherwise, output size will always
- // incorrectly stay at (1,1)
- if( pData && mpVirDev )
- mpVirDev->GetSize(mnOutWidth,mnOutHeight);
-
if( mnBitCount < 8 )
SetAntialiasing( ANTIALIASING_DISABLE_TEXT );
diff --git a/vcl/unx/generic/gdi/salvd.cxx b/vcl/unx/generic/gdi/salvd.cxx
index 7967a4d..b4bcfa1 100644
--- a/vcl/unx/generic/gdi/salvd.cxx
+++ b/vcl/unx/generic/gdi/salvd.cxx
@@ -214,10 +214,4 @@ bool X11SalVirtualDevice::SetSize( long nDX, long nDY )
return true;
}
-void X11SalVirtualDevice::GetSize( long& rWidth, long& rHeight )
-{
- rWidth = GetWidth();
- rHeight = GetHeight();
-}
-
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/vcl/win/source/gdi/salvd.cxx b/vcl/win/source/gdi/salvd.cxx
index c85133d..b5986b1 100644
--- a/vcl/win/source/gdi/salvd.cxx
+++ b/vcl/win/source/gdi/salvd.cxx
@@ -216,10 +216,4 @@ bool WinSalVirtualDevice::SetSize( long nDX, long nDY )
}
}
-void WinSalVirtualDevice::GetSize( long& rWidth, long& rHeight )
-{
- rWidth = GetDeviceCaps( getHDC(), HORZRES );
- rHeight= GetDeviceCaps( getHDC(), VERTRES );
-}
-
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
More information about the Libreoffice-commits
mailing list