aboutsummaryrefslogtreecommitdiff
path: root/Week11 Mandelbrot/src/com/camilstaps/mandelbrot/ZoomFrame.java
diff options
context:
space:
mode:
Diffstat (limited to 'Week11 Mandelbrot/src/com/camilstaps/mandelbrot/ZoomFrame.java')
-rw-r--r--Week11 Mandelbrot/src/com/camilstaps/mandelbrot/ZoomFrame.java135
1 files changed, 135 insertions, 0 deletions
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);
+ }
+
+}