java swt 双屏_java swt实现的2D效果(附代码)!

import

java.io.IOException;

import

java.io.InputStream;

import

java.util.HashSet;

import

java.util.Iterator;

import

java.util.MissingResourceException;

import

java.util.Random;

import

java.util.ResourceBundle;

import

java.util.Vector;

import

org.eclipse.swt.SWT;

import

org.eclipse.swt.SWTException;

import

org.eclipse.swt.graphics.Color;

import

org.eclipse.swt.graphics.Font;

import

org.eclipse.swt.graphics.FontData;

import

org.eclipse.swt.graphics.GC;

import

org.eclipse.swt.graphics.Image;

import

org.eclipse.swt.graphics.Path;

import

org.eclipse.swt.graphics.Point;

import

org.eclipse.swt.graphics.RGB;

import

org.eclipse.swt.graphics.Rectangle;

import

org.eclipse.swt.layout.GridData;

import

org.eclipse.swt.layout.GridLayout;

import

org.eclipse.swt.layout.RowLayout;

import

org.eclipse.swt.widgets.Canvas;

import

org.eclipse.swt.widgets.ColorDialog;

import

org.eclipse.swt.widgets.Combo;

import

org.eclipse.swt.widgets.Composite;

import

org.eclipse.swt.widgets.Control;

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;

import

org.eclipse.swt.widgets.Menu;

import

org.eclipse.swt.widgets.MenuItem;

import

org.eclipse.swt.widgets.MessageBox;

import

org.eclipse.swt.widgets.Sash;

import

org.eclipse.swt.widgets.Shell;

import

org.eclipse.swt.widgets.Spinner;

import

org.eclipse.swt.widgets.ToolBar;

import

org.eclipse.swt.widgets.ToolItem;

import

org.eclipse.swt.widgets.Tree;

import

org.eclipse.swt.widgets.TreeItem;

public class

GraphicsExample

