diff options
Diffstat (limited to 'sway')
-rw-r--r-- | sway/commands/output/transform.c | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/sway/commands/output/transform.c b/sway/commands/output/transform.c index 8e5324ad..2a3d1d4b 100644 --- a/sway/commands/output/transform.c +++ b/sway/commands/output/transform.c | |||
@@ -4,6 +4,22 @@ | |||
4 | #include "log.h" | 4 | #include "log.h" |
5 | #include "sway/output.h" | 5 | #include "sway/output.h" |
6 | 6 | ||
7 | static enum wl_output_transform invert_rotation_direction( | ||
8 | enum wl_output_transform t) { | ||
9 | switch (t) { | ||
10 | case WL_OUTPUT_TRANSFORM_90: | ||
11 | return WL_OUTPUT_TRANSFORM_270; | ||
12 | case WL_OUTPUT_TRANSFORM_270: | ||
13 | return WL_OUTPUT_TRANSFORM_90; | ||
14 | case WL_OUTPUT_TRANSFORM_FLIPPED_90: | ||
15 | return WL_OUTPUT_TRANSFORM_FLIPPED_270; | ||
16 | case WL_OUTPUT_TRANSFORM_FLIPPED_270: | ||
17 | return WL_OUTPUT_TRANSFORM_FLIPPED_90; | ||
18 | default: | ||
19 | return t; | ||
20 | } | ||
21 | } | ||
22 | |||
7 | struct cmd_results *output_cmd_transform(int argc, char **argv) { | 23 | struct cmd_results *output_cmd_transform(int argc, char **argv) { |
8 | if (!config->handler_context.output_config) { | 24 | if (!config->handler_context.output_config) { |
9 | return cmd_results_new(CMD_FAILURE, "Missing output config"); | 25 | return cmd_results_new(CMD_FAILURE, "Missing output config"); |
@@ -11,6 +27,7 @@ struct cmd_results *output_cmd_transform(int argc, char **argv) { | |||
11 | if (!argc) { | 27 | if (!argc) { |
12 | return cmd_results_new(CMD_INVALID, "Missing transform argument."); | 28 | return cmd_results_new(CMD_INVALID, "Missing transform argument."); |
13 | } | 29 | } |
30 | |||
14 | enum wl_output_transform transform; | 31 | enum wl_output_transform transform; |
15 | if (strcmp(*argv, "normal") == 0 || | 32 | if (strcmp(*argv, "normal") == 0 || |
16 | strcmp(*argv, "0") == 0) { | 33 | strcmp(*argv, "0") == 0) { |
@@ -32,6 +49,7 @@ struct cmd_results *output_cmd_transform(int argc, char **argv) { | |||
32 | } else { | 49 | } else { |
33 | return cmd_results_new(CMD_INVALID, "Invalid output transform."); | 50 | return cmd_results_new(CMD_INVALID, "Invalid output transform."); |
34 | } | 51 | } |
52 | |||
35 | struct output_config *output = config->handler_context.output_config; | 53 | struct output_config *output = config->handler_context.output_config; |
36 | config->handler_context.leftovers.argc = argc - 1; | 54 | config->handler_context.leftovers.argc = argc - 1; |
37 | config->handler_context.leftovers.argv = argv + 1; | 55 | config->handler_context.leftovers.argv = argv + 1; |
@@ -50,13 +68,14 @@ struct cmd_results *output_cmd_transform(int argc, char **argv) { | |||
50 | "Cannot apply relative transform to unknown output %s", output->name); | 68 | "Cannot apply relative transform to unknown output %s", output->name); |
51 | } | 69 | } |
52 | if (strcmp(argv[1], "anticlockwise") == 0) { | 70 | if (strcmp(argv[1], "anticlockwise") == 0) { |
53 | transform = wlr_output_transform_invert(transform); | 71 | transform = invert_rotation_direction(transform); |
54 | } | 72 | } |
55 | struct wlr_output *w_output = s_output->wlr_output; | 73 | struct wlr_output *w_output = s_output->wlr_output; |
56 | transform = wlr_output_transform_compose(w_output->transform, transform); | 74 | transform = wlr_output_transform_compose(w_output->transform, transform); |
57 | config->handler_context.leftovers.argv += 1; | 75 | config->handler_context.leftovers.argv += 1; |
58 | config->handler_context.leftovers.argc -= 1; | 76 | config->handler_context.leftovers.argc -= 1; |
59 | } | 77 | } |
78 | |||
60 | output->transform = transform; | 79 | output->transform = transform; |
61 | return NULL; | 80 | return NULL; |
62 | } | 81 | } |