summaryrefslogtreecommitdiff
path: root/vcl/win/gdi
diff options
context:
space:
mode:
authorLuboš Luňák <l.lunak@collabora.com>2019-10-16 16:08:51 +0200
committerLuboš Luňák <l.lunak@collabora.com>2019-11-27 09:55:08 +0100
commit6f5c85daa0e5073d87d1d7699bfa59af159686ca (patch)
treeb26f513768e8ad6c825c9fa686a4d4b94f39a98e /vcl/win/gdi
parentef943999fbac70a28066093028e2192f8aba4c72 (diff)
basic implementation of Skia text drawing on Windows
Change-Id: If66e92aef04cd5bbeb22b8c5da65b7b9c77fed23
Diffstat (limited to 'vcl/win/gdi')
-rw-r--r--vcl/win/gdi/gdiimpl.cxx11
-rw-r--r--vcl/win/gdi/gdiimpl.hxx6
-rw-r--r--vcl/win/gdi/salfont.cxx7
-rw-r--r--vcl/win/gdi/salgdi.cxx4
-rw-r--r--vcl/win/gdi/salnativewidgets-luna.cxx5
-rw-r--r--vcl/win/gdi/winlayout.cxx24
6 files changed, 31 insertions, 26 deletions
diff --git a/vcl/win/gdi/gdiimpl.cxx b/vcl/win/gdi/gdiimpl.cxx
index f63258b83dd2..6b3cd9024f59 100644
--- a/vcl/win/gdi/gdiimpl.cxx
+++ b/vcl/win/gdi/gdiimpl.cxx
@@ -2576,15 +2576,4 @@ bool WinSalGraphicsImpl::drawGradient(const tools::PolyPolygon& /*rPolygon*/,
return false;
}
-bool WinSalGraphicsImpl::TryRenderCachedNativeControl(const ControlCacheKey& /*rControlCacheKey*/, int /*nX*/, int /*nY*/)
-{
- return false;
-}
-
-bool WinSalGraphicsImpl::RenderAndCacheNativeControl(CompatibleDC& /*rWhite*/, CompatibleDC& /*rBlack*/,
- int /*nX*/, int /*nY*/ , ControlCacheKey& /*aControlCacheKey*/)
-{
- return false;
-}
-
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/vcl/win/gdi/gdiimpl.hxx b/vcl/win/gdi/gdiimpl.hxx
index d7d37557565c..63eecf521750 100644
--- a/vcl/win/gdi/gdiimpl.hxx
+++ b/vcl/win/gdi/gdiimpl.hxx
@@ -238,12 +238,6 @@ public:
virtual bool drawGradient(const tools::PolyPolygon& rPolygon,
const Gradient& rGradient) override;
-
- virtual bool TryRenderCachedNativeControl(const ControlCacheKey& rControlCacheKey,
- int nX, int nY) override;
-
- virtual bool RenderAndCacheNativeControl(CompatibleDC& rWhite, CompatibleDC& rBlack,
- int nX, int nY , ControlCacheKey& aControlCacheKey) override;
};
#endif // INCLUDED_VCL_WIN_GDI_GDIIMPL_HXX
diff --git a/vcl/win/gdi/salfont.cxx b/vcl/win/gdi/salfont.cxx
index 5716b69a676b..ec122f48e41a 100644
--- a/vcl/win/gdi/salfont.cxx
+++ b/vcl/win/gdi/salfont.cxx
@@ -61,6 +61,8 @@
#include <impfontmetricdata.hxx>
#include <impglyphitem.hxx>
+#include <vcl/skia/SkiaHelper.hxx>
+
using namespace vcl;
static const int MAXFONTHEIGHT = 2048;
@@ -781,8 +783,9 @@ void ImplGetLogFontFromFontSelect( HDC hDC,
static BYTE nDefaultQuality = NONANTIALIASED_QUALITY;
if (nDefaultQuality == NONANTIALIASED_QUALITY)
{
- // TODO SKIA
- if (OpenGLWrapper::isVCLOpenGLEnabled())
+ if (SkiaHelper::isVCLSkiaEnabled())
+ nDefaultQuality = ANTIALIASED_QUALITY;
+ else if (OpenGLWrapper::isVCLOpenGLEnabled())
nDefaultQuality = ANTIALIASED_QUALITY;
else
nDefaultQuality = DEFAULT_QUALITY;
diff --git a/vcl/win/gdi/salgdi.cxx b/vcl/win/gdi/salgdi.cxx
index 29c6f83e11f6..4b47b10b8f22 100644
--- a/vcl/win/gdi/salgdi.cxx
+++ b/vcl/win/gdi/salgdi.cxx
@@ -549,6 +549,10 @@ void ImplClearHDCCache( SalData* pData )
std::unique_ptr< CompatibleDC > CompatibleDC::create(SalGraphics &rGraphics, int x, int y, int width, int height)
{
+#if HAVE_FEATURE_SKIA
+ if (SkiaHelper::isVCLSkiaEnabled())
+ return std::make_unique< SkiaCompatibleDC >( rGraphics, x, y, width, height );
+#endif
if (OpenGLHelper::isVCLOpenGLEnabled())
return std::make_unique< OpenGLCompatibleDC >( rGraphics, x, y, width, height );
return std::unique_ptr< CompatibleDC >( new CompatibleDC( rGraphics, x, y, width, height ));
diff --git a/vcl/win/gdi/salnativewidgets-luna.cxx b/vcl/win/gdi/salnativewidgets-luna.cxx
index 12338c69f34f..d23601238892 100644
--- a/vcl/win/gdi/salnativewidgets-luna.cxx
+++ b/vcl/win/gdi/salnativewidgets-luna.cxx
@@ -1159,8 +1159,9 @@ bool WinSalGraphics::drawNativeControl( ControlType nType,
tools::Rectangle cacheRect = rControlRegion;
Size keySize = cacheRect.GetSize();
- // TODO SKIA
- WinOpenGLSalGraphicsImpl* pImpl = dynamic_cast<WinOpenGLSalGraphicsImpl*>(mpImpl.get());
+ WinSalGraphicsImplBase* pImpl = dynamic_cast<WinSalGraphicsImplBase*>(mpImpl.get());
+ if( !pImpl->UseRenderNativeControl())
+ pImpl = nullptr;
// tdf#95618 - A few controls render outside the region they're given.
if (pImpl && nType == ControlType::TabItem)
diff --git a/vcl/win/gdi/winlayout.cxx b/vcl/win/gdi/winlayout.cxx
index 9305f38e9dd9..a3bc032c4844 100644
--- a/vcl/win/gdi/winlayout.cxx
+++ b/vcl/win/gdi/winlayout.cxx
@@ -18,6 +18,8 @@
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
*/
+#include <config_features.h>
+
#include <memory>
#include <osl/module.h>
#include <osl/file.h>
@@ -34,6 +36,11 @@
#include <win/saldata.hxx>
#include <win/wingdiimpl.hxx>
#include <outdev.h>
+#include <vcl/opengl/OpenGLHelper.hxx>
+#include <vcl/skia/SkiaHelper.hxx>
+#if HAVE_FEATURE_SKIA
+#include <skia/win/winlayout.hxx>
+#endif
#include <win/DWriteTextRenderer.hxx>
#include <win/scoped_gdi.hxx>
@@ -55,8 +62,16 @@
GlobalWinGlyphCache * GlobalWinGlyphCache::get()
{
SalData *data = GetSalData();
- if (!data->m_pGlobalWinGlyphCache) // TODO SKIA
- data->m_pGlobalWinGlyphCache.reset(new OpenGLGlobalWinGlyphCache);
+ if (!data->m_pGlobalWinGlyphCache)
+ {
+#if HAVE_FEATURE_SKIA
+ if (SkiaHelper::isVCLSkiaEnabled())
+ data->m_pGlobalWinGlyphCache.reset(new SkiaGlobalWinGlyphCache);
+ else
+#endif
+ if (OpenGLHelper::isVCLOpenGLEnabled())
+ data->m_pGlobalWinGlyphCache.reset(new OpenGLGlobalWinGlyphCache);
+ }
return data->m_pGlobalWinGlyphCache.get();
}
@@ -478,9 +493,8 @@ bool WinSalGraphics::DrawCachedGlyphs(const GenericSalLayout& rLayout)
COLORREF color = GetTextColor(hDC);
Color salColor(GetRValue(color), GetGValue(color), GetBValue(color));
- // TODO SKIA
- WinOpenGLSalGraphicsImpl *pImpl = dynamic_cast<WinOpenGLSalGraphicsImpl*>(mpImpl.get());
- if (!pImpl)
+ WinSalGraphicsImplBase *pImpl = dynamic_cast<WinSalGraphicsImplBase*>(mpImpl.get());
+ if (!pImpl->UseTextDraw())
return false;
WinFontInstance& rFont = *static_cast<WinFontInstance*>(&rLayout.GetFont());