{

Composite parent;

GraphicsTab

[]

tabs;

GraphicsTab tab;

Object

[]

tabBackground;

boolean

animate;

Listener redrawListener;

ToolBar toolBar;

Tree tabList;

Canvas canvas;

Composite controlPanel, tabPanel;

ToolItem playItem, pauseItem, backItem, dbItem;

Spinner timerSpinner;

Menu backMenu;

MenuItem customMI;

Image customImage;

Color customColor;

Vector images;

static

boolean

advanceGraphics, advanceGraphicsInit;

static final

int

TIMER =

30

;

public

GraphicsExample

(

final

Composite parent

) {

this

.parent = parent;

redrawListener =

new

Listener

() {

public

void

handleEvent

(

Event e

) {

redraw

()

;

}

}

;

GridData data;

GridLayout layout =

new

GridLayout

(

3

,

false

)

;

layout.horizontalSpacing =

1

;

parent.setLayout

(

layout

)

;

tabs = createTabs

()

;

images =

new

Vector

()

;

createToolBar

(

parent

)

;

createTabList

(

parent

)

;

final

Sash sash =

new

Sash

(

parent, SWT.VERTICAL

)

;

createTabPanel

(

parent

)

;

data =

new

GridData

(

SWT.FILL, SWT.CENTER, true,

false

)

;

data.horizontalSpan =

3

;

toolBar.setLayoutData

(

data

)

;

data =

new

GridData

(

SWT.CENTER, SWT.FILL, false,

true

)

;

data.widthHint = tabList.computeSize

(

SWT.DEFAULT, SWT.DEFAULT

)

.x +

50

;

tabList.setLayoutData

(

data

)

;

data =

new

GridData

(

SWT.CENTER, SWT.FILL, false,

true

)

;

sash.setLayoutData

(

data

)

;

data =

new

GridData

(

SWT.FILL, SWT.FILL, true,

true

)

;

tabPanel.setLayoutData

(

data

)

;

sash.addListener

(

SWT.Selection,

new

Listener

() {

public

void

handleEvent

(

Event event

) {

if

(

event.detail != SWT.DRAG

) {

GridData data =

(

GridData

)

tabList.getLayoutData

()

;

data.widthHint = event.x

- tabList.computeTrim

(

0

,

0

,

0

,

0

)

.width;

parent.layout

(

true

)

;

animate = pauseItem.getEnabled

()

;

}

else

{

animate =

false

;

}

}

})

;

setTab

(

tab

)

;

startAnimationTimer

()

;

}

boolean

checkAdvancedGraphics

() {

if

(

advanceGraphicsInit

)

return

advanceGraphics;

advanceGraphicsInit =

true

;

Display display = Display.getCurrent

()

;

try

{

Path path =

new

Path

(

display

)

;

path.dispose

()

;

}

catch

(

SWTException e

) {

Shell shell = display.getActiveShell

()

, newShell =

null

;

if

(

shell ==

null

)

shell = newShell =

new

Shell

(

display

)

;

MessageBox dialog =

new

MessageBox

(

shell, SWT.ICON_WARNING | SWT.OK

)

;

dialog.setText

(

"Warning"

)

;

//$NON-NLS-1$

dialog.setMessage

(

"LibNotFound"

)

;

//$NON-NLS-1$

dialog.open

()

;

if

(

newShell !=

null

)

newShell.dispose

()

;

return false

;

}

return

advanceGraphics =

true

;

}

void

createCanvas

(

Composite parent

) {

canvas =

new

Canvas

(

parent, SWT.NO_BACKGROUND

)

;

canvas.addListener

(

SWT.Paint,

new

Listener

() {

public

void

handleEvent

(

Event event

) {

GC gc;

Rectangle rect = canvas.getClientArea

()

;

Image buffer =

null

;

if

(

dbItem.getSelection

()) {

buffer =

new

Image

(

canvas.getDisplay

()

, rect

)

;

gc =

new

GC

(

buffer

)

;

}

else

{

gc = event.gc;

}

paintBackground

(

gc, rect

)

;

GraphicsTab tab = getTab

()

;

if

(

tab !=

null

)

tab.paint

(

gc, rect.width, rect.height

)

;

if

(

gc != event.gc

)

gc.dispose

()

;

if

(

buffer !=

null

) {

event.gc.drawImage

(

buffer,

0

,

0

)

;

buffer.dispose

()

;

}

}

})

;

}

void

createControlPanel

(

Composite parent

) {

Group group;

controlPanel = group =

new

Group

(

parent, SWT.NONE

)

;

group.setText

(

getResourceString

(

"Settings"

))

;

//$NON-NLS-1$

controlPanel.setLayout

(

new

RowLayout

())

;

}

void

createTabPanel

(

Composite parent

) {

tabPanel =

new

Composite

(

parent, SWT.NONE

)

;

GridData data;

GridLayout layout =

new

GridLayout

(

1

,

false

)

;

layout.marginHeight = layout.marginWidth =

0

;

tabPanel.setLayout

(

layout

)

;

createCanvas

(

tabPanel

)

;

createControlPanel

(

tabPanel

)

;

data =

new

GridData

(

SWT.FILL, SWT.FILL, true,

true

)

;

canvas.setLayoutData

(

data

)

;

data =

new

GridData

(

SWT.FILL, SWT.CENTER, true,

false

)

;

controlPanel.setLayoutData

(

data

)

;

}

void

createToolBar

(

final

Composite parent

) {

final

Display display = parent.getDisplay

()

;

toolBar =

new

ToolBar

(

parent, SWT.FLAT

)

;

Listener toolBarListener =

new

Listener

() {

public

void

handleEvent

(

Event event

) {

switch

(

event.type

) {

case

SWT.Selection:

{

if

(

event.widget == playItem

) {

animate =

true

;

playItem.setEnabled

(

!animate

)

;

pauseItem.setEnabled

(

animate

)

;

}

else if

(

event.widget == pauseItem

) {

animate =

false

;

playItem.setEnabled

(

!animate

)

;

pauseItem.setEnabled

(

animate

)

;

}

else if

(

event.widget == backItem

) {

final

ToolItem toolItem =

(

ToolItem

)

event.widget;

final

ToolBar toolBar = toolItem.getParent

()

;

Rectangle toolItemBounds = toolItem.getBounds

()

;

Point point = toolBar.toDisplay

(

new

Point

(

toolItemBounds.x, toolItemBounds.y

))

;

backMenu.setLocation

(

point.x, point.y

+ toolItemBounds.height

)

;

backMenu.setVisible

(

true

)

;

}

}

break

;

}

}

}

;

playItem =

new

ToolItem

(

toolBar, SWT.PUSH

)

;

playItem.setText

(

getResourceString

(

"Play"

))

;

//$NON-NLS-1$

playItem.setImage

(

loadImage

(

display,

"play.gif"

))

;

//$NON-NLS-1$

playItem.addListener

(

SWT.Selection, toolBarListener

)

;

pauseItem =

new

ToolItem

(

toolBar, SWT.PUSH

)

;

pauseItem.setText

(

getResourceString

(

"Pause"

))

;

//$NON-NLS-1$

pauseItem.setImage

(

loadImage

(

display,

"pause.gif"

))

;

//$NON-NLS-1$

pauseItem.addListener

(

SWT.Selection, toolBarListener

)

;

backItem =

new

ToolItem

(

toolBar, SWT.PUSH

)

;

backItem.setText

(

getResourceString

(

"Background"

))

;

//$NON-NLS-1$

backItem.addListener

(

SWT.Selection, toolBarListener

)

;

String

[]

names =

new

String

[] {

getResourceString

(

"White"

)

,

//$NON-NLS-1$

getResourceString

(

"Black"

)

,

//$NON-NLS-1$

getResourceString

(

"Red"

)

,

//$NON-NLS-1$

getResourceString

(

"Green"

)

,

//$NON-NLS-1$

getResourceString

(

"Blue"

)

,

//$NON-NLS-1$

getResourceString

(

"CustomColor"

)

,

//$NON-NLS-1$

}

;

Color

[]

colors =

new

Color

[] {

display.getSystemColor

(

SWT.COLOR_WHITE

)

,

display.getSystemColor

(

SWT.COLOR_BLACK

)

,

display.getSystemColor

(

SWT.COLOR_RED

)

,

display.getSystemColor

(

SWT.COLOR_GREEN

)

,

display.getSystemColor

(

SWT.COLOR_BLUE

)

, null,

}

;

backMenu =

new

Menu

(

parent

)

;

Listener listener =

new

Listener

() {

public

void

handleEvent

(

Event event

) {

MenuItem item =

(

MenuItem

)

event.widget;

if

(

customMI == item

) {

ColorDialog dialog =

new

ColorDialog

(

parent.getShell

())

;

RGB rgb = dialog.open

()

;

if

(

rgb ==

null

)

return

;

if

(

customColor !=

null

)

customColor.dispose

()

;

customColor =

new

Color

(

display, rgb

)

;

if

(

customImage !=

null

)

customImage.dispose

()

;

customImage = createImage

(

display, customColor

)

;

item.setData

(

new

Object

[] {

customColor, customImage

})

;

item.setImage

(

customImage

)

;

}

tabBackground =

(

Object

[])

item.getData

()

;

backItem.setImage

((

Image

)

tabBackground

[

1

])

;

canvas.redraw

()

;

}

}

;

for

(

int

i =

0

; i 

) {

MenuItem item =

new

MenuItem

(

backMenu, SWT.NONE

)

;

item.setText

(

names

[

i

])

;

item.addListener

(

SWT.Selection, listener

)

;

Image image =

null

;

if

(

colors

[

i

]

!=

null

) {

image = createImage

(

display, colors

[

i

])

;

images.addElement

(

image

)

;

item.setImage

(

image

)

;

}

else

{

// custom menu item

customMI = item;

}

item.setData

(

new

Object

[] {

colors

[

i

]

, image

})

;

if

(

tabBackground ==

null

) {

tabBackground =

(

Object

[])

item.getData

()

;

backItem.setImage

((

Image

)

tabBackground

[

1

])

;

}

}

dbItem =

new

ToolItem

(

toolBar, SWT.CHECK

)

;

dbItem.setText

(

getResourceString

(

"DoubleBuffer"

))

;

//$NON-NLS-1$

dbItem.setImage

(

loadImage

(

display,

"db.gif"

))

;

//$NON-NLS-1$

ToolItem separator =

new

ToolItem

(

toolBar, SWT.SEPARATOR

)

;

Composite comp =

new

Composite

(

toolBar, SWT.NONE

)

;

GridData data;

GridLayout layout =

new

GridLayout

(

1

,

false

)

;

layout.verticalSpacing =

0

;

layout.marginWidth = layout.marginHeight =

3

;

comp.setLayout

(

layout

)

;

timerSpinner =

new

Spinner

(

comp, SWT.BORDER | SWT.WRAP

)

;

data =

new

GridData

(

SWT.CENTER, SWT.CENTER, false,

false

)

;

timerSpinner.setLayoutData

(

data

)

;

Label label =

new

Label

(

comp, SWT.NONE

)

;

label.setText

(

getResourceString

(

"Animation"

))

;

//$NON-NLS-1$

data =

new

GridData

(

SWT.CENTER, SWT.CENTER, false,

false

)

;

label.setLayoutData

(

data

)

;

timerSpinner.setMaximum

(

1000

)

;

timerSpinner.setSelection

(

TIMER

)

;

timerSpinner.setSelection

(

TIMER

)

;

separator.setControl

(

comp

)

;

separator.setWidth

(

comp.computeSize

(

SWT.DEFAULT, SWT.DEFAULT

)

.x

)

;

}

Image createImage

(

Display display, Color color

) {

Image image =

new

Image

(

display,

16

,

16

)

;

GC gc =

new

GC

(

image

)

;

gc.setBackground

(

color

)

;

Rectangle rect = image.getBounds

()

;

gc.fillRectangle

(

rect

)

;

if

(

color.equals

(

display.getSystemColor

(

SWT.COLOR_BLACK

))) {

gc.setForeground

(

display.getSystemColor

(

SWT.COLOR_WHITE

))

;

}

gc.drawRectangle

(

rect.x, rect.y, rect.width -

1

, rect.height -

1

)

;

gc.dispose

()

;

return

image;

}

void

createTabList

(

Composite parent

) {

tabList =

new

Tree

(

parent, SWT.SINGLE | SWT.H_SCROLL | SWT.V_SCROLL

| SWT.BORDER

)

;

HashSet set =

new

HashSet

()

;

for

(

int

i =

0

; i 

) {

GraphicsTab tab = tabs

[

i

]

;

set.add

(

tab.getCategory

())

;

}

for

(

Iterator iter = set.iterator

()

; iter.hasNext

()

;

) {

String text =

(

String

)

iter.next

()

;

TreeItem item =

new

TreeItem

(

tabList, SWT.NONE

)

;

item.setText

(

text

)

;

}

TreeItem

[]

items = tabList.getItems

()

;

for

(

int

i =

0

; i 

) {

TreeItem item = items

[

i

]

;

for

(

int

j =

0

; j 

) {

GraphicsTab tab = tabs

[

j

]

;

if

(

item.getText

()

.equals

(

tab.getCategory

())) {

TreeItem item1 =

new

TreeItem

(

item, SWT.NONE

)

;

item1.setText

(

tab.getText

())

;

item1.setData

(

tab

)

;

}

}

}

tabList.addListener

(

SWT.Selection,

new

Listener

() {

public

void

handleEvent

(

Event event

) {

TreeItem item =

(

TreeItem

)

event.item;

if

(

item !=

null

) {

setTab

((

GraphicsTab

)

item.getData

())

;

}

}

})

;

}

GraphicsTab

[]

createTabs

() {

return new

GraphicsTab

[] {

new

LineTab

(

this

)

,

new

StarPolyTab

(

this

)

,

tab =

new

IntroTab

(

this

)

,

new

BlackHoleTab

(

this

)

,

}

;

}

/**

* Disposes all resources created by the receiver.

*/

public

void

dispose

() {

if

(

tabs !=

null

) {

for

(

int

i =

0

; i 

) {

GraphicsTab tab = tabs

[

i

]

;

tab.dispose

()

;

}

}

tabs =

null

;

if

(

images !=

null

) {

for

(

int

i =

0

; i 

()

; i++

) {

((

Image

)

images.elementAt

(

i

))

.dispose

()

;

}

}

images =

null

;

if

(

customColor !=

null

)

customColor.dispose

()

;

customColor =

null

;

if

(

customImage !=

null

)

customImage.dispose

()

;

customImage =

null

;

}

TreeItem findItemByData

(

TreeItem

[]

items, Object data

) {

for

(

int

i =

0

; i 

) {

TreeItem item = items

[

i

]

;

if

(

item.getData

()

== data

)

return

item;

item = findItemByData

(

item.getItems

()

, data

)

;

if

(

item !=

null

)

return

item;

}

return null

;

}

/**

* Gets the current tab.

*/

public

GraphicsTab getTab

() {

return

tab;

}

Listener getRedrawListener

() {

return

redrawListener;

}

/**

* Gets a string from the resource bundle. We don't want to crash because of

* a missing String. Returns the key if not found.

*/

static

String getResourceString

(

String key

) {

return

"key"

;

}

static

Image loadImage

(

Display display, Class clazz, String string

) {

InputStream stream = clazz.getResourceAsStream

(

string

)

;

if

(

stream ==

null

)

return null

;

Image image =

null

;

try

{

image =

new

Image

(

display, stream

)

;

}

catch

(

SWTException ex

) {

}

finally

{

try

{

stream.close

()

;

}

catch

(

IOException ex

) {

}

}

return

image;

}

Image loadImage

(

Display display, String name

) {

Image image = loadImage

(

display, GraphicsExample.class, name

)

;

if

(

image !=

null

)

images.addElement

(

image

)

;

return

image;

}

void

paintBackground

(

GC gc, Rectangle rect

) {

gc.setBackground

((

Color

)

tabBackground

[

0

])

;

gc.fillRectangle

(

rect

)

;

}

/**

* Redraws the current tab.

*/

public

void

redraw

() {

canvas.redraw

()

;

}

/**

* Grabs input focus.

*/

public

void

setFocus

() {

tabList.setFocus

()

;

}

/**

* Sets the current tab.

*/

public

void

setTab

(

GraphicsTab tab

) {

this

.tab = tab;

Control

[]

children = controlPanel.getChildren

()

;

for

(

int

i =

0

; i 

) {

Control control = children

[

i

]

;

control.dispose

()

;

}

if

(

tab !=

null

) {

tab.createControlPanel

(

controlPanel

)

;

animate = tab.isAnimated

()

;

}

playItem.setEnabled

(

!animate

)

;

pauseItem.setEnabled

(

animate

)

;

GridData data =

(

GridData

)

controlPanel.getLayoutData

()

;

children = controlPanel.getChildren

()

;

data.exclude = children.length ==

0

;

controlPanel.setVisible

(

!data.exclude

)

;

if

(

data.exclude

) {

tabPanel.layout

()

;

}

else

{

tabPanel.layout

(

children

)

;

}

if

(

tab !=

null

) {

TreeItem

[]

selection = tabList.getSelection

()

;

if

(

selection.length ==

0

|| selection

[

0

]

.getData

()

!= tab

) {

TreeItem item = findItemByData

(

tabList.getItems

()

, tab

)

;

if

(

item !=

null

)

tabList.setSelection

(

new

TreeItem

[] {

item

})

;

}

}

canvas.redraw

()

;

}

void

startAnimationTimer

() {

final

Display display = Display.getCurrent

()

;

display.timerExec

(

timerSpinner.getSelection

()

,

new

Runnable

() {

public

void

run

() {

if

(

canvas.isDisposed

())

return

;

if

(

animate

) {

GraphicsTab tab = getTab

()

;

if

(

tab !=

null

&& tab.isAnimated

()) {

Rectangle rect = canvas.getClientArea

()

;

tab.next

(

rect.width, rect.height

)

;

canvas.redraw

()

;

canvas.update

()

;

}

}

display.timerExec

(

timerSpinner.getSelection

()

,

this

)

;

}

})

;

}

public static

void

main

(

String

[]

args

) {

Display display =

new

Display

()

;

Shell shell =

new

Shell

(

display

)

;

shell.setText

(

getResourceString

(

"SWTGraphics"

))

;

//$NON-NLS-1$

final

GraphicsExample example =

new

GraphicsExample

(

shell

)

;

shell.addListener

(

SWT.Close,

new

Listener

() {

public

void

handleEvent

(

Event event

) {

example.dispose

()

;

}

})

;

shell.open

()

;

while

(

!shell.isDisposed

()) {

if

(

!display.readAndDispatch

())

display.sleep

()

;

}

}

}

