下面列出了org.eclipse.jface.text.TextAttribute#getBackground ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
private TextAttribute merge(TextAttribute first, TextAttribute second) {
if (first == null)
return second;
if (second == null)
return first;
int style = first.getStyle() | second.getStyle();
Color fgColor = second.getForeground();
if (fgColor == null)
fgColor = first.getForeground();
Color bgColor = second.getBackground();
if (bgColor == null)
bgColor = first.getBackground();
Font font = second.getFont();
if (font == null)
font = first.getFont();
return new TextAttribute(fgColor, bgColor, style, font);
}
public List<StyleRange> getRanges(String expression) {
final List<StyleRange> ranges = Lists.newArrayList();
DocumentEvent event = new DocumentEvent();
event.fDocument = new DummyDocument(expression);
DocumentTokenSource tokenSource = tokenSourceProvider.get();
tokenSource.updateStructure(event);
Iterator<ILexerTokenRegion> iterator = tokenSource.getTokenInfos().iterator();
while (iterator.hasNext()) {
ILexerTokenRegion next = iterator.next();
TextAttribute attribute = attributeProvider.getAttribute(tokenTypeMapper.getId(next.getLexerTokenType()));
StyleRange range = new StyleRange(next.getOffset(), next.getLength(), attribute.getForeground(),
attribute.getBackground());
range.font = attribute.getFont();
range.fontStyle = attribute.getStyle();
ranges.add(range);
}
return merge(ranges);
}
/**
* Adds style information to the given text presentation.
*
* @param presentation the text presentation to be extended
* @param offset the offset of the range to be styled
* @param length the length of the range to be styled
* @param attr the attribute describing the style of the range to be styled
* @param wholeLine the boolean switch to declare that the whole line should be colored
*/
private void addRange(TextPresentation presentation, int offset, int length, TextAttribute attr, boolean wholeLine) {
if (attr != null) {
int style= attr.getStyle();
int fontStyle= style & (SWT.ITALIC | SWT.BOLD | SWT.NORMAL);
if(wholeLine) {
try {
int line = document.getLineOfOffset(offset);
int start = document.getLineOffset(line);
length = document.getLineLength(line);
offset = start;
} catch (BadLocationException e) {
}
}
StyleRange styleRange = new StyleRange(offset,length,attr.getForeground(),attr.getBackground(),fontStyle);
styleRange.strikeout = (style & TextAttribute.STRIKETHROUGH) != 0;
styleRange.underline = (style & TextAttribute.UNDERLINE) != 0;
presentation.addStyleRange(styleRange);
}
}
/**
* Adds style information to the given text presentation.
*
* @param presentation
* the text presentation to be extended
* @param offset
* the offset of the range to be styled
* @param length
* the length of the range to be styled
* @param attr
* the attribute describing the style of the range to be styled
*/
protected void addRange( TextPresentation presentation, int offset,
int length, TextAttribute attr )
{
if ( attr != null )
{
int style= attr.getStyle();
int fontStyle= style & (SWT.ITALIC | SWT.BOLD | SWT.NORMAL);
StyleRange range = new StyleRange( offset,
length,
attr.getForeground( ),
attr.getBackground( ),
fontStyle );
range.strikeout = ( attr.getStyle( ) & TextAttribute.STRIKETHROUGH ) != 0;
range.underline = ( attr.getStyle( ) & TextAttribute.UNDERLINE ) != 0;
range.font= attr.getFont();
presentation.addStyleRange( range );
}
}
/**
* Creates the ranges from parsing the code with the PyCodeScanner.
*
* @param textPresentation this is the container of the style ranges.
* @param scanner the scanner used to parse the document.
* @param doc document to parse.
* @param partitionOffset the offset of the document we should parse.
* @param partitionLen the length to be parsed.
*/
private void createDefaultRanges(TextPresentation textPresentation, PyCodeScanner scanner, Document doc,
int partitionOffset, int partitionLen) {
scanner.setRange(doc, partitionOffset, partitionLen);
IToken nextToken = scanner.nextToken();
while (!nextToken.isEOF()) {
Object data = nextToken.getData();
if (data instanceof TextAttribute) {
TextAttribute textAttribute = (TextAttribute) data;
int offset = scanner.getTokenOffset();
int len = scanner.getTokenLength();
Color foreground = textAttribute.getForeground();
Color background = textAttribute.getBackground();
int style = textAttribute.getStyle();
textPresentation.addStyleRange(new StyleRange(offset, len, foreground, background, style));
}
nextToken = scanner.nextToken();
}
}
/**
* @return Returns a corresponding style range.
*/
public StyleRange createStyleRange() {
int len = getLength();
TextAttribute textAttribute = attribute;
int style = textAttribute.getStyle();
int fontStyle = style & (SWT.ITALIC | SWT.BOLD | SWT.NORMAL);
StyleRange styleRange = new StyleRange(getOffset(), len, textAttribute.getForeground(),
textAttribute.getBackground(), fontStyle);
styleRange.strikeout = (style & TextAttribute.STRIKETHROUGH) != 0;
styleRange.underline = (style & TextAttribute.UNDERLINE) != 0;
styleRange.font = textAttribute.getFont();
return styleRange;
}
public Color getBackground(String scope)
{
TextAttribute attr = getTextAttribute(scope);
if (attr == null)
{
return null;
}
return attr.getBackground();
}
private boolean matchesDefaults(TextAttribute attr)
{
if (attr == null)
{
return false;
}
// Make sure font is just normal
int style = attr.getStyle();
int fontStyle = style & (SWT.ITALIC | SWT.BOLD | SWT.NORMAL);
if (fontStyle != SWT.NORMAL)
{
return false;
}
if ((style & TextAttribute.STRIKETHROUGH) != 0)
{
return false;
}
if ((style & TextAttribute.UNDERLINE) != 0)
{
return false;
}
// Is FG different?
Color fg = attr.getForeground();
if (fg != null && !fg.getRGB().equals(getCurrentTheme().getForeground()))
{
return false;
}
// Is BG different?
Color bg = attr.getBackground();
if (bg != null && !bg.getRGB().equals(getCurrentTheme().getBackground()))
{
return false;
}
return true;
}
/**
* @return Returns a corresponding style range.
*/
public StyleRange createStyleRange() {
int len= 0;
if (fStyle.isEnabled())
len= getLength();
TextAttribute textAttribute= fStyle.getTextAttribute();
int style= textAttribute.getStyle();
int fontStyle= style & (SWT.ITALIC | SWT.BOLD | SWT.NORMAL);
StyleRange styleRange= new StyleRange(getOffset(), len, textAttribute.getForeground(), textAttribute.getBackground(), fontStyle);
styleRange.strikeout= (style & TextAttribute.STRIKETHROUGH) != 0;
styleRange.underline= (style & TextAttribute.UNDERLINE) != 0;
return styleRange;
}
/**
* Adds style information to the given text presentation.
*
* @param presentation the text presentation to be extended
* @param offset the offset of the range to be styled
* @param length the length of the range to be styled
* @param attr the attribute describing the style of the range to be styled
*/
protected void addRange(TextPresentation presentation, int offset, int length, TextAttribute attr) {
if (attr != null) {
int style = attr.getStyle();
int fontStyle = style & (SWT.ITALIC | SWT.BOLD | SWT.NORMAL);
StyleRange styleRange = new StyleRange(offset, length, attr.getForeground(), attr.getBackground(),
fontStyle);
styleRange.strikeout = (style & TextAttribute.STRIKETHROUGH) != 0;
styleRange.underline = (style & TextAttribute.UNDERLINE) != 0;
styleRange.font = attr.getFont();
presentation.addStyleRange(styleRange);
}
}
public void lineGetBackground(LineBackgroundEvent event)
{
if (fViewer == null)
{
return;
}
final StyledText textWidget = fViewer.getTextWidget();
if (textWidget == null)
{
return;
}
try
{
final int offset = event.lineOffset;
IDocument document = fViewer.getDocument();
int line = document.getLineOfOffset(offset);
final IRegion lineRegion = document.getLineInformation(line);
// Handle fully opaque line highlight here. A modified approach from CursorLinePainter.
if (fEnabled && isOpaque() && isCurrentLine(line))
{
// draw current line
drawCurrentLine(event, lineRegion);
return;
}
// Not drawing an opaque line highlight, so we need to do our normal line coloring here.
// This extends the bg color out for a given line based on it's end scope.
String endOfLineScope = getScopeManager().getScopeAtOffset(document, lineRegion.getLength() + offset);
String commonPrefix = getScope(document, line, endOfLineScope);
TextAttribute at = getCurrentTheme().getTextAttribute(commonPrefix);
// if we have no color we need to extend to end of line, but this used to be the highlight line, force the
// theme bg color
if (at.getBackground() == null && isOpaque() && fLastLine.includes(offset))
{
event.lineBackground = getColorManager().getColor(getCurrentTheme().getBackground());
}
else
{
event.lineBackground = at.getBackground();
}
}
catch (BadLocationException e)
{
IdeLog.logError(CommonEditorPlugin.getDefault(), e);
}
}
private void activate( String namedStyle )
{
Color foreground = fDefaultForeground;
Color background = fDefaultBackground;
if ( namedStyle == null )
{
fClearStyle.setEnabled( false );
fBold.setEnabled( false );
fItalic.setEnabled( false );
fStrike.setEnabled( false );
fUnderline.setEnabled( false );
fForegroundLabel.setEnabled( false );
fBackgroundLabel.setEnabled( false );
fForegroundColorEditor.setEnabled( false );
fBackgroundColorEditor.setEnabled( false );
fBold.setSelection( false );
fItalic.setSelection( false );
fStrike.setSelection( false );
fUnderline.setSelection( false );
}
else
{
TextAttribute attribute = getAttributeFor( namedStyle );
fClearStyle.setEnabled( true );
fBold.setEnabled( true );
fItalic.setEnabled( true );
fStrike.setEnabled( true );
fUnderline.setEnabled( true );
fForegroundLabel.setEnabled( true );
fBackgroundLabel.setEnabled( true );
fForegroundColorEditor.setEnabled( true );
fBackgroundColorEditor.setEnabled( true );
fBold.setSelection( ( attribute.getStyle( ) & SWT.BOLD ) != 0 );
fItalic.setSelection( ( attribute.getStyle( ) & SWT.ITALIC ) != 0 );
fStrike.setSelection( ( attribute.getStyle( ) & TextAttribute.STRIKETHROUGH ) != 0 );
fUnderline.setSelection( ( attribute.getStyle( ) & TextAttribute.UNDERLINE ) != 0 );
if ( attribute.getForeground( ) != null )
{
foreground = attribute.getForeground( );
}
if ( attribute.getBackground( ) != null )
{
background = attribute.getBackground( );
}
}
fForegroundColorEditor.setColorValue( foreground.getRGB( ) );
fBackgroundColorEditor.setColorValue( background.getRGB( ) );
}
/**
* Color the text in the sample area according to the current preferences
*/
void applyStyles( )
{
if ( fText == null || fText.isDisposed( ) )
return;
try
{
ITypedRegion[] regions = TextUtilities.computePartitioning( fDocument,
IDocumentExtension3.DEFAULT_PARTITIONING,
0,
fDocument.getLength( ),
true );
if ( regions.length > 0 )
{
for ( int i = 0; i < regions.length; i++ )
{
ITypedRegion region = regions[i];
String namedStyle = (String) fContextToStyleMap.get( region.getType( ) );
if ( namedStyle == null )
continue;
TextAttribute attribute = getAttributeFor( namedStyle );
if ( attribute == null )
continue;
int fontStyle = attribute.getStyle( )
& ( SWT.ITALIC | SWT.BOLD | SWT.NORMAL );
StyleRange style = new StyleRange( region.getOffset( ),
region.getLength( ),
attribute.getForeground( ),
attribute.getBackground( ),
fontStyle );
style.strikeout = ( attribute.getStyle( ) & TextAttribute.STRIKETHROUGH ) != 0;
style.underline = ( attribute.getStyle( ) & TextAttribute.UNDERLINE ) != 0;
style.font = attribute.getFont( );
fText.setStyleRange( style );
}
}
}
catch ( BadLocationException e )
{
ExceptionHandler.handle( e );
}
}
private ScriptStyleRange getIt(String content, int offset, TextAttribute attr, int scriptStyle) {
//background is the default (already set)
Color background = attr.getBackground();
return new ScriptStyleRange(offset, content.length(), attr.getForeground(), background, scriptStyle,
attr.getStyle());
}
/**
* Adds style information to the given text presentation.
*
* @param presentation
* the text presentation to be extended
* @param offset
* the offset of the range to be styled
* @param length
* the length of the range to be styled
* @param attr
* the attribute describing the style of the range to be styled
* @param lastLineStyleRanges
*/
protected void addRange(TextPresentation presentation, int offset, int length, TextAttribute attr) {
if (attr != null) {
int style = attr.getStyle();
int fontStyle = style & (SWT.ITALIC | SWT.BOLD | SWT.NORMAL);
StyleRange styleRange = new StyleRange(offset, length, attr.getForeground(), attr.getBackground(),
fontStyle);
styleRange.strikeout = (style & TextAttribute.STRIKETHROUGH) != 0;
styleRange.underline = (style & TextAttribute.UNDERLINE) != 0;
styleRange.font = attr.getFont();
presentation.addStyleRange(styleRange);
}
}
/**
* Creates a {@link StyleRange} from the given parameters.
*
* @param offset
* the offset
* @param length
* the length of the range
* @param textAttribute
* the {@link TextAttribute}
* @return a {@link StyleRange} from the given parameters
*/
public static StyleRange createStyleRange(final int offset, final int length, final TextAttribute textAttribute) {
int style = textAttribute.getStyle();
int fontStyle = style & (SWT.ITALIC | SWT.BOLD | SWT.NORMAL);
StyleRange styleRange = new StyleRange(offset, length, textAttribute.getForeground(), textAttribute.getBackground(), fontStyle);
styleRange.strikeout = (style & TextAttribute.STRIKETHROUGH) != 0;
styleRange.underline = (style & TextAttribute.UNDERLINE) != 0;
styleRange.font = textAttribute.getFont();
return styleRange;
}