Skip to content

Commit e7aa8a3

Browse files
committed
Fix caret of raw insert mode of text editor on HiDPI screens
Fixes: #3010
1 parent 7d4cca3 commit e7aa8a3

File tree

1 file changed

+21
-23
lines changed

1 file changed

+21
-23
lines changed

bundles/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/texteditor/AbstractTextEditor.java

Lines changed: 21 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@
6767
import org.eclipse.swt.graphics.GC;
6868
import org.eclipse.swt.graphics.Image;
6969
import org.eclipse.swt.graphics.ImageData;
70+
import org.eclipse.swt.graphics.ImageDataProvider;
7071
import org.eclipse.swt.graphics.PaletteData;
7172
import org.eclipse.swt.graphics.Point;
7273
import org.eclipse.swt.graphics.RGB;
@@ -6537,31 +6538,28 @@ private Caret createInsertCaret(StyledText styledText) {
65376538
}
65386539

65396540
private Image createRawInsertModeCaretImage(StyledText styledText) {
6540-
6541+
// XXX: Filed request to get a caret with auto-height: https://bugs.eclipse.org/bugs/show_bug.cgi?id=118612
65416542
PaletteData caretPalette= new PaletteData(new RGB[] {new RGB (0,0,0), new RGB (255,255,255)});
65426543
int width= getCaretWidthPreference();
6543-
int widthOffset= width - 1;
6544-
6545-
// XXX: Filed request to get a caret with auto-height: https://bugs.eclipse.org/bugs/show_bug.cgi?id=118612
6546-
ImageData imageData= new ImageData(4 + widthOffset, styledText.getLineHeight(), 1, caretPalette);
6547-
6548-
Display display= styledText.getDisplay();
6549-
Image bracketImage= new Image(display, imageData);
6550-
GC gc= new GC (bracketImage);
6551-
gc.setForeground(display.getSystemColor(SWT.COLOR_WHITE));
6552-
gc.setLineWidth(0); // NOTE: 0 means width is 1 but with optimized performance
6553-
int height= imageData.height / 3;
6554-
// gap between two bars of one third of the height
6555-
// draw boxes using lines as drawing a line of a certain width produces
6556-
// rounded corners.
6557-
for (int i= 0; i < width ; i++) {
6558-
gc.drawLine(i, 0, i, height - 1);
6559-
gc.drawLine(i, imageData.height - height, i, imageData.height - 1);
6560-
}
6561-
6562-
gc.dispose();
6563-
6564-
return bracketImage;
6544+
int height= styledText.getLineHeight();
6545+
return new Image(styledText.getDisplay(), new ImageDataProvider() {
6546+
@Override
6547+
public ImageData getImageData(int zoom) {
6548+
double scaleFactor = zoom / 100.0;
6549+
int w= (int)(width * scaleFactor + 0.5);
6550+
int h= (int)(height * scaleFactor + 0.5);
6551+
ImageData imageData= new ImageData(w, h, 1, caretPalette);
6552+
// gap between two bars of one third of the height
6553+
int h3= h / 3;
6554+
for (int x= 0; x < w; x++) {
6555+
for (int y= 0; y < h3; y++) {
6556+
imageData.setPixel(x, y, 1);
6557+
imageData.setPixel(x, h - y - 1, 1);
6558+
}
6559+
}
6560+
return imageData;
6561+
}
6562+
});
65656563
}
65666564

65676565
private Caret createRawInsertModeCaret(StyledText styledText) {

0 commit comments

Comments
 (0)