home *** CD-ROM | disk | FTP | other *** search
- package javax.swing.text;
-
- import java.awt.Graphics;
- import java.awt.Graphics2D;
- import java.awt.GraphicsEnvironment;
- import java.awt.Rectangle;
- import java.awt.font.FontRenderContext;
- import java.awt.font.LineBreakMeasurer;
- import java.awt.font.TextLayout;
- import java.awt.geom.AffineTransform;
- import javax.swing.event.DocumentEvent;
- import javax.swing.text.Position.Bias;
-
- class TextLayoutStrategy extends FlowView.FlowStrategy {
- private LineBreakMeasurer measurer;
- private AttributedSegment text = new AttributedSegment();
-
- public TextLayoutStrategy() {
- }
-
- public void insertUpdate(FlowView var1, DocumentEvent var2, Rectangle var3) {
- this.sync(var1);
- super.insertUpdate(var1, var2, var3);
- }
-
- public void removeUpdate(FlowView var1, DocumentEvent var2, Rectangle var3) {
- this.sync(var1);
- super.removeUpdate(var1, var2, var3);
- }
-
- public void changedUpdate(FlowView var1, DocumentEvent var2, Rectangle var3) {
- this.sync(var1);
- super.changedUpdate(var1, var2, var3);
- }
-
- public void layout(FlowView var1) {
- super.layout(var1);
- }
-
- protected int layoutRow(FlowView var1, int var2, int var3) {
- int var4 = super.layoutRow(var1, var2, var3);
- View var5 = ((CompositeView)var1).getView(var2);
- Document var6 = ((View)var1).getDocument();
- Object var7 = var6.getProperty("i18n");
- if (var7 != null && var7.equals(Boolean.TRUE)) {
- int var8 = var5.getViewCount();
- if (var8 > 1) {
- AbstractDocument var9 = (AbstractDocument)((View)var1).getDocument();
- Element var10 = var9.getBidiRootElement();
- byte[] var11 = new byte[var8];
- View[] var12 = new View[var8];
-
- for(int var13 = 0; var13 < var8; ++var13) {
- View var14 = var5.getView(var13);
- int var15 = var10.getElementIndex(var14.getStartOffset());
- Element var16 = var10.getElement(var15);
- var11[var13] = (byte)StyleConstants.getBidiLevel(var16.getAttributes());
- var12[var13] = var14;
- }
-
- Bidi.reorderVisually(var11, var12);
- var5.replace(0, var8, var12);
- }
- }
-
- return var4;
- }
-
- protected void adjustRow(FlowView var1, int var2, int var3, int var4) {
- }
-
- protected View createView(FlowView var1, int var2, int var3, int var4) {
- View var5 = ((FlowView.FlowStrategy)this).getLogicalView(var1);
- View var6 = ((CompositeView)var1).getView(var4);
- boolean var7 = var6.getViewCount() != 0;
- int var8 = var5.getViewIndex(var2, Bias.Forward);
- View var9 = var5.getView(var8);
- int var10 = this.getLimitingOffset(var9, var2, var3, var7);
- if (var10 == var2) {
- return null;
- } else {
- View var11;
- if (var2 == var9.getStartOffset() && var10 == var9.getEndOffset()) {
- var11 = var9;
- } else {
- var11 = var9.createFragment(var2, var10);
- }
-
- if (var11 instanceof GlyphView && this.measurer != null) {
- boolean var12 = false;
- int var13 = var11.getStartOffset();
- int var14 = var11.getEndOffset();
- if (var14 - var13 == 1) {
- Segment var15 = ((GlyphView)var11).getText(var13, var14);
- char var16 = var15.first();
- if (var16 == '\t') {
- var12 = true;
- }
- }
-
- TextLayout var17 = var12 ? null : this.measurer.nextLayout((float)var3, this.text.toIteratorIndex(var10), var7);
- if (var17 != null) {
- ((GlyphView)var11).setGlyphPainter(new GlyphPainter2(var17));
- }
- }
-
- return var11;
- }
- }
-
- int getLimitingOffset(View var1, int var2, int var3, boolean var4) {
- int var5 = var1.getEndOffset();
- Document var6 = var1.getDocument();
- if (var6 instanceof AbstractDocument) {
- AbstractDocument var7 = (AbstractDocument)var6;
- Element var8 = var7.getBidiRootElement();
- if (var8.getElementCount() > 1) {
- int var9 = var8.getElementIndex(var2);
- Element var10 = var8.getElement(var9);
- var5 = Math.min(var10.getEndOffset(), var5);
- }
- }
-
- if (var1 instanceof GlyphView) {
- Segment var11 = ((GlyphView)var1).getText(var2, var5);
- char var13 = var11.first();
- if (var13 == '\t') {
- var5 = var2 + 1;
- } else {
- for(char var14 = var11.next(); var14 != '\uffff'; var14 = var11.next()) {
- if (var14 == '\t') {
- var5 = var2 + var11.getIndex() - var11.getBeginIndex();
- break;
- }
- }
- }
- }
-
- int var12 = this.text.toIteratorIndex(var5);
- if (this.measurer != null) {
- int var15 = this.text.toIteratorIndex(var2);
- if (this.measurer.getPosition() != var15) {
- this.measurer.setPosition(var15);
- }
-
- var12 = this.measurer.nextOffset((float)var3, var12, var4);
- }
-
- int var16 = this.text.toModelPosition(var12);
- return var16;
- }
-
- void sync(FlowView var1) {
- View var2 = ((FlowView.FlowStrategy)this).getLogicalView(var1);
- this.text.setView(var2);
- Graphics2D var3 = (Graphics2D)((View)var1).getContainer().getGraphics();
-
- FontRenderContext var4;
- try {
- if (var3 != null) {
- var4 = var3.getFontRenderContext();
- } else {
- AffineTransform var5 = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice().getDefaultConfiguration().getDefaultTransform();
- var4 = new FontRenderContext(var5, false, false);
- }
- } finally {
- if (var3 != null) {
- ((Graphics)var3).dispose();
- }
-
- }
-
- this.measurer = new LineBreakMeasurer(this.text, var4);
- int var13 = var2.getViewCount();
-
- for(int var6 = 0; var6 < var13; ++var6) {
- View var7 = var2.getView(var6);
- if (var7 instanceof GlyphView) {
- int var8 = var7.getStartOffset();
- int var9 = var7.getEndOffset();
- this.measurer.setPosition(this.text.toIteratorIndex(var8));
- TextLayout var10 = this.measurer.nextLayout(Float.MAX_VALUE, this.text.toIteratorIndex(var9), false);
- ((GlyphView)var7).setGlyphPainter(new GlyphPainter2(var10));
- }
- }
-
- this.measurer.setPosition(this.text.getBeginIndex());
- }
- }
-