Example usage for org.eclipse.swt.widgets Canvas getDisplay

List of usage examples for org.eclipse.swt.widgets Canvas getDisplay

Introduction

In this page you can find the example usage for org.eclipse.swt.widgets Canvas getDisplay.

Prototype

public Display getDisplay() 

Source Link

Document

Returns the Display that is associated with the receiver.

Usage

From source file:org.eclipse.swt.snippets.Snippet174.java

public static void main(String[] args) {
    Display display = new Display();
    Shell shell = new Shell(display);
    shell.setText("OpenGL in SWT");
    shell.setLayout(new FillLayout());
    final Canvas canvas = new Canvas(shell, SWT.NO_BACKGROUND);
    canvas.addControlListener(new ControlAdapter() {
        public void controlResized(ControlEvent e) {
            resize(canvas);/*from  w w w .j a  v  a 2 s.c o  m*/
        }
    });
    final GLContext context = init(canvas);
    shell.addDisposeListener(new DisposeListener() {
        public void widgetDisposed(DisposeEvent e) {
            context.dispose();
        }
    });
    new Runnable() {
        public void run() {
            if (canvas.isDisposed())
                return;
            render();
            context.swapBuffers();
            canvas.getDisplay().timerExec(50, this);
        }
    }.run();
    shell.open();
    while (!shell.isDisposed()) {
        if (!display.readAndDispatch())
            display.sleep();
    }
    display.dispose();
}

From source file:widgetTest3.java

/** * Images ** */

public static void doubleBuffering(Composite composite) {
    //       Create canvas
    final Canvas canvas = new Canvas(composite, SWT.BORDER);
    //       Get white system color
    Color white = canvas.getDisplay().getSystemColor(SWT.COLOR_WHITE);
    //       Set canvas background to white
    canvas.setBackground(white);//from  w  w w. j  ava  2  s. c o m
    //       Add paint listener
    canvas.addPaintListener(new PaintListener() {
        public void paintControl(PaintEvent e) {
            // Get Display instance from the event object
            Display display = e.display;
            // Get black and red system color - don't dispose these
            Color black = display.getSystemColor(SWT.COLOR_BLACK);
            Color red = display.getSystemColor(SWT.COLOR_RED);
            // Get the graphics context from event object
            GC gc = e.gc;
            // Get the widget that caused the event
            Composite source = (Composite) e.widget;
            // Get the size of this widgets client area
            Rectangle rect = source.getClientArea();
            // Create buffer for double buffering
            Image buffer = new Image(display, rect.width, rect.height);
            // Create graphics context for this buffer
            GC bufferGC = new GC(buffer);
            // perform drawing operations
            bufferGC.setBackground(red);
            bufferGC.fillRectangle(5, 5, rect.width - 10, rect.height - 10);
            bufferGC.setForeground(black);
            bufferGC.drawRectangle(5, 5, rect.width - 10, rect.height - 10);
            bufferGC.setBackground(source.getBackground());
            bufferGC.fillRectangle(10, 10, rect.width - 20, rect.height - 20);
            // Now draw the buffered image to the target drawable
            gc.drawImage(buffer, 0, 0);
            // Dispose of the buffer's graphics context
            bufferGC.dispose();
            // Dispose of the buffer
            buffer.dispose();
        }
    });
}

From source file:org.eclipse.swt.examples.paint.PaintSurface.java

/**
 * Constructs a PaintSurface.//from ww  w.j  ava2s  . c  o m
 * <p>
 * paintCanvas must have SWT.NO_REDRAW_RESIZE and SWT.NO_BACKGROUND styles,
 *     and may have SWT.V_SCROLL and/or SWT.H_SCROLL.
 * </p>
 * @param paintCanvas the Canvas object in which to render
 * @param paintStatus the PaintStatus object to use for providing user feedback
 * @param fillColor the color to fill the canvas with initially
 */
