diff options
Diffstat (limited to 'fake-w32-gdi.h')
-rw-r--r-- | fake-w32-gdi.h | 248 |
1 files changed, 248 insertions, 0 deletions
diff --git a/fake-w32-gdi.h b/fake-w32-gdi.h new file mode 100644 index 0000000..bcc2fa9 --- /dev/null +++ b/fake-w32-gdi.h @@ -0,0 +1,248 @@ +/* See LICENSE file for copyright and license details. */ +#ifndef LIBGAMMA_FAKE_W32_GDI_H +#define LIBGAMMA_FAKE_W32_GDI_H + +#ifndef FAKE_LIBGAMMA_METHOD_W32_GDI +# error Including fake-w32-gdi.h without FAKE_LIBGAMMA_METHOD_W32_GDI +#endif + + +#ifndef __GNUC__ +# define __attribute__(x) +#endif + +#include <stdint.h> + + +/** + * One of the Windows `typedef`:s for unsigned 16-bit integer + * This is the one used in these functions + * + * @see http://msdn.microsoft.com/en-us/library/windows/desktop/aa383751(v=vs.85).aspx#WORD + */ +typedef uint16_t WORD; + +/** + * One of the Windows `typedef`:s for unsigned 32-bit integer + * This is the one used in these functions + * + * @see http://msdn.microsoft.com/en-us/library/windows/desktop/aa383751(v=vs.85).aspx#DWORD + */ +typedef uint32_t DWORD; + +/** + * One of the Windows `typedef` for booleanic values, the `int` variant + * + * @see http://msdn.microsoft.com/en-us/library/windows/desktop/aa383751(v=vs.85).aspx#BOOL + */ +typedef int BOOL; + +/** + * Windows `typedef` for a device context (the 'h' stands for 'handle') + * + * @see http://msdn.microsoft.com/en-us/library/windows/desktop/aa383751(v=vs.85).aspx#HDC + */ +typedef void *HDC; + +/** + * Windows `typedef` for a window (the 'h' stands for 'handle') + * + * @see http://msdn.microsoft.com/en-us/library/windows/desktop/aa383751(v=vs.85).aspx#HWND + */ +typedef void *HWND; + +/** + * One of the Windows `typedef`:s for `void *`, a generic pointer + * + * @see http://msdn.microsoft.com/en-us/library/windows/desktop/aa383751(v=vs.85).aspx#LPVOID + */ +typedef void *LPVOID; + +/** + * A silly Windows `typedef` for a `const char *`, a constant string + * + * It is also defined as NUL-terminated, but so are all C-strings + * and it makes no difference. However if `UNICODE` were to be defined + * it would be `const wchar_t *`. + * + * @see http://msdn.microsoft.com/en-us/library/windows/desktop/aa383751(v=vs.85).aspx#LPCTSTR + */ +typedef const char *LPCTSTR; + +/** + * Even more silly. A Windows `typedef` for either `wchar_t` or + * `char`, depending on whether `UNICODE` is defined (we will + * assume `UNICODE` is not definied because that is just silly) + * + * @see http://msdn.microsoft.com/en-us/library/windows/desktop/aa383751(v=vs.85).aspx#TCHAR + */ +typedef char TCHAR; + +/** + * Apperently we need `TRUE` to be defined to understand code, + * at least in Windows... + * + * @see http://msdn.microsoft.com/en-us/library/windows/desktop/aa383751(v=vs.85).aspx#BOOL + */ +#define TRUE 1 + +/** + * Apperently we need `FALSE` to be defined to understand code, + * at least in Windows... + * + * @see http://msdn.microsoft.com/en-us/library/windows/desktop/aa383751(v=vs.85).aspx#BOOL + */ +#define FALSE 0 + + + +/** + * Get the device context for a window or the entire screen + * + * @param hWnd The window, `NULL` for the entire screen + * @return The device context + * @see http://msdn.microsoft.com/en-us/library/windows/desktop/dd144871(v=vs.85).aspx + */ +HDC GetDC(HWND); + +/** + * Free a device context + * + * @param hWnd The window whose device context is `hDC`, `NULL` for the entire screen + * @param hDC The device context to free + * @return Whether the call was successful + * @see http://msdn.microsoft.com/en-us/library/windows/desktop/dd162920(v=vs.85).aspx + */ +int ReleaseDC(HWND, HDC); + + +/** + * Get information (capabilities) for a device context + * + * @param hDC The device context + * @param nIndex The information to retrieve, may be `COLORMGMTCAPS` + * @return The details of the queried information, can return `CM_GAMMA_RAMP` + * if `nIndex` is `COLORMGMTCAPS` + * @see http://msdn.microsoft.com/en-us/library/windows/desktop/dd144877(v=vs.85).aspx + */ +int GetDeviceCaps(HDC, int) __attribute__((const)); + +/** + * Colour management capabilities + * + * @see http://msdn.microsoft.com/en-us/library/windows/desktop/dd144877(v=vs.85).aspx + */ +#define COLORMGMTCAPS 1 + +/** + * Colour management capabilities: has gamma ramps + * + * @see http://msdn.microsoft.com/en-us/library/windows/desktop/dd144877(v=vs.85).aspx + */ +#define CM_GAMMA_RAMP 1 + + +/** + * Set the gamma ramps for a device + * + * @param hDC The device context + * @param lpRamp The gamma ramps joined in the order: red, green, blue; + * this is a `WORD *` casted to `void *` + * @return Whether the call was successful + * @see http://msdn.microsoft.com/en-us/library/windows/desktop/dd372194(v=vs.85).aspx + */ +BOOL SetDeviceGammaRamp(HDC, LPVOID restrict); + +/** + * Get the current gamma ramps for a device + * + * @param hDC The device context + * @param lpRamp The output for the gamma ramps joined in the order: red, green, blue + * This is a `WORD *` casted to `void *` + * @return Whether the call was successful + * @see http://msdn.microsoft.com/en-us/library/windows/desktop/dd316946(v=vs.85).aspx + */ +BOOL GetDeviceGammaRamp(HDC, LPVOID restrict); + + +/** + * Get the context for a device + * + * @param lpszDriver The driver or a display device, use "DISPLAY" if you want a display + * @param lpszDevice The name of the device. If you want a display use can use the member + * name `DeviceName` in the third parameter, an output parameter, of + * `EnumDisplayDevices`. + * @param lpszOutput We will always use `NULL` here + * @param lpInitData We will always use `NULL` here; this should actually by a `const DEVMODE *` + * @return The context for the device + * @see http://msdn.microsoft.com/en-us/library/windows/desktop/dd183490(v=vs.85).aspx + */ +HDC CreateDC(LPCTSTR restrict, LPCTSTR restrict, LPCTSTR restrict, const void *restrict); + +/** + * This macro does not seem to have an official documentation that is correct + * + * @see http://msdn.microsoft.com/en-us/library/windows/desktop/dd183490(v=vs.85).aspx + * @see http://msdn.microsoft.com/en-us/library/windows/desktop/dd374074(v=vs.85).aspx + */ +#define TEXT(X) ((LPCTSTR)(X)) + + +/** + * Information about a display device + * + * @see http://msdn.microsoft.com/en-us/library/windows/desktop/dd183569(v=vs.85).aspx + */ +typedef struct { + /** + * Set this to `sizeof(DISPLAY_DEVICE)` + */ + DWORD cb; + + /** + * The name of the device + */ + TCHAR DeviceName[32]; + + /** + * The status of the device, can include `DISPLAY_DEVICE_ACTIVE` + */ + DWORD StateFlags; + +} DISPLAY_DEVICE; + +/** + * Appearently we are incapable of putting asterisks at the + * end of types names, so istead we preprend them with 'P' + * + * @see http://msdn.microsoft.com/en-us/library/windows/desktop/dd183569(v=vs.85).aspx + */ +typedef DISPLAY_DEVICE *PDISPLAY_DEVICE; + +/** + * The monitor is "on" + * + * @see http://msdn.microsoft.com/en-us/library/windows/desktop/dd183569(v=vs.85).aspx + */ +#define DISPLAY_DEVICE_ACTIVE 1 + +/** + * Get a display device by its name or index + * + * @param lpDevice The name of the device, use `NULL` to base the call on `iDevNum` instead + * @param iDevNum The index of the device + * @param lpDisplayDevice Output for the found device + * @param dwFlags Flags, we will always use zero + * @return Whether the call was successful; zero is also returned if `iDevNum` + * is greater than the largest device index on the system + * @see http://msdn.microsoft.com/en-us/library/windows/desktop/dd162609(v=vs.85).aspx + */ +BOOL EnumDisplayDevices(LPCTSTR restrict, DWORD, PDISPLAY_DEVICE restrict, DWORD) + + + +#ifndef __GNUC__ +# undef __attribute__ +#endif + +#endif |