Java 类org.eclipse.swt.graphics.TextLayout 实例源码
项目:DarwinSPL
文件:DwprofileBrowserInformationControl.java
/**
* <p>
* Creates and initializes the text layout used to compute the size hint.
* </p>
*
* @since 3.2
*/
private void createTextLayout() {
fTextLayout= new TextLayout(fBrowser.getDisplay());
// Initialize fonts
String symbolicFontName= fSymbolicFontName == null ? JFaceResources.DIALOG_FONT : fSymbolicFontName;
Font font = JFaceResources.getFont(symbolicFontName);
fTextLayout.setFont(font);
fTextLayout.setWidth(-1);
font = JFaceResources.getFontRegistry().getBold(symbolicFontName);
fBoldStyle = new TextStyle(font, null, null);
// Compute and set tab width
fTextLayout.setText(" ");
int tabWidth = fTextLayout.getBounds().width;
fTextLayout.setTabs(new int[] {tabWidth});
fTextLayout.setText("");
}
项目:DarwinSPL
文件:HyexpressionBrowserInformationControl.java
/**
* <p>
* Creates and initializes the text layout used to compute the size hint.
* </p>
*
* @since 3.2
*/
private void createTextLayout() {
fTextLayout= new TextLayout(fBrowser.getDisplay());
// Initialize fonts
String symbolicFontName= fSymbolicFontName == null ? JFaceResources.DIALOG_FONT : fSymbolicFontName;
Font font = JFaceResources.getFont(symbolicFontName);
fTextLayout.setFont(font);
fTextLayout.setWidth(-1);
font = JFaceResources.getFontRegistry().getBold(symbolicFontName);
fBoldStyle = new TextStyle(font, null, null);
// Compute and set tab width
fTextLayout.setText(" ");
int tabWidth = fTextLayout.getBounds().width;
fTextLayout.setTabs(new int[] {tabWidth});
fTextLayout.setText("");
}
项目:DarwinSPL
文件:HyvalidityformulaBrowserInformationControl.java
/**
* <p>
* Creates and initializes the text layout used to compute the size hint.
* </p>
*
* @since 3.2
*/
private void createTextLayout() {
fTextLayout= new TextLayout(fBrowser.getDisplay());
// Initialize fonts
String symbolicFontName= fSymbolicFontName == null ? JFaceResources.DIALOG_FONT : fSymbolicFontName;
Font font = JFaceResources.getFont(symbolicFontName);
fTextLayout.setFont(font);
fTextLayout.setWidth(-1);
font = JFaceResources.getFontRegistry().getBold(symbolicFontName);
fBoldStyle = new TextStyle(font, null, null);
// Compute and set tab width
fTextLayout.setText(" ");
int tabWidth = fTextLayout.getBounds().width;
fTextLayout.setTabs(new int[] {tabWidth});
fTextLayout.setText("");
}
项目:DarwinSPL
文件:HydatavalueBrowserInformationControl.java
/**
* <p>
* Creates and initializes the text layout used to compute the size hint.
* </p>
*
* @since 3.2
*/
private void createTextLayout() {
fTextLayout= new TextLayout(fBrowser.getDisplay());
// Initialize fonts
String symbolicFontName= fSymbolicFontName == null ? JFaceResources.DIALOG_FONT : fSymbolicFontName;
Font font = JFaceResources.getFont(symbolicFontName);
fTextLayout.setFont(font);
fTextLayout.setWidth(-1);
font = JFaceResources.getFontRegistry().getBold(symbolicFontName);
fBoldStyle = new TextStyle(font, null, null);
// Compute and set tab width
fTextLayout.setText(" ");
int tabWidth = fTextLayout.getBounds().width;
fTextLayout.setTabs(new int[] {tabWidth});
fTextLayout.setText("");
}
项目:DarwinSPL
文件:HymappingBrowserInformationControl.java
/**
* <p>
* Creates and initializes the text layout used to compute the size hint.
* </p>
*
* @since 3.2
*/
private void createTextLayout() {
fTextLayout= new TextLayout(fBrowser.getDisplay());
// Initialize fonts
String symbolicFontName= fSymbolicFontName == null ? JFaceResources.DIALOG_FONT : fSymbolicFontName;
Font font = JFaceResources.getFont(symbolicFontName);
fTextLayout.setFont(font);
fTextLayout.setWidth(-1);
font = JFaceResources.getFontRegistry().getBold(symbolicFontName);
fBoldStyle = new TextStyle(font, null, null);
// Compute and set tab width
fTextLayout.setText(" ");
int tabWidth = fTextLayout.getBounds().width;
fTextLayout.setTabs(new int[] {tabWidth});
fTextLayout.setText("");
}
项目:DarwinSPL
文件:HyconstraintsBrowserInformationControl.java
/**
* <p>
* Creates and initializes the text layout used to compute the size hint.
* </p>
*
* @since 3.2
*/
private void createTextLayout() {
fTextLayout= new TextLayout(fBrowser.getDisplay());
// Initialize fonts
String symbolicFontName= fSymbolicFontName == null ? JFaceResources.DIALOG_FONT : fSymbolicFontName;
Font font = JFaceResources.getFont(symbolicFontName);
fTextLayout.setFont(font);
fTextLayout.setWidth(-1);
font = JFaceResources.getFontRegistry().getBold(symbolicFontName);
fBoldStyle = new TextStyle(font, null, null);
// Compute and set tab width
fTextLayout.setText(" ");
int tabWidth = fTextLayout.getBounds().width;
fTextLayout.setTabs(new int[] {tabWidth});
fTextLayout.setText("");
}
项目:DarwinSPL
文件:HymanifestBrowserInformationControl.java
/**
* <p>
* Creates and initializes the text layout used to compute the size hint.
* </p>
*
* @since 3.2
*/
private void createTextLayout() {
fTextLayout= new TextLayout(fBrowser.getDisplay());
// Initialize fonts
String symbolicFontName= fSymbolicFontName == null ? JFaceResources.DIALOG_FONT : fSymbolicFontName;
Font font = JFaceResources.getFont(symbolicFontName);
fTextLayout.setFont(font);
fTextLayout.setWidth(-1);
font = JFaceResources.getFontRegistry().getBold(symbolicFontName);
fBoldStyle = new TextStyle(font, null, null);
// Compute and set tab width
fTextLayout.setText(" ");
int tabWidth = fTextLayout.getBounds().width;
fTextLayout.setTabs(new int[] {tabWidth});
fTextLayout.setText("");
}
项目:APICloud-Studio
文件:CustomBrowserInformationControl.java
/**
* Creates and initializes the text layout used to compute the size hint.
*
* @since 3.2
*/
private void createTextLayout()
{
fTextLayout = new TextLayout(fBrowser.getDisplay());
// Initialize fonts
String symbolicFontName = fSymbolicFontName == null ? JFaceResources.DIALOG_FONT : fSymbolicFontName;
Font font = JFaceResources.getFont(symbolicFontName);
fTextLayout.setFont(font);
fTextLayout.setWidth(-1);
font = JFaceResources.getFontRegistry().getBold(symbolicFontName);
fBoldStyle = new TextStyle(font, null, null);
// Compute and set tab width
fTextLayout.setText(" "); //$NON-NLS-1$
int tabWidth = fTextLayout.getBounds().width;
fTextLayout.setTabs(new int[] { tabWidth });
fTextLayout.setText(""); //$NON-NLS-1$
}
项目:mytourbook
文件:UI.java
public static String shortenText(final GC gc, String text, final int width, final String ellipses) {
if (gc.textExtent(text, 0).x <= width) {
return text;
}
final int ellipseWidth = gc.textExtent(ellipses, 0).x;
final int length = text.length();
final TextLayout layout = new TextLayout(gc.getDevice());
layout.setText(text);
int end = layout.getPreviousOffset(length, SWT.MOVEMENT_CLUSTER);
while (end > 0) {
text = text.substring(0, end);
final int l = gc.textExtent(text, 0).x;
if (l + ellipseWidth <= width) {
break;
}
end = layout.getPreviousOffset(end, SWT.MOVEMENT_CLUSTER);
}
layout.dispose();
return end == 0 ? text.substring(0, 1) : text + ellipses;
}
项目:translationstudio8
文件:TextPainterWithPadding.java
public int getPreferredHeight(LayerCell cell, GC gc, IConfigRegistry configRegistry) {
if (innerTagFactory == null) {
innerTagFactory = new XliffInnerTagFactory(placeHolderBuilder);
}
innerTagFactory.reset();
TextLayout layout = getCellTextLayout(cell);
int counts = layout.getLineCount();
int contentHeight = 0;
for (int i = 0; i < counts; i++) {
contentHeight += layout.getLineBounds(i).height;
}
layout.dispose();
contentHeight += Math.max(counts - 1, 0) * SEGMENT_LINE_SPACING;
contentHeight += 4;// 加上编辑模式下,StyledTextCellEditor的边框
contentHeight += topPadding;
contentHeight += bottomPadding;
return contentHeight;
}
项目:translationstudio8
文件:XGridCellRenderer.java
public TextLayout getTextLayout(GC gc, GridItem item, int columnIndex, boolean innerTagStyled, boolean drawInnerTag) {
TextLayout layout = new TextLayout(gc.getDevice());
layout.setFont(font);
layout.setTabs(new int[]{tabWidth});
innerTagFactory.reset();
String displayStr = "";
try{
displayStr = InnerTagUtil.resolveTag(innerTagFactory.parseInnerTag(item.getText(columnIndex)));
}catch (NullPointerException e) {
return null;
}
layout.setText(displayStr);
int width = getBounds().width - leftMargin - rightMargin;
layout.setWidth(width < 1 ? 1 : width);
layout.setSpacing(Constants.SEGMENT_LINE_SPACING);
layout.setAlignment(SWT.LEFT);
layout.setOrientation(item.getParent().getOrientation());
if (displayStr.length() != 0 && innerTagStyled) {
attachInnertTagStyle(gc, layout, drawInnerTag);
}
return layout;
}
项目:translationstudio8
文件:XGridCellRenderer.java
protected void drawInnerTag(GC gc, TextLayout layout) {
String displayStr = layout.getText();
List<InnerTagBean> innerTagBeans = innerTagFactory.getInnerTagBeans();
Rectangle bounds = getBounds();
for (InnerTagBean innerTagBean : innerTagBeans) {
String placeHolder = placeHolderBuilder.getPlaceHolder(innerTagBeans, innerTagBeans.indexOf(innerTagBean));
int start = displayStr.indexOf(placeHolder);
if (start == -1) {
continue;
}
if (gc != null) {
Point p = layout.getLocation(start, false);
int x = bounds.x + p.x + leftMargin;
x += SEGMENT_LINE_SPACING;
Point tagSize = tagRender.calculateTagSize(innerTagBean);
int lineIdx = layout.getLineIndex(start);
Rectangle r = layout.getLineBounds(lineIdx);
int y = bounds.y + p.y + topMargin + r.height / 2 - tagSize.y /2;
tagRender.draw(gc, innerTagBean, x, y - layout.getAscent());
}
}
}
项目:translationstudio8
文件:TagStyleConfigurator.java
public static void configure(TextLayout textLayout) {
String text = textLayout.getText();
Document doc = new Document(text);
ITokenScanner scanner = getRecipeScanner(doc);
scanner.setRange(doc, 0, doc.getLength());
IToken token;
while ((token = scanner.nextToken()) != Token.EOF) {
int offset = scanner.getTokenOffset();
int length = scanner.getTokenLength();
Object data = token.getData();
if (data != null && data instanceof TextStyle) {
TextStyle textStyle = (TextStyle) data;
textLayout.setStyle(textStyle, offset, offset + length - 1);
}
}
}
项目:translationstudio8
文件:TagStyleConfigurator.java
public static void configure(TextLayout textLayout) {
String text = textLayout.getText();
Document doc = new Document(text);
ITokenScanner scanner = getRecipeScanner(doc);
scanner.setRange(doc, 0, doc.getLength());
IToken token;
while ((token = scanner.nextToken()) != Token.EOF) {
int offset = scanner.getTokenOffset();
int length = scanner.getTokenLength();
Object data = token.getData();
if (data != null && data instanceof TextStyle) {
TextStyle textStyle = (TextStyle) data;
textLayout.setStyle(textStyle, offset, offset + length - 1);
}
}
scanner = null;
doc = null;
}
项目:gef-gwt
文件:ScaledGraphics.java
/**
* @see Graphics#drawTextLayout(TextLayout, int, int, int, int, Color,
* Color)
*/
public void drawTextLayout(TextLayout layout, int x, int y,
int selectionStart, int selectionEnd, Color selectionForeground,
Color selectionBackground) {
TextLayout scaled = zoomTextLayout(layout);
if (scaled == null) {
return;
}
try {
graphics.drawTextLayout(scaled,
(int) Math.floor(x * zoom + fractionalX),
(int) Math.floor(y * zoom + fractionalY), selectionStart,
selectionEnd, selectionBackground, selectionForeground);
} finally {
scaled.dispose();
}
}
项目:gef-gwt
文件:TextFlow.java
Point getPointInBox(TextFragmentBox box, int offset, int index,
boolean trailing) {
offset -= box.offset;
offset = Math.min(box.length, offset);
Point result = new Point(0, box.getTextTop());
if (bidiInfo == null) {
if (trailing && offset < box.length)
offset++;
String substring = getText().substring(box.offset,
box.offset + offset);
result.x = getTextUtilities().getTextExtents(substring, getFont()).width;
} else {
TextLayout layout = FlowUtilities.getTextLayout();
layout.setFont(getFont());
String fragString = getBidiSubstring(box, index);
layout.setText(fragString);
offset += getBidiPrefixLength(box, index);
result.x = layout.getLocation(offset, trailing).x;
if (isMirrored())
result.x = box.width - result.x;
}
result.x += box.getX();
return result;
}
项目:tmxeditor8
文件:TagStyleConfigurator.java
public static void configure(TextLayout textLayout) {
String text = textLayout.getText();
Document doc = new Document(text);
ITokenScanner scanner = getRecipeScanner(doc);
scanner.setRange(doc, 0, doc.getLength());
IToken token;
while ((token = scanner.nextToken()) != Token.EOF) {
int offset = scanner.getTokenOffset();
int length = scanner.getTokenLength();
Object data = token.getData();
if (data != null && data instanceof TextStyle) {
TextStyle textStyle = (TextStyle) data;
textLayout.setStyle(textStyle, offset, offset + length - 1);
}
}
}
项目:tmxeditor8
文件:TextPainterWithPadding.java
public int getPreferredHeight(LayerCell cell, GC gc, IConfigRegistry configRegistry) {
if (innerTagFactory == null) {
innerTagFactory = new XliffInnerTagFactory(placeHolderBuilder);
}
innerTagFactory.reset();
TextLayout layout = getCellTextLayout(cell);
int counts = layout.getLineCount();
int contentHeight = 0;
for (int i = 0; i < counts; i++) {
contentHeight += layout.getLineBounds(i).height;
}
layout.dispose();
contentHeight += Math.max(counts - 1, 0) * SEGMENT_LINE_SPACING;
contentHeight += 4;// 加上编辑模式下,StyledTextCellEditor的边框
contentHeight += topPadding;
contentHeight += bottomPadding;
return contentHeight;
}
项目:tmxeditor8
文件:XGridCellRenderer.java
public TextLayout getTextLayout(GC gc, GridItem item, int columnIndex, boolean innerTagStyled, boolean drawInnerTag) {
TextLayout layout = new TextLayout(gc.getDevice());
layout.setFont(JFaceResources.getFont(net.heartsome.cat.ts.ui.Constants.MATCH_VIEWER_TEXT_FONT));
innerTagFactory.reset();
String displayStr = "";
try{
displayStr = InnerTagUtil.resolveTag(innerTagFactory.parseInnerTag(item.getText(columnIndex)));
}catch (NullPointerException e) {
return null;
}
layout.setText(displayStr);
int width = getBounds().width - leftMargin - rightMargin;
layout.setWidth(width < 1 ? 1 : width);
layout.setSpacing(Constants.SEGMENT_LINE_SPACING);
layout.setAlignment(SWT.LEFT);
if (displayStr.length() != 0 && innerTagStyled) {
attachInnertTagStyle(gc, layout, drawInnerTag);
}
return layout;
}
项目:tmxeditor8
文件:TagStyleConfigurator.java
public static void configure(TextLayout textLayout) {
String text = textLayout.getText();
Document doc = new Document(text);
ITokenScanner scanner = getRecipeScanner(doc);
scanner.setRange(doc, 0, doc.getLength());
IToken token;
while ((token = scanner.nextToken()) != Token.EOF) {
int offset = scanner.getTokenOffset();
int length = scanner.getTokenLength();
Object data = token.getData();
if (data != null && data instanceof TextStyle) {
TextStyle textStyle = (TextStyle) data;
textLayout.setStyle(textStyle, offset, offset + length - 1);
}
}
}
项目:tmxeditor8
文件:TagStyleConfigurator.java
public static void configure(TextLayout textLayout) {
String text = textLayout.getText();
Document doc = new Document(text);
ITokenScanner scanner = getRecipeScanner(doc);
scanner.setRange(doc, 0, doc.getLength());
IToken token;
while ((token = scanner.nextToken()) != Token.EOF) {
int offset = scanner.getTokenOffset();
int length = scanner.getTokenLength();
Object data = token.getData();
if (data != null && data instanceof TextStyle) {
TextStyle textStyle = (TextStyle) data;
textLayout.setStyle(textStyle, offset, offset + length - 1);
}
}
scanner = null;
doc = null;
}
项目:birt
文件:CellFigure.java
protected void drawBlankString( Graphics g, String s )
{
TextLayout tl = new TextLayout( Display.getCurrent( ) );
// bidi_hcg: Apply text direction
tl.setOrientation( this.rtl ? SWT.RIGHT_TO_LEFT : SWT.LEFT_TO_RIGHT );
tl.setText( s );
Rectangle rc = tl.getBounds( );
int left = ( getClientArea( ).width - rc.width ) / 2;
int top = ( getClientArea( ).height - rc.height ) / 2;
g.drawText( s, getClientArea( ).x + left, getClientArea( ).y + top );
tl.dispose();
}
项目:relations
文件:Styles.java
/**
* Convenience method
*
* @param inWidget
* {@link StyledText}
* @return {@link PaintObjectListener}
*/
public static PaintObjectListener getPaintObjectListener(
final StyledText inWidget) {
return new PaintObjectListener() {
@Override
public void paintObject(final PaintObjectEvent inEvent) {
final Display lDisplay = inEvent.display;
final StyleRange lStyle = inEvent.style;
final int lPosition = inEvent.x + lStyle.metrics.width
- BULLET_WIDTH + 2;
Font lFont = lStyle.font;
if (lFont == null)
lFont = inWidget.getFont();
final TextLayout lLayout = new TextLayout(lDisplay);
lLayout.setAscent(inEvent.ascent);
lLayout.setDescent(inEvent.descent);
lLayout.setFont(lFont);
lLayout.setText(String.format("%s.", inEvent.bulletIndex + 1)); //$NON-NLS-1$
lLayout.draw(inEvent.gc, lPosition, inEvent.y);
lLayout.dispose();
}
};
}
项目:ide-plugins
文件:PluginsSWT.java
private TextLayout getTextLayout(Plugin plugin, boolean selected) {
final TextLayout textLayout = new TextLayout(display);
int length1 = plugin.getName().length();
String text = plugin.getName() + "\n \n" + plugin.getDescription();
textLayout.setText(text);
textLayout.setStyle(selected ? styleTitleSelected : styleTitle, 0, length1);
textLayout.setStyle(styleGap, length1 + 1, length1 + 2);
textLayout.setStyle(selected ? styleRowSelected : styleRow, length1 + 3, text.length());
return textLayout;
}
项目:codelens-eclipse
文件:StyledTextRendererEmulator.java
protected TextLayout getTextLayout(int lineIndex, int orientation, int width, int lineSpacing, Object obj,
Method proceed, Object[] args) throws Exception {
args[0] = lineIndex;
args[1] = orientation;
args[2] = width;
args[3] = lineSpacing;
return (TextLayout) proceed.invoke(obj, args);
}
项目:codelens-eclipse
文件:StyledTextRenderer.java
boolean isSameLineSpacing(int lineIndex, int newLineSpacing) {
if (layouts == null) {
return false;
}
int layoutIndex = lineIndex - topIndex;
if (0 <= layoutIndex && layoutIndex < layouts.length) {
TextLayout layout = layouts[layoutIndex];
return layout != null && !layout.isDisposed() && layout.getSpacing() == newLineSpacing;
}
return false;
}
项目:statecharts
文件:StyledLabel.java
protected void updateImage() {
Rectangle bounds = getBounds();
if (bounds.width <= 0 || bounds.height <= 0)
return;
TextLayout layout = new TextLayout(Display.getDefault());
//layout.setFont(getFont());
layout.setText(getText());
for (StyleRange styleRange : ranges) {
//styleRange.background = ColorConstants.white;
layout.setStyle(styleRange, styleRange.start, styleRange.start
+ styleRange.length);
}
if (image != null && !image.isDisposed()) {
image.dispose();
}
image = new Image(Display.getDefault(), bounds.width, bounds.height);
GC gc = new GC(image);
gc.setBackground(ColorConstants.red);
layout.draw(gc, 0, 0);
image.getImageData().transparentPixel = image.getImageData().palette
.getPixel(ColorConstants.white.getRGB());
layout.dispose();
gc.dispose();
}
项目:jGrid
文件:CellRenderer.java
public CellRenderer(final Grid<T> grid) {
super(grid);
errorImage = getImage("cell_error.gif");
contentLocation = new Point(0, 0);
imageExtent = new Point(0, 0);
innerBounds = new Rectangle(0, 0, 0, 0);
textLayout = new TextLayout(grid.getDisplay());
anchorCollector = new StyleCollector();
grid.addDisposeListener(new DisposeListener() {
@Override
public void widgetDisposed(DisposeEvent e) {
textLayout.dispose();
}
});
}
项目:jo-widgets
文件:JoCLabel.java
int calculateOffset(final TextLayout layout, final int offset) {
final int nextOffset = layout.getNextOffset(offset, SWT.MOVEMENT_CLUSTER);
if (nextOffset != offset) {
return layout.getPreviousOffset(nextOffset, SWT.MOVEMENT_CLUSTER);
}
return offset;
}
项目:p2-installer
文件:InfoButton.java
/**
* Shorten the given text <code>t</code> so that its length doesn't exceed
* the given width. The default implementation replaces characters in the
* center of the original string with an ellipsis ("...").
* Override if you need a different strategy.
*
* @param gc the gc to use for text measurement
* @param t the text to shorten
* @param width the width to shorten the text to, in pixels
* @return the shortened text
* Note, this code was copied from
* org.eclipse.swt.custom.CLabel.shortenText()
*/
protected String shortenText(GC gc, String t, int width) {
if (t == null) return null;
int w = gc.textExtent(ELLIPSIS, DRAW_FLAGS).x;
if (width<=w) return t;
int l = t.length();
int max = l/2;
int min = 0;
int mid = (max+min)/2 - 1;
if (mid <= 0) return t;
TextLayout layout = new TextLayout (getDisplay());
layout.setText(t);
mid = validateOffset(layout, mid);
while (min < mid && mid < max) {
String s1 = t.substring(0, mid);
String s2 = t.substring(validateOffset(layout, l-mid), l);
int l1 = gc.textExtent(s1, DRAW_FLAGS).x;
int l2 = gc.textExtent(s2, DRAW_FLAGS).x;
if (l1+w+l2 > width) {
max = mid;
mid = validateOffset(layout, (max+min)/2);
} else if (l1+w+l2 < width) {
min = mid;
mid = validateOffset(layout, (max+min)/2);
} else {
min = max;
}
}
String result = mid == 0 ? t : t.substring(0, mid) + ELLIPSIS + t.substring(validateOffset(layout, l-mid), l);
layout.dispose();
return result;
}
项目:translationstudio8
文件:TextPainterWithPadding.java
private TextLayout getCellTextLayout(LayerCell cell) {
int orientation = editor.getTable().getStyle() & (SWT.LEFT_TO_RIGHT | SWT.RIGHT_TO_LEFT);
TextLayout layout = new TextLayout(editor.getTable().getDisplay());
layout.setOrientation(orientation);
layout.setSpacing(Constants.SEGMENT_LINE_SPACING);
layout.setFont(font);
layout.setAscent(ascent);
layout.setDescent(descent); // 和 StyledTextEditor 同步
layout.setTabs(new int[] { tabWidth });
Rectangle rectangle = cell.getBounds();
int width = rectangle.width - leftPadding - rightPadding;
width -= 1;
if (wrapText && width > 0) {
layout.setWidth(width);
}
String displayText = InnerTagUtil.resolveTag(innerTagFactory.parseInnerTag((String) cell.getDataValue()));
if (XliffEditorParameter.getInstance().isShowNonpirnttingCharacter()) {
displayText = displayText.replaceAll("\\n", Constants.LINE_SEPARATOR_CHARACTER + "\n");
displayText = displayText.replaceAll("\\t", Constants.TAB_CHARACTER + "\u200B");
displayText = displayText.replaceAll(" ", Constants.SPACE_CHARACTER + "\u200B");
}
layout.setText(displayText);
List<InnerTagBean> innerTagBeans = innerTagFactory.getInnerTagBeans();
for (InnerTagBean innerTagBean : innerTagBeans) {
String placeHolder = placeHolderBuilder.getPlaceHolder(innerTagBeans, innerTagBeans.indexOf(innerTagBean));
int start = displayText.indexOf(placeHolder);
if (start == -1) {
continue;
}
TextStyle style = new TextStyle();
Point rect = tagRender.calculateTagSize(innerTagBean);
style.metrics = new GlyphMetrics(rect.y, 0, rect.x + SEGMENT_LINE_SPACING * 2);
layout.setStyle(style, start, start + placeHolder.length() - 1);
}
return layout;
}
项目:translationstudio8
文件:TextPainterWithPadding.java
private void appendNonprintingStyle(TextLayout layout) {
TextStyle style = new TextStyle(font, GUIHelper.getColor(new RGB(100, 100, 100)), null);
String s = layout.getText();
Matcher matcher = Constants.NONPRINTING_PATTERN.matcher(s);
while (matcher.find()) {
int start = matcher.start();
int end = matcher.end();
// style.metrics = new GlyphMetrics(10, 0, 1);
layout.setStyle(style, start, end - 1);
}
}
项目:translationstudio8
文件:XGridCellRenderer.java
/**
* 设置字体
* @param font
* ;
*/
public void setFont(Font font) {
TextLayout layout = new TextLayout(Display.getDefault());
layout.setFont(font);
StringBuffer tabBuffer = new StringBuffer(tabSize);
for (int i = 0; i < tabSize; i++) {
tabBuffer.append(' ');
}
layout.setText(tabBuffer.toString());
tabWidth = layout.getBounds().width;
layout.dispose();
this.font = font;
}
项目:gef-gwt
文件:SWTGraphics.java
/**
* @see Graphics#drawTextLayout(TextLayout, int, int, int, int, Color,
* Color)
*/
public void drawTextLayout(TextLayout layout, int x, int y,
int selectionStart, int selectionEnd, Color selectionForeground,
Color selectionBackground) {
// $TODO probably just call checkPaint since Font and BG color don't
// apply
checkText();
layout.draw(gc, x + translateX, y + translateY, selectionStart,
selectionEnd, selectionForeground, selectionBackground);
}
项目:gef-gwt
文件:FlowUtilities.java
/**
* @param frag
* @param string
* @param font
* @since 3.1
*/
private static void initBidi(TextFragmentBox frag, String string, Font font) {
if (frag.requiresBidi()) {
TextLayout textLayout = getTextLayout();
textLayout.setFont(font);
// $TODO need to insert overrides in front of string.
textLayout.setText(string);
}
}
项目:gef-gwt
文件:FlowUtilities.java
/**
* @see TextLayout#getBounds()
*/
protected Rectangle getTextLayoutBounds(String s, Font f, int start, int end) {
TextLayout textLayout = getTextLayout();
textLayout.setFont(f);
textLayout.setText(s);
return textLayout.getBounds(start, end);
}
项目:gef-gwt
文件:TextFlow.java
/**
* Calculates the width taken up by the given text before a line-break is
* encountered.
*
* @param text
* the text in which the break is to be found
* @param width
* the width before the next line-break (if one's found; the
* width of all the given text, otherwise) will be added on to
* the first int in the given array
* @return <code>true</code> if a line-break was found
* @since 3.1
*/
boolean addLeadingWordWidth(String text, int[] width) {
if (text.length() == 0)
return false;
// if (Character.isWhitespace(text.charAt(0)))
// return true;
text = 'a' + text + 'a';
// TODO: GEFGWT commented out
// FlowUtilities.LINE_BREAK.setText(text);
// int index = FlowUtilities.LINE_BREAK.next() - 1;
int index = 0;
// GEFGWT commented out
if (index == 0)
return true;
// while (Character.isWhitespace(text.charAt(index)))
// index--;
// boolean result = index < text.length() - 1;
// index should point to the end of the actual text (not including the
// 'a' that was
// appended), if there were no breaks
if (index == text.length() - 1)
index--;
text = text.substring(1, index + 1);
if (bidiInfo == null)
width[0] += getTextUtilities().getTextExtents(text, getFont()).width;
else {
TextLayout textLayout = FlowUtilities.getTextLayout();
textLayout.setFont(getFont());
textLayout.setText(text);
width[0] += textLayout.getBounds().width;
}
return true;
}
项目:gef-gwt
文件:TextFlow.java
private int findOffset(Point p, int[] trailing, TextFragmentBox box,
int boxIndex) {
if (box == null)
return -1;
TextLayout layout = FlowUtilities.getTextLayout();
layout.setFont(getFont());
layout.setText(getBidiSubstring(box, boxIndex));
int x = p.x - box.getX();
if (isMirrored())
x = box.getWidth() - x;
int layoutOffset = layout
.getOffset(x, p.y - box.getTextTop(), trailing);
return box.offset + layoutOffset - getBidiPrefixLength(box, boxIndex);
}
项目:gef-gwt
文件:TextFlow.java
protected void paintText(Graphics g, String draw, int x, int y,
int bidiLevel) {
if (bidiLevel == -1) {
g.drawText(draw, x, y);
} else {
TextLayout tl = FlowUtilities.getTextLayout();
if (isMirrored())
tl.setOrientation(SWT.RIGHT_TO_LEFT);
tl.setFont(g.getFont());
tl.setText(draw);
g.drawTextLayout(tl, x, y);
}
}
项目:gef-gwt
文件:StyledCellLabelProvider.java
/**
* @param layout
* @param cell
* @param applyColors
* @return the text width delta (0 if the text layout contains no other font)
*/
private int updateTextLayout(TextLayout layout, ViewerCell cell,
boolean applyColors) {
layout.setStyle(null, 0, Integer.MAX_VALUE); // clear old styles
layout.setText(cell.getText());
layout.setFont(cell.getFont()); // set also if null to clear previous usages
int originalTextWidth = layout.getBounds().width; // text width without any styles
boolean containsOtherFont= false;
StyleRange[] styleRanges = cell.getStyleRanges();
if (styleRanges != null) { // user didn't fill styled ranges
for (int i = 0; i < styleRanges.length; i++) {
StyleRange curr = prepareStyleRange(styleRanges[i], applyColors);
layout.setStyle(curr, curr.start, curr.start + curr.length - 1);
if (curr.font != null) {
containsOtherFont= true;
}
}
}
int textWidthDelta = 0;
if (containsOtherFont) {
textWidthDelta = layout.getBounds().width - originalTextWidth;
}
return textWidthDelta;
}