aboutsummaryrefslogtreecommitdiff
path: root/sway/commands
diff options
context:
space:
mode:
authorGeoff Greer <geoff@greer.fm>2019-02-10 16:56:57 -0800
committeremersion <contact@emersion.fr>2019-03-24 09:37:24 +0200
commit6e3046878d4dced3f2e503973ad31d7921c0c400 (patch)
tree6a8b5b2204624848edb0b37ecfad8c7764bd2633 /sway/commands
parent200833caaea36dd65324e5460520731f5c98ff8a (diff)
Add support for manually setting subpixel hinting on outputs.
Many laptop screens report unknown subpixel order. Allow users to manually set subpixel hinting to work around this. Addresses https://github.com/swaywm/sway/issues/3163
Diffstat (limited to 'sway/commands')
-rw-r--r--sway/commands/output.c1
-rw-r--r--sway/commands/output/subpixel.c36
2 files changed, 37 insertions, 0 deletions
diff --git a/sway/commands/output.c b/sway/commands/output.c
index 40dbf3ca..44e28512 100644
--- a/sway/commands/output.c
+++ b/sway/commands/output.c
@@ -18,6 +18,7 @@ static struct cmd_handler output_handlers[] = {
{ "res", output_cmd_mode },
{ "resolution", output_cmd_mode },
{ "scale", output_cmd_scale },
+ { "subpixel", output_cmd_subpixel },
{ "transform", output_cmd_transform },
};
diff --git a/sway/commands/output/subpixel.c b/sway/commands/output/subpixel.c
new file mode 100644
index 00000000..63191ee6
--- /dev/null
+++ b/sway/commands/output/subpixel.c
@@ -0,0 +1,36 @@
+#include <string.h>
+#include "log.h"
+#include "sway/commands.h"
+#include "sway/config.h"
+#include "sway/output.h"
+
+struct cmd_results *output_cmd_subpixel(int argc, char **argv) {
+ if (!config->handler_context.output_config) {
+ return cmd_results_new(CMD_FAILURE, "Missing output config");
+ }
+ if (!argc) {
+ return cmd_results_new(CMD_INVALID, "Missing subpixel argument.");
+ }
+ enum wl_output_subpixel subpixel;
+
+ if (strcmp(*argv, "rgb") == 0) {
+ subpixel = WL_OUTPUT_SUBPIXEL_HORIZONTAL_RGB;
+ } else if (strcmp(*argv, "bgr") == 0) {
+ subpixel = WL_OUTPUT_SUBPIXEL_HORIZONTAL_BGR;
+ } else if (strcmp(*argv, "vrgb") == 0) {
+ subpixel = WL_OUTPUT_SUBPIXEL_VERTICAL_RGB;
+ } else if (strcmp(*argv, "vbgr") == 0) {
+ subpixel = WL_OUTPUT_SUBPIXEL_VERTICAL_BGR;
+ } else if (strcmp(*argv, "none") == 0) {
+ subpixel = WL_OUTPUT_SUBPIXEL_NONE;
+ } else {
+ return cmd_results_new(CMD_INVALID, "Invalid output subpixel.");
+ }
+
+ struct output_config *oc = config->handler_context.output_config;
+ config->handler_context.leftovers.argc = argc - 1;
+ config->handler_context.leftovers.argv = argv + 1;
+
+ oc->subpixel = subpixel;
+ return NULL;
+}