/*********************************************************** * * Fade v1.05 by Giuseppe Gennaro, 1996 * * Feel free to modify or distribute this code as you * wish, just mention the author somewhere on the page * you use it. It is one of my many learning attempts at * the java language. Here are the parameters for the * applet: * * * * * * * * * * * * ... * * * You should be able to change the width, height, background * color, text color, etc... Also, the text with the extension * number following it is affected by all other parameters with * that same extension number. (Just stating the obvious.) */ import java.awt.*; import java.lang.*; import java.net.*; import java.applet.*; import java.io.*; ////////////////////////////////////// // OTHER CLASSES ////////////////////////////////////// class Thoughts { static int MAX = 10; String theThoughts[] = new String[MAX]; URL theUrls[] = new URL[MAX]; Font theFonts[] = new Font[MAX]; int R, G, B; int dr, dg, db; int rinit, ginit, binit; int rfinal, gfinal, bfinal; Color bgColor; boolean maxxed = false; boolean darker = false; int curr, count; Thoughts() { R = G = B = 0; dr = dg = db = 1; rinit = ginit = binit = 0; rfinal = gfinal = bfinal = 255; bgColor = new Color(R,G,B); curr = -1; count = 0; } public void SetBackground(int i, int j, int k) { R = rinit = i; G = ginit = j; B = binit = k; bgColor = new Color(R,G,B); } public Color GetBackground() { return bgColor; } public void SetTextColor(int i, int j, int k) { rfinal = i; gfinal = j; bfinal = k; } public void SetChangeFactor(int i) { if(rfinal > rinit) dr = i; else if(rfinal == rinit) dr = 0; else dr = -i; if(gfinal > ginit) dg = i; else if(gfinal == ginit) dg = 0; else dg = -i; if(bfinal > binit) db = i; else if(bfinal == binit) db = 0; else db = -i; } public void AddThought(String idea, String url, String fontname, int fontstyle, int fontsize) { if(curr < MAX) { curr++; count++; theThoughts[curr] = idea; try{ theUrls[curr] = new URL(url); }catch(MalformedURLException e) {} theFonts[curr] = new Font(fontname, fontstyle, fontsize); } } public void Reset() { curr = 0; } public void Next() { curr++; if(curr >= count) Reset(); } public void DrawThoughts(Fade that, Graphics g) { FontMetrics fm = that.getFontMetrics(theFonts[curr]); Color temp = new Color(R,G,B); g.setColor(temp); g.setFont(theFonts[curr]); g.drawString(theThoughts[curr], (that.size().width - fm.stringWidth(theThoughts[curr]))/2, (that.size().height + fm.getAscent())/2); } // (that.size().height + fm.getHeight())/2 public URL GetCurrentURL() { return theUrls[curr]; } public int ChangeColors() { int pause = 1; if(!maxxed) { // Adjust colors to fade in... R += dr; G += dg; B += db; if(!((dr > 0 && R < rfinal) || (dr < 0 && R > rfinal))) R = rfinal; if(!((dg > 0 && G < gfinal) || (dg < 0 && G > gfinal))) G = gfinal; if(!((db > 0 && B < bfinal) || (db < 0 && B > bfinal))) B = bfinal; if(R == rfinal && G == gfinal && B == bfinal) { maxxed = true; pause = 10; } } else { // Adjust colors to fade out... R -= dr; G -= dg; B -= db; if(!((dr > 0 && R > rinit) || (dr < 0 && R < rinit))) R = rinit; if(!((dg > 0 && G > ginit) || (dg < 0 && G < ginit))) G = ginit; if(!((db > 0 && B > binit) || (db < 0 && B < binit))) B = binit; if(R == rinit && G == ginit && B == binit) { maxxed = false; pause = 10; Next(); } } return pause; } } //------------------------------------ public class Fade extends java.applet.Applet implements Runnable { Thoughts thoughts = new Thoughts(); Thread runner = null; public void init() { // Set the background... String bgRGB = getParameter("bgcolor"); if(bgRGB == null || bgRGB.length() != 6) { thoughts.SetBackground(0,0,0); } else { thoughts.SetBackground(HexToInt(bgRGB.substring(0,2)), HexToInt(bgRGB.substring(2,4)), HexToInt(bgRGB.substring(4))); } setBackground(thoughts.GetBackground()); // Set the text color... String txtRGB = getParameter("txtcolor"); if(txtRGB == null || txtRGB.length() != 6) { thoughts.SetTextColor(255,255,255); } else { thoughts.SetTextColor(HexToInt(txtRGB.substring(0,2)), HexToInt(txtRGB.substring(2,4)), HexToInt(txtRGB.substring(4))); } // Set the delta for the changing color... String changeFactor = getParameter("changefactor"); if(changeFactor == null) thoughts.SetChangeFactor(1); else thoughts.SetChangeFactor(Integer.valueOf(changeFactor).intValue()); // Obtaining the data for the thoughts... GetThoughts(this); thoughts.Reset(); resize(size().width, size().height); } public void start() { if(runner == null) { runner = new Thread(this); runner.setPriority(runner.MIN_PRIORITY); runner.start(); } } public void stop() { runner = null; } public void paint(Graphics g) { } public void update(Graphics g) { thoughts.DrawThoughts(this, g); } public boolean mouseDown(java.awt.Event evt, int x, int y) { super.getAppletContext().showDocument(thoughts.GetCurrentURL()); return true; } public boolean mouseEnter(java.awt.Event evt, int x, int y) { // Showing who made this... showStatus("Fade.java by Giuseppe Gennaro"); return true; } public void run() { int sleepfactor; while(runner != null) { sleepfactor = thoughts.ChangeColors(); repaint(); try{runner.sleep(25*sleepfactor);}catch(InterruptedException e) {} } } public String getAppletInfo() { return "Fade by Giuseppe Gennaro"; } //////////////////////////////////////// // OTHER FUNCTIONS //////////////////////////////////////// public void GetThoughts(Fade that){ boolean done = false; int i=1; while(!done) { String extension = String.valueOf(i); String fontParam = "font" + extension; String fontName; int fontSize, fontStyle; String textParam = "text" + extension; String urlParam = "url" + extension; String font = super.getParameter(fontParam); if(font == null) { fontName = "TimesRoman"; fontSize = 12; fontStyle = Font.PLAIN; done = true; } else { int comma1 = font.indexOf(","), comma2 = font.lastIndexOf(","); String name = font.substring(0, comma1); String style = font.substring(comma1+1, comma2); String size = font.substring(comma2+1); fontName = name; fontSize = Integer.valueOf(size).intValue(); if(style.equalsIgnoreCase("PLAIN")) fontStyle = Font.PLAIN; else if(style.equalsIgnoreCase("BOLD")) fontStyle = Font.BOLD; else if(style.equalsIgnoreCase("ITALIC")) fontStyle = Font.ITALIC; else fontStyle = Font.PLAIN; } String theText = that.getParameter(textParam); if(theText == null) { theText = "No Text Given."; done = true; } String theUrl = that.getParameter(urlParam); if(!done) thoughts.AddThought(theText, theUrl, fontName, fontStyle, fontSize); i++; } } public int HexToInt(String value) { int answer = 0; if(value.substring(0,1).equalsIgnoreCase("a")) answer = 160; else if(value.substring(0,1).equalsIgnoreCase("b")) answer = 176; else if(value.substring(0,1).equalsIgnoreCase("c")) answer = 192; else if(value.substring(0,1).equalsIgnoreCase("d")) answer = 208; else if(value.substring(0,1).equalsIgnoreCase("e")) answer = 224; else if(value.substring(0,1).equalsIgnoreCase("f")) answer = 240; else answer = Integer.valueOf(value.substring(0,1)).intValue() * 16; if(value.substring(1).equalsIgnoreCase("a")) answer += 10; else if(value.substring(1).equalsIgnoreCase("b")) answer += 11; else if(value.substring(1).equalsIgnoreCase("c")) answer += 12; else if(value.substring(1).equalsIgnoreCase("d")) answer += 13; else if(value.substring(1).equalsIgnoreCase("e")) answer += 14; else if(value.substring(1).equalsIgnoreCase("f")) answer += 15; else answer += Integer.valueOf(value.substring(1)).intValue(); return answer; } }