-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathPainter.java
More file actions
166 lines (139 loc) · 3.38 KB
/
Painter.java
File metadata and controls
166 lines (139 loc) · 3.38 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
import java.awt.Canvas;
import java.awt.image.BufferStrategy;
public abstract class Painter extends Canvas{
protected BufferStrategy strategy;
protected boolean leftPressed;
protected boolean rightPressed;
protected boolean upPressed;
protected boolean downPressed;
protected boolean nextPressed;
protected boolean prevPressed;
protected boolean shiftPressed;
protected boolean rotPressed;
protected boolean mousePressed;
protected int wheelClicks = 0;
protected boolean stillActive = true;
protected int dragStartX;
protected int dragStartY;
protected int dragX;
protected int dragY;
public void initializeBuffer(){
this.createBufferStrategy(2);
this.strategy = getBufferStrategy();
}
public void startInteraction(){
// Start a thread for resolving incoming commands
CommandHandler updater = new CommandHandler(this);
Thread console = new Thread(updater);
console.start();
}
public abstract void paint(long dt);
public void resolveCommands(){};
public void recordSize(int x, int y){};
public void pressLeft(){
leftPressed = true;
}
public void pressRight(){
rightPressed = true;
}
public void pressUp(){
upPressed = true;
}
public void pressDown(){
downPressed = true;
}
public void pressNext(){
nextPressed = true;
};
public void pressPrevious(){
prevPressed = true;
};
public void pressShift(ASH system){
System.out.println("Mouse shift mode on.");
shiftPressed = true;
system.rememberStructure();
};
public void pressRotate(ASH system){
System.out.println("Mouse rotate mode on.");
system.rememberStructure();
rotPressed = true;
};
public void releaseLeft(){
leftPressed = false;
}
public void releaseRight(){
rightPressed = false;
}
public void releaseUp(){
upPressed = false;
}
public void releaseDown(){
downPressed = false;
}
public void releaseNext(){
nextPressed = false;
}
public void releasePrevious(){
prevPressed = false;
}
public void releaseShift(){
System.out.println("Mouse shift mode off.");
shiftPressed = false;
};
public void releaseRotate(){
System.out.println("Mouse rotate mode off.");
rotPressed = false;
};
public void mousePressed(int x, int y){
mousePressed = true;
dragStartX = x;
dragStartY = y;
dragX = x;
dragY = y;
};
public void mouseClicked(int x, int y, int number){
};
public void mouseReleased(int x, int y){
mousePressed = false;
};
public void mouseDragged(int x, int y){
dragX = x;
dragY = y;
};
public void mouseWheelMoved(int scroll){
wheelClicks = scroll;
};
protected boolean commandInLine(){
if(leftPressed ||
rightPressed ||
upPressed ||
downPressed ||
mousePressed ||
nextPressed ||
prevPressed ||
shiftPressed ||
rotPressed ||
wheelClicks != 0){
return true;
} else {
return false;
}
}
protected static class CommandHandler implements Runnable{
protected Painter painter;
public CommandHandler(Painter thepainter){
this.painter = thepainter;
}
/**
* Thread for asking the painter to react.
*/
public void run(){
while(this.painter.stillActive){
try{ Thread.sleep(30); } catch(Exception error){}
if(this.painter.commandInLine()){
this.painter.resolveCommands();
}
}
}
}
}