Caret reset on StyledText [message #1730150] |
Thu, 21 April 2016 18:32 |
|
Hi,
I have a StyledText and want to set the caret to a new one on overwrite mode. So far so good. I registered a key listener and act upon SWT.INSERT and change the caret accordingly. But as soon as I start writing in overwrite mode the caret image is reset to the default one.
Any idea what could be wrong?
Code:
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.StyledText;
import org.eclipse.swt.events.KeyEvent;
import org.eclipse.swt.events.KeyListener;
import org.eclipse.swt.graphics.FontMetrics;
import org.eclipse.swt.graphics.GC;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Caret;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
public class CaretTest {
public static boolean overwriteMode = false;
public static void main(String[] args) {
Display display = new Display();
Shell shell = new Shell(display);
shell.setLayout(new FillLayout());
shell.setSize(200, 200);
final StyledText textWidget = new StyledText(shell, SWT.BORDER);
Caret caret = new Caret(textWidget, SWT.NONE);
caret.setBounds(10, 10, 1, 16);
textWidget.addKeyListener(new KeyListener() {
public void keyReleased(KeyEvent arg0) {
}
public void keyPressed(KeyEvent event) {
if (event.keyCode == SWT.INSERT) {
setOverwriteMode(!isOverwriteMode());
changeCaretPresentation(textWidget, isOverwriteMode());
}
}
private void setOverwriteMode(boolean value) {
overwriteMode = value;
}
private boolean isOverwriteMode() {
return overwriteMode;
}
});
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
display.dispose();
}
public static void changeCaretPresentation(StyledText textWidget, boolean overwriteMode) {
Caret defaultCaret = textWidget.getCaret();
GC graphicsContext = new GC(textWidget);
FontMetrics fontMetrics = graphicsContext.getFontMetrics();
if (overwriteMode) { // block mode
defaultCaret.setBounds(defaultCaret.getLocation().x, defaultCaret.getLocation().y, fontMetrics.getAverageCharWidth(), fontMetrics.getHeight());
}
else { // beam mode
defaultCaret.setBounds(defaultCaret.getLocation().x, defaultCaret.getLocation().y, 1, fontMetrics.getHeight());
}
}
}
Thanx in advance
Mihael
[Updated on: Thu, 21 April 2016 18:40] Report message to a moderator
|
|
|
Powered by
FUDForum. Page generated in 0.02610 seconds