Добавлен графический объект иконки файла
This commit is contained in:
parent
2d216c3109
commit
8c896522a4
106
src/tse/lr5/FileIconPaintable.java
Normal file
106
src/tse/lr5/FileIconPaintable.java
Normal file
@ -0,0 +1,106 @@
|
|||||||
|
package tse.lr5;
|
||||||
|
|
||||||
|
import java.awt.Color;
|
||||||
|
import java.awt.Graphics;
|
||||||
|
import java.awt.Polygon;
|
||||||
|
import java.awt.Rectangle;
|
||||||
|
import tse.Util;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author aNNiMON
|
||||||
|
*/
|
||||||
|
public class FileIconPaintable extends Thread implements PaintableObject {
|
||||||
|
|
||||||
|
private final Polygon polygon, fill;
|
||||||
|
private final Color color, darkColor;
|
||||||
|
|
||||||
|
private double x, y;
|
||||||
|
private double radius, currentAngle, rotAngle;
|
||||||
|
|
||||||
|
public FileIconPaintable(double scale, Color color, boolean rotateRight) {
|
||||||
|
this.color = color;
|
||||||
|
this.darkColor = color.darker();
|
||||||
|
|
||||||
|
polygon = new Polygon();
|
||||||
|
polygon.addPoint(0, 0);
|
||||||
|
polygon.addPoint((int) (50 * scale), 0);
|
||||||
|
polygon.addPoint((int) (50 * scale), (int) (23 * scale));
|
||||||
|
polygon.addPoint((int) (32 * scale), (int) (36 * scale));
|
||||||
|
polygon.addPoint(0, (int) (36 * scale));
|
||||||
|
|
||||||
|
fill = new Polygon();
|
||||||
|
fill.addPoint((int) (50 * scale), (int) (23 * scale));
|
||||||
|
fill.addPoint((int) (32 * scale), (int) (36 * scale));
|
||||||
|
fill.addPoint((int) (36 * scale), (int) (23 * scale));
|
||||||
|
fill.addPoint((int) (41 * scale), (int) (25 * scale));
|
||||||
|
|
||||||
|
radius = 1;
|
||||||
|
currentAngle = 0;
|
||||||
|
rotAngle = rotateRight ? 0.1 : -0.1;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Rectangle getBounds() {
|
||||||
|
Rectangle rect = polygon.getBounds();
|
||||||
|
rect.setLocation((int)x, (int)y);
|
||||||
|
return rect;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
while (true) {
|
||||||
|
radius += 0.01;
|
||||||
|
if (currentAngle > Math.PI * 2) currentAngle = 0;
|
||||||
|
currentAngle += rotAngle;
|
||||||
|
|
||||||
|
move(Math.cos(currentAngle) * radius, Math.sin(currentAngle) * radius);
|
||||||
|
try {
|
||||||
|
Thread.sleep(80);
|
||||||
|
} catch (InterruptedException ex) {
|
||||||
|
Util.handleException(ex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public synchronized void move(double dx, double dy) {
|
||||||
|
x += dx;
|
||||||
|
y += dy;
|
||||||
|
|
||||||
|
Rectangle r1 = getBounds();
|
||||||
|
if (x < 0) x = 2;
|
||||||
|
else if ( (x + r1.width) >= FileIconsWindow.WIDTH) {
|
||||||
|
x = FileIconsWindow.WIDTH - r1.width - 2;
|
||||||
|
}
|
||||||
|
if (y < 0) y = 2;
|
||||||
|
else if ( (y + r1.height) >= FileIconsWindow.HEIGHT) {
|
||||||
|
y = FileIconsWindow.HEIGHT - r1.height - 2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public synchronized void setLocation(int x, int y) {
|
||||||
|
this.x = x;
|
||||||
|
this.y = y;
|
||||||
|
}
|
||||||
|
|
||||||
|
public synchronized void changeRotateDirection() {
|
||||||
|
rotAngle = -rotAngle;
|
||||||
|
currentAngle += rotAngle * 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
public synchronized boolean isCollide(FileIconPaintable p) {
|
||||||
|
return (getBounds().intersects(p.getBounds()));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void draw(Graphics g) {
|
||||||
|
g.translate((int)x, (int)y);
|
||||||
|
|
||||||
|
g.setColor(color);
|
||||||
|
g.drawPolygon(polygon);
|
||||||
|
g.setColor(darkColor);
|
||||||
|
g.fillPolygon(fill);
|
||||||
|
|
||||||
|
g.translate(-(int)x, -(int)y);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user