home *** CD-ROM | disk | FTP | other *** search
/ PC Plus SuperCD (UK) 2000 March / pcp161a.iso / handson / files / copyjava.exe / com / sun / java / swing / RepaintManager.class (.txt) < prev    next >
Encoding:
Java Class File  |  1998-02-26  |  7.4 KB  |  373 lines

  1. package com.sun.java.swing;
  2.  
  3. import java.awt.Component;
  4. import java.awt.Container;
  5. import java.awt.Dimension;
  6. import java.awt.Image;
  7. import java.awt.Rectangle;
  8. import java.awt.Toolkit;
  9. import java.awt.image.ImageObserver;
  10. import java.util.Enumeration;
  11. import java.util.Hashtable;
  12. import java.util.Vector;
  13.  
  14. public class RepaintManager {
  15.    Hashtable dirtyComponents = new Hashtable();
  16.    boolean doubleBufferingEnabled = true;
  17.    Image doubleBuffer;
  18.    Dimension doubleBufferMaxSize = Toolkit.getDefaultToolkit().getScreenSize();
  19.    Vector invalidComponents;
  20.    Timer flushTimer;
  21.    boolean actionPending;
  22.    RepaintListener repaintListener = new RepaintListener(this);
  23.    private static final Object repaintManagerKey;
  24.    // $FF: synthetic field
  25.    static Class class$com$sun$java$swing$RepaintManager;
  26.  
  27.    public static RepaintManager currentManager(JComponent var0) {
  28.       RepaintManager var1 = (RepaintManager)SwingUtilities.appContextGet(repaintManagerKey);
  29.       if (var1 == null) {
  30.          var1 = new RepaintManager();
  31.          SwingUtilities.appContextPut(repaintManagerKey, var1);
  32.       }
  33.  
  34.       return var1;
  35.    }
  36.  
  37.    public static void setCurrentManager(RepaintManager var0) {
  38.       if (var0 != null) {
  39.          SwingUtilities.appContextPut(repaintManagerKey, var0);
  40.       } else {
  41.          SwingUtilities.appContextRemove(repaintManagerKey);
  42.       }
  43.    }
  44.  
  45.    void setupTimer() {
  46.       if (this.flushTimer == null) {
  47.          this.flushTimer = new Timer(0, this.repaintListener);
  48.          this.flushTimer.setRepeats(false);
  49.          this.flushTimer.setCoalesce(true);
  50.       }
  51.  
  52.       if (this.flushTimer.isRunning()) {
  53.          this.flushTimer.stop();
  54.       }
  55.  
  56.       this.flushTimer.start();
  57.    }
  58.  
  59.    public synchronized void addInvalidComponent(JComponent var1) {
  60.       Object var2 = null;
  61.  
  62.       for(Object var3 = var1; var3 != null; var3 = ((Component)var3).getParent()) {
  63.          if (var3 instanceof CellRendererPane) {
  64.             return;
  65.          }
  66.  
  67.          if (var3 instanceof JComponent && ((JComponent)var3).isValidateRoot()) {
  68.             var2 = var3;
  69.          }
  70.       }
  71.  
  72.       if (var2 != null) {
  73.          if (this.invalidComponents == null) {
  74.             this.invalidComponents = new Vector();
  75.          }
  76.  
  77.          int var5 = 0;
  78.  
  79.          for(int var6 = this.invalidComponents.size(); var5 < var6; ++var5) {
  80.             Component var4 = (Component)this.invalidComponents.elementAt(var5);
  81.             if (var4 == var2) {
  82.                return;
  83.             }
  84.          }
  85.  
  86.          this.invalidComponents.addElement(var2);
  87.          if (!this.actionPending) {
  88.             this.actionPending = true;
  89.             this.setupTimer();
  90.          }
  91.       }
  92.  
  93.    }
  94.  
  95.    public synchronized void removeInvalidComponent(JComponent var1) {
  96.       if (this.invalidComponents != null) {
  97.          int var2 = this.invalidComponents.indexOf(var1);
  98.          if (var2 != -1) {
  99.             this.invalidComponents.removeElementAt(var2);
  100.          }
  101.       }
  102.  
  103.    }
  104.  
  105.    public synchronized void addDirtyRegion(JComponent var1, int var2, int var3, int var4, int var5) {
  106.       Rectangle var6 = null;
  107.       if (var4 > 0 && var5 > 0) {
  108.          if (((Component)var1).isShowing()) {
  109.             if (this.dirtyComponents == null) {
  110.                this.dirtyComponents = new Hashtable();
  111.             } else {
  112.                var6 = (Rectangle)this.dirtyComponents.get(var1);
  113.             }
  114.  
  115.             if (var6 == null) {
  116.                var6 = new Rectangle(var2, var3, var4, var5);
  117.                this.dirtyComponents.put(var1, var6);
  118.             } else {
  119.                SwingUtilities.computeUnion(var2, var3, var4, var5, var6);
  120.             }
  121.  
  122.             if (!this.actionPending) {
  123.                this.actionPending = true;
  124.                this.setupTimer();
  125.             }
  126.  
  127.          }
  128.       }
  129.    }
  130.  
  131.    public Rectangle getDirtyRegion(JComponent var1) {
  132.       Rectangle var2 = null;
  133.       synchronized(this){}
  134.  
  135.       try {
  136.          if (this.dirtyComponents != null) {
  137.             var2 = (Rectangle)this.dirtyComponents.get(var1);
  138.          }
  139.       } catch (Throwable var5) {
  140.          throw var5;
  141.       }
  142.  
  143.       return var2 == null ? new Rectangle(0, 0, 0, 0) : new Rectangle(var2);
  144.    }
  145.  
  146.    public void markCompletelyDirty(JComponent var1) {
  147.       this.addDirtyRegion(var1, 0, 0, Integer.MAX_VALUE, Integer.MAX_VALUE);
  148.    }
  149.  
  150.    public void markCompletelyClean(JComponent var1) {
  151.       synchronized(this){}
  152.  
  153.       try {
  154.          if (this.dirtyComponents != null) {
  155.             this.dirtyComponents.remove(var1);
  156.          }
  157.       } catch (Throwable var4) {
  158.          throw var4;
  159.       }
  160.  
  161.    }
  162.  
  163.    public boolean isCompletelyDirty(JComponent var1) {
  164.       Rectangle var2 = this.getDirtyRegion(var1);
  165.       return var2.width == Integer.MAX_VALUE && var2.height == Integer.MAX_VALUE;
  166.    }
  167.  
  168.    public void repaintDirtyRegions() {
  169.       synchronized(this){}
  170.  
  171.       try {
  172.          this.actionPending = false;
  173.          if (this.flushTimer != null) {
  174.             this.flushTimer.stop();
  175.          }
  176.       } catch (Throwable var3) {
  177.          throw var3;
  178.       }
  179.  
  180.       this.validateInvalidComponents();
  181.       this.paintDirtyRegions();
  182.    }
  183.  
  184.    public void validateInvalidComponents() {
  185.       synchronized(this){}
  186.  
  187.       Vector var1;
  188.       try {
  189.          if (this.invalidComponents == null) {
  190.             return;
  191.          }
  192.  
  193.          var1 = this.invalidComponents;
  194.          this.invalidComponents = null;
  195.       } catch (Throwable var7) {
  196.          throw var7;
  197.       }
  198.  
  199.       int var2 = 0;
  200.  
  201.       for(int var3 = var1.size(); var2 < var3; ++var2) {
  202.          ((Component)var1.elementAt(var2)).validate();
  203.       }
  204.  
  205.    }
  206.  
  207.    public void paintDirtyRegions() {
  208.       synchronized(this){}
  209.  
  210.       Hashtable var3;
  211.       try {
  212.          if (this.dirtyComponents == null) {
  213.             return;
  214.          }
  215.  
  216.          var3 = this.dirtyComponents;
  217.          this.dirtyComponents = null;
  218.       } catch (Throwable var10) {
  219.          throw var10;
  220.       }
  221.  
  222.       int var2 = var3.size();
  223.       if (var2 != 0) {
  224.          Vector var4 = new Vector(var2);
  225.          Enumeration var8 = var3.keys();
  226.  
  227.          while(var8.hasMoreElements()) {
  228.             JComponent var5 = (JComponent)var8.nextElement();
  229.             this.collectDirtyComponents(var3, var5, var4);
  230.          }
  231.  
  232.          var2 = var4.size();
  233.  
  234.          for(int var1 = 0; var1 < var2; ++var1) {
  235.             JComponent var12 = (JComponent)var4.elementAt(var1);
  236.             Rectangle var6 = (Rectangle)var3.get(var12);
  237.             Rectangle var7 = ((Component)var12).getBounds();
  238.             var7.x = var7.y = 0;
  239.             var6 = var6.intersection(var7);
  240.             var12.paintImmediately(var6.x, var6.y, var6.width, var6.height);
  241.          }
  242.  
  243.       }
  244.    }
  245.  
  246.    void collectDirtyComponents(Hashtable var1, JComponent var2, Vector var3) {
  247.       boolean var13 = false;
  248.       Object var9 = var2;
  249.       Object var8 = var2;
  250.       Rectangle var12 = var2._bounds;
  251.       int var6 = 0;
  252.       int var4 = 0;
  253.       int var7 = 0;
  254.       int var5 = 0;
  255.       Rectangle var11 = new Rectangle((Rectangle)var1.get(var2));
  256.       SwingUtilities.computeIntersection(0, 0, var12.width, var12.height, var11);
  257.       if (!var11.isEmpty()) {
  258.          if (var2.isOpaque()) {
  259.             var13 = true;
  260.          }
  261.  
  262.          while(true) {
  263.             Container var10 = ((Component)var8).getParent();
  264.             if (var10 == null || !(var10 instanceof JComponent)) {
  265.                if (var2 != var9) {
  266.                   var11.setLocation(var11.x + var6 - var4, var11.y + var7 - var5);
  267.                   Rectangle var14 = (Rectangle)var1.get(var9);
  268.                   SwingUtilities.computeUnion(var11.x, var11.y, var11.width, var11.height, var14);
  269.                }
  270.  
  271.                if (!var3.contains(var9)) {
  272.                   var3.addElement(var9);
  273.                }
  274.  
  275.                return;
  276.             }
  277.  
  278.             var8 = var10;
  279.             if (((JComponent)var10).isOpaque()) {
  280.                var13 = true;
  281.             }
  282.  
  283.             var4 += var12.x;
  284.             var5 += var12.y;
  285.             var11.setLocation(var11.x + var12.x, var11.y + var12.y);
  286.             var12 = ((JComponent)var10)._bounds;
  287.             var11 = SwingUtilities.computeIntersection(0, 0, var12.width, var12.height, var11);
  288.             if (var11.isEmpty()) {
  289.                return;
  290.             }
  291.  
  292.             if (var1.get(var10) != null) {
  293.                var9 = var10;
  294.                var6 = var4;
  295.                var7 = var5;
  296.             }
  297.          }
  298.       }
  299.    }
  300.  
  301.    public synchronized String toString() {
  302.       StringBuffer var1 = new StringBuffer();
  303.       if (this.dirtyComponents != null) {
  304.          var1.append(String.valueOf(this.dirtyComponents));
  305.       }
  306.  
  307.       return var1.toString();
  308.    }
  309.  
  310.    public Image getOffscreenBuffer(Component var1, int var2, int var3) {
  311.       int var4;
  312.       if (var2 > this.doubleBufferMaxSize.width) {
  313.          var4 = this.doubleBufferMaxSize.width;
  314.       } else {
  315.          var4 = var2;
  316.       }
  317.  
  318.       int var5;
  319.       if (var3 > this.doubleBufferMaxSize.height) {
  320.          var5 = this.doubleBufferMaxSize.height;
  321.       } else {
  322.          var5 = var3;
  323.       }
  324.  
  325.       if (this.doubleBuffer != null && (this.doubleBuffer.getWidth((ImageObserver)null) < var4 || this.doubleBuffer.getHeight((ImageObserver)null) < var5)) {
  326.          this.doubleBuffer = null;
  327.       }
  328.  
  329.       if (this.doubleBuffer == null) {
  330.          this.doubleBuffer = var1.createImage(var4, var5);
  331.       }
  332.  
  333.       return this.doubleBuffer;
  334.    }
  335.  
  336.    public void setDoubleBufferMaximumSize(Dimension var1) {
  337.       this.doubleBufferMaxSize = var1;
  338.       if (this.doubleBuffer != null && (this.doubleBuffer.getWidth((ImageObserver)null) > var1.width || this.doubleBuffer.getHeight((ImageObserver)null) > var1.height)) {
  339.          this.doubleBuffer = null;
  340.       }
  341.  
  342.    }
  343.  
  344.    public Dimension getDoubleBufferMaximumSize() {
  345.       return this.doubleBufferMaxSize;
  346.    }
  347.  
  348.    public void setDoubleBufferingEnabled(boolean var1) {
  349.       this.doubleBufferingEnabled = var1;
  350.       if (!this.doubleBufferingEnabled) {
  351.          this.doubleBuffer = null;
  352.       }
  353.  
  354.    }
  355.  
  356.    public boolean isDoubleBufferingEnabled() {
  357.       return this.doubleBufferingEnabled;
  358.    }
  359.  
  360.    // $FF: synthetic method
  361.    static Class class$(String var0) {
  362.       try {
  363.          return Class.forName(var0);
  364.       } catch (ClassNotFoundException var2) {
  365.          throw new NoClassDefFoundError(((Throwable)var2).getMessage());
  366.       }
  367.    }
  368.  
  369.    static {
  370.       repaintManagerKey = class$com$sun$java$swing$RepaintManager != null ? class$com$sun$java$swing$RepaintManager : (class$com$sun$java$swing$RepaintManager = class$("com.sun.java.swing.RepaintManager"));
  371.    }
  372. }
  373.