From 414363d5389a73730735a0d0a2403227e879dc6f Mon Sep 17 00:00:00 2001 From: Adrian Perez de Castro Date: Sat, 21 Oct 2023 23:17:51 +0300 Subject: [PATCH] Add :icon and :icon-size properties to the image widget Add a new :icon property which allows using icons from the currently selected theme. For completeness, add :icon-size as well. As a nice extra, GTK automatically makes such images follow the selected icon theme. --- CHANGELOG.md | 1 + crates/eww/src/widgets/widget_definitions.rs | 19 ++++++++++++++++++- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index bc9215bc..d9006315 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,6 +18,7 @@ All notable changes to eww will be listed here, starting at changes since versio - Remove `eww windows` command, replace with `eww active-windows` and `eww list-windows` ### Features +- Add `:icon` and `:icon-size` to the image widget (By: Adrian Perez de Castro) - Add `get_env` function (By: RegenJacob) - Add `:namespace` window option - Default to building with x11 and wayland support simultaneously diff --git a/crates/eww/src/widgets/widget_definitions.rs b/crates/eww/src/widgets/widget_definitions.rs index a1d9014b..4c9466cf 100644 --- a/crates/eww/src/widgets/widget_definitions.rs +++ b/crates/eww/src/widgets/widget_definitions.rs @@ -513,6 +513,18 @@ fn build_gtk_button(bargs: &mut BuilderArgs) -> Result { Ok(gtk_widget) } +/// @var icon-size - "menu", "small-toolbar", "toolbar", "large-toolbar", "button", "dnd", "dialog" +fn parse_icon_size(o: &str) -> Result { + enum_parse! { "icon-size", o, + "menu" => gtk::IconSize::Menu, + "small-toolbar" | "toolbar" => gtk::IconSize::SmallToolbar, + "large-toolbar" => gtk::IconSize::LargeToolbar, + "button" => gtk::IconSize::Button, + "dnd" => gtk::IconSize::Dnd, + "dialog" => gtk::IconSize::Dialog, + } +} + const WIDGET_NAME_IMAGE: &str = "image"; /// @widget image /// @desc A widget displaying an image @@ -530,7 +542,12 @@ fn build_gtk_image(bargs: &mut BuilderArgs) -> Result { let pixbuf = gtk::gdk_pixbuf::Pixbuf::from_file_at_size(std::path::PathBuf::from(path), image_width, image_height)?; gtk_widget.set_from_pixbuf(Some(&pixbuf)); } - } + }, + // @prop icon - name of a theme icon + // @prop icon-size - size of the theme icon + prop(icon: as_string, icon_size: as_string = "button") { + gtk_widget.set_from_icon_name(Some(&icon), parse_icon_size(&icon_size)?); + }, }); Ok(gtk_widget) }