/*******************************************************************************
* 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.Font;
import org.eclipse.swt.graphics.GC;
import org.eclipse.swt.graphics.Path;
import org.eclipse.swt.graphics.Point;
/**
* This tab is an animated graphic. It presents the word SWT in different fonts as it bounces around the screen.
*/
public class FontBounceTab extends AnimatedGraphicsTab {
/**
* Returns the name of the font using the specified index. This method takes into account the resident platform.
*
* @param index
* The index of the font to be used
*/
static String getPlatformFontFace(int index) {
if (SWT.getPlatform() == "win32")
return new String[] { "Arial", "Impact", "Times", "Verdana" }[index];
else if (SWT.getPlatform() == "motif")
return new String[] { "URW Chancery L", "URW Gothic L", "Times", "qub" }[index];
else if (SWT.getPlatform() == "gtk")
return new String[] { "URW Chancery L", "Baekmuk Batang", "Baekmuk Headline", "KacsTitleL" }[index];
else if (SWT.getPlatform() == "carbon")
return new String[] { "Arial", "Impact", "Times", "Verdana" }[index];
else
return new String[] { "Arial", "Impact", "Times", "Verdana" }[index];
}
int fontFace = 0;
int fontSize = 100;
int fontStyle; // represents various style attributes applicable to
// a Font
int foreGrdColor, fillColor; // font colors
float incX = 10.0f; // units by which to move the word along X axis
float incY = 5.0f; // units by which to move the word along Y axis
String text = GraphicsExample.getResourceString("SWT");
int textWidth, textHeight; // width and height of the word SWT
float x, y;
public FontBounceTab(GraphicsExample example) {
super(example);
}
public String getCategory() {
return GraphicsExample.getResourceString("Font"); //$NON-NLS-1$
}
public String getDescription() {
return GraphicsExample.getResourceString("FontBounceDescription"); //$NON-NLS-1$
}
public String getText() {
return GraphicsExample.getResourceString("Bounce"); //$NON-NLS-1$
}
/*
* (non-Javadoc)
*
* @see org.eclipse.swt.examples.graphics.AnimatedGraphicsTab#next(int, int)
*/
public void next(int width, int height) {
x += incX;
y += incY;
float random = (float) Math.random();
// collision with right side of screen
if (x + textWidth > width) {
x = width - textWidth;
incX = random * -width / 16 - 1;
fontFace = 0;
fontSize = 125;
fillColor = SWT.COLOR_DARK_BLUE;
foreGrdColor = SWT.COLOR_YELLOW;
fontStyle = SWT.ITALIC;
}
// collision with left side of screen
if (x < 0) {
x = 0;
incX = random * width / 16 + 1;
fontFace = 1;
fontSize = 80;
fillColor = SWT.COLOR_DARK_MAGENTA;
foreGrdColor = SWT.COLOR_CYAN;
fontStyle = SWT.NONE;
}
// collision with bottom side of screen
if (y + textHeight > height) {
y = height - textHeight - 2;
incY = random * -height / 16 - 1;
fontFace = 2;
fontSize = 100;
fillColor = SWT.COLOR_YELLOW;
foreGrdColor = SWT.COLOR_BLACK;
fontStyle = SWT.BOLD;
}
// collision with top side of screen
if (y < 0) {
y = 0;
incY = random * height / 16 + 1;
fontFace = 3;
fontSize = 120;
fillColor = SWT.COLOR_GREEN;
foreGrdColor = SWT.COLOR_GRAY;
fontStyle = SWT.NONE;
}
}
/*
* (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();
Font font = new Font(device, FontBounceTab.getPlatformFontFace(fontFace), fontSize, fontStyle);
gc.setFont(font);
Point size = gc.stringExtent(text);
textWidth = size.x;
textHeight = size.y;
Path path = new Path(device);
path.addString(text, x, y, font);
gc.setForeground(device.getSystemColor(foreGrdColor));
gc.setBackground(device.getSystemColor(fillColor));
gc.fillPath(path);
gc.drawPath(path);
font.dispose();
path.dispose();
}
}