summaryrefslogtreecommitdiff
path: root/spectro/dispwin.h
diff options
context:
space:
mode:
Diffstat (limited to 'spectro/dispwin.h')
-rw-r--r--spectro/dispwin.h327
1 files changed, 327 insertions, 0 deletions
diff --git a/spectro/dispwin.h b/spectro/dispwin.h
new file mode 100644
index 0000000..096547f
--- /dev/null
+++ b/spectro/dispwin.h
@@ -0,0 +1,327 @@
+
+#ifndef DISPWIN_H
+
+/*
+ * Argyll Color Correction System
+ * Display target patch window
+ *
+ * Author: Graeme W. Gill
+ * Date: 4/10/96
+ *
+ * Copyright 1998 - 2013 Graeme W. Gill
+ * All rights reserved.
+ *
+ * This material is licenced under the GNU AFFERO GENERAL PUBLIC LICENSE Version 3 :-
+ * see the License.txt file for licencing details.
+ */
+
+#define DISPLAY_UPDATE_DELAY 200 /* default display update delay allowance */
+
+int do_plot(double *x, double *y1, double *y2, double *y3, int n);
+
+#ifdef NT
+#define OEMRESOURCE
+#if !defined(_WIN32_WINNT) || _WIN32_WINNT < 0x0501
+#define _WIN32_WINNT 0x0501
+#endif
+#if !defined(WINVER) || WINVER < 0x0501
+#if defined(WINVER)
+# undef WINVER
+#endif
+#define WINVER 0x0501
+#endif
+#include <windows.h>
+#include <icm.h>
+
+#if(WINVER < 0x0500)
+#error Require WINVER >= 0x500 to compile (multi-monitor API needed)
+#endif
+
+#ifndef COLORMGMTCAPS /* In case SDK is out of date */
+
+#define COLORMGMTCAPS 121
+
+#define CM_NONE 0x00000000
+#define CM_DEVICE_ICM 0x00000001
+#define CM_GAMMA_RAMP 0x00000002
+#define CM_CMYK_COLOR 0x00000004
+
+#endif /* !COLORMGMTCAPS */
+
+/* Avoid shlwapi.h - there are problems in using it in latter SDKs */
+#ifndef WINSHLWAPI
+#define WINSHLWAPI DECLSPEC_IMPORT
+#endif
+
+WINSHLWAPI LPSTR WINAPI PathFindFileNameA(LPCSTR);
+WINSHLWAPI LPWSTR WINAPI PathFindFileNameW(LPCWSTR);
+
+#ifdef UNICODE
+#define PathFindFileName PathFindFileNameW
+#else
+#define PathFindFileName PathFindFileNameA
+#endif
+
+#endif /* NT */
+
+#ifdef __APPLE__ /* Assume OS X Cocoa */
+
+#include <Carbon/Carbon.h> /* To declare CGDirectDisplayID */
+
+#endif /* __APPLE__ */
+
+#if defined(UNIX_X11)
+#include <X11/Xlib.h>
+#include <X11/Xutil.h>
+#include <X11/Xatom.h>
+#include <X11/extensions/xf86vmode.h>
+#include <X11/extensions/dpms.h>
+#include <X11/extensions/Xinerama.h>
+#include <X11/extensions/Xrandr.h>
+#include <X11/extensions/scrnsaver.h>
+#include <X11/extensions/dpms.h>
+#endif /* UNIX_X11 */
+
+/* - - - - - - - - - - - - - - - - - - - - - - - */
+
+/* Profile instalation/association scope */
+typedef enum {
+ p_scope_user = 0, /* (user profiles) Linux, OS X & Vista */
+ p_scope_local = 1, /* (local system profiles) Linux, OS X & vista */
+ p_scope_system = 2, /* (system supplied profiles) OS X. [ Linux, Vista same as local ] */
+ p_scope_network = 3 /* (shared network profiles) [ OS X. Linux, Vista same as local ] */
+} p_scope;
+
+/* - - - - - - - - - - - - - - - - - - - - - - - */
+/* Enumerate and list all the available displays */
+
+/* Structure to store infomation about possible displays */
+typedef struct {
+ char *name; /* Display name */
+ char *description; /* Description of display */
+ int sx,sy; /* Displays offset in pixels */
+ int sw,sh; /* Displays width and height in pixels*/
+#ifdef NT
+ char monid[128]; /* Monitor ID */
+ int prim; /* NZ if primary display monitor */
+#endif /* NT */
+#ifdef __APPLE__
+ CGDirectDisplayID ddid;
+#endif /* __APPLE__ */
+#if defined(UNIX_X11)
+ int screen; /* Screen to select */
+ int uscreen; /* Underlying screen */
+ int rscreen; /* Underlying RAMDAC screen */
+ Atom icc_atom; /* ICC profile root atom for this display */
+ unsigned char *edid; /* 128 or 256 bytes of monitor EDID, NULL if none */
+ int edid_len; /* 128 or 256 */
+
+#if RANDR_MAJOR == 1 && RANDR_MINOR >= 2
+ /* Xrandr stuff - output is connected 1:1 to a display */
+ RRCrtc crtc; /* Associated crtc */
+ RROutput output; /* Associated output */
+ Atom icc_out_atom; /* ICC profile atom for this output */
+#endif /* randr >= V 1.2 */
+#endif /* UNIX_X11 */
+} disppath;
+
+/* Return pointer to list of disppath. Last will be NULL. */
+/* Return NULL on failure. */
+/* Call free_disppaths() to free up allocation */
+disppath **get_displays();
+
+void free_disppaths(disppath **paths);
+
+/* Delete the display at the given index from the paths */
+void del_disppath(disppath **paths, int ix);
+
+/* Return the given display given its index 0..n-1 */
+disppath *get_a_display(int ix);
+
+void free_a_disppath(disppath *path);
+
+extern int callback_ddebug; /* Diagnostic global for get_displays() and get_a_display() */
+
+/* - - - - - - - - - - - - - - - - - - - - - - - */
+/* Structure to handle RAMDAC values */
+struct _ramdac {
+ int pdepth; /* Plane depth, usually 8 */
+ int nent; /* Number of entries, = 2^pdepth */
+ double *v[3]; /* 2^pdepth entries for RGB, values 0.0 - 1.0 */
+
+ /* Clone ourselves */
+ struct _ramdac *(*clone)(struct _ramdac *p);
+
+ /* Set the curves to linear */
+ void (*setlin)(struct _ramdac *p);
+
+ /* Destroy ourselves */
+ void (*del)(struct _ramdac *p);
+}; typedef struct _ramdac ramdac;
+
+
+/* - - - - - - - - - - - - - - - - - - - - - - - */
+/* Dispwin object */
+
+/* !!!! Make changes in dispwin.c and webwin.c !!!! */
+
+struct _dispwin {
+
+/* private: */
+ char *name; /* Display path (ie. '\\.\DISPLAY1') */
+ /* or "10.0.0.1:0.0" */
+ char *description; /* Description of display */
+
+ /* Plot instance information */
+ int sx,sy; /* Screen offset in pixels */
+ int sw,sh; /* Screen width and height in pixels*/
+ int ww,wh; /* Window width and height */
+ int tx,ty; /* Test area within window offset in pixels */
+ int tw,th; /* Test area width and height in pixels */
+
+ double rgb[3]; /* Current color (full resolution) */
+ double r_rgb[3]; /* Current color (raster value) */
+ int update_delay; /* Update delay in msec, default 200 */
+ int min_update_delay; /* Minimum update delay, default 20, overriden by EV */
+ int nowin; /* Don't create a test window */
+ int native; /* 0 = use current current or given calibration curve */
+ /* 1 = set native linear output and use ramdac high precision */
+ ramdac *or; /* Original ramdac contents, NULL if none */
+ ramdac *r; /* Ramdac in use for native mode */
+ int blackbg; /* NZ if black full screen background */
+
+ char *callout; /* if not NULL - set color Shell callout routine */
+
+ /* Linked list to automate SIGKILL cleanup */
+ struct _dispwin *next;
+
+#ifdef NT
+ char monid[128]; /* Monitor ID (ie. 'Monitor\MEA1773\{4D36E96E-E325-11CE-BFC1-08002BE10318}\0015'*/
+ HDC hdc; /* Handle to display */
+ char *AppName;
+ HWND hwnd; /* Window handle */
+ HCURSOR curs; /* Invisible cursor */
+
+ MSG msg;
+ ATOM arv;
+
+ int xo, yo, wi, he; /* Window location & size */
+ athread *mth; /* Window message thread */
+ int inited;
+ int quit; /* Request to quit */
+
+ int colupd; /* Color update count */
+ int colupde; /* Color update count echo */
+
+#endif /* NT */
+
+#ifdef __APPLE__
+ CGDirectDisplayID ddid;
+ void *osx_cntx; /* OSX specific info */
+ int btf; /* Flag, nz if window has been brought to the front once */
+ int winclose; /* Flag, set to nz if window was closed */
+#endif /* __APPLE__ */
+
+#if defined(UNIX_X11)
+ Display *mydisplay;
+ int myscreen; /* Usual or virtual screen with Xinerama */
+ int myuscreen; /* Underlying screen */
+ int myrscreen; /* Underlying RAMDAC screen */
+ Atom icc_atom; /* ICC profile root atom for this display */
+ unsigned char *edid; /* 128 or 256 bytes of monitor EDID, NULL if none */
+ int edid_len; /* 128 or 256 */
+
+#if RANDR_MAJOR == 1 && RANDR_MINOR >= 2
+ /* Xrandr stuff - output is connected 1:1 to a display */
+ RRCrtc crtc; /* Associated crtc */
+ RROutput output; /* Associated output */
+ Atom icc_out_atom; /* ICC profile atom for this output */
+#endif /* randr >= V 1.2 */
+
+ /* Test windo access */
+ Window mywindow;
+ GC mygc;
+
+ /* Screensaver state */
+ int xsssuspend; /* Was able to suspend the screensaver using XScreenSaverSuspend */
+
+ int xssvalid; /* Was able to save & disable X screensaver using XSetScreenSaver */
+ int timeout, interval;
+ int prefer_blanking;
+ int allow_exposures;
+
+ int xssrunning; /* Disabled xscreensaver */
+
+ int gnomessrunning; /* Disabled gnome screensaver and is was enabled */
+ pid_t gnomepid; /* gnome-screensaver-command -i pid */
+
+ int kdessrunning; /* Disabled kde screensaver and is was enabled */
+
+ int dpmsenabled; /* DPMS is enabled */
+
+#endif /* UNIX_X11 */
+
+ void *pcntx; /* Private context (ie., webwin) */
+ volatile unsigned int ncix, ccix; /* Counters to trigger webwin colorchange */
+ volatile int mg_stop; /* Stop flag */
+
+ int ddebug; /* >0 to print debug to stderr */
+
+/* public: */
+ int pdepth; /* Plane depth of display */
+
+ /* Get RAMDAC values. ->del() when finished. */
+ /* Return NULL if not possible */
+ ramdac *(*get_ramdac)(struct _dispwin *p);
+
+ /* Set the RAMDAC values. */
+ /* Return nz if not possible */
+ int (*set_ramdac)(struct _dispwin *p, ramdac *r, int persist);
+
+ /* Install a display profile and make */
+ /* it the defult for this display. */
+ /* Return nz if failed */
+ int (*install_profile)(struct _dispwin *p, char *fname, ramdac *r, p_scope scope);
+
+ /* Un-install a display profile. */
+ /* Return nz if failed */
+ int (*uninstall_profile)(struct _dispwin *p, char *fname, p_scope scope);
+
+ /* Get the currently installed display profile and return it as an icmFile. */
+ /* Return the name as well, up to mxlen chars, excluding nul. */
+ /* Return NULL if failed */
+ icmFile *(*get_profile)(struct _dispwin *p, char *name, int mxlen);
+
+ /* Set a color (values 0.0 - 1.0) */
+ /* Return nz on error */
+ int (*set_color)(struct _dispwin *p, double r, double g, double b);
+
+ /* Set an update delay, and return the previous value */
+ int (*set_update_delay)(struct _dispwin *p, int update_delay);
+
+ /* Set a shell set color callout command line */
+ void (*set_callout)(struct _dispwin *p, char *callout);
+
+ /* Destroy ourselves */
+ void (*del)(struct _dispwin *p);
+
+}; typedef struct _dispwin dispwin;
+
+/* Create a RAMDAC access and display test window, default white */
+dispwin *new_dispwin(
+ disppath *screen, /* Screen to calibrate. */
+ double width, double height, /* Width and height in mm */
+ double hoff, double voff, /* Offset from c. in fraction of screen, range -1.0 .. 1.0 */
+ int nowin, /* NZ if no window should be created - RAMDAC access only */
+ int native, /* 0 = use current current or given calibration curve */
+ /* 1 = use native linear out & high precision */
+ int *noramdac, /* Return nz if no ramdac access. native is set to 0 */
+ int blackbg, /* NZ if whole screen should be filled with black */
+ int override, /* NZ if override_redirect is to be used on X11 */
+ int ddebug /* >0 to print debug statements to stderr */
+);
+
+
+#define DISPWIN_H
+#endif /* DISPWIN_H */
+