add undo/redo for pasting/area operations
This commit is contained in:
parent
5b6113780a
commit
6970b18e22
2 changed files with 73 additions and 97 deletions
|
@ -6,7 +6,7 @@ use super::Pos;
|
|||
use super::PosInt;
|
||||
use raylib::prelude::*;
|
||||
|
||||
#[derive(Debug, Clone)]
|
||||
#[derive(Debug, Clone, PartialEq)]
|
||||
pub struct Board {
|
||||
rows: Vec<Vec<Tile>>,
|
||||
width: usize,
|
||||
|
@ -140,41 +140,6 @@ impl Board {
|
|||
out
|
||||
}
|
||||
|
||||
pub fn grow_to_include(&mut self, p: Pos) -> (PosInt, PosInt) {
|
||||
let mut offset_x = 0;
|
||||
let mut offset_y = 0;
|
||||
if p.x < 0 {
|
||||
let len = p.x.unsigned_abs() as usize;
|
||||
for row in &mut self.rows {
|
||||
let mut new_row = vec![Tile::BLANK; len];
|
||||
new_row.append(row);
|
||||
*row = new_row;
|
||||
}
|
||||
offset_x = len;
|
||||
self.width += len;
|
||||
} else if p.x as usize >= self.width {
|
||||
let new_width = p.x as usize + 1;
|
||||
for row in &mut self.rows {
|
||||
row.resize(new_width, Tile::BLANK);
|
||||
}
|
||||
self.width = new_width;
|
||||
}
|
||||
|
||||
if p.y < 0 {
|
||||
let len = p.y.unsigned_abs() as usize;
|
||||
let mut new_rows = vec![vec![Tile::BLANK; self.width]; len];
|
||||
new_rows.append(&mut self.rows);
|
||||
self.rows = new_rows;
|
||||
offset_y = len;
|
||||
self.height += len;
|
||||
} else if p.y as usize >= self.height {
|
||||
let new_height = p.y as usize + 1;
|
||||
self.rows.resize(new_height, vec![Tile::BLANK; self.width]);
|
||||
self.height = new_height;
|
||||
}
|
||||
(offset_x as PosInt, offset_y as PosInt)
|
||||
}
|
||||
|
||||
pub fn trim_size(&mut self, margin: usize) -> (usize, usize) {
|
||||
let (offset_x, offset_y);
|
||||
// top
|
||||
|
@ -235,7 +200,6 @@ impl Board {
|
|||
}
|
||||
|
||||
pub fn grow(&mut self, deltas: &ResizeDeltas) {
|
||||
// dbg!(&deltas);
|
||||
let new_width = self.width + deltas.x_neg + deltas.x_pos;
|
||||
let new_height = self.height + deltas.y_neg + deltas.y_pos;
|
||||
let mut new_board = Board::new_empty(new_width, new_height);
|
||||
|
@ -249,7 +213,6 @@ impl Board {
|
|||
}
|
||||
|
||||
pub fn shrink(&mut self, deltas: &ResizeDeltas) {
|
||||
// dbg!(&deltas);
|
||||
let new_width = self.width - deltas.x_neg - deltas.x_pos;
|
||||
let new_height = self.height - deltas.y_neg - deltas.y_pos;
|
||||
let mut new_board = Board::new_empty(new_width, new_height);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue