diff options
author | Yaniv Kamay <ykamay@redhat.com> | 2009-09-19 21:25:46 +0300 |
---|---|---|
committer | Yaniv Kamay <ykamay@redhat.com> | 2009-10-14 15:06:41 +0200 |
commit | c1b79eb035fa158fb2ac3bc8e559809611070016 (patch) | |
tree | 3348dd749a700dedf87c9b16fe8be77c62928df8 /client/windows/platform_utils.h | |
download | spice-c1b79eb035fa158fb2ac3bc8e559809611070016.tar.gz spice-c1b79eb035fa158fb2ac3bc8e559809611070016.tar.xz spice-c1b79eb035fa158fb2ac3bc8e559809611070016.zip |
fresh start
Diffstat (limited to 'client/windows/platform_utils.h')
-rw-r--r-- | client/windows/platform_utils.h | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/client/windows/platform_utils.h b/client/windows/platform_utils.h new file mode 100644 index 00000000..95b04fcb --- /dev/null +++ b/client/windows/platform_utils.h @@ -0,0 +1,84 @@ +/* + Copyright (C) 2009 Red Hat, Inc. + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. +*/ + +#ifndef _H_PLATFORM_UTILS +#define _H_PLATFORM_UTILS + +#define mb() __asm {lock add [esp], 0} + +template<class T, class FreeRes = FreeObject<T>, T invalid = NULL > +class AutoRes { +public: + AutoRes() : res (invalid) {} + AutoRes(T inRes) : res (inRes) {} + ~AutoRes() { set(invalid); } + + void set(T inRes) {if (res != invalid) free_res(res); res = inRes; } + T get() {return res;} + T release() {T tmp = res; res = invalid; return tmp; } + bool valid() { return res != invalid; } + +private: + AutoRes(const AutoRes&); + AutoRes& operator = (const AutoRes&); + +private: + T res; + FreeRes free_res; +}; + +class Delete_DC { +public: + void operator () (HDC dc) { DeleteDC(dc);} +}; + +typedef AutoRes<HDC, Delete_DC> AutoDC; + +class Delete_Object { +public: + void operator () (HGDIOBJ obj) { DeleteObject(obj);} +}; +typedef AutoRes<HGDIOBJ, Delete_Object> AutoGDIObject; + +class DeleteOGLContext { +public: + void operator () (HGLRC ctx) { wglDeleteContext(ctx);} +}; + +typedef AutoRes<HGLRC, DeleteOGLContext> AutoOGLCtx; + +HDC create_compatible_dc(); +HBITMAP get_bitmap_res(int id); +HBITMAP get_alpha_bitmap_res(int id); + +class WindowDC { +public: + WindowDC(HWND window) : _window (window), _dc (GetDC(window)) {} + ~WindowDC() { ReleaseDC(_window, _dc);} + HDC operator * () { return _dc;} + +private: + HWND _window; + HDC _dc; +}; + +typedef AutoRes<HDC, Delete_DC> AutoReleaseDC; + +const char* sys_err_to_str(int error); + +#endif + |