home *** CD-ROM | disk | FTP | other *** search
/ Sky at Night 2007 June / SAN CD 6-2007 CD-ROM 25.iso / pc / Software / AstroGrav_Win / Java / jre1.6.0 / lib / rt.jar / sun / awt / RepaintArea.class (.txt) < prev    next >
Encoding:
Java Class File  |  2006-11-29  |  2.8 KB  |  204 lines

  1. package sun.awt;
  2.  
  3. import java.awt.Component;
  4. import java.awt.Graphics;
  5. import java.awt.Rectangle;
  6.  
  7. public class RepaintArea {
  8.    private static final int MAX_BENEFIT_RATIO = 4;
  9.    private static final int HORIZONTAL = 0;
  10.    private static final int VERTICAL = 1;
  11.    private static final int UPDATE = 2;
  12.    private static final int RECT_COUNT = 3;
  13.    private Rectangle[] paintRects = new Rectangle[3];
  14.  
  15.    public RepaintArea() {
  16.    }
  17.  
  18.    private RepaintArea(RepaintArea var1) {
  19.       for(int var2 = 0; var2 < 3; ++var2) {
  20.          this.paintRects[var2] = var1.paintRects[var2];
  21.       }
  22.  
  23.    }
  24.  
  25.    public synchronized void add(Rectangle var1, int var2) {
  26.       if (!var1.isEmpty()) {
  27.          int var3 = 2;
  28.          if (var2 == 800) {
  29.             var3 = var1.width > var1.height ? 0 : 1;
  30.          }
  31.  
  32.          if (this.paintRects[var3] != null) {
  33.             this.paintRects[var3].add(var1);
  34.          } else {
  35.             this.paintRects[var3] = new Rectangle(var1);
  36.          }
  37.  
  38.       }
  39.    }
  40.  
  41.    private synchronized RepaintArea cloneAndReset() {
  42.       RepaintArea var1 = new RepaintArea(this);
  43.  
  44.       for(int var2 = 0; var2 < 3; ++var2) {
  45.          this.paintRects[var2] = null;
  46.       }
  47.  
  48.       return var1;
  49.    }
  50.  
  51.    public boolean isEmpty() {
  52.       for(int var1 = 0; var1 < 3; ++var1) {
  53.          if (this.paintRects[var1] != null) {
  54.             return false;
  55.          }
  56.       }
  57.  
  58.       return true;
  59.    }
  60.  
  61.    public synchronized void constrain(int var1, int var2, int var3, int var4) {
  62.       for(int var5 = 0; var5 < 3; ++var5) {
  63.          Rectangle var6 = this.paintRects[var5];
  64.          if (var6 != null) {
  65.             if (var6.x < var1) {
  66.                var6.width -= var1 - var6.x;
  67.                var6.x = var1;
  68.             }
  69.  
  70.             if (var6.y < var2) {
  71.                var6.height -= var2 - var6.y;
  72.                var6.y = var2;
  73.             }
  74.  
  75.             int var7 = var6.x + var6.width - var1 - var3;
  76.             if (var7 > 0) {
  77.                var6.width -= var7;
  78.             }
  79.  
  80.             int var8 = var6.y + var6.height - var2 - var4;
  81.             if (var8 > 0) {
  82.                var6.height -= var8;
  83.             }
  84.  
  85.             if (var6.width <= 0 || var6.height <= 0) {
  86.                this.paintRects[var5] = null;
  87.             }
  88.          }
  89.       }
  90.  
  91.    }
  92.  
  93.    public synchronized void subtract(int var1, int var2, int var3, int var4) {
  94.       Rectangle var5 = new Rectangle(var1, var2, var3, var4);
  95.  
  96.       for(int var6 = 0; var6 < 3; ++var6) {
  97.          if (subtract(this.paintRects[var6], var5) && this.paintRects[var6] != null && this.paintRects[var6].isEmpty()) {
  98.             this.paintRects[var6] = null;
  99.          }
  100.       }
  101.  
  102.    }
  103.  
  104.    public void paint(Object var1, boolean var2) {
  105.       Component var3 = (Component)var1;
  106.       if (!this.isEmpty()) {
  107.          if (var3.isVisible()) {
  108.             RepaintArea var4 = this.cloneAndReset();
  109.             if (!subtract(var4.paintRects[1], var4.paintRects[0])) {
  110.                subtract(var4.paintRects[0], var4.paintRects[1]);
  111.             }
  112.  
  113.             if (var4.paintRects[0] != null && var4.paintRects[1] != null) {
  114.                Rectangle var5 = var4.paintRects[0].union(var4.paintRects[1]);
  115.                int var6 = var5.width * var5.height;
  116.                int var7 = var6 - var4.paintRects[0].width * var4.paintRects[0].height - var4.paintRects[1].width * var4.paintRects[1].height;
  117.                if (4 * var7 < var6) {
  118.                   var4.paintRects[0] = var5;
  119.                   var4.paintRects[1] = null;
  120.                }
  121.             }
  122.  
  123.             for(int var11 = 0; var11 < this.paintRects.length; ++var11) {
  124.                if (var4.paintRects[var11] != null && !var4.paintRects[var11].isEmpty()) {
  125.                   Graphics var12 = var3.getGraphics();
  126.                   if (var12 != null) {
  127.                      try {
  128.                         var12.setClip(var4.paintRects[var11]);
  129.                         if (var11 == 2) {
  130.                            this.updateComponent(var3, var12);
  131.                         } else {
  132.                            if (var2) {
  133.                               var12.clearRect(var4.paintRects[var11].x, var4.paintRects[var11].y, var4.paintRects[var11].width, var4.paintRects[var11].height);
  134.                            }
  135.  
  136.                            this.paintComponent(var3, var12);
  137.                         }
  138.                      } finally {
  139.                         var12.dispose();
  140.                      }
  141.                   }
  142.                }
  143.             }
  144.  
  145.          }
  146.       }
  147.    }
  148.  
  149.    protected void updateComponent(Component var1, Graphics var2) {
  150.       if (var1 != null) {
  151.          var1.update(var2);
  152.       }
  153.  
  154.    }
  155.  
  156.    protected void paintComponent(Component var1, Graphics var2) {
  157.       if (var1 != null) {
  158.          var1.paint(var2);
  159.       }
  160.  
  161.    }
  162.  
  163.    static boolean subtract(Rectangle var0, Rectangle var1) {
  164.       if (var0 != null && var1 != null) {
  165.          Rectangle var2 = var0.intersection(var1);
  166.          if (var2.isEmpty()) {
  167.             return true;
  168.          } else {
  169.             if (var0.x == var2.x && var0.y == var2.y) {
  170.                if (var0.width == var2.width) {
  171.                   var0.y += var2.height;
  172.                   var0.height -= var2.height;
  173.                   return true;
  174.                }
  175.  
  176.                if (var0.height == var2.height) {
  177.                   var0.x += var2.width;
  178.                   var0.width -= var2.width;
  179.                   return true;
  180.                }
  181.             } else if (var0.x + var0.width == var2.x + var2.width && var0.y + var0.height == var2.y + var2.height) {
  182.                if (var0.width == var2.width) {
  183.                   var0.height -= var2.height;
  184.                   return true;
  185.                }
  186.  
  187.                if (var0.height == var2.height) {
  188.                   var0.width -= var2.width;
  189.                   return true;
  190.                }
  191.             }
  192.  
  193.             return false;
  194.          }
  195.       } else {
  196.          return true;
  197.       }
  198.    }
  199.  
  200.    public String toString() {
  201.       return super.toString() + "[ horizontal=" + this.paintRects[0] + " vertical=" + this.paintRects[1] + " update=" + this.paintRects[2] + "]";
  202.    }
  203. }
  204.