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

  1. package com.sun.java.swing;
  2.  
  3. import com.sun.java.accessibility.Accessible;
  4. import com.sun.java.accessibility.AccessibleContext;
  5. import com.sun.java.swing.border.Border;
  6. import com.sun.java.swing.event.ChangeEvent;
  7. import com.sun.java.swing.event.ChangeListener;
  8. import java.awt.Component;
  9. import java.awt.Container;
  10. import java.awt.Dimension;
  11. import java.awt.Graphics;
  12. import java.awt.Image;
  13. import java.awt.Insets;
  14. import java.awt.LayoutManager;
  15. import java.awt.Point;
  16. import java.awt.Rectangle;
  17. import java.awt.event.ComponentListener;
  18.  
  19. public class JViewport extends JComponent implements Accessible {
  20.    protected boolean isViewSizeSet = false;
  21.    protected Point lastPaintPosition;
  22.    protected boolean backingStore = false;
  23.    protected transient Image backingStoreImage;
  24.    protected boolean scrollUnderway = false;
  25.    private ComponentListener viewListener;
  26.    private transient ChangeEvent changeEvent;
  27.    // $FF: synthetic field
  28.    static Class class$com$sun$java$swing$event$ChangeListener;
  29.  
  30.    public JViewport() {
  31.       ((Container)this).setLayout(this.createLayoutManager());
  32.    }
  33.  
  34.    protected void addImpl(Component var1, Object var2, int var3) {
  35.       this.setView(var1);
  36.    }
  37.  
  38.    public void remove(Component var1) {
  39.       var1.removeComponentListener(this.viewListener);
  40.       super.remove(var1);
  41.    }
  42.  
  43.    public void scrollRectToVisible(Rectangle var1) {
  44.       Component var2 = this.getView();
  45.       if (var2 != null) {
  46.          int var3 = 0;
  47.          int var4 = 0;
  48.          Rectangle var5 = ((Component)this).getBounds();
  49.          var3 = this.positionAdjustment(var5.width, var1.width, var1.x);
  50.          var4 = this.positionAdjustment(var5.height, var1.height, var1.y);
  51.          if (var3 != 0 || var4 != 0) {
  52.             Point var6 = this.getViewPosition();
  53.             this.setViewPosition(new Point(var6.x - var3, var6.y - var4));
  54.             this.scrollUnderway = false;
  55.          }
  56.  
  57.       }
  58.    }
  59.  
  60.    private int positionAdjustment(int var1, int var2, int var3) {
  61.       if (var3 >= 0 && var2 + var3 <= var1) {
  62.          return 0;
  63.       } else if (var3 <= 0 && var2 + var3 >= var1) {
  64.          return 0;
  65.       } else if (var3 > 0 && var2 <= var1) {
  66.          return -var3 + var1 - var2;
  67.       } else if (var3 >= 0 && var2 >= var1) {
  68.          return -var3;
  69.       } else if (var3 <= 0 && var2 <= var1) {
  70.          return -var3;
  71.       } else {
  72.          return var3 < 0 && var2 >= var1 ? -var3 + var1 - var2 : 0;
  73.       }
  74.    }
  75.  
  76.    public final void setBorder(Border var1) {
  77.       if (var1 != null) {
  78.          throw new IllegalArgumentException("JViewport.setBorder() not supported");
  79.       }
  80.    }
  81.  
  82.    public final Insets getInsets() {
  83.       return new Insets(0, 0, 0, 0);
  84.    }
  85.  
  86.    private Graphics getBackingStoreGraphics(Graphics var1) {
  87.       Graphics var2 = this.backingStoreImage.getGraphics();
  88.       var2.setColor(var1.getColor());
  89.       var2.setFont(var1.getFont());
  90.       var2.setClip(var1.getClipBounds());
  91.       return var2;
  92.    }
  93.  
  94.    private void paintViaBackingStore(Graphics var1) {
  95.       Graphics var2 = this.getBackingStoreGraphics(var1);
  96.       super.paint(var2);
  97.       var1.drawImage(this.backingStoreImage, 0, 0, this);
  98.    }
  99.  
  100.    public boolean isOptimizedDrawingEnabled() {
  101.       return false;
  102.    }
  103.  
  104.    public void paint(Graphics var1) {
  105.       int var2 = ((JComponent)this).getWidth();
  106.       int var3 = ((JComponent)this).getHeight();
  107.       if (var2 != 0 && var3 != 0) {
  108.          if (!this.backingStore) {
  109.             super.paint(var1);
  110.             this.lastPaintPosition = this.getViewLocation();
  111.          } else {
  112.             if (this.backingStoreImage == null) {
  113.                this.backingStoreImage = ((Component)this).createImage(var2, var3);
  114.                this.paintViaBackingStore(var1);
  115.             } else if (this.scrollUnderway && !this.lastPaintPosition.equals(this.getViewLocation())) {
  116.                Point var4 = new Point();
  117.                Point var5 = new Point();
  118.                Dimension var6 = new Dimension();
  119.                Rectangle var7 = new Rectangle();
  120.                Point var8 = this.getViewLocation();
  121.                int var9 = var8.x - this.lastPaintPosition.x;
  122.                int var10 = var8.y - this.lastPaintPosition.y;
  123.                boolean var11 = this.computeBlit(var9, var10, var4, var5, var6, var7);
  124.                if (!var11) {
  125.                   this.paintViaBackingStore(var1);
  126.                } else {
  127.                   int var12 = var5.x - var4.x;
  128.                   int var13 = var5.y - var4.y;
  129.                   Graphics var14 = this.getBackingStoreGraphics(var1);
  130.                   var14.copyArea(var4.x, var4.y, var6.width, var6.height, var12, var13);
  131.                   Rectangle var15 = this.getView().getBounds().intersection(var7);
  132.                   var14.setClip(var15);
  133.                   super.paint(var14);
  134.                   var1.drawImage(this.backingStoreImage, 0, 0, this);
  135.                }
  136.             } else {
  137.                this.paintViaBackingStore(var1);
  138.             }
  139.  
  140.             this.lastPaintPosition = this.getViewLocation();
  141.             this.scrollUnderway = false;
  142.          }
  143.       }
  144.    }
  145.  
  146.    public void setBounds(int var1, int var2, int var3, int var4) {
  147.       Dimension var5 = ((Component)this).getSize();
  148.       if (var5.width != var3 || var5.height != var4) {
  149.          this.backingStoreImage = null;
  150.       }
  151.  
  152.       super.setBounds(var1, var2, var3, var4);
  153.    }
  154.  
  155.    public boolean isBackingStoreEnabled() {
  156.       return this.backingStore;
  157.    }
  158.  
  159.    public void setBackingStoreEnabled(boolean var1) {
  160.       this.backingStore = var1;
  161.    }
  162.  
  163.    public Component getView() {
  164.       return ((Container)this).getComponentCount() > 0 ? ((Container)this).getComponent(0) : null;
  165.    }
  166.  
  167.    public void setView(Component var1) {
  168.       int var2 = ((Container)this).getComponentCount();
  169.  
  170.       for(int var3 = var2 - 1; var3 >= 0; --var3) {
  171.          ((Container)this).remove(var3);
  172.       }
  173.  
  174.       this.isViewSizeSet = false;
  175.       if (var1 != null) {
  176.          super.addImpl(var1, (Object)null, -1);
  177.          this.viewListener = this.createViewListener();
  178.          var1.addComponentListener(this.viewListener);
  179.       }
  180.  
  181.    }
  182.  
  183.    public Dimension getViewSize() {
  184.       Component var1 = this.getView();
  185.       if (var1 == null) {
  186.          return new Dimension(0, 0);
  187.       } else {
  188.          return this.isViewSizeSet ? var1.getSize() : var1.getPreferredSize();
  189.       }
  190.    }
  191.  
  192.    public void setViewSize(Dimension var1) {
  193.       Component var2 = this.getView();
  194.       if (var2 != null) {
  195.          Dimension var3 = var2.getSize();
  196.          if (!var1.equals(var3)) {
  197.             var2.setSize(var1);
  198.             this.isViewSizeSet = true;
  199.             this.fireStateChanged();
  200.          }
  201.       }
  202.  
  203.    }
  204.  
  205.    public Point getViewPosition() {
  206.       Component var1 = this.getView();
  207.       if (var1 != null) {
  208.          Point var2 = var1.getLocation();
  209.          var2.x = -var2.x;
  210.          var2.y = -var2.y;
  211.          return var2;
  212.       } else {
  213.          return new Point(0, 0);
  214.       }
  215.    }
  216.  
  217.    private Point getViewLocation() {
  218.       Component var1 = this.getView();
  219.       return var1 != null ? var1.getLocation() : new Point(0, 0);
  220.    }
  221.  
  222.    public void setViewPosition(Point var1) {
  223.       Component var2 = this.getView();
  224.       if (var2 != null) {
  225.          var1 = new Point(-var1.x, -var1.y);
  226.          if (!var1.equals(var2.getLocation())) {
  227.             this.scrollUnderway = true;
  228.             var2.setLocation(var1);
  229.             this.fireStateChanged();
  230.          }
  231.       }
  232.  
  233.    }
  234.  
  235.    public Rectangle getViewRect() {
  236.       return new Rectangle(this.getViewPosition(), this.getExtentSize());
  237.    }
  238.  
  239.    protected boolean computeBlit(int var1, int var2, Point var3, Point var4, Dimension var5, Rectangle var6) {
  240.       int var7 = Math.abs(var1);
  241.       int var8 = Math.abs(var2);
  242.       Dimension var9 = this.getExtentSize();
  243.       if (var1 == 0 && var2 != 0 && var8 < var9.height) {
  244.          if (var2 < 0) {
  245.             var3.y = -var2;
  246.             var4.y = 0;
  247.             var6.y = var9.height + var2;
  248.          } else {
  249.             var3.y = 0;
  250.             var4.y = var2;
  251.             var6.y = 0;
  252.          }
  253.  
  254.          var6.x = var3.x = var4.x = 0;
  255.          var5.width = var9.width;
  256.          var5.height = var9.height - var8;
  257.          var6.width = var9.width;
  258.          var6.height = var8;
  259.          return true;
  260.       } else if (var2 == 0 && var1 != 0 && var7 < var9.width) {
  261.          if (var1 < 0) {
  262.             var3.x = -var1;
  263.             var4.x = 0;
  264.             var6.x = var9.width + var1;
  265.          } else {
  266.             var3.x = 0;
  267.             var4.x = var1;
  268.             var6.x = 0;
  269.          }
  270.  
  271.          var6.y = var3.y = var4.y = 0;
  272.          var5.width = var9.width - var7;
  273.          var5.height = var9.height;
  274.          var6.y = 0;
  275.          var6.width = var7;
  276.          var6.height = var9.height;
  277.          return true;
  278.       } else {
  279.          return false;
  280.       }
  281.    }
  282.  
  283.    public Dimension getExtentSize() {
  284.       return ((Component)this).getSize();
  285.    }
  286.  
  287.    public Dimension toViewCoordinates(Dimension var1) {
  288.       return new Dimension(var1);
  289.    }
  290.  
  291.    public Point toViewCoordinates(Point var1) {
  292.       return new Point(var1);
  293.    }
  294.  
  295.    public void setExtentSize(Dimension var1) {
  296.       Dimension var2 = this.getExtentSize();
  297.       if (!var1.equals(var2)) {
  298.          ((Component)this).setSize(var1);
  299.          this.fireStateChanged();
  300.       }
  301.  
  302.    }
  303.  
  304.    protected ViewListener createViewListener() {
  305.       return new ViewListener(this);
  306.    }
  307.  
  308.    protected LayoutManager createLayoutManager() {
  309.       return new ViewportLayout();
  310.    }
  311.  
  312.    public void addChangeListener(ChangeListener var1) {
  313.       super.listenerList.add(class$com$sun$java$swing$event$ChangeListener != null ? class$com$sun$java$swing$event$ChangeListener : (class$com$sun$java$swing$event$ChangeListener = JComponent.class$("com.sun.java.swing.event.ChangeListener")), var1);
  314.    }
  315.  
  316.    public void removeChangeListener(ChangeListener var1) {
  317.       super.listenerList.remove(class$com$sun$java$swing$event$ChangeListener != null ? class$com$sun$java$swing$event$ChangeListener : (class$com$sun$java$swing$event$ChangeListener = JComponent.class$("com.sun.java.swing.event.ChangeListener")), var1);
  318.    }
  319.  
  320.    protected void fireStateChanged() {
  321.       Object[] var1 = super.listenerList.getListenerList();
  322.  
  323.       for(int var2 = var1.length - 2; var2 >= 0; var2 -= 2) {
  324.          if (var1[var2] == (class$com$sun$java$swing$event$ChangeListener != null ? class$com$sun$java$swing$event$ChangeListener : (class$com$sun$java$swing$event$ChangeListener = JComponent.class$("com.sun.java.swing.event.ChangeListener")))) {
  325.             if (this.changeEvent == null) {
  326.                this.changeEvent = new ChangeEvent(this);
  327.             }
  328.  
  329.             ((ChangeListener)var1[var2 + 1]).stateChanged(this.changeEvent);
  330.          }
  331.       }
  332.  
  333.    }
  334.  
  335.    public void repaint(long var1, int var3, int var4, int var5, int var6) {
  336.       Container var7 = ((Component)this).getParent();
  337.       if (var7 != null) {
  338.          ((Component)var7).repaint(var1, var3 + ((JComponent)this).getX(), var4 + ((JComponent)this).getY(), var5, var6);
  339.       } else {
  340.          super.repaint(var1, var3, var4, var5, var6);
  341.       }
  342.    }
  343.  
  344.    public AccessibleContext getAccessibleContext() {
  345.       if (super.accessibleContext == null) {
  346.          super.accessibleContext = new AccessibleJViewport(this);
  347.       }
  348.  
  349.       return super.accessibleContext;
  350.    }
  351. }
  352.