// JDraw - DrawCanvas class
// Written by Jim Calciano, Melanie Lear, and PJ Waskiewicz
// November 18, 1998
// Class that creates the canvas on which we draw our objects
// This class will paint all our objects on the canvas
import java.awt.*;
import java.awt.event.*;
import java.util.Vector;
import java.util.Enumeration;
public class DrawCanvas extends Canvas implements MouseMotionListener,MouseListener,KeyListener{
private Point initPoint;
private Point endPoint, previous;
private int shape;
public Vector objects;
private int length;
private Color color = Color.blue;
private Graphics graphics;
private int bigx,smallx,smally,bigy;
public DrawCanvas(){
addMouseMotionListener(this);
addMouseListener(this);
addKeyListener(this);
objects = new Vector(0); //Initialize vector of objects
length = 0;
setVisible(true);
}
public void keyPressed(KeyEvent e){
if(e.getKeyCode()==KeyEvent.VK_DELETE){
if(objects.size() > 0){
if((objects.elementAt(objects.size()-1).toString()).regionMatches(0,"S",0,1)){
objects.removeElementAt(objects.size()-1);
repaint();
}
}
}
}
public void keyReleased(KeyEvent e){}
public void keyTyped(KeyEvent e){}
public void giveMeFocus(){
requestFocus();
}
public void mouseClicked(MouseEvent e){
}
public void mouseEntered(MouseEvent e){
}
public void mouseExited(MouseEvent e){
}
public void mousePressed(MouseEvent e){
// Check if selected objects were clicked on
if(shape==6){
initPoint=new Point(e.getX(),e.getY());
previous=new Point(e.getX(),e.getY());
for(int i=0; i<objects.size(); i++)
((DrawObject)(objects.elementAt(i))).intersects(e.getX(),e.getY());
}
else{
initPoint = new Point(e.getX(), e.getY());
previous = new Point(e.getX(), e.getY());
}
}
public void thisShape(int shape){
this.shape = shape;
}
public void mouseReleased(MouseEvent e){
endPoint = new Point(e.getX(), e.getY());
//Determine the drawn shape and create a new object of that type.
//Then add it to the vector and repaint.
switch(shape){
case 1:
Line line = new Line(initPoint.x, initPoint.y, endPoint.x, endPoint.y, color);
objects.addElement(line);
length++;
repaint();
break;
case 2:
Rect rect = new Rect(initPoint.x, initPoint.y, endPoint.x, endPoint.y, color);
objects.addElement(rect);
length++;
repaint();
break;
case 3:
Oval oval = new Oval(initPoint.x, initPoint.y, endPoint.x, endPoint.y, color);
objects.addElement(oval);
length++;
repaint();
break;
case 4:
FRect frect = new FRect(initPoint.x, initPoint.y, endPoint.x, endPoint.y, color);
objects.addElement(frect);
length++;
repaint();
break;
case 5:
FOval foval = new FOval(initPoint.x, initPoint.y, endPoint.x, endPoint.y, color);
objects.addElement(foval);
length++;
repaint();
break;
case 6:
for(int i = (objects.size()-1); i >= 0; i--){
if(((DrawObject)(objects.elementAt(i))).intersects(endPoint.x,endPoint.y)){
Point p1;
Point p2;
Color c;
p1=((DrawObject)(objects.elementAt(i))).firstSelPoint();
p2=((DrawObject)(objects.elementAt(i))).secondSelPoint();
c=((DrawObject)(objects.elementAt(i))).selColor();
SLine sl=new SLine(p1.x,p1.y,p2.x,p2.y,c);
SRect sr=new SRect(p1.x,p1.y,p2.x,p2.y,c);
SFRect sfr=new SFRect(p1.x,p1.y,p2.x,p2.y,c);
SOval so=new SOval(p1.x,p1.y,p2.x,p2.y,c);
SFOval sfo=new SFOval(p1.x,p1.y,p2.x,p2.y,c);
if((objects.elementAt(i).toString()).regionMatches(0,"Line",0,4)){
objects.removeElementAt(i);
objects.insertElementAt(sl,objects.size());
for(int j=0; j<objects.size(); j++)
((DrawObject)(objects.elementAt(j))).youAreSelected(false);
sl.youAreSelected(true);
}
else if((objects.elementAt(i).toString()).regionMatches(0,"Rect",0,4)){
objects.removeElementAt(i);
objects.insertElementAt(sr,objects.size());
for(int j=0; j<objects.size(); j++)
((DrawObject)(objects.elementAt(j))).youAreSelected(false);
sr.youAreSelected(true);
}
else if((objects.elementAt(i).toString()).regionMatches(0,"FRect",0,5)){
objects.removeElementAt(i);
objects.insertElementAt(sfr,objects.size());
for(int j=0; j<objects.size(); j++)
((DrawObject)(objects.elementAt(j))).youAreSelected(false);
sfr.youAreSelected(true);
}
else if((objects.elementAt(i).toString()).regionMatches(0,"Oval",0,4)){
objects.removeElementAt(i);
objects.insertElementAt(so,objects.size());
for(int j=0; j<objects.size(); j++)
((DrawObject)(objects.elementAt(j))).youAreSelected(false);
so.youAreSelected(true);
}
else if((objects.elementAt(i).toString()).regionMatches(0,"FOval",0,5)){
objects.removeElementAt(i);
objects.insertElementAt(sfo,objects.size());
for(int j=0; j<objects.size(); j++)
((DrawObject)(objects.elementAt(j))).youAreSelected(false);
sfo.youAreSelected(true);
}
else if((objects.elementAt(i).toString()).regionMatches(0,"SLine",0,5)){
objects.removeElementAt(i);
objects.insertElementAt(sl,objects.size());
for(int j=0; j<objects.size(); j++)
((DrawObject)(objects.elementAt(j))).youAreSelected(false);
sl.youAreSelected(true);
}
else if((objects.elementAt(i).toString()).regionMatches(0,"SRect",0,5)){
objects.removeElementAt(i);
objects.insertElementAt(sr,objects.size());
for(int j=0; j<objects.size(); j++)
((DrawObject)(objects.elementAt(j))).youAreSelected(false);
sr.youAreSelected(true);
}
else if((objects.elementAt(i).toString()).regionMatches(0,"SFRect",0,6)){
objects.removeElementAt(i);
objects.insertElementAt(sfr,objects.size());
for(int j=0; j<objects.size(); j++)
((DrawObject)(objects.elementAt(j))).youAreSelected(false);
sfr.youAreSelected(true);
}
else if((objects.elementAt(i).toString()).regionMatches(0,"SOval",0,5)){
objects.removeElementAt(i);
objects.insertElementAt(so,objects.size());
for(int j=0; j<objects.size(); j++)
((DrawObject)(objects.elementAt(j))).youAreSelected(false);
so.youAreSelected(true);
}
else if((objects.elementAt(i).toString()).regionMatches(0,"SFOval",0,6)){
objects.removeElementAt(i);
objects.insertElementAt(sfo,objects.size());
for(int j=0; j<objects.size(); j++)
((DrawObject)(objects.elementAt(j))).youAreSelected(false);
sfo.youAreSelected(true);
}
repaint();
break;
}
else{
for(int j=0; j<objects.size(); j++)
((DrawObject)(objects.elementAt(j))).youAreSelected(false);
for(int j=0; j<objects.size(); j++){
if((objects.elementAt(j).toString()).regionMatches(0,"SLine",0,5)){
Point p1=((SLine)(objects.elementAt(j))).firstSelPoint();
Point p2=((SLine)(objects.elementAt(j))).secondSelPoint();
Color c=((SLine)(objects.elementAt(j))).selColor();
objects.setElementAt(new Line(p1.x,p1.y,p2.x,p2.y,c),j);
}
else if((objects.elementAt(j).toString()).regionMatches(0,"SRect",0,5)){
Point p1=((SRect)(objects.elementAt(j))).firstSelPoint();
Point p2=((SRect)(objects.elementAt(j))).secondSelPoint();
Color c=((SRect)(objects.elementAt(j))).selColor();
objects.setElementAt(new Rect(p1.x,p1.y,p2.x,p2.y,c,null),j);
}
else if((objects.elementAt(j).toString()).regionMatches(0,"SFRect",0,6)){
Point p1=((SFRect)(objects.elementAt(j))).firstSelPoint();
Point p2=((SFRect)(objects.elementAt(j))).secondSelPoint();
Color c=((SFRect)(objects.elementAt(j))).selColor();
objects.setElementAt(new FRect(p1.x,p1.y,p2.x,p2.y,c,null),j);
}
else if((objects.elementAt(j).toString()).regionMatches(0,"SOval",0,5)){
Point p1=((SOval)(objects.elementAt(j))).firstSelPoint();
Point p2=((SOval)(objects.elementAt(j))).secondSelPoint();
Color c=((SOval)(objects.elementAt(j))).selColor();
objects.setElementAt(new Oval(p1.x,p1.y,p2.x,p2.y,c,null),j);
}
else if((objects.elementAt(j).toString()).regionMatches(0,"SFOval",0,6)){
Point p1=((SFOval)(objects.elementAt(j))).firstSelPoint();
Point p2=((SFOval)(objects.elementAt(j))).secondSelPoint();
Color c=((SFOval)(objects.elementAt(j))).selColor();
objects.setElementAt(new FOval(p1.x,p1.y,p2.x,p2.y,c,null),j);
}
}
}
}
for(int i=0; i<objects.size(); i++){
if(((DrawObject)(objects.elementAt(i))).areYouSelected()){
for(int j=0; j<i; j++){
if((objects.elementAt(j).toString()).regionMatches(0,"SLine",0,5)){
Point p1=((SLine)(objects.elementAt(j))).firstSelPoint();
Point p2=((SLine)(objects.elementAt(j))).secondSelPoint();
Color c=((SLine)(objects.elementAt(j))).selColor();
objects.setElementAt(new Line(p1.x,p1.y,p2.x,p2.y,c),j);
}
else if((objects.elementAt(j).toString()).regionMatches(0,"SRect",0,5)){
Point p1=((SRect)(objects.elementAt(j))).firstSelPoint();
Point p2=((SRect)(objects.elementAt(j))).secondSelPoint();
Color c=((SRect)(objects.elementAt(j))).selColor();
objects.setElementAt(new Rect(p1.x,p1.y,p2.x,p2.y,c,null),j);
}
else if((objects.elementAt(j).toString()).regionMatches(0,"SFRect",0,6)){
Point p1=((SFRect)(objects.elementAt(j))).firstSelPoint();
Point p2=((SFRect)(objects.elementAt(j))).secondSelPoint();
Color c=((SFRect)(objects.elementAt(j))).selColor();
objects.setElementAt(new FRect(p1.x,p1.y,p2.x,p2.y,c,null),j);
}
else if((objects.elementAt(j).toString()).regionMatches(0,"SOval",0,5)){
Point p1=((SOval)(objects.elementAt(j))).firstSelPoint();
Point p2=((SOval)(objects.elementAt(j))).secondSelPoint();
Color c=((SOval)(objects.elementAt(j))).selColor();
objects.setElementAt(new Oval(p1.x,p1.y,p2.x,p2.y,c,null),j);
}
else if((objects.elementAt(j).toString()).regionMatches(0,"SFOval",0,6)){
Point p1=((SFOval)(objects.elementAt(j))).firstSelPoint();
Point p2=((SFOval)(objects.elementAt(j))).secondSelPoint();
Color c=((SFOval)(objects.elementAt(j))).selColor();
objects.setElementAt(new FOval(p1.x,p1.y,p2.x,p2.y,c,null),j);
}
}
}
}
}
repaint();
}
//Function to set the color in the canvas.
public void setSelectedColor(Color c){
color = c;
if(objects.size() > 0){
if((objects.elementAt(objects.size()-1).toString()).regionMatches(0,"S",0,1)){
((DrawObject)(objects.elementAt(objects.size()-1))).setSelColor(c);
repaint();
}
}
}
public void mouseMoved(MouseEvent e){
}
public void mouseDragged(MouseEvent e){
Graphics g = getGraphics();
g.setColor(Color.black);
g.setXORMode(getBackground());
//Draw in XOR mode over the previous shape then draw in the new location.
//Save the current point for use in erasing next time.
switch(shape){
case 1:
g.drawLine(initPoint.x, initPoint.y, previous.x, previous.y);
g.drawLine(initPoint.x, initPoint.y, e.getX(), e.getY());
previous = new Point(e.getX(), e.getY());
break;
case 2:
Point curr = new Point(e.getX(), e.getY());
if (previous.x>initPoint.x){
bigx = previous.x;
smallx = initPoint.x;
}
else {
bigx = initPoint.x;
smallx = previous.x;
}
if (previous.y>initPoint.y) {
bigy=previous.y;
smally=initPoint.y;
}
else{
bigy=initPoint.y;
smally=previous.y;
}
g.drawRect(smallx, smally, bigx-smallx, bigy-smally);
if (curr.x>initPoint.x){
bigx = curr.x;
smallx = initPoint.x;
}
else {
bigx = initPoint.x;
smallx = curr.x;
}
if (curr.y>initPoint.y) {
bigy=curr.y;
smally=initPoint.y;
}
else{
bigy=initPoint.y;
smally=curr.y;
}
g.drawRect(smallx,smally, bigx-smallx, bigy-smally);
previous = new Point(e.getX(), e.getY());
break;
case 3:
Point cur = new Point(e.getX(), e.getY());
g.drawOval(initPoint.x-Math.abs(previous.x-initPoint.x),
initPoint.y-Math.abs(previous.y-initPoint.y),
2*Math.abs(previous.x-initPoint.x),
2*Math.abs(previous.y-initPoint.y));
g.drawOval(initPoint.x-Math.abs(cur.x-initPoint.x),
initPoint.y-Math.abs(cur.y-initPoint.y),
2*Math.abs(cur.x-initPoint.x),
2*Math.abs(cur.y-initPoint.y));
previous = new Point(e.getX(), e.getY());
break;
case 4:
Point cu = new Point(e.getX(), e.getY());
if (previous.x>initPoint.x){
bigx = previous.x;
smallx = initPoint.x;
}
else {
bigx = initPoint.x;
smallx = previous.x;
}
if (previous.y>initPoint.y) {
bigy=previous.y;
smally=initPoint.y;
}
else{
bigy=initPoint.y;
smally=previous.y;
}
g.fillRect(smallx, smally, bigx-smallx, bigy-smally);
if (cu.x>initPoint.x){
bigx = cu.x;
smallx = initPoint.x;
}
else {
bigx = initPoint.x;
smallx = cu.x;
}
if (cu.y>initPoint.y) {
bigy=cu.y;
smally=initPoint.y;
}
else{
bigy=initPoint.y;
smally=cu.y;
}
g.fillRect(smallx,smally, bigx-smallx, bigy-smally);
previous = new Point(e.getX(), e.getY());
break;
case 5:
Point c = new Point(e.getX(), e.getY());
g.fillOval(initPoint.x-Math.abs(previous.x-initPoint.x),
initPoint.y-Math.abs(previous.y-initPoint.y),
2*Math.abs(previous.x-initPoint.x),
2*Math.abs(previous.y-initPoint.y));
g.fillOval(initPoint.x-Math.abs(c.x-initPoint.x),
initPoint.y-Math.abs(c.y-initPoint.y),
2*Math.abs(c.x-initPoint.x), 2*Math.abs(c.y-initPoint.y));
previous = new Point(e.getX(), e.getY());
break;
case 6:
for(int i=0; i<objects.size(); i++){
if((objects.elementAt(i).toString()).regionMatches(0,"SLine",0,5)){
if(((SLine)(objects.elementAt(i))).getIfObjectClicked()){
// This is when we move the object, not resize
initPoint=new Point(e.getX(),e.getY());
Point p1,p2;
p1=((SLine)(objects.elementAt(i))).firstSelPoint();
p2=((SLine)(objects.elementAt(i))).secondSelPoint();
int disX, disY;
disX=initPoint.x-previous.x;
disY=initPoint.y-previous.y;
g.setColor(((SLine)(objects.elementAt(i))).selColor());
g.drawLine(p1.x,p1.y,p2.x,p2.y);
g.drawLine(p1.x+disX,p1.y+disY,p2.x+disX,p2.y+disY);
g.setColor(Color.black);
g.fillRect(p1.x-3,p1.y-3,6,6);
g.fillRect(p2.x-3,p2.y-3,6,6);
g.fillRect(p1.x+disX-3,p1.y+disY-3,6,6);
g.fillRect(p2.x+disX-3,p2.y+disY-3,6,6);
((SLine)(objects.elementAt(i))).setFirstPoint(p1.x+disX,p1.y+disY);
((SLine)(objects.elementAt(i))).setSecondPoint(p2.x+disX,p2.y+disY);
previous=new Point(initPoint.x,initPoint.y);
}
else if(((SLine)(objects.elementAt(i))).getIfHandleClicked()){
if(((SLine)(objects.elementAt(i))).getPickedHandle() == 1){
initPoint=new Point(e.getX(),e.getY());
Point p1,p2;
p1=((SLine)(objects.elementAt(i))).firstSelPoint();
p2=((SLine)(objects.elementAt(i))).secondSelPoint();
g.setColor(Color.black);
g.fillRect(p1.x-3,p1.y-3,6,6);
g.fillRect(p2.x-3,p2.y-3,6,6);
g.setColor(((SLine)(objects.elementAt(i))).selColor());
g.drawLine(p1.x,p1.y,p2.x,p2.y);
g.drawLine(initPoint.x,initPoint.y,p2.x,p2.y);
g.setColor(Color.black);
g.fillRect(initPoint.x-3,initPoint.y-3,6,6);
g.fillRect(p2.x-3,p2.y-3,6,6);
((SLine)(objects.elementAt(i))).setFirstPoint(initPoint.x,initPoint.y);
((SLine)(objects.elementAt(i))).setSecondPoint(p2.x,p2.y);
previous=new Point(initPoint.x,initPoint.y);
}
else {
initPoint=new Point(e.getX(),e.getY());
Point p1,p2;
p1=((SLine)(objects.elementAt(i))).firstSelPoint();
p2=((SLine)(objects.elementAt(i))).secondSelPoint();
g.setColor(Color.black);
g.fillRect(p1.x-3,p1.y-3,6,6);
g.fillRect(p2.x-3,p2.y-3,6,6);
g.setColor(((SLine)(objects.elementAt(i))).selColor());
g.drawLine(p1.x,p1.y,p2.x,p2.y);
g.drawLine(p1.x,p1.y,initPoint.x,initPoint.y);
g.setColor(Color.black);
g.fillRect(p1.x-3,p1.y-3,6,6);
g.fillRect(initPoint.x-3,initPoint.y-3,6,6);
((SLine)(objects.elementAt(i))).setFirstPoint(p1.x,p1.y);
((SLine)(objects.elementAt(i))).setSecondPoint(initPoint.x,initPoint.y);
previous=new Point(initPoint.x,initPoint.y);
}
}
}
else if((objects.elementAt(i).toString()).regionMatches(0,"SRect",0,5)){
if(((SRect)(objects.elementAt(i))).getIfObjectClicked()){
initPoint=new Point(e.getX(),e.getY());
Point p1,p2;
p1=((SRect)(objects.elementAt(i))).firstSelPoint();
p2=((SRect)(objects.elementAt(i))).secondSelPoint();
int disX, disY;
disX=initPoint.x-previous.x;
disY=initPoint.y-previous.y;
g.setColor(((SRect)(objects.elementAt(i))).selColor());
g.drawRect(p1.x,p1.y,p2.x,p2.y);
g.setColor(Color.black);
g.fillRect(p1.x-3,p1.y-3,6,6);
g.fillRect(p1.x+(p2.x)-3,p1.y-3,6,6);
g.fillRect(p1.x-3,p1.y+(p2.y)-3,6,6);
g.fillRect(p1.x+(p2.x)-3,p1.y+(p2.y)-3,6,6);
//
g.setColor(((SRect)(objects.elementAt(i))).selColor());
g.drawRect(p1.x+disX, p1.y+disY,p2.x,p2.y);
g.setColor(Color.black);
g.fillRect(p1.x-3+disX,p1.y-3+disY,6,6);
g.fillRect(p1.x+(p2.x)-3+disX,p1.y+disY-3,6,6);
g.fillRect(p1.x-3+disX,p1.y+(p2.y)-3+disY,6,6);
g.fillRect(p1.x+(p2.x)-3+disX,p1.y+(p2.y)-3+disY,6,6);
((SRect)(objects.elementAt(i))).setFirstPoint(p1.x+disX,p1.y+disY);
previous=new Point(initPoint.x,initPoint.y);
}
else if (((SRect)(objects.elementAt(i))).getIfHandleClicked()){
if(((SRect)(objects.elementAt(i))).getPickedHandle() == 1){
initPoint=new Point(e.getX(),e.getY());
Point p1,p2;
p1=((SRect)(objects.elementAt(i))).firstSelPoint();
p2=((SRect)(objects.elementAt(i))).secondSelPoint();
g.setColor(Color.black);
g.fillRect(p1.x-3,p1.y-3,6,6);
g.fillRect(p1.x+(p2.x)-3,p1.y-3,6,6);
g.fillRect(p1.x-3,p1.y+(p2.y)-3,6,6);
g.setColor(((SRect)(objects.elementAt(i))).selColor());
g.drawRect(p1.x,p1.y,p2.x,p2.y);
p2.x+=p1.x-initPoint.x;
p2.y+=p1.y-initPoint.y;
g.drawRect(initPoint.x,initPoint.y,p2.x,p2.y);
g.setColor(Color.black);
g.fillRect(initPoint.x-3,initPoint.y-3,6,6);
g.fillRect(initPoint.x+(p2.x)-3,initPoint.y-3,6,6);
g.fillRect(initPoint.x-3,initPoint.y+(p2.y)-3,6,6);
((SRect)(objects.elementAt(i))).setFirstPoint(initPoint.x,initPoint.y);
((SRect)(objects.elementAt(i))).setSecondPoint(p2.x,p2.y);
previous=new Point(initPoint.x,initPoint.y);
}
if(((SRect)(objects.elementAt(i))).getPickedHandle() == 3){
initPoint=new Point(e.getX(),e.getY());
Point p1,p2;
p1=((SRect)(objects.elementAt(i))).firstSelPoint();
p2=((SRect)(objects.elementAt(i))).secondSelPoint();
g.setColor(Color.black);
g.fillRect(p1.x-3,p1.y-3,6,6);
g.fillRect(p1.x-3+p2.x,p1.y-3,6,6);
g.fillRect(p1.x+p2.x-3,p1.y+(p2.y)-3,6,6);
g.setColor(((SRect)(objects.elementAt(i))).selColor());
g.drawRect(p1.x,p1.y,p2.x,p2.y);
p2.x=initPoint.x-p1.x;
p2.y=p2.y+(p1.y-initPoint.y);
g.drawRect(p1.x,initPoint.y,p2.x,p2.y);
g.setColor(Color.black);
g.fillRect(p1.x-3,initPoint.y-3,6,6);
g.fillRect(p1.x+p2.x-3,initPoint.y-3,6,6);
g.fillRect(p1.x+p2.x-3,initPoint.y+(p2.y)-3,6,6);
((SRect)(objects.elementAt(i))).setFirstPoint(p1.x,initPoint.y);
((SRect)(objects.elementAt(i))).setSecondPoint(p2.x,p2.y);
previous=new Point(initPoint.x,initPoint.y);
}
if(((SRect)(objects.elementAt(i))).getPickedHandle() == 6){
initPoint=new Point(e.getX(),e.getY());
Point p1,p2;
p1=((SRect)(objects.elementAt(i))).firstSelPoint();
p2=((SRect)(objects.elementAt(i))).secondSelPoint();
g.setColor(Color.black);
g.fillRect(p1.x-3,p1.y-3,6,6);
g.fillRect(p1.x-3,p1.y+p2.y-3,6,6);
g.fillRect(p1.x+p2.x-3,p1.y+(p2.y)-3,6,6);
g.setColor(((SRect)(objects.elementAt(i))).selColor());
g.drawRect(p1.x,p1.y,p2.x,p2.y);
p2.x+=p1.x-initPoint.x;
p2.y=(initPoint.y-p1.y);
g.drawRect(initPoint.x,initPoint.y-p2.y,p2.x,p2.y);
g.setColor(Color.black);
g.fillRect(initPoint.x-3,p1.y-3,6,6);
g.fillRect(initPoint.x-3,p1.y+p2.y-3,6,6);
g.fillRect(initPoint.x+p2.x-3,p1.y+(p2.y)-3,6,6);
((SRect)(objects.elementAt(i))).setFirstPoint(initPoint.x,initPoint.y-p2.y);
((SRect)(objects.elementAt(i))).setSecondPoint(p2.x,p2.y);
previous=new Point(initPoint.x,initPoint.y);
}
if(((SRect)(objects.elementAt(i))).getPickedHandle() == 8){
initPoint=new Point(e.getX(),e.getY());
Point p1,p2;
p1=((SRect)(objects.elementAt(i))).firstSelPoint();
p2=((SRect)(objects.elementAt(i))).secondSelPoint();
g.setColor(Color.black);
g.fillRect(p1.x+p2.x-3,p1.y-3,6,6);
g.fillRect(p1.x-3,p1.y+p2.y-3,6,6);
g.fillRect(p1.x+p2.x-3,p1.y+(p2.y)-3,6,6);
g.setColor(((SRect)(objects.elementAt(i))).selColor());
g.drawRect(p1.x,p1.y,p2.x,p2.y);
p2.x=initPoint.x-p1.x;
p2.y=initPoint.y-p1.y;
g.drawRect(p1.x,p1.y,p2.x,p2.y);
g.setColor(Color.black);
g.fillRect(p1.x+p2.x-3,p1.y-3,6,6);
g.fillRect(p1.x-3,initPoint.y-3,6,6);
g.fillRect(initPoint.x-3,initPoint.y-3,6,6);
((SRect)(objects.elementAt(i))).setFirstPoint(p1.x,p1.y);
((SRect)(objects.elementAt(i))).setSecondPoint(p2.x,p2.y);
previous=new Point(initPoint.x,initPoint.y);
}
}
}
else if((objects.elementAt(i).toString()).regionMatches(0,"SFRect",0,6)){
if(((SFRect)(objects.elementAt(i))).getIfObjectClicked()){
initPoint=new Point(e.getX(),e.getY());
Point p1,p2;
p1=((SFRect)(objects.elementAt(i))).firstSelPoint();
p2=((SFRect)(objects.elementAt(i))).secondSelPoint();
int disX, disY;
disX=initPoint.x-previous.x;
disY=initPoint.y-previous.y;
g.setColor(((SFRect)(objects.elementAt(i))).selColor());
g.fillRect(p1.x,p1.y,p2.x,p2.y);
g.setColor(Color.black);
g.fillRect(p1.x-3,p1.y-3,6,6);
g.fillRect(p1.x+(p2.x)-3,p1.y-3,6,6);
g.fillRect(p1.x-3,p1.y+(p2.y)-3,6,6);
g.fillRect(p1.x+(p2.x)-3,p1.y+(p2.y)-3,6,6);
//
g.setColor(((SFRect)(objects.elementAt(i))).selColor());
g.fillRect(p1.x+disX, p1.y+disY,p2.x,p2.y);
g.setColor(Color.black);
g.fillRect(p1.x-3+disX,p1.y-3+disY,6,6);
g.fillRect(p1.x-3+disX,p1.y+(p2.y)-3+disY,6,6);
g.fillRect(p1.x+(p2.x)-3+disX,p1.y-3+disY,6,6);
g.fillRect(p1.x+(p2.x)-3+disX,p1.y+(p2.y)-3+disY,6,6);
((SFRect)(objects.elementAt(i))).setFirstPoint(p1.x+disX,p1.y+disY);
previous=new Point(initPoint.x,initPoint.y);
}
else if (((SFRect)(objects.elementAt(i))).getIfHandleClicked()){
if(((SFRect)(objects.elementAt(i))).getPickedHandle() == 1){
initPoint=new Point(e.getX(),e.getY());
Point p1,p2;
p1=((SFRect)(objects.elementAt(i))).firstSelPoint();
p2=((SFRect)(objects.elementAt(i))).secondSelPoint();
g.setColor(Color.black);
g.fillRect(p1.x-3,p1.y-3,6,6);
g.fillRect(p1.x+(p2.x)-3,p1.y-3,6,6);
g.fillRect(p1.x-3,p1.y+(p2.y)-3,6,6);
g.setColor(((SFRect)(objects.elementAt(i))).selColor());
g.fillRect(p1.x,p1.y,p2.x,p2.y);
p2.x+=p1.x-initPoint.x;
p2.y+=p1.y-initPoint.y;
g.fillRect(initPoint.x,initPoint.y,p2.x,p2.y);
g.setColor(Color.black);
g.fillRect(initPoint.x-3,initPoint.y-3,6,6);
g.fillRect(initPoint.x+(p2.x)-3,initPoint.y-3,6,6);
g.fillRect(initPoint.x-3,initPoint.y+(p2.y)-3,6,6);
((SFRect)(objects.elementAt(i))).setFirstPoint(initPoint.x,initPoint.y);
((SFRect)(objects.elementAt(i))).setSecondPoint(p2.x,p2.y);
previous=new Point(initPoint.x,initPoint.y);
}
if(((SFRect)(objects.elementAt(i))).getPickedHandle() == 3){
initPoint=new Point(e.getX(),e.getY());
Point p1,p2;
p1=((SFRect)(objects.elementAt(i))).firstSelPoint();
p2=((SFRect)(objects.elementAt(i))).secondSelPoint();
g.setColor(Color.black);
g.fillRect(p1.x-3,p1.y-3,6,6);
g.fillRect(p1.x-3+p2.x,p1.y-3,6,6);
g.fillRect(p1.x+p2.x-3,p1.y+(p2.y)-3,6,6);
g.setColor(((SFRect)(objects.elementAt(i))).selColor());
g.fillRect(p1.x,p1.y,p2.x,p2.y);
p2.x=initPoint.x-p1.x;
p2.y=p2.y+(p1.y-initPoint.y);
g.fillRect(p1.x,initPoint.y,p2.x,p2.y);
g.setColor(Color.black);
g.fillRect(p1.x-3,initPoint.y-3,6,6);
g.fillRect(p1.x+p2.x-3,initPoint.y-3,6,6);
g.fillRect(p1.x+p2.x-3,initPoint.y+(p2.y)-3,6,6);
((SFRect)(objects.elementAt(i))).setFirstPoint(p1.x,initPoint.y);
((SFRect)(objects.elementAt(i))).setSecondPoint(p2.x,p2.y);
previous=new Point(initPoint.x,initPoint.y);
}
if(((SFRect)(objects.elementAt(i))).getPickedHandle() == 6){
initPoint=new Point(e.getX(),e.getY());
Point p1,p2;
p1=((SFRect)(objects.elementAt(i))).firstSelPoint();
p2=((SFRect)(objects.elementAt(i))).secondSelPoint();
g.setColor(Color.black);
g.fillRect(p1.x-3,p1.y-3,6,6);
g.fillRect(p1.x-3,p1.y+p2.y-3,6,6);
g.fillRect(p1.x+p2.x-3,p1.y+(p2.y)-3,6,6);
g.setColor(((SFRect)(objects.elementAt(i))).selColor());
g.fillRect(p1.x,p1.y,p2.x,p2.y);
p2.x+=p1.x-initPoint.x;
p2.y=(initPoint.y-p1.y);
g.fillRect(initPoint.x,initPoint.y-p2.y,p2.x,p2.y);
g.setColor(Color.black);
g.fillRect(initPoint.x-3,p1.y-3,6,6);
g.fillRect(initPoint.x-3,p1.y+p2.y-3,6,6);
g.fillRect(initPoint.x+p2.x-3,p1.y+(p2.y)-3,6,6);
((SFRect)(objects.elementAt(i))).setFirstPoint(initPoint.x,initPoint.y-p2.y);
((SFRect)(objects.elementAt(i))).setSecondPoint(p2.x,p2.y);
previous=new Point(initPoint.x,initPoint.y);
}
if(((SFRect)(objects.elementAt(i))).getPickedHandle() == 8){
initPoint=new Point(e.getX(),e.getY());
Point p1,p2;
p1=((SFRect)(objects.elementAt(i))).firstSelPoint();
p2=((SFRect)(objects.elementAt(i))).secondSelPoint();
g.setColor(Color.black);
g.fillRect(p1.x+p2.x-3,p1.y-3,6,6);
g.fillRect(p1.x-3,p1.y+p2.y-3,6,6);
g.fillRect(p1.x+p2.x-3,p1.y+(p2.y)-3,6,6);
g.setColor(((SFRect)(objects.elementAt(i))).selColor());
g.fillRect(p1.x,p1.y,p2.x,p2.y);
p2.x=initPoint.x-p1.x;
p2.y=initPoint.y-p1.y;
g.fillRect(p1.x,p1.y,p2.x,p2.y);
g.setColor(Color.black);
g.fillRect(p1.x+p2.x-3,p1.y-3,6,6);
g.fillRect(p1.x-3,initPoint.y-3,6,6);
g.fillRect(initPoint.x-3,initPoint.y-3,6,6);
((SFRect)(objects.elementAt(i))).setFirstPoint(p1.x,p1.y);
((SFRect)(objects.elementAt(i))).setSecondPoint(p2.x,p2.y);
previous=new Point(initPoint.x,initPoint.y);
}
}
}
else if((objects.elementAt(i).toString()).regionMatches(0,"SOval",0,5)){
if(((SOval)(objects.elementAt(i))).getIfObjectClicked()){
initPoint=new Point(e.getX(),e.getY());
Point p1,p2;
p1=((SOval)(objects.elementAt(i))).firstSelPoint();
p2=((SOval)(objects.elementAt(i))).secondSelPoint();
int disX, disY;
disX=initPoint.x-previous.x;
disY=initPoint.y-previous.y;
g.setColor(((SOval)(objects.elementAt(i))).selColor());
g.drawOval(p1.x-p2.x,p1.y-p2.y,p2.x*2,p2.y*2);
g.setColor(Color.black);
g.fillRect(p1.x-p2.x-3,p1.y-3,6,6);
g.fillRect(p1.x+p2.x-3,p1.y-3,6,6);
g.fillRect(p1.x-3,p1.y+p2.y-3,6,6);
g.fillRect(p1.x-3,p1.y-p2.y-3,6,6);
//
g.setColor(((SOval)(objects.elementAt(i))).selColor());
g.drawOval(p1.x+disX-p2.x, p1.y+disY-p2.y,p2.x*2,p2.y*2);
g.setColor(Color.black);
g.fillRect(p1.x-p2.x-3+disX,p1.y-3+disY,6,6);
g.fillRect(p1.x+p2.x-3+disX,p1.y-3+disY,6,6);
g.fillRect(p1.x-3+disX,p1.y+p2.y-3+disY,6,6);
g.fillRect(p1.x-3+disX,p1.y-p2.y-3+disY,6,6);
((SOval)(objects.elementAt(i))).setFirstPoint(p1.x+disX,p1.y+disY);
previous=new Point(initPoint.x,initPoint.y);
}
else if (((SOval)(objects.elementAt(i))).getIfHandleClicked()){
if(((SOval)(objects.elementAt(i))).getPickedHandle() == 1){
initPoint=new Point(e.getX(),e.getY());
Point p1,p2;
p1=((SOval)(objects.elementAt(i))).firstSelPoint();
p2=((SOval)(objects.elementAt(i))).secondSelPoint();
p1.x=p1.x-p2.x;
p1.y=p1.y-p2.y;
g.setColor(Color.black);
g.fillRect(p1.x-3,p1.y+p2.y-3,6,6);
g.fillRect(p1.x+(2*p2.x)-3,p1.y+p2.y-3,6,6);
g.setColor(((SOval)(objects.elementAt(i))).selColor());
g.drawOval(p1.x,p1.y,2*p2.x,2*p2.y);
p2.x=p1.x+p2.x-initPoint.x;
p1.x=initPoint.x;// p1.x+(initPoint.x-previous.x)
g.drawOval(p1.x,p1.y,2*p2.x,2*p2.y);
g.setColor(Color.black);
g.fillRect(p1.x-3,p1.y+p2.y-3,6,6);
g.fillRect(p1.x+(2*p2.x)-3,p1.y+p2.y-3,6,6);
((SOval)(objects.elementAt(i))).setFirstPoint(p1.x+p2.x,p1.y+p2.y);
((SOval)(objects.elementAt(i))).setSecondPoint(p2.x,p2.y);
previous=new Point(initPoint.x,initPoint.y);
}
if(((SOval)(objects.elementAt(i))).getPickedHandle() == 2){
initPoint=new Point(e.getX(),e.getY());
Point p1,p2;
p1=((SOval)(objects.elementAt(i))).firstSelPoint();
p2=((SOval)(objects.elementAt(i))).secondSelPoint();
p1.x=p1.x-p2.x;
p1.y=p1.y-p2.y;
g.setColor(Color.black);
g.fillRect(p1.x-3,p1.y+p2.y-3,6,6);
g.fillRect(p1.x+(2*p2.x)-3,p1.y+p2.y-3,6,6);
g.setColor(((SOval)(objects.elementAt(i))).selColor());
g.drawOval(p1.x,p1.y,2*p2.x,2*p2.y);
p1.x=p1.x+p2.x;
p2.x=initPoint.x-(p1.x+p2.x)+p2.x;
p1.x=p1.x-p2.x;
g.drawOval(p1.x,p1.y,2*p2.x,2*p2.y);
g.setColor(Color.black);
g.fillRect(p1.x-3,p1.y+p2.y-3,6,6);
g.fillRect(p1.x+(2*p2.x)-3,p1.y+p2.y-3,6,6);
((SOval)(objects.elementAt(i))).setFirstPoint(p1.x+p2.x,p1.y+p2.y);
((SOval)(objects.elementAt(i))).setSecondPoint(p2.x,p2.y);
previous=new Point(initPoint.x,initPoint.y);
}
if(((SOval)(objects.elementAt(i))).getPickedHandle() == 3){
initPoint=new Point(e.getX(),e.getY());
Point p1,p2;
p1=((SOval)(objects.elementAt(i))).firstSelPoint();
p2=((SOval)(objects.elementAt(i))).secondSelPoint();
p1.x=p1.x-p2.x;
p1.y=p1.y-p2.y;
g.setColor(Color.black);
g.fillRect(p1.x-3+p2.x,p1.y-3,6,6);
g.fillRect(p1.x-3+p2.x,p1.y+(2*p2.y)-3,6,6);
g.setColor(((SOval)(objects.elementAt(i))).selColor());
g.drawOval(p1.x,p1.y,2*p2.x,2*p2.y);
int ty=p1.y+p2.y;
p1.y=initPoint.y;
p2.y=ty-p1.y;
g.drawOval(p1.x,p1.y,2*p2.x,2*p2.y);
g.setColor(Color.black);
g.fillRect(p1.x-3+p2.x,p1.y-3,6,6);
g.fillRect(p1.x+p2.x-3,p1.y+(2*p2.y)-3,6,6);
((SOval)(objects.elementAt(i))).setFirstPoint(p1.x+p2.x,p1.y+p2.y);
((SOval)(objects.elementAt(i))).setSecondPoint(p2.x,p2.y);
previous=new Point(initPoint.x,initPoint.y);
}
if(((SOval)(objects.elementAt(i))).getPickedHandle() == 4){
initPoint=new Point(e.getX(),e.getY());
Point p1,p2;
p1=((SOval)(objects.elementAt(i))).firstSelPoint();
p2=((SOval)(objects.elementAt(i))).secondSelPoint();
p1.x=p1.x-p2.x;
p1.y=p1.y-p2.y;
g.setColor(Color.black);
g.fillRect(p1.x-3+p2.x,p1.y-3,6,6);
g.fillRect(p1.x-3+p2.x,p1.y+(2*p2.y)-3,6,6);
g.setColor(((SOval)(objects.elementAt(i))).selColor());
g.drawOval(p1.x,p1.y,2*p2.x,2*p2.y);
p1.y=p1.y+p2.y;
p2.y=initPoint.y-(p1.y+p2.y)+p2.y;
p1.y=p1.y-p2.y;
g.drawOval(p1.x,p1.y,2*p2.x,2*p2.y);
g.setColor(Color.black);
g.fillRect(p1.x-3+p2.x,p1.y-3,6,6);
g.fillRect(p1.x+p2.x-3,p1.y+(2*p2.y)-3,6,6);
((SOval)(objects.elementAt(i))).setFirstPoint(p1.x+p2.x,p1.y+p2.y);
((SOval)(objects.elementAt(i))).setSecondPoint(p2.x,p2.y);
previous=new Point(initPoint.x,initPoint.y);
}
}
}
else if((objects.elementAt(i).toString()).regionMatches(0,"SFOval",0,6)){
if(((SFOval)(objects.elementAt(i))).getIfObjectClicked()){
initPoint=new Point(e.getX(),e.getY());
Point p1,p2;
p1=((SFOval)(objects.elementAt(i))).firstSelPoint();
p2=((SFOval)(objects.elementAt(i))).secondSelPoint();
int disX, disY;
disX=initPoint.x-previous.x;
disY=initPoint.y-previous.y;
g.setColor(((SFOval)(objects.elementAt(i))).selColor());
g.fillOval(p1.x-p2.x,p1.y-p2.y,p2.x*2,p2.y*2);
g.setColor(Color.black);
g.fillRect(p1.x-p2.x-3,p1.y-3,6,6);
g.fillRect(p1.x+p2.x-3,p1.y-3,6,6);
g.fillRect(p1.x-3,p1.y+p2.y-3,6,6);
g.fillRect(p1.x-3,p1.y-p2.y-3,6,6);
//
g.setColor(((SFOval)(objects.elementAt(i))).selColor());
g.fillOval(p1.x+disX-p2.x, p1.y+disY-p2.y,p2.x*2,p2.y*2);
g.setColor(Color.black);
g.fillRect(p1.x-p2.x-3+disX,p1.y-3+disY,6,6);
g.fillRect(p1.x+p2.x-3+disX,p1.y-3+disY,6,6);
g.fillRect(p1.x-3+disX,p1.y+p2.y-3+disY,6,6);
g.fillRect(p1.x-3+disX,p1.y-p2.y-3+disY,6,6);
((SFOval)(objects.elementAt(i))).setFirstPoint(p1.x+disX,p1.y+disY);
previous=new Point(initPoint.x,initPoint.y);
}
else if(((SFOval)(objects.elementAt(i))).getIfHandleClicked()){
if(((SFOval)(objects.elementAt(i))).getPickedHandle() == 1){
initPoint=new Point(e.getX(),e.getY());
Point p1,p2;
p1=((SFOval)(objects.elementAt(i))).firstSelPoint();
p2=((SFOval)(objects.elementAt(i))).secondSelPoint();
p1.x=p1.x-p2.x;
p1.y=p1.y-p2.y;
g.setColor(Color.black);
g.fillRect(p1.x-3,p1.y+p2.y-3,6,6);
g.fillRect(p1.x+(2*p2.x)-3,p1.y+p2.y-3,6,6);
g.setColor(((SFOval)(objects.elementAt(i))).selColor());
g.fillOval(p1.x,p1.y,2*p2.x,2*p2.y);
p2.x=p1.x+p2.x-initPoint.x;
p1.x=initPoint.x;// p1.x+(initPoint.x-previous.x)
g.fillOval(p1.x,p1.y,2*p2.x,2*p2.y);
g.setColor(Color.black);
g.fillRect(p1.x-3,p1.y+p2.y-3,6,6);
g.fillRect(p1.x+(2*p2.x)-3,p1.y+p2.y-3,6,6);
((SFOval)(objects.elementAt(i))).setFirstPoint(p1.x+p2.x,p1.y+p2.y);
((SFOval)(objects.elementAt(i))).setSecondPoint(p2.x,p2.y);
previous=new Point(initPoint.x,initPoint.y);
}
if(((SFOval)(objects.elementAt(i))).getPickedHandle() == 2){
initPoint=new Point(e.getX(),e.getY());
Point p1,p2;
p1=((SFOval)(objects.elementAt(i))).firstSelPoint();
p2=((SFOval)(objects.elementAt(i))).secondSelPoint();
p1.x=p1.x-p2.x;
p1.y=p1.y-p2.y;
g.setColor(Color.black);
g.fillRect(p1.x-3,p1.y+p2.y-3,6,6);
g.fillRect(p1.x+(2*p2.x)-3,p1.y+p2.y-3,6,6);
g.setColor(((SFOval)(objects.elementAt(i))).selColor());
g.fillOval(p1.x,p1.y,2*p2.x,2*p2.y);
p1.x=p1.x+p2.x;
p2.x=initPoint.x-(p1.x+p2.x)+p2.x;
p1.x=p1.x-p2.x;
g.fillOval(p1.x,p1.y,2*p2.x,2*p2.y);
g.setColor(Color.black);
g.fillRect(p1.x-3,p1.y+p2.y-3,6,6);
g.fillRect(p1.x+(2*p2.x)-3,p1.y+p2.y-3,6,6);
((SFOval)(objects.elementAt(i))).setFirstPoint(p1.x+p2.x,p1.y+p2.y);
((SFOval)(objects.elementAt(i))).setSecondPoint(p2.x,p2.y);
previous=new Point(initPoint.x,initPoint.y);
}
if(((SFOval)(objects.elementAt(i))).getPickedHandle() == 3){
initPoint=new Point(e.getX(),e.getY());
Point p1,p2;
p1=((SFOval)(objects.elementAt(i))).firstSelPoint();
p2=((SFOval)(objects.elementAt(i))).secondSelPoint();
p1.x=p1.x-p2.x;
p1.y=p1.y-p2.y;
g.setColor(Color.black);
g.fillRect(p1.x-3+p2.x,p1.y-3,6,6);
g.fillRect(p1.x-3+p2.x,p1.y+(2*p2.y)-3,6,6);
g.setColor(((SFOval)(objects.elementAt(i))).selColor());
g.fillOval(p1.x,p1.y,2*p2.x,2*p2.y);
int ty=p1.y+p2.y;
p1.y=initPoint.y;
p2.y=ty-p1.y;
g.fillOval(p1.x,p1.y,2*p2.x,2*p2.y);
g.setColor(Color.black);
g.fillRect(p1.x-3+p2.x,p1.y-3,6,6);
g.fillRect(p1.x+p2.x-3,p1.y+(2*p2.y)-3,6,6);
((SFOval)(objects.elementAt(i))).setFirstPoint(p1.x+p2.x,p1.y+p2.y);
((SFOval)(objects.elementAt(i))).setSecondPoint(p2.x,p2.y);
previous=new Point(initPoint.x,initPoint.y);
}
if(((SFOval)(objects.elementAt(i))).getPickedHandle() == 4){
initPoint=new Point(e.getX(),e.getY());
Point p1,p2;
p1=((SFOval)(objects.elementAt(i))).firstSelPoint();
p2=((SFOval)(objects.elementAt(i))).secondSelPoint();
p1.x=p1.x-p2.x;
p1.y=p1.y-p2.y;
g.setColor(Color.black);
g.fillRect(p1.x-3+p2.x,p1.y-3,6,6);
g.fillRect(p1.x-3+p2.x,p1.y+(2*p2.y)-3,6,6);
g.setColor(((SFOval)(objects.elementAt(i))).selColor());
g.fillOval(p1.x,p1.y,2*p2.x,2*p2.y);
p1.y=p1.y+p2.y;
p2.y=initPoint.y-(p1.y+p2.y)+p2.y;
p1.y=p1.y-p2.y;
g.fillOval(p1.x,p1.y,2*p2.x,2*p2.y);
g.setColor(Color.black);
g.fillRect(p1.x-3+p2.x,p1.y-3,6,6);
g.fillRect(p1.x+p2.x-3,p1.y+(2*p2.y)-3,6,6);
((SFOval)(objects.elementAt(i))).setFirstPoint(p1.x+p2.x,p1.y+p2.y);
((SFOval)(objects.elementAt(i))).setSecondPoint(p2.x,p2.y);
previous=new Point(initPoint.x,initPoint.y);
}
}
}
}
}
}
//Draw a border around the drawing area and repaint all objects in the
//vector.
public void paint(Graphics g){
int width = getSize().width;
int height = getSize().height;
g.drawRect(0,0,width-1,height-1);
for(Enumeration e=objects.elements(); e.hasMoreElements();){
((DrawObject)e.nextElement()).paint(g);
}
}
}