From 2c8ba652a7929ac6c2af28ac60a8bd4b8e8e2f10 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?H=C3=A9ctor=20Ram=C3=B3n=20Jim=C3=A9nez?= Date: Thu, 14 Nov 2019 03:34:41 +0100 Subject: [PATCH] Draw proper checkmark for `Checkbox` in `iced_wgpu` --- examples/todos.rs | 2 +- wgpu/src/renderer/widget/checkbox.rs | 17 +++++++++-------- wgpu/src/text.rs | 13 ++++++++++--- wgpu/src/text/icons.ttf | Bin 0 -> 4912 bytes 4 files changed, 20 insertions(+), 12 deletions(-) create mode 100644 wgpu/src/text/icons.ttf diff --git a/examples/todos.rs b/examples/todos.rs index 19e2a701..f921a666 100644 --- a/examples/todos.rs +++ b/examples/todos.rs @@ -357,7 +357,7 @@ fn empty_message(message: &str) -> Element<'static, Message> { // Fonts const ICONS: Font = Font::External { name: "Icons", - bytes: include_bytes!("./resources/icons.ttf"), + bytes: include_bytes!("resources/icons.ttf"), }; fn icon(unicode: char) -> Text { diff --git a/wgpu/src/renderer/widget/checkbox.rs b/wgpu/src/renderer/widget/checkbox.rs index c2d7911c..aedb821c 100644 --- a/wgpu/src/renderer/widget/checkbox.rs +++ b/wgpu/src/renderer/widget/checkbox.rs @@ -74,14 +74,15 @@ impl checkbox::Renderer for Renderer { ( Primitive::Group { primitives: if checkbox.is_checked { - // TODO: Draw an actual icon - let (check, _) = text::Renderer::draw( - self, - &Text::new("X") - .horizontal_alignment(HorizontalAlignment::Center) - .vertical_alignment(VerticalAlignment::Center), - checkbox_layout, - ); + let check = Primitive::Text { + content: crate::text::CHECKMARK_ICON.to_string(), + font: crate::text::BUILTIN_ICONS, + size: checkbox_bounds.height * 0.7, + bounds: checkbox_bounds, + color: [0.3, 0.3, 0.3].into(), + horizontal_alignment: HorizontalAlignment::Center, + vertical_alignment: VerticalAlignment::Center, + }; vec![checkbox_border, checkbox_box, check, label] } else { diff --git a/wgpu/src/text.rs b/wgpu/src/text.rs index 81fc1fb5..da070f5c 100644 --- a/wgpu/src/text.rs +++ b/wgpu/src/text.rs @@ -5,6 +5,13 @@ use crate::Transformation; use std::cell::RefCell; use std::collections::HashMap; +pub const BUILTIN_ICONS: iced_native::Font = iced_native::Font::External { + name: "iced_wgpu icons", + bytes: include_bytes!("text/icons.ttf"), +}; + +pub const CHECKMARK_ICON: char = '\u{F00C}'; + pub struct Pipeline { draw_brush: RefCell>, draw_font_map: RefCell>, @@ -91,10 +98,10 @@ impl Pipeline { // TODO: This is a bit hacky. We are loading the debug font as the // first font in the `draw_brush`. The `measure_brush` does not - // contain this font, hence we subtract 1. + // contain this, hence we subtract 1. // - // This should go away once we improve the debug view and integrate - // it as just another UI app. + // This should go away once we unify `draw_brush` and + // `measure_brush`. font_id: wgpu_glyph::FontId(font_id - 1), ..Default::default() }; diff --git a/wgpu/src/text/icons.ttf b/wgpu/src/text/icons.ttf new file mode 100644 index 0000000000000000000000000000000000000000..1c832f86576e51451b729a7fe513616dea38d21a GIT binary patch literal 4912 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 XW9RmOAqK|oi2Gkufv@64F+=oU3sq^e literal 0 HcmV?d00001