Kaydet (Commit) dae61482 authored tarafından Tomaž Vajngerl's avatar Tomaž Vajngerl Kaydeden (comit) Tomaž Vajngerl

tdf#106265 ScopedHDC to clean-up hDC when rendering glyphs

Change-Id: I96ecf625126740610200c012c3c7002fac7e1548
Reviewed-on: https://gerrit.libreoffice.org/37347Tested-by: 's avatarJenkins <ci@libreoffice.org>
Reviewed-by: 's avatarTomaž Vajngerl <quikee@gmail.com>
üst c8e3a40a
/* -*- 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/.
*/
#ifndef INCLUDED_VCL_INC_WIN_SCOPEDHDC_HXX
#define INCLUDED_VCL_INC_WIN_SCOPEDHDC_HXX
class ScopedHDC
{
private:
HDC m_hDC;
public:
explicit ScopedHDC(HDC hDC)
: m_hDC(hDC)
{}
ScopedHDC(const ScopedHDC&) = delete;
ScopedHDC& operator=(const ScopedHDC&) = delete;
~ScopedHDC()
{
if (m_hDC)
DeleteDC(m_hDC);
}
HDC get() const
{
return m_hDC;
}
explicit operator bool() const
{
return m_hDC != nullptr;
}
};
#endif // INCLUDED_VCL_INC_WIN_SCOPEDHDC_HXX
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
......@@ -34,6 +34,7 @@
#include "sft.hxx"
#include "sallayout.hxx"
#include "CommonSalLayout.hxx"
#include "win/ScopedHDC.hxx"
#include <cstdio>
#include <cstdlib>
......@@ -57,17 +58,17 @@ bool WinFontInstance::CacheGlyphToAtlas(HDC hDC, HFONT hFont, int nGlyphIndex, S
{
OpenGLGlyphDrawElement aElement;
HDC hNewDC = CreateCompatibleDC(hDC);
if (hNewDC == nullptr)
ScopedHDC aHDC(CreateCompatibleDC(hDC));
if (!aHDC)
{
SAL_WARN("vcl.gdi", "CreateCompatibleDC failed: " << WindowsErrorString(GetLastError()));
return false;
}
HFONT hOrigFont = static_cast<HFONT>(SelectObject(hNewDC, hFont));
HFONT hOrigFont = static_cast<HFONT>(SelectObject(aHDC.get(), hFont));
if (hOrigFont == nullptr)
{
SAL_WARN("vcl.gdi", "SelectObject failed: " << WindowsErrorString(GetLastError()));
DeleteDC(hNewDC);
return false;
}
......@@ -76,10 +77,9 @@ bool WinFontInstance::CacheGlyphToAtlas(HDC hDC, HFONT hFont, int nGlyphIndex, S
if (!pTxt)
return false;
if (!pTxt->BindFont(hNewDC))
if (!pTxt->BindFont(aHDC.get()))
{
SAL_WARN("vcl.gdi", "Binding of font failed. The font might not be supported by Direct Write.");
DeleteDC(hNewDC);
return false;
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment