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 / sun / awt / im / CompositionArea.class (.txt) next >
Encoding:
Java Class File  |  1979-12-31  |  4.8 KB  |  189 lines

  1. package sun.awt.im;
  2.  
  3. import java.awt.Canvas;
  4. import java.awt.Color;
  5. import java.awt.Component;
  6. import java.awt.Dimension;
  7. import java.awt.Graphics;
  8. import java.awt.Graphics2D;
  9. import java.awt.Point;
  10. import java.awt.Rectangle;
  11. import java.awt.Toolkit;
  12. import java.awt.Window;
  13. import java.awt.event.InputMethodEvent;
  14. import java.awt.event.InputMethodListener;
  15. import java.awt.font.TextHitInfo;
  16. import java.awt.font.TextLayout;
  17. import java.awt.im.InputMethodRequests;
  18. import java.text.AttributedCharacterIterator;
  19.  
  20. public class CompositionArea extends Canvas implements InputMethodListener {
  21.    private CompositionAreaHandler handler;
  22.    private TextLayout composedTextLayout;
  23.    private TextHitInfo caret = null;
  24.    private Window compositionWindow;
  25.    private static final int TEXT_ORIGIN_X = 5;
  26.    private static final int TEXT_ORIGIN_Y = 15;
  27.  
  28.    CompositionArea() {
  29.       String var1 = Toolkit.getProperty("AWT.CompositionWindowTitle", "Input Window");
  30.       this.compositionWindow = InputMethodContext.createInputMethodWindow(var1, (InputContext)null);
  31.       ((Component)this).setSize(480, 18);
  32.       ((Component)this).setForeground(Color.black);
  33.       ((Component)this).setBackground(Color.white);
  34.       ((Component)this).enableInputMethods(true);
  35.       ((Component)this).enableEvents(8L);
  36.       this.compositionWindow.add(this);
  37.       this.compositionWindow.addWindowListener(new FrameWindowAdapter(this));
  38.       ((Component)this).addInputMethodListener(this);
  39.       this.compositionWindow.enableInputMethods(false);
  40.       this.compositionWindow.pack();
  41.       Dimension var2 = this.compositionWindow.getSize();
  42.       Dimension var3 = ((Component)this).getToolkit().getScreenSize();
  43.       this.compositionWindow.setLocation(var3.width - var2.width - 20, var3.height - var2.height - 100);
  44.       this.compositionWindow.setVisible(false);
  45.    }
  46.  
  47.    synchronized void setHandlerInfo(CompositionAreaHandler var1, InputContext var2) {
  48.       this.handler = var1;
  49.       ((InputMethodWindow)this.compositionWindow).setInputContext(var2);
  50.    }
  51.  
  52.    public InputMethodRequests getInputMethodRequests() {
  53.       return this.handler;
  54.    }
  55.  
  56.    private Rectangle getCaretRectangle(TextHitInfo var1) {
  57.       int var2 = 0;
  58.       TextLayout var3 = this.composedTextLayout;
  59.       if (var3 != null) {
  60.          var2 = Math.round(var3.getCaretInfo(var1)[0]);
  61.       }
  62.  
  63.       Graphics var4 = ((Component)this).getGraphics();
  64.       Object var5 = null;
  65.  
  66.       try {
  67.          var10 = var4.getFontMetrics();
  68.       } finally {
  69.          var4.dispose();
  70.       }
  71.  
  72.       return new Rectangle(5 + var2, 15 - var10.getAscent(), 0, var10.getAscent() + var10.getDescent());
  73.    }
  74.  
  75.    public void paint(Graphics var1) {
  76.       super.paint(var1);
  77.       var1.setColor(((Component)this).getForeground());
  78.       TextLayout var2 = this.composedTextLayout;
  79.       if (var2 != null) {
  80.          var2.draw((Graphics2D)var1, 5.0F, 15.0F);
  81.       }
  82.  
  83.       if (this.caret != null) {
  84.          Rectangle var3 = this.getCaretRectangle(this.caret);
  85.          var1.setXORMode(((Component)this).getBackground());
  86.          var1.fillRect(var3.x, var3.y, 1, var3.height);
  87.          var1.setPaintMode();
  88.       }
  89.  
  90.    }
  91.  
  92.    public void inputMethodTextChanged(InputMethodEvent var1) {
  93.       this.handler.inputMethodTextChanged(var1);
  94.    }
  95.  
  96.    public void caretPositionChanged(InputMethodEvent var1) {
  97.       this.handler.caretPositionChanged(var1);
  98.    }
  99.  
  100.    void setText(AttributedCharacterIterator var1, TextHitInfo var2) {
  101.       this.composedTextLayout = null;
  102.       if (var1 == null) {
  103.          this.compositionWindow.setVisible(false);
  104.          this.caret = null;
  105.       } else {
  106.          Graphics var3 = ((Component)this).getGraphics();
  107.          Object var4 = null;
  108.  
  109.          try {
  110.             var16 = ((Graphics2D)var3).getFontRenderContext();
  111.          } finally {
  112.             var3.dispose();
  113.          }
  114.  
  115.          this.composedTextLayout = new TextLayout(var1, var16);
  116.          this.caret = var2;
  117.          this.updateWindowLocation();
  118.          if (!this.compositionWindow.isVisible()) {
  119.             this.compositionWindow.setVisible(true);
  120.          }
  121.  
  122.          var3 = ((Component)this).getGraphics();
  123.  
  124.          try {
  125.             this.paint(var3);
  126.          } finally {
  127.             var3.dispose();
  128.          }
  129.       }
  130.  
  131.    }
  132.  
  133.    void setCaret(TextHitInfo var1) {
  134.       this.caret = var1;
  135.       if (this.compositionWindow.isVisible()) {
  136.          Graphics var2 = ((Component)this).getGraphics();
  137.  
  138.          try {
  139.             this.paint(var2);
  140.          } finally {
  141.             var2.dispose();
  142.          }
  143.       }
  144.  
  145.    }
  146.  
  147.    void updateWindowLocation() {
  148.       InputMethodRequests var1 = this.handler.getClientInputMethodRequests();
  149.       if (var1 != null) {
  150.          Point var2 = new Point();
  151.          Rectangle var3 = var1.getTextLocation((TextHitInfo)null);
  152.          Dimension var4 = Toolkit.getDefaultToolkit().getScreenSize();
  153.          Dimension var5 = this.compositionWindow.getSize();
  154.          if (var3.x + var5.width > var4.width) {
  155.             var2.x = var4.width - var5.width;
  156.          } else {
  157.             var2.x = var3.x;
  158.          }
  159.  
  160.          if (var3.y + var3.height + 2 + var5.height > var4.height) {
  161.             var2.y = var3.y - 2 - var5.height;
  162.          } else {
  163.             var2.y = var3.y + var3.height + 2;
  164.          }
  165.  
  166.          this.compositionWindow.setLocation(var2);
  167.       }
  168.    }
  169.  
  170.    Rectangle getTextLocation(TextHitInfo var1) {
  171.       Rectangle var2 = this.getCaretRectangle(var1);
  172.       Point var3 = ((Component)this).getLocationOnScreen();
  173.       var2.translate(var3.x, var3.y);
  174.       return var2;
  175.    }
  176.  
  177.    TextHitInfo getLocationOffset(int var1, int var2) {
  178.       TextLayout var3 = this.composedTextLayout;
  179.       if (var3 == null) {
  180.          return null;
  181.       } else {
  182.          Point var4 = ((Component)this).getLocationOnScreen();
  183.          var1 -= var4.x + 5;
  184.          var2 -= var4.y + 15;
  185.          return var3.getBounds().contains((double)var1, (double)var2) ? var3.hitTestChar((float)var1, (float)var2) : null;
  186.       }
  187.    }
  188. }
  189.