⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 snippet141.java

📁 lumaQQ的源文件
💻 JAVA
字号:
/*
 * LumaQQ - Java QQ Client
 *
 * Copyright (C) 2004 luma <stubma@163.com>
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
 */
/*
 * Image example snippet: display an animated GIF
 *
 * For a list of all SWT example snippets see
 * http://dev.eclipse.org/viewcvs/index.cgi/%7Echeckout%7E/platform-swt-home/dev.html#snippets
 */
package edu.tsinghua.lumaqq.test;
import org.eclipse.swt.*;
import org.eclipse.swt.graphics.*;
import org.eclipse.swt.widgets.*;

public class Snippet141 {
	static Display display;

	static Shell shell;

	static GC shellGC;

	static Color shellBackground;

	static ImageLoader loader;

	static ImageData[] imageDataArray;

	static Thread animateThread;

	static Image image;

	static final boolean useGIFBackground = false;

	public static void main(String[] args) {
		display = new Display();
		shell = new Shell(display);
		shell.setSize(300, 300);
		shell.open();
		shellGC = new GC(shell);
		shellBackground = shell.getBackground();

		FileDialog dialog = new FileDialog(shell);
		dialog.setFilterExtensions(new String[] {
			"*.gif"
		});
		String fileName = dialog.open();
		if(fileName != null) {
			loader = new ImageLoader();
			try {
				imageDataArray = loader.load(fileName);
				if(imageDataArray.length > 1) {
					animateThread = new Thread("Animation") {
						public void run() {
							/*
							 * Create an off-screen image to draw on, and fill
							 * it with the shell background.
							 */
							Image offScreenImage = new Image(display, loader.logicalScreenWidth, loader.logicalScreenHeight);
							GC offScreenImageGC = new GC(offScreenImage);
							offScreenImageGC.setBackground(shellBackground);
							offScreenImageGC.fillRectangle(0, 0, loader.logicalScreenWidth, loader.logicalScreenHeight);
							try {
								/*
								 * Create the first image and draw it on the
								 * off-screen image.
								 */
								int imageDataIndex = 0;
								ImageData imageData = imageDataArray[imageDataIndex];
								if(image != null && !image.isDisposed())
									image.dispose();
								image = new Image(display, imageData);
								offScreenImageGC.drawImage(image, 0, 0, imageData.width, imageData.height, imageData.x, imageData.y, imageData.width, imageData.height);

								/*
								 * Now loop through the images, creating and
								 * drawing each one on the off-screen image
								 * before drawing it on the shell.
								 */
								int repeatCount = loader.repeatCount;
								while(loader.repeatCount == 0 || repeatCount > 0) {
									switch(imageData.disposalMethod) {
										case SWT.DM_FILL_BACKGROUND:
											/*
											 * Fill with the background color
											 * before drawing.
											 */
											Color bgColor = null;
											if(useGIFBackground && loader.backgroundPixel != -1) {
												bgColor = new Color(display, imageData.palette.getRGB(loader.backgroundPixel));
											}
											offScreenImageGC.setBackground(bgColor != null ? bgColor : shellBackground);
											offScreenImageGC.fillRectangle(imageData.x, imageData.y, imageData.width, imageData.height);
											if(bgColor != null)
												bgColor.dispose();
											break;
										case SWT.DM_FILL_PREVIOUS:
											/*
											 * Restore the previous image before
											 * drawing.
											 */
											offScreenImageGC.drawImage(image, 0, 0, imageData.width, imageData.height, imageData.x, imageData.y, imageData.width, imageData.height);
											break;
									}
									imageDataIndex = (imageDataIndex + 1) % imageDataArray.length;
									imageData = imageDataArray[imageDataIndex];
									image.dispose();
									image = new Image(display, imageData);
									offScreenImageGC.drawImage(image, 0, 0, imageData.width, imageData.height, imageData.x, imageData.y, imageData.width, imageData.height);
									/* Draw the off-screen image to the shell. */
									shellGC.drawImage(offScreenImage, 0, 0);
									/*
									 * Sleep for the specified delay time
									 * (adding commonly-used slow-down fudge
									 * factors).
									 */
									try {
										int ms = imageData.delayTime * 10;
										if(ms < 20)
											ms += 30;
										if(ms < 30)
											ms += 10;
										Thread.sleep(ms);
									} catch(InterruptedException e) {
									}
									/*
									 * If we have just drawn the last image,
									 * decrement the repeat count and start
									 * again.
									 */
									if(imageDataIndex == imageDataArray.length - 1)
										repeatCount--;
								}
							} catch(SWTException ex) {
								System.out.println("There was an error animating the GIF");
							} finally {
								if(offScreenImage != null && !offScreenImage.isDisposed())
									offScreenImage.dispose();
								if(offScreenImageGC != null && !offScreenImageGC.isDisposed())
									offScreenImageGC.dispose();
								if(image != null && !image.isDisposed())
									image.dispose();
							}
						}
					};
					animateThread.setDaemon(true);
					animateThread.start();
				}
			} catch(SWTException ex) {
				System.out.println("There was an error loading the GIF");
			}
		}

		while(!shell.isDisposed()) {
			if(!display.readAndDispatch())
				display.sleep();
		}
		display.dispose();
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -