diff options
Diffstat (limited to 'examples/org.eclipse.swt.examples/src/org/eclipse/swt/examples/paint/PaintExample.java')
-rw-r--r-- | examples/org.eclipse.swt.examples/src/org/eclipse/swt/examples/paint/PaintExample.java | 584 |
1 files changed, 0 insertions, 584 deletions
diff --git a/examples/org.eclipse.swt.examples/src/org/eclipse/swt/examples/paint/PaintExample.java b/examples/org.eclipse.swt.examples/src/org/eclipse/swt/examples/paint/PaintExample.java deleted file mode 100644 index 19a10a4597..0000000000 --- a/examples/org.eclipse.swt.examples/src/org/eclipse/swt/examples/paint/PaintExample.java +++ /dev/null @@ -1,584 +0,0 @@ -/******************************************************************************* - * 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 - *******************************************************************************/ -package org.eclipse.swt.examples.paint; - - -import org.eclipse.swt.*; -import org.eclipse.swt.graphics.*; -import org.eclipse.swt.widgets.*; -import org.eclipse.swt.events.*; -import org.eclipse.swt.layout.*; -import org.eclipse.swt.accessibility.*; - -import java.io.*; -import java.text.*; -import java.util.*; - -public class PaintExample { - private static ResourceBundle resourceBundle = - ResourceBundle.getBundle("examples_paint"); - private Composite mainComposite; - private Canvas activeForegroundColorCanvas; - private Canvas activeBackgroundColorCanvas; - private Color paintColorBlack, paintColorWhite; // alias for paintColors[0] and [1] - private Color[] paintColors; - private Font paintDefaultFont; // do not free - private static final int numPaletteRows = 3; - private static final int numPaletteCols = 50; - private ToolSettings toolSettings; // current active settings - private PaintSurface paintSurface; // paint surface for drawing - - static final int Pencil_tool = 0; - static final int Airbrush_tool = 1; - static final int Line_tool = 2; - static final int PolyLine_tool = 3; - static final int Rectangle_tool = 4; - static final int RoundedRectangle_tool = 5; - static final int Ellipse_tool = 6; - static final int Text_tool = 7; - static final int None_fill = 8; - static final int Outline_fill = 9; - static final int Solid_fill = 10; - static final int Solid_linestyle = 11; - static final int Dash_linestyle = 12; - static final int Dot_linestyle = 13; - static final int DashDot_linestyle = 14; - static final int Font_options = 15; - - static final int Default_tool = Pencil_tool; - static final int Default_fill = None_fill; - static final int Default_linestyle = Solid_linestyle; - - public static final Tool[] tools = { - new Tool(Pencil_tool, "Pencil", "tool", SWT.RADIO), - new Tool(Airbrush_tool, "Airbrush", "tool", SWT.RADIO), - new Tool(Line_tool, "Line", "tool", SWT.RADIO), - new Tool(PolyLine_tool, "PolyLine", "tool", SWT.RADIO), - new Tool(Rectangle_tool, "Rectangle", "tool", SWT.RADIO), - new Tool(RoundedRectangle_tool, "RoundedRectangle", "tool", SWT.RADIO), - new Tool(Ellipse_tool, "Ellipse", "tool", SWT.RADIO), - new Tool(Text_tool, "Text", "tool", SWT.RADIO), - new Tool(None_fill, "None", "fill", SWT.RADIO, new Integer(ToolSettings.ftNone)), - new Tool(Outline_fill, "Outline", "fill", SWT.RADIO, new Integer(ToolSettings.ftOutline)), - new Tool(Solid_fill, "Solid", "fill", SWT.RADIO, new Integer(ToolSettings.ftSolid)), - new Tool(Solid_linestyle, "Solid", "linestyle", SWT.RADIO, new Integer(SWT.LINE_SOLID)), - new Tool(Dash_linestyle, "Dash", "linestyle", SWT.RADIO, new Integer(SWT.LINE_DASH)), - new Tool(Dot_linestyle, "Dot", "linestyle", SWT.RADIO, new Integer(SWT.LINE_DOT)), - new Tool(DashDot_linestyle, "DashDot", "linestyle", SWT.RADIO, new Integer(SWT.LINE_DASHDOT)), - new Tool(Font_options, "Font", "options", SWT.PUSH) - }; - - /** - * Creates an instance of a PaintExample embedded inside - * the supplied parent Composite. - * - * @param parent the container of the example - */ - public PaintExample(Composite parent) { - mainComposite = parent; - initResources(); - initActions(); - init(); - } - - /** - * Invokes as a standalone program. - */ - public static void main(String[] args) { - Display display = new Display(); - Shell shell = new Shell(display); - shell.setText(getResourceString("window.title")); - shell.setLayout(new GridLayout()); - PaintExample instance = new PaintExample(shell); - instance.createToolBar(shell); - Composite composite = new Composite(shell, SWT.NONE); - composite.setLayout(new FillLayout()); - composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); - instance.createGUI(composite); - instance.setDefaults(); - setShellSize(display, shell); - shell.open(); - while (! shell.isDisposed()) { - if (! display.readAndDispatch()) display.sleep(); - } - instance.dispose(); - } - - /** - * Creates the toolbar. - * Note: Only called by standalone. - */ - private void createToolBar(Composite parent) { - ToolBar toolbar = new ToolBar (parent, SWT.NONE); - String group = null; - for (int i = 0; i < tools.length; i++) { - Tool tool = tools[i]; - if (group != null && !tool.group.equals(group)) { - new ToolItem (toolbar, SWT.SEPARATOR); - } - group = tool.group; - ToolItem item = addToolItem(toolbar, tool); - if (i == Default_tool || i == Default_fill || i == Default_linestyle) item.setSelection(true); - } - } - - /** - * Adds a tool item to the toolbar. - * Note: Only called by standalone. - */ - private ToolItem addToolItem(final ToolBar toolbar, final Tool tool) { - final String id = tool.group + '.' + tool.name; - ToolItem item = new ToolItem (toolbar, tool.type); - item.setText (getResourceString(id + ".label")); - item.setToolTipText(getResourceString(id + ".tooltip")); - item.setImage(tool.image); - item.addSelectionListener(new SelectionAdapter() { - public void widgetSelected(SelectionEvent e) { - tool.action.run(); - } - }); - final int childID = toolbar.indexOf(item); - toolbar.getAccessible().addAccessibleListener(new AccessibleAdapter() { - public void getName(org.eclipse.swt.accessibility.AccessibleEvent e) { - if (e.childID == childID) { - e.result = getResourceString(id + ".description"); - } - } - }); - return item; - } - - /** - * Sets the default tool item states. - */ - public void setDefaults() { - setPaintTool(Default_tool); - setFillType(Default_fill); - setLineStyle(Default_linestyle); - setForegroundColor(paintColorBlack); - setBackgroundColor(paintColorWhite); - } - - /** - * Creates the GUI. - */ - public void createGUI(Composite parent) { - GridLayout gridLayout; - GridData gridData; - - /*** Create principal GUI layout elements ***/ - Composite displayArea = new Composite(parent, SWT.NONE); - gridLayout = new GridLayout(); - gridLayout.numColumns = 1; - displayArea.setLayout(gridLayout); - - // Creating these elements here avoids the need to instantiate the GUI elements - // in strict layout order. The natural layout ordering is an artifact of using - // SWT layouts, but unfortunately it is not the same order as that required to - // instantiate all of the non-GUI application elements to satisfy referential - // dependencies. It is possible to reorder the initialization to some extent, but - // this can be very tedious. - - // paint canvas - final Canvas paintCanvas = new Canvas(displayArea, SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL | - SWT.NO_REDRAW_RESIZE | SWT.NO_BACKGROUND); - gridData = new GridData(GridData.FILL_HORIZONTAL | GridData.FILL_VERTICAL); - paintCanvas.setLayoutData(gridData); - paintCanvas.setBackground(paintColorWhite); - - // color selector frame - final Composite colorFrame = new Composite(displayArea, SWT.NONE); - gridData = new GridData(GridData.FILL_HORIZONTAL | GridData.VERTICAL_ALIGN_FILL); - colorFrame.setLayoutData(gridData); - - // tool settings frame - final Composite toolSettingsFrame = new Composite(displayArea, SWT.NONE); - gridData = new GridData(GridData.FILL_HORIZONTAL | GridData.VERTICAL_ALIGN_FILL); - toolSettingsFrame.setLayoutData(gridData); - - // status text - final Text statusText = new Text(displayArea, SWT.BORDER | SWT.SINGLE | SWT.READ_ONLY); - gridData = new GridData(GridData.FILL_HORIZONTAL | GridData.VERTICAL_ALIGN_FILL); - statusText.setLayoutData(gridData); - - /*** Create the remaining application elements inside the principal GUI layout elements ***/ - // paintSurface - paintSurface = new PaintSurface(paintCanvas, statusText, paintColorWhite); - - // finish initializing the tool data - tools[Pencil_tool].data = new PencilTool(toolSettings, paintSurface); - tools[Airbrush_tool].data = new AirbrushTool(toolSettings, paintSurface); - tools[Line_tool].data = new LineTool(toolSettings, paintSurface); - tools[PolyLine_tool].data = new PolyLineTool(toolSettings, paintSurface); - tools[Rectangle_tool].data = new RectangleTool(toolSettings, paintSurface); - tools[RoundedRectangle_tool].data = new RoundedRectangleTool(toolSettings, paintSurface); - tools[Ellipse_tool].data = new EllipseTool(toolSettings, paintSurface); - tools[Text_tool].data = new TextTool(toolSettings, paintSurface); - - // colorFrame - gridLayout = new GridLayout(); - gridLayout.numColumns = 3; - gridLayout.marginHeight = 0; - gridLayout.marginWidth = 0; - colorFrame.setLayout(gridLayout); - - // activeForegroundColorCanvas, activeBackgroundColorCanvas - activeForegroundColorCanvas = new Canvas(colorFrame, SWT.BORDER); - gridData = new GridData(GridData.HORIZONTAL_ALIGN_FILL); - gridData.heightHint = 24; - gridData.widthHint = 24; - activeForegroundColorCanvas.setLayoutData(gridData); - - activeBackgroundColorCanvas = new Canvas(colorFrame, SWT.BORDER); - gridData = new GridData(GridData.HORIZONTAL_ALIGN_FILL); - gridData.heightHint = 24; - gridData.widthHint = 24; - activeBackgroundColorCanvas.setLayoutData(gridData); - - // paletteCanvas - final Canvas paletteCanvas = new Canvas(colorFrame, SWT.BORDER | SWT.NO_BACKGROUND); - gridData = new GridData(GridData.FILL_HORIZONTAL); - gridData.heightHint = 24; - paletteCanvas.setLayoutData(gridData); - paletteCanvas.addListener(SWT.MouseDown, new Listener() { - public void handleEvent(Event e) { - Rectangle bounds = paletteCanvas.getClientArea(); - Color color = getColorAt(bounds, e.x, e.y); - - if (e.button == 1) setForegroundColor(color); - else setBackgroundColor(color); - } - private Color getColorAt(Rectangle bounds, int x, int y) { - if (bounds.height <= 1 && bounds.width <= 1) return paintColorWhite; - final int row = (y - bounds.y) * numPaletteRows / bounds.height; - final int col = (x - bounds.x) * numPaletteCols / bounds.width; - return paintColors[Math.min(Math.max(row * numPaletteCols + col, 0), paintColors.length - 1)]; - } - }); - Listener refreshListener = new Listener() { - public void handleEvent(Event e) { - if (e.gc == null) return; - Rectangle bounds = paletteCanvas.getClientArea(); - for (int row = 0; row < numPaletteRows; ++row) { - for (int col = 0; col < numPaletteCols; ++col) { - final int x = bounds.width * col / numPaletteCols; - final int y = bounds.height * row / numPaletteRows; - final int width = Math.max(bounds.width * (col + 1) / numPaletteCols - x, 1); - final int height = Math.max(bounds.height * (row + 1) / numPaletteRows - y, 1); - e.gc.setBackground(paintColors[row * numPaletteCols + col]); - e.gc.fillRectangle(bounds.x + x, bounds.y + y, width, height); - } - } - } - }; - paletteCanvas.addListener(SWT.Resize, refreshListener); - paletteCanvas.addListener(SWT.Paint, refreshListener); - //paletteCanvas.redraw(); - - // toolSettingsFrame - gridLayout = new GridLayout(); - gridLayout.numColumns = 4; - gridLayout.marginHeight = 0; - gridLayout.marginWidth = 0; - toolSettingsFrame.setLayout(gridLayout); - - Label label = new Label(toolSettingsFrame, SWT.NONE); - label.setText(getResourceString("settings.AirbrushRadius.text")); - - final Scale airbrushRadiusScale = new Scale(toolSettingsFrame, SWT.HORIZONTAL); - airbrushRadiusScale.setMinimum(5); - airbrushRadiusScale.setMaximum(50); - airbrushRadiusScale.setSelection(toolSettings.airbrushRadius); - airbrushRadiusScale.setLayoutData(new GridData(GridData.FILL_HORIZONTAL | GridData.VERTICAL_ALIGN_FILL)); - airbrushRadiusScale.addSelectionListener(new SelectionAdapter() { - public void widgetSelected(SelectionEvent e) { - toolSettings.airbrushRadius = airbrushRadiusScale.getSelection(); - updateToolSettings(); - } - }); - - label = new Label(toolSettingsFrame, SWT.NONE); - label.setText(getResourceString("settings.AirbrushIntensity.text")); - - final Scale airbrushIntensityScale = new Scale(toolSettingsFrame, SWT.HORIZONTAL); - airbrushIntensityScale.setMinimum(1); - airbrushIntensityScale.setMaximum(100); - airbrushIntensityScale.setSelection(toolSettings.airbrushIntensity); - airbrushIntensityScale.setLayoutData(new GridData(GridData.FILL_HORIZONTAL | GridData.VERTICAL_ALIGN_FILL)); - airbrushIntensityScale.addSelectionListener(new SelectionAdapter() { - public void widgetSelected(SelectionEvent e) { - toolSettings.airbrushIntensity = airbrushIntensityScale.getSelection(); - updateToolSettings(); - } - }); - } - - /** - * Disposes of all resources associated with a particular - * instance of the PaintExample. - */ - public void dispose() { - if (paintSurface != null) paintSurface.dispose(); - if (paintColors != null) { - for (int i = 0; i < paintColors.length; ++i) { - final Color color = paintColors[i]; - if (color != null) color.dispose(); - } - } - paintDefaultFont = null; - paintColors = null; - paintSurface = null; - freeResources(); - } - - /** - * Frees the resource bundle resources. - */ - public void freeResources() { - for (int i = 0; i < tools.length; ++i) { - Tool tool = tools[i]; - final Image image = tool.image; - if (image != null) image.dispose(); - tool.image = null; - } - } - - /** - * Returns the Display. - * - * @return the display we're using - */ - public Display getDisplay() { - return mainComposite.getDisplay(); - } - - /** - * Gets a string from the resource bundle. - * We don't want to crash because of a missing String. - * Returns the key if not found. - */ - public static String getResourceString(String key) { - try { - return resourceBundle.getString(key); - } catch (MissingResourceException e) { - return key; - } catch (NullPointerException e) { - return "!" + key + "!"; - } - } - - /** - * Gets a string from the resource bundle and binds it - * with the given arguments. If the key is not found, - * return the key. - */ - public static String getResourceString(String key, Object[] args) { - try { - return MessageFormat.format(getResourceString(key), args); - } catch (MissingResourceException e) { - return key; - } catch (NullPointerException e) { - return "!" + key + "!"; - } - } - - /** - * Initialize colors, fonts, and tool settings. - */ - private void init() { - Display display = mainComposite.getDisplay(); - - paintColorWhite = new Color(display, 255, 255, 255); - paintColorBlack = new Color(display, 0, 0, 0); - - paintDefaultFont = display.getSystemFont(); - - paintColors = new Color[numPaletteCols * numPaletteRows]; - paintColors[0] = paintColorBlack; - paintColors[1] = paintColorWhite; - for (int i = 2; i < paintColors.length; i++) { - paintColors[i] = new Color(display, - ((i*7)%255),((i*23)%255), ((i*51)%255)); - } - - toolSettings = new ToolSettings(); - toolSettings.commonForegroundColor = paintColorBlack; - toolSettings.commonBackgroundColor = paintColorWhite; - toolSettings.commonFont = paintDefaultFont; - } - - /** - * Sets the action field of the tools - */ - private void initActions() { - for (int i = 0; i < tools.length; ++i) { - final Tool tool = tools[i]; - String group = tool.group; - if (group.equals("tool")) { - tool.action = new Runnable() { - public void run() { - setPaintTool(tool.id); - } - }; - } else if (group.equals("fill")) { - tool.action = new Runnable() { - public void run() { - setFillType(tool.id); - } - }; - } else if (group.equals("linestyle")) { - tool.action = new Runnable() { - public void run() { - setLineStyle(tool.id); - } - }; - } else if (group.equals("options")) { - tool.action = new Runnable() { - public void run() { - FontDialog fontDialog = new FontDialog(paintSurface.getShell(), SWT.PRIMARY_MODAL); - FontData[] fontDatum = toolSettings.commonFont.getFontData(); - if (fontDatum != null && fontDatum.length > 0) { - fontDialog.setFontList(fontDatum); - } - fontDialog.setText(getResourceString("options.Font.dialog.title")); - - paintSurface.hideRubberband(); - FontData fontData = fontDialog.open(); - paintSurface.showRubberband(); - if (fontData != null) { - try { - Font font = new Font(mainComposite.getDisplay(), fontData); - toolSettings.commonFont = font; - updateToolSettings(); - } catch (SWTException ex) { - } - } - } - }; - } - } - } - - /** - * Loads the image resources. - */ - public void initResources() { - final Class clazz = PaintExample.class; - if (resourceBundle != null) { - try { - for (int i = 0; i < tools.length; ++i) { - Tool tool = tools[i]; - String id = tool.group + '.' + tool.name; - InputStream sourceStream = clazz.getResourceAsStream(getResourceString(id + ".image")); - ImageData source = new ImageData(sourceStream); - ImageData mask = source.getTransparencyMask(); - tool.image = new Image(null, source, mask); - try { - sourceStream.close(); - } catch (IOException e) { - e.printStackTrace(); - } - } - return; - } catch (Throwable t) { - } - } - String error = (resourceBundle != null) ? - getResourceString("error.CouldNotLoadResources") : - "Unable to load resources"; - freeResources(); - throw new RuntimeException(error); - } - - /** - * Grabs input focus. - */ - public void setFocus() { - mainComposite.setFocus(); - } - - /** - * Sets the tool foreground color. - * - * @param color the new color to use - */ - public void setForegroundColor(Color color) { - if (activeForegroundColorCanvas != null) - activeForegroundColorCanvas.setBackground(color); - toolSettings.commonForegroundColor = color; - updateToolSettings(); - } - - /** - * Set the tool background color. - * - * @param color the new color to use - */ - public void setBackgroundColor(Color color) { - if (activeBackgroundColorCanvas != null) - activeBackgroundColorCanvas.setBackground(color); - toolSettings.commonBackgroundColor = color; - updateToolSettings(); - } - - /** - * Selects a tool given its ID. - */ - public void setPaintTool(int id) { - PaintTool paintTool = (PaintTool) tools[id].data; - paintSurface.setPaintSession(paintTool); - updateToolSettings(); - } - - /** - * Selects a filltype given its ID. - */ - public void setFillType(int id) { - Integer fillType = (Integer) tools[id].data; - toolSettings.commonFillType = fillType.intValue(); - updateToolSettings(); - } - - /** - * Selects line type given its ID. - */ - public void setLineStyle(int id) { - Integer lineType = (Integer) tools[id].data; - toolSettings.commonLineStyle = lineType.intValue(); - updateToolSettings(); - } - - /** - * Sets the size of the shell to it's "packed" size, - * unless that makes it bigger than the display, - * in which case set it to 9/10 of display size. - */ - private static void setShellSize (Display display, Shell shell) { - Rectangle bounds = display.getBounds(); - Point size = shell.computeSize (SWT.DEFAULT, SWT.DEFAULT); - if (size.x > bounds.width) size.x = bounds.width * 9 / 10; - if (size.y > bounds.height) size.y = bounds.height * 9 / 10; - shell.setSize (size); - } - - /** - * Notifies the tool that its settings have changed. - */ - private void updateToolSettings() { - final PaintTool activePaintTool = paintSurface.getPaintTool(); - if (activePaintTool == null) return; - - activePaintTool.endSession(); - activePaintTool.set(toolSettings); - activePaintTool.beginSession(); - } -} - |