/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */ /* * 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/. */ #pragma once #include #include #include #include template struct GDIDeleter { using pointer = H; void operator()(H h) { DeleterFunc(h); } }; template using ScopedGDI = std::unique_ptr>; using ScopedHBRUSH = ScopedGDI; using ScopedHRGN = ScopedGDI; using ScopedHDC = ScopedGDI; using ScopedHPEN = ScopedGDI; using ScopedHFONT = ScopedGDI; using ScopedHBITMAP = ScopedGDI; template class ScopedSelectedGDI { public: ScopedSelectedGDI(HDC hDC, typename ScopedH::pointer h) : m_hDC(hDC) , m_hSelectedH(h) , m_hOrigH(SelectorFunc(hDC, h)) { } ~ScopedSelectedGDI() { SelectorFunc(m_hDC, m_hOrigH); } private: HDC m_hDC; ScopedH m_hSelectedH; typename ScopedH::pointer m_hOrigH; }; using ScopedSelectedHPEN = ScopedSelectedGDI; using ScopedSelectedHFONT = ScopedSelectedGDI; using ScopedSelectedHBRUSH = ScopedSelectedGDI; template class ScopedCachedHDC { public: explicit ScopedCachedHDC(HBITMAP hBitmap) : m_hDC(ImplGetCachedDC(ID, hBitmap)) { } ~ScopedCachedHDC() { ImplReleaseCachedDC(ID); } HDC get() const { return m_hDC; } private: HDC m_hDC; }; /* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */