Package com.aelitis.azureus.ui.swt.widgets

Source Code of com.aelitis.azureus.ui.swt.widgets.AnimatedImage

package com.aelitis.azureus.ui.swt.widgets;

import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.*;
import org.eclipse.swt.widgets.*;

import org.gudy.azureus2.core3.util.AEThread2;

import com.aelitis.azureus.ui.swt.imageloader.ImageLoader;

public class AnimatedImage {
 
  //wait time in ms
  private static final int SPEED = 100;
 
  Canvas canvas;
  boolean running;
 
  private AEThread2 runner;
 
  private Image[] images;
  private int currentImage = 0;

  private String imageName;
 
  public AnimatedImage(Composite parent) {
    canvas = new Canvas(parent,SWT.NONE);
    Color background = null;
    Composite p = parent;
    while(p != null && background == null) {
      background = p.getBackground();
      if(background != null) {
        System.out.println("background : " + background + ", composite : " + p);
      }
      p = p.getParent();
    }
   
    canvas.setBackground(background);
    canvas.addListener(SWT.Dispose, new Listener() {
      public void handleEvent(Event event) {
        stop();
        disposeImages();
      }
    });
  }
 
 
  private void renderNextImage() {
    if(!canvas.isDisposed()) {
      Display display = canvas.getDisplay();
      if(!display.isDisposed()) {
        display.asyncExec( new Runnable() {
          public void run() {
            if(!canvas.isDisposed() && images != null) {
              currentImage++;
              if(currentImage >= images.length) {
                currentImage = 0;
              }
              if(currentImage < images.length) {
                Image image = images[currentImage];
                if(image != null && !image.isDisposed()) {
                  GC gc = new GC(canvas);
                  Point canvasSize = canvas.getSize();
                  Rectangle imageBounds = image.getBounds();
                 
                  gc.drawImage(image, (canvasSize.x-imageBounds.width)/2, (canvasSize.y-imageBounds.height)/2);
                  gc.dispose();
                }
              }
            }
          }
        });
      }
    }
  }
 
  public void setLayoutData(Object data) {
    canvas.setLayoutData(data);
  }
 
  public void start() {
    running = true;
    runner = new AEThread2("image runner",true) {
      public void run() {
        while(running) {
          try {
            renderNextImage();
            Thread.sleep(SPEED);
          } catch (Exception e) {
            running = false;
          }
        }
      }
    };
    runner.start();
  }
 
  public void stop() {
    running = false;
  }
 
  public Control getControl() {
    return canvas;
  }
 
  public void dispose() {
    if(canvas != null && !canvas.isDisposed()) {
      canvas.dispose();
    }
  }
 
  public void setImageFromName(String imageName) {
    this.imageName = imageName;
    ImageLoader imageLoader = ImageLoader.getInstance();
    images = imageLoader.getImages(imageName);
  }
 
  private void setImages(Image[] images) {
    disposeImages();
    this.images = images;
  }

  private void disposeImages() {
    if(images != null) {
      ImageLoader imageLoader = ImageLoader.getInstance();
      imageLoader.releaseImage(imageName);
      images = null;
    }
  }

}
TOP

Related Classes of com.aelitis.azureus.ui.swt.widgets.AnimatedImage

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.