diff options
Diffstat (limited to 'examples/org.eclipse.swt.examples/src/org/eclipse/swt/examples/graphics/GraphicsExample.java')
-rw-r--r-- | examples/org.eclipse.swt.examples/src/org/eclipse/swt/examples/graphics/GraphicsExample.java | 648 |
1 files changed, 0 insertions, 648 deletions
diff --git a/examples/org.eclipse.swt.examples/src/org/eclipse/swt/examples/graphics/GraphicsExample.java b/examples/org.eclipse.swt.examples/src/org/eclipse/swt/examples/graphics/GraphicsExample.java deleted file mode 100644 index 5a61878859..0000000000 --- a/examples/org.eclipse.swt.examples/src/org/eclipse/swt/examples/graphics/GraphicsExample.java +++ /dev/null @@ -1,648 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2006 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 - *******************************************************************************/ -package org.eclipse.swt.examples.graphics; - -import java.io.*; -import java.util.*; - -import org.eclipse.swt.*; -import org.eclipse.swt.graphics.*; -import org.eclipse.swt.layout.*; -import org.eclipse.swt.widgets.*; - -/** - * This class is the main class of the graphics application. Various "tabs" are - * created and made visible by this class. - */ -public class GraphicsExample { - - Composite parent; - GraphicsTab[] tabs; // tabs to be found in the application - GraphicsTab tab; // the current tab - GraphicsBackground background; // used to store information about the background - - ToolBar toolBar; // toolbar that contains backItem and dbItem - Tree tabList; // tree structure of tabs - Text tabDesc; // multi-line text widget that displays a tab description - Sash hSash, vSash; - Canvas canvas; - Composite tabControlPanel; - ToolItem backItem, dbItem; // background, double buffer items - Menu backMenu; // background menu item - - ArrayList resources; // stores resources that will be disposed - ArrayList tabs_in_order; // stores GraphicsTabs in the order that they appear in the tree - boolean animate = true; // whether animation should happen - - static boolean advanceGraphics, advanceGraphicsInit; - - static final int MARGIN = 5; - static final int SASH_SPACING = 1; - static final int TIMER = 30; - static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle.getBundle("examples_graphics"); //$NON-NLS-1$ - -/* - * Default constructor is needed so that example launcher can create an instance. - */ -public GraphicsExample() { - super(); -} - -public GraphicsExample(final Composite parent) { - this.parent = parent; - resources = new ArrayList(); - createControls(parent); - setTab(tab); - startAnimationTimer(); -} - -boolean checkAdvancedGraphics() { - if (advanceGraphicsInit) return advanceGraphics; - advanceGraphicsInit = true; - Display display = parent.getDisplay(); - 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(RESOURCE_BUNDLE.getString("Warning")); //$NON-NLS-1$ - dialog.setMessage(RESOURCE_BUNDLE.getString("LibNotFound")); //$NON-NLS-1$ - dialog.open(); - if (newShell != null) newShell.dispose(); - return false; - } - return advanceGraphics = true; -} - -void createControls(final Composite parent) { - tabs = createTabs(); - createToolBar(parent); - createTabList(parent); - hSash = new Sash(parent, SWT.HORIZONTAL); - createTabDesc(parent); - vSash = new Sash(parent, SWT.VERTICAL); - createCanvas(parent); - createControlPanel(parent); - - FormData data; - FormLayout layout = new FormLayout(); - parent.setLayout(layout); - - data = new FormData(); - data.left = new FormAttachment(0, MARGIN); - data.top = new FormAttachment(0, MARGIN); - data.right = new FormAttachment(100, -MARGIN); - toolBar.setLayoutData(data); - - data = new FormData(); - data.left = new FormAttachment(0, MARGIN); - data.top = new FormAttachment(toolBar, MARGIN); - data.right = new FormAttachment(vSash, -SASH_SPACING); - data.bottom = new FormAttachment(hSash, -SASH_SPACING); - tabList.setLayoutData(data); - - data = new FormData(); - data.left = new FormAttachment(0, MARGIN); - int offset = parent.getBounds().height - tabDesc.computeSize(SWT.DEFAULT, tabDesc.getLineHeight() * 10).y; - data.top = new FormAttachment(null, offset); - data.right = new FormAttachment(vSash, -SASH_SPACING); - hSash.setLayoutData(data); - - data = new FormData(); - data.left = new FormAttachment(0, MARGIN); - data.top = new FormAttachment(hSash, SASH_SPACING); - data.right = new FormAttachment(vSash, -SASH_SPACING); - data.bottom = new FormAttachment(100, -MARGIN); - tabDesc.setLayoutData(data); - - data = new FormData(); - data.left = new FormAttachment(null, tabList.computeSize(SWT.DEFAULT, SWT.DEFAULT).x + 50); - data.top = new FormAttachment(toolBar, MARGIN); - data.bottom = new FormAttachment(100, -MARGIN); - vSash.setLayoutData(data); - - data = new FormData(); - data.left = new FormAttachment(vSash, SASH_SPACING); - data.top = new FormAttachment(toolBar, MARGIN); - data.right = new FormAttachment(100, -MARGIN); - data.bottom = new FormAttachment(tabControlPanel); - canvas.setLayoutData(data); - - data = new FormData(); - data.left = new FormAttachment(vSash, SASH_SPACING); - data.right = new FormAttachment(100, -MARGIN); - data.bottom = new FormAttachment(100, -MARGIN); - tabControlPanel.setLayoutData(data); - - vSash.addListener(SWT.Selection, new Listener() { - public void handleEvent(Event event) { - Rectangle rect = hSash.getParent().getClientArea(); - event.x = Math.min (Math.max (event.x, 60), rect.width - 60); - if (event.detail != SWT.DRAG) { - FormData data = (FormData)vSash.getLayoutData(); - data.left.offset = event.x; - parent.layout(true); - animate = true; - } else { - animate = false; - } - } - }); - hSash.addListener (SWT.Selection, new Listener () { - public void handleEvent (Event event) { - Rectangle rect = vSash.getParent().getClientArea(); - event.y = Math.min (Math.max (event.y, tabList.getLocation().y + 60), rect.height - 60); - if (event.detail != SWT.DRAG) { - FormData data = (FormData)hSash.getLayoutData(); - data.top.offset = event.y; - parent.layout(true); - } - } - }); -} - -void createCanvas(Composite parent) { - int style = SWT.NO_BACKGROUND; - if (dbItem.getSelection()) style |= SWT.DOUBLE_BUFFERED; - canvas = new Canvas(parent, style); - canvas.addListener(SWT.Paint, new Listener() { - public void handleEvent(Event event) { - GC gc = event.gc; - Rectangle rect = canvas.getClientArea(); - Device device = gc.getDevice(); - Pattern pattern = null; - if (background.getBgColor1() != null) { - if (background.getBgColor2() != null) { // gradient - pattern = new Pattern(device, 0, 0, rect.width, - rect.height, - background.getBgColor1(), - background.getBgColor2()); - gc.setBackgroundPattern(pattern); - } else { // solid color - gc.setBackground(background.getBgColor1()); - } - } else if (background.getBgImage() != null) { // image - pattern = new Pattern(device, background.getBgImage()); - gc.setBackgroundPattern(pattern); - } - gc.fillRectangle(rect); - GraphicsTab tab = getTab(); - if (tab != null) tab.paint(gc, rect.width, rect.height); - if (pattern != null) pattern.dispose(); - } - }); -} - -void recreateCanvas() { - if (dbItem.getSelection() == ((canvas.getStyle() & SWT.DOUBLE_BUFFERED) != 0)) return; - Object data = canvas.getLayoutData(); - if (canvas != null) canvas.dispose(); - createCanvas(parent); - canvas.setLayoutData(data); - parent.layout(true, true); -} - -/** - * Creates the control panel - * @param parent - */ -void createControlPanel(Composite parent) { - Group group; - tabControlPanel = group = new Group(parent, SWT.NONE); - group.setText(getResourceString("Settings")); //$NON-NLS-1$ - tabControlPanel.setLayout(new RowLayout()); -} - -void createToolBar(final Composite parent) { - final Display display = parent.getDisplay(); - - toolBar = new ToolBar(parent, SWT.FLAT); - - ToolItem back = new ToolItem(toolBar, SWT.PUSH); - back.setText(getResourceString("Back")); //$NON-NLS-1$ - back.setImage(loadImage(display, "back.gif")); //$NON-NLS-1$ - - back.addListener(SWT.Selection, new Listener() { - public void handleEvent(Event event) { - int index = tabs_in_order.indexOf(tab) - 1; - if (index < 0) - index = tabs_in_order.size() - 1; - setTab((GraphicsTab)tabs_in_order.get(index)); - } - }); - - ToolItem next = new ToolItem(toolBar, SWT.PUSH); - next.setText(getResourceString("Next")); //$NON-NLS-1$ - next.setImage(loadImage(display, "next.gif")); //$NON-NLS-1$ - next.addListener(SWT.Selection, new Listener() { - public void handleEvent(Event event) { - int index = (tabs_in_order.indexOf(tab) + 1)%tabs_in_order.size(); - setTab((GraphicsTab)tabs_in_order.get(index)); - } - }); - - ColorMenu colorMenu = new ColorMenu(); - - // setup items to be contained in the background menu - colorMenu.setColorItems(true); - colorMenu.setPatternItems(checkAdvancedGraphics()); - colorMenu.setGradientItems(checkAdvancedGraphics()); - - // create the background menu - backMenu = colorMenu.createMenu(parent, new ColorListener() { - public void setColor(GraphicsBackground gb) { - background = gb; - backItem.setImage(gb.getThumbNail()); - if (canvas != null) canvas.redraw(); - } - }); - - // initialize the background to the first item in the menu - background = (GraphicsBackground)backMenu.getItem(0).getData(); - - // background tool item - backItem = new ToolItem(toolBar, SWT.PUSH); - backItem.setText(getResourceString("Background")); //$NON-NLS-1$ - backItem.setImage(background.getThumbNail()); - backItem.addListener(SWT.Selection, new Listener() { - public void handleEvent(Event event) { - 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); - } - } - }); - - // double buffer tool item - dbItem = new ToolItem(toolBar, SWT.CHECK); - dbItem.setText(getResourceString("DoubleBuffer")); //$NON-NLS-1$ - dbItem.setImage(loadImage(display, "db.gif")); //$NON-NLS-1$ - dbItem.addListener(SWT.Selection, new Listener() { - public void handleEvent(Event event) { - setDoubleBuffered(dbItem.getSelection()); - } - }); -} - -/** - * Creates and returns a thumbnail image. - * - * @param device - * a device - * @param name - * filename of the image - */ -static Image createThumbnail(Device device, String name) { - Image image = new Image(device, name); - Rectangle src = image.getBounds(); - Image result = null; - if (src.width != 16 || src.height != 16) { - result = new Image(device, 16, 16); - GC gc = new GC(result); - Rectangle dest = result.getBounds(); - gc.drawImage(image, src.x, src.y, src.width, src.height, dest.x, dest.y, dest.width, dest.height); - gc.dispose(); - } - if (result != null) { - image.dispose(); - return result; - } - return image; -} - -/** - * Creates an image based on a gradient pattern made up of two colors. - * - * @param device - The Device - * @param color1 - The first color used to create the image - * @param color2 - The second color used to create the image - * - * */ -static Image createImage(Device device, Color color1, Color color2, int width, int height) { - Image image = new Image(device, width, height); - GC gc = new GC(image); - Rectangle rect = image.getBounds(); - Pattern pattern = new Pattern(device, rect.x, rect.y, rect.width - 1, - rect.height - 1, color1, color2); - gc.setBackgroundPattern(pattern); - gc.fillRectangle(rect); - gc.drawRectangle(rect.x, rect.y, rect.width - 1, rect.height - 1); - gc.dispose(); - pattern.dispose(); - return image; -} - -/** - * Creates an image based on the color provided and returns it. - * - * @param device - The Device - * @param color - The color used to create the image - * - * */ -static Image createImage(Device device, Color color) { - Image image = new Image(device, 16, 16); - GC gc = new GC(image); - gc.setBackground(color); - Rectangle rect = image.getBounds(); - gc.fillRectangle(rect); - if (color.equals(device.getSystemColor(SWT.COLOR_BLACK))) { - gc.setForeground(device.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); - Arrays.sort(tabs, new Comparator() { - public int compare(Object tab0, Object tab1) { - return ((GraphicsTab)tab0).getText().compareTo(((GraphicsTab)tab1).getText()); - } - }); - HashSet set = new HashSet(); - for (int i = 0; i < tabs.length; i++) { - GraphicsTab tab = tabs[i]; - set.add(tab.getCategory()); - } - String[] categories = new String[set.size()]; - set.toArray(categories); - Arrays.sort(categories); - for (int i = 0; i < categories.length; i++) { - String text = categories[i]; - TreeItem item = new TreeItem(tabList, SWT.NONE); - item.setText(text); - } - tabs_in_order = new ArrayList(); - 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); - tabs_in_order.add(tab); - } - } - } - tabList.addListener(SWT.Selection, new Listener() { - public void handleEvent(Event event) { - TreeItem item = (TreeItem)event.item; - if (item != null) { - GraphicsTab gt = (GraphicsTab)item.getData(); - if (gt == tab) return; - setTab((GraphicsTab)item.getData()); - } - } - }); -} - -/** - * Creates the multi-line text widget that will contain the tab description. - * */ -void createTabDesc(Composite parent) { - tabDesc = new Text(parent, SWT.MULTI | SWT.V_SCROLL | SWT.H_SCROLL | SWT.WRAP | SWT.BORDER); - tabDesc.setEditable(false); - tabDesc.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE)); -} - -/** - * Initializes the GraphicsTab instances that will be contained in GraphicsExample. - * */ -GraphicsTab[] createTabs() { - return new GraphicsTab[] { - new LineTab(this), - new StarPolyTab(this), - tab = new IntroTab(this), - new BlackHoleTab(this), - new AlphaTab(this), - new BallTab(this), - new CountDownTab(this), - new CurvesSWTTab(this), - new CurvesTab(this), - new CustomFontTab(this), - new FontBounceTab(this), - new GradientTab(this), - new ImageTransformTab(this), - new ShapesTab(this), - new MazeTab(this), - new RGBTab(this), - new SpiralTab(this), - new CardsTab(this), - new LineCapTab(this), - new InterpolationTab(this), - new PathClippingTab(this), - new PathClippingAnimTab(this), - new LineStyleTab(this), - new LineJoinTab(this), - new RegionClippingTab(this), - new CustomAlphaTab(this), - new TextAntialiasTab(this), - new GraphicAntialiasTab(this), - new ImageFlipTab(this), - new ImageScaleTab(this), - new PathTab(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 (resources != null) { - for (int i = 0; i < resources.size(); i++) { - if (resources.get(i) instanceof Resource) { - ((Resource)resources.get(i)).dispose(); - } - } - } - resources = null; - - if (backMenu != null) { - backMenu.dispose(); - backMenu = 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; -} - -/** - * 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) { - try { - return RESOURCE_BUNDLE.getString(key); - } catch (MissingResourceException e) { - return key; - } catch (NullPointerException e) { - return "!" + key + "!"; //$NON-NLS-1$ //$NON-NLS-2$ - } -} - -static Image loadImage (Device device, Class clazz, String string) { - InputStream stream = clazz.getResourceAsStream (string); - if (stream == null) return null; - Image image = null; - try { - image = new Image (device, stream); - } catch (SWTException ex) { - } finally { - try { - stream.close (); - } catch (IOException ex) {} - } - return image; -} - -Image loadImage(Device device, String name) { - Image image = loadImage(device, GraphicsExample.class, name); - if (image != null) resources.add(image); - return image; -} - -public Shell open(final Display display) { - Shell shell = new Shell(display); - shell.setText(getResourceString("GraphicsExample")); //$NON-NLS-1$ - final GraphicsExample example = new GraphicsExample(shell); - shell.addListener(SWT.Close, new Listener() { - public void handleEvent(Event event) { - example.dispose(); - } - }); - shell.open(); - return shell; -} - -/** - * Redraws the current tab. - */ -public void redraw() { - canvas.redraw(); -} - -/** - * Sets wheter the canvas is double buffered or not. - */ -public void setDoubleBuffered(boolean doubleBuffered) { - dbItem.setSelection(doubleBuffered); - recreateCanvas(); -} - -/** - * Grabs input focus. - */ -public void setFocus() { - tabList.setFocus(); -} - -/** - * Sets the current tab. - */ -public void setTab(GraphicsTab tab) { - Control[] children = tabControlPanel.getChildren(); - for (int i = 0; i < children.length; i++) { - Control control = children[i]; - control.dispose(); - } - if (this.tab != null) this.tab.dispose(); - this.tab = tab; - if (tab != null) { - setDoubleBuffered(tab.getDoubleBuffered()); - tab.createControlPanel(tabControlPanel); - tabDesc.setText(tab.getDescription()); - } else { - tabDesc.setText(""); - } - FormData data = (FormData)tabControlPanel.getLayoutData(); - children = tabControlPanel.getChildren(); - if (children.length != 0) { - data.top = null; - } else { - data.top = new FormAttachment(100, -MARGIN); - } - parent.layout(true, true); - 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(); -} - -/** - * Starts the animation if the animate flag is set. - */ -void startAnimationTimer() { - final Display display = parent.getDisplay(); - display.timerExec(TIMER, new Runnable() { - public void run() { - if (canvas.isDisposed()) return; - int timeout = TIMER; - GraphicsTab tab = getTab(); - if (tab instanceof AnimatedGraphicsTab) { - AnimatedGraphicsTab animTab = (AnimatedGraphicsTab) tab; - if (animate && animTab.getAnimation()) { - Rectangle rect = canvas.getClientArea(); - animTab.next(rect.width, rect.height); - canvas.redraw(); - canvas.update(); - } - timeout = animTab.getAnimationTime(); - } - display.timerExec(timeout, this); - } - }); -} - -public static void main(String[] args) { - Display display = new Display(); - Shell shell = new GraphicsExample().open(display); - while (shell != null && !shell.isDisposed()) { - if (!display.readAndDispatch()) - display.sleep(); - } - display.dispose(); -} -} |