|
67 | 67 | import org.eclipse.swt.graphics.GC; |
68 | 68 | import org.eclipse.swt.graphics.Image; |
69 | 69 | import org.eclipse.swt.graphics.ImageData; |
| 70 | +import org.eclipse.swt.graphics.ImageDataProvider; |
70 | 71 | import org.eclipse.swt.graphics.PaletteData; |
71 | 72 | import org.eclipse.swt.graphics.Point; |
72 | 73 | import org.eclipse.swt.graphics.RGB; |
@@ -6961,32 +6962,28 @@ private Caret createInsertCaret(StyledText styledText) { |
6961 | 6962 | } |
6962 | 6963 |
|
6963 | 6964 | private Image createRawInsertModeCaretImage(StyledText styledText) { |
6964 | | - |
6965 | | - PaletteData caretPalette = new PaletteData(new RGB(0, 0, 0), new RGB(255, 255, 255)); |
| 6965 | + PaletteData caretPalette = new PaletteData(new RGB(0,0,0), new RGB(255,255,255)); |
6966 | 6966 | int width = getCaretWidthPreference(); |
6967 | | - int widthOffset = width - 1; |
6968 | | - |
6969 | | - // XXX: Filed request to get a caret with auto-height: |
6970 | | - // https://bugs.eclipse.org/bugs/show_bug.cgi?id=118612 |
6971 | | - ImageData imageData = new ImageData(4 + widthOffset, styledText.getLineHeight(), 1, caretPalette); |
6972 | | - |
6973 | | - Display display = styledText.getDisplay(); |
6974 | | - Image bracketImage = new Image(display, imageData); |
6975 | | - GC gc = new GC(bracketImage); |
6976 | | - gc.setForeground(display.getSystemColor(SWT.COLOR_WHITE)); |
6977 | | - gc.setLineWidth(0); // NOTE: 0 means width is 1 but with optimized performance |
6978 | | - int height = imageData.height / 3; |
6979 | | - // gap between two bars of one third of the height |
6980 | | - // draw boxes using lines as drawing a line of a certain width produces |
6981 | | - // rounded corners. |
6982 | | - for (int i = 0; i < width; i++) { |
6983 | | - gc.drawLine(i, 0, i, height - 1); |
6984 | | - gc.drawLine(i, imageData.height - height, i, imageData.height - 1); |
6985 | | - } |
6986 | | - |
6987 | | - gc.dispose(); |
6988 | | - |
6989 | | - return bracketImage; |
| 6967 | + // XXX: Filed request to get a caret with auto-height: https://bugs.eclipse.org/bugs/show_bug.cgi?id=118612 |
| 6968 | + int height = styledText.getLineHeight(); |
| 6969 | + return new Image(styledText.getDisplay(), new ImageDataProvider() { |
| 6970 | + @Override |
| 6971 | + public ImageData getImageData(int zoom) { |
| 6972 | + double scaleFactor = zoom / 100.0; |
| 6973 | + int w = (int)(width * scaleFactor + 0.5); |
| 6974 | + int h = (int)(height * scaleFactor + 0.5); |
| 6975 | + ImageData imageData = new ImageData(w, h, 1, caretPalette); |
| 6976 | + // gap between two bars of one third of the height |
| 6977 | + int h3= h / 3; |
| 6978 | + for (int x = 0; x < w; x++) { |
| 6979 | + for (int y = 0; y < h3; y++) { |
| 6980 | + imageData.setPixel(x, y, 1); |
| 6981 | + imageData.setPixel(x, h - y - 1, 1); |
| 6982 | + } |
| 6983 | + } |
| 6984 | + return imageData; |
| 6985 | + } |
| 6986 | + }); |
6990 | 6987 | } |
6991 | 6988 |
|
6992 | 6989 | private Caret createRawInsertModeCaret(StyledText styledText) { |
|
0 commit comments