用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 < names.length; 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 < tabs.length; 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 < items.length; i++
						) {
						
						      
						TreeItem item = items
						[
						i
						]
						;
						
						      
						
								for 
						
						(
						
								int 
						
						j = 
						0
						; j < tabs.length; 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 < tabs.length; i++
						) {
						
						        
						GraphicsTab tab = tabs
						[
						i
						]
						;
						
						        
						tab.dispose
						()
						;
						
						      
						}
						
						    
						}
						
						    
						tabs = 
						
								null
						
						;
						
						    
						
								if 
						
						(
						images != 
						
								null
						
						) {
						
						      
						
								for 
						
						(
						
								int 
						
						i = 
						0
						; i < images.size
						()
						; 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 < items.length; 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 < children.length; 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 < POINTS; ++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
						)
						;
						
						  
						}
						
						}