本文整理汇总了Java中java.awt.font.TextLayout.getAscent方法的典型用法代码示例。如果您正苦于以下问题:Java TextLayout.getAscent方法的具体用法?Java TextLayout.getAscent怎么用?Java TextLayout.getAscent使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类java.awt.font.TextLayout
的用法示例。
在下文中一共展示了TextLayout.getAscent方法的12个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Java代码示例。
示例1: getPreferredSize
import java.awt.font.TextLayout; //导入方法依赖的package包/类
@Override
public Dimension getPreferredSize(JComponent c) {
String tipText = ((JToolTip)c).getTipText();
if (tipText == null || tipText.isEmpty()) {
return new Dimension(0, 0);
}
float x = 0f;
float y = 0f;
for (String line : lineBreak.split(tipText)) {
if (line.isEmpty()) {
y += LEADING;
continue;
}
AttributedCharacterIterator styledText
= new AttributedString(line).getIterator();
LineBreakMeasurer measurer = new LineBreakMeasurer(styledText, frc);
while (measurer.getPosition() < styledText.getEndIndex()) {
TextLayout layout = measurer.nextLayout(maximumWidth);
x = Math.max(x, layout.getVisibleAdvance());
y += layout.getAscent() + layout.getDescent() + layout.getLeading();
}
}
return new Dimension((int) (x + 2 * margin),
(int) (y + 2 * margin));
}
示例2: render
import java.awt.font.TextLayout; //导入方法依赖的package包/类
@Override
public void render(final Graphics2D g) {
if (this.displayedText == null || this.displayedText.isEmpty() || !Game.getRenderEngine().canRender(this.entity)) {
return;
}
final Point2D location = Game.getCamera().getViewPortLocation(this.entity);
RenderEngine.renderImage(g, this.bubble, new Point2D.Double(location.getX() + this.entity.getWidth() / 2.0 - this.textBoxWidth / 2.0 - PADDING, location.getY() - this.height - PADDING));
g.setColor(SPEAK_FONT_COLOR);
final FontRenderContext frc = g.getFontRenderContext();
final String text = this.displayedText;
final AttributedString styledText = new AttributedString(text);
styledText.addAttribute(TextAttribute.FONT, this.font);
final AttributedCharacterIterator iterator = styledText.getIterator();
final LineBreakMeasurer measurer = new LineBreakMeasurer(iterator, frc);
measurer.setPosition(0);
final float x = (float) Game.getCamera().getViewPortLocation(this.entity).getX() + this.entity.getWidth() / 2.0f - this.textBoxWidth / 2.0f;
float y = (float) Game.getCamera().getViewPortLocation(this.entity).getY() - this.height;
while (measurer.getPosition() < text.length()) {
final TextLayout layout = measurer.nextLayout(this.textBoxWidth);
y += layout.getAscent();
final float dx = layout.isLeftToRight() ? 0 : this.textBoxWidth - layout.getAdvance();
layout.draw(g, x + dx, y);
y += layout.getDescent() + layout.getLeading();
}
}
示例3: getHeight
import java.awt.font.TextLayout; //导入方法依赖的package包/类
public static float getHeight(TextLayout textLayout) {
float height = textLayout.getAscent() + textLayout.getDescent() + textLayout.getLeading();
// Ceil to whole points since when doing a compound TextLayout and then
// using TextLayoutUtils.getRealAlloc() with its TL.getVisualHighlightShape() and doing
// Graphics2D.fill(Shape) on the returned shape then for certain fonts such as
// Lucida Sans Typewriter size=10 on Ubuntu 10.04 the background is rendered one pixel down for certain lines
// so there appear white lines inside a selection.
return (float) Math.ceil(height);
}
示例4: paint
import java.awt.font.TextLayout; //导入方法依赖的package包/类
@Override
public void paint(Graphics g, JComponent c) {
if (c.isOpaque()) {
ImageLibrary.drawTiledImage("image.background.FreeColToolTip", g, c, null);
}
g.setColor(Color.BLACK); // FIXME: find out why this is necessary
Graphics2D graphics = (Graphics2D)g;
float x = margin;
float y = margin;
for (String line : lineBreak.split(((JToolTip) c).getTipText())) {
if (line.isEmpty()) {
y += LEADING;
continue;
}
AttributedCharacterIterator styledText =
new AttributedString(line).getIterator();
LineBreakMeasurer measurer = new LineBreakMeasurer(styledText, frc);
while (measurer.getPosition() < styledText.getEndIndex()) {
TextLayout layout = measurer.nextLayout(maximumWidth);
y += (layout.getAscent());
float dx = layout.isLeftToRight() ?
0 : (maximumWidth - layout.getAdvance());
layout.draw(graphics, x + dx, y);
y += layout.getDescent() + layout.getLeading();
}
}
}
示例5: runTest
import java.awt.font.TextLayout; //导入方法依赖的package包/类
public void runTest(Object ctx, int numReps) {
TLContext tlctx = (TLContext)ctx;
TextLayout tl = tlctx.tl;
float ht = 0;
do {
ht += tl.getAscent();
} while (--numReps >= 0);
}
示例6: getStringBounds
import java.awt.font.TextLayout; //导入方法依赖的package包/类
/**
* Returns the logical bounds of the specified array of characters
* in the specified <code>FontRenderContext</code>. The logical
* bounds contains the origin, ascent, advance, and height, which
* includes the leading. The logical bounds does not always enclose
* all the text. For example, in some languages and in some fonts,
* accent marks can be positioned above the ascent or below the
* descent. To obtain a visual bounding box, which encloses all the
* text, use the {@link TextLayout#getBounds() getBounds} method of
* <code>TextLayout</code>.
* <p>Note: The returned bounds is in baseline-relative coordinates
* (see {@link java.awt.Font class notes}).
* @param chars an array of characters
* @param beginIndex the initial offset in the array of
* characters
* @param limit the end offset in the array of characters
* @param frc the specified <code>FontRenderContext</code>
* @return a <code>Rectangle2D</code> that is the bounding box of the
* specified array of characters in the specified
* <code>FontRenderContext</code>.
* @throws IndexOutOfBoundsException if <code>beginIndex</code> is
* less than zero, or <code>limit</code> is greater than the
* length of <code>chars</code>, or <code>beginIndex</code>
* is greater than <code>limit</code>.
* @see FontRenderContext
* @see Font#createGlyphVector
* @since 1.2
*/
public Rectangle2D getStringBounds(char [] chars,
int beginIndex, int limit,
FontRenderContext frc) {
if (beginIndex < 0) {
throw new IndexOutOfBoundsException("beginIndex: " + beginIndex);
}
if (limit > chars.length) {
throw new IndexOutOfBoundsException("limit: " + limit);
}
if (beginIndex > limit) {
throw new IndexOutOfBoundsException("range length: " +
(limit - beginIndex));
}
// this code should be in textlayout
// quick check for simple text, assume GV ok to use if simple
boolean simple = values == null ||
(values.getKerning() == 0 && values.getLigatures() == 0 &&
values.getBaselineTransform() == null);
if (simple) {
simple = ! FontUtilities.isComplexText(chars, beginIndex, limit);
}
if (simple) {
GlyphVector gv = new StandardGlyphVector(this, chars, beginIndex,
limit - beginIndex, frc);
return gv.getLogicalBounds();
} else {
// need char array constructor on textlayout
String str = new String(chars, beginIndex, limit - beginIndex);
TextLayout tl = new TextLayout(str, this, frc);
return new Rectangle2D.Float(0, -tl.getAscent(), tl.getAdvance(),
tl.getAscent() + tl.getDescent() +
tl.getLeading());
}
}
示例7: getStringBounds
import java.awt.font.TextLayout; //导入方法依赖的package包/类
/**
* Returns the logical bounds of the specified array of characters
* in the specified {@code FontRenderContext}. The logical
* bounds contains the origin, ascent, advance, and height, which
* includes the leading. The logical bounds does not always enclose
* all the text. For example, in some languages and in some fonts,
* accent marks can be positioned above the ascent or below the
* descent. To obtain a visual bounding box, which encloses all the
* text, use the {@link TextLayout#getBounds() getBounds} method of
* {@code TextLayout}.
* <p>Note: The returned bounds is in baseline-relative coordinates
* (see {@link java.awt.Font class notes}).
* @param chars an array of characters
* @param beginIndex the initial offset in the array of
* characters
* @param limit the end offset in the array of characters
* @param frc the specified {@code FontRenderContext}
* @return a {@code Rectangle2D} that is the bounding box of the
* specified array of characters in the specified
* {@code FontRenderContext}.
* @throws IndexOutOfBoundsException if {@code beginIndex} is
* less than zero, or {@code limit} is greater than the
* length of {@code chars}, or {@code beginIndex}
* is greater than {@code limit}.
* @see FontRenderContext
* @see Font#createGlyphVector
* @since 1.2
*/
public Rectangle2D getStringBounds(char [] chars,
int beginIndex, int limit,
FontRenderContext frc) {
if (beginIndex < 0) {
throw new IndexOutOfBoundsException("beginIndex: " + beginIndex);
}
if (limit > chars.length) {
throw new IndexOutOfBoundsException("limit: " + limit);
}
if (beginIndex > limit) {
throw new IndexOutOfBoundsException("range length: " +
(limit - beginIndex));
}
// this code should be in textlayout
// quick check for simple text, assume GV ok to use if simple
boolean simple = values == null ||
(values.getKerning() == 0 && values.getLigatures() == 0 &&
values.getBaselineTransform() == null);
if (simple) {
simple = ! FontUtilities.isComplexText(chars, beginIndex, limit);
}
if (simple) {
GlyphVector gv = new StandardGlyphVector(this, chars, beginIndex,
limit - beginIndex, frc);
return gv.getLogicalBounds();
} else {
// need char array constructor on textlayout
String str = new String(chars, beginIndex, limit - beginIndex);
TextLayout tl = new TextLayout(str, this, frc);
return new Rectangle2D.Float(0, -tl.getAscent(), tl.getAdvance(),
tl.getAscent() + tl.getDescent() +
tl.getLeading());
}
}
示例8: createBubbleImage
import java.awt.font.TextLayout; //导入方法依赖的package包/类
private void createBubbleImage() {
final BufferedImage img = ImageProcessing.getCompatibleImage(500, 500);
final Graphics2D g = img.createGraphics();
g.setFont(this.font);
final int stringWidth = g.getFontMetrics().stringWidth(this.currentText);
if (stringWidth < this.textBoxWidth) {
this.textBoxWidth = stringWidth;
}
final FontRenderContext frc = g.getFontRenderContext();
final AttributedString styledText = new AttributedString(this.currentText);
styledText.addAttribute(TextAttribute.FONT, this.font);
final AttributedCharacterIterator iterator = styledText.getIterator();
final LineBreakMeasurer measurer = new LineBreakMeasurer(iterator, frc);
measurer.setPosition(0);
float y = 0;
while (measurer.getPosition() < this.currentText.length()) {
final TextLayout layout = measurer.nextLayout(this.textBoxWidth);
y += layout.getAscent() + layout.getLeading() + 0.2;
}
final RoundRectangle2D bounds = new RoundRectangle2D.Double(0, 0, this.textBoxWidth + 2 * PADDING, y + 2 * PADDING, PADDING, PADDING);
// Build a path
final GeneralPath path = new GeneralPath();
path.moveTo(bounds.getWidth() / 2.0 - TRIANGLE_SIZE / 2.0, bounds.getHeight());
path.lineTo(bounds.getWidth() / 2.0, bounds.getHeight() + TRIANGLE_SIZE);
path.lineTo(bounds.getWidth() / 2.0 + TRIANGLE_SIZE / 2.0, bounds.getHeight());
path.closePath();
final Area ar = new Area(bounds);
ar.add(new Area(path));
int width = ar.getBounds().width;
this.height = ar.getBounds().height;
g.setColor(SPEAK_BACKGROUNDCOLOR);
g.fill(ar);
g.setColor(SPEAK_BORDERCOLOR);
g.draw(ar);
g.dispose();
this.bubble = ImageProcessing.crop(img, ImageProcessing.CROP_ALIGN_LEFT, ImageProcessing.CROP_VALIGN_TOP, width + 1, this.height + 1);
}
示例9: drawNative
import java.awt.font.TextLayout; //导入方法依赖的package包/类
public void drawNative(Graphics2D g, int align, int pos, float fRectHeight,
MovingArea area) {
float left = 0;
float fromY = 0;
if (pos == 1)
fromY += fRectHeight / 2 - height / 2;
else if (pos == 2)
fromY += fRectHeight;
if (fromY < 0)
fromY = 0;
int size = layouts.size();
for (int i = 0; i < size; i++) {
TextLayout textLayout = layouts.get(i);
if (align == Line.CENTER_ALIGN)
left = (float) maxWidth / 2f - textLayout.getAdvance() / 2f;
else if (align == Line.RIGHT_ALIGN)
left = (float) maxWidth - textLayout.getAdvance();
fromY += textLayout.getAscent();
if (fromY >= fRectHeight && i + 1 < size)
break;
if (fromY + textLayout.getAscent() + textLayout.getDescent()
// + textLayout.getLeading()
>= fRectHeight
&& i + 1 < size) {
// textLayout= textLayout.getJustifiedLayout(maxWidth-20);
// textLayout.draw(g, left, fromY);
g.drawString(texts.get(i), left, fromY);
/*
* Color color = g.getColor(); g.setColor(new Color(120, 120,
* 120));
*
* g.drawString("(.)", left + textLayout.getAdvance() + (float)
* area.getIDoubleOrdinate(-0.0), fromY); g.setColor(color);
*/
break;
} else
g.drawString(texts.get(i), left, fromY);
// textLayout.draw(g, left, fromY);
fromY += textLayout.getDescent() + textLayout.getLeading();
}
}
示例10: draw
import java.awt.font.TextLayout; //导入方法依赖的package包/类
public void draw(Graphics2D g, int align, int pos, float fRectHeight,
MovingArea area) {
float left = 0;
float fromY = 0;
if (pos == 1)
fromY += fRectHeight / 2 - height / 2;
else if (pos == 2)
fromY += fRectHeight;
if (fromY < 0)
fromY = 0;
int size = layouts.size();
for (int i = 0; i < size; i++) {
TextLayout textLayout = layouts.get(i);
if (align == Line.CENTER_ALIGN)
left = (float) maxWidth / 2f - textLayout.getAdvance() / 2f;
else if (align == Line.RIGHT_ALIGN)
left = (float) maxWidth - textLayout.getAdvance();
fromY += textLayout.getAscent();
if (fromY >= fRectHeight && i + 1 < size)
break;
if (fromY + textLayout.getAscent() + textLayout.getDescent()
// + textLayout.getLeading()
>= fRectHeight
&& i + 1 < size) {
// textLayout= textLayout.getJustifiedLayout(maxWidth-20);
textLayout.draw(g, left, fromY);
/*
* Color color = g.getColor(); g.setColor(new Color(120, 120,
* 120));
*
* g.drawString("(.)", left + textLayout.getAdvance() + (float)
* area.getIDoubleOrdinate(-0.0), fromY); g.setColor(color);
*/
break;
} else
textLayout.draw(g, left, fromY);
fromY += textLayout.getDescent() + textLayout.getLeading();
}
}
示例11: drawWithSel
import java.awt.font.TextLayout; //导入方法依赖的package包/类
public void drawWithSel(Graphics2D g, int align, int pos,
float fRectHeight, MovingArea area, int[][] found) {
float left = 0;
float fromY = 0;
if (pos == 1)
fromY += fRectHeight / 2 - height / 2;
else if (pos == 2)
fromY += fRectHeight;
if (fromY < 0)
fromY = 0;
int size = layouts.size();
in = false;
int selIndex = 0;
for (int i = 0; i < size; i++) {
TextLayout textLayout = layouts.get(i);
if (align == Line.CENTER_ALIGN)
left = (float) maxWidth / 2f - textLayout.getAdvance() / 2f;
else if (align == Line.RIGHT_ALIGN)
left = (float) maxWidth - textLayout.getAdvance();
fromY += textLayout.getAscent();
if (fromY >= fRectHeight && i + 1 < size)
break;
if (fromY + textLayout.getAscent() + textLayout.getDescent() >= fRectHeight
&& i + 1 < size) {
textLayout.draw(g, left, fromY);
selIndex = drawSels(g, found, selIndex, i, textLayout, left,
fromY);
break;
} else {
textLayout.draw(g, left, fromY);
selIndex = drawSels(g, found, selIndex, i, textLayout, left,
fromY);
}
fromY += textLayout.getDescent() + textLayout.getLeading();
}
}
示例12: drawText
import java.awt.font.TextLayout; //导入方法依赖的package包/类
private void drawText( Graphics g, int w, int h ) {
Graphics2D g2 = (Graphics2D) g;
g2.setColor(Color.white);
g2.fillRect(0, 0, w, h);
g2.setColor(Color.black);
/// sets font, RenderingHints.
setParams( g2 );
/// If flag is set, recalculate fontMetrics and reset the scrollbar
if ( updateFontMetrics || isPrinting ) {
/// NOTE: re-calculates in case G2 transform
/// is something other than NONE
calcFontMetrics( g2, w, h );
updateFontMetrics = false;
}
/// Calculate the amount of text that can be drawn...
calcTextRange();
/// Draw according to the set "Text to Use" mode
if ( textToUse == RANGE_TEXT || textToUse == ALL_GLYPHS ) {
int charToDraw = drawStart;
if ( showGrid )
drawGrid( g2 );
for ( int i = 0; i < numCharDown && charToDraw <= drawEnd; i++ ) {
for ( int j = 0; j < numCharAcross && charToDraw <= drawEnd; j++, charToDraw++ ) {
int gridLocX = j * gridWidth + canvasInset_X;
int gridLocY = i * gridHeight + canvasInset_Y;
modeSpecificDrawChar( g2, charToDraw,
gridLocX + gridWidth / 2,
gridLocY + maxAscent );
}
}
}
else if ( textToUse == USER_TEXT ) {
g2.drawRect( 0, 0, w - 1, h - 1 );
for ( int i = drawStart; i <= drawEnd; i++ ) {
int lineStartX = canvasInset_Y;
int lineStartY = ( i - drawStart ) * gridHeight + maxAscent;
modeSpecificDrawLine( g2, userText[i], lineStartX, lineStartY );
}
}
else {
float xPos, yPos = (float) canvasInset_Y;
g2.drawRect( 0, 0, w - 1, h - 1 );
for ( int i = drawStart; i <= drawEnd; i++ ) {
TextLayout oneLine = (TextLayout) lineBreakTLs.elementAt( i );
xPos =
oneLine.isLeftToRight() ?
canvasInset_X : ( (float) w - oneLine.getAdvance() - canvasInset_X );
float fmData[] = {0, oneLine.getAscent(), 0, oneLine.getDescent(), 0, oneLine.getLeading()};
if (g2Transform != NONE) {
AffineTransform at = getAffineTransform(g2Transform);
at.transform( fmData, 0, fmData, 0, 3);
}
//yPos += oneLine.getAscent();
yPos += fmData[1]; // ascent
//oneLine.draw( g2, xPos, yPos );
tlDrawLine( g2, oneLine, xPos, yPos );
//yPos += oneLine.getDescent() + oneLine.getLeading();
yPos += fmData[3] + fmData[5]; // descent + leading
}
}
g2.dispose();
}