package org.objectstyle.wolips.templateeditor;
import org.eclipse.jface.text.source.Annotation;
import org.eclipse.jface.text.source.AnnotationPainter;
import org.eclipse.jface.text.source.IAnnotationAccess;
import org.eclipse.jface.text.source.IOverviewRuler;
import org.eclipse.jface.text.source.ISharedTextColors;
import org.eclipse.jface.text.source.ISourceViewer;
import org.eclipse.jface.text.source.AnnotationPainter.IDrawingStrategy;
import org.eclipse.swt.custom.StyledText;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.GC;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.ui.texteditor.SourceViewerDecorationSupport;
public class TemplateSourceViewerDecorationSupport extends SourceViewerDecorationSupport {
private static IDrawingStrategy _roundBoxStrategy = new RoundBoxDrawingStrategy();
public TemplateSourceViewerDecorationSupport(ISourceViewer sourceViewer, IOverviewRuler overviewRuler, IAnnotationAccess annotationAccess, ISharedTextColors sharedTextColors) {
super(sourceViewer, overviewRuler, annotationAccess, sharedTextColors);
}
@Override
protected AnnotationPainter createAnnotationPainter() {
AnnotationPainter annotationPainter = super.createAnnotationPainter();
//annotationPainter.addDrawingStrategy(AnnotationPreference.STYLE_BOX, _roundBoxStrategy);
return annotationPainter;
}
public static class RoundBoxDrawingStrategy implements IDrawingStrategy {
/*
* @see org.eclipse.jface.text.source.AnnotationPainter.IDrawingStrategy#draw(org.eclipse.jface.text.source.Annotation, org.eclipse.swt.graphics.GC, org.eclipse.swt.custom.StyledText, int, int, org.eclipse.swt.graphics.Color)
*/
public void draw(Annotation annotation, GC gc, StyledText textWidget, int offset, int length, Color color) {
System.out.println("DragOverDrawingStrategy.draw: " + offset + ", " + length);
if (length == 0) {
return;
}
if (gc != null) {
Rectangle bounds;
if (length > 0) {
bounds = textWidget.getTextBounds(offset, offset + length - 1);
}
else {
Point loc = textWidget.getLocationAtOffset(offset);
bounds = new Rectangle(loc.x, loc.y, 1, textWidget.getLineHeight(offset));
}
drawDragOver(gc, textWidget, color, bounds);
}
else {
textWidget.redrawRange(offset, length, true);
}
}
protected void drawDragOver(GC gc, StyledText textWidget, Color color, Rectangle bounds) {
gc.setForeground(color);
gc.drawRectangle(bounds.x, bounds.y, bounds.width - 1, bounds.height - 1);
}
}
}