org.eclipse.ui.internal.DefaultAnimationFeedback Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of workbench Show documentation
Show all versions of workbench Show documentation
This plug-in contains the bulk of the Workbench implementation, and depends on JFace, SWT, and Core Runtime. It cannot be used independently from org.eclipse.ui. Workbench client plug-ins should not depend directly on this plug-in.
The newest version!
/*******************************************************************************
* Copyright (c) 2006, 2007 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.ui.internal;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.eclipse.jface.util.Geometry;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.graphics.Region;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
/**
* @since 3.3
*
*/
public class DefaultAnimationFeedback {
private static final int LINE_WIDTH = 1;
private Display display;
private Shell theShell;
private Region shellRegion;
private List startRects = new ArrayList();
private List endRects = new ArrayList();
public DefaultAnimationFeedback() {}
/**
* @param parentShell
*/
public void initialize(Shell parentShell, Rectangle startRect, Rectangle endRect) {
addStartRect(startRect);
addEndRect(endRect);
theShell = new Shell(parentShell, SWT.NO_TRIM | SWT.ON_TOP);
display = theShell.getDisplay();
Color color = display.getSystemColor(SWT.COLOR_WIDGET_FOREGROUND);
theShell.setBackground(color);
// Ensure that the background won't show on the initial display
shellRegion = new Region(display);
theShell.setRegion(shellRegion);
}
public void addStartRect(Rectangle rect) {
if (rect != null) {
startRects.add(rect);
}
}
public void addEndRect(Rectangle rect) {
if (rect != null) {
endRects.add(rect);
}
}
public List getStartRects() {
return startRects;
}
public List getEndRects() {
return endRects;
}
public void renderStep(double amount) {
if (shellRegion != null) {
shellRegion.dispose();
shellRegion = new Region(display);
}
// Iterate across the set of start/end rects
Iterator startIter = startRects.iterator();
Iterator endIter = endRects.iterator();
while (startIter.hasNext()) {
Rectangle start = (Rectangle) startIter.next();
Rectangle end = (Rectangle) endIter.next();
// Get the bounds of the interpolated rect
Rectangle curRect = RectangleAnimation.interpolate(start, end, amount);
Rectangle rect = Geometry.toControl(theShell, curRect);
shellRegion.add(rect);
rect.x += LINE_WIDTH;
rect.y += LINE_WIDTH;
rect.width = Math.max(0, rect.width - 2 * LINE_WIDTH);
rect.height = Math.max(0, rect.height - 2 * LINE_WIDTH);
shellRegion.subtract(rect);
}
theShell.setRegion(shellRegion);
display.update();
}
/**
*
*/
public void dispose() {
theShell.setVisible(false);
theShell.dispose();
shellRegion.dispose();
}
/**
* Perform any initialization you want to have happen -before- the
* amination starts
*/
public void jobInit() {
// Compute the shell's bounds
Rectangle shellBounds = Geometry.copy((Rectangle) startRects.get(0));
Iterator startIter = startRects.iterator();
Iterator endIter = endRects.iterator();
while (startIter.hasNext()) {
shellBounds.add((Rectangle) startIter.next());
shellBounds.add((Rectangle) endIter.next());
}
theShell.setBounds(shellBounds);
// Making the shell visible will be slow on old video cards, so only start
// the timer once it is visible.
theShell.setVisible(true);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy