aboutsummaryrefslogtreecommitdiffstats
path: root/src/redshift.c
diff options
context:
space:
mode:
authorJon Lund Steffensen <jonlst@gmail.com>2010-05-07 00:33:21 +0200
committerJon Lund Steffensen <jonlst@gmail.com>2010-05-07 00:33:21 +0200
commitb41d89188862b5f1326d85fb90599ca277e46dd7 (patch)
tree562705599a4c94cc625d9dcf27f0ebc2d6980093 /src/redshift.c
parentsystemtime.c: Portably read current time on posix and windows. (diff)
downloadredshift-ng-b41d89188862b5f1326d85fb90599ca277e46dd7.tar.gz
redshift-ng-b41d89188862b5f1326d85fb90599ca277e46dd7.tar.bz2
redshift-ng-b41d89188862b5f1326d85fb90599ca277e46dd7.tar.xz
Clean up code for gamma adjustment methods.
Diffstat (limited to 'src/redshift.c')
-rw-r--r--src/redshift.c117
1 files changed, 65 insertions, 52 deletions
diff --git a/src/redshift.c b/src/redshift.c
index 781af78..59f7482 100644
--- a/src/redshift.c
+++ b/src/redshift.c
@@ -80,6 +80,14 @@ typedef union {
#endif
} gamma_state_t;
+/* Enum of gamma adjustment methods */
+typedef enum {
+ GAMMA_METHOD_RANDR,
+ GAMMA_METHOD_VIDMODE,
+ GAMMA_METHOD_WINGDI,
+ GAMMA_METHOD_MAX
+} gamma_method_t;
+
/* Bounds for parameters. */
#define MIN_LAT -90.0
@@ -133,68 +141,74 @@ static int disable = 0;
/* Restore saved gamma ramps with the appropriate adjustment method. */
static void
-gamma_state_restore(gamma_state_t *state, int use_randr)
+gamma_state_restore(gamma_state_t *state, gamma_method_t method)
{
- switch (use_randr) {
-#ifdef ENABLE_VIDMODE
- case 0:
- vidmode_restore(&state->vidmode);
- break;
-#endif
+ switch (method) {
#ifdef ENABLE_RANDR
- case 1:
+ case GAMMA_METHOD_RANDR:
randr_restore(&state->randr);
break;
#endif
+#ifdef ENABLE_VIDMODE
+ case GAMMA_METHOD_VIDMODE:
+ vidmode_restore(&state->vidmode);
+ break;
+#endif
#ifdef ENABLE_WINGDI
- case 2:
+ case GAMMA_METHOD_WINGDI:
w32gdi_restore(&state->w32gdi);
break;
#endif
+ default:
+ break;
}
}
/* Free the state associated with the appropriate adjustment method. */
static void
-gamma_state_free(gamma_state_t *state, int use_randr)
+gamma_state_free(gamma_state_t *state, gamma_method_t method)
{
- switch (use_randr) {
-#ifdef ENABLE_VIDMODE
- case 0:
- vidmode_free(&state->vidmode);
- break;
-#endif
+ switch (method) {
#ifdef ENABLE_RANDR
- case 1:
+ case GAMMA_METHOD_RANDR:
randr_free(&state->randr);
break;
#endif
+#ifdef ENABLE_VIDMODE
+ case GAMMA_METHOD_VIDMODE:
+ vidmode_free(&state->vidmode);
+ break;
+#endif
#ifdef ENABLE_WINGDI
- case 2:
+ case GAMMA_METHOD_WINGDI:
w32gdi_free(&state->w32gdi);
break;
#endif
+ default:
+ break;
}
}
/* Set temperature with the appropriate adjustment method. */
static int
-gamma_state_set_temperature(gamma_state_t *state, int use_randr,
+gamma_state_set_temperature(gamma_state_t *state, gamma_method_t method,
int temp, float gamma[3])
{
- switch (use_randr) {
-#ifdef ENABLE_VIDMODE
- case 0:
- return vidmode_set_temperature(&state->vidmode, temp, gamma);
-#endif
+ switch (method) {
#ifdef ENABLE_RANDR
- case 1:
+ case GAMMA_METHOD_RANDR:
return randr_set_temperature(&state->randr, temp, gamma);
#endif
+#ifdef ENABLE_VIDMODE
+ case GAMMA_METHOD_VIDMODE:
+ return vidmode_set_temperature(&state->vidmode, temp, gamma);
+#endif
#ifdef ENABLE_WINGDI
- case 2:
+ case GAMMA_METHOD_WINGDI:
return w32gdi_set_temperature(&state->w32gdi, temp, gamma);
#endif
+ default:
+ break;
}
return -1;
@@ -300,7 +314,7 @@ main(int argc, char *argv[])
int temp_day = DEFAULT_DAY_TEMP;
int temp_night = DEFAULT_NIGHT_TEMP;
float gamma[3] = { DEFAULT_GAMMA, DEFAULT_GAMMA, DEFAULT_GAMMA };
- int use_randr = -1;
+ int method = -1;
int screen_num = -1;
int crtc_num = -1;
int transition = 1;
@@ -361,7 +375,7 @@ main(int argc, char *argv[])
if (strcmp(optarg, "randr") == 0 ||
strcmp(optarg, "RANDR") == 0) {
#ifdef ENABLE_RANDR
- use_randr = 1;
+ method = GAMMA_METHOD_RANDR;
#else
fputs(_("RANDR method was not"
" enabled at compile time.\n"),
@@ -371,7 +385,7 @@ main(int argc, char *argv[])
} else if (strcmp(optarg, "vidmode") == 0 ||
strcmp(optarg, "VidMode") == 0) {
#ifdef ENABLE_VIDMODE
- use_randr = 0;
+ method = GAMMA_METHOD_VIDMODE;
#else
fputs(_("VidMode method was not"
" enabled at compile time.\n"),
@@ -381,7 +395,7 @@ main(int argc, char *argv[])
} else if (strcmp(optarg, "wingdi") == 0 ||
strcmp(optarg, "WinGDI") == 0) {
#ifdef ENABLE_WINGDI
- use_randr = 2;
+ method = GAMMA_METHOD_WINGDI;
#else
fputs(_("WinGDI method was not"
" enabled at compile time.\n"),
@@ -490,70 +504,70 @@ main(int argc, char *argv[])
}
/* CRTC can only be selected for RANDR */
- if (crtc_num > -1 && !use_randr) {
+ if (crtc_num > -1 && method != GAMMA_METHOD_RANDR) {
fprintf(stderr, _("CRTC can only be selected"
" with the RANDR method.\n"));
exit(EXIT_FAILURE);
}
- /* Initialize gamma adjustment method. If use_randr is negative
+ /* Initialize gamma adjustment method. If method is negative
try all methods until one that works is found. */
gamma_state_t state;
#ifdef ENABLE_RANDR
- if (use_randr < 0 || use_randr == 1) {
+ if (method < 0 || method == GAMMA_METHOD_RANDR) {
/* Initialize RANDR state */
r = randr_init(&state.randr, screen_num, crtc_num);
if (r < 0) {
fputs(_("Initialization of RANDR failed.\n"), stderr);
- if (use_randr < 0) {
+ if (method < 0) {
fputs(_("Trying other method...\n"), stderr);
} else {
exit(EXIT_FAILURE);
}
} else {
- use_randr = 1;
+ method = GAMMA_METHOD_RANDR;
}
}
#endif
#ifdef ENABLE_VIDMODE
- if (use_randr < 0 || use_randr == 0) {
+ if (method < 0 || method == GAMMA_METHOD_VIDMODE) {
/* Initialize VidMode state */
r = vidmode_init(&state.vidmode, screen_num);
if (r < 0) {
fputs(_("Initialization of VidMode failed.\n"),
stderr);
- if (use_randr < 0) {
+ if (method < 0) {
fputs(_("Trying other method...\n"), stderr);
} else {
exit(EXIT_FAILURE);
}
} else {
- use_randr = 0;
+ method = GAMMA_METHOD_VIDMODE;
}
}
#endif
#ifdef ENABLE_WINGDI
- if (use_randr < 0 || use_randr == 2) {
+ if (method < 0 || method == GAMMA_METHOD_WINGDI) {
/* Initialize WinGDI state */
r = w32gdi_init(&state.w32gdi);
if (r < 0) {
fputs(_("Initialization of WinGDI failed.\n"),
stderr);
- if (use_randr < 0) {
+ if (method < 0) {
fputs(_("Trying other method...\n"), stderr);
} else {
exit(EXIT_FAILURE);
}
} else {
- use_randr = 2;
+ method = GAMMA_METHOD_WINGDI;
}
}
#endif
/* Failure if no methods were successful at this point. */
- if (use_randr < 0) {
+ if (method < 0) {
fputs(_("No more methods to try.\n"), stderr);
exit(EXIT_FAILURE);
}
@@ -564,7 +578,7 @@ main(int argc, char *argv[])
r = systemtime_get_time(&now);
if (r < 0) {
fputs(_("Unable to read system time.\n"), stderr);
- gamma_state_free(&state, use_randr);
+ gamma_state_free(&state, method);
exit(EXIT_FAILURE);
}
@@ -582,11 +596,10 @@ main(int argc, char *argv[])
if (verbose) printf(_("Color temperature: %uK\n"), temp);
/* Adjust temperature */
- r = gamma_state_set_temperature(&state, use_randr,
- temp, gamma);
+ r = gamma_state_set_temperature(&state, method, temp, gamma);
if (r < 0) {
fputs(_("Temperature adjustment failed.\n"), stderr);
- gamma_state_free(&state, use_randr);
+ gamma_state_free(&state, method);
exit(EXIT_FAILURE);
}
} else {
@@ -673,7 +686,7 @@ main(int argc, char *argv[])
if (r < 0) {
fputs(_("Unable to read system time.\n"),
stderr);
- gamma_state_free(&state, use_randr);
+ gamma_state_free(&state, method);
exit(EXIT_FAILURE);
}
@@ -724,7 +737,7 @@ main(int argc, char *argv[])
if (short_trans_done) {
if (disabled) {
/* Restore saved gamma ramps */
- gamma_state_restore(&state, use_randr);
+ gamma_state_restore(&state, method);
}
short_trans_done = 0;
}
@@ -744,12 +757,12 @@ main(int argc, char *argv[])
/* Adjust temperature */
if (!disabled || short_trans) {
r = gamma_state_set_temperature(&state,
- use_randr,
+ method,
temp, gamma);
if (r < 0) {
fputs(_("Temperature adjustment"
" failed.\n"), stderr);
- gamma_state_free(&state, use_randr);
+ gamma_state_free(&state, method);
exit(EXIT_FAILURE);
}
}
@@ -765,11 +778,11 @@ main(int argc, char *argv[])
}
/* Restore saved gamma ramps */
- gamma_state_restore(&state, use_randr);
+ gamma_state_restore(&state, method);
}
/* Clean up gamma adjustment state */
- gamma_state_free(&state, use_randr);
+ gamma_state_free(&state, method);
return EXIT_SUCCESS;
}