私はある種の描画プログラムであるアプリケーションを作成しています。そのために、シェルで GLCanvas ウィジェットで SWT を使用しようとしています。これは、私が抱えている問題を示すスニペットです。
shell = new Shell();
GridLayout gridLayout = new GridLayout();
gridLayout.numColumns = 2;
shell.setLayout(gridLayout);
shell.setSize(1000, 800);
shell.setText(APPLICATION_NAME);
Label label = new Label(shell, SWT.NONE);
label.setText("Test");
Composite composite = new Composite(shell, SWT.NONE);
GridData gridData = new GridData(SWT.FILL, SWT.FILL, true, true);
composite.setLayoutData(gridData);
composite.setLayout(new FillLayout(SWT.HORIZONTAL));
GLData data = new GLData();
data.doubleBuffer = true;
canvas = new GLCanvas(composite, SWT.NO_BACKGROUND, data);
このコードからウィンドウのサイズを変更すると、正しく表示されません。GLCanvas がちらつきますが、残りの空白を適切に埋めるためにサイズ変更される前に、GLCanvas を画面に描画するステップが描画にあるかのようにも見えます。これには、たとえば、ウィンドウが左にサイズ変更されている間に、GLCanvas が本来よりも小さいという影響があります。逆に、ウィンドウが右にサイズ変更されている間、GLCanvas は必要以上に大きくなり、ウィンドウの右にはみ出します。
キャンバスのスタイルを SWT.NONE から SWT.NO_BACKGROUND から SWT.DOUBLE_BUFFERED から SWT.NO_REDRAW_RESIZE に設定しようとしましたが、この問題には影響しませんでした。
この動作を修正するにはどうすればよいですか?