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 / text / GlyphPainter2.class (.txt) < prev    next >
Encoding:
Java Class File  |  1979-12-31  |  4.4 KB  |  230 lines

  1. package javax.swing.text;
  2.  
  3. import java.awt.Graphics;
  4. import java.awt.Graphics2D;
  5. import java.awt.Shape;
  6. import java.awt.font.TextHitInfo;
  7. import java.awt.font.TextLayout;
  8. import java.awt.geom.Rectangle2D;
  9. import java.awt.geom.RectangularShape;
  10. import javax.swing.text.Position.Bias;
  11.  
  12. class GlyphPainter2 extends GlyphView.GlyphPainter {
  13.    TextLayout layout;
  14.  
  15.    public GlyphPainter2(TextLayout var1) {
  16.       this.layout = var1;
  17.    }
  18.  
  19.    public GlyphView.GlyphPainter getPainter(GlyphView var1, int var2, int var3) {
  20.       return null;
  21.    }
  22.  
  23.    public float getSpan(GlyphView var1, int var2, int var3, TabExpander var4, float var5) {
  24.       if (var2 == var1.getStartOffset() && var3 == var1.getEndOffset()) {
  25.          return this.layout.getAdvance();
  26.       } else {
  27.          int var6 = var1.getStartOffset();
  28.          int var7 = var2 - var6;
  29.          int var8 = var3 - var6;
  30.          TextHitInfo var9 = TextHitInfo.afterOffset(var7);
  31.          TextHitInfo var10 = TextHitInfo.beforeOffset(var8);
  32.          float[] var11 = this.layout.getCaretInfo(var9);
  33.          float var12 = var11[0];
  34.          var11 = this.layout.getCaretInfo(var10);
  35.          float var13 = var11[0];
  36.          return var13 > var12 ? var13 - var12 : var12 - var13;
  37.       }
  38.    }
  39.  
  40.    public float getHeight(GlyphView var1) {
  41.       return this.layout.getAscent() + this.layout.getDescent() + this.layout.getLeading();
  42.    }
  43.  
  44.    public float getAscent(GlyphView var1) {
  45.       return this.layout.getAscent();
  46.    }
  47.  
  48.    public float getDescent(GlyphView var1) {
  49.       return this.layout.getDescent();
  50.    }
  51.  
  52.    public void paint(GlyphView var1, Graphics var2, Shape var3, int var4, int var5) {
  53.       if (var2 instanceof Graphics2D) {
  54.          Rectangle2D var6 = var3.getBounds2D();
  55.          Graphics2D var7 = (Graphics2D)var2;
  56.          float var8 = (float)((RectangularShape)var6).getY() + this.layout.getAscent() + this.layout.getLeading();
  57.          float var9 = (float)((RectangularShape)var6).getX();
  58.          if (var4 <= var1.getStartOffset() && var5 >= var1.getEndOffset()) {
  59.             this.layout.draw(var7, var9, var8);
  60.          } else {
  61.             try {
  62.                Shape var10 = ((View)var1).modelToView(var4, Bias.Forward, var5, Bias.Backward, var3);
  63.                Shape var11 = var2.getClip();
  64.                var2.setClip(var10);
  65.                this.layout.draw(var7, var9, var8);
  66.                var2.setClip(var11);
  67.             } catch (BadLocationException var12) {
  68.             }
  69.          }
  70.       }
  71.  
  72.    }
  73.  
  74.    public Shape modelToView(GlyphView var1, int var2, Position.Bias var3, Shape var4) throws BadLocationException {
  75.       int var5 = var2 - var1.getStartOffset();
  76.       Rectangle2D var6 = var4.getBounds2D();
  77.       TextHitInfo var7 = var3 == Bias.Forward ? TextHitInfo.afterOffset(var5) : TextHitInfo.beforeOffset(var5);
  78.       float[] var8 = this.layout.getCaretInfo(var7);
  79.       var6.setRect(((RectangularShape)var6).getX() + (double)var8[0], ((RectangularShape)var6).getY(), (double)1.0F, ((RectangularShape)var6).getHeight());
  80.       return var6;
  81.    }
  82.  
  83.    public int viewToModel(GlyphView var1, float var2, float var3, Shape var4, Position.Bias[] var5) {
  84.       Rectangle2D var6 = var4 instanceof Rectangle2D ? (Rectangle2D)var4 : var4.getBounds2D();
  85.       TextHitInfo var7 = this.layout.hitTestChar(var2 - (float)((RectangularShape)var6).getX(), 0.0F);
  86.       int var8 = var7.getInsertionIndex();
  87.       var5[0] = var7.isLeadingEdge() ? Bias.Forward : Bias.Backward;
  88.       return var8 + var1.getStartOffset();
  89.    }
  90.  
  91.    public int getBoundedPosition(GlyphView var1, int var2, float var3, float var4) {
  92.       if (var4 < 0.0F) {
  93.          throw new IllegalArgumentException("Length must be >= 0.");
  94.       } else {
  95.          TextHitInfo var5 = this.layout.hitTestChar(var4, 0.0F);
  96.          if (var5.getCharIndex() == -1 && !this.layout.isLeftToRight()) {
  97.             return var1.getEndOffset();
  98.          } else {
  99.             int var6 = var5.isLeadingEdge() ? var5.getInsertionIndex() : var5.getInsertionIndex() - 1;
  100.             return var6 + var1.getStartOffset();
  101.          }
  102.       }
  103.    }
  104.  
  105.    public int getNextVisualPositionFrom(GlyphView var1, int var2, Position.Bias var3, Shape var4, int var5, Position.Bias[] var6) throws BadLocationException {
  106.       int var7 = var1.getStartOffset();
  107.       int var8 = var1.getEndOffset();
  108.       switch (var5) {
  109.          case 1:
  110.          case 5:
  111.             return var2;
  112.          case 2:
  113.          case 4:
  114.          case 6:
  115.          default:
  116.             throw new IllegalArgumentException("Bad direction: " + var5);
  117.          case 3:
  118.             AbstractDocument var19 = (AbstractDocument)((View)var1).getDocument();
  119.             boolean var20 = var19.isLeftToRight(var7, var8);
  120.             if (var7 == var19.getLength()) {
  121.                if (var2 == -1) {
  122.                   var6[0] = Bias.Forward;
  123.                   return var7;
  124.                }
  125.  
  126.                return -1;
  127.             } else if (var2 == -1) {
  128.                if (var20) {
  129.                   var6[0] = Bias.Forward;
  130.                   return var7;
  131.                } else {
  132.                   Segment var18 = var1.getText(var8 - 1, var8);
  133.                   if (var18.array[var18.offset] == '\n') {
  134.                      var6[0] = Bias.Forward;
  135.                      return var8 - 1;
  136.                   }
  137.  
  138.                   var6[0] = Bias.Backward;
  139.                   return var8;
  140.                }
  141.             } else {
  142.                TextHitInfo var21;
  143.                if (var3 == Bias.Forward) {
  144.                   var21 = TextHitInfo.afterOffset(var2 - var7);
  145.                } else {
  146.                   var21 = TextHitInfo.beforeOffset(var2 - var7);
  147.                }
  148.  
  149.                TextHitInfo var22 = this.layout.getNextRightHit(var21);
  150.                if (var22 == null) {
  151.                   return -1;
  152.                } else {
  153.                   if (var20 != this.layout.isLeftToRight()) {
  154.                      var22 = this.layout.getVisualOtherHit(var22);
  155.                   }
  156.  
  157.                   var2 = var22.getInsertionIndex() + var7;
  158.                   if (var2 == var8) {
  159.                      Segment var17 = var1.getText(var8 - 1, var8);
  160.                      if (var17.array[var17.offset] == '\n') {
  161.                         return -1;
  162.                      }
  163.  
  164.                      var6[0] = Bias.Backward;
  165.                   } else {
  166.                      var6[0] = Bias.Forward;
  167.                   }
  168.  
  169.                   return var2;
  170.                }
  171.             }
  172.          case 7:
  173.             AbstractDocument var10 = (AbstractDocument)((View)var1).getDocument();
  174.             boolean var11 = var10.isLeftToRight(var7, var8);
  175.             if (var7 == var10.getLength()) {
  176.                if (var2 == -1) {
  177.                   var6[0] = Bias.Forward;
  178.                   return var7;
  179.                } else {
  180.                   return -1;
  181.                }
  182.             } else if (var2 == -1) {
  183.                if (var11) {
  184.                   Segment var16 = var1.getText(var8 - 1, var8);
  185.                   if (var16.array[var16.offset] == '\n') {
  186.                      var6[0] = Bias.Forward;
  187.                      return var8 - 1;
  188.                   } else {
  189.                      var6[0] = Bias.Backward;
  190.                      return var8;
  191.                   }
  192.                } else {
  193.                   var6[0] = Bias.Forward;
  194.                   return var7;
  195.                }
  196.             } else {
  197.                TextHitInfo var12;
  198.                if (var3 == Bias.Forward) {
  199.                   var12 = TextHitInfo.afterOffset(var2 - var7);
  200.                } else {
  201.                   var12 = TextHitInfo.beforeOffset(var2 - var7);
  202.                }
  203.  
  204.                TextHitInfo var13 = this.layout.getNextLeftHit(var12);
  205.                if (var13 == null) {
  206.                   return -1;
  207.                } else {
  208.                   if (var11 != this.layout.isLeftToRight()) {
  209.                      var13 = this.layout.getVisualOtherHit(var13);
  210.                   }
  211.  
  212.                   var2 = var13.getInsertionIndex() + var7;
  213.                   if (var2 == var8) {
  214.                      Segment var9 = var1.getText(var8 - 1, var8);
  215.                      if (var9.array[var9.offset] == '\n') {
  216.                         return -1;
  217.                      }
  218.  
  219.                      var6[0] = Bias.Backward;
  220.                   } else {
  221.                      var6[0] = Bias.Forward;
  222.                   }
  223.  
  224.                   return var2;
  225.                }
  226.             }
  227.       }
  228.    }
  229. }
  230.