make erasing continuous
This commit is contained in:
parent
49917d18a9
commit
e661483cd5
3 changed files with 35 additions and 36 deletions
BIN
assets/step.png
BIN
assets/step.png
Binary file not shown.
Before Width: | Height: | Size: 191 B After Width: | Height: | Size: 198 B |
|
@ -54,6 +54,7 @@ enum Popup {
|
||||||
#[derive(Debug, Clone)]
|
#[derive(Debug, Clone)]
|
||||||
enum Tool {
|
enum Tool {
|
||||||
None,
|
None,
|
||||||
|
Erase,
|
||||||
SetTile(Tile),
|
SetTile(Tile),
|
||||||
Digits(Option<Pos>),
|
Digits(Option<Pos>),
|
||||||
Math,
|
Math,
|
||||||
|
@ -200,7 +201,11 @@ impl Editor {
|
||||||
WireType::Cross => WireType::Vertical,
|
WireType::Cross => WireType::Vertical,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Tool::None | Tool::SetTile(_) | Tool::Digits(_) | Tool::SelectArea(_, _) => (),
|
Tool::None
|
||||||
|
| Tool::Erase
|
||||||
|
| Tool::SetTile(_)
|
||||||
|
| Tool::Digits(_)
|
||||||
|
| Tool::SelectArea(_, _) => (),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -470,7 +475,7 @@ impl Editor {
|
||||||
border,
|
border,
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
tool_button((0, -2), "eraser", Tool::SetTile(Tile::from_char(' ')));
|
tool_button((0, -2), "eraser", Tool::Erase);
|
||||||
tool_button((1, -2), "selection", Tool::SelectArea(None, false));
|
tool_button((1, -2), "selection", Tool::SelectArea(None, false));
|
||||||
tool_button((0, -1), "digit_tool", Tool::Digits(None));
|
tool_button((0, -1), "digit_tool", Tool::Digits(None));
|
||||||
tool_button((1, -1), "transparent", Tool::None);
|
tool_button((1, -1), "transparent", Tool::None);
|
||||||
|
@ -612,13 +617,8 @@ impl Editor {
|
||||||
if self.active_tool != Tool::None {
|
if self.active_tool != Tool::None {
|
||||||
let tex = match self.active_tool {
|
let tex = match self.active_tool {
|
||||||
Tool::None => unreachable!(),
|
Tool::None => unreachable!(),
|
||||||
Tool::SetTile(t) => {
|
Tool::Erase => "selection".into(),
|
||||||
if t == Tile::Blank {
|
Tool::SetTile(t) => t.texture(),
|
||||||
"selection".into()
|
|
||||||
} else {
|
|
||||||
t.texture()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Tool::Math => format!("{}_off", self.tool_menu_math.texture_name()),
|
Tool::Math => format!("{}_off", self.tool_menu_math.texture_name()),
|
||||||
Tool::Gate => format!("{}_off", self.tool_menu_gate.texture_name()),
|
Tool::Gate => format!("{}_off", self.tool_menu_gate.texture_name()),
|
||||||
Tool::Wire => format!("{}_off", self.tool_menu_wire.texture_name()),
|
Tool::Wire => format!("{}_off", self.tool_menu_wire.texture_name()),
|
||||||
|
@ -639,6 +639,7 @@ impl Editor {
|
||||||
if d.is_mouse_button_pressed(MouseButton::MOUSE_BUTTON_LEFT) {
|
if d.is_mouse_button_pressed(MouseButton::MOUSE_BUTTON_LEFT) {
|
||||||
match self.active_tool {
|
match self.active_tool {
|
||||||
Tool::None => (),
|
Tool::None => (),
|
||||||
|
Tool::Erase => (),
|
||||||
Tool::SetTile(tile) => self.set_tile(tile_pos.into(), tile),
|
Tool::SetTile(tile) => self.set_tile(tile_pos.into(), tile),
|
||||||
Tool::Math => self.set_tile(
|
Tool::Math => self.set_tile(
|
||||||
tile_pos.into(),
|
tile_pos.into(),
|
||||||
|
@ -670,6 +671,11 @@ impl Editor {
|
||||||
Tool::SelectArea(_, _) => (),
|
Tool::SelectArea(_, _) => (),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if d.is_mouse_button_down(MouseButton::MOUSE_BUTTON_LEFT) {
|
||||||
|
if self.active_tool == Tool::Erase {
|
||||||
|
self.set_tile(tile_pos.into(), Tile::Blank)
|
||||||
|
}
|
||||||
|
}
|
||||||
if let Tool::SelectArea(selection, is_selecting) = &mut self.active_tool {
|
if let Tool::SelectArea(selection, is_selecting) = &mut self.active_tool {
|
||||||
if d.is_mouse_button_down(MouseButton::MOUSE_BUTTON_LEFT) {
|
if d.is_mouse_button_down(MouseButton::MOUSE_BUTTON_LEFT) {
|
||||||
if *is_selecting {
|
if *is_selecting {
|
||||||
|
|
|
@ -219,41 +219,38 @@ impl Board {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn trim_size(&mut self) {
|
pub fn trim_size(&mut self) {
|
||||||
|
// top
|
||||||
{
|
{
|
||||||
let mut top_blanks = 0;
|
let mut n = 0;
|
||||||
while top_blanks < self.height && self.rows[top_blanks].iter().all(Tile::is_blank) {
|
while n < self.height && self.rows[n].iter().all(Tile::is_blank) {
|
||||||
top_blanks += 1;
|
n += 1;
|
||||||
}
|
}
|
||||||
let trim_top = top_blanks.saturating_sub(2);
|
let trim_top = n.saturating_sub(2);
|
||||||
for _ in 0..trim_top {
|
for _ in 0..trim_top {
|
||||||
self.rows.remove(0);
|
self.rows.remove(0);
|
||||||
}
|
}
|
||||||
self.offset_y -= trim_top as isize;
|
self.offset_y -= trim_top as isize;
|
||||||
self.height -= trim_top;
|
self.height -= trim_top;
|
||||||
}
|
}
|
||||||
|
// bottom
|
||||||
{
|
{
|
||||||
let mut bottom_blanks = 0;
|
let mut n = 0;
|
||||||
while bottom_blanks < self.height
|
while n < self.height && self.rows[self.height - n - 1].iter().all(Tile::is_blank) {
|
||||||
&& self.rows[self.height - bottom_blanks - 1]
|
n += 1;
|
||||||
.iter()
|
|
||||||
.all(Tile::is_blank)
|
|
||||||
{
|
|
||||||
bottom_blanks += 1;
|
|
||||||
}
|
}
|
||||||
let trim_bottom = bottom_blanks.saturating_sub(2);
|
let trim_bottom = n.saturating_sub(2);
|
||||||
for _ in 0..trim_bottom {
|
for _ in 0..trim_bottom {
|
||||||
self.rows.pop();
|
self.rows.pop();
|
||||||
}
|
}
|
||||||
self.height -= trim_bottom;
|
self.height -= trim_bottom;
|
||||||
}
|
}
|
||||||
|
// left
|
||||||
{
|
{
|
||||||
let mut left_blanks = 0;
|
let mut n = 0;
|
||||||
while left_blanks < self.width
|
while n < self.width && self.rows.iter().all(|row| row[n].is_blank()) {
|
||||||
&& self.rows.iter().all(|row| row[left_blanks].is_blank())
|
n += 1;
|
||||||
{
|
|
||||||
left_blanks += 1;
|
|
||||||
}
|
}
|
||||||
let trim_left = left_blanks.saturating_sub(2);
|
let trim_left = n.saturating_sub(2);
|
||||||
for row in &mut self.rows {
|
for row in &mut self.rows {
|
||||||
for _ in 0..trim_left {
|
for _ in 0..trim_left {
|
||||||
row.remove(0);
|
row.remove(0);
|
||||||
|
@ -262,17 +259,13 @@ impl Board {
|
||||||
self.offset_x -= trim_left as isize;
|
self.offset_x -= trim_left as isize;
|
||||||
self.width -= trim_left;
|
self.width -= trim_left;
|
||||||
}
|
}
|
||||||
|
// right
|
||||||
{
|
{
|
||||||
let mut right_blanks = 0;
|
let mut n = 0;
|
||||||
while right_blanks < self.height
|
while n < self.width && self.rows.iter().all(|r| r[self.width - n - 1].is_blank()) {
|
||||||
&& self
|
n += 1;
|
||||||
.rows
|
|
||||||
.iter()
|
|
||||||
.all(|row| row[self.width - right_blanks - 1].is_blank())
|
|
||||||
{
|
|
||||||
right_blanks += 1;
|
|
||||||
}
|
}
|
||||||
let trim_right = right_blanks.saturating_sub(2);
|
let trim_right = n.saturating_sub(2);
|
||||||
for row in &mut self.rows {
|
for row in &mut self.rows {
|
||||||
for _ in 0..trim_right {
|
for _ in 0..trim_right {
|
||||||
row.pop();
|
row.pop();
|
||||||
|
|
Loading…
Reference in a new issue