From 2f09ed83386b334f0dfb7f376b99739b15e49fc9 Mon Sep 17 00:00:00 2001 From: Aylur Date: Sun, 24 Nov 2024 00:04:07 +0000 Subject: gjs gtk4 support export jsx-runtime --- lib/astal/gtk4/src/meson.build | 2 ++ lib/astal/gtk4/src/widget/box.vala | 35 ++++++++++++++++++ lib/astal/gtk4/src/widget/slider.vala | 67 +++++++++++++++++++++++++++++++++++ 3 files changed, 104 insertions(+) create mode 100644 lib/astal/gtk4/src/widget/box.vala create mode 100644 lib/astal/gtk4/src/widget/slider.vala (limited to 'lib/astal/gtk4/src') diff --git a/lib/astal/gtk4/src/meson.build b/lib/astal/gtk4/src/meson.build index 8aac969..7b9c1e0 100644 --- a/lib/astal/gtk4/src/meson.build +++ b/lib/astal/gtk4/src/meson.build @@ -25,6 +25,8 @@ deps = [ ] sources = [config] + files( + 'widget/box.vala', + 'widget/slider.vala', 'widget/window.vala', 'application.vala', ) diff --git a/lib/astal/gtk4/src/widget/box.vala b/lib/astal/gtk4/src/widget/box.vala new file mode 100644 index 0000000..eb52f9c --- /dev/null +++ b/lib/astal/gtk4/src/widget/box.vala @@ -0,0 +1,35 @@ +public class Astal.Box : Gtk.Box { + public List children { + set { + foreach (var child in children) { + remove(child); + } + foreach (var child in value) { + append(child); + } + } + owned get { + var list = new List(); + var child = get_first_child(); + while (child != null) { + list.append(child); + child = child.get_next_sibling(); + } + return list; + } + } + + public Gtk.Widget? child { + owned get { + foreach (var child in children) { + return child; + } + return null; + } + set { + var list = new List(); + list.append(child); + this.children = children; + } + } +} diff --git a/lib/astal/gtk4/src/widget/slider.vala b/lib/astal/gtk4/src/widget/slider.vala new file mode 100644 index 0000000..f8002ec --- /dev/null +++ b/lib/astal/gtk4/src/widget/slider.vala @@ -0,0 +1,67 @@ +public class Astal.Slider : Gtk.Scale { + private Gtk.EventControllerLegacy controller; + private bool dragging; + + construct { + draw_value = false; + + if (adjustment == null) + adjustment = new Gtk.Adjustment(0,0,0,0,0,0); + + if (max == 0 && min == 0) { + max = 1; + } + + if (step == 0) { + step = 0.05; + } + + add_controller(controller); + controller.event.connect((event) => { + var type = event.get_event_type(); + if (type == Gdk.EventType.BUTTON_PRESS || + type == Gdk.EventType.KEY_PRESS || + type == Gdk.EventType.TOUCH_BEGIN) { + dragging = true; + } + if (type == Gdk.EventType.BUTTON_RELEASE || + type == Gdk.EventType.KEY_RELEASE || + type == Gdk.EventType.TOUCH_END) { + dragging = false; + } + }); + } + + + /** + * Value of this slider. Defaults to `0`. + */ + public double value { + get { return adjustment.value; } + set { if (!dragging) adjustment.value = value; } + } + + /** + * Minimum possible value of this slider. Defaults to `0`. + */ + public double min { + get { return adjustment.lower; } + set { adjustment.lower = value; } + } + + /** + * Maximum possible value of this slider. Defaults to `1`. + */ + public double max { + get { return adjustment.upper; } + set { adjustment.upper = value; } + } + + /** + * Size of step increments. Defaults to `0.05`. + */ + public double step { + get { return adjustment.step_increment; } + set { adjustment.step_increment = value; } + } +} -- cgit v1.2.3 From 5a16cd2809d4d6dfa54c7995966630cefa3fe400 Mon Sep 17 00:00:00 2001 From: Aylur Date: Fri, 20 Dec 2024 23:42:59 +0100 Subject: fix: slider style --- lib/astal/gtk4/src/application.vala | 11 ++++------- lib/astal/gtk4/src/widget/slider.vala | 4 +--- 2 files changed, 5 insertions(+), 10 deletions(-) (limited to 'lib/astal/gtk4/src') diff --git a/lib/astal/gtk4/src/application.vala b/lib/astal/gtk4/src/application.vala index fadf705..fe5dd8d 100644 --- a/lib/astal/gtk4/src/application.vala +++ b/lib/astal/gtk4/src/application.vala @@ -146,13 +146,10 @@ public class Astal.Application : Gtk.Application, AstalIO.Application { if (reset) reset_css(); - try { - if (FileUtils.test(style, FileTest.EXISTS)) - provider.load_from_path(style); - else - provider.load_from_string(style); - } catch (Error err) { - critical(err.message); + if (FileUtils.test(style, FileTest.EXISTS)) { + provider.load_from_path(style); + } else { + provider.load_from_string(style); } Gtk.StyleContext.add_provider_for_display( diff --git a/lib/astal/gtk4/src/widget/slider.vala b/lib/astal/gtk4/src/widget/slider.vala index f8002ec..ca026a2 100644 --- a/lib/astal/gtk4/src/widget/slider.vala +++ b/lib/astal/gtk4/src/widget/slider.vala @@ -3,8 +3,6 @@ public class Astal.Slider : Gtk.Scale { private bool dragging; construct { - draw_value = false; - if (adjustment == null) adjustment = new Gtk.Adjustment(0,0,0,0,0,0); @@ -16,6 +14,7 @@ public class Astal.Slider : Gtk.Scale { step = 0.05; } + controller = new Gtk.EventControllerLegacy(); add_controller(controller); controller.event.connect((event) => { var type = event.get_event_type(); @@ -32,7 +31,6 @@ public class Astal.Slider : Gtk.Scale { }); } - /** * Value of this slider. Defaults to `0`. */ -- cgit v1.2.3 From f00e558c6af391bc7ae0b64190da37f876f12c79 Mon Sep 17 00:00:00 2001 From: Aylur Date: Wed, 25 Dec 2024 02:36:28 +0100 Subject: docs: add gtk4 jsx documentation --- lib/astal/gtk4/src/widget/box.vala | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'lib/astal/gtk4/src') diff --git a/lib/astal/gtk4/src/widget/box.vala b/lib/astal/gtk4/src/widget/box.vala index eb52f9c..28f2b00 100644 --- a/lib/astal/gtk4/src/widget/box.vala +++ b/lib/astal/gtk4/src/widget/box.vala @@ -1,4 +1,19 @@ public class Astal.Box : Gtk.Box { + /** + * Corresponds to [property@Gtk.Orientable :orientation]. + */ + [CCode (notify = false)] + public bool vertical { + get { return orientation == Gtk.Orientation.VERTICAL; } + set { orientation = value ? Gtk.Orientation.VERTICAL : Gtk.Orientation.HORIZONTAL; } + } + + construct { + notify["orientation"].connect(() => { + notify_property("vertical"); + }); + } + public List children { set { foreach (var child in children) { -- cgit v1.2.3