diff options
author | Mattias Andrée <m@maandree.se> | 2025-03-23 15:08:45 +0100 |
---|---|---|
committer | Mattias Andrée <m@maandree.se> | 2025-03-23 15:08:45 +0100 |
commit | 1ea4a4d1968b767912e70e18be8f0e1e22bf9c6f (patch) | |
tree | fdb5e2eb1fb03aa672281130ef71c579a262e81a | |
parent | Update documentation reflect that the drm method now supports CRTC list (diff) | |
download | redshift-ng-1ea4a4d1968b767912e70e18be8f0e1e22bf9c6f.tar.gz redshift-ng-1ea4a4d1968b767912e70e18be8f0e1e22bf9c6f.tar.bz2 redshift-ng-1ea4a4d1968b767912e70e18be8f0e1e22bf9c6f.tar.xz |
Use libgamma to determine available adjustment method configuration options
Signed-off-by: Mattias Andrée <m@maandree.se>
-rw-r--r-- | src/backend-direct.c | 46 | ||||
-rw-r--r-- | src/common.h | 24 | ||||
-rw-r--r-- | src/gamma-drm.c | 29 | ||||
-rw-r--r-- | src/gamma-quartz.c | 25 | ||||
-rw-r--r-- | src/gamma-randr.c | 32 | ||||
-rw-r--r-- | src/gamma-vidmode.c | 28 | ||||
-rw-r--r-- | src/gamma-w32gdi.c | 25 |
7 files changed, 98 insertions, 111 deletions
diff --git a/src/backend-direct.c b/src/backend-direct.c index d0a53eb..5654947 100644 --- a/src/backend-direct.c +++ b/src/backend-direct.c @@ -197,6 +197,52 @@ direct_create(struct gamma_state **state_out, int method, const char *method_nam } +void +direct_print_help(FILE *f, int method) +{ + struct libgamma_method_capabilities caps; + + if (libgamma_method_capabilities(&caps, sizeof(caps), method)) { + fputs(_("Adjustment not available\n"), f); + fputs("\n", f); + return; + } + + if (caps.multiple_partitions && caps.partitions_are_graphics_cards) { + /* TRANSLATORS: left column must not be translated */ + fputs(_(" card=N Graphics card to apply adjustments to\n"), f); + } else if (caps.multiple_partitions) { + /* TRANSLATORS: left column must not be translated */ + fputs(_(" screen=N X screen to apply adjustments to\n"), f); + } + + if (caps.multiple_crtcs) { + /* TRANSLATORS: left column must not be translated */ + fputs(_(" crtc=N List of comma-separated CRTCs to apply adjustments to\n"), f); + } + + if (caps.multiple_partitions || caps.multiple_crtcs) + fputs("\n", f); +} + + +int +direct_set_option(struct gamma_state *state, const char *key, const char *value) +{ + if (state->multiple_partitions && !strcasecmp(key, state->partitions_are_graphics_cards ? "card" : "screen")) { + return direct_set_partitions(state, key, value); + } else if (state->multiple_crtcs && !strcasecmp(key, "crtc")) { + return direct_set_crtcs(state, key, value); + } else if (!strcasecmp(key, "preserve")) { + weprintf(_("Deprecated method parameter ignored: `%s'."), key); + return 0; + } else { + weprintf(_("Unknown method parameter: `%s'."), key); + return -1; + } +} + + int direct_set_partitions(struct gamma_state *state, const char *key, const char *value) { diff --git a/src/common.h b/src/common.h index aa929ae..578a82d 100644 --- a/src/common.h +++ b/src/common.h @@ -1184,14 +1184,34 @@ extern int verbose; /** * Create an initialised state object for direct gamma adjustments * - * @param state_out Output parameter for the state object - * @return 0 on success, -1 on failure + * @param state_out Output parameter for the state object + * @param method libgamma constant for the adjustment method + * @param method_name redshift's name for the adjustment method + * @return 0 on success, -1 on failure * * `*state_out` is set (potentially to `NULL`) on failure */ int direct_create(GAMMA_STATE **state_out, int method, const char *method_name); /** + * Print help on options for the adjustment method using direct gamma adjustments + * + * @param f Output sink + * @param method libgamma constant for the adjustment method + */ +void direct_print_help(FILE *f, int method); + +/** + * Configure the adjustment method using direct gamma adjustments + * + * @param state State object for the adjustment method + * @param key Option to configure + * @param value Option value to set + * @return 0 on success, -1 on failure + */ +int direct_set_option(GAMMA_STATE *state, const char *key, const char *value); + +/** * Select partitions to apply adjustments to using direct gamma adjustments * * @param state State object for the adjustment method diff --git a/src/gamma-drm.c b/src/gamma-drm.c index f5aef31..798fc84 100644 --- a/src/gamma-drm.c +++ b/src/gamma-drm.c @@ -32,30 +32,13 @@ drm_print_help(FILE *f) { fputs(_("Adjust gamma ramps with Direct Rendering Manager.\n"), f); fputs("\n", f); - - /* TRANSLATORS: DRM help output left column must not be translated */ - fputs(_(" card=N Graphics card to apply adjustments to\n"), f); - fputs(_(" crtc=N List of comma-separated CRTCs to apply adjustments to\n"), f); - fputs("\n", f); -} - - -static int -drm_set_option(struct gamma_state *state, const char *key, const char *value) -{ - if (!strcasecmp(key, "card")) { - return direct_set_partitions(state, key, value); - } else if (!strcasecmp(key, "crtc")) { - return direct_set_crtcs(state, key, value); - } else { - weprintf(_("Unknown method parameter: `%s'."), key); - return -1; - } + direct_print_help(f, LIBGAMMA_METHOD_LINUX_DRM); } -#define drm_start direct_start -#define drm_apply direct_apply -#define drm_restore direct_restore -#define drm_free direct_free +#define drm_set_option direct_set_option +#define drm_start direct_start +#define drm_apply direct_apply +#define drm_restore direct_restore +#define drm_free direct_free const struct gamma_method drm_gamma_method = GAMMA_METHOD_INIT("drm", 0, 0, drm); diff --git a/src/gamma-quartz.c b/src/gamma-quartz.c index ba8a4c4..1750c98 100644 --- a/src/gamma-quartz.c +++ b/src/gamma-quartz.c @@ -32,26 +32,13 @@ quartz_print_help(FILE *f) { fputs(_("Adjust gamma ramps on macOS using Quartz.\n"), f); fputs("\n", f); + direct_print_help(f, LIBGAMMA_METHOD_QUARTZ_CORE_GRAPHICS); } -static int -quartz_set_option(struct gamma_state *state, const char *key, const char *value) -{ - (void) state; - (void) value; - if (!strcasecmp(key, "preserve")) { - weprintf(_("Deprecated method parameter ignored: `%s'."), key); - return 0; - } else { - weprintf(_("Unknown method parameter: `%s'."), key); - return -1; - } -} - - -#define quartz_start direct_start -#define quartz_apply direct_apply -#define quartz_restore direct_restore -#define quartz_free direct_free +#define quartz_set_option direct_set_option +#define quartz_start direct_start +#define quartz_apply direct_apply +#define quartz_restore direct_restore +#define quartz_free direct_free const struct gamma_method quartz_gamma_method = GAMMA_METHOD_INIT("quartz", 1, 1, quartz); diff --git a/src/gamma-randr.c b/src/gamma-randr.c index 1132960..5580a4f 100644 --- a/src/gamma-randr.c +++ b/src/gamma-randr.c @@ -32,33 +32,13 @@ randr_print_help(FILE *f) { fputs(_("Adjust gamma ramps with the X RANDR extension.\n"), f); fputs("\n", f); - - /* TRANSLATORS: RANDR help output left column must not be translated */ - fputs(_(" screen=N X screen to apply adjustments to\n"), f); - fputs(_(" crtc=N List of comma-separated CRTCs to apply adjustments to\n"), f); - fputs("\n", f); -} - - -static int -randr_set_option(struct gamma_state *state, const char *key, const char *value) -{ - if (!strcasecmp(key, "screen")) { - return direct_set_partitions(state, key, value); - } else if (!strcasecmp(key, "crtc")) { - return direct_set_crtcs(state, key, value); - } else if (!strcasecmp(key, "preserve")) { - weprintf(_("Deprecated method parameter ignored: `%s'."), key); - return 0; - } else { - weprintf(_("Unknown method parameter: `%s'."), key); - return -1; - } + direct_print_help(f, LIBGAMMA_METHOD_X_RANDR); } -#define randr_start direct_start -#define randr_apply direct_apply -#define randr_restore direct_restore -#define randr_free direct_free +#define randr_set_option direct_set_option +#define randr_start direct_start +#define randr_apply direct_apply +#define randr_restore direct_restore +#define randr_free direct_free const struct gamma_method randr_gamma_method = GAMMA_METHOD_INIT("randr", 1, 0, randr); diff --git a/src/gamma-vidmode.c b/src/gamma-vidmode.c index e38de97..505fba0 100644 --- a/src/gamma-vidmode.c +++ b/src/gamma-vidmode.c @@ -32,29 +32,13 @@ vidmode_print_help(FILE *f) { fputs(_("Adjust gamma ramps with the X VidMode extension.\n"), f); fputs("\n", f); - - fputs(_(" screen=N X screen to apply adjustments to\n"), f); - fputs("\n", f); -} - - -static int -vidmode_set_option(struct gamma_state *state, const char *key, const char *value) -{ - if (!strcasecmp(key, "screen")) { - return direct_set_partitions(state, key, value); - } else if (!strcasecmp(key, "preserve")) { - weprintf(_("Deprecated method parameter ignored: `%s'."), key); - return 0; - } else { - weprintf(_("Unknown method parameter: `%s'."), key); - return -1; - } + direct_print_help(f, LIBGAMMA_METHOD_X_VIDMODE); } -#define vidmode_start direct_start -#define vidmode_apply direct_apply -#define vidmode_restore direct_restore -#define vidmode_free direct_free +#define vidmode_set_option direct_set_option +#define vidmode_start direct_start +#define vidmode_apply direct_apply +#define vidmode_restore direct_restore +#define vidmode_free direct_free const struct gamma_method vidmode_gamma_method = GAMMA_METHOD_INIT("vidmode", 1, 0, vidmode); diff --git a/src/gamma-w32gdi.c b/src/gamma-w32gdi.c index d06f6b1..a09f768 100644 --- a/src/gamma-w32gdi.c +++ b/src/gamma-w32gdi.c @@ -32,26 +32,13 @@ w32gdi_print_help(FILE *f) { fputs(_("Adjust gamma ramps with the Windows GDI.\n"), f); fputs("\n", f); + direct_print_help(f, LIBGAMMA_METHOD_W32_GDI); } -static int -w32gdi_set_option(struct gamma_state *state, const char *key, const char *value) -{ - (void) state; - (void) value; - if (!strcasecmp(key, "preserve")) { - weprintf(_("Deprecated method parameter ignored: `%s'."), key); - return 0; - } else { - weprintf(_("Unknown method parameter: `%s'."), key); - return -1; - } -} - - -#define w32gdi_start direct_start -#define w32gdi_apply direct_apply -#define w32gdi_restore direct_restore -#define w32gdi_free direct_free +#define w32gdi_set_option direct_set_option +#define w32gdi_start direct_start +#define w32gdi_apply direct_apply +#define w32gdi_restore direct_restore +#define w32gdi_free direct_free const struct gamma_method w32gdi_gamma_method = GAMMA_METHOD_INIT("wingdi", 1, 0, w32gdi); |