4 import java
.awt
.Graphics2D
;
11 public class CanvasSmartObject
extends CanvasObject
implements Cloneable
{
13 Canvas embeddedCanvas
;
16 public CanvasSmartObject(Point position
)
20 scaleFactor
= new Double
[2];
21 scaleFactor
[0] = new Double(getWidthScale());
22 scaleFactor
[1] = new Double(getHeightScale());
24 embeddedCanvas
= new Canvas(scaleFactor
);
27 public void setScaleFactor(Double
[] sFactor
)
29 scaleFactor
= sFactor
;
33 public void setCanvas(Canvas canvas
)
35 super.setCanvas(canvas
);
38 public void addElement(CanvasObject element
)
40 embeddedCanvas
.addElement(element
);
43 public boolean removeElement(CanvasObject element
)
45 return embeddedCanvas
.removeElement(element
);
48 public Canvas
getEmbeddedCanvas()
50 return embeddedCanvas
;
53 public void setEmbeddedCanvas(Canvas embedded
)
55 embeddedCanvas
= embedded
;
59 private Point
inversePoint(Point p
)
66 public void draw(Graphics2D engine
)
68 Point position
= getPosition();
69 Point newOrigin
= new Point((int)(position
.x
/getWidthScale()), (int)(position
.y
/getHeightScale()));
70 Canvas
.changeOrigin(engine
, newOrigin
);
71 // setPosition(newOrigin);
72 embeddedCanvas
.drawAll(engine
);
73 // setPosition(position);
74 Canvas
.changeOrigin(engine
, inversePoint(newOrigin
));
77 public CanvasObject
containsObject(Point position
) {
79 Point op
= getEffectivePosition();
80 Point rp
= new Point(p
.x
- op
.x
, p
.y
- op
.y
);
82 /* rp : Relative position */
83 for(CanvasObject o
: embeddedCanvas
.getElementsArray())
90 public boolean contains(Point position
)
92 if(containsObject(position
) == null)
100 return embeddedCanvas
.getSize().width
;
105 return embeddedCanvas
.getSize().height
;
109 public Object
clone() throws CloneNotSupportedException
111 CanvasSmartObject cso
= (CanvasSmartObject
) super.clone();
112 Double
[] nScaleFactor
= new Double
[2];
113 nScaleFactor
[0] = new Double(scaleFactor
[0]);
114 nScaleFactor
[1] = new Double(scaleFactor
[1]);
115 cso
.setScaleFactor(nScaleFactor
);
116 cso
.setEmbeddedCanvas((Canvas
)cso
.getEmbeddedCanvas().clone());
117 cso
.getEmbeddedCanvas().setScaleFactor(nScaleFactor
);
122 public void setWidthScale(double factor
)
124 super.setWidthScale(factor
);
125 scaleFactor
[0] = new Double(getWidthScale());
129 public void setHeightScale(double factor
)
131 super.setHeightScale(factor
);
132 scaleFactor
[1] = new Double(getHeightScale());