aboutsummaryrefslogtreecommitdiff
path: root/c/common.h
diff options
context:
space:
mode:
authorJohn Ankarström <john@ankarstrom.se>2022-08-03 21:57:27 +0200
committerJohn Ankarström <john@ankarstrom.se>2022-08-03 21:57:27 +0200
commit04daecdd21e86e7556a9462380096530228cd6ca (patch)
treeed2a8134532607687c165c4a13d6f6c020c42d18 /c/common.h
parent32bb4696396e48521614d00e5b8f6e6586822f31 (diff)
downloadEpisodeBrowser-04daecdd21e86e7556a9462380096530228cd6ca.tar.gz
Split common.h to util.h, wcharptr.h and win.h.
Diffstat (limited to 'c/common.h')
-rw-r--r--c/common.h146
1 files changed, 0 insertions, 146 deletions
diff --git a/c/common.h b/c/common.h
deleted file mode 100644
index 70c2c32..0000000
--- a/c/common.h
+++ /dev/null
@@ -1,146 +0,0 @@
-#ifndef COMMON_H
-#define COMMON_H
-
-#include <memory>
-#include <optional>
-#include <windows.h>
-
-int EBMessageBox(const wchar_t* wszText, const wchar_t* wszCaption, unsigned uType);
-int GetRelativeCursorPos(HWND hWnd, POINT* pt);
-
-/* wchar_ptr: Simple wrapper for wide C strings. */
-struct wchar_ptr
-{
- /* Named copy constructors (expensive). */
- static wchar_ptr from_narrow(const char* buf, int cp = CP_UTF8);
- static wchar_ptr copy(const wchar_t* s);
-
- /* Non-explicit copies are disabled. */
- wchar_ptr(wchar_ptr& other) = delete;
- wchar_ptr& operator=(wchar_ptr& other) = delete;
-
- wchar_ptr() noexcept;
- ~wchar_ptr();
- operator wchar_t*() noexcept;
-
- wchar_ptr(wchar_t* s) noexcept;
- wchar_ptr& operator=(wchar_t* s) noexcept;
-
- wchar_ptr(wchar_ptr&& other) noexcept;
- wchar_ptr& operator=(wchar_ptr&& other) noexcept;
-
- /* Return pointer, releasing ownership. */
- wchar_t *release() noexcept;
-private:
- wchar_t* m_p = nullptr;
-};
-
-/* Win32Error: Exception for Windows API errors. */
-struct Win32Error : public std::exception
-{
- Win32Error();
- Win32Error(DWORD code);
- ~Win32Error();
- const char* what() const noexcept override;
- const wchar_t* What() const noexcept;
- DWORD code;
-private:
- char* m_szMsg = NULL;
- wchar_t* m_wszMsg = NULL;
-};
-
-/* Library: Wrapper for loading and freeing dynamically linked libraries. */
-struct Library
-{
- static std::optional<Library> Maybe(const wchar_t* lib);
- Library(const wchar_t* lib);
- ~Library();
- template <class T> T* GetProcAddress(const char* szProc);
-private:
- Library(HMODULE hModule);
- HMODULE m_hModule;
-};
-
-template <typename T>
-T* Library::GetProcAddress(const char* const szProc)
-{
- return (T*)(void*)::GetProcAddress(m_hModule, szProc);
-}
-
-template<size_t N, typename... T>
-inline int Swprintf(wchar_t (&buf)[N], const wchar_t* const fmt, T... xs)
-{
- return _snwprintf_s(buf, N, _TRUNCATE, fmt, xs...);
-}
-
-/* Variable template for caching values from GetSystemMetrics. */
-template <int I>
-auto Metric = GetSystemMetrics(I);
-
-/* Check result of Windows API call, throwing error on NULL. */
-template <typename T>
-inline T require(const T x)
-{
- if (!x) throw Win32Error();
- return x;
-}
-
-/* Check result of Windows API call, showing a warning on NULL. */
-template <typename T>
-inline T prefer(const T x)
-{
- if (!x) {
- EBMessageBox(Win32Error().What(), L"System Error", MB_ICONWARNING);
- return (T)NULL;
- }
- return x;
-}
-
-/* Return integer scaled for current DPI. */
-inline int Dpi(const int i)
-{
- extern int g_dpi;
- return MulDiv(i, g_dpi, 96);
-}
-
-inline int Cmp(const int a, const int b)
-{
- if (a == b) return 0;
- if (a > b) return 1;
- return -1;
-}
-
-/* Get window rectangle relative to parent. */
-inline BOOL GetRelativeRect(const HWND hWnd, RECT* const rr)
-{
- if (!GetClientRect(hWnd, rr)) return 0;
- return MapWindowPoints(hWnd, GetParent(hWnd), (POINT*)rr, 2);
-}
-
-inline BOOL SetWindowRect(const HWND hWnd,
- const long left, const long top, const long right, const long bottom)
-{
- return MoveWindow(hWnd,
- left, top,
- right-left, bottom-top,
- TRUE);
-}
-
-inline BOOL SetWindowRect(const HWND hWnd, const RECT r)
-{
- return SetWindowRect(hWnd, r.left, r.top, r.right, r.bottom);
-}
-
-inline BOOL EBIsThemeActive()
-{
- extern BOOL (*IsThemeActive)();
- return IsThemeActive? IsThemeActive(): 0;
-}
-
-inline BOOL EBSetWindowTheme(HWND hWnd, LPCWSTR pszSubAppName, LPCWSTR pszSubIdList)
-{
- extern BOOL (*SetWindowTheme)(HWND, LPCWSTR, LPCWSTR);
- return SetWindowTheme? SetWindowTheme(hWnd, pszSubAppName, pszSubIdList): 0;
-}
-
-#endif