aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/include-libcoopgamma.h19
-rw-r--r--src/libcoopgamma_native.pyx.gpp246
2 files changed, 265 insertions, 0 deletions
diff --git a/src/include-libcoopgamma.h b/src/include-libcoopgamma.h
new file mode 100644
index 0000000..19d83e4
--- /dev/null
+++ b/src/include-libcoopgamma.h
@@ -0,0 +1,19 @@
+/**
+ * pylibcoopgamma -- Python library for interfacing with cooperative gamma servers
+ * Copyright (C) 2016 Mattias Andrée (maandree@kth.se)
+ *
+ * This library 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 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This library 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 library. If not, see <http://www.gnu.org/licenses/>.
+ */
+#include <libcoopgamma.h>
+
diff --git a/src/libcoopgamma_native.pyx.gpp b/src/libcoopgamma_native.pyx.gpp
new file mode 100644
index 0000000..c3a5a2b
--- /dev/null
+++ b/src/libcoopgamma_native.pyx.gpp
@@ -0,0 +1,246 @@
+# -*- python -*-
+'''
+pylibcoopgamma -- Python library for interfacing with cooperative gamma servers
+Copyright (C) 2016 Mattias Andrée (maandree@kth.se)
+1;2802;0c
+This library 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 3 of the License, or
+(at your option) any later version.
+
+This library 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 library. If not, see <http://www.gnu.org/licenses/>.
+'''
+cimport cython
+
+from libc.stddef cimport size_t
+from libc.stdlib cimport malloc, free
+from libc.stdint cimport int64_t, uint8_t, uint16_t, uint32_t, uint64_t, intptr_t
+from libc.errno cimport errno
+
+
+
+ctypedef int libcoopgamma_support_t
+# Values used to indicate the support for gamma adjustments
+
+ctypedef int libcoopgamma_depth_t
+# Values used to tell which datatype is used for the gamma ramp stops
+#
+# The values will always be the number of bits for integral types, and
+# negative for floating-point types
+
+ctypedef int libcoopgamma_lifespan_t
+# Values used to tell when a filter should be removed
+
+ctypedef int libcoopgamma_colourspace_t
+# Colourspaces
+
+
+
+cdef extern from "include-libcoopgamma.h":
+
+ ctypedef struct libcoopgamma_ramps_t:
+ # Gamma ramp structure
+ size_t red_size
+ # The number of stops in the red ramp
+ size_t green_size
+ # The number of stops in the green ramp
+ size_t blue_size
+ # The number of stops in the blue ramp
+ void* red
+ # The red ramp
+ void* green
+ # The green ramp
+ void* blue
+ # The blue ramp
+
+ ctypedef struct libcoopgamma_filter_t:
+ # Data set to the coopgamma server to apply, update, or remove a filter
+ int64_t priority
+ # The priority of the filter, higher priority is applied first.
+ # The gamma correction should have priority 0.
+ char* crtc
+ # The CRTC for which this filter shall be applied
+ char* fclass
+ # Identifier for the filter
+ #
+ # The syntax must be "${PACKAGE_NAME}::${COMMAND_NAME}::${RULE}"
+ libcoopgamma_lifespan_t lifespan
+ # When shall the filter be removed?
+ #
+ # If this member's value is `LIBCOOPGAMMA_REMOVE`,
+ # only `.crtc` and `.class` need also be defined
+ libcoopgamma_depth_t depth
+ # The data type and bit-depth of the ramp stops
+ libcoopgamma_ramps_t ramps
+ # The gamma ramp adjustments of the filter
+
+ ctypedef struct libcoopgamma_crtc_info_t:
+ # Gamma ramp meta information for a CRTC
+ int cooperative
+ # Is cooperative gamma server running?
+ libcoopgamma_depth_t depth
+ # The data type and bit-depth of the ramp stops
+$$<cpp <<EOF | tail -n 1 | sed '/#/d'
+#include <limits.h>
+#if INT_MAX != LONG_MAX
+ int padding__
+#endif
+EOF
+$$>
+ size_t red_size
+ # The number of stops in the red ramp
+ size_t green_size
+ # The number of stops in the green ramp
+ size_t blue_size
+ # The number of stops in the blue ramp
+ libcoopgamma_colourspace_t colourspace
+ # The monitor's colurspace
+ int have_gamut
+ # Whether `.red_x`, `.red_y`, `.green_x`, `.green_y`, `.blue_x`, `.blue_y`,
+ # `.white_x`, and `.white_y` are set.
+ #
+ # If this is true, but the colourspace is not RGB (or sRGB),
+ # there is something wrong. Please also check the colourspace.
+ unsigned red_x
+ # The x-value (CIE xyY) of the monitor's red colour, multiplied by 1024
+ unsigned red_y
+ # The y-value (CIE xyY) of the monitor's red colour, multiplied by 1024
+ unsigned green_x
+ # The x-value (CIE xyY) of the monitor's green colour, multiplied by 1024
+ unsigned green_y
+ # The y-value (CIE xyY) of the monitor's green colour, multiplied by 1024
+ unsigned blue_x
+ # The x-value (CIE xyY) of the monitor's blue colour, multiplied by 1024
+ unsigned blue_y
+ # The y-value (CIE xyY) of the monitor's blue colour, multiplied by 1024
+ unsigned white_x
+ # The x-value (CIE xyY) of the monitor's default white point, multiplied by 1024
+ unsigned white_y
+ # The y-value (CIE xyY) of the monitor's default white point, multiplied by 1024
+
+ ctypedef struct libcoopgamma_filter_query_t:
+ # Data sent to the coopgamma server when requestng the current filter table
+ int64_t high_priority
+ # Do no return filters with higher priority than this value
+ int64_t low_priority
+ # Do no return filters with lower priority than this value
+ char* crtc
+ # The CRTC for which the the current filters shall returned
+ int coalesce
+ # Whether to coalesce all filters into one gamma ramp triplet
+$$<cpp <<EOF | tail -n 1 | sed '/#/d'
+#include <limits.h>
+#if INT_MAX != LONG_MAX
+ int padding__
+#endif
+EOF
+$$>
+
+ ctypedef struct libcoopgamma_queried_filter_t:
+ # Stripped down version of `libcoopgamma_filter` which only contains
+ # the information returned in response to "Command: get-gamma"
+ int64_t priority
+ # The filter's priority
+ char* fclass
+ # The filter's class
+ libcoopgamma_ramps_t ramps
+ # The gamma ramp adjustments of the filter
+
+ ctypedef struct libcoopgamma_filter_table_t:
+ # Response type for "Command: get-gamma": a list of applied filters
+ # and meta-information that was necessary for decoding the response
+ size_t red_size
+ # The number of stops in the red ramp
+ size_t green_size
+ # The number of stops in the green ramp
+ size_t blue_size
+ # The number of stops in the blue ramp
+ size_t filter_count
+ # The number of filters
+ libcoopgamma_queried_filter_t* filters
+ # The filters, should be ordered by priority in descending order,
+ # lest there is something wrong with the coopgamma server
+ #
+ # If filter coalition was requested, there will be exactly one
+ # filter (`.filter_count == 1`) and `.filters->class == NULL`
+ # and `.filters->priority` is undefined.
+ libcoopgamma_depth_t depth
+ # The data type and bit-depth of the ramp stops
+$$<cpp <<EOF | tail -n 1 | sed '/#/d'
+#include <limits.h>
+#if INT_MAX != LONG_MAX
+ int padding__
+#endif
+EOF
+$$>
+
+ ctypedef struct libcoopgamma_error_t:
+ # Error message from coopgamma server
+ uint64_t number
+ # Error code
+ #
+ # If `.custom` is false, 0 indicates success, otherwise,
+ # 0 indicates that no error code has been assigned
+ int custom
+ # Is this a custom error?
+ int server_side
+ # Did the error occur on the server-side?
+ char* description
+ # Error message, can be `NULL` if `.custom` is false
+
+ ctypedef struct libcoopgamma_context_t:
+ # Library state
+ #
+ # Use of this structure is not thread-safe create one instance
+ # per thread that uses this structure
+ libcoopgamma_error_t error
+ # The error of the last failed function call
+ #
+ # This member is undefined after successful function call
+ int fd
+ # File descriptor for the socket
+ int have_all_headers
+ # Whether `libcoopgamma_synchronise` have read the empty end-of-headers line
+ int bad_message
+ # Whether `libcoopgamma_synchronise` is reading a corrupt but recoverable message
+ int blocking
+ # Is communication blocking?
+ uint32_t message_id
+ # Message ID of the next message
+ uint32_t in_response_to
+ # The ID of outbound message to which the inbound message being read by
+ # `libcoopgamma_synchronise` is a response
+ char* outbound
+ # Buffer with the outbound message
+ size_t outbound_head
+ # The write head for `outbound`
+ size_t outbound_tail
+ # The read head for `outbound`
+ size_t outbound_size
+ # The allocation size of `outbound`
+ char* inbound
+ # Buffer with the inbound message
+ size_t inbound_head
+ # The write head for `inbound`
+ size_t inbound_tail
+ # The read head for `inbound`
+ size_t inbound_size
+ # The allocation size of `inbound`
+ size_t length
+ # The value of 'Length' header in the inbound message
+ size_t curline
+ # The beginning of the current line that is being read by `libcoopgamma_synchronise`
+
+ ctypedef struct libcoopgamma_async_context_t:
+ # Information necessary to identify and parse a response from the server
+ uint32_t message_id
+ # The value of the 'In response to' header in the waited message
+ int coalesce
+ # Whether to coalesce all filters into one gamma ramp triplet
+