/******************************************************************************* * Copyright (c) 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 org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Device; import org.eclipse.swt.graphics.GC; import org.eclipse.swt.graphics.Path; import org.eclipse.swt.graphics.Pattern; import org.eclipse.swt.graphics.Rectangle; import org.eclipse.swt.graphics.Transform; /** * Miscellaneous tab that demonstrates emerging colors from layering other colors. */ public class RGBTab extends AnimatedGraphicsTab { float diagTranslateX1, diagTranslateX2, diagTranslateY1, diagTranslateY2; int translateX, translateY; /** * Constructor * * @param example * A GraphicsExample */ public RGBTab(GraphicsExample example) { super(example); translateX = translateY = 0; diagTranslateX1 = diagTranslateX2 = diagTranslateY1 = diagTranslateY2 = 0; } public String getCategory() { return GraphicsExample.getResourceString("Misc"); //$NON-NLS-1$ } public String getDescription() { return GraphicsExample.getResourceString("rgbDescription"); //$NON-NLS-1$ } public String getText() { return GraphicsExample.getResourceString("rgb"); //$NON-NLS-1$ } /* * (non-Javadoc) * * @see org.eclipse.swt.examples.graphics.AnimatedGraphicsTab#next(int, int) */ public void next(int width, int height) { float h = height; float w = width; translateX = (translateX + 3) % width; translateY = (translateY + 5) % height; diagTranslateX1 = (diagTranslateX1 + 6) % width; diagTranslateY1 = diagTranslateX1 * h / w; diagTranslateX2 = (diagTranslateX2 + 8) % width; diagTranslateY2 = -diagTranslateX2 * h / w + h; } /* * (non-Javadoc) * * @see org.eclipse.swt.examples.graphics.GraphicsTab#paint(org.eclipse.swt.graphics.GC, int, int) */ public void paint(GC gc, int width, int height) { if (!example.checkAdvancedGraphics()) return; Device device = gc.getDevice(); // horizontal rectangle Transform transform = new Transform(device); transform.translate(0, translateY); gc.setTransform(transform); transform.dispose(); Path path = new Path(device); path.addRectangle(0, 0, width, 50); Pattern pattern = new Pattern(device, 0, 0, width, 50, device.getSystemColor(SWT.COLOR_BLUE), 0x7f, device .getSystemColor(SWT.COLOR_RED), 0x7f); gc.setBackgroundPattern(pattern); gc.fillPath(path); gc.drawPath(path); path.dispose(); // vertical rectangle transform = new Transform(device); transform.translate(translateX, 0); gc.setTransform(transform); transform.dispose(); path = new Path(device); path.addRectangle(0, 0, 50, height); pattern.dispose(); pattern = new Pattern(device, 0, 0, 50, height, device.getSystemColor(SWT.COLOR_DARK_CYAN), 0x7f, device .getSystemColor(SWT.COLOR_WHITE), 0x7f); gc.setBackgroundPattern(pattern); gc.fillPath(path); gc.drawPath(path); path.dispose(); // diagonal rectangle from bottom right corner Rectangle rect = new Rectangle(0, 0, 50, height); transform = new Transform(device); transform.translate(width - diagTranslateX1, height / 2 - diagTranslateY1); // rotate on center of rectangle transform.translate(rect.width / 2, rect.height / 2); transform.rotate(45); transform.translate(-rect.width / 2, -rect.height / 2); gc.setTransform(transform); transform.dispose(); path = new Path(device); path.addRectangle(rect.x, rect.y, rect.width, rect.height); pattern.dispose(); pattern = new Pattern(device, rect.x, rect.y, rect.width, rect.height, device .getSystemColor(SWT.COLOR_DARK_GREEN), 0x7f, device.getSystemColor(SWT.COLOR_DARK_MAGENTA), 0x7f); gc.setBackgroundPattern(pattern); gc.fillPath(path); gc.drawPath(path); path.dispose(); // diagonal rectangle from top right corner transform = new Transform(device); transform.translate(width - diagTranslateX2, height / 2 - diagTranslateY2); // rotate on center of rectangle transform.translate(rect.width / 2, rect.height / 2); transform.rotate(-45); transform.translate(-rect.width / 2, -rect.height / 2); gc.setTransform(transform); transform.dispose(); path = new Path(device); path.addRectangle(rect.x, rect.y, rect.width, rect.height); pattern.dispose(); pattern = new Pattern(device, rect.x, rect.y, rect.width, rect.height, device .getSystemColor(SWT.COLOR_DARK_RED), 0x7f, device.getSystemColor(SWT.COLOR_YELLOW), 0x7f); gc.setBackgroundPattern(pattern); gc.fillPath(path); gc.drawPath(path); pattern.dispose(); path.dispose(); } }