diff options
author | Luboš Luňák <l.lunak@collabora.com> | 2019-10-16 16:08:51 +0200 |
---|---|---|
committer | Luboš Luňák <l.lunak@collabora.com> | 2019-11-27 09:55:08 +0100 |
commit | 6f5c85daa0e5073d87d1d7699bfa59af159686ca (patch) | |
tree | b26f513768e8ad6c825c9fa686a4d4b94f39a98e /vcl/win/gdi | |
parent | ef943999fbac70a28066093028e2192f8aba4c72 (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.cxx | 11 | ||||
-rw-r--r-- | vcl/win/gdi/gdiimpl.hxx | 6 | ||||
-rw-r--r-- | vcl/win/gdi/salfont.cxx | 7 | ||||
-rw-r--r-- | vcl/win/gdi/salgdi.cxx | 4 | ||||
-rw-r--r-- | vcl/win/gdi/salnativewidgets-luna.cxx | 5 | ||||
-rw-r--r-- | vcl/win/gdi/winlayout.cxx | 24 |
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()); |