public PaintSurface(Canvas paintCanvas, Text statusText, Color fillColor) {
    this.paintCanvas = paintCanvas;
    this.statusText = statusText;
    clearStatus();

    /* Set up the drawing surface */
    Rectangle displayRect = paintCanvas.getDisplay().getClientArea();
    imageWidth = displayRect.width;
    imageHeight = displayRect.height;
    image = new Image(paintCanvas.getDisplay(), imageWidth, imageHeight);

    imageFDC.gc = new GC(image);
    imageFDC.gc.setBackground(fillColor);
    imageFDC.gc.fillRectangle(0, 0, imageWidth, imageHeight);
    displayFDC.gc = new GC(paintCanvas);

    /* Initialize the session */
    setPaintSession(null);

    /* Add our listeners */
    paintCanvas.addDisposeListener(e -> displayFDC.gc.dispose());
    paintCanvas.addMouseListener(new MouseAdapter() {
        @Override
        public void mouseDown(MouseEvent event) {
            processMouseEventCoordinates(event);
            if (paintSession != null)
                paintSession.mouseDown(event);
        }

        @Override
        public void mouseUp(MouseEvent event) {
            processMouseEventCoordinates(event);
            if (paintSession != null)
                paintSession.mouseUp(event);
        }

        @Override
        public void mouseDoubleClick(MouseEvent event) {
            processMouseEventCoordinates(event);
            if (paintSession != null)
                paintSession.mouseDoubleClick(event);
        }
    });
    paintCanvas.addMouseMoveListener(event -> {
        processMouseEventCoordinates(event);
        if (paintSession != null)
            paintSession.mouseMove(event);
    });
    paintCanvas.addPaintListener(event -> {
        if (rubberband.isEmpty()) {
            // Nothing to merge, so we just refresh
            event.gc.drawImage(image, displayFDC.xOffset + event.x, displayFDC.yOffset + event.y, event.width,
                    event.height, event.x, event.y, event.width, event.height);
        } else {
            /*
             * Avoid flicker when merging overlayed objects by constructing the image on
             * a backbuffer first, then blitting it to the screen.
             */
            // Check that the backbuffer is large enough
            if (paintImage != null) {
                Rectangle rect1 = paintImage.getBounds();
                if ((event.width + event.x > rect1.width) || (event.height + event.y > rect1.height)) {
                    paintFDC.gc.dispose();
                    paintImage.dispose();
                    paintImage = null;
                }
            }
            if (paintImage == null) {
                Display display = getDisplay();
                Rectangle rect2 = display.getClientArea();
                paintImage = new Image(display, Math.max(rect2.width, event.width + event.x),
                        Math.max(rect2.height, event.height + event.y));
                paintFDC.gc = new GC(paintImage);
            }
            // Setup clipping and the FDC
            Region clipRegion = new Region();
            event.gc.getClipping(clipRegion);
            paintFDC.gc.setClipping(clipRegion);
            clipRegion.dispose();

            paintFDC.xOffset = displayFDC.xOffset;
            paintFDC.yOffset = displayFDC.yOffset;
            paintFDC.xScale = displayFDC.xScale;
            paintFDC.yScale = displayFDC.yScale;

            // Merge the overlayed objects into the image, then blit
            paintFDC.gc.drawImage(image, displayFDC.xOffset + event.x, displayFDC.yOffset + event.y,
                    event.width, event.height, event.x, event.y, event.width, event.height);
            rubberband.draw(paintFDC);
            event.gc.drawImage(paintImage, event.x, event.y, event.width, event.height, event.x, event.y,
                    event.width, event.height);
        }
    });
    paintCanvas.addControlListener(ControlListener.controlResizedAdapter(e -> handleResize()));

    /* Set up the paint canvas scroll bars */
    ScrollBar horizontal = paintCanvas.getHorizontalBar();
    horizontal.setVisible(true);
    horizontal
            .addSelectionListener(widgetSelectedAdapter(event -> scrollHorizontally((ScrollBar) event.widget)));
    ScrollBar vertical = paintCanvas.getVerticalBar();
    vertical.setVisible(true);
    vertical.addSelectionListener(widgetSelectedAdapter(event -> scrollVertically((ScrollBar) event.widget)));
    handleResize();
}

From source file:PaintExample.java

/**
 * Constructs a PaintSurface.//from  www.  java2  s . co m
 * <p>
 * paintCanvas must have SWT.NO_REDRAW_RESIZE and SWT.NO_BACKGROUND styles,
 *     and may have SWT.V_SCROLL and/or SWT.H_SCROLL.
 * </p>
 * @param paintCanvas the Canvas object in which to render
 * @param paintStatus the PaintStatus object to use for providing user feedback
 * @param fillColor the color to fill the canvas with initially
 */
