mirror of
https://github.com/NickHu/sway
synced 2024-12-29 22:23:46 +01:00
140ce785fe
This enhances the opacity command to support relative assignment as well as the currently implemented absolute assignment. The syntax is copied from the same format that gaps uses for relative and absolute setting. An example usage in a sway config looks like: // relative change (this feature) bindsym button4 opacity plus .1 bindsym button5 opacity minus .1 // absolute change (this feature) bindsym button4 opacity set 1 bindsym button5 opacity set .3 // old way, still supported bindsym button4 opacity 1 bindsym button5 opacity .3
42 lines
1.1 KiB
C
42 lines
1.1 KiB
C
#include <assert.h>
|
|
#include <stdlib.h>
|
|
#include <strings.h>
|
|
#include "sway/commands.h"
|
|
#include "sway/tree/view.h"
|
|
#include "log.h"
|
|
|
|
struct cmd_results *cmd_opacity(int argc, char **argv) {
|
|
struct cmd_results *error = NULL;
|
|
if ((error = checkarg(argc, "opacity", EXPECTED_AT_LEAST, 1))) {
|
|
return error;
|
|
}
|
|
|
|
struct sway_container *con = config->handler_context.container;
|
|
|
|
if (con == NULL) {
|
|
return cmd_results_new(CMD_FAILURE, "No current container");
|
|
}
|
|
|
|
char *err;
|
|
float val = strtof(argc == 1 ? argv[0] : argv[1], &err);
|
|
if (*err) {
|
|
return cmd_results_new(CMD_INVALID, "opacity float invalid");
|
|
}
|
|
|
|
if (!strcasecmp(argv[0], "plus")) {
|
|
val = con->alpha + val;
|
|
} else if (!strcasecmp(argv[0], "minus")) {
|
|
val = con->alpha - val;
|
|
} else if (argc > 1 && strcasecmp(argv[0], "set")) {
|
|
return cmd_results_new(CMD_INVALID,
|
|
"Expected: set|plus|minus <0..1>: %s", argv[0]);
|
|
}
|
|
|
|
if (val < 0 || val > 1) {
|
|
return cmd_results_new(CMD_FAILURE, "opacity value out of bounds");
|
|
}
|
|
|
|
con->alpha = val;
|
|
container_damage_whole(con);
|
|
return cmd_results_new(CMD_SUCCESS, NULL);
|
|
}
|