home *** CD-ROM | disk | FTP | other *** search
/ S283 Planetary Science &… the Search for Life CD 3 / 0_CD-ROM.iso / install / jre1_3 / lib / rt.jar / javax / swing / JViewport.class (.txt) < prev    next >
Encoding:
Java Class File  |  1979-12-31  |  13.2 KB  |  802 lines

  1. package javax.swing;
  2.  
  3. import java.applet.Applet;
  4. import java.awt.Component;
  5. import java.awt.Container;
  6. import java.awt.Dimension;
  7. import java.awt.Graphics;
  8. import java.awt.Image;
  9. import java.awt.Insets;
  10. import java.awt.LayoutManager;
  11. import java.awt.Point;
  12. import java.awt.Rectangle;
  13. import java.awt.Window;
  14. import java.awt.event.ComponentListener;
  15. import java.awt.image.ImageObserver;
  16. import javax.accessibility.Accessible;
  17. import javax.accessibility.AccessibleContext;
  18. import javax.swing.border.Border;
  19. import javax.swing.event.ChangeEvent;
  20. import javax.swing.event.ChangeListener;
  21. import javax.swing.plaf.ViewportUI;
  22.  
  23. public class JViewport extends JComponent implements Accessible {
  24.    private static final String uiClassID = "ViewportUI";
  25.    static final Object EnableWindowBlit = "EnableWindowBlit";
  26.    protected boolean isViewSizeSet = false;
  27.    protected Point lastPaintPosition = null;
  28.    protected boolean backingStore = false;
  29.    protected transient Image backingStoreImage = null;
  30.    protected boolean scrollUnderway = false;
  31.    private ComponentListener viewListener = null;
  32.    private transient ChangeEvent changeEvent = null;
  33.    public static final int BLIT_SCROLL_MODE = 1;
  34.    public static final int BACKINGSTORE_SCROLL_MODE = 2;
  35.    public static final int SIMPLE_SCROLL_MODE = 0;
  36.    private int scrollMode = 1;
  37.    private transient boolean repaintAll;
  38.    private transient boolean waitingForRepaint;
  39.    private transient Timer repaintTimer;
  40.    // $FF: synthetic field
  41.    static Class class$javax$swing$event$ChangeListener;
  42.  
  43.    public JViewport() {
  44.       this.updateUI();
  45.       ((Container)this).setLayout(this.createLayoutManager());
  46.       ((JComponent)this).setOpaque(true);
  47.    }
  48.  
  49.    public ViewportUI getUI() {
  50.       return (ViewportUI)super.ui;
  51.    }
  52.  
  53.    public void setUI(ViewportUI var1) {
  54.       super.setUI(var1);
  55.    }
  56.  
  57.    public void updateUI() {
  58.       this.setUI((ViewportUI)UIManager.getUI(this));
  59.    }
  60.  
  61.    public String getUIClassID() {
  62.       return "ViewportUI";
  63.    }
  64.  
  65.    protected void addImpl(Component var1, Object var2, int var3) {
  66.       this.setView(var1);
  67.    }
  68.  
  69.    public void remove(Component var1) {
  70.       var1.removeComponentListener(this.viewListener);
  71.       super.remove(var1);
  72.    }
  73.  
  74.    public void scrollRectToVisible(Rectangle var1) {
  75.       Component var2 = this.getView();
  76.       if (var2 != null) {
  77.          if (!var2.isValid()) {
  78.             this.validateView();
  79.          }
  80.  
  81.          int var3 = 0;
  82.          int var4 = 0;
  83.          var3 = this.positionAdjustment(((JComponent)this).getWidth(), var1.width, var1.x);
  84.          var4 = this.positionAdjustment(((JComponent)this).getHeight(), var1.height, var1.y);
  85.          if (var3 != 0 || var4 != 0) {
  86.             Point var5 = this.getViewPosition();
  87.             Dimension var6 = var2.getSize();
  88.             int var7 = var5.x;
  89.             int var8 = var5.y;
  90.             Dimension var9 = this.getExtentSize();
  91.             var5.x -= var3;
  92.             if (var5.x + var9.width > var6.width) {
  93.                var5.x = Math.max(0, var6.width - var9.width);
  94.             } else if (var5.x < 0) {
  95.                var5.x = 0;
  96.             }
  97.  
  98.             var5.y -= var4;
  99.             if (var5.y + var9.height > var6.height) {
  100.                var5.y = Math.max(0, var6.height - var9.height);
  101.             } else if (var5.y < 0) {
  102.                var5.y = 0;
  103.             }
  104.  
  105.             if (var5.x != var7 || var5.y != var8) {
  106.                this.setViewPosition(var5);
  107.                this.scrollUnderway = false;
  108.             }
  109.          }
  110.  
  111.       }
  112.    }
  113.  
  114.    private void validateView() {
  115.       Object var1 = null;
  116.       Object var2 = this;
  117.  
  118.       while(true) {
  119.          if (var2 != null) {
  120.             if (var2 instanceof CellRendererPane || ((Component)var2).getPeer() == null) {
  121.                return;
  122.             }
  123.  
  124.             if (!(var2 instanceof JComponent) || !((JComponent)var2).isValidateRoot()) {
  125.                var2 = ((Component)var2).getParent();
  126.                continue;
  127.             }
  128.  
  129.             var1 = var2;
  130.          }
  131.  
  132.          if (var1 == null) {
  133.             return;
  134.          }
  135.  
  136.          Object var3 = null;
  137.          Object var4 = var1;
  138.  
  139.          while(true) {
  140.             if (var4 != null) {
  141.                if (!((Component)var4).isVisible() || ((Component)var4).getPeer() == null) {
  142.                   return;
  143.                }
  144.  
  145.                if (!(var4 instanceof Window) && !(var4 instanceof Applet)) {
  146.                   var4 = ((Component)var4).getParent();
  147.                   continue;
  148.                }
  149.  
  150.                var3 = var4;
  151.             }
  152.  
  153.             if (var3 == null) {
  154.                return;
  155.             }
  156.  
  157.             ((Component)var1).validate();
  158.             RepaintManager var5 = RepaintManager.currentManager(this);
  159.             if (var5 != null) {
  160.                var5.removeInvalidComponent((JComponent)var1);
  161.             }
  162.  
  163.             return;
  164.          }
  165.       }
  166.    }
  167.  
  168.    private int positionAdjustment(int var1, int var2, int var3) {
  169.       if (var3 >= 0 && var2 + var3 <= var1) {
  170.          return 0;
  171.       } else if (var3 <= 0 && var2 + var3 >= var1) {
  172.          return 0;
  173.       } else if (var3 > 0 && var2 <= var1) {
  174.          return -var3 + var1 - var2;
  175.       } else if (var3 >= 0 && var2 >= var1) {
  176.          return -var3;
  177.       } else if (var3 <= 0 && var2 <= var1) {
  178.          return -var3;
  179.       } else {
  180.          return var3 < 0 && var2 >= var1 ? -var3 + var1 - var2 : 0;
  181.       }
  182.    }
  183.  
  184.    public final void setBorder(Border var1) {
  185.       if (var1 != null) {
  186.          throw new IllegalArgumentException("JViewport.setBorder() not supported");
  187.       }
  188.    }
  189.  
  190.    public final Insets getInsets() {
  191.       return new Insets(0, 0, 0, 0);
  192.    }
  193.  
  194.    public final Insets getInsets(Insets var1) {
  195.       var1.left = var1.top = var1.right = var1.bottom = 0;
  196.       return var1;
  197.    }
  198.  
  199.    private Graphics getBackingStoreGraphics(Graphics var1) {
  200.       Graphics var2 = this.backingStoreImage.getGraphics();
  201.       var2.setColor(var1.getColor());
  202.       var2.setFont(var1.getFont());
  203.       var2.setClip(var1.getClipBounds());
  204.       return var2;
  205.    }
  206.  
  207.    private void paintViaBackingStore(Graphics var1) {
  208.       Graphics var2 = this.getBackingStoreGraphics(var1);
  209.  
  210.       try {
  211.          super.paint(var2);
  212.          var1.drawImage(this.backingStoreImage, 0, 0, this);
  213.       } finally {
  214.          var2.dispose();
  215.       }
  216.  
  217.    }
  218.  
  219.    private void paintViaBackingStore(Graphics var1, Rectangle var2) {
  220.       Graphics var3 = this.getBackingStoreGraphics(var1);
  221.  
  222.       try {
  223.          super.paint(var3);
  224.          var1.setClip(var2);
  225.          var1.drawImage(this.backingStoreImage, 0, 0, this);
  226.       } finally {
  227.          var3.dispose();
  228.       }
  229.  
  230.    }
  231.  
  232.    public boolean isOptimizedDrawingEnabled() {
  233.       return false;
  234.    }
  235.  
  236.    private Point getViewLocation() {
  237.       Component var1 = this.getView();
  238.       return var1 != null ? var1.getLocation() : new Point(0, 0);
  239.    }
  240.  
  241.    public void paint(Graphics var1) {
  242.       int var2 = ((JComponent)this).getWidth();
  243.       int var3 = ((JComponent)this).getHeight();
  244.       if (var2 > 0 && var3 > 0) {
  245.          if (this.repaintAll) {
  246.             this.repaintAll = false;
  247.             Rectangle var4 = var1.getClipBounds();
  248.             if (var4.width >= ((JComponent)this).getWidth() && var4.height >= ((JComponent)this).getHeight()) {
  249.                if (this.repaintTimer != null) {
  250.                   this.repaintTimer.stop();
  251.                }
  252.  
  253.                this.waitingForRepaint = false;
  254.             } else {
  255.                this.waitingForRepaint = true;
  256.                if (this.repaintTimer == null) {
  257.                   this.repaintTimer = this.createRepaintTimer();
  258.                }
  259.  
  260.                this.repaintTimer.stop();
  261.                this.repaintTimer.start();
  262.             }
  263.          } else if (this.waitingForRepaint) {
  264.             Rectangle var22 = var1.getClipBounds();
  265.             if (var22.width >= ((JComponent)this).getWidth() && var22.height >= ((JComponent)this).getHeight()) {
  266.                this.waitingForRepaint = false;
  267.                this.repaintTimer.stop();
  268.             }
  269.          }
  270.  
  271.          if (this.backingStore && !this.isBlitting() && this.getView() != null) {
  272.             Rectangle var23 = this.getView().getBounds();
  273.             if (!((JComponent)this).isOpaque()) {
  274.                var1.clipRect(0, 0, var23.width, var23.height);
  275.             }
  276.  
  277.             if (this.backingStoreImage == null) {
  278.                this.backingStoreImage = ((Component)this).createImage(var2, var3);
  279.                Rectangle var5 = var1.getClipBounds();
  280.                if (var5.width == var2 && var5.height == var3) {
  281.                   this.paintViaBackingStore(var1);
  282.                } else {
  283.                   if (!((JComponent)this).isOpaque()) {
  284.                      var1.setClip(0, 0, Math.min(var23.width, var2), Math.min(var23.height, var3));
  285.                   } else {
  286.                      var1.setClip(0, 0, var2, var3);
  287.                   }
  288.  
  289.                   this.paintViaBackingStore(var1, var5);
  290.                }
  291.             } else if (this.scrollUnderway && !this.lastPaintPosition.equals(this.getViewLocation())) {
  292.                Point var24 = new Point();
  293.                Point var6 = new Point();
  294.                Dimension var7 = new Dimension();
  295.                Rectangle var8 = new Rectangle();
  296.                Point var9 = this.getViewLocation();
  297.                int var10 = var9.x - this.lastPaintPosition.x;
  298.                int var11 = var9.y - this.lastPaintPosition.y;
  299.                boolean var12 = this.computeBlit(var10, var11, var24, var6, var7, var8);
  300.                if (!var12) {
  301.                   this.paintViaBackingStore(var1);
  302.                } else {
  303.                   int var13 = var6.x - var24.x;
  304.                   int var14 = var6.y - var24.y;
  305.                   Rectangle var15 = var1.getClipBounds();
  306.                   var1.setClip(0, 0, var2, var3);
  307.                   Graphics var16 = this.getBackingStoreGraphics(var1);
  308.  
  309.                   try {
  310.                      var16.copyArea(var24.x, var24.y, var7.width, var7.height, var13, var14);
  311.                      var1.setClip(var15.x, var15.y, var15.width, var15.height);
  312.                      Rectangle var17 = var23.intersection(var8);
  313.                      var16.setClip(var17);
  314.                      super.paint(var16);
  315.                      var1.drawImage(this.backingStoreImage, 0, 0, this);
  316.                   } finally {
  317.                      var16.dispose();
  318.                   }
  319.                }
  320.             } else {
  321.                this.paintViaBackingStore(var1);
  322.             }
  323.  
  324.             this.lastPaintPosition = this.getViewLocation();
  325.             this.scrollUnderway = false;
  326.          } else {
  327.             super.paint(var1);
  328.             this.lastPaintPosition = this.getViewLocation();
  329.          }
  330.       }
  331.    }
  332.  
  333.    public void reshape(int var1, int var2, int var3, int var4) {
  334.       boolean var5 = ((JComponent)this).getWidth() != var3 || ((JComponent)this).getHeight() != var4;
  335.       if (var5) {
  336.          this.backingStoreImage = null;
  337.       }
  338.  
  339.       super.reshape(var1, var2, var3, var4);
  340.       if (var5) {
  341.          this.fireStateChanged();
  342.       }
  343.  
  344.    }
  345.  
  346.    public void setScrollMode(int var1) {
  347.       this.scrollMode = var1;
  348.       if (var1 == 2) {
  349.          this.backingStore = true;
  350.       } else {
  351.          this.backingStore = false;
  352.       }
  353.  
  354.    }
  355.  
  356.    public int getScrollMode() {
  357.       return this.scrollMode;
  358.    }
  359.  
  360.    public boolean isBackingStoreEnabled() {
  361.       return this.scrollMode == 2;
  362.    }
  363.  
  364.    public void setBackingStoreEnabled(boolean var1) {
  365.       if (var1) {
  366.          this.setScrollMode(2);
  367.       } else {
  368.          this.setScrollMode(1);
  369.       }
  370.  
  371.    }
  372.  
  373.    private final boolean isBlitting() {
  374.       Component var1 = this.getView();
  375.       return this.scrollMode == 1 && var1 instanceof JComponent && ((JComponent)var1).isOpaque();
  376.    }
  377.  
  378.    public Component getView() {
  379.       try {
  380.          return ((Container)this).getComponent(0);
  381.       } catch (ArrayIndexOutOfBoundsException var2) {
  382.          return null;
  383.       }
  384.    }
  385.  
  386.    public void setView(Component var1) {
  387.       int var2 = ((Container)this).getComponentCount();
  388.  
  389.       for(int var3 = var2 - 1; var3 >= 0; --var3) {
  390.          ((Container)this).remove(var3);
  391.       }
  392.  
  393.       this.isViewSizeSet = false;
  394.       if (var1 != null) {
  395.          super.addImpl(var1, (Object)null, -1);
  396.          this.viewListener = this.createViewListener();
  397.          var1.addComponentListener(this.viewListener);
  398.       }
  399.  
  400.       ((JComponent)this).revalidate();
  401.       ((Component)this).repaint();
  402.    }
  403.  
  404.    public Dimension getViewSize() {
  405.       Component var1 = this.getView();
  406.       if (var1 == null) {
  407.          return new Dimension(0, 0);
  408.       } else {
  409.          return this.isViewSizeSet ? var1.getSize() : var1.getPreferredSize();
  410.       }
  411.    }
  412.  
  413.    public void setViewSize(Dimension var1) {
  414.       Component var2 = this.getView();
  415.       if (var2 != null) {
  416.          Dimension var3 = var2.getSize();
  417.          if (!var1.equals(var3)) {
  418.             this.scrollUnderway = false;
  419.             var2.setSize(var1);
  420.             this.isViewSizeSet = true;
  421.             this.fireStateChanged();
  422.          }
  423.       }
  424.  
  425.    }
  426.  
  427.    public Point getViewPosition() {
  428.       Component var1 = this.getView();
  429.       if (var1 != null) {
  430.          Point var2 = var1.getLocation();
  431.          var2.x = -var2.x;
  432.          var2.y = -var2.y;
  433.          return var2;
  434.       } else {
  435.          return new Point(0, 0);
  436.       }
  437.    }
  438.  
  439.    public void setViewPosition(Point var1) {
  440.       Component var2 = this.getView();
  441.       if (var2 != null) {
  442.          int var5 = var1.x;
  443.          int var6 = var1.y;
  444.          int var3;
  445.          int var4;
  446.          if (var2 instanceof JComponent) {
  447.             JComponent var7 = (JComponent)var2;
  448.             var3 = var7.getX();
  449.             var4 = var7.getY();
  450.          } else {
  451.             Rectangle var11 = var2.getBounds();
  452.             var3 = var11.x;
  453.             var4 = var11.y;
  454.          }
  455.  
  456.          int var12 = -var5;
  457.          int var8 = -var6;
  458.          if (var3 != var12 || var4 != var8) {
  459.             if (!this.waitingForRepaint && this.isBlitting() && this.canUseWindowBlitter()) {
  460.                Graphics var9 = ((JComponent)this).getGraphics();
  461.                this.flushViewDirtyRegion(var9);
  462.                var2.setLocation(var12, var8);
  463.                var9.setClip(0, 0, ((JComponent)this).getWidth(), Math.min(((JComponent)this).getHeight(), ((JComponent)var2).getHeight()));
  464.                this.repaintAll = this.windowBlitPaint(var9);
  465.                var9.dispose();
  466.                RepaintManager var10 = RepaintManager.currentManager(this);
  467.                var10.markCompletelyClean((JComponent)((Component)this).getParent());
  468.                var10.markCompletelyClean(this);
  469.                var10.markCompletelyClean((JComponent)var2);
  470.             } else {
  471.                this.scrollUnderway = true;
  472.                var2.setLocation(var12, var8);
  473.                this.repaintAll = false;
  474.             }
  475.  
  476.             this.fireStateChanged();
  477.          }
  478.  
  479.       }
  480.    }
  481.  
  482.    public Rectangle getViewRect() {
  483.       return new Rectangle(this.getViewPosition(), this.getExtentSize());
  484.    }
  485.  
  486.    protected boolean computeBlit(int var1, int var2, Point var3, Point var4, Dimension var5, Rectangle var6) {
  487.       int var7 = Math.abs(var1);
  488.       int var8 = Math.abs(var2);
  489.       Dimension var9 = this.getExtentSize();
  490.       if (var1 == 0 && var2 != 0 && var8 < var9.height) {
  491.          if (var2 < 0) {
  492.             var3.y = -var2;
  493.             var4.y = 0;
  494.             var6.y = var9.height + var2;
  495.          } else {
  496.             var3.y = 0;
  497.             var4.y = var2;
  498.             var6.y = 0;
  499.          }
  500.  
  501.          var6.x = var3.x = var4.x = 0;
  502.          var5.width = var9.width;
  503.          var5.height = var9.height - var8;
  504.          var6.width = var9.width;
  505.          var6.height = var8;
  506.          return true;
  507.       } else if (var2 == 0 && var1 != 0 && var7 < var9.width) {
  508.          if (var1 < 0) {
  509.             var3.x = -var1;
  510.             var4.x = 0;
  511.             var6.x = var9.width + var1;
  512.          } else {
  513.             var3.x = 0;
  514.             var4.x = var1;
  515.             var6.x = 0;
  516.          }
  517.  
  518.          var6.y = var3.y = var4.y = 0;
  519.          var5.width = var9.width - var7;
  520.          var5.height = var9.height;
  521.          var6.y = 0;
  522.          var6.width = var7;
  523.          var6.height = var9.height;
  524.          return true;
  525.       } else {
  526.          return false;
  527.       }
  528.    }
  529.  
  530.    public Dimension getExtentSize() {
  531.       return ((Component)this).getSize();
  532.    }
  533.  
  534.    public Dimension toViewCoordinates(Dimension var1) {
  535.       return new Dimension(var1);
  536.    }
  537.  
  538.    public Point toViewCoordinates(Point var1) {
  539.       return new Point(var1);
  540.    }
  541.  
  542.    public void setExtentSize(Dimension var1) {
  543.       Dimension var2 = this.getExtentSize();
  544.       if (!var1.equals(var2)) {
  545.          ((Component)this).setSize(var1);
  546.          this.fireStateChanged();
  547.       }
  548.  
  549.    }
  550.  
  551.    protected ViewListener createViewListener() {
  552.       return new ViewListener(this);
  553.    }
  554.  
  555.    protected LayoutManager createLayoutManager() {
  556.       return new ViewportLayout();
  557.    }
  558.  
  559.    public void addChangeListener(ChangeListener var1) {
  560.       super.listenerList.add(class$javax$swing$event$ChangeListener == null ? (class$javax$swing$event$ChangeListener = class$("javax.swing.event.ChangeListener")) : class$javax$swing$event$ChangeListener, var1);
  561.    }
  562.  
  563.    public void removeChangeListener(ChangeListener var1) {
  564.       super.listenerList.remove(class$javax$swing$event$ChangeListener == null ? (class$javax$swing$event$ChangeListener = class$("javax.swing.event.ChangeListener")) : class$javax$swing$event$ChangeListener, var1);
  565.    }
  566.  
  567.    protected void fireStateChanged() {
  568.       Object[] var1 = super.listenerList.getListenerList();
  569.  
  570.       for(int var2 = var1.length - 2; var2 >= 0; var2 -= 2) {
  571.          if (var1[var2] == (class$javax$swing$event$ChangeListener == null ? (class$javax$swing$event$ChangeListener = class$("javax.swing.event.ChangeListener")) : class$javax$swing$event$ChangeListener)) {
  572.             if (this.changeEvent == null) {
  573.                this.changeEvent = new ChangeEvent(this);
  574.             }
  575.  
  576.             ((ChangeListener)var1[var2 + 1]).stateChanged(this.changeEvent);
  577.          }
  578.       }
  579.  
  580.    }
  581.  
  582.    public void repaint(long var1, int var3, int var4, int var5, int var6) {
  583.       Container var7 = ((Component)this).getParent();
  584.       if (var7 != null) {
  585.          ((Component)var7).repaint(var1, var3 + ((JComponent)this).getX(), var4 + ((JComponent)this).getY(), var5, var6);
  586.       } else {
  587.          super.repaint(var1, var3, var4, var5, var6);
  588.       }
  589.  
  590.    }
  591.  
  592.    protected String paramString() {
  593.       String var1 = this.isViewSizeSet ? "true" : "false";
  594.       String var2 = this.lastPaintPosition != null ? this.lastPaintPosition.toString() : "";
  595.       String var3 = this.scrollUnderway ? "true" : "false";
  596.       return super.paramString() + ",isViewSizeSet=" + var1 + ",lastPaintPosition=" + var2 + ",scrollUnderway=" + var3;
  597.    }
  598.  
  599.    protected void firePropertyChange(String var1, Object var2, Object var3) {
  600.       super.firePropertyChange(var1, var2, var3);
  601.       if (var1.equals(EnableWindowBlit)) {
  602.          if (var3 != null) {
  603.             this.setScrollMode(1);
  604.          } else {
  605.             this.setScrollMode(0);
  606.          }
  607.       }
  608.  
  609.    }
  610.  
  611.    private Timer createRepaintTimer() {
  612.       Timer var1 = new Timer(300, new 1(this));
  613.       var1.setRepeats(false);
  614.       return var1;
  615.    }
  616.  
  617.    private void flushViewDirtyRegion(Graphics var1) {
  618.       RepaintManager var2 = RepaintManager.currentManager(this);
  619.       JComponent var3 = (JComponent)this.getView();
  620.       Rectangle var4 = var2.getDirtyRegion(var3);
  621.       if (var4 != null && var4.width > 0 && var4.height > 0) {
  622.          var4.x += var3.getX();
  623.          var4.y += var3.getY();
  624.          Rectangle var5 = var1.getClipBounds();
  625.          if (var5 == null) {
  626.             var1.setClip(0, 0, ((JComponent)this).getWidth(), ((JComponent)this).getHeight());
  627.          }
  628.  
  629.          var1.clipRect(var4.x, var4.y, var4.width, var4.height);
  630.          this.paintView(var1);
  631.       }
  632.  
  633.    }
  634.  
  635.    private boolean windowBlitPaint(Graphics var1) {
  636.       int var2 = ((JComponent)this).getWidth();
  637.       int var3 = ((JComponent)this).getHeight();
  638.       if (var2 != 0 && var3 != 0) {
  639.          RepaintManager var5 = RepaintManager.currentManager(this);
  640.          JComponent var6 = (JComponent)this.getView();
  641.          boolean var4;
  642.          if (this.lastPaintPosition != null && !this.lastPaintPosition.equals(this.getViewLocation())) {
  643.             Point var7 = new Point();
  644.             Point var8 = new Point();
  645.             Dimension var9 = new Dimension();
  646.             Rectangle var10 = new Rectangle();
  647.             Point var11 = this.getViewLocation();
  648.             int var12 = var11.x - this.lastPaintPosition.x;
  649.             int var13 = var11.y - this.lastPaintPosition.y;
  650.             boolean var14 = this.computeBlit(var12, var13, var7, var8, var9, var10);
  651.             if (!var14) {
  652.                this.paintView(var1);
  653.                var4 = false;
  654.             } else {
  655.                boolean var15 = var5.isDoubleBufferingEnabled();
  656.                int var16 = var8.x - var7.x;
  657.                int var17 = var8.y - var7.y;
  658.                Rectangle var18 = ((Component)var6).getBounds().intersection(var10);
  659.                var18.x -= var6.getX();
  660.                var18.y -= var6.getY();
  661.                Image var19 = var5.getOffscreenBuffer(this, ((JComponent)this).getWidth(), ((JComponent)this).getHeight());
  662.                Graphics var20 = var19.getGraphics();
  663.                var20.translate(-var18.x, -var18.y);
  664.                var20.setClip(var18.x, var18.y, var18.width, var18.height);
  665.                var5.setDoubleBufferingEnabled(false);
  666.                var6.paint(var20);
  667.                var5.setDoubleBufferingEnabled(var15);
  668.                this.blitWindowGraphics(var7.x, var7.y, var9.width, var9.height, var16, var17);
  669.                var18.x += var6.getX();
  670.                var18.y += var6.getY();
  671.                var1.setClip(var18.x, var18.y, var18.width, var18.height);
  672.                var1.drawImage(var19, var18.x, var18.y, (ImageObserver)null);
  673.                var20.dispose();
  674.                var4 = true;
  675.             }
  676.          } else {
  677.             this.paintView(var1);
  678.             var4 = false;
  679.          }
  680.  
  681.          this.lastPaintPosition = this.getViewLocation();
  682.          return var4;
  683.       } else {
  684.          return false;
  685.       }
  686.    }
  687.  
  688.    private void paintView(Graphics var1) {
  689.       Rectangle var2 = var1.getClipBounds();
  690.       RepaintManager var3 = RepaintManager.currentManager(this);
  691.       boolean var4 = var3.isDoubleBufferingEnabled();
  692.       JComponent var5 = (JComponent)this.getView();
  693.       var2.x -= var5.getX();
  694.       var2.y -= var5.getY();
  695.       Image var6 = var3.getOffscreenBuffer(this, var2.width, var2.height);
  696.       Graphics var7 = var6.getGraphics();
  697.       var7.translate(-var2.x, -var2.y);
  698.       var7.setClip(var2.x, var2.y, var2.width, var2.height);
  699.       var3.setDoubleBufferingEnabled(false);
  700.       var5.paint(var7);
  701.       if (var4) {
  702.          var3.setDoubleBufferingEnabled(true);
  703.       }
  704.  
  705.       var1.drawImage(var6, var2.x + var5.getX(), var2.y + var5.getY(), (ImageObserver)null);
  706.       var7.dispose();
  707.    }
  708.  
  709.    private void blitWindowGraphics(int var1, int var2, int var3, int var4, int var5, int var6) {
  710.       Container var7;
  711.       for(var7 = ((Component)this).getParent(); JComponent.isLightweightComponent(var7); var7 = ((Component)var7).getParent()) {
  712.       }
  713.  
  714.       Graphics var8 = ((Component)var7).getGraphics();
  715.       Rectangle var9 = new Rectangle(var1, var2, var3, var4);
  716.       var9 = SwingUtilities.convertRectangle(this, var9, var7);
  717.       var8.copyArea(var9.x, var9.y, var9.width, var9.height, var5, var6);
  718.       var8.dispose();
  719.    }
  720.  
  721.    private boolean canUseWindowBlitter() {
  722.       if (((Component)this).isShowing() && (((Component)this).getParent() instanceof JComponent || this.getView() instanceof JComponent)) {
  723.          Rectangle var1 = new Rectangle(0, 0, ((JComponent)this).getWidth(), ((JComponent)this).getHeight());
  724.          Rectangle var2 = new Rectangle();
  725.          Object var6 = null;
  726.  
  727.          Object var5;
  728.          for(var5 = this; var5 != null && JComponent.isLightweightComponent((Component)var5); var5 = ((Component)var5).getParent()) {
  729.             Rectangle var4;
  730.             if (var5 instanceof JComponent) {
  731.                var4 = ((JComponent)var5)._bounds;
  732.             } else {
  733.                var4 = ((Component)var5).getBounds();
  734.             }
  735.  
  736.             var2.setBounds(var1);
  737.             SwingUtilities.computeIntersection(0, 0, var4.width, var4.height, var1);
  738.             if (!var1.equals(var2)) {
  739.                return false;
  740.             }
  741.  
  742.             if (var6 != null && var5 instanceof JComponent && !((JComponent)var5).isOptimizedDrawingEnabled()) {
  743.                Component[] var7 = ((Container)var5).getComponents();
  744.                int var8 = 0;
  745.  
  746.                for(int var9 = var7.length - 1; var9 >= 0; --var9) {
  747.                   if (var7[var9] == var6) {
  748.                      var8 = var9 - 1;
  749.                      break;
  750.                   }
  751.                }
  752.  
  753.                while(var8 >= 0) {
  754.                   Rectangle var3;
  755.                   if (var7[var8] instanceof JComponent) {
  756.                      var3 = ((JComponent)var7[var8])._bounds;
  757.                   } else {
  758.                      var3 = var7[var8].getBounds();
  759.                   }
  760.  
  761.                   if (var3.intersects(var1)) {
  762.                      return false;
  763.                   }
  764.  
  765.                   --var8;
  766.                }
  767.             }
  768.  
  769.             var1.x += var4.x;
  770.             var1.y += var4.y;
  771.             var6 = var5;
  772.          }
  773.  
  774.          return var5 != null;
  775.       } else {
  776.          return false;
  777.       }
  778.    }
  779.  
  780.    public AccessibleContext getAccessibleContext() {
  781.       if (super.accessibleContext == null) {
  782.          super.accessibleContext = new AccessibleJViewport(this);
  783.       }
  784.  
  785.       return super.accessibleContext;
  786.    }
  787.  
  788.    // $FF: synthetic method
  789.    static Class class$(String var0) {
  790.       try {
  791.          return Class.forName(var0);
  792.       } catch (ClassNotFoundException var2) {
  793.          throw new NoClassDefFoundError(((Throwable)var2).getMessage());
  794.       }
  795.    }
  796.  
  797.    // $FF: synthetic method
  798.    static boolean access$000(JViewport var0) {
  799.       return var0.waitingForRepaint;
  800.    }
  801. }
  802.