/*******************************************************************************

* Copyright (c) 2000, 2005 IBM Corporation 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: IBM Corporation - initial API and implementation

******************************************************************************/

abstract class

GraphicsTab

{

GraphicsExample example;

public

GraphicsTab

(

GraphicsExample example

) {

this

.example = example;

}

/**

* Creates the widgets used to control the drawing.

*/

public

void

createControlPanel

(

Composite parent

) {

}

/**

* Disposes resources created by the receiver.

*/

public

void

dispose

() {

}

/**

* Answer the receiver's name.

*/

public abstract

String getText

()

;

/**

* Answer the receiver's category.

*/

public

String getCategory

() {

return

GraphicsExample.getResourceString

(

"Misc"

)

;

//$NON-NLS-1$

}

/**

* Answer whether the receiver is animated or not.

*/

public

boolean

isAnimated

() {

return false

;

}

/**

* Advance the animation.

*/

public

void

next

(

int

width,

int

height

) {

}

/**

* Paint the receiver into the specified GC.

*/

public

void

paint

(

GC gc,

int

width,

int

height

) {

}

}

/*******************************************************************************

* Copyright (c) 2000, 2005 IBM Corporation 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: IBM Corporation - initial API and implementation

******************************************************************************/

class

LineTab

extends

GraphicsTab

