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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 literal 0 HcmV?d00001