From 0ff5a02550e5d5de8fb5fd0643ea424d9e508888 Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Sat, 23 May 2020 01:07:59 +0200 Subject: Rename `Layer` to `overlay::Content` --- graphics/src/layer.rs | 2 - graphics/src/layer/menu.rs | 102 ------------------------------------------- graphics/src/lib.rs | 1 + graphics/src/overlay.rs | 1 + graphics/src/overlay/menu.rs | 102 +++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 104 insertions(+), 104 deletions(-) delete mode 100644 graphics/src/layer/menu.rs create mode 100644 graphics/src/overlay.rs create mode 100644 graphics/src/overlay/menu.rs (limited to 'graphics') diff --git a/graphics/src/layer.rs b/graphics/src/layer.rs index ddf835a4..6aca738e 100644 --- a/graphics/src/layer.rs +++ b/graphics/src/layer.rs @@ -1,6 +1,4 @@ //! Organize rendering primitives into a flattened list of layers. -mod menu; - use crate::image; use crate::svg; use crate::triangle; diff --git a/graphics/src/layer/menu.rs b/graphics/src/layer/menu.rs deleted file mode 100644 index e94ef964..00000000 --- a/graphics/src/layer/menu.rs +++ /dev/null @@ -1,102 +0,0 @@ -use crate::backend::Backend; -use crate::{Primitive, Renderer}; -use iced_native::{ - layer, mouse, Background, Color, Font, HorizontalAlignment, Point, - Rectangle, VerticalAlignment, -}; - -impl layer::menu::Renderer for Renderer -where - B: Backend, -{ - fn decorate( - &mut self, - bounds: Rectangle, - _cursor_position: Point, - (primitives, mouse_cursor): Self::Output, - ) -> Self::Output { - ( - Primitive::Group { - primitives: vec![ - Primitive::Quad { - bounds, - background: Background::Color( - [0.87, 0.87, 0.87].into(), - ), - border_color: [0.7, 0.7, 0.7].into(), - border_width: 1, - border_radius: 0, - }, - primitives, - ], - }, - mouse_cursor, - ) - } - - fn draw( - &mut self, - bounds: Rectangle, - cursor_position: Point, - options: &[T], - hovered_option: Option, - text_size: u16, - padding: u16, - ) -> Self::Output { - use std::f32; - - let is_mouse_over = bounds.contains(cursor_position); - - let mut primitives = Vec::new(); - - for (i, option) in options.iter().enumerate() { - let is_selected = hovered_option == Some(i); - - let bounds = Rectangle { - x: bounds.x, - y: bounds.y - + ((text_size as usize + padding as usize * 2) * i) as f32, - width: bounds.width, - height: f32::from(text_size + padding * 2), - }; - - if is_selected { - primitives.push(Primitive::Quad { - bounds, - background: Background::Color([0.4, 0.4, 1.0].into()), - border_color: Color::TRANSPARENT, - border_width: 0, - border_radius: 0, - }); - } - - primitives.push(Primitive::Text { - content: option.to_string(), - bounds: Rectangle { - x: bounds.x + f32::from(padding), - y: bounds.center_y(), - width: f32::INFINITY, - ..bounds - }, - size: f32::from(text_size), - font: Font::Default, - color: if is_selected { - Color::WHITE - } else { - Color::BLACK - }, - horizontal_alignment: HorizontalAlignment::Left, - vertical_alignment: VerticalAlignment::Center, - }); - } - - ( - Primitive::Group { primitives }, - if is_mouse_over { - mouse::Interaction::Pointer - } else { - mouse::Interaction::default() - }, - ) - } -} diff --git a/graphics/src/lib.rs b/graphics/src/lib.rs index bad35ccf..92e8432e 100644 --- a/graphics/src/lib.rs +++ b/graphics/src/lib.rs @@ -9,6 +9,7 @@ #![forbid(rust_2018_idioms)] #![cfg_attr(docsrs, feature(doc_cfg))] mod antialiasing; +mod overlay; mod primitive; mod renderer; mod transformation; diff --git a/graphics/src/overlay.rs b/graphics/src/overlay.rs new file mode 100644 index 00000000..c57668d4 --- /dev/null +++ b/graphics/src/overlay.rs @@ -0,0 +1 @@ +mod menu; diff --git a/graphics/src/overlay/menu.rs b/graphics/src/overlay/menu.rs new file mode 100644 index 00000000..f4204f25 --- /dev/null +++ b/graphics/src/overlay/menu.rs @@ -0,0 +1,102 @@ +use crate::backend::Backend; +use crate::{Primitive, Renderer}; +use iced_native::{ + mouse, overlay, Background, Color, Font, HorizontalAlignment, Point, + Rectangle, VerticalAlignment, +}; + +impl overlay::menu::Renderer for Renderer +where + B: Backend, +{ + fn decorate( + &mut self, + bounds: Rectangle, + _cursor_position: Point, + (primitives, mouse_cursor): Self::Output, + ) -> Self::Output { + ( + Primitive::Group { + primitives: vec![ + Primitive::Quad { + bounds, + background: Background::Color( + [0.87, 0.87, 0.87].into(), + ), + border_color: [0.7, 0.7, 0.7].into(), + border_width: 1, + border_radius: 0, + }, + primitives, + ], + }, + mouse_cursor, + ) + } + + fn draw( + &mut self, + bounds: Rectangle, + cursor_position: Point, + options: &[T], + hovered_option: Option, + text_size: u16, + padding: u16, + ) -> Self::Output { + use std::f32; + + let is_mouse_over = bounds.contains(cursor_position); + + let mut primitives = Vec::new(); + + for (i, option) in options.iter().enumerate() { + let is_selected = hovered_option == Some(i); + + let bounds = Rectangle { + x: bounds.x, + y: bounds.y + + ((text_size as usize + padding as usize * 2) * i) as f32, + width: bounds.width, + height: f32::from(text_size + padding * 2), + }; + + if is_selected { + primitives.push(Primitive::Quad { + bounds, + background: Background::Color([0.4, 0.4, 1.0].into()), + border_color: Color::TRANSPARENT, + border_width: 0, + border_radius: 0, + }); + } + + primitives.push(Primitive::Text { + content: option.to_string(), + bounds: Rectangle { + x: bounds.x + f32::from(padding), + y: bounds.center_y(), + width: f32::INFINITY, + ..bounds + }, + size: f32::from(text_size), + font: Font::Default, + color: if is_selected { + Color::WHITE + } else { + Color::BLACK + }, + horizontal_alignment: HorizontalAlignment::Left, + vertical_alignment: VerticalAlignment::Center, + }); + } + + ( + Primitive::Group { primitives }, + if is_mouse_over { + mouse::Interaction::Pointer + } else { + mouse::Interaction::default() + }, + ) + } +} -- cgit