diff options
Diffstat (limited to 'fake-quartz-cg.h')
-rw-r--r-- | fake-quartz-cg.h | 120 |
1 files changed, 120 insertions, 0 deletions
diff --git a/fake-quartz-cg.h b/fake-quartz-cg.h new file mode 100644 index 0000000..361a73c --- /dev/null +++ b/fake-quartz-cg.h @@ -0,0 +1,120 @@ +/* See LICENSE file for copyright and license details. */ +#ifndef LIBGAMMA_FAKE_QUARTZ_CG_H +#define LIBGAMMA_FAKE_QUARTZ_CG_H + +#ifndef FAKE_LIBGAMMA_METHOD_QUARTZ_CORE_GRAPHICS +# error Including fake-quartz-cg.h without FAKE_LIBGAMMA_METHOD_QUARTZ_CORE_GRAPHICS +#endif + + +#ifndef __GNUC__ +# define __attribute__(x) +#endif + + +/* This header file contains some capabilities of + * <CoreGraphics/CGDirectDisplay.h> and <CoreGraphics/CGError.h>, + * and can be used modify gamma ramps without Mac OS X and Quartz + * but with its API. + * + * The content of this file is based on the documentation found on: + * + * https://developer.apple.com/library/mac/documentation/GraphicsImaging/Reference/Quartz_Services_Ref/Reference/reference.html + * + * https://developer.apple.com/library/mac/documentation/CoreGraphics/Reference/CoreGraphicsConstantsRef/Reference/reference.html#//apple_ref/c/tdef/CGError */ + + +#include <stdint.h> + + +/** + * Numerical `typedef` for errors that occur in CoreGraphics calls + */ +typedef int32_t CGError; + +/** + * The call was successful + */ +#define kCGErrorSuccess 0 + +/** + * The data type that is used for the values in the gamma ramps + */ +typedef float CGGammaValue; + +/** + * The data type for display ID:s + */ +typedef uint32_t CGDirectDisplayID; + + +/** + * Get a list of all online displays on the system + * + * @param max_size The number of elements allocated for `displays_out` + * @param displays_out List ot fill with the ID for each online display on the system + * @param count_out Output parameter for the number of elements stored in `displays_out` + * if `displays_out` is too small to fit all display ID:s, + * `*count_out` will be `max_size` + * @return `kCGErrorSuccess` on success, and error number of failure + */ +CGError CGGetOnlineDisplayList(uint32_t, CGDirectDisplayID *restrict, uint32_t *restrict); + +/** + * Set the gamma ramps for a display + * + * @param display The ID of the display + * @param gamma_size The number of stops in gamma ramps + * @param red The gamma ramp for the red channel + * @param green The gamma ramp for the green channel + * @param blue The gamma ramp for the blue channel + * @return `kCGErrorSuccess` on success, and error number of failure + */ +CGError CGSetDisplayTransferByTable(CGDirectDisplayID, uint32_t, const CGGammaValue *, const CGGammaValue *, const CGGammaValue *); + +/** + * Get the current gamma ramps for a display + * + * @param display The ID of the display + * @param gamma_size The number of stops you have allocated for the gamma ramps + * @param red Table allocated for the gamma ramp for the red channel + * @param green Table allocated for the gamma ramp for the green channel + * @param blue Table allocated for the gamma ramp for the blue channel + * @param gamma_size_out Output parameter for the actual number of stops in the gamma ramps + * @return `kCGErrorSuccess` on success, and error number of failure + */ +CGError CGGetDisplayTransferByTable(CGDirectDisplayID, uint32_t, CGGammaValue *restrict, + CGGammaValue *restrict, CGGammaValue *restrict, uint32_t *restrict); + +/** + * Restore each display's gamma ramps to the settings in ColorSync + */ +void CGDisplayRestoreColorSyncSettings(void); + +/** + * Get the number of stops in the gamma ramps for a display + * + * @param display The ID of the display + * @return The number of stops in the gamma ramps + */ +uint32_t CGDisplayGammaTableCapacity(CGDirectDisplayID) __attribute__((const)); + + +/* The follow part most only be used when this module is used, + * it cannot be used when the real CoreGraphics is used. + * CoreGraphics does not have this function, it is added so + * that there is a way to cleanly close the X connection + * and free resources needed by this module. */ + +/** + * Release resources used by the backend + */ +void close_fake_quartz_cg(void); + + + +#ifndef __GNUC__ +# undef __attribute__ +#endif + +#endif |