diff options
author | Mattias Andrée <maandree@operamail.com> | 2014-02-15 21:43:28 +0100 |
---|---|---|
committer | Mattias Andrée <maandree@operamail.com> | 2014-02-15 21:43:28 +0100 |
commit | f9aaae0ec13d31ab3fc215fa2c34600807bff532 (patch) | |
tree | 5b8269647b1b1e47c33414a6c38018839ecf6643 /src/blueshift_randr.c | |
parent | c90 (diff) | |
download | blueshift-f9aaae0ec13d31ab3fc215fa2c34600807bff532.tar.gz blueshift-f9aaae0ec13d31ab3fc215fa2c34600807bff532.tar.bz2 blueshift-f9aaae0ec13d31ab3fc215fa2c34600807bff532.tar.xz |
use all crtcs
Signed-off-by: Mattias Andrée <maandree@operamail.com>
Diffstat (limited to 'src/blueshift_randr.c')
-rw-r--r-- | src/blueshift_randr.c | 106 |
1 files changed, 61 insertions, 45 deletions
diff --git a/src/blueshift_randr.c b/src/blueshift_randr.c index 0338300..75443e4 100644 --- a/src/blueshift_randr.c +++ b/src/blueshift_randr.c @@ -23,7 +23,14 @@ +/** + * The major version of RANDR the program expects + */ #define RANDR_VERSION_MAJOR 1U + +/** + * The minor version of RANDR the program expects + */ #define RANDR_VERSION_MINOR 3U @@ -39,7 +46,9 @@ int main(int argc __attribute__((unused)), char** argv __attribute__((unused))) xcb_screen_t* screen; xcb_randr_get_screen_resources_current_cookie_t res_cookie; xcb_randr_get_screen_resources_current_reply_t* res_reply; + unsigned int crtc_count; xcb_randr_crtc_t* crtcs; + xcb_randr_crtc_t* crtcs_end; xcb_randr_get_crtc_gamma_size_cookie_t gamma_size_cookie; xcb_randr_get_crtc_gamma_size_reply_t* gamma_size_reply; unsigned int curve_size; @@ -93,59 +102,66 @@ int main(int argc __attribute__((unused)), char** argv __attribute__((unused))) } + crtc_count = res_reply->num_crtcs; crtcs = xcb_randr_get_screen_resources_current_crtcs(res_reply); + crtcs_end = crtcs + crtc_count; - gamma_size_cookie = xcb_randr_get_crtc_gamma_size(connection, *crtcs); - gamma_size_reply = xcb_randr_get_crtc_gamma_size_reply(connection, gamma_size_cookie, &error); - - if (error) + while (crtcs != crtcs_end) { - fprintf(stderr, "RANDR CRTC gamma size query returned %i\n", error->error_code); - xcb_disconnect(connection); - return 1; + gamma_size_cookie = xcb_randr_get_crtc_gamma_size(connection, *crtcs); + gamma_size_reply = xcb_randr_get_crtc_gamma_size_reply(connection, gamma_size_cookie, &error); + + if (error) + { + fprintf(stderr, "RANDR CRTC gamma size query returned %i\n", error->error_code); + xcb_disconnect(connection); + return 1; + } + + curve_size = gamma_size_reply->size; + free(gamma_size_reply); + + + gamma_get_cookie = xcb_randr_get_crtc_gamma(connection, *crtcs); + gamma_get_reply = xcb_randr_get_crtc_gamma_reply(connection, gamma_get_cookie, &error); + + if (error) + { + fprintf(stderr, "RANDR CRTC gamma query returned %i\n", error->error_code); + xcb_disconnect(connection); + return 1; + } + + r_gamma = xcb_randr_get_crtc_gamma_red(gamma_get_reply); + g_gamma = xcb_randr_get_crtc_gamma_green(gamma_get_reply); + b_gamma = xcb_randr_get_crtc_gamma_blue(gamma_get_reply); + + + for (i = 0; i < curve_size; i++) + { + *(r_gamma + i) = (1 << 16) - 1 - *(r_gamma + i); + *(g_gamma + i) = (1 << 16) - 1 - *(g_gamma + i); + *(b_gamma + i) = (1 << 16) - 1 - *(b_gamma + i); + } + + + gamma_set_cookie = xcb_randr_set_crtc_gamma_checked(connection, *crtcs, curve_size, r_gamma, g_gamma, b_gamma); + error = xcb_request_check(connection, gamma_set_cookie); + + if (error) + { + fprintf(stderr, "RANDR CRTC control returned %i\n", error->error_code); + return 1; + } + + + free(gamma_get_reply); + crtcs++; } - curve_size = gamma_size_reply->size; - free(gamma_size_reply); - - - gamma_get_cookie = xcb_randr_get_crtc_gamma(connection, *crtcs); - gamma_get_reply = xcb_randr_get_crtc_gamma_reply(connection, gamma_get_cookie, &error); free(res_reply); - - if (error) - { - fprintf(stderr, "RANDR CRTC gamma query returned %i\n", error->error_code); - xcb_disconnect(connection); - return 1; - } - - r_gamma = xcb_randr_get_crtc_gamma_red(gamma_get_reply); - g_gamma = xcb_randr_get_crtc_gamma_green(gamma_get_reply); - b_gamma = xcb_randr_get_crtc_gamma_blue(gamma_get_reply); - - - for (i = 0; i < curve_size; i++) - { - *(r_gamma + i) = (1 << 16) - 1 - *(r_gamma + i); - *(g_gamma + i) = (1 << 16) - 1 - *(g_gamma + i); - *(b_gamma + i) = (1 << 16) - 1 - *(b_gamma + i); - } - - - gamma_set_cookie = xcb_randr_set_crtc_gamma_checked(connection, *crtcs, curve_size, r_gamma, g_gamma, b_gamma); - error = xcb_request_check(connection, gamma_set_cookie); - - if (error) - { - fprintf(stderr, "RANDR CRTC control returned %i\n", error->error_code); - return 1; - } - - - free(gamma_get_reply); xcb_disconnect(connection); return 0; } |