diff options
Diffstat (limited to 'sway/commands')
-rw-r--r-- | sway/commands/output/transform.c | 46 |
1 files changed, 35 insertions, 11 deletions
diff --git a/sway/commands/output/transform.c b/sway/commands/output/transform.c index f9a94d64..c1555323 100644 --- a/sway/commands/output/transform.c +++ b/sway/commands/output/transform.c | |||
@@ -1,6 +1,8 @@ | |||
1 | #include <string.h> | 1 | #include <string.h> |
2 | #include "sway/commands.h" | 2 | #include "sway/commands.h" |
3 | #include "sway/config.h" | 3 | #include "sway/config.h" |
4 | #include "log.h" | ||
5 | #include "sway/output.h" | ||
4 | 6 | ||
5 | struct cmd_results *output_cmd_transform(int argc, char **argv) { | 7 | struct cmd_results *output_cmd_transform(int argc, char **argv) { |
6 | if (!config->handler_context.output_config) { | 8 | if (!config->handler_context.output_config) { |
@@ -10,30 +12,52 @@ struct cmd_results *output_cmd_transform(int argc, char **argv) { | |||
10 | return cmd_results_new(CMD_INVALID, "output", | 12 | return cmd_results_new(CMD_INVALID, "output", |
11 | "Missing transform argument."); | 13 | "Missing transform argument."); |
12 | } | 14 | } |
13 | 15 | enum wl_output_transform transform; | |
14 | struct output_config *output = config->handler_context.output_config; | ||
15 | if (strcmp(*argv, "normal") == 0) { | 16 | if (strcmp(*argv, "normal") == 0) { |
16 | output->transform = WL_OUTPUT_TRANSFORM_NORMAL; | 17 | transform = WL_OUTPUT_TRANSFORM_NORMAL; |
17 | } else if (strcmp(*argv, "90") == 0) { | 18 | } else if (strcmp(*argv, "90") == 0) { |
18 | output->transform = WL_OUTPUT_TRANSFORM_90; | 19 | transform = WL_OUTPUT_TRANSFORM_90; |
19 | } else if (strcmp(*argv, "180") == 0) { | 20 | } else if (strcmp(*argv, "180") == 0) { |
20 | output->transform = WL_OUTPUT_TRANSFORM_180; | 21 | transform = WL_OUTPUT_TRANSFORM_180; |
21 | } else if (strcmp(*argv, "270") == 0) { | 22 | } else if (strcmp(*argv, "270") == 0) { |
22 | output->transform = WL_OUTPUT_TRANSFORM_270; | 23 | transform = WL_OUTPUT_TRANSFORM_270; |
23 | } else if (strcmp(*argv, "flipped") == 0) { | 24 | } else if (strcmp(*argv, "flipped") == 0) { |
24 | output->transform = WL_OUTPUT_TRANSFORM_FLIPPED; | 25 | transform = WL_OUTPUT_TRANSFORM_FLIPPED; |
25 | } else if (strcmp(*argv, "flipped-90") == 0) { | 26 | } else if (strcmp(*argv, "flipped-90") == 0) { |
26 | output->transform = WL_OUTPUT_TRANSFORM_FLIPPED_90; | 27 | transform = WL_OUTPUT_TRANSFORM_FLIPPED_90; |
27 | } else if (strcmp(*argv, "flipped-180") == 0) { | 28 | } else if (strcmp(*argv, "flipped-180") == 0) { |
28 | output->transform = WL_OUTPUT_TRANSFORM_FLIPPED_180; | 29 | transform = WL_OUTPUT_TRANSFORM_FLIPPED_180; |
29 | } else if (strcmp(*argv, "flipped-270") == 0) { | 30 | } else if (strcmp(*argv, "flipped-270") == 0) { |
30 | output->transform = WL_OUTPUT_TRANSFORM_FLIPPED_270; | 31 | transform = WL_OUTPUT_TRANSFORM_FLIPPED_270; |
31 | } else { | 32 | } else { |
32 | return cmd_results_new(CMD_INVALID, "output", | 33 | return cmd_results_new(CMD_INVALID, "output", |
33 | "Invalid output transform."); | 34 | "Invalid output transform."); |
34 | } | 35 | } |
35 | 36 | struct output_config *output = config->handler_context.output_config; | |
36 | config->handler_context.leftovers.argc = argc - 1; | 37 | config->handler_context.leftovers.argc = argc - 1; |
37 | config->handler_context.leftovers.argv = argv + 1; | 38 | config->handler_context.leftovers.argv = argv + 1; |
39 | if (argc > 1 && | ||
40 | (strcmp(argv[1], "clockwise") == 0 || strcmp(argv[1], "anticlockwise") == 0)) { | ||
41 | if (!sway_assert(output->name != NULL, "Output config name not set")) { | ||
42 | return NULL; | ||
43 | } | ||
44 | if (strcmp(output->name, "*") == 0) { | ||
45 | return cmd_results_new(CMD_INVALID, "output", | ||
46 | "Cannot apply relative transform to all outputs."); | ||
47 | } | ||
48 | struct sway_output *s_output = output_by_name(output->name); | ||
49 | if (s_output == NULL) { | ||
50 | return cmd_results_new(CMD_INVALID, "output", | ||
51 | "Cannot apply relative transform to unknown output %s", output->name); | ||
52 | } | ||
53 | if (strcmp(argv[1], "anticlockwise") == 0) { | ||
54 | transform = wlr_output_transform_invert(transform); | ||
55 | } | ||
56 | struct wlr_output *w_output = s_output->wlr_output; | ||
57 | transform = wlr_output_transform_compose(w_output->transform, transform); | ||
58 | config->handler_context.leftovers.argv += 1; | ||
59 | config->handler_context.leftovers.argc -= 1; | ||
60 | } | ||
61 | output->transform = transform; | ||
38 | return NULL; | 62 | return NULL; |
39 | } | 63 | } |