home *** CD-ROM | disk | FTP | other *** search
- package javax.swing.text.html;
-
- import java.awt.Component;
- import java.awt.Graphics;
- import java.awt.Rectangle;
- import java.io.Serializable;
- import javax.swing.ImageIcon;
- import javax.swing.text.AttributeSet;
- import javax.swing.text.View;
- import javax.swing.text.html.CSS.Attribute;
- import javax.swing.text.html.CSS.Value;
-
- class StyleSheet$BackgroundImagePainter implements Serializable {
- ImageIcon backgroundImage;
- float hPosition;
- float vPosition;
- short flags;
- private int paintX;
- private int paintY;
- private int paintMaxX;
- private int paintMaxY;
-
- StyleSheet$BackgroundImagePainter(AttributeSet var1, CSS var2, StyleSheet var3) {
- this.backgroundImage = var3.getBackgroundImage(var1);
- CSS.BackgroundPosition var4 = (CSS.BackgroundPosition)var1.getAttribute(Attribute.BACKGROUND_POSITION);
- if (var4 != null) {
- this.hPosition = var4.getHorizontalPosition();
- this.vPosition = var4.getVerticalPosition();
- if (var4.isHorizontalPositionRelativeToSize()) {
- this.flags = (short)(this.flags | 4);
- } else if (var4.isHorizontalPositionRelativeToSize()) {
- this.hPosition *= (float)CSS.getFontSize(var1, 12);
- }
-
- if (var4.isVerticalPositionRelativeToSize()) {
- this.flags = (short)(this.flags | 8);
- } else if (var4.isVerticalPositionRelativeToFontSize()) {
- this.vPosition *= (float)CSS.getFontSize(var1, 12);
- }
- }
-
- CSS.Value var5 = (CSS.Value)var1.getAttribute(Attribute.BACKGROUND_REPEAT);
- if (var5 != null && var5 != Value.BACKGROUND_REPEAT) {
- if (var5 == Value.BACKGROUND_REPEAT_X) {
- this.flags = (short)(this.flags | 1);
- } else if (var5 == Value.BACKGROUND_REPEAT_Y) {
- this.flags = (short)(this.flags | 2);
- }
- } else {
- this.flags = (short)(this.flags | 3);
- }
-
- }
-
- void paint(Graphics var1, float var2, float var3, float var4, float var5, View var6) {
- Rectangle var7 = var1.getClipRect();
- if (var7 != null) {
- var1.clipRect((int)var2, (int)var3, (int)var4, (int)var5);
- }
-
- if ((this.flags & 3) == 0) {
- int var8 = this.backgroundImage.getIconWidth();
- int var9 = this.backgroundImage.getIconWidth();
- if ((this.flags & 4) == 4) {
- this.paintX = (int)(var2 + var4 * this.hPosition - (float)var8 * this.hPosition);
- } else {
- this.paintX = (int)var2 + (int)this.hPosition;
- }
-
- if ((this.flags & 8) == 8) {
- this.paintY = (int)(var3 + var5 * this.vPosition - (float)var9 * this.vPosition);
- } else {
- this.paintY = (int)var3 + (int)this.vPosition;
- }
-
- if (var7 == null || this.paintX + var8 > var7.x && this.paintY + var9 > var7.y && this.paintX < var7.x + var7.width && this.paintY < var7.y + var7.height) {
- this.backgroundImage.paintIcon((Component)null, var1, this.paintX, this.paintY);
- }
- } else {
- int var11 = this.backgroundImage.getIconWidth();
- int var12 = this.backgroundImage.getIconHeight();
- if (var11 > 0 && var12 > 0) {
- this.paintX = (int)var2;
- this.paintY = (int)var3;
- this.paintMaxX = (int)(var2 + var4);
- this.paintMaxY = (int)(var3 + var5);
- if (this.updatePaintCoordinates(var7, var11, var12)) {
- while(this.paintX < this.paintMaxX) {
- for(int var10 = this.paintY; var10 < this.paintMaxY; var10 += var12) {
- this.backgroundImage.paintIcon((Component)null, var1, this.paintX, var10);
- }
-
- this.paintX += var11;
- }
- }
- }
- }
-
- if (var7 != null) {
- var1.setClip(var7.x, var7.y, var7.width, var7.height);
- }
-
- }
-
- private boolean updatePaintCoordinates(Rectangle var1, int var2, int var3) {
- if ((this.flags & 3) == 1) {
- this.paintMaxY = this.paintY + 1;
- } else if ((this.flags & 3) == 2) {
- this.paintMaxX = this.paintX + 1;
- }
-
- if (var1 != null) {
- if ((this.flags & 3) == 1 && (this.paintY + var3 <= var1.y || this.paintY > var1.y + var1.height)) {
- return false;
- }
-
- if ((this.flags & 3) == 2 && (this.paintX + var2 <= var1.x || this.paintX > var1.x + var1.width)) {
- return false;
- }
-
- if ((this.flags & 1) == 1) {
- if (var1.x + var1.width < this.paintMaxX) {
- if ((var1.x + var1.width - this.paintX) % var2 == 0) {
- this.paintMaxX = var1.x + var1.width;
- } else {
- this.paintMaxX = ((var1.x + var1.width - this.paintX) / var2 + 1) * var2 + this.paintX;
- }
- }
-
- if (var1.x > this.paintX) {
- this.paintX += (var1.x - this.paintX) / var2 * var2;
- }
- }
-
- if ((this.flags & 2) == 2) {
- if (var1.y + var1.height < this.paintMaxY) {
- if ((var1.y + var1.height - this.paintY) % var3 == 0) {
- this.paintMaxY = var1.y + var1.height;
- } else {
- this.paintMaxY = ((var1.y + var1.height - this.paintY) / var3 + 1) * var3 + this.paintY;
- }
- }
-
- if (var1.y > this.paintY) {
- this.paintY += (var1.y - this.paintY) / var3 * var3;
- }
- }
- }
-
- return true;
- }
- }
-