Skip to content

Commit

Permalink
Add :icon and :icon-size properties to the image widget
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
aperezdc committed Dec 27, 2023
1 parent 65d622c commit a7c53c3
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 1 deletion.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,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 `:namespace` window option
- Default to building with x11 and wayland support simultaneously
- Add `truncate-left` property on `label` widgets (By: kawaki-san)
Expand Down
19 changes: 18 additions & 1 deletion crates/eww/src/widgets/widget_definitions.rs
Original file line number Diff line number Diff line change
Expand Up @@ -507,6 +507,18 @@ fn build_gtk_button(bargs: &mut BuilderArgs) -> Result<gtk::Button> {
Ok(gtk_widget)
}

/// @var icon-size - "menu", "small-toolbar", "toolbar", "large-toolbar", "button", "dnd", "dialog"
fn parse_icon_size(o: &str) -> Result<gtk::IconSize> {
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
Expand All @@ -524,7 +536,12 @@ fn build_gtk_image(bargs: &mut BuilderArgs) -> Result<gtk::Image> {
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)
}
Expand Down

0 comments on commit a7c53c3

Please sign in to comment.