From e800be6f3338cace40193b2c23184ed2f673bf27 Mon Sep 17 00:00:00 2001 From: Josh Hofing Date: Thu, 17 Jan 2013 23:01:38 -0500 Subject: [PATCH] Now you can toggle the state, and it isn't spazzy! --- src/Render.java | 36 +++++++++++++++++++++++++++++++++--- 1 file changed, 33 insertions(+), 3 deletions(-) diff --git a/src/Render.java b/src/Render.java index ae83672..092f751 100644 --- a/src/Render.java +++ b/src/Render.java @@ -31,6 +31,7 @@ public class Render extends Canvas implements Runnable, MouseListener, private JFrame _frame; private JButton pauseButton; private Random random = new Random(); + private int _lastX, _lastY; public Render(int width, int height, Grid g, String[] rules) { addMouseListener(this); @@ -47,6 +48,7 @@ public class Render extends Canvas implements Runnable, MouseListener, _pixels = ((DataBufferInt) _image.getRaster().getDataBuffer()).getData(); _lastTick = 0; _rules = rules; + _lastX = _lastY = -1; fps_now = 15; setFrame(); } @@ -215,14 +217,32 @@ public class Render extends Canvas implements Runnable, MouseListener, int states = Goldfish.getMaxStates(rule) - 1; if (e.getX() < 0 || e.getY() < 0 || e.getX() / scale > width || e.getY() / scale > height) return; - _grid.getPatch(e.getX() / scale, e.getY() / scale).setState(states); + if (e.getX()/scale != _lastX && e.getY()/scale != _lastY) { + _lastX = e.getX()/scale; + _lastY = e.getY()/scale; + Patch p = _grid.getPatch(_lastX, _lastY); + if (p.getState() == states) { + p.setState(0); + } else { + _grid.getPatch(e.getX() / scale, e.getY() / scale).setState(states); + } + } e.consume(); } @Override public void mouseClicked(MouseEvent e) { int states = Goldfish.getMaxStates(rule) - 1; - _grid.getPatch(e.getX() / scale, e.getY() / scale).setState(states); + if (e.getX()/scale != _lastX && e.getY()/scale != _lastY) { + _lastX = e.getX()/scale; + _lastY = e.getY()/scale; + Patch p = _grid.getPatch(_lastX, _lastY); + if (p.getState() == states) { + p.setState(0); + } else { + _grid.getPatch(e.getX() / scale, e.getY() / scale).setState(states); + } + } e.consume(); } @@ -237,12 +257,22 @@ public class Render extends Canvas implements Runnable, MouseListener, @Override public void mousePressed(MouseEvent e) { int states = Goldfish.getMaxStates(rule) - 1; - _grid.getPatch(e.getX() / scale, e.getY() / scale).setState(states); + if (e.getX()/scale != _lastX && e.getY()/scale != _lastY) { + _lastX = e.getX()/scale; + _lastY = e.getY()/scale; + Patch p = _grid.getPatch(_lastX, _lastY); + if (p.getState() == states) { + p.setState(0); + } else { + _grid.getPatch(e.getX() / scale, e.getY() / scale).setState(states); + } + } e.consume(); } @Override public void mouseReleased(MouseEvent e) { + _lastX = _lastY = -1; } @Override