{

public

LineTab

(

GraphicsExample example

) {

super

(

example

)

;

}

public

String getText

() {

return

GraphicsExample.getResourceString

(

"Line"

)

;

//$NON-NLS-1$

}

public

void

paint

(

GC gc,

int

width,

int

height

) {

gc.drawLine

(

0

,

0

, width, height

)

;

gc.drawLine

(

width,

0

,

0

, height

)

;

}

}

/*******************************************************************************

* Copyright (c) 2000, 2005 IBM Corporation 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: IBM Corporation - initial API and implementation

******************************************************************************/

class

StarPolyTab

extends

GraphicsTab

{

int

[]

radial;

static final

int

POINTS =

11

;

Combo fillRuleCb;

public

StarPolyTab

(

GraphicsExample example

) {

super

(

example

)

;

radial =

new

int

[

POINTS *

2

]

;

}

public

void

createControlPanel

(

Composite parent

) {

new

Label

(

parent, SWT.NONE

)

.setText

(

GraphicsExample

.getResourceString

(

"FillRule"

))

;

//$NON-NLS-1$

fillRuleCb =

new

Combo

(

parent, SWT.DROP_DOWN

)

;

fillRuleCb.add

(

"FILL_EVEN_ODD"

)

;

fillRuleCb.add

(

"FILL_WINDING"

)

;

fillRuleCb.select

(

0

)

;

fillRuleCb.addListener

(

SWT.Selection, example.getRedrawListener

())

;

}

public

String getCategory

() {

return

GraphicsExample.getResourceString

(

"Polygons"

)

;

//$NON-NLS-1$

}

public

String getText

() {

return

GraphicsExample.getResourceString

(

"StarPolygon"

)

;

//$NON-NLS-1$

}

public

void

paint

(

GC gc,

int

width,

int

height

) {

int

centerX = width /

2

;

int

centerY = height /

2

;

int

pos =

0

;

for

(

int

i =

0

; i 

) {

double

r = Math.PI *

2

* pos / POINTS;

radial

[

i *

2

]

=

(

int

) ((

1

+ Math.cos

(

r

))

* centerX

)

;

radial

[

i *

2

+

1

]

=

(

int

) ((

1

+ Math.sin

(

r

))

* centerY

)

;

pos =

(

pos + POINTS /

2

)

% POINTS;

}

Display display = Display.getCurrent

()

;

gc.setFillRule

(

fillRuleCb.getSelectionIndex

()

!=

0

? SWT.FILL_WINDING

: SWT.FILL_EVEN_ODD

)

;

gc.setBackground

(

display.getSystemColor

(

SWT.COLOR_WHITE

))

;

gc.fillPolygon

(

radial

)

;

gc.drawPolygon

(

radial

)

;

}

}

