package org.eclipse.swt.snippets; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Color; import org.eclipse.swt.graphics.Rectangle; import org.eclipse.swt.internal.gtk.OS; import org.eclipse.swt.layout.FillLayout; import org.eclipse.swt.widgets.Canvas; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Shell; public class ScrollbarsTest { public static void main(String[] args) { Display display = new Display(); final Shell shell = new Shell(display, SWT.SHELL_TRIM | SWT.NO_SCROLL); shell.setText("Scrollbars Test"); shell.setLayout(new FillLayout()); final Canvas canvas = new Canvas(shell, SWT.V_SCROLL | SWT.H_SCROLL); final Color red = display.getSystemColor(SWT.COLOR_RED); Runnable printer = () -> { Rectangle clientArea = canvas.getClientArea(); Rectangle bounds = canvas.getBounds(); System.out.println("Client Area: " + clientArea); System.out.println("Bounds: " + bounds); System.out.println("Trim: " + canvas.computeTrim(0, 0, 0, 0)); System.out.println("Scrollbars visible: " + canvas.getHorizontalBar().isVisible()); System.out.println("Client Area and Bounds are the same: " + clientArea.equals(bounds)); System.out.println("Scrollbars mode: " + canvas.getScrollbarsMode()); System.out.println("Overlay disabled: " + OS.GTK_OVERLAY_SCROLLING_DISABLED); }; int[] counter = new int[1]; canvas.addListener(SWT.Paint, e -> { Rectangle r = canvas.getClientArea(); e.gc.setBackground(red); e.gc.fillOval(r.x, r.y, r.width, r.height); System.out.println("" + System.currentTimeMillis() + " paint " + (counter[0] ++) + " " + e.gc.getClipping()); }); canvas.addListener(SWT.MouseDoubleClick, e -> { boolean visible = canvas.getHorizontalBar().isVisible(); canvas.getHorizontalBar().setVisible(!visible); canvas.getVerticalBar().setVisible(!visible); }); canvas.addListener(SWT.MouseDown, e -> { printer.run(); }); canvas.addListener(SWT.Resize, e -> { printer.run(); }); shell.setSize(600, 500); shell.open(); while (!shell.isDisposed()) { if (!display.readAndDispatch()) display.sleep(); } display.dispose(); } }