diff options
| author | Mattias Andrée <maandree@operamail.com> | 2014-02-15 23:04:15 +0100 | 
|---|---|---|
| committer | Mattias Andrée <maandree@operamail.com> | 2014-02-15 23:04:15 +0100 | 
| commit | ed656ec043b90e6faab198e32d342e1c01f1872e (patch) | |
| tree | 7a959e2bd2cf2e806607f176b8f7b5f26a672c90 /src | |
| parent | add makefile (diff) | |
| download | blueshift-ed656ec043b90e6faab198e32d342e1c01f1872e.tar.gz blueshift-ed656ec043b90e6faab198e32d342e1c01f1872e.tar.bz2 blueshift-ed656ec043b90e6faab198e32d342e1c01f1872e.tar.xz | |
m
Signed-off-by: Mattias Andrée <maandree@operamail.com>
Diffstat (limited to '')
| -rw-r--r-- | src/blueshift_randr.c | 92 | 
1 files changed, 31 insertions, 61 deletions
| diff --git a/src/blueshift_randr.c b/src/blueshift_randr.c index f2027df..b0915bc 100644 --- a/src/blueshift_randr.c +++ b/src/blueshift_randr.c @@ -46,26 +46,6 @@ typedef struct blueshift_randr_crtc    unsigned int curve_size;    /** -   * This entity holds the allocation to the colour curves -   */ -  xcb_randr_get_crtc_gamma_reply_t* gamma_get_reply; -   -  /** -   * Red colour curve -   */ -  uint16_t* r_curve; -   -  /** -   * Green colour curve -   */ -  uint16_t* g_curve; -   -  /** -   * Blue colour curve -   */ -  uint16_t* b_curve; -   -  /**     * CRT controller     */    xcb_randr_crtc_t* crtc; @@ -99,6 +79,21 @@ static blueshift_randr_crtc_t* crtcs;   */  static blueshift_randr_crtc_t* crtcs_end; +/** + * The red colour curve + */ +static uint16_t* r_curve; + +/** + * The green colour curve + */ +static uint16_t* g_curve; + +/** + * The blue colour curve + */ +static uint16_t* b_curve; +  /** @@ -120,6 +115,8 @@ int blueshift_randr_open(void)    xcb_randr_get_crtc_gamma_size_cookie_t gamma_size_cookie;    xcb_randr_get_crtc_gamma_size_reply_t* gamma_size_reply;    xcb_randr_get_crtc_gamma_cookie_t gamma_get_cookie; +  xcb_randr_get_crtc_gamma_reply_t* gamma_get_reply; +      /* Get X connection */ @@ -206,7 +203,7 @@ int blueshift_randr_open(void)        /* Acquire curve control */        gamma_get_cookie = xcb_randr_get_crtc_gamma(connection, *(crtcs_->crtc)); -      crtcs_->gamma_get_reply = xcb_randr_get_crtc_gamma_reply(connection, gamma_get_cookie, &error); +      gamma_get_reply = xcb_randr_get_crtc_gamma_reply(connection, gamma_get_cookie, &error);        if (error)  	{ @@ -215,12 +212,16 @@ int blueshift_randr_open(void)  	  return 1;  	} -      crtcs_->r_curve = xcb_randr_get_crtc_gamma_red(crtcs_->gamma_get_reply); -      crtcs_->g_curve = xcb_randr_get_crtc_gamma_green(crtcs_->gamma_get_reply); -      crtcs_->b_curve = xcb_randr_get_crtc_gamma_blue(crtcs_->gamma_get_reply); +      free(gamma_get_reply);      } +  /* Allocate curves */ +   +  r_curve = malloc(3 * 256 * sizeof(uint16_t)); +  g_curve = r_curve + 256; +  b_curve = g_curve + 256; +      return 0;  } @@ -237,8 +238,7 @@ int blueshift_randr_open(void)  int blueshift_randr_apply(uint64_t use_crtcs, uint16_t* r_curve, uint16_t* g_curve, uint16_t* b_curve)  {    blueshift_randr_crtc_t* crtcs_ = crtcs; -    -  unsigned int i; +      xcb_void_cookie_t gamma_set_cookie; @@ -252,20 +252,10 @@ int blueshift_randr_apply(uint64_t use_crtcs, uint16_t* r_curve, uint16_t* g_cur  	goto next_crtc; -      /* Set curves */ -       -      for (i = 0; i < crtcs_->curve_size; i++) -	{ -	  *(crtcs_->r_curve + i) = *(r_curve + i); -	  *(crtcs_->g_curve + i) = *(g_curve + i); -	  *(crtcs_->b_curve + i) = *(b_curve + i); -	} -       -              /* Apply curves */        gamma_set_cookie = xcb_randr_set_crtc_gamma_checked(connection, *(crtcs_->crtc), crtcs_->curve_size, -							  crtcs_->r_curve, crtcs_->g_curve, crtcs_->b_curve); +							  r_curve, g_curve, b_curve);        error = xcb_request_check(connection, gamma_set_cookie);        if (error) @@ -291,17 +281,9 @@ int blueshift_randr_apply(uint64_t use_crtcs, uint16_t* r_curve, uint16_t* g_cur   */  void blueshift_randr_close(void)  { -  blueshift_randr_crtc_t* crtcs_; -   -   -  /* Free CRTC resources */ -   -  for (crtcs_ = crtcs; crtcs_ != crtcs_end; crtcs_++) -    free(crtcs_->gamma_get_reply); -   -      /* Free remaining resources */ +  free(r_curve);    free(crtcs);    free(res_reply);    xcb_disconnect(connection); @@ -311,31 +293,19 @@ void blueshift_randr_close(void)  int main(int argc, char** argv)  { -  uint16_t* r_curve = malloc(3 * 256 * sizeof(uint16_t)); -  uint16_t* g_curve = r_curve + 256; -  uint16_t* b_curve = g_curve + 256;    long i;    (void) argc;    (void) argv;    if (blueshift_randr_open()) -    { -      free(r_curve); -      return 1; -    } +    return 1;    for (i = 0; i < 256; i++)      r_curve[i] = g_curve[i] = b_curve[i] = (int)((float)i / 255.f * (float)((1 << 16) - 1) + 0.f); -  if (blueshift_randr_apply(~0, r_curve, g_curve, b_curve)) -    { -      free(r_curve); -      return 1; -    } -   +  i = blueshift_randr_apply(~0, r_curve, g_curve, b_curve);    blueshift_randr_close(); -  free(r_curve); -  return 0; +  return i;  } | 
