/******************************************************************************
* Copyright (c) 2009-2013, Linagora
*
* 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:
* Linagora - initial API and implementation
*******************************************************************************/
package com.ebmwebsourcing.petals.studio.splash;
import org.eclipse.core.runtime.IProduct;
import org.eclipse.core.runtime.Platform;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.resource.StringConverter;
import org.eclipse.swt.events.PaintEvent;
import org.eclipse.swt.events.PaintListener;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.ImageData;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.graphics.RGB;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.application.DisplayAccess;
import org.eclipse.ui.branding.IProductConstants;
import org.eclipse.ui.splash.BasicSplashHandler;
import com.ebmwebsourcing.petals.studio.PetalsStudioPlugin;
import com.ebmwebsourcing.petals.studio.utils.VersionUtils;
/**
* @author Vincent Zurczak - EBM WebSourcing
*/
public class PetalsSplashHandler extends BasicSplashHandler {
private int alphaValue = 20;
private Image img;
/*
* (non-Javadoc)
* @see org.eclipse.ui.splash.AbstractSplashHandler
* #init(org.eclipse.swt.widgets.Shell)
*/
@Override
public void init( final Shell splash ) {
super.init( splash );
// Get product properties
String progressRectString = null;
String messageRectString = null;
String foregroundColorString = null;
IProduct product = Platform.getProduct();
if( product != null ) {
progressRectString = product.getProperty( IProductConstants.STARTUP_PROGRESS_RECT );
messageRectString = product.getProperty( IProductConstants.STARTUP_MESSAGE_RECT );
foregroundColorString = product.getProperty( IProductConstants.STARTUP_FOREGROUND_COLOR );
}
Rectangle progressRect = StringConverter.asRectangle(
progressRectString,
new Rectangle(10, 10, 300, 15));
setProgressRect( progressRect );
Rectangle messageRect = StringConverter.asRectangle(
messageRectString,
new Rectangle(10, 35, 300, 15));
setMessageRect( messageRect );
int foregroundColorInteger;
try {
if( foregroundColorString != null )
foregroundColorInteger = Integer.parseInt( foregroundColorString, 16 );
else
foregroundColorInteger = 0xD2D7FF; // off white
} catch( Exception ex ) {
foregroundColorInteger = 0xD2D7FF; // off white
}
setForeground( new RGB(
(foregroundColorInteger & 0xFF0000) >> 16,
(foregroundColorInteger & 0xFF00) >> 8,
foregroundColorInteger & 0xFF));
final Point buildIdPoint = new Point( 350, 230 );
ImageDescriptor desc = PetalsStudioPlugin.getImageDescriptor( "icons/prod/studio.png" );
final ImageData imgData = desc.getImageData();
// Get the version to display
final StringBuilder sb = new StringBuilder( VersionUtils.getProductVersion( false ));
if( ! sb.toString().contains( " " )) // No RC, milestone... Display a prefix.
sb.insert( 0, "Version " );
// Paint it
getContent().addPaintListener( new PaintListener() {
public void paintControl( PaintEvent e ) {
e.gc.setForeground( getForeground());
e.gc.drawText( sb.toString(), buildIdPoint.x, buildIdPoint.y, true);
imgData.alpha = PetalsSplashHandler.this.alphaValue;
Image previousImg = PetalsSplashHandler.this.img;
PetalsSplashHandler.this.img = new Image( e.display, imgData );
if( previousImg != null ) {
previousImg.dispose();
previousImg = null;
}
e.gc.drawImage( PetalsSplashHandler.this.img, 233, 175 );
}
});
Thread worker = new Thread() {
@Override
public void run() {
DisplayAccess.accessDisplayDuringStartup();
getContent().getDisplay().syncExec( new Runnable() {
public void run() {
// 235: 255 - 20
while( PetalsSplashHandler.this.alphaValue < 235 ) {
try {
Thread.sleep( 200 );
} catch( InterruptedException e ) {
// nothing
}
PetalsSplashHandler.this.alphaValue += 20;
getContent().redraw();
getContent().update();
}
}
});
}
};
worker.start();
}
}