added sliders
reworked painting added animations reworked point2 added point3 point4 made tag inner class in Debugger added fps animation parsing debuggers made new thread for painting at 60fps
BIN
resources/icons/arrow_down_black.png
Normal file
|
After Width: | Height: | Size: 128 B |
BIN
resources/icons/arrow_down_white.png
Normal file
|
After Width: | Height: | Size: 130 B |
BIN
resources/icons/arrow_left_black.png
Normal file
|
After Width: | Height: | Size: 115 B |
BIN
resources/icons/arrow_left_white.png
Normal file
|
After Width: | Height: | Size: 119 B |
BIN
resources/icons/arrow_right_black.png
Normal file
|
After Width: | Height: | Size: 115 B |
BIN
resources/icons/arrow_right_white.png
Normal file
|
After Width: | Height: | Size: 121 B |
BIN
resources/icons/arrow_up_black.png
Normal file
|
After Width: | Height: | Size: 124 B |
BIN
resources/icons/arrow_up_white.png
Normal file
|
After Width: | Height: | Size: 130 B |
@@ -9,55 +9,58 @@
|
|||||||
<!-- Size="1.0, 1.0"-->
|
<!-- Size="1.0, 1.0"-->
|
||||||
<!-- Location="0.0, 0.0"-->
|
<!-- Location="0.0, 0.0"-->
|
||||||
<!-- BackgroundColor="#333333">-->
|
<!-- BackgroundColor="#333333">-->
|
||||||
<!-- <Button-->
|
<Button
|
||||||
<!-- Name="button1"-->
|
Name="button1"
|
||||||
<!-- BackgroundColor="#999999"-->
|
BackgroundColor="#999999"
|
||||||
<!-- AccentColor="#666666"-->
|
AccentColor="#666666"
|
||||||
<!-- ForegroundColor="#333333"-->
|
ForegroundColor="#333333"
|
||||||
<!-- Size="0.5, 0.5"-->
|
Size="320, 240"
|
||||||
<!-- Location="0.0, 0.0"-->
|
Location="0.0, 0.5"
|
||||||
<!-- HasBorder="true"-->
|
HasBorder="true"
|
||||||
<!-- Label="button1">-->
|
Label="button1">
|
||||||
<!-- <Button-->
|
<Button
|
||||||
<!-- Name="button4"-->
|
Name="button4"
|
||||||
<!-- BackgroundColor="#009999"-->
|
BackgroundColor="#009999"
|
||||||
<!-- AccentColor="#006666"-->
|
AccentColor="#006666"
|
||||||
<!-- ForegroundColor="#003333"-->
|
ForegroundColor="#003333"
|
||||||
<!-- Size="0.5, 0.5"-->
|
Size="0.5, 0.5"
|
||||||
<!-- Location="0.25, 0.25"-->
|
Location="0.25, 0.25"
|
||||||
<!-- Icon="square_white"-->
|
Icon="square_white"
|
||||||
<!-- HasBorder="true">-->
|
HasBorder="true">
|
||||||
<!-- <ToggleButton-->
|
<ToggleButton
|
||||||
<!-- Name="button2"-->
|
Name="button2"
|
||||||
<!-- BackgroundColor="#000099"-->
|
BackgroundColor="#000099"
|
||||||
<!-- AccentColor="#000066"-->
|
AccentColor="#000066"
|
||||||
<!-- ForegroundColor="#000033"-->
|
ForegroundColor="#000033"
|
||||||
<!-- Size="0.5, 0.5"-->
|
Size="0.5, 0.5"
|
||||||
<!-- Location="0.25, 0.25"-->
|
Location="0.25, 0.25"
|
||||||
<!-- Label="button2"/>-->
|
Label="button2"/>
|
||||||
<!-- </Button>-->
|
</Button>
|
||||||
<!-- </Button>-->
|
</Button>
|
||||||
<!-- <Button Name="button6" BackgroundColor="#555555" Location="0.5, 0.5" Size="0.5, 0.5"/>-->
|
<!-- <Button Name="button6" BackgroundColor="#555555" Location="0.5, 0.5" Size="0.5, 0.5"/>-->
|
||||||
<CheckBoxList
|
<!-- <CheckBoxList-->
|
||||||
Name="checkboxlist"
|
<!-- Name="checkboxlist"-->
|
||||||
CheckBoxSize="300, 20"
|
<!-- CheckBoxSize="300, 20"-->
|
||||||
BackgroundColor="#666666"
|
<!-- BackgroundColor="#666666"-->
|
||||||
AccentColor="#444444"
|
<!-- AccentColor="#444444"-->
|
||||||
ForegroundColor="#005599"
|
<!-- ForegroundColor="#005599"-->
|
||||||
Size="0.5, 0.5"
|
<!-- Size="0.5, 0.3"-->
|
||||||
Icon="check_white"
|
<!-- Icon="check_white"-->
|
||||||
Spacing="30"
|
<!-- Spacing="30"-->
|
||||||
Location="0.0, 0.0">
|
<!-- Location="0.0, 0.0">-->
|
||||||
<CheckBox
|
<!-- <CheckBox-->
|
||||||
Name="checkbox1"
|
<!-- Name="checkbox1"-->
|
||||||
Text="HAHA FRAR"/>
|
<!-- Text="HAHA FRAR"/>-->
|
||||||
<CheckBox
|
<!-- <CheckBox-->
|
||||||
Name="checkbox2"
|
<!-- Name="checkbox2"-->
|
||||||
Text="HAHA FRAR2"/>
|
<!-- Text="HAHA FRAR2"/>-->
|
||||||
<CheckBox
|
<!-- <CheckBox-->
|
||||||
Name="checkbox3"
|
<!-- Name="checkbox3"-->
|
||||||
Text="HAHA FRAR3"/>
|
<!-- Text="HAHA FRAR3"/>-->
|
||||||
</CheckBoxList>
|
<!-- </CheckBoxList>-->
|
||||||
<ToggleButton Name="button3" BackgroundColor="#123456" AccentColor="654321" Size="100, 100" Location="0.5, 0.5" Icon="minimize_white"/>
|
<ToggleButton Name="button3" BackgroundColor="#123456" AccentColor="654321" Size="100, 100" Location="0.5, 0.5" Icon="minimize_white"/>
|
||||||
|
<Slider Name="slider" Location="-20, 0" Size="20, 100" HasBorder="false"/>
|
||||||
|
<Slider Name="hslider" Location="400, 0" Size="80, 20" Direction="horizontal"/>
|
||||||
|
<Button Location="350, 20" Size="20, 70"/>
|
||||||
<!-- </Panel>-->
|
<!-- </Panel>-->
|
||||||
</Window>
|
</Window>
|
||||||
@@ -1,43 +1,53 @@
|
|||||||
import guiTree.Components.Button;
|
import guiTree.Animations.ColorAnimation;
|
||||||
import guiTree.Components.CheckBox;
|
import guiTree.Animations.LocationAnimation;
|
||||||
import guiTree.Components.ToggleButton;
|
import guiTree.Components.Slider;
|
||||||
|
import guiTree.Helper.Point2;
|
||||||
|
import guiTree.Visual;
|
||||||
import guiTree.Window;
|
import guiTree.Window;
|
||||||
import guiTree.events.MouseAdapter;
|
import guiTree.events.MouseAdapter;
|
||||||
import parser.XAMLParser;
|
import parser.XAMLParser;
|
||||||
|
|
||||||
|
import java.awt.*;
|
||||||
import java.awt.event.MouseEvent;
|
import java.awt.event.MouseEvent;
|
||||||
|
|
||||||
|
|
||||||
public class Main {
|
public class Main {
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
try{
|
try{
|
||||||
Window window = XAMLParser.parse("ui.xml");
|
Window window = XAMLParser.parse("ui.xml");
|
||||||
assert window != null;
|
assert window != null;
|
||||||
|
Slider hslider = (Slider)window.findByName("hslider");
|
||||||
// Button button1 = (Button)window.findByName("button1");
|
Slider slider = (Slider)window.findByName("slider");
|
||||||
// button1.addMouseListener(new MouseAdapter() {
|
|
||||||
// @Override
|
|
||||||
// public void mouseClicked(MouseEvent mouseEvent) {
|
|
||||||
// System.out.println("Button x: " + button1.getLocationX() + " y: " + button1.getLocationY());
|
|
||||||
// }
|
|
||||||
// });
|
|
||||||
//
|
|
||||||
// ToggleButton button2 = (ToggleButton)window.findByName("button2");
|
|
||||||
// button2.addMouseListener(new MouseAdapter() {
|
|
||||||
// @Override
|
|
||||||
// public void mouseClicked(MouseEvent mouseEvent) {
|
|
||||||
// System.out.println("Button x: " + button2.getLocationX() + " y: " + button2.getLocationY());
|
|
||||||
// }
|
|
||||||
// });
|
|
||||||
//
|
|
||||||
// Button button4 = (Button)window.findByName("button4");
|
|
||||||
// button4.addMouseListener(new MouseAdapter() {
|
|
||||||
// @Override
|
|
||||||
// public void mouseClicked(MouseEvent mouseEvent) {
|
|
||||||
// System.out.println("Button x: " + button4.getLocationX() + " y: " + button4.getLocationY());
|
|
||||||
// }
|
|
||||||
// });
|
|
||||||
CheckBox checkBox = (CheckBox)window.findByName("checkbox");
|
|
||||||
window.repaint();
|
window.repaint();
|
||||||
|
ColorAnimation sliderColor = new ColorAnimation(hslider, slider.getBackgroundColor(), Color.RED, 1000);
|
||||||
|
window.addMouseListener(new MouseAdapter() {
|
||||||
|
private boolean out = false;
|
||||||
|
private LocationAnimation outAnimation;
|
||||||
|
private LocationAnimation inAnimation;
|
||||||
|
@Override
|
||||||
|
public void mouseMoved(MouseEvent mouseEvent) {
|
||||||
|
if(mouseEvent.getX() < 20 && mouseEvent.getY() > 0 && mouseEvent.getY() < 100) {
|
||||||
|
if(!out) {
|
||||||
|
outAnimation = new LocationAnimation(slider, slider.getLocation(), new Point2<>(0, slider.getLocationY()), 500);
|
||||||
|
window.removeAnimation(inAnimation);
|
||||||
|
window.addAnimation(outAnimation);
|
||||||
|
out = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if(out) {
|
||||||
|
inAnimation = new LocationAnimation(slider, slider.getLocation(), new Point2<>(- 20, slider.getLocationY()), 500);
|
||||||
|
window.removeAnimation(outAnimation);
|
||||||
|
window.addAnimation(inAnimation);
|
||||||
|
out = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
Thread.sleep(5000);
|
||||||
|
System.out.println("Started moving");
|
||||||
|
hslider.addAnimation(new LocationAnimation(hslider, hslider.getLocation(), new Point2<>(hslider.getLocationX(), hslider.getLocationY() + 100), 1000));
|
||||||
|
hslider.addAnimation(sliderColor);
|
||||||
}catch (Exception e){
|
}catch (Exception e){
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package converters;
|
package converters;
|
||||||
|
|
||||||
import com.sun.jdi.InvalidTypeException;
|
import com.sun.jdi.InvalidTypeException;
|
||||||
|
import guiTree.Components.Slider;
|
||||||
|
|
||||||
import java.awt.*;
|
import java.awt.*;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
@@ -20,6 +21,7 @@ public class Converter {
|
|||||||
this.converterTable.put(Double.TYPE, new DoubleConverter());
|
this.converterTable.put(Double.TYPE, new DoubleConverter());
|
||||||
this.converterTable.put(Boolean.TYPE, new BooleanConverter());
|
this.converterTable.put(Boolean.TYPE, new BooleanConverter());
|
||||||
this.converterTable.put(Color.class, new ColorConverter());
|
this.converterTable.put(Color.class, new ColorConverter());
|
||||||
|
this.converterTable.put(Slider.Direction.class, new DirectionConverter());
|
||||||
}
|
}
|
||||||
|
|
||||||
public Object objectCreatorFactory (Class<?> type, String content) throws InvalidTypeException {
|
public Object objectCreatorFactory (Class<?> type, String content) throws InvalidTypeException {
|
||||||
|
|||||||
18
src/converters/DirectionConverter.java
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
package converters;
|
||||||
|
|
||||||
|
import com.sun.jdi.InvalidTypeException;
|
||||||
|
import guiTree.Components.Slider;
|
||||||
|
|
||||||
|
public class DirectionConverter implements ConverterInterface<Slider.Direction> {
|
||||||
|
@Override
|
||||||
|
public Slider.Direction convert(String content) throws InvalidTypeException {
|
||||||
|
content = content.toLowerCase();
|
||||||
|
if(content.equals("horizontal")) {
|
||||||
|
return Slider.Direction.Horizontal;
|
||||||
|
}
|
||||||
|
if(content.equals("vertical")) {
|
||||||
|
return Slider.Direction.Vertical;
|
||||||
|
}
|
||||||
|
throw new InvalidTypeException();
|
||||||
|
}
|
||||||
|
}
|
||||||
6
src/guiTree/Animations/AnimationInterface.java
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
package guiTree.Animations;
|
||||||
|
|
||||||
|
public interface AnimationInterface {
|
||||||
|
int FPS = 60;
|
||||||
|
boolean step();
|
||||||
|
}
|
||||||
51
src/guiTree/Animations/ColorAnimation.java
Normal file
@@ -0,0 +1,51 @@
|
|||||||
|
package guiTree.Animations;
|
||||||
|
|
||||||
|
import guiTree.Helper.*;
|
||||||
|
import guiTree.Visual;
|
||||||
|
|
||||||
|
import java.awt.*;
|
||||||
|
|
||||||
|
public class ColorAnimation implements AnimationInterface {
|
||||||
|
private Point4<Float> from;
|
||||||
|
private Point4<Integer> to;
|
||||||
|
private Point4<Float> offset;
|
||||||
|
private Visual element;
|
||||||
|
|
||||||
|
public ColorAnimation(Visual v, Color from, Color to, int ms) {
|
||||||
|
this.from = new Point4<>((float)from.getRed(), (float)from.getGreen(), (float)from.getBlue(), (float)from.getAlpha());
|
||||||
|
this.to = new Point4<>(to.getRed(), to.getGreen(), to.getBlue(), to.getAlpha());
|
||||||
|
this.offset = new Point4<>((this.to.a - this.from.a) * 1000 / FPS / ms,
|
||||||
|
(this.to.b - this.from.b) * 1000 / FPS / ms,
|
||||||
|
(this.to.c - this.from.c) * 1000 / FPS / ms,
|
||||||
|
(this.to.d - this.from.d) * 1000 / FPS / ms);
|
||||||
|
this.element = v;
|
||||||
|
Debugger.log("Created color animation for " + v.getName() +
|
||||||
|
" from r: " + this.from.a +
|
||||||
|
" g: " + this.from.b +
|
||||||
|
" b: " + this.from.c +
|
||||||
|
" a: " + this.from.d +
|
||||||
|
" to r: " + this.to.a +
|
||||||
|
" g: " + this.to.b +
|
||||||
|
" b: " + this.to.c +
|
||||||
|
" a: " + this.to.d, Debugger.Tag.ANIMATIONS);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean step() {
|
||||||
|
if(from.a > to.a - 1 && from.a < to.a + 1 &&
|
||||||
|
from.b > to.b - 1 && from.b < to.b + 1 &&
|
||||||
|
from.c > to.c - 1 && from.c < to.c + 1 &&
|
||||||
|
from.d > to.d - 1 && from.d < to.d + 1) {
|
||||||
|
element.setBackgroundColor(new Color(to.a, to.b, to.c, to.d));
|
||||||
|
Debugger.log("Animation for " + element.getName() + " finished", Debugger.Tag.ANIMATIONS);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
from.a += offset.a;
|
||||||
|
from.b += offset.b;
|
||||||
|
from.c += offset.c;
|
||||||
|
from.d += offset.d;
|
||||||
|
element.setBackgroundColor(new Color(Math.round(from.a), Math.round(from.b), Math.round(from.c), Math.round(from.d)));
|
||||||
|
element.update();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
34
src/guiTree/Animations/LocationAnimation.java
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
package guiTree.Animations;
|
||||||
|
|
||||||
|
import guiTree.Helper.Debugger;
|
||||||
|
import guiTree.Helper.Point2;
|
||||||
|
import guiTree.Visual;
|
||||||
|
|
||||||
|
public class LocationAnimation implements AnimationInterface {
|
||||||
|
private Point2<Float> from;
|
||||||
|
private Point2<Integer> to;
|
||||||
|
private Point2<Float> offset;
|
||||||
|
private Visual element;
|
||||||
|
|
||||||
|
public LocationAnimation(Visual v, Point2<Integer> from, Point2<Integer> to, int ms) {
|
||||||
|
this.from = new Point2<>(from.x.floatValue(), from.y.floatValue());
|
||||||
|
this.to = to;
|
||||||
|
this.offset = new Point2<>((float)(to.x - from.x) * 1000 / FPS / ms, (float)(to.y - from.y) * 1000 / FPS / ms);
|
||||||
|
this.element = v;
|
||||||
|
Debugger.log("Created animation for " + v.getName() + " from x: " + from.x + " y: " + from.y + " to x: " + to.x + " y: " + to.y, Debugger.Tag.ANIMATIONS);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean step() {
|
||||||
|
if(from.x > to.x - 1 && from.x < to.x + 1 && from.y > to.y - 1 && from.y < to.y + 1) {
|
||||||
|
element.setLocation(to.x, to.y);
|
||||||
|
Debugger.log("Animation for " + element.getName() + " finished", Debugger.Tag.ANIMATIONS);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
from.x += offset.x;
|
||||||
|
from.y += offset.y;
|
||||||
|
element.setLocation(Math.round(from.x), Math.round(from.y));
|
||||||
|
element.update();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,7 +1,6 @@
|
|||||||
package guiTree.Components;
|
package guiTree.Components;
|
||||||
|
|
||||||
import guiTree.Helper.Debugger;
|
import guiTree.Helper.Debugger;
|
||||||
import guiTree.Helper.Tag;
|
|
||||||
import guiTree.Visual;
|
import guiTree.Visual;
|
||||||
import guiTree.events.MouseAdapter;
|
import guiTree.events.MouseAdapter;
|
||||||
|
|
||||||
@@ -17,6 +16,7 @@ public class Button extends Visual {
|
|||||||
private Boolean pressed;
|
private Boolean pressed;
|
||||||
private Boolean hovered;
|
private Boolean hovered;
|
||||||
private BufferedImage icon;
|
private BufferedImage icon;
|
||||||
|
private int round = -1;
|
||||||
|
|
||||||
public Button() {
|
public Button() {
|
||||||
this("", null);
|
this("", null);
|
||||||
@@ -40,39 +40,39 @@ public class Button extends Visual {
|
|||||||
@Override
|
@Override
|
||||||
public void mouseClicked(MouseEvent mouseEvent) {
|
public void mouseClicked(MouseEvent mouseEvent) {
|
||||||
pressed = false;
|
pressed = false;
|
||||||
|
update();
|
||||||
}
|
}
|
||||||
@Override
|
@Override
|
||||||
public void mousePressed(MouseEvent mouseEvent) {
|
public void mousePressed(MouseEvent mouseEvent) {
|
||||||
pressed = true;
|
pressed = true;
|
||||||
Debugger.log("Pressed: " + getName(), Tag.LISTENER);
|
update();
|
||||||
Debugger.log("Calling repaint from pressed: " + getName(), Tag.PAINTING);
|
Debugger.log("Pressed: " + getName(), Debugger.Tag.LISTENER);
|
||||||
repaint();
|
Debugger.log("Calling repaint from pressed: " + getName(), Debugger.Tag.PAINTING);
|
||||||
}
|
}
|
||||||
@Override
|
@Override
|
||||||
public void mouseReleased(MouseEvent mouseEvent) {
|
public void mouseReleased(MouseEvent mouseEvent) {
|
||||||
pressed = false;
|
pressed = false;
|
||||||
Debugger.log("Calling repaint from released: " + getName(), Tag.PAINTING);
|
update();
|
||||||
repaint();
|
Debugger.log("Calling repaint from released: " + getName(), Debugger.Tag.PAINTING);
|
||||||
}
|
}
|
||||||
@Override
|
@Override
|
||||||
public void mouseEntered(MouseEvent mouseEvent) {
|
public void mouseEntered(MouseEvent mouseEvent) {
|
||||||
hovered = true;
|
hovered = true;
|
||||||
Debugger.log("Calling repaint from entered: " + getName(), Tag.PAINTING);
|
update();
|
||||||
repaint();
|
Debugger.log("Calling repaint from entered: " + getName(), Debugger.Tag.PAINTING);
|
||||||
}
|
}
|
||||||
@Override
|
@Override
|
||||||
public void mouseExited(MouseEvent mouseEvent) {
|
public void mouseExited(MouseEvent mouseEvent) {
|
||||||
hovered = false;
|
hovered = false;
|
||||||
Debugger.log("Calling repaint from exited: " + getName(), Tag.PAINTING);
|
update();
|
||||||
repaint();
|
Debugger.log("Calling repaint from exited: " + getName(), Debugger.Tag.PAINTING);
|
||||||
}
|
}
|
||||||
@Override
|
@Override
|
||||||
public void mouseDragged(MouseEvent mouseEvent) {
|
public void mouseDragged(MouseEvent mouseEvent) {
|
||||||
}
|
}
|
||||||
@Override
|
@Override
|
||||||
public void mouseMoved(MouseEvent mouseEvent) {
|
public void mouseMoved(MouseEvent mouseEvent) {
|
||||||
Debugger.log("Calling repaint from moved: " + getName(), Tag.PAINTING);
|
Debugger.log("Calling repaint from moved: " + getName(), Debugger.Tag.PAINTING);
|
||||||
repaint();
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -82,11 +82,7 @@ public class Button extends Visual {
|
|||||||
{
|
{
|
||||||
//Get Graphics
|
//Get Graphics
|
||||||
Graphics2D g = imageBuffer.createGraphics();
|
Graphics2D g = imageBuffer.createGraphics();
|
||||||
|
g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
|
||||||
//Set Transparency
|
|
||||||
g.setComposite(AlphaComposite.Clear);
|
|
||||||
g.fillRect(0, 0, getWidth(), getHeight());
|
|
||||||
g.setComposite(AlphaComposite.Src);
|
|
||||||
|
|
||||||
//Choose background
|
//Choose background
|
||||||
if(hovered) {
|
if(hovered) {
|
||||||
@@ -101,12 +97,12 @@ public class Button extends Visual {
|
|||||||
|
|
||||||
//Draw Button
|
//Draw Button
|
||||||
if(getHasBorder()) {
|
if(getHasBorder()) {
|
||||||
g.fillRect(1, 1, this.getWidth() - 2, this.getHeight() - 2);
|
g.fillRoundRect(1, 1, getWidth() - 1, getHeight() - 1, round, round);
|
||||||
g.setColor(getBorderColor());
|
g.setColor(getBorderColor());
|
||||||
g.drawRect(0, 0, getWidth() - 1, getHeight() - 1);
|
g.drawRoundRect(0, 0, getWidth() - 1, getHeight() - 1, round, round);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
g.fillRect(0, 0, getWidth() - 1, getHeight() - 1);
|
g.fillRoundRect(0, 0, getWidth(), getHeight(), round, round);
|
||||||
}
|
}
|
||||||
|
|
||||||
//Draw Label
|
//Draw Label
|
||||||
@@ -138,6 +134,10 @@ public class Button extends Visual {
|
|||||||
g.dispose();
|
g.dispose();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setRound(int round) {
|
||||||
|
this.round = round;
|
||||||
|
}
|
||||||
|
|
||||||
public void setLabel(String label) {
|
public void setLabel(String label) {
|
||||||
this.label = label;
|
this.label = label;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
package guiTree.Components;
|
package guiTree.Components;
|
||||||
|
|
||||||
import guiTree.Helper.Debugger;
|
import guiTree.Helper.Debugger;
|
||||||
import guiTree.Helper.Tag;
|
|
||||||
import guiTree.Visual;
|
import guiTree.Visual;
|
||||||
import guiTree.events.MouseAdapter;
|
import guiTree.events.MouseAdapter;
|
||||||
|
|
||||||
@@ -39,25 +38,24 @@ public class CheckBox extends Visual {
|
|||||||
@Override
|
@Override
|
||||||
public void mousePressed(MouseEvent mouseEvent) {
|
public void mousePressed(MouseEvent mouseEvent) {
|
||||||
marked = !marked;
|
marked = !marked;
|
||||||
Debugger.log("Calling repaint from pressed: " + getName(), Tag.PAINTING);
|
Debugger.log("Calling repaint from pressed: " + getName(), Debugger.Tag.PAINTING);
|
||||||
repaint();
|
update();
|
||||||
}
|
}
|
||||||
@Override
|
@Override
|
||||||
public void mouseEntered(MouseEvent mouseEvent) {
|
public void mouseEntered(MouseEvent mouseEvent) {
|
||||||
hovered = true;
|
hovered = true;
|
||||||
Debugger.log("Calling repaint from entered: " + getName(), Tag.PAINTING);
|
Debugger.log("Calling repaint from entered: " + getName(), Debugger.Tag.PAINTING);
|
||||||
repaint();
|
update();
|
||||||
}
|
}
|
||||||
@Override
|
@Override
|
||||||
public void mouseExited(MouseEvent mouseEvent) {
|
public void mouseExited(MouseEvent mouseEvent) {
|
||||||
hovered = false;
|
hovered = false;
|
||||||
Debugger.log("Calling repaint from exited: " + getName(), Tag.PAINTING);
|
Debugger.log("Calling repaint from exited: " + getName(), Debugger.Tag.PAINTING);
|
||||||
repaint();
|
update();
|
||||||
}
|
}
|
||||||
@Override
|
@Override
|
||||||
public void mouseMoved(MouseEvent mouseEvent) {
|
public void mouseMoved(MouseEvent mouseEvent) {
|
||||||
Debugger.log("Calling repaint from moved: " + getName(), Tag.PAINTING);
|
Debugger.log("Calling repaint from moved: " + getName(), Debugger.Tag.PAINTING);
|
||||||
repaint();
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
package guiTree.Components;
|
package guiTree.Components;
|
||||||
|
|
||||||
import guiTree.Helper.Point2d;
|
import guiTree.Helper.Point2;
|
||||||
import guiTree.Visual;
|
import guiTree.Visual;
|
||||||
|
|
||||||
import javax.imageio.ImageIO;
|
import javax.imageio.ImageIO;
|
||||||
@@ -15,7 +15,7 @@ public class CheckBoxList extends Visual {
|
|||||||
private List<CheckBox> checkBoxList;
|
private List<CheckBox> checkBoxList;
|
||||||
int spacing;
|
int spacing;
|
||||||
private BufferedImage icon;
|
private BufferedImage icon;
|
||||||
private Point2d checkBoxSize;
|
private Point2<Integer> checkBoxSize;
|
||||||
|
|
||||||
public CheckBoxList() {
|
public CheckBoxList() {
|
||||||
this(20);
|
this(20);
|
||||||
@@ -84,7 +84,7 @@ public class CheckBoxList extends Visual {
|
|||||||
for(CheckBox cb: checkBoxList) {
|
for(CheckBox cb: checkBoxList) {
|
||||||
cb.setSize(width, height);
|
cb.setSize(width, height);
|
||||||
}
|
}
|
||||||
checkBoxSize = new Point2d(width, height);
|
checkBoxSize = new Point2<>(width, height);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -2,6 +2,8 @@ package guiTree.Components;
|
|||||||
|
|
||||||
import guiTree.Visual;
|
import guiTree.Visual;
|
||||||
|
|
||||||
|
import java.awt.*;
|
||||||
|
import java.awt.image.BufferedImage;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@@ -105,4 +107,14 @@ public class Panel extends Visual {
|
|||||||
// reposition();
|
// reposition();
|
||||||
// }
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void paint(BufferedImage imageBuffer) {
|
||||||
|
Graphics2D g = imageBuffer.createGraphics();
|
||||||
|
|
||||||
|
g.setColor(getBackgroundColor());
|
||||||
|
g.fillRect(0, 0, getWidth(), getHeight());
|
||||||
|
|
||||||
|
g.dispose();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
66
src/guiTree/Components/ScrollPanel.java
Normal file
@@ -0,0 +1,66 @@
|
|||||||
|
package guiTree.Components;
|
||||||
|
|
||||||
|
import guiTree.Helper.Debugger;
|
||||||
|
import guiTree.Visual;
|
||||||
|
import guiTree.events.MouseAdapter;
|
||||||
|
|
||||||
|
import java.awt.*;
|
||||||
|
import java.awt.image.BufferedImage;
|
||||||
|
|
||||||
|
public class ScrollPanel extends Visual {
|
||||||
|
|
||||||
|
private float positionX;
|
||||||
|
private float positionY;
|
||||||
|
private float ratioX;
|
||||||
|
private float ratioY;
|
||||||
|
private Slider verticalScrollBar;
|
||||||
|
private Slider horizontalScrollBar;
|
||||||
|
|
||||||
|
public ScrollPanel() {
|
||||||
|
super();
|
||||||
|
setName("ScrollPanel");
|
||||||
|
horizontalScrollBar = new Slider(Slider.Direction.Horizontal);
|
||||||
|
verticalScrollBar = new Slider(Slider.Direction.Vertical);
|
||||||
|
verticalScrollBar.setHasBorder(true);
|
||||||
|
horizontalScrollBar.setHasBorder(true);
|
||||||
|
addVisual(verticalScrollBar);
|
||||||
|
addVisual(horizontalScrollBar);
|
||||||
|
verticalScrollBar.setName("vertical scroll bar");
|
||||||
|
horizontalScrollBar.setName("horizontal scroll bar");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setSize() {
|
||||||
|
super.setSize();
|
||||||
|
if(verticalScrollBar != null && horizontalScrollBar != null) {
|
||||||
|
verticalScrollBar.setSize(20, getHeight() - 20);
|
||||||
|
horizontalScrollBar.setSize(getWidth() - 20, 20);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(horizontalScrollBar != null) {
|
||||||
|
horizontalScrollBar.setSize(getWidth(), 20);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(verticalScrollBar != null) {
|
||||||
|
verticalScrollBar.setSize(20, getHeight());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void paint(BufferedImage imageBuffer) {
|
||||||
|
Graphics2D g = imageBuffer.createGraphics();
|
||||||
|
if(getHasBorder()) {
|
||||||
|
g.setColor(getBackgroundColor());
|
||||||
|
g.fillRect(1, 1, getWidth() - 2, getHeight() - 2);
|
||||||
|
g.setColor(getBorderColor());
|
||||||
|
g.drawRect(0, 0, getWidth() - 1, getHeight() - 1);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
g.setColor(getBackgroundColor());
|
||||||
|
g.fillRect(0, 0, getWidth() - 1, getHeight() - 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
g.dispose();
|
||||||
|
}
|
||||||
|
}
|
||||||
264
src/guiTree/Components/Slider.java
Normal file
@@ -0,0 +1,264 @@
|
|||||||
|
package guiTree.Components;
|
||||||
|
|
||||||
|
import guiTree.Visual;
|
||||||
|
import guiTree.events.MouseAdapter;
|
||||||
|
|
||||||
|
import java.awt.*;
|
||||||
|
import java.awt.event.MouseEvent;
|
||||||
|
import java.awt.image.BufferedImage;
|
||||||
|
|
||||||
|
public class Slider extends Visual {
|
||||||
|
public enum Direction {
|
||||||
|
Vertical,
|
||||||
|
Horizontal
|
||||||
|
}
|
||||||
|
|
||||||
|
private Direction direction;
|
||||||
|
private Button slider;
|
||||||
|
private Button button2;
|
||||||
|
private Button button1;
|
||||||
|
private SliderListener sliderListener;
|
||||||
|
|
||||||
|
public Slider() {
|
||||||
|
this(Direction.Vertical);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Slider(Direction direction) {
|
||||||
|
super();
|
||||||
|
this.direction = direction;
|
||||||
|
|
||||||
|
button1 = new Button();
|
||||||
|
button2 = new Button();
|
||||||
|
slider = new Button();
|
||||||
|
|
||||||
|
setBackgroundColor(new Color(175, 175, 175));
|
||||||
|
setForegroundColor(new Color(112, 112, 112));
|
||||||
|
setAccentColor(new Color(50, 50, 50));
|
||||||
|
button1.setHasBorder(false);
|
||||||
|
button2.setHasBorder(false);
|
||||||
|
|
||||||
|
if(direction == Direction.Horizontal) {
|
||||||
|
button1.setIcon("arrow_left_black");
|
||||||
|
button2.setIcon("arrow_right_black");
|
||||||
|
button1.setLocation(0.0f, 0.15f);
|
||||||
|
button2.setLocation(-1.0f, 0.15f);
|
||||||
|
slider.setLocation(-1.0f, 0.25f);
|
||||||
|
slider.setSize(-1.0f, 0.5f);
|
||||||
|
slider.setLocation(20, 0);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
button1.setIcon("arrow_up_black");
|
||||||
|
button2.setIcon("arrow_down_black");
|
||||||
|
button1.setLocation(0.15f, 0.0f);
|
||||||
|
button2.setLocation(0.15f, -1.0f);
|
||||||
|
slider.setLocation(0.25f, -1.0f);
|
||||||
|
slider.setSize(0.5f, -1.0f);
|
||||||
|
slider.setLocation(0, 20);
|
||||||
|
}
|
||||||
|
|
||||||
|
addVisual(button1);
|
||||||
|
addVisual(button2);
|
||||||
|
addVisual(slider);
|
||||||
|
|
||||||
|
button1.setLocation(0, 0);
|
||||||
|
slider.setRound(10);
|
||||||
|
button1.setRound(10);
|
||||||
|
button2.setRound(10);
|
||||||
|
|
||||||
|
button1.addMouseListener(new MouseAdapter() {
|
||||||
|
@Override
|
||||||
|
public void mouseClicked(MouseEvent mouseEvent) {
|
||||||
|
moveSlider(-0.05f);
|
||||||
|
button1.update();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
button2.addMouseListener(new MouseAdapter() {
|
||||||
|
@Override
|
||||||
|
public void mouseClicked(MouseEvent mouseEvent) {
|
||||||
|
moveSlider(0.05f);
|
||||||
|
button2.update();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
sliderListener = new SliderListener();
|
||||||
|
slider.addMouseListener(sliderListener);
|
||||||
|
}
|
||||||
|
|
||||||
|
public float getSliderLocation() {
|
||||||
|
if(direction == Direction.Vertical) {
|
||||||
|
return (float)slider.getLocationY() / getHeight();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return (float)slider.getLocationX() / getWidth();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSliderSize(int width, int height) {
|
||||||
|
slider.setSize(width, height);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void moveSlider(int offset) {
|
||||||
|
if(direction == Direction.Vertical) {
|
||||||
|
if(slider.getLocationY() + slider.getHeight() + offset > getHeight() - button2.getHeight()) {
|
||||||
|
slider.setLocationY(getHeight() - slider.getHeight() - button2.getHeight());
|
||||||
|
}
|
||||||
|
else if (slider.getLocationY() + offset < button1.getHeight()) {
|
||||||
|
slider.setLocationY(button1.getHeight());
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
slider.setLocationY(Math.round(slider.getLocationY() + offset));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if(slider.getLocationX() + slider.getWidth() + offset > getWidth() - button2.getWidth()) {
|
||||||
|
slider.setLocationX(getWidth() - slider.getWidth() - button2.getWidth());
|
||||||
|
}
|
||||||
|
else if (slider.getLocationX() + offset < button1.getWidth()) {
|
||||||
|
slider.setLocationX(button1.getWidth());
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
slider.setLocationX(Math.round(slider.getLocationX() + offset));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDirection(Direction direction) {
|
||||||
|
this.direction = direction;
|
||||||
|
if(direction == Direction.Horizontal) {
|
||||||
|
button1.setIcon("arrow_left_black");
|
||||||
|
button2.setIcon("arrow_right_black");
|
||||||
|
button1.setLocation(0.0f, 0.15f);
|
||||||
|
button2.setLocation(-1.0f, 0.15f);
|
||||||
|
slider.setLocation(-1.0f, 0.25f);
|
||||||
|
slider.setSize(-1.0f, 0.5f);
|
||||||
|
slider.setLocation(20, 0);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
button1.setIcon("arrow_up_black");
|
||||||
|
button2.setIcon("arrow_down_black");
|
||||||
|
button1.setLocation(0.15f, 0.0f);
|
||||||
|
button2.setLocation(0.15f, -1.0f);
|
||||||
|
slider.setLocation(0.25f, -1.0f);
|
||||||
|
slider.setSize(0.5f, -1.0f);
|
||||||
|
slider.setLocation(0, 20);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void moveSlider(float offset) {
|
||||||
|
if(direction == Direction.Vertical) {
|
||||||
|
moveSlider(Math.round(offset * getHeight()));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
moveSlider(Math.round(offset * getWidth()));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setBackgroundColor(Color color) {
|
||||||
|
super.setBackgroundColor(color);
|
||||||
|
button1.setBackgroundColor(new Color(0, 0, 0, 0.0f));
|
||||||
|
button2.setBackgroundColor(new Color(0, 0, 0, 0.0f));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setForegroundColor(Color color) {
|
||||||
|
super.setForegroundColor(color);
|
||||||
|
slider.setBackgroundColor(color);
|
||||||
|
slider.setAccentColor(color);
|
||||||
|
button1.setAccentColor(color);
|
||||||
|
button2.setAccentColor(color);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setAccentColor(Color color) {
|
||||||
|
super.setAccentColor(color);
|
||||||
|
button1.setForegroundColor(color);
|
||||||
|
button2.setForegroundColor(color);
|
||||||
|
slider.setForegroundColor(color);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setBorderColor(Color color) {
|
||||||
|
super.setBorderColor(color);
|
||||||
|
button1.setBorderColor(color);
|
||||||
|
button2.setBorderColor(color);
|
||||||
|
slider.setBorderColor(color);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setName(String name) {
|
||||||
|
super.setName(name);
|
||||||
|
slider.setName(name + " slider");
|
||||||
|
button1.setName(name + " button 1");
|
||||||
|
button2.setName(name + " button 2");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setSize() {
|
||||||
|
super.setSize();
|
||||||
|
if(direction == Direction.Vertical) {
|
||||||
|
button1.setSize(Math.round(0.7f * getWidth()), Math.round(0.7f * getWidth()));
|
||||||
|
button2.setSize(button1.getWidth(), button1.getHeight());
|
||||||
|
button2.setLocation(0, getHeight() - button2.getHeight());
|
||||||
|
slider.setSize(getWidth() / 2, 40);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
button1.setSize(Math.round(0.7f * getHeight()), Math.round(0.7f * getHeight()));
|
||||||
|
button2.setSize(button1.getWidth(), button1.getHeight());
|
||||||
|
button2.setLocation(getWidth() - button2.getWidth(), 0);
|
||||||
|
slider.setSize(40, getHeight() / 2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void paint(BufferedImage imageBuffer) {
|
||||||
|
Graphics2D g = imageBuffer.createGraphics();
|
||||||
|
g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
|
||||||
|
|
||||||
|
if(getHasBorder()) {
|
||||||
|
g.setColor(getBorderColor());
|
||||||
|
g.drawRect(0, 0, getWidth() - 1, getHeight() - 1);
|
||||||
|
}
|
||||||
|
g.setColor(getBackgroundColor());
|
||||||
|
if(direction == Direction.Vertical) {
|
||||||
|
int x1 = Math.round(0.15f * getWidth());
|
||||||
|
int y1 = button1.getHeight();
|
||||||
|
int x2 = Math.round(0.85f * getWidth()) - x1;
|
||||||
|
int y2 = getHeight() - button2.getHeight() - y1;
|
||||||
|
g.fillRoundRect(x1, y1, x2, y2, 10, 10);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
int x1 = button1.getWidth();
|
||||||
|
int y1 = Math.round(0.15f * getHeight());
|
||||||
|
int x2 = getWidth() - button2.getWidth() - x1;
|
||||||
|
int y2 = Math.round(0.85f * getHeight()) - y1;
|
||||||
|
g.fillRoundRect(x1, y1, x2, y2, 10, 10);
|
||||||
|
}
|
||||||
|
g.dispose();
|
||||||
|
}
|
||||||
|
|
||||||
|
private class SliderListener extends MouseAdapter {
|
||||||
|
private int start;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void mousePressed(MouseEvent mouseEvent) {
|
||||||
|
if(direction == Direction.Vertical) {
|
||||||
|
start = mouseEvent.getY();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
start = mouseEvent.getX();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void mouseDragged(MouseEvent mouseEvent) {
|
||||||
|
if(direction == Direction.Vertical) {
|
||||||
|
moveSlider(mouseEvent.getY() - start);
|
||||||
|
start = mouseEvent.getY();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
moveSlider(mouseEvent.getX() - start);
|
||||||
|
start = mouseEvent.getX();
|
||||||
|
}
|
||||||
|
slider.update();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,7 +1,6 @@
|
|||||||
package guiTree.Components;
|
package guiTree.Components;
|
||||||
|
|
||||||
import guiTree.Helper.Debugger;
|
import guiTree.Helper.Debugger;
|
||||||
import guiTree.Helper.Tag;
|
|
||||||
import guiTree.Visual;
|
import guiTree.Visual;
|
||||||
import guiTree.events.MouseAdapter;
|
import guiTree.events.MouseAdapter;
|
||||||
|
|
||||||
@@ -40,26 +39,25 @@ public class ToggleButton extends Visual {
|
|||||||
@Override
|
@Override
|
||||||
public void mousePressed(MouseEvent mouseEvent) {
|
public void mousePressed(MouseEvent mouseEvent) {
|
||||||
pressed = !pressed;
|
pressed = !pressed;
|
||||||
Debugger.log("Pressed: " + getName(), Tag.LISTENER);
|
Debugger.log("Pressed: " + getName(), Debugger.Tag.LISTENER);
|
||||||
Debugger.log("Calling repaint from pressed: " + getName(), Tag.PAINTING);
|
Debugger.log("Calling repaint from pressed: " + getName(), Debugger.Tag.PAINTING);
|
||||||
repaint();
|
update();
|
||||||
}
|
}
|
||||||
@Override
|
@Override
|
||||||
public void mouseEntered(MouseEvent mouseEvent) {
|
public void mouseEntered(MouseEvent mouseEvent) {
|
||||||
hovered = true;
|
hovered = true;
|
||||||
Debugger.log("Calling repaint from entered: " + getName(), Tag.PAINTING);
|
Debugger.log("Calling repaint from entered: " + getName(), Debugger.Tag.PAINTING);
|
||||||
repaint();
|
update();
|
||||||
}
|
}
|
||||||
@Override
|
@Override
|
||||||
public void mouseExited(MouseEvent mouseEvent) {
|
public void mouseExited(MouseEvent mouseEvent) {
|
||||||
hovered = false;
|
hovered = false;
|
||||||
Debugger.log("Calling repaint from exited: " + getName(), Tag.PAINTING);
|
Debugger.log("Calling repaint from exited: " + getName(), Debugger.Tag.PAINTING);
|
||||||
repaint();
|
update();
|
||||||
}
|
}
|
||||||
@Override
|
@Override
|
||||||
public void mouseMoved(MouseEvent mouseEvent) {
|
public void mouseMoved(MouseEvent mouseEvent) {
|
||||||
Debugger.log("Calling repaint from moved: " + getName(), Tag.PAINTING);
|
Debugger.log("Calling repaint from moved: " + getName(), Debugger.Tag.PAINTING);
|
||||||
repaint();
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,12 +1,11 @@
|
|||||||
package guiTree;
|
package guiTree;
|
||||||
|
|
||||||
import guiTree.Helper.Debugger;
|
import guiTree.Helper.Debugger;
|
||||||
import guiTree.Helper.Tag;
|
import guiTree.Helper.Timer;
|
||||||
import guiTree.events.KeyEventGetter;
|
import guiTree.events.KeyEventGetter;
|
||||||
import guiTree.events.MouseWheelGetter;
|
import guiTree.events.MouseWheelGetter;
|
||||||
|
|
||||||
import javax.swing.*;
|
import javax.swing.*;
|
||||||
import javax.swing.event.MouseInputListener;
|
|
||||||
import java.awt.*;
|
import java.awt.*;
|
||||||
import java.awt.event.*;
|
import java.awt.event.*;
|
||||||
import java.awt.image.BufferedImage;
|
import java.awt.image.BufferedImage;
|
||||||
@@ -40,7 +39,10 @@ public class CustomFrame extends JFrame {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void paint(Graphics g) {
|
public void paint(Graphics g) {
|
||||||
|
Timer timer = new Timer();
|
||||||
|
timer.startTiming();
|
||||||
g.drawImage(imageBuffer, 0, 0, this.getWidth(), this.getHeight(), null);
|
g.drawImage(imageBuffer, 0, 0, this.getWidth(), this.getHeight(), null);
|
||||||
|
Debugger.log("AWT time: " + timer.stopTiming(), Debugger.Tag.PAINTING);
|
||||||
}
|
}
|
||||||
|
|
||||||
private class MouseResizeListener implements MouseMotionListener, MouseListener {
|
private class MouseResizeListener implements MouseMotionListener, MouseListener {
|
||||||
|
|||||||
@@ -1,6 +1,20 @@
|
|||||||
package guiTree.Helper;
|
package guiTree.Helper;
|
||||||
|
|
||||||
public class Debugger {
|
public class Debugger {
|
||||||
|
public enum Tag {
|
||||||
|
LISTENER(false),
|
||||||
|
PAINTING(false),
|
||||||
|
FPS(false),
|
||||||
|
ANIMATIONS(true),
|
||||||
|
PARSING(false);
|
||||||
|
|
||||||
|
public boolean value;
|
||||||
|
|
||||||
|
Tag(boolean value) {
|
||||||
|
this.value = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private static Timer timer = new Timer();
|
private static Timer timer = new Timer();
|
||||||
|
|
||||||
public static void log(String message, Tag tag) {
|
public static void log(String message, Tag tag) {
|
||||||
|
|||||||
15
src/guiTree/Helper/Point2.java
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
package guiTree.Helper;
|
||||||
|
|
||||||
|
public class Point2<T> {
|
||||||
|
public T x;
|
||||||
|
public T y;
|
||||||
|
|
||||||
|
public Point2(T x, T y) {
|
||||||
|
this.x = x;
|
||||||
|
this.y = y;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean equals(Point2<T> point2) {
|
||||||
|
return x == point2.y && y == point2.y;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,11 +0,0 @@
|
|||||||
package guiTree.Helper;
|
|
||||||
|
|
||||||
public class Point2d {
|
|
||||||
public int x;
|
|
||||||
public int y;
|
|
||||||
|
|
||||||
public Point2d(int x,int y) {
|
|
||||||
this.x = x;
|
|
||||||
this.y = y;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
17
src/guiTree/Helper/Point3.java
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
package guiTree.Helper;
|
||||||
|
|
||||||
|
public class Point3<T> {
|
||||||
|
public T x;
|
||||||
|
public T y;
|
||||||
|
public T z;
|
||||||
|
|
||||||
|
public Point3(T x, T y, T z) {
|
||||||
|
this.x = x;
|
||||||
|
this.y = y;
|
||||||
|
this.z = z;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean equals(Point3<T> point3) {
|
||||||
|
return x == point3.x && y == point3.y && z == point3.z;
|
||||||
|
}
|
||||||
|
}
|
||||||
19
src/guiTree/Helper/Point4.java
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
package guiTree.Helper;
|
||||||
|
|
||||||
|
public class Point4<T> {
|
||||||
|
public T a;
|
||||||
|
public T b;
|
||||||
|
public T c;
|
||||||
|
public T d;
|
||||||
|
|
||||||
|
public Point4(T a, T b, T c, T d) {
|
||||||
|
this.a = a;
|
||||||
|
this.b = b;
|
||||||
|
this.c = c;
|
||||||
|
this.d = d;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean equals(Point4<T> point4) {
|
||||||
|
return a == point4.a && b == point4.b && c == point4.c && d == point4.d;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,12 +0,0 @@
|
|||||||
package guiTree.Helper;
|
|
||||||
|
|
||||||
public enum Tag {
|
|
||||||
LISTENER(true),
|
|
||||||
PAINTING(false);
|
|
||||||
|
|
||||||
public boolean value;
|
|
||||||
|
|
||||||
Tag(boolean value) {
|
|
||||||
this.value = value;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -12,4 +12,8 @@ public class Timer {
|
|||||||
now = System.currentTimeMillis();
|
now = System.currentTimeMillis();
|
||||||
return now - prev;
|
return now - prev;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public long getTime() {
|
||||||
|
return System.currentTimeMillis() - prev;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,9 +0,0 @@
|
|||||||
package guiTree.Listeners;
|
|
||||||
|
|
||||||
public enum Direction {
|
|
||||||
NORTH,
|
|
||||||
SOUTH,
|
|
||||||
WEST,
|
|
||||||
EAST,
|
|
||||||
ALL
|
|
||||||
}
|
|
||||||
@@ -1,186 +0,0 @@
|
|||||||
package guiTree.Listeners;
|
|
||||||
|
|
||||||
import guiTree.Helper.Point2d;
|
|
||||||
import guiTree.events.MouseAdapter;
|
|
||||||
|
|
||||||
import java.awt.*;
|
|
||||||
import java.awt.event.MouseEvent;
|
|
||||||
|
|
||||||
public class ResizeListener extends MouseAdapter {
|
|
||||||
public Point2d location;
|
|
||||||
public Point2d size;
|
|
||||||
public Cursor cursor;
|
|
||||||
private Boolean moving = false;
|
|
||||||
private Boolean resizing = false;
|
|
||||||
private Point2d initialLocation;
|
|
||||||
private int resizeDelta = 5;
|
|
||||||
private Boolean NORTH;
|
|
||||||
private Boolean SOUTH;
|
|
||||||
private Boolean WEST;
|
|
||||||
private Boolean EAST;
|
|
||||||
|
|
||||||
public ResizeListener(Direction[] directions, Point2d size, Point2d location) {
|
|
||||||
this.cursor = new Cursor(Cursor.DEFAULT_CURSOR);
|
|
||||||
this.size = size;
|
|
||||||
this.location = location;
|
|
||||||
NORTH = false;
|
|
||||||
SOUTH = false;
|
|
||||||
WEST = false;
|
|
||||||
EAST = false;
|
|
||||||
for(Direction dir:directions) {
|
|
||||||
if(dir == Direction.NORTH) {
|
|
||||||
NORTH = true;
|
|
||||||
}
|
|
||||||
if(dir == Direction.SOUTH) {
|
|
||||||
SOUTH = true;
|
|
||||||
}
|
|
||||||
if(dir == Direction.WEST) {
|
|
||||||
WEST = true;
|
|
||||||
}
|
|
||||||
if(dir == Direction.EAST) {
|
|
||||||
EAST = true;
|
|
||||||
}
|
|
||||||
if(dir == Direction.ALL) {
|
|
||||||
NORTH = true;
|
|
||||||
SOUTH = true;
|
|
||||||
WEST = true;
|
|
||||||
EAST = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setLocation(int x, int y) {
|
|
||||||
location.x = x;
|
|
||||||
location.y = y;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setSize(int x, int y) {
|
|
||||||
size.x = x;
|
|
||||||
size.y = y;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void mouseExited(MouseEvent mouseEvent) {
|
|
||||||
this.cursor = new Cursor(Cursor.DEFAULT_CURSOR);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void mouseDragged(MouseEvent mouseEvent) {
|
|
||||||
if(moving) {
|
|
||||||
setLocation(mouseEvent.getXOnScreen() - initialLocation.x, mouseEvent.getYOnScreen() - initialLocation.y);
|
|
||||||
}
|
|
||||||
else if(!resizing){
|
|
||||||
this.resizing = true;
|
|
||||||
this.resize(mouseEvent);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void mousePressed(MouseEvent mouseEvent) {
|
|
||||||
if(cursor.getType() != Cursor.DEFAULT_CURSOR){
|
|
||||||
this.moving = false;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
this.moving = true;
|
|
||||||
this.resizing = false;
|
|
||||||
}
|
|
||||||
initialLocation = new Point2d(mouseEvent.getX(), mouseEvent.getY());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void mouseReleased(MouseEvent mouseEvent) {
|
|
||||||
moving = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void mouseMoved(MouseEvent mouseEvent) {
|
|
||||||
if(mouseEvent.getX() < resizeDelta || mouseEvent.getX() > size.x - resizeDelta ||
|
|
||||||
mouseEvent.getY() < resizeDelta || mouseEvent.getY() > size.y - resizeDelta) {
|
|
||||||
this.setResizeCursor(mouseEvent);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
cursor = new Cursor(Cursor.DEFAULT_CURSOR);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void setResizeCursor(MouseEvent e){
|
|
||||||
if(e.getX() <= resizeDelta) {
|
|
||||||
if(e.getY() <= resizeDelta && (NORTH && WEST)) {
|
|
||||||
cursor = new Cursor(Cursor.NW_RESIZE_CURSOR);
|
|
||||||
}
|
|
||||||
else if(e.getY() >= size.y - resizeDelta && (SOUTH && WEST)){
|
|
||||||
cursor = new Cursor(Cursor.SW_RESIZE_CURSOR);
|
|
||||||
}
|
|
||||||
else if(WEST){
|
|
||||||
cursor = new Cursor(Cursor.W_RESIZE_CURSOR);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if(e.getX() >= size.x - resizeDelta){
|
|
||||||
if(e.getY() <= resizeDelta && (NORTH && EAST)){
|
|
||||||
cursor = new Cursor(Cursor.NE_RESIZE_CURSOR);
|
|
||||||
}
|
|
||||||
else if(e.getY() >= size.y - resizeDelta && (SOUTH && EAST)){
|
|
||||||
cursor = new Cursor(Cursor.SE_RESIZE_CURSOR);
|
|
||||||
}
|
|
||||||
else if(EAST){
|
|
||||||
cursor = new Cursor(Cursor.E_RESIZE_CURSOR);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
if(e.getY() <= resizeDelta && (NORTH)){
|
|
||||||
cursor = new Cursor(Cursor.N_RESIZE_CURSOR);
|
|
||||||
}
|
|
||||||
else if(e.getY() >= size.y - resizeDelta && (SOUTH)){
|
|
||||||
cursor = new Cursor(Cursor.S_RESIZE_CURSOR);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void resize(MouseEvent e) {
|
|
||||||
switch (cursor.getType()) {
|
|
||||||
case Cursor.N_RESIZE_CURSOR:
|
|
||||||
setSize(size.x, size.y + initialLocation.y - e.getYOnScreen());
|
|
||||||
setLocation(location.x, e.getYOnScreen());
|
|
||||||
initialLocation.y = e.getYOnScreen();
|
|
||||||
break;
|
|
||||||
case Cursor.NE_RESIZE_CURSOR:
|
|
||||||
setSize(size.x + e.getXOnScreen() - initialLocation.x, size.y + initialLocation.y - e.getYOnScreen());
|
|
||||||
setLocation(location.x, e.getYOnScreen());
|
|
||||||
initialLocation.x = e.getXOnScreen();
|
|
||||||
initialLocation.y = e.getYOnScreen();
|
|
||||||
break;
|
|
||||||
case Cursor.NW_RESIZE_CURSOR:
|
|
||||||
setSize(size.x + initialLocation.x - e.getXOnScreen(), size.y + initialLocation.y - e.getYOnScreen());
|
|
||||||
setLocation(e.getXOnScreen(), e.getYOnScreen());
|
|
||||||
initialLocation.x = e.getXOnScreen();
|
|
||||||
initialLocation.y = e.getYOnScreen();
|
|
||||||
break;
|
|
||||||
case Cursor.E_RESIZE_CURSOR:
|
|
||||||
setSize(size.x + e.getXOnScreen() - initialLocation.x, size.y);
|
|
||||||
initialLocation.x = e.getXOnScreen();
|
|
||||||
break;
|
|
||||||
case Cursor.W_RESIZE_CURSOR:
|
|
||||||
setSize(size.x + initialLocation.x - e.getXOnScreen(), size.y);
|
|
||||||
setLocation(e.getXOnScreen(), location.y);
|
|
||||||
initialLocation.x = e.getXOnScreen();
|
|
||||||
break;
|
|
||||||
case Cursor.SE_RESIZE_CURSOR:
|
|
||||||
setSize(size.x + e.getXOnScreen() - initialLocation.x, size.y + e.getYOnScreen() - initialLocation.y);
|
|
||||||
initialLocation.x = e.getXOnScreen();
|
|
||||||
initialLocation.y = e.getYOnScreen();
|
|
||||||
break;
|
|
||||||
case Cursor.S_RESIZE_CURSOR:
|
|
||||||
setSize(size.x, size.y + e.getYOnScreen() - initialLocation.y);
|
|
||||||
initialLocation.y = e.getYOnScreen();
|
|
||||||
break;
|
|
||||||
case Cursor.SW_RESIZE_CURSOR:
|
|
||||||
setSize(size.x + initialLocation.x - e.getXOnScreen(), size.y + e.getYOnScreen() - initialLocation.y);
|
|
||||||
setLocation(e.getXOnScreen(), location.y);
|
|
||||||
initialLocation.x = e.getXOnScreen();
|
|
||||||
initialLocation.y = e.getYOnScreen();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
this.resizing = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,7 +1,8 @@
|
|||||||
package guiTree;
|
package guiTree;
|
||||||
|
|
||||||
|
import guiTree.Animations.AnimationInterface;
|
||||||
import guiTree.Helper.Debugger;
|
import guiTree.Helper.Debugger;
|
||||||
import guiTree.Helper.Tag;
|
import guiTree.Helper.Point2;
|
||||||
import guiTree.Helper.Timer;
|
import guiTree.Helper.Timer;
|
||||||
import guiTree.events.KeyListener;
|
import guiTree.events.KeyListener;
|
||||||
import guiTree.events.MouseListener;
|
import guiTree.events.MouseListener;
|
||||||
@@ -21,6 +22,7 @@ public class Visual {
|
|||||||
|
|
||||||
public static final int SIZE_CHANGED = 1;
|
public static final int SIZE_CHANGED = 1;
|
||||||
public static final int LOCATION_CHANGED = 2;
|
public static final int LOCATION_CHANGED = 2;
|
||||||
|
private static List<AnimationInterface> animations = new ArrayList<>();
|
||||||
|
|
||||||
/*--------------------------------------------------------------------
|
/*--------------------------------------------------------------------
|
||||||
Tree Elements
|
Tree Elements
|
||||||
@@ -56,12 +58,11 @@ public class Visual {
|
|||||||
private Color fontColor;
|
private Color fontColor;
|
||||||
private Color borderColor;
|
private Color borderColor;
|
||||||
private Boolean active;
|
private Boolean active;
|
||||||
public Boolean dirty;
|
private Boolean dirty;
|
||||||
private static Visual entered;
|
private static Visual entered;
|
||||||
private Boolean focused;
|
private Boolean focused;
|
||||||
private Boolean pressed;
|
private Boolean pressed;
|
||||||
|
|
||||||
|
|
||||||
/*--------------------------------------------------------------------
|
/*--------------------------------------------------------------------
|
||||||
Constructors
|
Constructors
|
||||||
---------------------------------------------------------------------*/
|
---------------------------------------------------------------------*/
|
||||||
@@ -174,11 +175,11 @@ public class Visual {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void setLocationX(Integer x) {
|
public void setLocationX(Integer x) {
|
||||||
this.locationX = x;
|
setLocation(x, getLocationY());
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setLocationY(Integer y) {
|
public void setLocationY(Integer y) {
|
||||||
this.locationY = y;
|
setLocation(getLocationX(), y);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setFont(Font font) {
|
public void setFont(Font font) {
|
||||||
@@ -209,6 +210,7 @@ public class Visual {
|
|||||||
|
|
||||||
public void setHasBorder(Boolean hasBorder) {
|
public void setHasBorder(Boolean hasBorder) {
|
||||||
this.hasBorder = hasBorder;
|
this.hasBorder = hasBorder;
|
||||||
|
propagateDirt();
|
||||||
}
|
}
|
||||||
|
|
||||||
/*--------------------------------------------------------------------
|
/*--------------------------------------------------------------------
|
||||||
@@ -235,6 +237,10 @@ public class Visual {
|
|||||||
return this.locationY;
|
return this.locationY;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Point2<Integer> getLocation() {
|
||||||
|
return new Point2<>(locationX, locationY);
|
||||||
|
}
|
||||||
|
|
||||||
public Font getFont() {
|
public Font getFont() {
|
||||||
return font;
|
return font;
|
||||||
}
|
}
|
||||||
@@ -316,35 +322,52 @@ public class Visual {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void addAnimation(AnimationInterface animation) {
|
||||||
|
animations.add(animation);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void removeAnimation(AnimationInterface animation) {
|
||||||
|
animations.remove(animation);
|
||||||
|
}
|
||||||
|
|
||||||
public void repaint() {
|
public void repaint() {
|
||||||
|
Debugger.log("Called repaint from " + name, Debugger.Tag.PAINTING);
|
||||||
|
for(int i = 0; i < animations.size(); i++) {
|
||||||
|
if(animations.get(i).step()) {
|
||||||
|
animations.remove(animations.get(i));
|
||||||
|
i--;
|
||||||
|
}
|
||||||
|
}
|
||||||
if(dirty && active) {
|
if(dirty && active) {
|
||||||
this.revalidate();
|
revalidate();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void revalidate() {
|
private void revalidate() {
|
||||||
Timer timer = new Timer();
|
Timer timer = new Timer();
|
||||||
Debugger.log("Revalidating " + name, Tag.PAINTING);
|
Debugger.log("Revalidating " + name, Debugger.Tag.PAINTING);
|
||||||
timer.startTiming();
|
timer.startTiming();
|
||||||
|
|
||||||
clearImageBuffer();
|
clearImageBuffer();
|
||||||
this.paint(imageBuffer);
|
this.paint(imageBuffer);
|
||||||
for (Visual v : children) {
|
for (Visual v : children) {
|
||||||
v.repaint();
|
if(v.dirty && v.active) {
|
||||||
this.imageBuffer.getGraphics().drawImage(v.imageBuffer, v.locationX, v.locationY, null);
|
v.revalidate();
|
||||||
|
}
|
||||||
|
imageBuffer.getGraphics().drawImage(v.imageBuffer, v.locationX, v.locationY, null);
|
||||||
}
|
}
|
||||||
this.dirty = false;
|
dirty = false;
|
||||||
if(!(this instanceof Window)){
|
if(!(this instanceof Window)){
|
||||||
this.parent.revalidate();
|
|
||||||
long time = timer.stopTiming();
|
long time = timer.stopTiming();
|
||||||
Debugger.log("Finished Revalidating " + name + ": " + time, Tag.PAINTING);
|
Debugger.log("Finished Revalidating " + name + ": " + time, Debugger.Tag.PAINTING);
|
||||||
|
parent.revalidate();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Window window = (Window)this;
|
Window window = (Window)this;
|
||||||
window.setFrameImageBuffer(imageBuffer);
|
window.setFrameImageBuffer(imageBuffer);
|
||||||
|
|
||||||
long time = timer.stopTiming();
|
long time = timer.stopTiming();
|
||||||
Debugger.log("Finished Revalidating " + name + ": " + time, Tag.PAINTING);
|
Debugger.log("Finished Revalidating " + name + ": " + time, Debugger.Tag.PAINTING);
|
||||||
window.revalidate();
|
window.revalidate();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -387,17 +410,15 @@ public class Visual {
|
|||||||
for(MouseListener mouseListener: entered.mouseListeners) {
|
for(MouseListener mouseListener: entered.mouseListeners) {
|
||||||
mouseListener.mouseClicked(mouseEvent);
|
mouseListener.mouseClicked(mouseEvent);
|
||||||
}
|
}
|
||||||
entered.propagateDirt();
|
|
||||||
entered.focused = true;
|
entered.focused = true;
|
||||||
Debugger.log("Clicked " + entered.name, Tag.LISTENER);
|
Debugger.log("Clicked " + entered.name, Debugger.Tag.LISTENER);
|
||||||
}
|
}
|
||||||
|
|
||||||
void mouseReleased(MouseEvent mouseEvent) {
|
void mouseReleased(MouseEvent mouseEvent) {
|
||||||
for(MouseListener mouseListener: entered.mouseListeners) {
|
for(MouseListener mouseListener: entered.mouseListeners) {
|
||||||
mouseListener.mouseReleased(mouseEvent);
|
mouseListener.mouseReleased(mouseEvent);
|
||||||
}
|
}
|
||||||
Debugger.log("Released " + entered.name, Tag.LISTENER);
|
Debugger.log("Released " + entered.name, Debugger.Tag.LISTENER);
|
||||||
propagateDirt();
|
|
||||||
entered.pressed = false;
|
entered.pressed = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -405,9 +426,8 @@ public class Visual {
|
|||||||
for(MouseListener mouseListener: entered.mouseListeners) {
|
for(MouseListener mouseListener: entered.mouseListeners) {
|
||||||
mouseListener.mousePressed(mouseEvent);
|
mouseListener.mousePressed(mouseEvent);
|
||||||
}
|
}
|
||||||
entered.propagateDirt();
|
|
||||||
entered.pressed = true;
|
entered.pressed = true;
|
||||||
Debugger.log("Pressed " + entered.name, Tag.LISTENER);
|
Debugger.log("Pressed " + entered.name, Debugger.Tag.LISTENER);
|
||||||
}
|
}
|
||||||
|
|
||||||
void mouseEntered(MouseEvent mouseEvent) {
|
void mouseEntered(MouseEvent mouseEvent) {
|
||||||
@@ -429,8 +449,7 @@ public class Visual {
|
|||||||
for(MouseListener mouseListener: mouseListeners) {
|
for(MouseListener mouseListener: mouseListeners) {
|
||||||
mouseListener.mouseEntered(mouseEvent);
|
mouseListener.mouseEntered(mouseEvent);
|
||||||
}
|
}
|
||||||
Debugger.log("Entered " + entered.name, Tag.LISTENER);
|
Debugger.log("Entered " + entered.name, Debugger.Tag.LISTENER);
|
||||||
propagateDirt();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void mouseExited(MouseEvent mouseEvent) {
|
void mouseExited(MouseEvent mouseEvent) {
|
||||||
@@ -443,8 +462,7 @@ public class Visual {
|
|||||||
for (MouseListener mouseListener : entered.mouseListeners) {
|
for (MouseListener mouseListener : entered.mouseListeners) {
|
||||||
mouseListener.mouseExited(mouseEvent);
|
mouseListener.mouseExited(mouseEvent);
|
||||||
}
|
}
|
||||||
Debugger.log("Exited " + entered.name, Tag.LISTENER);
|
Debugger.log("Exited " + entered.name, Debugger.Tag.LISTENER);
|
||||||
entered.propagateDirt();
|
|
||||||
entered = null;
|
entered = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -452,8 +470,7 @@ public class Visual {
|
|||||||
for (MouseListener mouseListener : entered.mouseListeners) {
|
for (MouseListener mouseListener : entered.mouseListeners) {
|
||||||
mouseListener.mouseDragged(mouseEvent);
|
mouseListener.mouseDragged(mouseEvent);
|
||||||
}
|
}
|
||||||
entered.propagateDirt();
|
Debugger.log("Dragged " + entered.name, Debugger.Tag.LISTENER);
|
||||||
Debugger.log("Dragged " + entered.name, Tag.LISTENER);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void mouseMoved(MouseEvent mouseEvent) {
|
void mouseMoved(MouseEvent mouseEvent) {
|
||||||
@@ -467,7 +484,7 @@ public class Visual {
|
|||||||
for (MouseListener mouseListener : entered.mouseListeners) {
|
for (MouseListener mouseListener : entered.mouseListeners) {
|
||||||
mouseListener.mouseExited(mouseEvent);
|
mouseListener.mouseExited(mouseEvent);
|
||||||
}
|
}
|
||||||
Debugger.log("Exited " + entered.name, Tag.LISTENER);
|
Debugger.log("Exited " + entered.name, Debugger.Tag.LISTENER);
|
||||||
entered = this;
|
entered = this;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -491,8 +508,7 @@ public class Visual {
|
|||||||
mouseListener.mouseMoved(mouseEvent);
|
mouseListener.mouseMoved(mouseEvent);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Debugger.log("Moved " + this.name, Tag.LISTENER);
|
Debugger.log("Moved " + this.name, Debugger.Tag.LISTENER);
|
||||||
propagateDirt();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void mouseWheelMoved(MouseWheelEvent mouseWheelEvent) {
|
void mouseWheelMoved(MouseWheelEvent mouseWheelEvent) {
|
||||||
@@ -501,7 +517,7 @@ public class Visual {
|
|||||||
mouseWheelListener.mouseWheelMoved(mouseWheelEvent);
|
mouseWheelListener.mouseWheelMoved(mouseWheelEvent);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Debugger.log("Wheel Moved " + this.name, Tag.LISTENER);
|
Debugger.log("Wheel Moved " + this.name, Debugger.Tag.LISTENER);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*--------------------------------------------------------------------
|
/*--------------------------------------------------------------------
|
||||||
@@ -524,9 +540,7 @@ public class Visual {
|
|||||||
|
|
||||||
g.setComposite(AlphaComposite.Clear);
|
g.setComposite(AlphaComposite.Clear);
|
||||||
g.fillRect(0, 0, getWidth(), getHeight());
|
g.fillRect(0, 0, getWidth(), getHeight());
|
||||||
g.setComposite(AlphaComposite.Src);
|
|
||||||
|
|
||||||
g.fillRect(0, 0, width, height);
|
|
||||||
g.dispose();
|
g.dispose();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -2,10 +2,13 @@ package guiTree;
|
|||||||
|
|
||||||
import guiTree.Components.TitleBar;
|
import guiTree.Components.TitleBar;
|
||||||
import guiTree.Helper.Debugger;
|
import guiTree.Helper.Debugger;
|
||||||
import guiTree.Helper.Point2d;
|
import guiTree.Helper.Point2;
|
||||||
import guiTree.Helper.Tag;
|
import guiTree.Helper.Timer;
|
||||||
|
import guiTree.events.KeyListener;
|
||||||
import guiTree.events.MouseAdapter;
|
import guiTree.events.MouseAdapter;
|
||||||
import guiTree.Components.Panel;
|
import guiTree.Components.Panel;
|
||||||
|
import guiTree.events.MouseListener;
|
||||||
|
import guiTree.events.MouseWheelListener;
|
||||||
|
|
||||||
import javax.imageio.ImageIO;
|
import javax.imageio.ImageIO;
|
||||||
import java.awt.*;
|
import java.awt.*;
|
||||||
@@ -16,13 +19,14 @@ import java.awt.image.BufferedImage;
|
|||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|
||||||
public class Window extends Visual {
|
public class Window extends Visual implements Runnable{
|
||||||
public CustomFrame frame;
|
public CustomFrame frame;
|
||||||
private TitleBar titleBar;
|
private TitleBar titleBar;
|
||||||
private Panel mainPanel;
|
private Panel mainPanel;
|
||||||
private Panel contentPanel;
|
private Panel contentPanel;
|
||||||
private Point2d oldSize;
|
private Point2<Integer> oldSize;
|
||||||
private Point2d oldLocation;
|
private Boolean close;
|
||||||
|
private Point2<Integer> oldLocation;
|
||||||
|
|
||||||
public Window() {
|
public Window() {
|
||||||
this("");
|
this("");
|
||||||
@@ -50,6 +54,7 @@ public class Window extends Visual {
|
|||||||
bar.setName("TitleBar");
|
bar.setName("TitleBar");
|
||||||
bar.setBackgroundColor(Color.GRAY);
|
bar.setBackgroundColor(Color.GRAY);
|
||||||
this.setTitleBar(bar);
|
this.setTitleBar(bar);
|
||||||
|
close = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -64,7 +69,7 @@ public class Window extends Visual {
|
|||||||
else {
|
else {
|
||||||
contentPanel.setSize(width, height);
|
contentPanel.setSize(width, height);
|
||||||
}
|
}
|
||||||
Debugger.log("Calling repaint from window set size: ", Tag.PAINTING);
|
Debugger.log("Calling repaint from window set size: ", Debugger.Tag.PAINTING);
|
||||||
repaint();
|
repaint();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -74,7 +79,7 @@ public class Window extends Visual {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void revalidate() {
|
public void revalidate() {
|
||||||
Debugger.log("Finished painting", Tag.PAINTING);
|
Debugger.log("Finished painting", Debugger.Tag.PAINTING);
|
||||||
this.frame.repaint();
|
this.frame.repaint();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -192,6 +197,7 @@ public class Window extends Visual {
|
|||||||
switch(notify) {
|
switch(notify) {
|
||||||
case TitleBar.CLOSE: {
|
case TitleBar.CLOSE: {
|
||||||
dispose();
|
dispose();
|
||||||
|
close = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case TitleBar.MINIMIZE: {
|
case TitleBar.MINIMIZE: {
|
||||||
@@ -200,8 +206,8 @@ public class Window extends Visual {
|
|||||||
}
|
}
|
||||||
case TitleBar.MAXIMIZE: {
|
case TitleBar.MAXIMIZE: {
|
||||||
Rectangle screenBounds = frame.getGraphicsConfiguration().getBounds();
|
Rectangle screenBounds = frame.getGraphicsConfiguration().getBounds();
|
||||||
oldSize = new Point2d(getWidth(), getHeight());
|
oldSize = new Point2<>(getWidth(), getHeight());
|
||||||
oldLocation = new Point2d(frame.getX(), frame.getY());
|
oldLocation = new Point2<>(frame.getX(), frame.getY());
|
||||||
this.setSize(screenBounds.width, screenBounds.height);
|
this.setSize(screenBounds.width, screenBounds.height);
|
||||||
this.setLocation(screenBounds.x, screenBounds.y);
|
this.setLocation(screenBounds.x, screenBounds.y);
|
||||||
setState(Frame.MAXIMIZED_BOTH);
|
setState(Frame.MAXIMIZED_BOTH);
|
||||||
@@ -216,8 +222,44 @@ public class Window extends Visual {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void addMouseListener(MouseListener mouseListener) {
|
||||||
|
contentPanel.addMouseListener(mouseListener);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void addKeyListener(KeyListener keyListener) {
|
||||||
|
contentPanel.addKeyListener(keyListener);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void addMouseWheelListener(MouseWheelListener mouseWheelListener) {
|
||||||
|
contentPanel.addMouseWheelListener(mouseWheelListener);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void addVisual(Visual v) {
|
public void addVisual(Visual v) {
|
||||||
contentPanel.addVisual(v);
|
contentPanel.addVisual(v);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
Timer frameTimer = new Timer();
|
||||||
|
Timer secondTimer = new Timer();
|
||||||
|
int frames = 0;
|
||||||
|
frameTimer.startTiming();
|
||||||
|
secondTimer.startTiming();
|
||||||
|
while(!close) {
|
||||||
|
if(frameTimer.getTime() >= 1000/60) {
|
||||||
|
repaint();
|
||||||
|
frameTimer.startTiming();
|
||||||
|
frames ++;
|
||||||
|
}
|
||||||
|
if(secondTimer.getTime() >= 1000) {
|
||||||
|
Debugger.log("Frames per second: " + frames, Debugger.Tag.FPS);
|
||||||
|
frames = 0;
|
||||||
|
secondTimer.startTiming();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package parser;
|
|||||||
|
|
||||||
import com.sun.jdi.InvalidTypeException;
|
import com.sun.jdi.InvalidTypeException;
|
||||||
import converters.Converter;
|
import converters.Converter;
|
||||||
|
import guiTree.Helper.Debugger;
|
||||||
import guiTree.Visual;
|
import guiTree.Visual;
|
||||||
import guiTree.Window;
|
import guiTree.Window;
|
||||||
import org.w3c.dom.*;
|
import org.w3c.dom.*;
|
||||||
@@ -24,6 +25,7 @@ public class XAMLParser {
|
|||||||
String methodName = "set";
|
String methodName = "set";
|
||||||
methodName = methodName.concat(attribute.getNodeName());
|
methodName = methodName.concat(attribute.getNodeName());
|
||||||
List<Object> parameterList = convertStringToPrimitives(object, attribute.getNodeValue(), methodName);
|
List<Object> parameterList = convertStringToPrimitives(object, attribute.getNodeValue(), methodName);
|
||||||
|
Debugger.log("Calling " + methodName + " " + attribute.getNodeValue(), Debugger.Tag.PARSING);
|
||||||
if(parameterList == null) {
|
if(parameterList == null) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -54,6 +56,7 @@ public class XAMLParser {
|
|||||||
|
|
||||||
public static Window parse(String filepath) throws Exception {
|
public static Window parse(String filepath) throws Exception {
|
||||||
Object rootObject;
|
Object rootObject;
|
||||||
|
Debugger.log("Started", Debugger.Tag.PARSING);
|
||||||
FileInputStream fileIS = new FileInputStream(new File("resources/" + filepath));
|
FileInputStream fileIS = new FileInputStream(new File("resources/" + filepath));
|
||||||
DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
|
DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
|
||||||
DocumentBuilder builder = builderFactory.newDocumentBuilder();
|
DocumentBuilder builder = builderFactory.newDocumentBuilder();
|
||||||
@@ -62,11 +65,15 @@ public class XAMLParser {
|
|||||||
xmlDocument.normalize();
|
xmlDocument.normalize();
|
||||||
|
|
||||||
Element rootNode = xmlDocument.getDocumentElement();
|
Element rootNode = xmlDocument.getDocumentElement();
|
||||||
|
Debugger.log("Root element:" + rootNode.toString(), Debugger.Tag.PARSING);
|
||||||
|
|
||||||
rootObject = parseNode(rootNode);
|
rootObject = parseNode(rootNode);
|
||||||
|
|
||||||
if(rootObject instanceof Window) {
|
if(rootObject instanceof Window) {
|
||||||
((Window) rootObject).repaint();
|
((Window) rootObject).repaint();
|
||||||
|
Thread windowThread = new Thread((Window) rootObject);
|
||||||
|
windowThread.setName("Painting Thread");
|
||||||
|
windowThread.start();
|
||||||
return (Window) rootObject;
|
return (Window) rootObject;
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
@@ -76,13 +83,15 @@ public class XAMLParser {
|
|||||||
List<Object> primitiveAttributes = new ArrayList<>();
|
List<Object> primitiveAttributes = new ArrayList<>();
|
||||||
List<String> values = new ArrayList<>();
|
List<String> values = new ArrayList<>();
|
||||||
|
|
||||||
// value = value.replaceAll(" ", "");
|
|
||||||
while (value.contains(",")) {
|
while (value.contains(",")) {
|
||||||
values.add(value.substring(0, value.indexOf(',')));
|
values.add(value.substring(0, value.indexOf(',')));
|
||||||
value = value.substring(value.indexOf(',') + 1);
|
value = value.substring(value.indexOf(',') + 1);
|
||||||
}
|
}
|
||||||
values.add(value);
|
values.add(value);
|
||||||
List<Method> methods = getMethodsFromName(object, methodName);
|
List<Method> methods = getMethodsFromName(object, methodName);
|
||||||
|
if(methods.size() == 0) {
|
||||||
|
System.out.println("Could not find method " + methodName);
|
||||||
|
}
|
||||||
for(Method method: methods){
|
for(Method method: methods){
|
||||||
Class<?>[] types = method.getParameterTypes();
|
Class<?>[] types = method.getParameterTypes();
|
||||||
for(int i = 0; i < types.length; i++){
|
for(int i = 0; i < types.length; i++){
|
||||||
@@ -97,6 +106,7 @@ public class XAMLParser {
|
|||||||
return primitiveAttributes;
|
return primitiveAttributes;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
System.err.println("Could not find method " + methodName + " with parameters " + values);
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -108,7 +118,9 @@ public class XAMLParser {
|
|||||||
catch (ClassNotFoundException e) {
|
catch (ClassNotFoundException e) {
|
||||||
parentClass = Class.forName(packageGuiTree.concat(parentNode.getNodeName()));
|
parentClass = Class.forName(packageGuiTree.concat(parentNode.getNodeName()));
|
||||||
}
|
}
|
||||||
|
Debugger.log("Parsing " + parentClass, Debugger.Tag.PARSING);
|
||||||
Object parentObject = parentClass.getDeclaredConstructor().newInstance();
|
Object parentObject = parentClass.getDeclaredConstructor().newInstance();
|
||||||
|
Debugger.log("Constructor called succesfuly for " + parentObject, Debugger.Tag.PARSING);
|
||||||
|
|
||||||
setAttributes(parentObject, parentNode.getAttributes());
|
setAttributes(parentObject, parentNode.getAttributes());
|
||||||
|
|
||||||
@@ -122,6 +134,7 @@ public class XAMLParser {
|
|||||||
Object childObject = parseNode(childNode);
|
Object childObject = parseNode(childNode);
|
||||||
|
|
||||||
if(parentObject instanceof Visual && childObject instanceof Visual) {
|
if(parentObject instanceof Visual && childObject instanceof Visual) {
|
||||||
|
Debugger.log("Adding " + childObject + " to " + parentObject, Debugger.Tag.PARSING);
|
||||||
addVisual((Visual) parentObject, (Visual) childObject);
|
addVisual((Visual) parentObject, (Visual) childObject);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||