home *** CD-ROM | disk | FTP | other *** search
/ S283 Planetary Science &n…he Search for Life DVD 2 / DVD-ROM.iso / install / jre1_3 / lib / rt.jar / javax / swing / text / TextLayoutStrategy.class (.txt) < prev    next >
Encoding:
Java Class File  |  1979-12-31  |  5.0 KB  |  190 lines

  1. package javax.swing.text;
  2.  
  3. import java.awt.Graphics;
  4. import java.awt.Graphics2D;
  5. import java.awt.GraphicsEnvironment;
  6. import java.awt.Rectangle;
  7. import java.awt.font.FontRenderContext;
  8. import java.awt.font.LineBreakMeasurer;
  9. import java.awt.font.TextLayout;
  10. import java.awt.geom.AffineTransform;
  11. import javax.swing.event.DocumentEvent;
  12. import javax.swing.text.Position.Bias;
  13.  
  14. class TextLayoutStrategy extends FlowView.FlowStrategy {
  15.    private LineBreakMeasurer measurer;
  16.    private AttributedSegment text = new AttributedSegment();
  17.  
  18.    public TextLayoutStrategy() {
  19.    }
  20.  
  21.    public void insertUpdate(FlowView var1, DocumentEvent var2, Rectangle var3) {
  22.       this.sync(var1);
  23.       super.insertUpdate(var1, var2, var3);
  24.    }
  25.  
  26.    public void removeUpdate(FlowView var1, DocumentEvent var2, Rectangle var3) {
  27.       this.sync(var1);
  28.       super.removeUpdate(var1, var2, var3);
  29.    }
  30.  
  31.    public void changedUpdate(FlowView var1, DocumentEvent var2, Rectangle var3) {
  32.       this.sync(var1);
  33.       super.changedUpdate(var1, var2, var3);
  34.    }
  35.  
  36.    public void layout(FlowView var1) {
  37.       super.layout(var1);
  38.    }
  39.  
  40.    protected int layoutRow(FlowView var1, int var2, int var3) {
  41.       int var4 = super.layoutRow(var1, var2, var3);
  42.       View var5 = ((CompositeView)var1).getView(var2);
  43.       Document var6 = ((View)var1).getDocument();
  44.       Object var7 = var6.getProperty("i18n");
  45.       if (var7 != null && var7.equals(Boolean.TRUE)) {
  46.          int var8 = var5.getViewCount();
  47.          if (var8 > 1) {
  48.             AbstractDocument var9 = (AbstractDocument)((View)var1).getDocument();
  49.             Element var10 = var9.getBidiRootElement();
  50.             byte[] var11 = new byte[var8];
  51.             View[] var12 = new View[var8];
  52.  
  53.             for(int var13 = 0; var13 < var8; ++var13) {
  54.                View var14 = var5.getView(var13);
  55.                int var15 = var10.getElementIndex(var14.getStartOffset());
  56.                Element var16 = var10.getElement(var15);
  57.                var11[var13] = (byte)StyleConstants.getBidiLevel(var16.getAttributes());
  58.                var12[var13] = var14;
  59.             }
  60.  
  61.             Bidi.reorderVisually(var11, var12);
  62.             var5.replace(0, var8, var12);
  63.          }
  64.       }
  65.  
  66.       return var4;
  67.    }
  68.  
  69.    protected void adjustRow(FlowView var1, int var2, int var3, int var4) {
  70.    }
  71.  
  72.    protected View createView(FlowView var1, int var2, int var3, int var4) {
  73.       View var5 = ((FlowView.FlowStrategy)this).getLogicalView(var1);
  74.       View var6 = ((CompositeView)var1).getView(var4);
  75.       boolean var7 = var6.getViewCount() != 0;
  76.       int var8 = var5.getViewIndex(var2, Bias.Forward);
  77.       View var9 = var5.getView(var8);
  78.       int var10 = this.getLimitingOffset(var9, var2, var3, var7);
  79.       if (var10 == var2) {
  80.          return null;
  81.       } else {
  82.          View var11;
  83.          if (var2 == var9.getStartOffset() && var10 == var9.getEndOffset()) {
  84.             var11 = var9;
  85.          } else {
  86.             var11 = var9.createFragment(var2, var10);
  87.          }
  88.  
  89.          if (var11 instanceof GlyphView && this.measurer != null) {
  90.             boolean var12 = false;
  91.             int var13 = var11.getStartOffset();
  92.             int var14 = var11.getEndOffset();
  93.             if (var14 - var13 == 1) {
  94.                Segment var15 = ((GlyphView)var11).getText(var13, var14);
  95.                char var16 = var15.first();
  96.                if (var16 == '\t') {
  97.                   var12 = true;
  98.                }
  99.             }
  100.  
  101.             TextLayout var17 = var12 ? null : this.measurer.nextLayout((float)var3, this.text.toIteratorIndex(var10), var7);
  102.             if (var17 != null) {
  103.                ((GlyphView)var11).setGlyphPainter(new GlyphPainter2(var17));
  104.             }
  105.          }
  106.  
  107.          return var11;
  108.       }
  109.    }
  110.  
  111.    int getLimitingOffset(View var1, int var2, int var3, boolean var4) {
  112.       int var5 = var1.getEndOffset();
  113.       Document var6 = var1.getDocument();
  114.       if (var6 instanceof AbstractDocument) {
  115.          AbstractDocument var7 = (AbstractDocument)var6;
  116.          Element var8 = var7.getBidiRootElement();
  117.          if (var8.getElementCount() > 1) {
  118.             int var9 = var8.getElementIndex(var2);
  119.             Element var10 = var8.getElement(var9);
  120.             var5 = Math.min(var10.getEndOffset(), var5);
  121.          }
  122.       }
  123.  
  124.       if (var1 instanceof GlyphView) {
  125.          Segment var11 = ((GlyphView)var1).getText(var2, var5);
  126.          char var13 = var11.first();
  127.          if (var13 == '\t') {
  128.             var5 = var2 + 1;
  129.          } else {
  130.             for(char var14 = var11.next(); var14 != '\uffff'; var14 = var11.next()) {
  131.                if (var14 == '\t') {
  132.                   var5 = var2 + var11.getIndex() - var11.getBeginIndex();
  133.                   break;
  134.                }
  135.             }
  136.          }
  137.       }
  138.  
  139.       int var12 = this.text.toIteratorIndex(var5);
  140.       if (this.measurer != null) {
  141.          int var15 = this.text.toIteratorIndex(var2);
  142.          if (this.measurer.getPosition() != var15) {
  143.             this.measurer.setPosition(var15);
  144.          }
  145.  
  146.          var12 = this.measurer.nextOffset((float)var3, var12, var4);
  147.       }
  148.  
  149.       int var16 = this.text.toModelPosition(var12);
  150.       return var16;
  151.    }
  152.  
  153.    void sync(FlowView var1) {
  154.       View var2 = ((FlowView.FlowStrategy)this).getLogicalView(var1);
  155.       this.text.setView(var2);
  156.       Graphics2D var3 = (Graphics2D)((View)var1).getContainer().getGraphics();
  157.  
  158.       FontRenderContext var4;
  159.       try {
  160.          if (var3 != null) {
  161.             var4 = var3.getFontRenderContext();
  162.          } else {
  163.             AffineTransform var5 = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice().getDefaultConfiguration().getDefaultTransform();
  164.             var4 = new FontRenderContext(var5, false, false);
  165.          }
  166.       } finally {
  167.          if (var3 != null) {
  168.             ((Graphics)var3).dispose();
  169.          }
  170.  
  171.       }
  172.  
  173.       this.measurer = new LineBreakMeasurer(this.text, var4);
  174.       int var13 = var2.getViewCount();
  175.  
  176.       for(int var6 = 0; var6 < var13; ++var6) {
  177.          View var7 = var2.getView(var6);
  178.          if (var7 instanceof GlyphView) {
  179.             int var8 = var7.getStartOffset();
  180.             int var9 = var7.getEndOffset();
  181.             this.measurer.setPosition(this.text.toIteratorIndex(var8));
  182.             TextLayout var10 = this.measurer.nextLayout(Float.MAX_VALUE, this.text.toIteratorIndex(var9), false);
  183.             ((GlyphView)var7).setGlyphPainter(new GlyphPainter2(var10));
  184.          }
  185.       }
  186.  
  187.       this.measurer.setPosition(this.text.getBeginIndex());
  188.    }
  189. }
  190.