From 2c08ae1195df521d18ebb28b1135068991e1f1b9 Mon Sep 17 00:00:00 2001 From: Vasiliy Doylov Date: Sun, 6 Apr 2025 00:50:22 +0300 Subject: [PATCH] Add contrast slider Signed-off-by: Vasiliy Doylov --- data/io.gitlab.nekocwd.pipetap.gschema.xml | 1 + src/application.vala | 12 +++++++++++- src/gui/main_bar.blp | 9 +++++++++ src/gui/main_bar.vala | 5 +++++ src/gui/settings.vala | 1 + src/icons/color-symbolic.svg | 2 ++ src/logic/ctrl.vala | 1 + src/logic/wireplumber.vala | 9 +++++++++ src/pipetap.gresource.xml | 1 + 9 files changed, 40 insertions(+), 1 deletion(-) create mode 100644 src/icons/color-symbolic.svg diff --git a/data/io.gitlab.nekocwd.pipetap.gschema.xml b/data/io.gitlab.nekocwd.pipetap.gschema.xml index 2fbc587..51bc7e2 100644 --- a/data/io.gitlab.nekocwd.pipetap.gschema.xml +++ b/data/io.gitlab.nekocwd.pipetap.gschema.xml @@ -20,6 +20,7 @@ + true diff --git a/src/application.vala b/src/application.vala index d6d1bbc..62e7e40 100644 --- a/src/application.vala +++ b/src/application.vala @@ -22,6 +22,7 @@ public class PipeTap.Application : Adw.Application { public Settings settings; public Ui.SliderOverlay exposure; public Ui.SliderOverlay focus; + public Ui.SliderOverlay contrast; public Ui.MainBar main_bar; public string device { get; set; } @@ -58,6 +59,8 @@ public class PipeTap.Application : Adw.Application { exposure = new Ui.SliderOverlay (this, Logic.Ctrl.CtrlType.Exposure, Logic.Ctrl.CtrlType.ExposureEnable, "exp", "camera-iso-symbolic"); if (focus == null) focus = new Ui.SliderOverlay (this, Logic.Ctrl.CtrlType.Focus, Logic.Ctrl.CtrlType.AutoFocusEnable, "focus", "camera-focus-symbolic"); + if (contrast == null) + contrast = new Ui.SliderOverlay (this, Logic.Ctrl.CtrlType.Contrast, Logic.Ctrl.CtrlType.ContrastEnable, "contrast", "color-symbolic"); if (main_bar == null) main_bar = new Ui.MainBar (this); @@ -103,6 +106,13 @@ public class PipeTap.Application : Adw.Application { settings.set_int ("margin-right", 10); settings.set_int ("margin-left", -1); settings.set_int ("margin-top", 65); + settings.set_int ("margin-bottom", 180); + settings.apply (); + settings = this.settings.get_child ("contrast-pos"); + settings.set_int ("orientation", 1); + settings.set_int ("margin-right", 10); + settings.set_int ("margin-left", 10); + settings.set_int ("margin-top", -1); settings.set_int ("margin-bottom", 110); settings.apply (); settings = this.settings.get_child ("focus-pos"); @@ -110,7 +120,7 @@ public class PipeTap.Application : Adw.Application { settings.set_int ("margin-right", -1); settings.set_int ("margin-left", 10); settings.set_int ("margin-top", 65); - settings.set_int ("margin-bottom", 110); + settings.set_int ("margin-bottom", 180); settings.apply (); this.settings.apply (); } diff --git a/src/gui/main_bar.blp b/src/gui/main_bar.blp index bb0b16e..af246a3 100644 --- a/src/gui/main_bar.blp +++ b/src/gui/main_bar.blp @@ -23,6 +23,15 @@ template $PipeTapUiMainBar: $PipeTapUiFloatingWindow { ] } + Gtk.ToggleButton contrast { + icon-name: "color-symbolic"; + tooltip-text: _("Contrast"); + + styles [ + "flat", + ] + } + Gtk.ToggleButton exposure { icon-name: "camera-iso-symbolic"; tooltip-text: _("Exposure"); diff --git a/src/gui/main_bar.vala b/src/gui/main_bar.vala index c50e85d..775ed59 100644 --- a/src/gui/main_bar.vala +++ b/src/gui/main_bar.vala @@ -3,18 +3,23 @@ public class PipeTap.Ui.MainBar : PipeTap.Ui.FloatingWindow { [GtkChild] private unowned Gtk.ToggleButton exposure; [GtkChild] + private unowned Gtk.ToggleButton contrast; + [GtkChild] private new unowned Gtk.ToggleButton focus; public MainBar (PipeTap.Application app) { base (app, "main-controls"); exposure.bind_property ("active", app.exposure, "visible", BindingFlags.SYNC_CREATE | BindingFlags.BIDIRECTIONAL); + contrast.bind_property ("active", app.contrast, "visible", BindingFlags.SYNC_CREATE | BindingFlags.BIDIRECTIONAL); focus.bind_property ("active", app.focus, "visible", BindingFlags.SYNC_CREATE | BindingFlags.BIDIRECTIONAL); app.exposure.bind_property ("is_available", exposure, "sensitive", GLib.BindingFlags.SYNC_CREATE); + app.contrast.bind_property ("is_available", contrast, "sensitive", GLib.BindingFlags.SYNC_CREATE); app.focus.bind_property ("is_available", focus, "sensitive", GLib.BindingFlags.SYNC_CREATE); notify["visible"].connect (() => { if (visible == true) return; app.exposure.visible = false; + app.contrast.visible = false; app.focus.visible = false; }); } diff --git a/src/gui/settings.vala b/src/gui/settings.vala index f8910c2..1eebf30 100644 --- a/src/gui/settings.vala +++ b/src/gui/settings.vala @@ -5,6 +5,7 @@ public class PipeTap.Ui.Settings : Adw.PreferencesDialog { overlays.title = _("Overlays"); overlays.add(make_group_for("Main bar", "main-controls-pos")); overlays.add(make_group_for("Exposure bar", "exp-pos")); + overlays.add(make_group_for("Contrast bar", "contrast-pos")); overlays.add(make_group_for("Focus bar", "focus-pos")); add(overlays); } diff --git a/src/icons/color-symbolic.svg b/src/icons/color-symbolic.svg new file mode 100644 index 0000000..467ebe9 --- /dev/null +++ b/src/icons/color-symbolic.svg @@ -0,0 +1,2 @@ + + diff --git a/src/logic/ctrl.vala b/src/logic/ctrl.vala index 606a6a7..076855e 100644 --- a/src/logic/ctrl.vala +++ b/src/logic/ctrl.vala @@ -6,6 +6,7 @@ namespace PipeTap.Logic { Exposure, ExposureEnable, Contrast, + ContrastEnable, Focus, AutoFocusEnable, } diff --git a/src/logic/wireplumber.vala b/src/logic/wireplumber.vala index 2f9147a..7967a0e 100644 --- a/src/logic/wireplumber.vala +++ b/src/logic/wireplumber.vala @@ -145,6 +145,15 @@ namespace PipeTap.Logic.WirePlumber { var ctrl = new Ctrl(Logic.Ctrl.CtrlType.ExposureEnable, node, id, type, 0, 1, 1); found_ctrls.append(ctrl); break; + case "Contrast": + if (type != "float") { + warning("Wrong type"); + break; + } + message("Found Contrast"); + var ctrl = new Ctrl(Logic.Ctrl.CtrlType.Contrast, node, id, type, 0, 2, 1); + found_ctrls.append(ctrl); + break; default: message("Unknown ctrl %s of %s", description, type); break; diff --git a/src/pipetap.gresource.xml b/src/pipetap.gresource.xml index 4b9903e..bc803da 100644 --- a/src/pipetap.gresource.xml +++ b/src/pipetap.gresource.xml @@ -17,5 +17,6 @@ icons/camera-iso-symbolic.svg icons/camera-focus-symbolic.svg icons/angled-arrows-symbolic.svg + icons/color-symbolic.svg \ No newline at end of file