From cb071c4f2020b7733f5dd87fa75a7f2e447c5444 Mon Sep 17 00:00:00 2001 From: Camil Staps Date: Wed, 29 Apr 2015 10:29:04 +0200 Subject: This seems to work --- .../src/com/camilstaps/mandelbrot/ZoomFrame.java | 135 +++++++++++++++++++++ 1 file changed, 135 insertions(+) create mode 100644 Week11 Mandelbrot/src/com/camilstaps/mandelbrot/ZoomFrame.java (limited to 'Week11 Mandelbrot/src/com/camilstaps/mandelbrot/ZoomFrame.java') diff --git a/Week11 Mandelbrot/src/com/camilstaps/mandelbrot/ZoomFrame.java b/Week11 Mandelbrot/src/com/camilstaps/mandelbrot/ZoomFrame.java new file mode 100644 index 0000000..1a48926 --- /dev/null +++ b/Week11 Mandelbrot/src/com/camilstaps/mandelbrot/ZoomFrame.java @@ -0,0 +1,135 @@ +/* + * Copyright (c) 2015 Camil Staps + */ +package com.camilstaps.mandelbrot; + +import java.awt.Color; +import java.awt.Graphics; +import java.awt.event.InputEvent; +import java.awt.event.MouseEvent; +import java.awt.event.MouseListener; +import java.awt.event.MouseMotionListener; +import javax.swing.JFrame; + +/** + * + * @author camilstaps + */ +public class ZoomFrame extends JFrame implements MouseListener, MouseMotionListener { + + private MandelbrotController mandelbrotController; + private MandelbrotTextFields mandelbrotTextFields; + + private Graphics graphics; + + private int start_x, start_y, old_x, old_y; + + public ZoomFrame(String s) { + super(s); + addMouseListener(this); + addMouseMotionListener(this); + } + + public void setMandelbrotController(MandelbrotController mc) { + mandelbrotController = mc; + } + + public void setMandelbrotTextFields(MandelbrotTextFields mtf) { + mandelbrotTextFields = mtf; + } + + @Override + public void mouseClicked(MouseEvent me) { + } + + @Override + public void mousePressed(MouseEvent me) { + old_x = start_x = me.getX(); + old_y = start_y = me.getY(); + } + + @Override + public void mouseReleased(MouseEvent me) { + if (me.getX() == start_x && me.getY() == start_y) { + if (mandelbrotController == null || mandelbrotTextFields == null) + return; + + mandelbrotTextFields.setCenterX(mandelbrotController.getX(me.getX())); + mandelbrotTextFields.setCenterY(mandelbrotController.getY(me.getY())); + + if ((me.getModifiers() & InputEvent.SHIFT_MASK) != 0) { + mandelbrotTextFields.setScale(mandelbrotTextFields.getScale() / 2); + } else { + mandelbrotTextFields.setScale(mandelbrotTextFields.getScale() * 2); + } + } else { + double center_x = (mandelbrotController.getX(me.getX()) + - mandelbrotController.getX(start_x)) / 2 + + mandelbrotController.getX(start_x); + double center_y = (mandelbrotController.getY(me.getY()) + - mandelbrotController.getY(start_y)) / 2 + + mandelbrotController.getY(start_y); + + mandelbrotTextFields.setCenterX(center_x); + mandelbrotTextFields.setCenterY(center_y); + + double scale = mandelbrotTextFields.getScale() + / (me.getX() - start_x) + * getWidth(); + + System.err.println(mandelbrotTextFields.getScale()); + System.err.println(me.getX() - start_x); + System.err.println(getWidth()); + + mandelbrotTextFields.setScale(scale); + } + + mandelbrotController.redraw(); + } + + @Override + public void mouseEntered(MouseEvent me) { + } + + @Override + public void mouseExited(MouseEvent me) { + } + + @Override + public void mouseDragged(MouseEvent me) { + Graphics g = getSafeGraphics(); + if (g != null) { + eraseZoombox(); + g.drawRect(start_x, start_y, me.getX() - start_x, me.getX() - start_x); + old_y = old_x = me.getX(); + } + } + + private Graphics getSafeGraphics() { + if (graphics == null) { + graphics = getGraphics(); + graphics.setXORMode(Color.white); + } + return graphics; + } + + private void eraseZoombox() { + Graphics g = getSafeGraphics(); + if (g != null) + g.drawRect(start_x, start_y, old_x - start_x, old_y - start_x); + } + + @Override + public void mouseMoved(MouseEvent me) { + //System.err.println(me.toString()); + } + + public interface MandelbrotTextFields { + public void setCenterX(double x); + public void setCenterY(double y); + public double getScale(); + public void setScale(double scale); + public void setRepetitions(double repetitions); + } + +} -- cgit v1.2.3