62,623
社区成员
发帖
与我相关
我的任务
分享
RoundRectangle2D.Float mask = new RoundRectangle2D.Float(0, 0, jframe.getWidth(), jframe.getHeight(), 10, 10);
WindowUtils.setWindowMask(jframe, mask);
/***************************************************************************************************
* 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.snippets;
import org.eclipse.swt.*;
import org.eclipse.swt.graphics.*;
import org.eclipse.swt.widgets.*;
/**
* Region snippet: Create non-rectangular shell from an image with transparency
*
* For a list of all SWT example snippets see http://www.eclipse.org/swt/snippets/
*
* @since 3.2
*/
public class Snippet219
{
public static void main( String[] args )
{
final Display display = new Display();
final Image image = display.getSystemImage( SWT.ICON_INFORMATION );
final Shell shell = new Shell( display, SWT.NO_TRIM );
Region region = new Region();
final ImageData imageData = image.getImageData();
if( imageData.alphaData != null )
{
Rectangle pixel = new Rectangle( 0, 0, 1, 1 );
for( int y = 0; y < imageData.height; y++ )
{
for( int x = 0; x < imageData.width; x++ )
{
if( imageData.getAlpha( x, y ) == 255 )
{
pixel.x = imageData.x + x;
pixel.y = imageData.y + y;
region.add( pixel );
}
}
}
} else
{
ImageData mask = imageData.getTransparencyMask();
Rectangle pixel = new Rectangle( 0, 0, 1, 1 );
for( int y = 0; y < mask.height; y++ )
{
for( int x = 0; x < mask.width; x++ )
{
if( mask.getPixel( x, y ) != 0 )
{
pixel.x = imageData.x + x;
pixel.y = imageData.y + y;
region.add( pixel );
}
}
}
}
shell.setRegion( region );
Listener l = new Listener()
{
int startX, startY;
public void handleEvent( Event e )
{
if( e.type == SWT.KeyDown && e.character == SWT.ESC )
{
shell.dispose();
}
if( e.type == SWT.MouseDown && e.button == 1 )
{
startX = e.x;
startY = e.y;
}
if( e.type == SWT.MouseMove && ( e.stateMask & SWT.BUTTON1 ) != 0 )
{
Point p = shell.toDisplay( e.x, e.y );
p.x -= startX;
p.y -= startY;
shell.setLocation( p );
}
if( e.type == SWT.Paint )
{
e.gc.drawImage( image, imageData.x, imageData.y );
}
}
};
shell.addListener( SWT.KeyDown, l );
shell.addListener( SWT.MouseDown, l );
shell.addListener( SWT.MouseMove, l );
shell.addListener( SWT.Paint, l );
shell.setSize( imageData.x + imageData.width, imageData.y + imageData.height );
shell.open();
while( !shell.isDisposed() )
{
if( !display.readAndDispatch() )
display.sleep();
}
region.dispose();
image.dispose();
display.dispose();
}
}