public PaintSurface(Canvas paintCanvas, Text statusText, Color fillColor) {
    this.paintCanvas = paintCanvas;
    this.statusText = statusText;
    clearStatus();

    /* Set up the drawing surface */
    Rectangle displayRect = paintCanvas.getDisplay().getClientArea();
    imageWidth = displayRect.width;
    imageHeight = displayRect.height;
    image = new Image(paintCanvas.getDisplay(), imageWidth, imageHeight);

    imageFDC.gc = new GC(image);
    imageFDC.gc.setBackground(fillColor);
    imageFDC.gc.fillRectangle(0, 0, imageWidth, imageHeight);
    displayFDC.gc = new GC(paintCanvas);

    /* Initialize the session */
    setPaintSession(null);

    /* Add our listeners */
    paintCanvas.addDisposeListener(new DisposeListener() {
        public void widgetDisposed(DisposeEvent e) {
            displayFDC.gc.dispose();
        }
    });
    paintCanvas.addMouseListener(new MouseAdapter() {
        public void mouseDown(MouseEvent event) {
            processMouseEventCoordinates(event);
            if (paintSession != null)
                paintSession.mouseDown(event);
        }

        public void mouseUp(MouseEvent event) {
            processMouseEventCoordinates(event);
            if (paintSession != null)
                paintSession.mouseUp(event);
        }

        public void mouseDoubleClick(MouseEvent event) {
            processMouseEventCoordinates(event);
            if (paintSession != null)
                paintSession.mouseDoubleClick(event);
        }
    });
    paintCanvas.addMouseMoveListener(new MouseMoveListener() {
        public void mouseMove(MouseEvent event) {
            processMouseEventCoordinates(event);
            if (paintSession != null)
                paintSession.mouseMove(event);
        }
    });
    paintCanvas.addPaintListener(new PaintListener() {
        public void paintControl(PaintEvent event) {
            if (rubberband.isEmpty()) {
                // Nothing to merge, so we just refresh
                event.gc.drawImage(image, displayFDC.xOffset + event.x, displayFDC.yOffset + event.y,
                        event.width, event.height, event.x, event.y, event.width, event.height);
            } else {
                /*
                 * Avoid flicker when merging overlayed objects by constructing the image on
                 * a backbuffer first, then blitting it to the screen.
                 */
                // Check that the backbuffer is large enough
                if (paintImage != null) {
                    Rectangle rect = paintImage.getBounds();
                    if ((event.width + event.x > rect.width) || (event.height + event.y > rect.height)) {
                        paintFDC.gc.dispose();
                        paintImage.dispose();
                        paintImage = null;
                    }
                }
                if (paintImage == null) {
                    Display display = getDisplay();
                    Rectangle rect = display.getClientArea();
                    paintImage = new Image(display, Math.max(rect.width, event.width + event.x),
                            Math.max(rect.height, event.height + event.y));
                    paintFDC.gc = new GC(paintImage);
                }
                // Setup clipping and the FDC
                Region clipRegion = new Region();
                event.gc.getClipping(clipRegion);
                paintFDC.gc.setClipping(clipRegion);
                clipRegion.dispose();

                paintFDC.xOffset = displayFDC.xOffset;
                paintFDC.yOffset = displayFDC.yOffset;
                paintFDC.xScale = displayFDC.xScale;
                paintFDC.yScale = displayFDC.yScale;

                // Merge the overlayed objects into the image, then blit
                paintFDC.gc.drawImage(image, displayFDC.xOffset + event.x, displayFDC.yOffset + event.y,
                        event.width, event.height, event.x, event.y, event.width, event.height);
                rubberband.draw(paintFDC);
                event.gc.drawImage(paintImage, event.x, event.y, event.width, event.height, event.x, event.y,
                        event.width, event.height);
            }
        }
    });
    paintCanvas.addControlListener(new ControlAdapter() {
        public void controlResized(ControlEvent event) {
            handleResize();
        }
    });

    /* Set up the paint canvas scroll bars */
    ScrollBar horizontal = paintCanvas.getHorizontalBar();
    horizontal.setVisible(true);
    horizontal.addSelectionListener(new SelectionAdapter() {
        public void widgetSelected(SelectionEvent event) {
            scrollHorizontally((ScrollBar) event.widget);
        }
    });
    ScrollBar vertical = paintCanvas.getVerticalBar();
    vertical.setVisible(true);
    vertical.addSelectionListener(new SelectionAdapter() {
        public void widgetSelected(SelectionEvent event) {
            scrollVertically((ScrollBar) event.widget);
        }
    });
    handleResize();
}