2013-06-12 1 views
2

현재 활성화 된 줄의 글 머리 기호 배경을 강조 표시하려고하지만 글 머리 기호의 배경색 만 설정하면 숫자 부분 만 강조 표시됩니다. 총알이 차지하고있는 모든 공간을 강조하고 싶습니다.SWT Bullet 전체 배경 변경

Only the 9 is highlighted

은 너무 오른쪽에있는 모든뿐만 아니라 강조하는 9의 왼쪽에 공간과 아마 조금 싶습니다.

내가 지금까지

@Override 
public void lineGetStyle(LineStyleEvent event) { 
    // Set the line number 
    int activeLine = styledText.getLineAtOffset(styledText.getCaretOffset()); 
    int currentLine = styledText.getLineAtOffset(event.lineOffset); 
    event.bulletIndex = currentLine; 

    int width = 36; 
    if (styledText.getLineCount() > 999) 
     width = (int) ((Math.floor(Math.log10(styledText.getLineCount()))+1) * 12); 

    // Set the style, 12 pixles wide for each digit 
    StyleRange style = new StyleRange(); 
    style.metrics = new GlyphMetrics(0, 0, width); 

    if (activeLine == currentLine) { 
     style.background = highlightedLine; 
    } 

    style.foreground = mainBackground; 


    // Create and set the bullet 
    event.bullet = new Bullet(ST.BULLET_NUMBER, style); 

    event.styles = matchKeywords(event); 
} 

입니다 무엇을 얻기 위해 사용하고 코드이 가능합니까?

답변

3

사용자 정의 그림을 사용하여이 작업을 수행 할 수 있습니다. 먼저 글 머리 유형을 ST.BULLET_CUSTOM으로 변경하십시오. 그런 다음 PaintObjectListener 추가

styledText.addPaintObjectListener(new PaintObjectListener() { 
    public void paintObject(PaintObjectEvent event) { 
     drawBullet(event.bullet, event.gc, event.x, event.y, event.bulletIndex, event.ascent, event.descent); 
    } 
}); 

StyledTextRenderer에서 drawBullet의 표준 구현이있다. 번호 매기기 글 머리 기호로 사용자 지정 글 머리 기호를 수락하고 배경에 여분의 사각형을 그릴 수 있도록 변경했습니다 :

void drawBullet(Bullet bullet, GC gc, int paintX, int paintY, int index, int lineAscent, int lineDescent) { 
    StyleRange style = bullet.style; 
    GlyphMetrics metrics = style.metrics; 
    Color color = style.foreground; 
    if (color != null) gc.setForeground(color); 
    Font font = style.font; 
    if (font != null) gc.setFont(font); 
    String string = ""; 
    int type = bullet.type & (ST.BULLET_DOT|ST.BULLET_CUSTOM|ST.BULLET_NUMBER|ST.BULLET_LETTER_LOWER|ST.BULLET_LETTER_UPPER); 
    switch (type) { 
     case ST.BULLET_DOT: string = "\u2022"; break; 
     case ST.BULLET_CUSTOM: string = String.valueOf(index + 1); break; 
     case ST.BULLET_NUMBER: string = String.valueOf(index + 1); break; 
     case ST.BULLET_LETTER_LOWER: string = String.valueOf((char) (index % 26 + 97)); break; 
     case ST.BULLET_LETTER_UPPER: string = String.valueOf((char) (index % 26 + 65)); break; 
    } 
    if ((bullet.type & ST.BULLET_TEXT) != 0) string += bullet.text; 

    gc.setBackground(style.background); 
    gc.fillRectangle(paintX, paintY, metrics.width, styledText.getLineHeight()); 

    Display display = styledText.getDisplay(); 
    TextLayout layout = new TextLayout(display); 
    layout.setText(string); 
    layout.setAscent(lineAscent); 
    layout.setDescent(lineDescent); 
    style = (StyleRange)style.clone(); 
    style.metrics = null; 
    if (style.font == null) style.font = styledText.getFont(); 
    layout.setStyle(style, 0, string.length());  
    int x = paintX + Math.max(0, metrics.width - layout.getBounds().width - 8); 
    layout.draw(gc, x, paintY); 
    layout.dispose(); 
} 
+0

나는 이것을 추가하려고했지만 리스너는 결코 호출되지 않습니다. 그게 왜 어떤 아이디어일까요? – EmbMicro