From ee1619957c9ed6cf31c9263e687d45915f3e600b Mon Sep 17 00:00:00 2001 From: Jon Lund Steffensen Date: Wed, 23 Dec 2009 16:40:18 +0100 Subject: Move RandR code to separate file. --- Makefile.am | 3 +- colorramp.c | 150 +++++++++++++++++++++++++++++++++ colorramp.h | 28 +++++++ colortemp.c | 273 ------------------------------------------------------------ colortemp.h | 26 ------ randr.c | 155 ++++++++++++++++++++++++++++++++++ randr.h | 26 ++++++ redshift.c | 6 +- 8 files changed, 364 insertions(+), 303 deletions(-) create mode 100644 colorramp.c create mode 100644 colorramp.h delete mode 100644 colortemp.c delete mode 100644 colortemp.h create mode 100644 randr.c create mode 100644 randr.h diff --git a/Makefile.am b/Makefile.am index fa339cc..5284435 100644 --- a/Makefile.am +++ b/Makefile.am @@ -4,7 +4,8 @@ bin_PROGRAMS = redshift redshift_SOURCES = \ redshift.c \ - colortemp.c colortemp.h \ + colorramp.c colorramp.h \ + randr.c randr.h \ solar.c solar.h AM_CFLAGS = $(XCB_CFLAGS) diff --git a/colorramp.c b/colorramp.c new file mode 100644 index 0000000..2743036 --- /dev/null +++ b/colorramp.c @@ -0,0 +1,150 @@ +/* colorramp.c -- color temperature calculation source + This file is part of Redshift. + + Redshift 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. + + Redshift 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 Redshift. If not, see . + + Copyright (c) 2009 Jon Lund Steffensen +*/ + +#include +#include +#include +#include + + +/* Source: http://www.vendian.org/mncharity/dir3/blackbody/ + Rescaled to make exactly 6500K equal to full intensity in all channels. */ +static const float blackbody_color[] = { + 1.0000, 0.0425, 0.0000, /* 1000K */ + 1.0000, 0.0668, 0.0000, /* 1100K */ + 1.0000, 0.0911, 0.0000, /* 1200K */ + 1.0000, 0.1149, 0.0000, /* ... */ + 1.0000, 0.1380, 0.0000, + 1.0000, 0.1604, 0.0000, + 1.0000, 0.1819, 0.0000, + 1.0000, 0.2024, 0.0000, + 1.0000, 0.2220, 0.0000, + 1.0000, 0.2406, 0.0000, + 1.0000, 0.2630, 0.0062, + 1.0000, 0.2868, 0.0155, + 1.0000, 0.3102, 0.0261, + 1.0000, 0.3334, 0.0379, + 1.0000, 0.3562, 0.0508, + 1.0000, 0.3787, 0.0650, + 1.0000, 0.4008, 0.0802, + 1.0000, 0.4227, 0.0964, + 1.0000, 0.4442, 0.1136, + 1.0000, 0.4652, 0.1316, + 1.0000, 0.4859, 0.1505, + 1.0000, 0.5062, 0.1702, + 1.0000, 0.5262, 0.1907, + 1.0000, 0.5458, 0.2118, + 1.0000, 0.5650, 0.2335, + 1.0000, 0.5839, 0.2558, + 1.0000, 0.6023, 0.2786, + 1.0000, 0.6204, 0.3018, + 1.0000, 0.6382, 0.3255, + 1.0000, 0.6557, 0.3495, + 1.0000, 0.6727, 0.3739, + 1.0000, 0.6894, 0.3986, + 1.0000, 0.7058, 0.4234, + 1.0000, 0.7218, 0.4485, + 1.0000, 0.7375, 0.4738, + 1.0000, 0.7529, 0.4992, + 1.0000, 0.7679, 0.5247, + 1.0000, 0.7826, 0.5503, + 1.0000, 0.7970, 0.5760, + 1.0000, 0.8111, 0.6016, + 1.0000, 0.8250, 0.6272, + 1.0000, 0.8384, 0.6529, + 1.0000, 0.8517, 0.6785, + 1.0000, 0.8647, 0.7040, + 1.0000, 0.8773, 0.7294, + 1.0000, 0.8897, 0.7548, + 1.0000, 0.9019, 0.7801, + 1.0000, 0.9137, 0.8051, + 1.0000, 0.9254, 0.8301, + 1.0000, 0.9367, 0.8550, + 1.0000, 0.9478, 0.8795, + 1.0000, 0.9587, 0.9040, + 1.0000, 0.9694, 0.9283, + 1.0000, 0.9798, 0.9524, + 1.0000, 0.9900, 0.9763, + 1.0000, 1.0000, 1.0000, /* 6500K */ + 0.9771, 0.9867, 1.0000, + 0.9554, 0.9740, 1.0000, + 0.9349, 0.9618, 1.0000, + 0.9154, 0.9500, 1.0000, + 0.8968, 0.9389, 1.0000, + 0.8792, 0.9282, 1.0000, + 0.8624, 0.9179, 1.0000, + 0.8465, 0.9080, 1.0000, + 0.8313, 0.8986, 1.0000, + 0.8167, 0.8895, 1.0000, + 0.8029, 0.8808, 1.0000, + 0.7896, 0.8724, 1.0000, + 0.7769, 0.8643, 1.0000, + 0.7648, 0.8565, 1.0000, + 0.7532, 0.8490, 1.0000, + 0.7420, 0.8418, 1.0000, + 0.7314, 0.8348, 1.0000, + 0.7212, 0.8281, 1.0000, + 0.7113, 0.8216, 1.0000, + 0.7018, 0.8153, 1.0000, + 0.6927, 0.8092, 1.0000, + 0.6839, 0.8032, 1.0000, + 0.6755, 0.7975, 1.0000, + 0.6674, 0.7921, 1.0000, + 0.6595, 0.7867, 1.0000, + 0.6520, 0.7816, 1.0000, + 0.6447, 0.7765, 1.0000, + 0.6376, 0.7717, 1.0000, + 0.6308, 0.7670, 1.0000, + 0.6242, 0.7623, 1.0000, + 0.6179, 0.7579, 1.0000, + 0.6117, 0.7536, 1.0000, + 0.6058, 0.7493, 1.0000, + 0.6000, 0.7453, 1.0000, + 0.5944, 0.7414, 1.0000 /* 10000K */ +}; + + +static void +interpolate_color(float a, const float *c1, const float *c2, float *c) +{ + c[0] = (1.0-a)*c1[0] + a*c2[0]; + c[1] = (1.0-a)*c1[1] + a*c2[1]; + c[2] = (1.0-a)*c1[2] + a*c2[2]; +} + +void +colorramp_fill(uint16_t *gamma_r, uint16_t *gamma_g, uint16_t *gamma_b, + int size, int temp, float gamma[3]) +{ + /* Calculate white point */ + float white_point[3]; + float alpha = (temp % 100) / 100.0; + int temp_index = ((temp - 1000) / 100)*3; + interpolate_color(alpha, &blackbody_color[temp_index], + &blackbody_color[temp_index+3], white_point); + + for (int i = 0; i < size; i++) { + gamma_r[i] = pow((float)i/size, 1.0/gamma[0]) * + UINT16_MAX * white_point[0]; + gamma_g[i] = pow((float)i/size, 1.0/gamma[1]) * + UINT16_MAX * white_point[1]; + gamma_b[i] = pow((float)i/size, 1.0/gamma[2]) * + UINT16_MAX * white_point[2]; + } +} diff --git a/colorramp.h b/colorramp.h new file mode 100644 index 0000000..e7f5554 --- /dev/null +++ b/colorramp.h @@ -0,0 +1,28 @@ +/* colorramp.h -- color temperature calculation header + This file is part of Redshift. + + Redshift 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. + + Redshift 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 Redshift. If not, see . + + Copyright (c) 2009 Jon Lund Steffensen +*/ + +#ifndef _REDSHIFT_COLORRAMP_H +#define _REDSHIFT_COLORRAMP_H + +#include + +void colorramp_fill(uint16_t *gamma_r, uint16_t *gamma_g, uint16_t *gamma_b, + int size, int temp, float gamma[3]); + +#endif /* ! _REDSHIFT_COLORRAMP_H */ diff --git a/colortemp.c b/colortemp.c deleted file mode 100644 index a0bb2a0..0000000 --- a/colortemp.c +++ /dev/null @@ -1,273 +0,0 @@ -/* colortemp.c -- X color temperature adjustment source - This file is part of Redshift. - - Redshift 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. - - Redshift 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 Redshift. If not, see . - - Copyright (c) 2009 Jon Lund Steffensen -*/ - -#include -#include -#include -#include - -#include -#include - - -/* Source: http://www.vendian.org/mncharity/dir3/blackbody/ - Rescaled to make exactly 6500K equal to full intensity in all channels. */ -static const float blackbody_color[] = { - 1.0000, 0.0425, 0.0000, /* 1000K */ - 1.0000, 0.0668, 0.0000, /* 1100K */ - 1.0000, 0.0911, 0.0000, /* 1200K */ - 1.0000, 0.1149, 0.0000, /* ... */ - 1.0000, 0.1380, 0.0000, - 1.0000, 0.1604, 0.0000, - 1.0000, 0.1819, 0.0000, - 1.0000, 0.2024, 0.0000, - 1.0000, 0.2220, 0.0000, - 1.0000, 0.2406, 0.0000, - 1.0000, 0.2630, 0.0062, - 1.0000, 0.2868, 0.0155, - 1.0000, 0.3102, 0.0261, - 1.0000, 0.3334, 0.0379, - 1.0000, 0.3562, 0.0508, - 1.0000, 0.3787, 0.0650, - 1.0000, 0.4008, 0.0802, - 1.0000, 0.4227, 0.0964, - 1.0000, 0.4442, 0.1136, - 1.0000, 0.4652, 0.1316, - 1.0000, 0.4859, 0.1505, - 1.0000, 0.5062, 0.1702, - 1.0000, 0.5262, 0.1907, - 1.0000, 0.5458, 0.2118, - 1.0000, 0.5650, 0.2335, - 1.0000, 0.5839, 0.2558, - 1.0000, 0.6023, 0.2786, - 1.0000, 0.6204, 0.3018, - 1.0000, 0.6382, 0.3255, - 1.0000, 0.6557, 0.3495, - 1.0000, 0.6727, 0.3739, - 1.0000, 0.6894, 0.3986, - 1.0000, 0.7058, 0.4234, - 1.0000, 0.7218, 0.4485, - 1.0000, 0.7375, 0.4738, - 1.0000, 0.7529, 0.4992, - 1.0000, 0.7679, 0.5247, - 1.0000, 0.7826, 0.5503, - 1.0000, 0.7970, 0.5760, - 1.0000, 0.8111, 0.6016, - 1.0000, 0.8250, 0.6272, - 1.0000, 0.8384, 0.6529, - 1.0000, 0.8517, 0.6785, - 1.0000, 0.8647, 0.7040, - 1.0000, 0.8773, 0.7294, - 1.0000, 0.8897, 0.7548, - 1.0000, 0.9019, 0.7801, - 1.0000, 0.9137, 0.8051, - 1.0000, 0.9254, 0.8301, - 1.0000, 0.9367, 0.8550, - 1.0000, 0.9478, 0.8795, - 1.0000, 0.9587, 0.9040, - 1.0000, 0.9694, 0.9283, - 1.0000, 0.9798, 0.9524, - 1.0000, 0.9900, 0.9763, - 1.0000, 1.0000, 1.0000, /* 6500K */ - 0.9771, 0.9867, 1.0000, - 0.9554, 0.9740, 1.0000, - 0.9349, 0.9618, 1.0000, - 0.9154, 0.9500, 1.0000, - 0.8968, 0.9389, 1.0000, - 0.8792, 0.9282, 1.0000, - 0.8624, 0.9179, 1.0000, - 0.8465, 0.9080, 1.0000, - 0.8313, 0.8986, 1.0000, - 0.8167, 0.8895, 1.0000, - 0.8029, 0.8808, 1.0000, - 0.7896, 0.8724, 1.0000, - 0.7769, 0.8643, 1.0000, - 0.7648, 0.8565, 1.0000, - 0.7532, 0.8490, 1.0000, - 0.7420, 0.8418, 1.0000, - 0.7314, 0.8348, 1.0000, - 0.7212, 0.8281, 1.0000, - 0.7113, 0.8216, 1.0000, - 0.7018, 0.8153, 1.0000, - 0.6927, 0.8092, 1.0000, - 0.6839, 0.8032, 1.0000, - 0.6755, 0.7975, 1.0000, - 0.6674, 0.7921, 1.0000, - 0.6595, 0.7867, 1.0000, - 0.6520, 0.7816, 1.0000, - 0.6447, 0.7765, 1.0000, - 0.6376, 0.7717, 1.0000, - 0.6308, 0.7670, 1.0000, - 0.6242, 0.7623, 1.0000, - 0.6179, 0.7579, 1.0000, - 0.6117, 0.7536, 1.0000, - 0.6058, 0.7493, 1.0000, - 0.6000, 0.7453, 1.0000, - 0.5944, 0.7414, 1.0000 /* 10000K */ -}; - - -static void -interpolate_color(float a, const float *c1, const float *c2, float *c) -{ - c[0] = (1.0-a)*c1[0] + a*c2[0]; - c[1] = (1.0-a)*c1[1] + a*c2[1]; - c[2] = (1.0-a)*c1[2] + a*c2[2]; -} - -int -colortemp_check_extension() -{ - xcb_generic_error_t *error; - - /* Open X server connection */ - xcb_connection_t *conn = xcb_connect(NULL, NULL); - - /* Query RandR version */ - xcb_randr_query_version_cookie_t ver_cookie = - xcb_randr_query_version(conn, 1, 3); - xcb_randr_query_version_reply_t *ver_reply = - xcb_randr_query_version_reply(conn, ver_cookie, &error); - - if (error) { - fprintf(stderr, "RANDR Query Version, error: %d\n", - error->error_code); - xcb_disconnect(conn); - return -1; - } - - if (ver_reply->major_version < 1 || ver_reply->minor_version < 3) { - fprintf(stderr, "Unsupported RANDR version (%u.%u)\n", - ver_reply->major_version, ver_reply->minor_version); - free(ver_reply); - xcb_disconnect(conn); - return -1; - } - - free(ver_reply); - - /* Close connection */ - xcb_disconnect(conn); - - return 0; -} - -int -colortemp_set_temperature(int temp, float gamma[3]) -{ - xcb_generic_error_t *error; - - /* Open X server connection */ - xcb_connection_t *conn = xcb_connect(NULL, NULL); - - /* Get first screen */ - const xcb_setup_t *setup = xcb_get_setup(conn); - xcb_screen_iterator_t iter = xcb_setup_roots_iterator(setup); - xcb_screen_t *screen = iter.data; - - /* Get list of CRTCs for the screen */ - xcb_randr_get_screen_resources_current_cookie_t res_cookie = - xcb_randr_get_screen_resources_current(conn, screen->root); - xcb_randr_get_screen_resources_current_reply_t *res_reply = - xcb_randr_get_screen_resources_current_reply(conn, res_cookie, - &error); - - if (error) { - fprintf(stderr, "RANDR Get Screen Resources Current," - " error: %d\n", error->error_code); - xcb_disconnect(conn); - return -1; - } - - xcb_randr_crtc_t *crtcs = - xcb_randr_get_screen_resources_current_crtcs(res_reply); - xcb_randr_crtc_t crtc = crtcs[0]; - - free(res_reply); - - /* Request size of gamma ramps */ - xcb_randr_get_crtc_gamma_size_cookie_t gamma_size_cookie = - xcb_randr_get_crtc_gamma_size(conn, crtc); - xcb_randr_get_crtc_gamma_size_reply_t *gamma_size_reply = - xcb_randr_get_crtc_gamma_size_reply(conn, gamma_size_cookie, - &error); - - if (error) { - fprintf(stderr, "RANDR Get CRTC Gamma Size, error: %d\n", - error->error_code); - xcb_disconnect(conn); - return -1; - } - - int gamma_ramp_size = gamma_size_reply->size; - - free(gamma_size_reply); - - if (gamma_ramp_size == 0) { - fprintf(stderr, "Error: Gamma ramp size too small, %i\n", - gamma_ramp_size); - xcb_disconnect(conn); - return -1; - } - - /* Calculate white point */ - float white_point[3]; - float alpha = (temp % 100) / 100.0; - int temp_index = ((temp - 1000) / 100)*3; - interpolate_color(alpha, &blackbody_color[temp_index], - &blackbody_color[temp_index+3], white_point); - - /* Create new gamma ramps */ - uint16_t *gamma_ramps = malloc(3*gamma_ramp_size*sizeof(uint16_t)); - if (gamma_ramps == NULL) abort(); - - uint16_t *gamma_r = &gamma_ramps[0*gamma_ramp_size]; - uint16_t *gamma_g = &gamma_ramps[1*gamma_ramp_size]; - uint16_t *gamma_b = &gamma_ramps[2*gamma_ramp_size]; - - for (int i = 0; i < gamma_ramp_size; i++) { - gamma_r[i] = pow((float)i/gamma_ramp_size, 1.0/gamma[0]) * - UINT16_MAX * white_point[0]; - gamma_g[i] = pow((float)i/gamma_ramp_size, 1.0/gamma[1]) * - UINT16_MAX * white_point[1]; - gamma_b[i] = pow((float)i/gamma_ramp_size, 1.0/gamma[2]) * - UINT16_MAX * white_point[2]; - } - - /* Set new gamma ramps */ - xcb_void_cookie_t gamma_set_cookie = - xcb_randr_set_crtc_gamma_checked(conn, crtc, gamma_ramp_size, - gamma_r, gamma_g, gamma_b); - error = xcb_request_check(conn, gamma_set_cookie); - - if (error) { - fprintf(stderr, "RANDR Set CRTC Gamma, error: %d\n", - error->error_code); - free(gamma_ramps); - xcb_disconnect(conn); - return -1; - } - - free(gamma_ramps); - - /* Close connection */ - xcb_disconnect(conn); - - return 0; -} diff --git a/colortemp.h b/colortemp.h deleted file mode 100644 index b71ec14..0000000 --- a/colortemp.h +++ /dev/null @@ -1,26 +0,0 @@ -/* colortemp.h -- X color temperature adjustment header - This file is part of Redshift. - - Redshift 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. - - Redshift 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 Redshift. If not, see . - - Copyright (c) 2009 Jon Lund Steffensen -*/ - -#ifndef _COLORTEMP_H -#define _COLORTEMP_H - -int colortemp_check_extension(); -int colortemp_set_temperature(int temp, float gamma[3]); - -#endif /* ! _COLORTEMP_H */ diff --git a/randr.c b/randr.c new file mode 100644 index 0000000..5226b81 --- /dev/null +++ b/randr.c @@ -0,0 +1,155 @@ +/* randr.c -- X RandR gamma adjustment source + This file is part of Redshift. + + Redshift 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. + + Redshift 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 Redshift. If not, see . + + Copyright (c) 2009 Jon Lund Steffensen +*/ + +#include +#include + +#include +#include + +#include "colorramp.h" + + +int +randr_check_extension() +{ + xcb_generic_error_t *error; + + /* Open X server connection */ + xcb_connection_t *conn = xcb_connect(NULL, NULL); + + /* Query RandR version */ + xcb_randr_query_version_cookie_t ver_cookie = + xcb_randr_query_version(conn, 1, 3); + xcb_randr_query_version_reply_t *ver_reply = + xcb_randr_query_version_reply(conn, ver_cookie, &error); + + if (error) { + fprintf(stderr, "RANDR Query Version, error: %d\n", + error->error_code); + xcb_disconnect(conn); + return -1; + } + + if (ver_reply->major_version < 1 || ver_reply->minor_version < 3) { + fprintf(stderr, "Unsupported RANDR version (%u.%u)\n", + ver_reply->major_version, ver_reply->minor_version); + free(ver_reply); + xcb_disconnect(conn); + return -1; + } + + free(ver_reply); + + /* Close connection */ + xcb_disconnect(conn); + + return 0; +} + +int +randr_set_temperature(int temp, float gamma[3]) +{ + xcb_generic_error_t *error; + + /* Open X server connection */ + xcb_connection_t *conn = xcb_connect(NULL, NULL); + + /* Get first screen */ + const xcb_setup_t *setup = xcb_get_setup(conn); + xcb_screen_iterator_t iter = xcb_setup_roots_iterator(setup); + xcb_screen_t *screen = iter.data; + + /* Get list of CRTCs for the screen */ + xcb_randr_get_screen_resources_current_cookie_t res_cookie = + xcb_randr_get_screen_resources_current(conn, screen->root); + xcb_randr_get_screen_resources_current_reply_t *res_reply = + xcb_randr_get_screen_resources_current_reply(conn, res_cookie, + &error); + + if (error) { + fprintf(stderr, "RANDR Get Screen Resources Current," + " error: %d\n", error->error_code); + xcb_disconnect(conn); + return -1; + } + + xcb_randr_crtc_t *crtcs = + xcb_randr_get_screen_resources_current_crtcs(res_reply); + xcb_randr_crtc_t crtc = crtcs[0]; + + free(res_reply); + + /* Request size of gamma ramps */ + xcb_randr_get_crtc_gamma_size_cookie_t gamma_size_cookie = + xcb_randr_get_crtc_gamma_size(conn, crtc); + xcb_randr_get_crtc_gamma_size_reply_t *gamma_size_reply = + xcb_randr_get_crtc_gamma_size_reply(conn, gamma_size_cookie, + &error); + + if (error) { + fprintf(stderr, "RANDR Get CRTC Gamma Size, error: %d\n", + error->error_code); + xcb_disconnect(conn); + return -1; + } + + int gamma_ramp_size = gamma_size_reply->size; + + free(gamma_size_reply); + + if (gamma_ramp_size == 0) { + fprintf(stderr, "Error: Gamma ramp size too small, %i\n", + gamma_ramp_size); + xcb_disconnect(conn); + return -1; + } + + /* Create new gamma ramps */ + uint16_t *gamma_ramps = malloc(3*gamma_ramp_size*sizeof(uint16_t)); + if (gamma_ramps == NULL) abort(); + + uint16_t *gamma_r = &gamma_ramps[0*gamma_ramp_size]; + uint16_t *gamma_g = &gamma_ramps[1*gamma_ramp_size]; + uint16_t *gamma_b = &gamma_ramps[2*gamma_ramp_size]; + + colorramp_fill(gamma_r, gamma_g, gamma_b, gamma_ramp_size, + temp, gamma); + + /* Set new gamma ramps */ + xcb_void_cookie_t gamma_set_cookie = + xcb_randr_set_crtc_gamma_checked(conn, crtc, gamma_ramp_size, + gamma_r, gamma_g, gamma_b); + error = xcb_request_check(conn, gamma_set_cookie); + + if (error) { + fprintf(stderr, "RANDR Set CRTC Gamma, error: %d\n", + error->error_code); + free(gamma_ramps); + xcb_disconnect(conn); + return -1; + } + + free(gamma_ramps); + + /* Close connection */ + xcb_disconnect(conn); + + return 0; +} diff --git a/randr.h b/randr.h new file mode 100644 index 0000000..7efa94c --- /dev/null +++ b/randr.h @@ -0,0 +1,26 @@ +/* randr.h -- X RandR gamma adjustment header + This file is part of Redshift. + + Redshift 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. + + Redshift 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 Redshift. If not, see . + + Copyright (c) 2009 Jon Lund Steffensen +*/ + +#ifndef _REDSHIFT_RANDR_H +#define _REDSHIFT_RANDR_H + +int randr_check_extension(); +int randr_set_temperature(int temp, float gamma[3]); + +#endif /* ! _REDSHIFT_RANDR_H */ diff --git a/redshift.c b/redshift.c index 836d596..70bc4fa 100644 --- a/redshift.c +++ b/redshift.c @@ -26,7 +26,7 @@ #include #include "solar.h" -#include "colortemp.h" +#include "randr.h" /* Bounds for parameters. */ @@ -71,7 +71,7 @@ int main(int argc, char *argv[]) { /* Check extensions needed for color temperature adjustment. */ - int r = colortemp_check_extension(); + int r = randr_check_extension(); if (r < 0) { fprintf(stderr, "Unable to set color temperature:" " Needed extension is missing.\n"); @@ -236,7 +236,7 @@ main(int argc, char *argv[]) } /* Set color temperature */ - r = colortemp_set_temperature(temp, gamma); + r = randr_set_temperature(temp, gamma); if (r < 0) { fprintf(stderr, "Unable to set color temperature.\n"); exit(EXIT_FAILURE); -- cgit v1.2.3-70-g09d2