summaryrefslogtreecommitdiffstats
path: root/client/windows/platform_utils.h
diff options
context:
space:
mode:
Diffstat (limited to 'client/windows/platform_utils.h')
-rw-r--r--client/windows/platform_utils.h84
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
+