blob: 383e42069f5f19f5f8d213e1bb6bdbbb2ef939f9 [file] [log] [blame]
/*******************************************************************************
* 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.graphics;
import org.eclipse.swt.*;
import org.eclipse.swt.graphics.*;
import org.eclipse.swt.widgets.*;
public 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, new Listener() {
public void handleEvent (Event event) {
example.redraw();
}
});
}
public String getCategory() {
return GraphicsExample.getResourceString("Polygons"); //$NON-NLS-1$
}
public String getText() {
return GraphicsExample.getResourceString("StarPolygon"); //$NON-NLS-1$
}
public String getDescription() {
return GraphicsExample.getResourceString("StarPolygonDescription"); //$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;
}
gc.setFillRule(fillRuleCb.getSelectionIndex() != 0 ? SWT.FILL_WINDING : SWT.FILL_EVEN_ODD);
gc.setBackground(gc.getDevice().getSystemColor(SWT.COLOR_WHITE));
gc.fillPolygon(radial);
gc.drawPolygon(radial);
}
}