String lastLine = null; LineBreakMeasurer measurer = new LineBreakMeasurer(characterIterator, g.getFontRenderContext());
LineBreakMeasurer measurer = new LineBreakMeasurer(it, graphics.getFontRenderContext()); for (;;) { int startIndex = measurer.getPosition();
true, false); LineBreakMeasurer lbm = new LineBreakMeasurer(aci, frc);
private TextLayoutIterator() { x = 0; y = 0; textParts = text.split("\n"); measurers = new LineBreakMeasurer[textParts.length]; FontRenderContext frc = new FontRenderContext(new AffineTransform(), true, true); for (int i = 0; i < textParts.length; i++) { AttributedString s = getStyledText(textParts[i]); measurers[i] = new LineBreakMeasurer(s.getIterator(), frc); } currentMeasurer = measurers[currentIndex]; currentText = textParts[currentIndex]; first = true; }
private WrappedLines breakLines(Graphics2D g) { Dimension size = label.getSize(); float maxWidth = size.width; AttributedString attributedText = new AttributedString(label.getText(), textAttributes()); AttributedCharacterIterator textIterator = attributedText.getIterator(); FontRenderContext fontRendering = g.getFontRenderContext(); LineBreakMeasurer measurer = new LineBreakMeasurer(textIterator, fontRendering); WrappedLines lines = new WrappedLines(); while(measurer.getPosition() < textIterator.getEndIndex()) { TextLayout layout = measurer.nextLayout(maxWidth); lines.add(layout); } return lines; }
LineBreakMeasurer measure = new LineBreakMeasurer(textIter, frc); float yPos = y; float remain = h;
FontRenderContext fontContext = g2d.getFontRenderContext(); LineBreakMeasurer measurer = new LineBreakMeasurer(charIterator, BreakIterator.getWordInstance(Locale.ENGLISH), fontContext); int lineCount = 0; while (measurer.getPosition() < charIterator.getEndIndex()) { measurer = new LineBreakMeasurer(charIterator, BreakIterator.getCharacterInstance(Locale.ENGLISH), fontContext); } else { measurer.setPosition(0);
AttributedCharacterIterator iter = attributed.getIterator(); LineBreakMeasurer lineMeasurer = new LineBreakMeasurer( iter, BreakIterator.getLineInstance(),
/** Called only if new TextLayouts are in need. * @param frc is used for possible new LineBreakMeasurer instance * @return current LineBreakMeasurer or <tt>null</tt> if no is available. */ private LineBreakMeasurer getMeasurer(FontRenderContext frc) { if (lineBreakMeasurer == null) { // first page to print lineBreakMeasurer = new LineBreakMeasurer(styledTexts[currentStyledText], frc); // no layouts available in this measurer? } else if (lineBreakMeasurer.getPosition() >= styledTexts[currentStyledText].getEndIndex()) { // next measurer is not available? if (currentStyledText == (styledTexts.length - 1)) { return null; // everything is printed } else { // use next styledTexts entry lineBreakMeasurer = new LineBreakMeasurer(styledTexts[++currentStyledText], frc); } } return lineBreakMeasurer; }
Font font = new Font("LucidaSans", Font.PLAIN, 14); AttributedString messageAS = new AttributedString(textMessage); ... messageAS.addAttribute(TextAttribute.FONT, font); AttributedCharacterIterator messageIterator = messageAS.getIterator(); FontRenderContext messageFRC = graphics2D.getFontRenderContext(); LineBreakMeasurer messageLBM = new LineBreakMeasurer(messageIterator, messageFRC);
double GetWidthOfAttributedString(Graphics2D graphics2D, AttributedString attributedString) { AttributedCharacterIterator characterIterator = attributedString.getIterator(); FontRenderContext fontRenderContext = graphics2D.getFontRenderContext(); LineBreakMeasurer lbm = new LineBreakMeasurer(characterIterator, fontRenderContext); TextLayout textLayout = lbm.nextLayout(Integer.MAX_VALUE); return textLayout.getBounds().getWidth(); }
/** Evaluate of the List of TextLayout objects corresponding * to this MText. Some things are approximations! */ private ArrayList<TextLayout> getLayouts(Graphics g) { ArrayList<TextLayout> layouts = new ArrayList<TextLayout>(); Graphics2D g2d = (Graphics2D) g; FontRenderContext frc = g2d.getFontRenderContext(); AttributedString attrStr = new AttributedString(text); attrStr.addAttribute(TextAttribute.FONT, font, 0, text.length()); LineBreakMeasurer measurer = new LineBreakMeasurer( attrStr.getIterator(), frc); float wrappingWidth; wrappingWidth = getSize().width - 15; while (measurer.getPosition() < text.length()) { TextLayout layout = measurer.nextLayout(wrappingWidth); layouts.add(layout); } return layouts; }
int paragraphEnd = paragraph.getEndIndex(); FontRenderContext frc = awtCanvas.getGraphicObject().getFontRenderContext(); LineBreakMeasurer lineMeasurer = new LineBreakMeasurer(paragraph, frc);
public MetaFont.GlyphVector[] createGlyphVectors(String s, int wrapWidth) { java.util.ArrayList rv = new java.util.ArrayList(); java.text.AttributedString attStr = new java.text.AttributedString(s); attStr.addAttribute(java.awt.font.TextAttribute.FONT, myFont); java.awt.font.LineBreakMeasurer lbm = new java.awt.font.LineBreakMeasurer(attStr.getIterator(), frc); int idx0 = 0; java.awt.font.TextLayout currLay = lbm.nextLayout(wrapWidth); while (currLay != null) { rv.add(new JavaGlyphVector(this, s.substring(idx0, lbm.getPosition()), currLay, frc)); idx0 = lbm.getPosition(); currLay = lbm.nextLayout(wrapWidth); } return (MetaFont.GlyphVector[]) rv.toArray(new MetaFont.GlyphVector[0]); }
private void drawErrorText(String errStr, int w, Graphics2D g2) { g2.setColor(colorModel.getColor("alertColor")); g2.setFont(new Font(res.getString("g2_Font"), Font.BOLD, 20)); g2.drawString(res.getString("ERROR"), 5, 20); AttributedString as = new AttributedString(errStr); as.addAttribute(TextAttribute.FONT, font12, 0, errStr.length()); AttributedCharacterIterator aci = as.getIterator(); FontRenderContext frc = g2.getFontRenderContext(); LineBreakMeasurer lbm = new LineBreakMeasurer(aci, frc); float x = 5, y = 25; lbm.setPosition(0); while (lbm.getPosition() < errStr.length()) { TextLayout tl = lbm.nextLayout(w - x - 5); if (!tl.isLeftToRight()) { x = w - tl.getAdvance(); } tl.draw(g2, x, y += tl.getAscent()); y += tl.getDescent() + tl.getLeading(); } }
protected void truncateLastLineAtChar(AttributedCharacterIterator allParagraphs, String paragraphText, int paragraphOffset) { //truncate the original line at char measuredState = prevMeasuredState.cloneState(); AttributedCharacterIterator lineParagraph = new AttributedString( allParagraphs, measuredState.textOffset, paragraphOffset + paragraphText.length()).getIterator(); LineBreakMeasurer lineMeasurer = new LineBreakMeasurer( lineParagraph, BreakIterator.getCharacterInstance(), FONT_RENDER_CONTEXT); //render again the last line //if the line does not fit now, it will remain empty renderNextLine(lineMeasurer, lineParagraph); }
public void paint(Graphics g) { super.paintComponent(g); Graphics2D g2 = (Graphics2D) g; FontRenderContext frc = g2.getFontRenderContext(); LineBreakMeasurer measurer = new LineBreakMeasurer(m_iterator, frc); measurer.setPosition(m_start); float y = 0; while (measurer.getPosition() < m_end) { double ix = Math.sqrt((m_width / 2 - y) * y); float x = m_width / 2.0F - (float) ix; int width = (int) ix * 2; TextLayout layout = measurer.nextLayout(width); y += layout.getAscent(); float dx = layout.isLeftToRight() ? 0 : width - layout.getAdvance(); layout.draw(g2, x + dx, y); y += layout.getDescent() + layout.getLeading(); } }
public LineBreakIterator( ParagraphRenderBox box, FontRenderContext fontRenderContext, AttributedCharacterIterator ci ) { this.wrappingWidth = (float) StrictGeomUtility.toExternalValue( box.getCachedWidth() ); this.justifiedLayout = ElementAlignment.JUSTIFY.equals( box.getStyleSheet().getStyleProperty( ElementStyleKeys.ALIGNMENT ) ); this.ci = ci; this.lineBreakMeasurer = new LineBreakMeasurer( ci, fontRenderContext ); this.lineBreakMeasurer.setPosition( ci.getBeginIndex() ); }
// Create Font object with Font attribute (e.g. Font family, Font size, etc) for calculation java.awt.Font currFont = new java.awt.Font(fontName, 0, fontSize); AttributedString attrStr = new AttributedString(cellValue); attrStr.addAttribute(TextAttribute.FONT, currFont); // Use LineBreakMeasurer to count number of lines needed for the text FontRenderContext frc = new FontRenderContext(null, true, true); LineBreakMeasurer measurer = new LineBreakMeasurer(attrStr.getIterator(), frc); int nextPos = 0; int lineCnt = 0; while (measurer.getPosition() < cellValue.length()) { nextPos = measurer.nextOffset(mergedCellWidth); // mergedCellWidth is the max width of each line lineCnt++; measurer.setPosition(nextPos); } Row currRow = currSht.getRow(rowNum); currRow.setHeight((short)(currRow.getHeight() * lineCnt)); // The above solution doesn't handle the newline character, i.e. "\n", and only // tested under horizontal merged cells.
private static int countLines(JTextArea textArea) { AttributedString text = new AttributedString(textArea.getText()); text.addAttribute(TextAttribute.FONT, textArea.getFont()); FontRenderContext frc = textArea.getFontMetrics(textArea.getFont()).getFontRenderContext(); AttributedCharacterIterator charIt = text.getIterator(); LineBreakMeasurer lineMeasurer = new LineBreakMeasurer(charIt, frc); Insets textAreaInsets = textArea.getInsets(); float formatWidth = textArea.getWidth() - textAreaInsets.left - textAreaInsets.right; lineMeasurer.setPosition(charIt.getBeginIndex()); int noLines = 0; while (lineMeasurer.getPosition() < charIt.getEndIndex()) { lineMeasurer.nextLayout(formatWidth); noLines++; } return noLines; }