diff --git a/assets/Makefile b/assets/Makefile index a260f5c..c4b9027 100644 --- a/assets/Makefile +++ b/assets/Makefile @@ -1,6 +1,5 @@ SVGS = $(wildcard ./*.svg) TARGET_BMPS = $(SVGS:.svg=.bmp) -SIZE = 45 BACKCOLOR = 080808 .PHONY: all @@ -15,5 +14,5 @@ clean: @convert $< -background "#$(BACKCOLOR)" -alpha remove -define bmp:subtype=RGB565 $@ %.png: %.svg - inkscape -h $(SIZE) -w $(SIZE) $< -o $@ + inkscape $< -o $@ diff --git a/assets/a.bmp b/assets/a.bmp new file mode 100644 index 0000000..3141fb5 Binary files /dev/null and b/assets/a.bmp differ diff --git a/assets/a.svg b/assets/a.svg new file mode 100644 index 0000000..7d84e84 --- /dev/null +++ b/assets/a.svg @@ -0,0 +1,52 @@ + + + + + + + diff --git a/assets/co2-icon.bmp b/assets/co2-icon.bmp index 8078667..a74e213 100644 Binary files a/assets/co2-icon.bmp and b/assets/co2-icon.bmp differ diff --git a/assets/co2-icon.svg b/assets/co2-icon.svg index d91abb8..391b8ec 100644 --- a/assets/co2-icon.svg +++ b/assets/co2-icon.svg @@ -2,9 +2,9 @@ + id="layer1" + transform="translate(0.08272917,0.15224179)"> + 2 + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.74984px;font-family:'ProFont IIx Nerd Font Propo';-inkscape-font-specification:'ProFont IIx Nerd Font Propo';fill:#00ade7;fill-opacity:1;stroke-width:0.296867" + x="9.2658949" + y="8.814003">2 C + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.34054px;font-family:'ProFont IIx Nerd Font Propo';-inkscape-font-specification:'ProFont IIx Nerd Font Propo';fill:#00ade7;fill-opacity:1;stroke-width:0.458785" + x="0.056607485" + y="9.7028713">C O + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.34054px;font-family:'ProFont IIx Nerd Font Propo';-inkscape-font-specification:'ProFont IIx Nerd Font Propo';fill:#00ade7;fill-opacity:1;stroke-width:0.458785" + x="4.6601677" + y="7.3943286">O diff --git a/assets/humidity-icon.bmp b/assets/humidity-icon.bmp index 320db13..1b72f13 100644 Binary files a/assets/humidity-icon.bmp and b/assets/humidity-icon.bmp differ diff --git a/assets/humidity-icon.svg b/assets/humidity-icon.svg index 948aac0..6ac5f37 100644 --- a/assets/humidity-icon.svg +++ b/assets/humidity-icon.svg @@ -1,22 +1,20 @@ - - - + - + + diff --git a/assets/indic-falling.bmp b/assets/indic-falling.bmp new file mode 100644 index 0000000..c56a035 Binary files /dev/null and b/assets/indic-falling.bmp differ diff --git a/assets/indic-falling.svg b/assets/indic-falling.svg new file mode 100644 index 0000000..ef69cb6 --- /dev/null +++ b/assets/indic-falling.svg @@ -0,0 +1,97 @@ + + + + + + + + + + + + + diff --git a/assets/indic-rising.bmp b/assets/indic-rising.bmp index 704080e..0fb32f0 100644 Binary files a/assets/indic-rising.bmp and b/assets/indic-rising.bmp differ diff --git a/assets/indic-rising.svg b/assets/indic-rising.svg index b2fce48..2507ddb 100644 --- a/assets/indic-rising.svg +++ b/assets/indic-rising.svg @@ -29,7 +29,7 @@ inkscape:export-bgcolor="#080808ff" inkscape:zoom="32" inkscape:cx="3.46875" - inkscape:cy="9.15625" + inkscape:cy="9.140625" inkscape:window-width="1916" inkscape:window-height="1032" inkscape:window-x="0" diff --git a/assets/indic-steady.bmp b/assets/indic-steady.bmp new file mode 100644 index 0000000..af79bb9 Binary files /dev/null and b/assets/indic-steady.bmp differ diff --git a/assets/indic-steady.svg b/assets/indic-steady.svg new file mode 100644 index 0000000..a5e3a98 --- /dev/null +++ b/assets/indic-steady.svg @@ -0,0 +1,97 @@ + + + + + + + + + + + + + diff --git a/assets/temperature-icon.bmp b/assets/temperature-icon.bmp index 29cdf13..67e6285 100644 Binary files a/assets/temperature-icon.bmp and b/assets/temperature-icon.bmp differ diff --git a/assets/temperature-icon.svg b/assets/temperature-icon.svg index be31f2b..2ada07b 100644 --- a/assets/temperature-icon.svg +++ b/assets/temperature-icon.svg @@ -1,22 +1,20 @@ - - - - - - - - - - + inkscape:current-layer="layer1" /> + + + + + + + + + + + + diff --git a/assets/voc-icon.bmp b/assets/voc-icon.bmp index 57c0fba..7ffb243 100644 Binary files a/assets/voc-icon.bmp and b/assets/voc-icon.bmp differ diff --git a/assets/voc-icon.svg b/assets/voc-icon.svg index 32d241c..8aec3ee 100644 --- a/assets/voc-icon.svg +++ b/assets/voc-icon.svg @@ -1,11 +1,13 @@ + + style="fill:#cacaca;fill-opacity:1;stroke:none;stroke-width:2.01407;stroke-opacity:1" /> diff --git a/src/images.rs b/src/images.rs index 2d7244a..a8b4a9f 100644 --- a/src/images.rs +++ b/src/images.rs @@ -8,6 +8,11 @@ thread_local! { pub static TEMPERATURE_ICON: UnsafeCell>> = const { UnsafeCell::new(MaybeUninit::zeroed()) }; pub static VOC_ICON: UnsafeCell>> = const { UnsafeCell::new(MaybeUninit::zeroed()) }; pub static CO2_ICON: UnsafeCell>> = const { UnsafeCell::new(MaybeUninit::zeroed()) }; + + // Tendency indicators + pub static TENDENCY_RISING: UnsafeCell>> = const { UnsafeCell::new(MaybeUninit::zeroed()) }; + pub static TENDENCY_STEADY: UnsafeCell>> = const { UnsafeCell::new(MaybeUninit::zeroed()) }; + pub static TENDENCY_FALLING: UnsafeCell>> = const { UnsafeCell::new(MaybeUninit::zeroed()) }; } macro_rules! load_image { @@ -28,12 +33,15 @@ macro_rules! get_image { }; } -pub fn prepare_images() -{ +pub fn prepare_images() { unsafe { load_image!(HUMIDITY_ICON, "../assets/humidity-icon.bmp"); load_image!(TEMPERATURE_ICON, "../assets/temperature-icon.bmp"); load_image!(VOC_ICON, "../assets/voc-icon.bmp"); load_image!(CO2_ICON, "../assets/co2-icon.bmp"); + + load_image!(TENDENCY_RISING, "../assets/indic-rising.bmp"); + load_image!(TENDENCY_STEADY, "../assets/indic-steady.bmp"); + load_image!(TENDENCY_FALLING, "../assets/indic-falling.bmp"); } } diff --git a/src/main.rs b/src/main.rs index cb7c2f1..0672883 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,4 +1,4 @@ -#![feature(unsafe_cell_access)] +//#![feature(unsafe_cell_access)] mod images; @@ -45,13 +45,13 @@ fn main() { fn hello_view() -> impl View { VStack::new(( HStack::new(( - main_menu_indicator(MenuIndicatorType::Temperature(31.5)), - main_menu_indicator(MenuIndicatorType::Humidity(36.2)), + main_menu_indicator(MenuIndicatorType::Temperature(31.5), Tendency::Falling), + main_menu_indicator(MenuIndicatorType::Humidity(36.2), Tendency::Steady), )) .with_spacing(5), HStack::new(( - main_menu_indicator(MenuIndicatorType::Co2(1329)), - main_menu_indicator(MenuIndicatorType::Voc(29)), + main_menu_indicator(MenuIndicatorType::Co2(1329), Tendency::Rising), + main_menu_indicator(MenuIndicatorType::Voc(29), Tendency::Falling), )) .with_spacing(5), )) @@ -99,7 +99,7 @@ impl MenuIndicatorType { } } -fn main_menu_indicator(indicator_type: MenuIndicatorType) -> impl View { +fn main_menu_indicator(indicator_type: MenuIndicatorType, tendency: Tendency) -> impl View { Rectangle .corner_radius(10) .stroked(FRAME_STROKE) @@ -112,14 +112,23 @@ fn main_menu_indicator(indicator_type: MenuIndicatorType) -> impl View { VStack::new(( HStack::new(( Spacer::default(), - buoyant::view::Image::new(get_image!( - indicator_type.get_corresponding_icon() - )), + ZStack::new(( + Rectangle + .corner_radius(10) + //.stroked_offset(5, StrokeOffset::Outer) + .foreground_color(Rgb565::new(4, 9, 4)), + buoyant::view::Image::new(get_image!( + indicator_type.get_corresponding_icon() + )), + )) + .flex_frame() + .with_max_size(53, 53) + .with_min_size(53, 53), Spacer::default(), )), HStack::new(( Spacer::default(), - tendency_indicator(Tendency::Rising), + tendency_indicator(tendency), Text::new(indicator_type.get_value_str(), &PROFONT_24_POINT), Text::new( indicator_type.get_corresponding_unit_string(), @@ -145,10 +154,26 @@ pub enum Tendency { Falling, } -fn tendency_indicator(tendency: Tendency) -> impl View { - Rectangle - .foreground_color(Rgb565::WHITE) - .flex_frame() - .with_min_size(10, 20) - .with_max_size(10, 20) +impl Tendency { + pub fn get_corresponding_icon( + &self, + ) -> &'static std::thread::LocalKey>>> { + match self { + Self::Rising => &images::TENDENCY_RISING, + Self::Steady => &images::TENDENCY_STEADY, + Self::Falling => &images::TENDENCY_FALLING, + } + } +} + +fn tendency_indicator(tendency: Tendency) -> impl View { + HStack::new(( + Image::new(get_image!(tendency.get_corresponding_icon())) + .flex_frame() + .with_min_size(10, 20) + .with_max_size(10, 20), + Spacer::default(), + )) + .flex_frame() + .with_max_width(15) }