add cli flag --alpha-layer

now that we have long-opts, we don't have to worry about exhausting the
alphabet list for short-opts. so adding a cli flag to set/unset the
checker background makes sense.

ref: https://codeberg.org/nsxiv/nsxiv/issues/404
This commit is contained in:
NRK 2023-01-17 15:48:59 +06:00 committed by Gitea
parent fddad757c6
commit 1f788a318b
5 changed files with 26 additions and 8 deletions

View file

@ -45,11 +45,6 @@ static const double CONTRAST_MAX = 4.0;
/* command i_scroll pans image 1/PAN_FRACTION of screen width/height */
static const int PAN_FRACTION = 5;
/* if true, use a checkerboard background for alpha layer,
* toggled with 'A' key binding
*/
static const bool ALPHA_LAYER = false;
/* percentage of memory to use for imlib2's cache size.
* 3 means use 3% of total memory which is about 245MiB on 8GiB machine.
* 0 or less means disable cache.
@ -70,6 +65,11 @@ static const int CACHE_SIZE_FALLBACK = 32 * 1024 * 1024; /* fallback to 32MiB if
*/
static const bool ANTI_ALIAS = true;
/* if true, use a checkerboard background for alpha layer,
* toggled with 'A' key binding (overwritten via `--alpha-layer` option)
*/
static const bool ALPHA_LAYER = false;
#endif
#ifdef INCLUDE_THUMBS_CONFIG

View file

@ -119,6 +119,11 @@ key-handler and the input of \-i will be separated by a NULL character.
Enables anti-aliasing, when given
.I no
as an argument, disables it instead.
.TP
.BI "\-\-alpha\-layer" [=no]
Enables checkerboard background for alpha layer, when given
.I no
as an argument, disables it instead.
.SH KEYBOARD COMMANDS
.SS General
The following keyboard commands are available in both image and thumbnail modes:

View file

@ -91,7 +91,7 @@ void img_init(img_t *img, win_t *win)
img->checkpan = false;
img->dirty = false;
img->anti_alias = options->anti_alias;
img->alpha = ALPHA_LAYER;
img->alpha = options->alpha_layer;
img->multi.cap = img->multi.cnt = 0;
img->multi.animate = options->animate;
img->multi.framedelay = options->framerate > 0 ? 1000 / options->framerate : 0;

View file

@ -241,6 +241,7 @@ struct opt {
float zoom;
bool animate;
bool anti_alias;
bool alpha_layer;
int gamma;
unsigned int slideshow;
int framerate;

View file

@ -66,8 +66,13 @@ static void print_version(void)
void parse_options(int argc, char **argv)
{
enum { /* ensure these can't be represented in a single byte */
OPT_AA = UCHAR_MAX + 1
enum {
/* ensure these can't be represented in a single byte in order
* to avoid conflicts with short opts
*/
OPT_START = UCHAR_MAX,
OPT_AA,
OPT_AL
};
static const struct optparse_long longopts[] = {
{ "framerate", 'A', OPTPARSE_REQUIRED },
@ -95,6 +100,7 @@ void parse_options(int argc, char **argv)
{ "zoom", 'z', OPTPARSE_REQUIRED },
{ "null", '0', OPTPARSE_NONE },
{ "anti-alias", OPT_AA, OPTPARSE_OPTIONAL },
{ "alpha-layer", OPT_AL, OPTPARSE_OPTIONAL },
{ 0 }, /* end */
};
@ -115,6 +121,7 @@ void parse_options(int argc, char **argv)
_options.scalemode = SCALE_DOWN;
_options.zoom = 1.0;
_options.anti_alias = ANTI_ALIAS;
_options.alpha_layer = ALPHA_LAYER;
_options.animate = false;
_options.gamma = 0;
_options.slideshow = 0;
@ -247,6 +254,11 @@ void parse_options(int argc, char **argv)
error(EXIT_FAILURE, 0, "Invalid argument for option --anti-alias: %s", op.optarg);
_options.anti_alias = op.optarg == NULL;
break;
case OPT_AL:
if (op.optarg != NULL && !STREQ(op.optarg, "no"))
error(EXIT_FAILURE, 0, "Invalid argument for option --alpha-layer: %s", op.optarg);
_options.alpha_layer = op.optarg == NULL;
break;
}
}