/*******************************************************************************

* Copyright (c) 2000, 2005 IBM Corporation 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: IBM Corporation - initial API and implementation

******************************************************************************/

class

BlackHoleTab

extends

GraphicsTab

{

int

size =

1

;

public

BlackHoleTab

(

GraphicsExample example

) {

super

(

example

)

;

}

public

String getText

() {

return

GraphicsExample.getResourceString

(

"BlackHole"

)

;

//$NON-NLS-1$

}

public

boolean

isAnimated

() {

return true

;

}

public

void

next

(

int

width,

int

height

) {

if

(

size > width *

3

/

2

)

size =

0

;

else

size +=

10

;

}

public

void

paint

(

GC gc,

int

width,

int

height

) {

Display display = Display.getCurrent

()

;

gc.setBackground

(

display.getSystemColor

(

SWT.COLOR_BLACK

))

;

gc.fillOval

((

width - size

)

/

2

,

(

height - size

)

/

2

, size, size

)

;

}

}

/*******************************************************************************

* Copyright (c) 2000, 2005 IBM Corporation 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: IBM Corporation - initial API and implementation

******************************************************************************/

class

IntroTab

extends

GraphicsTab

{

Font font;

Image image;

Random random =

new

Random

()

;

float

x, y;

float

incX =

10.0f

;

float

incY =

5.0f

;

int

textWidth, textHeight;

String text =

"SWT"

;

public

IntroTab

(

GraphicsExample example

) {

super

(

example

)

;

}

public

void

dispose

() {

if

(

image !=

null

)

image.dispose

()

;

image =

null

;

if

(

font !=

null

)

font.dispose

()

;

font =

null

;

}

public

String getCategory

() {

return

GraphicsExample.getResourceString

(

"Introduction"

)

;

//$NON-NLS-1$

}

public

String getText

() {

return

GraphicsExample.getResourceString

(

"SWT"

)

;

//$NON-NLS-1$

}

public

boolean

isAnimated

() {

return true

;

}

public

void

next

(

int

width,

int

height

) {

x += incX;

y += incY;

float

random =

(

float

)

Math.random

()

;

if

(

x + textWidth > width

) {

x = width - textWidth;

incX = random * -width /

16

-

1

;

}

if

(

x <

0

) {

x =

0

;

incX = random * width /

16

+

1

;

}

if

(

y + textHeight > height

) {

y =

(

height - textHeight

)

-

2

;

incY = random * -height /

16

-

1

;

}

if

(

y <

0

) {

y =

0

;

incY = random * height /

16

+

1

;

}

}

public

void

paint

(

GC gc,

int

width,

int

height

) {

if

(

!example.checkAdvancedGraphics

())

return

;

Display display = Display.getCurrent

()

;

if

(

image ==

null

) {

image = example.loadImage

(

Display.getCurrent

()

,

"irmaos.jpg"

)

;

Rectangle rect = image.getBounds

()

;

FontData fd = display.getSystemFont

()

.getFontData

()[

0

]

;

font =

new

Font

(

display, fd.getName

()

, rect.height /

4

, SWT.BOLD

)

;

gc.setFont

(

font

)

;

Point size = gc.stringExtent

(

text

)

;

textWidth = size.x;

textHeight = size.y;

}

Path path =

new

Path

(

display

)

;

path.addString

(

text, x, y, font

)

;

gc.setClipping

(

path

)

;

Rectangle rect = image.getBounds

()

;

gc.drawImage

(

image,

0

,

0

, rect.width, rect.height,

0

,

0

, width, height

)

;

gc.setClipping

((

Rectangle

)

null

)

;

gc.setForeground

(

display.getSystemColor

(

SWT.COLOR_BLUE

))

;

gc.drawPath

(

path

)

;

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值