1 package org.woehlke.computer.kurzweil.tabs.mandelbrot2julia;
2
3 import lombok.EqualsAndHashCode;
4 import lombok.Getter;
5 import lombok.ToString;
6 import lombok.extern.log4j.Log4j2;
7 import org.woehlke.computer.kurzweil.commons.layouts.LayoutCanvas;
8 import org.woehlke.computer.kurzweil.commons.tabs.TabCanvas;
9
10 import javax.swing.*;
11 import javax.swing.border.Border;
12 import java.awt.*;
13 import java.io.Serializable;
14 import java.util.concurrent.ExecutionException;
15 import java.util.concurrent.Future;
16 import java.util.concurrent.TimeUnit;
17 import java.util.concurrent.TimeoutException;
18
19
20
21
22
23
24
25
26
27
28
29
30 @Log4j2
31 @Getter
32 @ToString(callSuper = true, exclude = {"tabCtx","border","preferredSize","layout","model"})
33 @EqualsAndHashCode(callSuper=true, exclude = {"tabCtx","border","preferredSize","layout","model"})
34 public class MandelbrotCanvas extends JComponent implements
35 Serializable, TabCanvas, Mandelbrot, Future<Void> {
36
37 private final MandelbrotContext tabCtx;
38 private final Border border;
39 private final LayoutCanvas layout;
40
41 private final MandelbrotModel model;
42 private final Dimension preferredSize;
43
44 public MandelbrotCanvas(MandelbrotContext tabCtx) {
45 this.tabCtx = tabCtx;
46 this.model = tabCtx.getTabModel();
47 this.border = this.tabCtx.getCtx().getCanvasBorder();
48 this.layout = new LayoutCanvas(this);
49 int width = this.model.getWorldDimensions().getWidth();
50 int height = this.model.getWorldDimensions().getHeight();
51 this.preferredSize = new Dimension(width, height);
52 this.setSize(this.preferredSize);
53 this.setPreferredSize(preferredSize);
54 }
55
56 @Override
57 public void paint(Graphics g) {
58 this.setSize(this.preferredSize);
59 this.setPreferredSize(preferredSize);
60 super.paintComponent(g);
61 int red = 0;
62 int green = 0;
63 int blue = 0;
64 for(int y = 0; y < model.getWorldDimensions().getY(); y++){
65 for(int x = 0; x < model.getWorldDimensions().getX(); x++){
66 blue = (((model.getCellStatusFor(x,y))*4)%256);
67 Color stateColor = new Color(red, green, blue);
68 g.setColor(stateColor);
69 g.drawLine(x,y,x,y);
70 }
71 }
72 }
73
74 @Override
75 public void update(Graphics g) {
76 paint(g);
77 }
78
79 @Override
80 public boolean cancel(boolean mayInterruptIfRunning) {
81 return false;
82 }
83
84 @Override
85 public boolean isCancelled() {
86 return false;
87 }
88
89 @Override
90 public boolean isDone() {
91 return false;
92 }
93
94 @Override
95 public Void get() throws InterruptedException, ExecutionException {
96 return null;
97 }
98
99 @Override
100 public Void get(long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException {
101 return null;
102 }
103
104 @Override
105 public void showMe() {
106 log.info("showMe "+this.toString());
107 }
108 }