home *** CD-ROM | disk | FTP | other *** search
- import java.awt.Color;
- import java.awt.Component;
- import java.awt.Font;
- import java.awt.FontMetrics;
- import java.awt.Graphics;
- import java.util.Vector;
-
- public class FunScrollAnimatedText {
- static final int START = 0;
- static final int SHOW = 1;
- static final int END = 2;
- static final int DONE = 3;
- int state;
- FunScroll appl;
- FunScrollTextAttr attr;
- String unparsedText;
- String[] lines;
- protected int[] lineWidths;
- int noOfLines = 1;
- char[] chars;
- int noOfChars;
- int[] xPos;
- int[] yPos;
- boolean[] visible;
- int delayCount;
- int offset;
- int width;
- int height;
- int textHeight;
- int lineHeight;
- // $FF: renamed from: bg java.awt.Color
- Color field_0;
- // $FF: renamed from: fg java.awt.Color
- Color field_1;
- Color darkBg;
- Color lightDarkBg;
- Color brightBg;
- Color brightFg;
- Font font;
- FontMetrics fontMetrics;
- int ascent;
- int descent;
- int leading;
- int maxWidth;
- int sinDegree;
- int xStart;
- int yStart;
- // $FF: renamed from: dx int
- int field_2;
- // $FF: renamed from: dy int
- int field_3;
-
- public FunScrollAnimatedText(FunScroll var1, String var2, Font var3, Color var4, Color var5, int var6, int var7, String var8) {
- this.appl = var1;
- this.font = var3;
- this.field_1 = var4;
- this.field_0 = var5;
- this.field_3 = var7;
- this.field_2 = var6;
- this.unparsedText = var2;
- this.attr = new FunScrollTextAttr(var2, var8);
- (new StringBuffer()).append(" msg:").append(this.attr.msg()).toString();
- (new StringBuffer()).append(" startScroll:").append(this.attr.startScroll()).toString();
- (new StringBuffer()).append(" endScroll:").append(this.attr.endScroll()).toString();
- (new StringBuffer()).append(" showDelay:").append(this.attr.showDelay()).toString();
- (new StringBuffer()).append(" endDelay:").append(this.attr.endDelay()).toString();
- (new StringBuffer()).append(" style:").append(this.attr.style()).toString();
- (new StringBuffer()).append(" drawStyle:").append(this.attr.drawStyle()).toString();
- (new StringBuffer()).append(" color:").append(this.attr.color()).toString();
- (new StringBuffer()).append("dy:").append(var7).append(" dx:").append(var6).toString();
- if (this.attr.color() != null) {
- this.field_1 = var1.readColor(this.attr.color(), var4);
- }
-
- (new StringBuffer()).append(" color:").append(var4).toString();
- this.fontMetrics = ((Component)var1).getFontMetrics(var3);
- this.ascent = this.fontMetrics.getAscent();
- this.descent = this.fontMetrics.getDescent();
- this.leading = this.fontMetrics.getLeading();
- String var9 = this.attr.msg();
- Vector var10 = new Vector();
- this.noOfChars = var9.length();
- this.chars = new char[this.noOfChars];
- var9.getChars(0, this.noOfChars, this.chars, 0);
- this.xPos = new int[this.noOfChars];
- this.yPos = new int[this.noOfChars];
- this.visible = new boolean[this.noOfChars];
- this.textHeight = this.fontMetrics.getHeight();
- if (this.attr.style() == 1 || this.attr.style() == 2) {
- this.textHeight += 4;
- }
-
- this.lineHeight = this.fontMetrics.getHeight();
- int var11 = 0;
- int var12 = this.ascent;
- boolean var13 = false;
- boolean var14 = false;
- int var15 = 0;
-
- int var16;
- for(var16 = 0; var16 < this.noOfChars; ++var16) {
- if (var13) {
- if (this.chars[var16] == 'n') {
- this.chars[var16 - 1] = ' ';
- this.chars[var16] = ' ';
- var14 = true;
- }
-
- var13 = false;
- } else if (this.chars[var16] == '\\') {
- var13 = true;
- } else {
- if (var14) {
- var10.addElement(var9.substring(var15, var16 - 2));
- var15 = var16;
- ++this.noOfLines;
- this.textHeight += this.fontMetrics.getHeight();
- var11 = this.fontMetrics.charsWidth(this.chars, 0, var16);
- var12 += this.lineHeight;
- var14 = false;
- }
-
- if (var16 > 0) {
- this.xPos[var16] = this.fontMetrics.charsWidth(this.chars, 0, var16) - var11;
- } else {
- this.xPos[var16] = var11;
- }
-
- this.maxWidth = Math.max(this.maxWidth, this.xPos[var16]);
- this.yPos[var16] = var12;
- }
- }
-
- if (var16 > var15) {
- var10.addElement(var9.substring(var15, var16));
- }
-
- this.lineWidths = new int[this.noOfLines];
- this.lines = new String[this.noOfLines];
-
- for(int var17 = 0; var17 < this.noOfLines; ++var17) {
- this.lines[var17] = (String)var10.elementAt(var17);
- this.lineWidths[var17] = this.fontMetrics.stringWidth(this.lines[var17]);
- }
-
- }
-
- void resetX() {
- int var1 = 0;
- int var2 = this.noOfChars > 0 ? this.yPos[0] : 0;
-
- for(int var3 = 0; var3 < this.noOfChars; ++var3) {
- if (var2 != this.yPos[var3]) {
- var1 = this.fontMetrics.charsWidth(this.chars, 0, var3);
- var2 = this.yPos[var3];
- }
-
- if (var3 > 0) {
- this.xPos[var3] = this.fontMetrics.charsWidth(this.chars, 0, var3) - var1;
- } else {
- this.xPos[var3] = var1;
- }
- }
-
- }
-
- void reset(int var1, int var2, int var3, Graphics var4) {
- this.offset = var1;
- this.width = var2;
- this.height = var3;
- int var5 = this.attr.startScroll();
- switch (var5) {
- case 0:
- this.xStart = (var2 - this.maxWidth) / 2;
- this.yStart = (var3 - this.textHeight) / 2;
- break;
- case 1:
- this.xStart = var2 - this.field_2 - var1;
- this.yStart = (var3 - this.textHeight) / 2;
- break;
- case 2:
- this.xStart = this.field_2 + var1;
- this.yStart = (var3 - this.textHeight) / 2;
- break;
- case 3:
- this.xStart = (var2 - this.maxWidth) / 2;
- this.yStart = var3 - this.descent - var1;
- break;
- case 4:
- this.xStart = (var2 - this.maxWidth) / 2;
- this.yStart = -this.textHeight + var1;
- }
-
- int var10000 = var2 - 2 * var1;
- var10000 = var3 - 2 * var1;
- this.resetX();
- this.state = 0;
- var4.setFont(this.font);
- var4.setColor(this.field_1);
- }
-
- public String getUnparsedTextLine() {
- return this.unparsedText;
- }
-
- boolean update(Graphics var1) {
- this.move();
- this.paint(var1);
- return this.state == 3 && this.delayCount <= 0;
- }
-
- void move() {
- boolean var1 = false;
- int var2 = 0;
- switch (this.state) {
- case 0:
- var2 = this.attr.startScroll();
- if (var2 == 0) {
- var1 = true;
- } else if (this.textDisplayed(var2)) {
- var1 = true;
- }
-
- if (!var1) {
- this.moveText(var2);
- this.updateVisible(var2);
- return;
- }
-
- this.updateVisible(var2);
- this.state = 1;
- this.delayCount = this.attr.showDelay();
- case 1:
- if (--this.delayCount >= 0) {
- break;
- }
-
- this.state = 2;
- case 2:
- if (this.updateVisible(this.attr.endScroll()) != 0 && this.attr.endScroll() != 0) {
- this.moveText(this.attr.endScroll());
- return;
- }
-
- this.state = 3;
- this.delayCount = this.attr.endDelay();
- return;
- case 3:
- --this.delayCount;
- return;
- }
-
- }
-
- boolean textDisplayed(int var1) {
- switch (var1) {
- case 1:
- if (this.maxWidth > this.width) {
- if (this.maxWidth + this.xStart < this.width - 4 * this.field_2) {
- return true;
- }
- } else {
- int var4 = this.width / 2;
- int var5 = this.xStart + this.maxWidth / 2;
- if (var5 <= var4) {
- return true;
- }
- }
- break;
- case 2:
- if (this.maxWidth > this.width) {
- if (this.xPos[0] + this.xStart > 4 * this.field_2) {
- return true;
- }
- } else {
- int var2 = this.width / 2;
- int var3 = this.xStart + this.maxWidth / 2;
- if (var3 >= var2) {
- return true;
- }
- }
- break;
- case 3:
- if (this.yStart <= (this.height - this.textHeight) / 2 - this.descent) {
- return true;
- }
- break;
- case 4:
- if (this.yStart >= (this.height - this.textHeight) / 2 - this.descent) {
- return true;
- }
- }
-
- return false;
- }
-
- int updateVisible(int var1) {
- int var2 = 0;
-
- for(int var3 = 0; var3 < this.noOfChars; ++var3) {
- this.visible[var3] = this.xPos[var3] + this.xStart > this.offset && this.xPos[var3] + this.xStart < this.width - this.offset && this.yPos[var3] + this.yStart + this.lineHeight > this.offset && this.yPos[var3] + this.yStart - this.lineHeight < this.height - this.offset;
- if (this.visible[var3]) {
- ++var2;
- }
- }
-
- if (var1 == 5 && var2 <= this.noOfLines * 5) {
- var2 = 0;
- }
-
- return var2;
- }
-
- void moveText(int var1) {
- switch (var1) {
- case 1:
- this.xStart -= this.field_2;
- return;
- case 2:
- this.xStart += this.field_2;
- return;
- case 3:
- this.yStart -= this.field_3;
- return;
- case 4:
- this.yStart += this.field_3;
- return;
- case 5:
- this.moveExplodeText();
- return;
- default:
- }
- }
-
- void moveExplodeText() {
- int var1 = this.noOfChars / 2;
- float var2 = (float)(this.maxWidth / 4);
-
- for(int var3 = 0; var3 < var1; ++var3) {
- float var4 = (float)(var1 - var3) / (float)var1;
- int[] var10000 = this.xPos;
- var10000[var3] -= (int)Math.max((double)(var4 * var2), (double)2.0F);
- }
-
- for(int var6 = var1; var6 < this.noOfChars; ++var6) {
- float var5 = (float)(var6 - var1) / (float)var1;
- int[] var7 = this.xPos;
- var7[var6] += (int)Math.max((double)(var5 * var2), (double)2.0F);
- }
-
- }
-
- void paint(Graphics var1) {
- var1.setColor(this.field_1);
- switch (this.attr.style()) {
- case 1:
- this.paintNervous(var1);
- return;
- case 2:
- this.paintSineWave(var1);
- return;
- default:
- if (this.attr.endScroll() == 5) {
- this.paintExplode(var1);
- } else {
- this.paintNormal(var1);
- }
- }
- }
-
- void paintExplode(Graphics var1) {
- for(int var2 = 0; var2 < this.noOfChars; ++var2) {
- if (this.visible[var2]) {
- this.drawNormalChar(var1, var2);
- }
- }
-
- }
-
- void paintNormal(Graphics var1) {
- switch (this.attr.drawStyle()) {
- case 0:
- for(int var2 = 0; var2 < this.noOfLines; ++var2) {
- this.drawAlignedString(var1, var2, this.xStart, this.yStart + this.ascent + this.lineHeight * var2);
- }
-
- return;
- case 1:
- case 2:
- this.paintEmbossEngrave(var1);
- return;
- case 3:
- this.paintShadow(var1);
- return;
- default:
- }
- }
-
- void paintEmbossEngrave(Graphics var1) {
- if (this.darkBg == null) {
- this.darkBg = FunScrollColorSupport.darker(this.field_0, (double)0.5F);
- this.lightDarkBg = FunScrollColorSupport.darker(this.field_0, (double)0.25F);
- this.brightBg = FunScrollColorSupport.brighter(this.field_0, (double)0.5F);
- }
-
- int var2 = this.attr.drawStyle();
- Color var3 = var2 == 2 ? this.darkBg : this.brightBg;
- Color var4 = var2 == 2 ? this.brightBg : this.darkBg;
- Color var5 = var2 == 2 ? this.lightDarkBg : this.field_0;
-
- for(int var6 = 0; var6 < this.noOfLines; ++var6) {
- this.drawAlignedString(var1, var6, this.xStart, this.yStart + this.ascent + this.lineHeight * var6);
- var1.setColor(var3);
- this.drawAlignedString(var1, var6, this.xStart, this.yStart + this.ascent + this.lineHeight * var6 - 1);
- var1.setColor(var4);
- this.drawAlignedString(var1, var6, this.xStart + 2, this.yStart + this.ascent + this.lineHeight * var6 + 1);
- var1.setColor(var5);
- this.drawAlignedString(var1, var6, this.xStart + 1, this.yStart + this.ascent + this.lineHeight * var6);
- }
-
- }
-
- void paintShadow(Graphics var1) {
- if (this.brightFg == null) {
- this.brightFg = FunScrollColorSupport.brighter(this.field_1, (double)0.75F);
- }
-
- for(int var2 = 0; var2 < this.noOfLines; ++var2) {
- var1.setColor(this.brightFg);
- this.drawAlignedString(var1, var2, this.xStart + 4, this.yStart + this.ascent + this.lineHeight * var2 + 4);
- var1.setColor(this.field_1);
- this.drawAlignedString(var1, var2, this.xStart, this.yStart + this.ascent + this.lineHeight * var2);
- }
-
- }
-
- void drawAlignedString(Graphics var1, int var2, int var3, int var4) {
- switch (this.attr.align()) {
- case 0:
- var3 += (this.maxWidth - this.lineWidths[var2]) / 2;
- case 1:
- default:
- break;
- case 2:
- var3 = this.width - var3 - this.lineWidths[var2];
- }
-
- var1.drawString(this.lines[var2], var3, var4);
- }
-
- void paintSineWave(Graphics var1) {
- int var2 = this.noOfChars > 0 ? this.yPos[0] : 0;
- int var3 = this.sinDegree;
-
- for(int var4 = this.noOfChars - 1; var4 >= 0; --var4) {
- if (var2 != this.yPos[var4]) {
- var2 = this.yPos[var4];
- var3 = this.sinDegree;
- }
-
- if (this.visible[var4]) {
- int var5 = this.lineHeight / 3;
- int var6 = (int)(Math.sin((double)var3 * 3.1414 / (double)180.0F) * (double)var5);
- this.drawChar(var1, var4, this.xPos[var4] + this.xStart, this.yPos[var4] + this.yStart + var6);
- }
-
- var3 -= 15;
- if (var3 <= 0) {
- var3 = 360;
- }
- }
-
- this.sinDegree -= 15;
- if (this.sinDegree <= 0) {
- this.sinDegree = 360;
- }
-
- }
-
- void paintNervous(Graphics var1) {
- for(int var2 = 0; var2 < this.noOfChars; ++var2) {
- if (this.visible[var2]) {
- this.drawNervousChar(var1, var2);
- }
- }
-
- }
-
- void drawNervousChar(Graphics var1, int var2) {
- int var3 = (int)(Math.random() * (double)2.0F) + this.xPos[var2];
- int var4 = (int)(Math.random() * (double)4.0F) + this.yPos[var2];
- this.drawChar(var1, var2, var3 + this.xStart, var4 + this.yStart);
- }
-
- void drawNormalChar(Graphics var1, int var2) {
- this.drawChar(var1, var2, this.xPos[var2] + this.xStart, this.yPos[var2] + this.yStart);
- }
-
- void drawChar(Graphics var1, int var2, int var3, int var4) {
- int var5 = this.attr.drawStyle();
- if (var5 != 0 && var5 != 3) {
- if (this.darkBg == null) {
- this.darkBg = FunScrollColorSupport.darker(this.field_0, (double)0.5F);
- this.lightDarkBg = FunScrollColorSupport.darker(this.field_0, (double)0.25F);
- this.brightBg = FunScrollColorSupport.brighter(this.field_0, (double)0.5F);
- }
-
- Color var6 = var5 == 2 ? this.darkBg : this.brightBg;
- Color var7 = var5 == 2 ? this.brightBg : this.darkBg;
- Color var8 = var5 == 2 ? this.lightDarkBg : this.field_0;
- var1.setColor(var6);
- var1.drawChars(this.chars, var2, 1, var3, var4 - 1);
- var1.setColor(var7);
- var1.drawChars(this.chars, var2, 1, var3 + 2, var4 + 1);
- var1.setColor(var8);
- var1.drawChars(this.chars, var2, 1, var3 + 1, var4);
- } else {
- if (var5 == 3) {
- if (this.brightFg == null) {
- this.brightFg = FunScrollColorSupport.brighter(this.field_1, (double)0.75F);
- }
-
- var1.setColor(this.brightFg);
- var1.drawChars(this.chars, var2, 1, var3 + 4, var4 + 4);
- var1.setColor(this.field_1);
- }
-
- var1.drawChars(this.chars, var2, 1, var3, var4);
- }
- }
- }
-