aboutsummaryrefslogtreecommitdiffstats
path: root/fake-quartz-cg.h
diff options
context:
space:
mode:
Diffstat (limited to 'fake-quartz-cg.h')
-rw-r--r--fake-quartz-cg.h120
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