Fiddled with some spacing and stuff
This commit is contained in:
@@ -4,8 +4,8 @@ use card_stuffs::{self, NUM_PILES_KLONDIKE};
|
||||
use crossterm::event::{self, Event, KeyCode, KeyEvent, KeyEventKind};
|
||||
use ratatui::{
|
||||
buffer::Buffer,
|
||||
layout::{Constraint, Layout, Rect},
|
||||
style::Stylize,
|
||||
layout::{Constraint, Layout, Rect, Flex},
|
||||
style::{Style, Stylize, Color},
|
||||
symbols::border,
|
||||
text::{Line, Text},
|
||||
widgets::{block::title, Block, BorderType, Borders, Paragraph, Widget, Padding, ListItem, List},
|
||||
@@ -18,56 +18,68 @@ pub struct App {
|
||||
exit: bool,
|
||||
}
|
||||
|
||||
const CARD_HEIGHT: u16 = 12;
|
||||
const CARD_WIDTH: u16 = 17;
|
||||
const CARD_HEIGHT: u16 = 11;
|
||||
const CARD_WIDTH: u16 = 15;
|
||||
|
||||
fn card_widget(card: &card_stuffs::Card) -> List {
|
||||
fn card_widget(card: &card_stuffs::Card, top: bool) -> List {
|
||||
let five_card = [
|
||||
format!("{value}{suit} ", value=card.value, suit=card.suit),
|
||||
format!(" "),
|
||||
format!(" {suit} {suit} ", suit=card.suit),
|
||||
format!(" "),
|
||||
format!(" "),
|
||||
format!(" {suit} ", suit=card.suit),
|
||||
format!(" "),
|
||||
format!(" "),
|
||||
format!(" {suit} {suit} ", suit=card.suit),
|
||||
format!(" "),
|
||||
format!(" {value}{suit}", value=card.value, suit=card.suit),
|
||||
];
|
||||
let card: Vec<ListItem> = five_card.iter().map(|(m)| {
|
||||
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: Vec<ListItem> = 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;
|
||||
}
|
||||
|
||||
List::new(card)
|
||||
.block(Block::new()
|
||||
.borders(Borders::ALL)
|
||||
//.style(Style::new().red().bold().italic())
|
||||
// Might use something like this for "active"/"selected"
|
||||
.borders(borders)
|
||||
.border_type(BorderType::Rounded))
|
||||
}
|
||||
|
||||
fn turned_over_card() -> List<'static> {
|
||||
fn turned_over_card(top: bool) -> List<'static> {
|
||||
let hidden_card = [
|
||||
format!("###############"),
|
||||
format!("###############"),
|
||||
format!("###############"),
|
||||
format!("###############"),
|
||||
format!("###############"),
|
||||
format!("###############"),
|
||||
format!("###############"),
|
||||
format!("###############"),
|
||||
format!("###############"),
|
||||
format!("###############"),
|
||||
format!("###############"),
|
||||
format!("#############"),
|
||||
format!("#############"),
|
||||
format!("#############"),
|
||||
format!("#############"),
|
||||
format!("#############"),
|
||||
format!("#############"),
|
||||
format!("#############"),
|
||||
format!("#############"),
|
||||
];
|
||||
let card: Vec<ListItem> = hidden_card.iter().map(|(m)| {
|
||||
let card: Vec<ListItem> = hidden_card.iter().map(|m| {
|
||||
ListItem::new(m.to_string())
|
||||
})
|
||||
.collect();
|
||||
|
||||
let mut borders = Borders::TOP | Borders::LEFT | Borders::RIGHT;
|
||||
if top {
|
||||
borders |= Borders::BOTTOM;
|
||||
}
|
||||
|
||||
List::new(card)
|
||||
.block(Block::new()
|
||||
.borders(Borders::ALL)
|
||||
.borders(borders)
|
||||
.border_type(BorderType::Rounded))
|
||||
}
|
||||
|
||||
@@ -120,21 +132,38 @@ impl App {
|
||||
Constraint::Length(CARD_WIDTH),
|
||||
Constraint::Length(CARD_WIDTH),
|
||||
Constraint::Length(CARD_WIDTH),
|
||||
]);
|
||||
]).flex(Flex::SpaceAround);
|
||||
let pileses: [Rect; 7] = horizontal.areas(piles_area);
|
||||
let a_card = card_widget(&self.cards.piles[0][0]);
|
||||
|
||||
|
||||
for pile in 0..card_stuffs::NUM_PILES_KLONDIKE {
|
||||
let mut constraints = Vec::new();
|
||||
for card in 0..(card_stuffs::NUM_PILES_KLONDIKE + 13) {
|
||||
constraints.push(Constraint::Min(2));
|
||||
match self.cards.piles[pile].get(card) {
|
||||
Some(_) => {
|
||||
if card == self.cards.piles[pile].len() - 1 {
|
||||
constraints.push(Constraint::Length(CARD_HEIGHT));
|
||||
} else {
|
||||
constraints.push(Constraint::Length(2));
|
||||
}
|
||||
}
|
||||
None => {
|
||||
constraints.push(Constraint::Length(0));
|
||||
}
|
||||
}
|
||||
}
|
||||
let vertical = Layout::vertical(constraints);
|
||||
let card_display: [Rect; 20] = vertical.areas(pileses[pile]);
|
||||
let card_display: [Rect; card_stuffs::NUM_PILES_KLONDIKE + 13] = vertical.areas(pileses[pile]);
|
||||
for (i, card) in card_display.iter().enumerate() {
|
||||
match self.cards.piles[pile].get(i) {
|
||||
None => break,
|
||||
Some(c) => {
|
||||
let is_top_card = i == self.cards.piles[pile].len() - 1;
|
||||
let a_card = match c.visible {
|
||||
true => card_widget(c, is_top_card),
|
||||
//false => turned_over_card(is_top_card),
|
||||
false => card_widget(c, is_top_card),
|
||||
};
|
||||
frame.render_widget(
|
||||
&a_card,
|
||||
*card
|
||||
|
||||
Reference in New Issue
Block a user