From df8347577eae4e0880cfb07a910e4878b42f637d Mon Sep 17 00:00:00 2001 From: Arthur Roberts Date: Wed, 26 Feb 2025 20:48:49 +0000 Subject: [PATCH] Started changing List to Paragraph List has a bunch of extra bits I don't need. --- card_stuffs/src/main.rs | 91 ++++++++++++++++++++++++----------------- 1 file changed, 53 insertions(+), 38 deletions(-) diff --git a/card_stuffs/src/main.rs b/card_stuffs/src/main.rs index 913cfed..5e9a982 100644 --- a/card_stuffs/src/main.rs +++ b/card_stuffs/src/main.rs @@ -3,10 +3,11 @@ use card_stuffs::{self}; use crossterm::event::{self, Event, KeyCode, KeyEvent, KeyEventKind}; use ratatui::{ + buffer::Buffer, layout::{Constraint, Layout, Rect, Flex}, style::{Style, Stylize, Color}, text::Line, - widgets::{Block, BorderType, Borders, ListItem, List}, + widgets::{Block, BorderType, Borders, ListItem, List, Widget, Paragraph}, DefaultTerminal, Frame, }; @@ -37,6 +38,8 @@ fn waste_widget(cards_in_waste: &Vec) -> List { // a new widget I've make myself... I probably should do that for all cards // to be toootaly honest + + // This (and the rest) probably shouldn't be ListItems let hidden_card = [ format!("#############"), format!("#############"), @@ -82,70 +85,75 @@ fn deck_widget(cards_in_deck: &Vec) -> List<'static> { .border_type(BorderType::Rounded)) } -fn card_widget<'a>(card: &'a card_stuffs::Card, top: bool, highlight: bool, select: bool) -> List<'a> { - let five_card = [ - format!("{value}{suit} ", value=card.value, suit=card.suit), - format!(" "), - format!(" {suit} {suit} ", suit=card.suit), - format!(" "), - format!(" {suit} ", suit=card.suit), - format!(" "), - format!(" {suit} {suit} ", suit=card.suit), - format!(" "), - format!(" {value}{suit}", value=card.value, suit=card.suit), - ]; +fn card_widget<'a>(card: &'a card_stuffs::Card, top: bool, highlight: bool, select: bool) -> Paragraph<'a> { + + let card_image = format!( +"{value}{suit} + + {suit} {suit} + + {suit} + + {suit} {suit} + + {value}{suit}", value=card.value, suit=card.suit); + let card_style = match card.suit.colour() { card_stuffs::Colour::Black => Style::new().black().bg(Color::White), card_stuffs::Colour::Red => Style::new().red().bg(Color::White), }; - let card_image: Vec = five_card.iter().map(|m| { - ListItem::new(m.to_string()) - .style(card_style) - }) - .collect(); let mut borders = Borders::TOP | Borders::LEFT | Borders::RIGHT; if top { borders |= Borders::BOTTOM; } - let mut border_style = Style::default(); + let mut border_style = Style::new().white().on_black(); if highlight { border_style = border_style.fg(Color::Blue); } else if select { border_style = border_style.fg(Color::Green); } - List::new(card_image) + Paragraph::new(card_image) + .style(card_style) .block(Block::new() .style(border_style) .borders(borders) .border_type(BorderType::Rounded)) } -fn turned_over_card(top: bool) -> List<'static> { - let hidden_card = [ - format!("#############"), - format!("#############"), - format!("#############"), - format!("#############"), - format!("#############"), - format!("#############"), - format!("#############"), - format!("#############"), - format!("#############"), - ]; - let card: Vec = hidden_card.iter().map(|m| { - ListItem::new(m.to_string()) - }) - .collect(); +struct CardWidget { + card: card_stuffs::Card, + // put display stuff in here? +} + +impl Widget for CardWidget { + fn render(self, area: Rect, buf: &mut Buffer) { + let mut border_style = Style::default(); + + } +} + +fn facedown_card(top: bool) -> Paragraph<'static> { + let hidden_card = format!( + "#############\n\ + #############\n\ + #############\n\ + #############\n\ + #############\n\ + #############\n\ + #############\n\ + #############\n\ + #############" + ); let mut borders = Borders::TOP | Borders::LEFT | Borders::RIGHT; if top { borders |= Borders::BOTTOM; } - List::new(card) + Paragraph::new(hidden_card) .block(Block::new() .borders(borders) .border_type(BorderType::Rounded)) @@ -193,7 +201,7 @@ impl App { ]).flex(Flex::SpaceAround); let [deck_area, waste_area, fa, fb, fc, fd] = horizontal.areas(dwf_area); - let _foundation_areas = [fa, fb, fc, fd]; + let foundation_areas = [fa, fb, fc, fd]; frame.render_widget( deck_widget(&self.cards.deck), @@ -204,6 +212,13 @@ impl App { waste_area ); + for fa in foundation_areas { + frame.render_widget( + facedown_card(true), + fa + ); + } + let horizontal = Layout::horizontal([ Constraint::Length(CARD_WIDTH), Constraint::Length(CARD_WIDTH),