This eclipse.platform.swt news group posting started me thinking again about platform differences in Eclipse RCP and Java. Without a bit of care you could end up having DOUBLE SECRET SWT.DOUBLE_BUFFERED! My apologies to Harold Ramis.
The default behaviour of org.eclipse.swt.widgets.Canvas does support SWT.DOUBLE_BUFFERED on Linux GTK but not on Windows.
import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Canvas; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Shell; public class CanvasTest { public static void main(String[] args) { Display display = new Display(); Shell shell = new Shell(display); Canvas canvas = new Canvas(shell, SWT.NONE); System.out.println("SWT.NO_REDRAW_RESIZE: " + stateToString(canvas.getStyle(), SWT.NO_REDRAW_RESIZE)); System.out.println("SWT.DOUBLE_BUFFERED: " + stateToString(canvas.getStyle(), SWT.DOUBLE_BUFFERED)); System.out.println("SWT.NO_BACKGROUND: " + stateToString(canvas.getStyle(), SWT.NO_BACKGROUND)); System.out.println("SWT.NO_MERGE_PAINTS: " + stateToString(canvas.getStyle(), SWT.NO_MERGE_PAINTS)); } private static String stateToString(int style, int styleFlag) { return (style & styleFlag) != 0 ? "on" : "off"; } }
Run on a Windows platform has the org.eclipse.swt.widgets.Canvas set as:
SWT.NO_REDRAW_RESIZE: off SWT.DOUBLE_BUFFERED: off SWT.NO_BACKGROUND: off SWT.NO_MERGE_PAINTS: off
Run on a Linux GTK platform has the org.eclipse.swt.widgets.Canvas set as:
SWT.NO_REDRAW_RESIZE: off SWT.DOUBLE_BUFFERED: on SWT.NO_BACKGROUND: off SWT.NO_MERGE_PAINTS: off
1 comment:
Great remark...
Setting DOUBLE_BUFFERED in my Canvas constructor definitivily solved my slow graphical operations problem wich occured only in Windows...
Many thanks...
JFC
Post a Comment