1use blockworx_doc::block_model::Asset;
12use blockworx_paint::ImageHandle;
13
14use crate::image::ImageRegistry;
15
16fn register_svg(
19 ctx: &egui::Context,
20 registry: &mut ImageRegistry,
21 svg: &str,
22) -> Option<ImageHandle> {
23 registry
24 .register(ctx, &Asset::Svg(svg.as_bytes().into()))
25 .ok()
26}
27
28pub const VIEW_VISIBLE: &str = include_str!("../../../icons/icon-view-visible.svg");
29pub const VIEW_HIDDEN: &str = include_str!("../../../icons/icon-view-hidden.svg");
30pub const ADD: &str = include_str!("../../../icons/icon-add.svg");
31
32#[derive(Clone, Copy)]
34pub enum Icon {
35 ViewVisible,
36 ViewHidden,
37 Add,
38}
39
40#[derive(Clone, Default)]
43pub struct Icons {
44 view_visible: Option<ImageHandle>,
45 view_hidden: Option<ImageHandle>,
46 add: Option<ImageHandle>,
47}
48
49impl Icons {
50 pub fn register(ctx: &egui::Context, registry: &mut ImageRegistry) -> Self {
53 Self {
54 view_visible: register_svg(ctx, registry, VIEW_VISIBLE),
55 view_hidden: register_svg(ctx, registry, VIEW_HIDDEN),
56 add: register_svg(ctx, registry, ADD),
57 }
58 }
59
60 pub fn get(&self, icon: Icon) -> Option<&ImageHandle> {
61 match icon {
62 Icon::ViewVisible => self.view_visible.as_ref(),
63 Icon::ViewHidden => self.view_hidden.as_ref(),
64 Icon::Add => self.add.as_ref(),
65 }
66 }
67}