/* ------------------------------------- * Zeichnen von Daniel Abplanalp 27.2 1996 *-------------------------------------- */ import java.awt.Graphics; import java.awt.Image; import java.lang.Math; import java.awt.Color; import java.awt.* ; import java.awt.image.* ; import java.lang.* ; import java.util.* ; import java.net.* ; import java.applet.*; // jan=176x166 public class paint extends java.applet.Applet implements Runnable { Thread kicker=null; Image im,copyimage; Graphics offscreen; ImageObserver imo = null; static int wo=300; static final int wocolor=230,Groessefarbfeldy=13,maxwasdraw=8; int delay=80,wasdraw=0; Color farben[]={Color.black,Color.darkGray,Color.gray,Color.lightGray, Color.white,Color.blue,Color.cyan,Color.green,Color.magenta, Color.pink,Color.red,Color.orange, Color.yellow}; //=13 d.h. 0..12 static final int MaxColor=13, MaxEcken=50; Color farbe=Color.black; Image imagedata,imageback; // Bilddaten int Eckenx[] = new int[MaxEcken],Eckeny[] = new int[MaxEcken],AnzahlEcken=0; int X=60,Y=60,X0=60,Y0=60,Xakt,Yakt,SchriftGroesse=14; String text="",Hintergrundbild=null,Pinselbild=null; boolean drag=false,XORMode=false,Modechanged=false,copymode=false; int Methode=0,copyX=-1,copyY=0,copywX=0,copywY=0,welchefarbe=0; int Screenx=500,Screeny=200; static final int line=1,rectdraw=2,rectfill=3,circledraw=4,circlefill=5, rrectdraw=6,rrectfill=7,polydraw=8,polyfill=9, MaxMethode=9,immer=20; // (+100 copyto) MediaTracker tracker=null; // Wird beim Bilder laden gebraucht final static String imageLabel="image"; static final int IMAGE1_ID=0; static final int IMAGE2_ID=1; boolean loaded=false; public String getAppletInfo() { return "Paint (c) 1.3.1996 Daniel Abplanalp"; } public void init() { tracker = new MediaTracker(this); try { im = createImage(Screenx, Screeny); offscreen = im.getGraphics(); } catch (Exception e) { // double-buffering not available offscreen = null; // exit(1); } resize(Screenx,Screeny); // g.clipRect(0, 0, size().width - 1, size().height - 1); // Einlesen der Argumente // try { delay = Integer.parseInt(getParameter("DELAY")); try { Hintergrundbild = getParameter("IMAGE"); } catch(Exception e){}; try { Pinselbild = getParameter("BRUSH"); } catch(Exception e){}; if (Pinselbild==null) { Pinselbild = "eyes.gif";} repaint(); } public void paint(Graphics g) { update(g); } public void hinpaint(Graphics g) { int i; //g.setBackground(Color.white); g.clipRect(0, 0, Screenx-1, Screeny-1); g.setColor(Color.blue); // Methoden for (i=0;i199 ? 199-X : copywX; int wY=Y+copywY>199 ? 199-Y : copywY; g.copyArea(copyX,copyY,wX,wY,X-copyX,Y-copyY); } g.clipRect(0, 0, Screenx-1, Screeny-1); } public void update(Graphics g) { if (!loaded) { g.setColor(Color.white); g.fillRect(0,0,Screenx-1,Screeny-1); g.setColor(Color.blue); g.drawString("Please Wait ...",200,100); } else { g.clipRect(0, 0, Screenx-1, Screeny-1); g.drawImage(im, 0, 0, imo); g.setColor(Color.cyan); g.fillRect(330,(SchriftGroesse-4)*4+10,20,4); g.drawRect(wocolor,welchefarbe*Groessefarbfeldy+10, 20,Groessefarbfeldy-1); g.setColor(farbe); if (Modechanged) { Modechanged=false; if (XORMode) g.setXORMode(farbe); else g.setPaintMode(); } if (drag || text!="") { Methodenpaint(g); if (X<200 && Methode==0) wasdrawpaint(g); } } } public boolean mouseDown(java.awt.Event evt, int x, int y) { X0=x; Y0=y; return true; } public boolean mouseDrag(java.awt.Event evt, int x, int y) { Y = y; Yakt=y; X = x; Xakt=x; if (Methode==immer && x<200) wasdrawpaint(offscreen); drag=true; repaint(); return true; } public boolean mouseUp(java.awt.Event evt, int x, int y) { Y = y; X = x; drag=false; if (x<200) { if (Methode==immer || Methode==0) { wasdrawpaint(offscreen); } else if (Methode==polydraw || Methode==polyfill) { Eckenx[AnzahlEcken]=x; Eckeny[AnzahlEcken++]=y; if (AnzahlEcken>=MaxEcken) AnzahlEcken--; } if (copymode) { if (copyX>0) { offscreen.copyArea(copyX,copyY,copywX,copywY,x-copyX,y-copyY); copymode=false;} else { copywX=X-X0; copywY=Y-Y0; copyX=X0; copyY=Y0; Methode=0; wasdraw=8; } } else Methodenpaint(offscreen); text=""; repaint(); } else if (x<=220) { Methode=(y-10)/20+1; AnzahlEcken=0; text=""; copymode=false; } else if (x<=290 && x>=260) { wasdraw=(y-10)/22+1; Methode=immer; if (wasdraw>maxwasdraw) wasdraw=maxwasdraw; } else if (x<=330 && x>=300) { if (y>=10 && y<=30) { XORMode= !XORMode; if (XORMode) offscreen.setXORMode(farbe); else offscreen.setPaintMode(); Modechanged=true; } else if (y>=40 && y<=60) {Methode=rectdraw; copymode=true; copyX=-1;} else if (y>=70 && y<=90) { offscreen.setColor(Color.black); offscreen.clipRect(0, 0, Screenx-1, Screeny-1); offscreen.drawString("(c) Feb 1996",362,170); offscreen.drawString("Daniel Abplanalp",362,190); System.out.println("Speichern ..."); offscreen.setColor(farbe); repaint();} } else if (x<=350 && x>=330) { SchriftGroesse=(y-10)/4+4; repaint(); } if (x>=wocolor && x<=wocolor+20) { welchefarbe=(y-10)/Groessefarbfeldy; if (welchefarbe>=MaxColor) welchefarbe=MaxColor-1; farbe=farben[welchefarbe]; offscreen.setColor(farbe); repaint(); } // { offscreen.PixelGrabber((Image) im,X0,Y0,X-X0,Y-Y0,bildgrab,0,X-X0);} return true; } public boolean mouseMove(java.awt.Event evt, int x, int y) { Yakt = y; Xakt = x; return true; } public boolean keyDown(java.awt.Event evt, int key) { text+=(char) key; Methode=0; wasdraw=-1; repaint(); return true; } public void start() { if(kicker == null) // Falls kein thread vorhanden { kicker=new Thread(this); // dann bilde einen // kicker.setPriority(kicker.MIN_PRIORITY); kicker.start(); // und starte ihn } repaint(); } public void stop() { if (kicker != null && kicker.isAlive()) kicker.stop(); kicker=null; } public void destroy() // unnoetig { if (kicker != null && kicker.isAlive()) { kicker.stop(); kicker.destroy(); } kicker=null; } public void run() { imagedata=getImage(getCodeBase(), Pinselbild); // +Pinselbild tracker.addImage(imagedata, IMAGE1_ID); try{ tracker.waitForID(IMAGE1_ID);} catch(InterruptedException e){} if (Hintergrundbild==null) imageback=null; else { imageback=getImage(getCodeBase(), Hintergrundbild); // +Hintergrundbild tracker.addImage(imageback, IMAGE2_ID); try {tracker.waitForID(IMAGE2_ID);}catch(InterruptedException e){} if (tracker.isErrorID(IMAGE2_ID)) {System.out.println("ERROR");} } loaded=true; hinpaint(offscreen); repaint(); /* while (kicker != null) // Solange Thread besteht { repaint(); // Redraw the window // The sleep method below might be interrupted // and cause an InterruptedException, so we'll // have to catch it. try { // Warte eine Beliebige Zeit (in ms) Thread.sleep(delay); } catch (InterruptedException e){} }*/ } }