| /******************************************************************************* |
| * Copyright (c) 2010, 2016 EclipseSource and others. |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v10.html |
| * |
| * Contributors: |
| * EclipseSource - initial API and implementation |
| ******************************************************************************/ |
| package org.eclipse.rap.demo.controls; |
| |
| import org.eclipse.swt.SWT; |
| import org.eclipse.swt.events.PaintEvent; |
| import org.eclipse.swt.events.PaintListener; |
| import org.eclipse.swt.graphics.Font; |
| import org.eclipse.swt.graphics.GC; |
| import org.eclipse.swt.graphics.Image; |
| import org.eclipse.swt.graphics.Path; |
| import org.eclipse.swt.graphics.Transform; |
| import org.eclipse.swt.layout.FillLayout; |
| import org.eclipse.swt.layout.GridLayout; |
| import org.eclipse.swt.layout.RowLayout; |
| import org.eclipse.swt.widgets.Button; |
| import org.eclipse.swt.widgets.Canvas; |
| import org.eclipse.swt.widgets.Composite; |
| import org.eclipse.swt.widgets.Display; |
| import org.eclipse.swt.widgets.Event; |
| import org.eclipse.swt.widgets.Group; |
| import org.eclipse.swt.widgets.Label; |
| import org.eclipse.swt.widgets.Listener; |
| |
| |
| public final class CanvasTab extends ExampleTab { |
| |
| private Canvas canvas; |
| |
| public CanvasTab() { |
| super( "Canvas" ); |
| } |
| |
| @Override |
| protected void createStyleControls( Composite parent ) { |
| createStyleButton( "BORDER", SWT.BORDER ); |
| cteateRoundedBorderGroup(); |
| createVisibilityButton(); |
| createEnablementButton(); |
| createBgColorButton(); |
| createBgGradientButton(); |
| createBgImageButton(); |
| createRedrawButtons( parent ); |
| } |
| |
| private void createRedrawButtons( Composite parent ) { |
| Group group = new Group( parent, SWT.NONE ); |
| group.setText( "Redraw" ); |
| group.setLayout( new GridLayout( 2, false ) ); |
| Button redrawAllButton = new Button( group, SWT.PUSH ); |
| redrawAllButton.setText( "All" ); |
| redrawAllButton.addListener( SWT.Selection, new Listener() { |
| @Override |
| public void handleEvent( Event event ) { |
| canvas.redraw(); |
| } |
| } ); |
| Button redrawRectButton = new Button( group, SWT.PUSH ); |
| redrawRectButton.setText( "Rectangle ( 50, 200, 200, 200 )" ); |
| redrawRectButton.addListener( SWT.Selection, new Listener() { |
| @Override |
| public void handleEvent( Event event ) { |
| canvas.redraw( 50, 200, 200, 200, false ); |
| } |
| } ); |
| } |
| |
| @Override |
| protected void createExampleControls( Composite parent ) { |
| parent.setLayout( new FillLayout() ); |
| canvas = new Canvas( parent, getStyle() ); |
| canvas.setLayout( new RowLayout( SWT.HORIZONTAL ) ); |
| canvas.addPaintListener( new PaintListener() { |
| @Override |
| public void paintControl( PaintEvent event ) { |
| if( event.width > 250 ) { |
| event.gc.drawPoint( 230, 100 ); |
| paintLines( event.display, event.gc ); |
| paintRectangles( event.display, event.gc ); |
| paintArcs( event.display, event.gc ); |
| paintImages( event.display, event.gc ); |
| paintTexts( event.display, event.gc ); |
| paintPolylines( event.display, event.gc ); |
| paintWithClipping( event.display, event.gc ); |
| paintPath( event.display, event.gc ); |
| paintTransform( event.display, event.gc ); |
| } else { |
| event.gc.drawRectangle( event.x, event.y, event.width - 1, event.height - 1 ); |
| } |
| } |
| } ); |
| canvas.redraw(); |
| registerControl( canvas ); |
| Label label = new Label( canvas, SWT.NONE ); |
| label.setText( "Label" ); |
| Button pushButton = new Button( canvas, SWT.PUSH ); |
| pushButton.setText( "Push Button" ); |
| } |
| |
| private void paintLines( Display display, GC gc ) { |
| gc.drawLine( 30, 130, 400, 130 ); |
| gc.setLineWidth( 10 ); |
| gc.setForeground( display.getSystemColor( SWT.COLOR_GREEN ) ); |
| gc.setAlpha( 64 ); |
| gc.drawLine( 30, 140, 400, 140 ); |
| gc.setForeground( display.getSystemColor( SWT.COLOR_RED ) ); |
| gc.setLineJoin( SWT.JOIN_ROUND ); |
| gc.setLineCap( SWT.CAP_ROUND ); |
| int[] pointArray = new int[] { |
| 70, 120, |
| 100, 150, |
| 130, 120, |
| 160, 150 |
| }; |
| gc.drawPolyline( pointArray ); |
| gc.setForeground( display.getSystemColor( SWT.COLOR_DARK_MAGENTA ) ); |
| gc.setLineJoin( SWT.JOIN_BEVEL ); |
| gc.setLineCap( SWT.CAP_SQUARE ); |
| pointArray = new int[] { |
| 170, 120, |
| 200, 150, |
| 230, 120, |
| 260, 150 |
| }; |
| gc.drawPolyline( pointArray ); |
| gc.setForeground( display.getSystemColor( SWT.COLOR_DARK_RED ) ); |
| gc.setLineJoin( SWT.JOIN_MITER ); |
| gc.setLineCap( SWT.CAP_FLAT ); |
| pointArray = new int[] { |
| 270, 120, |
| 300, 150, |
| 330, 120, |
| 360, 150 |
| }; |
| gc.drawPolyline( pointArray ); |
| gc.setLineWidth( 1 ); |
| gc.setAlpha( 255 ); |
| } |
| |
| private void paintRectangles( Display display, GC gc ) { |
| gc.setForeground( display.getSystemColor( SWT.COLOR_BLACK ) ); |
| gc.drawRectangle( 30, 160, 50, 50 ); |
| gc.setForeground( display.getSystemColor( SWT.COLOR_BLUE ) ); |
| gc.drawRoundRectangle( 90, 160, 50, 50, 10, 10 ); |
| gc.setBackground( display.getSystemColor( SWT.COLOR_GREEN ) ); |
| gc.fillRectangle( 150, 160, 50, 50 ); |
| gc.fillRoundRectangle( 210, 160, 50, 50, 10, 10 ); |
| gc.fillGradientRectangle( 270, 160, 50, 50, true ); |
| gc.fillGradientRectangle( 330, 160, 50, 50, false ); |
| } |
| |
| private void paintArcs( Display display, GC gc ) { |
| gc.setForeground( display.getSystemColor( SWT.COLOR_BLUE ) ); |
| gc.drawOval( 30, 220, 50, 25 ); |
| gc.setBackground( display.getSystemColor( SWT.COLOR_WHITE ) ); |
| gc.setForeground( display.getSystemColor( SWT.COLOR_GREEN ) ); |
| gc.drawArc( 90, 220, 50, 25, 45, 180 ); |
| gc.setBackground( display.getSystemColor( SWT.COLOR_MAGENTA ) ); |
| gc.fillArc( 150, 220, 50, 25, 45, 250 ); |
| gc.setBackground( display.getSystemColor( SWT.COLOR_BLUE ) ); |
| gc.fillOval( 210, 220, 50, 50 ); |
| } |
| |
| private void paintImages( Display display, GC gc ) { |
| Image image = display.getSystemImage( SWT.ICON_INFORMATION ); |
| int width = image.getImageData().width; |
| int height = image.getImageData().height; |
| gc.drawImage( image, 30, 280 ); |
| gc.setAlpha( 64 ); |
| gc.drawImage( image, 90, 280 ); |
| gc.setAlpha( 255 ); |
| gc.drawImage( image, |
| 9, |
| 3, |
| width - 20, |
| height - 6, |
| 150, |
| 280, |
| width - 10, |
| height + 4 ); |
| } |
| |
| private void paintTexts( Display display, GC gc ) { |
| gc.setForeground( display.getSystemColor( SWT.COLOR_WHITE ) ); |
| gc.drawString( "Hello RAP World!", 200, 280, false ); |
| Font font = new Font( display, "Arial, Verdana, Tahoma", 16, SWT.BOLD | SWT.ITALIC ); |
| gc.setFont( font ); |
| gc.setForeground( display.getSystemColor( SWT.COLOR_RED ) ); |
| gc.drawText( "\tHello RAP World!\nAgain!", 200, 350, true ); |
| } |
| |
| private void paintPolylines( Display display, GC gc ) { |
| int[] pointArray = new int[] { |
| 55, 340, |
| 80, 365, |
| 55, 390, |
| 30, 365 |
| }; |
| gc.drawPolygon( pointArray ); |
| pointArray = new int[] { |
| 105, 340, |
| 130, 365, |
| 105, 390, |
| 80, 365 |
| }; |
| gc.fillPolygon( pointArray ); |
| pointArray = new int[] { |
| 155, 340, |
| 180, 365, |
| 155, 390, |
| 130, 365 |
| }; |
| gc.drawPolyline( pointArray ); |
| } |
| |
| private void paintPath( Display display, GC gc ) { |
| gc.setForeground( display.getSystemColor( SWT.COLOR_BLUE ) ); |
| gc.setLineWidth( 5 ); |
| Path path = new Path( display ); |
| path.moveTo( 100, 420 ); |
| path.lineTo( 200, 560 ); |
| path.quadTo( 230, 600, 250, 520 ); |
| path.cubicTo( 290, 360, 300, 600, 400, 550 ); |
| path.lineTo( 500, 490 ); |
| gc.drawPath( path ); |
| path.dispose(); |
| } |
| |
| private void paintWithClipping( Display display, GC gc ) { |
| Path path = new Path( display ); |
| path.moveTo( 30, 430 ); |
| path.lineTo( 150, 550 ); |
| path.cubicTo( 60, 470, 60, 470, 70, 550 ); |
| path.close(); |
| gc.setClipping( path ); |
| path.dispose(); |
| |
| gc.setBackground( display.getSystemColor( SWT.COLOR_BLACK ) ); |
| gc.fillRectangle( 20, 420, 500, 50 ); |
| gc.setBackground( display.getSystemColor( SWT.COLOR_RED ) ); |
| gc.fillRectangle( 20, 470, 500, 50 ); |
| gc.setBackground( display.getSystemColor( SWT.COLOR_YELLOW ) ); |
| gc.fillRectangle( 20, 520, 500, 50 ); |
| gc.setClipping( ( Path )null ); |
| } |
| |
| private void paintTransform( Display display, GC gc ) { |
| Transform transform = new Transform( display ); |
| transform.translate( 350, 430 ); |
| gc.setTransform( transform ); |
| gc.setBackground( display.getSystemColor( SWT.COLOR_BLACK ) ); |
| gc.fillRectangle( 0, 0, 100, 50 ); |
| |
| transform.rotate( 10 ); |
| gc.setTransform( transform ); |
| gc.setBackground( display.getSystemColor( SWT.COLOR_RED ) ); |
| gc.fillRectangle( 0, 0, 100, 50 ); |
| |
| transform.rotate( 10 ); |
| gc.setTransform( transform ); |
| gc.setBackground( display.getSystemColor( SWT.COLOR_YELLOW ) ); |
| gc.fillRectangle( 0, 0, 100, 50 ); |
| |
| transform.identity(); |
| gc.setTransform( transform ); |
| transform.dispose(); |
| } |
| |
| } |