diff --git a/src/display/cell.rs b/src/display/cell.rs new file mode 100644 index 0000000..13ccc95 --- /dev/null +++ b/src/display/cell.rs @@ -0,0 +1,43 @@ +use iced::{border::Radius, widget::{button, text}, Background, Border, Color, Shadow, Theme}; +use super::super::cell::Cell; +use super::Message; + +const LIGHT_GRAY: Color = Color { + r: 0.5, + g: 0.5, + b: 0.5, + a: 1.0, +}; + +pub fn widget(cell: &Cell) -> iced::Element { + let display = match cell.value() { + Some(v) => v.to_string(), + None => "?".to_string(), + }; + + button(text(display)) + .style(|theme: &Theme, status| { + let palette = theme.palette(); + let mut border = Border::default().color(LIGHT_GRAY); + border.width = 1.0; + match status { + button::Status::Active => { + button::Style{ + background: Some(Background::from(palette.background)), + text_color: palette.text, + border, + shadow: Shadow::default(), + } + } + _ => { + let mut style = button::primary(theme, status); + style.border.radius = Radius::new(0); + style + } + } + }) + .height(50) + .width(50) + .on_press(Message::Pressed) + .into() +} \ No newline at end of file diff --git a/src/display/mod.rs b/src/display/mod.rs new file mode 100644 index 0000000..13390ab --- /dev/null +++ b/src/display/mod.rs @@ -0,0 +1,6 @@ +#[derive(Debug, Clone)] +pub enum Message { + Pressed, +} + +pub mod cell; \ No newline at end of file diff --git a/src/lib.rs b/src/lib.rs index 08f30de..061a730 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,5 +1,6 @@ mod cell; mod board; +pub mod display; pub use board::Board; pub use board::Point; diff --git a/src/main.rs b/src/main.rs index 390d267..3332af4 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,13 +1,8 @@ -use iced::widget::button; -use iced::widget::text; use rustdoku::Board; +use rustdoku::display; use iced; -#[derive(Debug, Clone)] -enum Message { - Pressed, -} struct State { board: Board, @@ -23,36 +18,26 @@ impl Default for State { } } -fn display_cell(cell: &rustdoku::Cell) -> iced::Element { - let display = match cell.value() { - Some(v) => v.to_string(), - None => "?".to_string(), - }; - button(text(display)).on_press(Message::Pressed).into() -} - -fn update(state: &mut State, _message: Message) { +fn update(state: &mut State, _message: display::Message) { state.message = "Hello, world".to_string(); } -fn display(state: &State) -> iced::Element { - let mut column: Vec> = Vec::with_capacity(9); +fn display(state: &State) -> iced::Element { + let mut column: Vec> = Vec::with_capacity(9); for row_idx in state.board.row_range() { - let row: Vec> = state.board + let row: Vec> = state.board .row_iter(row_idx) .into_iter() - .map(|c| display_cell(c)) + .map(|c| display::cell::widget(c)) .into_iter() .collect(); column.push( iced::widget::Row::with_children(row) - .spacing(3) .into() ); } iced::widget::Column::with_children(column) - .spacing(3) .into() }