Package jmt.gui.common.startScreen.sampleAnimation

Source Code of jmt.gui.common.startScreen.sampleAnimation.SampleIconsToolkit

/**   
  * Copyright (C) 2012, Laboratorio di Valutazione delle Prestazioni - Politecnico di Milano

  * 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., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
  */

package jmt.gui.common.startScreen.sampleAnimation;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.image.BufferedImage;
import java.awt.image.ImageObserver;

import jmt.gui.common.animation.Animator;
import jmt.gui.common.animation.DefaultIconsToolkit;
import jmt.gui.common.animation.EdgeAnimation;
import jmt.gui.common.animation.JobAnimation;
import jmt.gui.common.animation.JobPath;
import jmt.gui.common.animation.QueueNetAnimation;
import jmt.gui.common.animation.RandomPath;
import jmt.gui.common.animation.StationAnimation;

/**
* Created by IntelliJ IDEA.
* User: OrsotronIII
* Date: 2-mar-2005
* Time: 19.02.36
* To change this template use Options | File Templates.
*/
public class SampleQNAnimation extends QueueNetAnimation {

  /**
   *
   */
  private static final long serialVersionUID = 1L;
  //Thread controller that repaints animation.
  Animator controller;

  public SampleQNAnimation() {
    super(new SampleIconsToolkit());
    setBounds(new Rectangle(198, 98));
    prepareQueueNet();
  }

  private void prepareQueueNet() {
    int x = 16, y = -3;
    Point[][] linkPts = {
        { new Point(70 + x, 60 + y), new Point(90 + x, 60 + y), new Point(90 + x, 75 + y), new Point(100 + x, 75 + y) },
        { new Point(70 + x, 60 + y), new Point(90 + x, 60 + y), new Point(90 + x, 40 + y), new Point(100 + x, 40 + y) },
        { new Point(140 + x, 40 + y), new Point(150 + x, 40 + y), new Point(150 + x, 95 + y), new Point(15 + x, 95 + y),
            new Point(15 + x, 60 + y), new Point(30 + x, 60 + y) },
        { new Point(140 + x, 75 + y), new Point(150 + x, 75 + y), new Point(150 + x, 95 + y), new Point(15 + x, 95 + y),
            new Point(15 + x, 60 + y), new Point(30 + x, 60 + y) },
        { new Point(70 + x, 60 + y), new Point(80 + x, 60 + y), new Point(80 + x, 35 + y), new Point(20 + x, 35 + y),
            new Point(20 + x, 60 + y), new Point(30 + x, 60 + y) } };
    ColoredStationAnimation[] stations = { new ColoredStationAnimation(new Point(120 + x, 40 + y), 500),
        new ColoredStationAnimation(new Point(50 + x, 60 + y), 100), new ColoredStationAnimation(new Point(120 + x, 75 + y), 500) };
    for (ColoredStationAnimation station : stations) {
      addStation(station);
    }
    EdgeAnimation[] links = new EdgeAnimation[linkPts.length];
    for (int i = 0; i < linkPts.length; i++) {
      links[i] = new EdgeAnimation(linkPts[i], 20);
    }
    ColoredStationAnimation[] sourceStations = { stations[1], stations[1], stations[0], stations[2], stations[1] };
    ColoredStationAnimation[] targetStations = { stations[2], stations[0], stations[1], stations[1], stations[1] };
    for (int i = 0; i < links.length; i++) {
      addEdge(links[i], sourceStations[i], targetStations[i]);
    }
    for (int i = 0; i < 10; i++) {
      addJob(new JobAnimation(0.075, new JobPath[] { new RandomPath(this, stations[i % stations.length]) }, new Rectangle(6, 6),
          new SampleIconsToolkit()), stations[i % stations.length]);
    }
    controller = new Animator(30, this);
  }

  public void start() {
    controller.start();
  }

  public void stop() {
    controller.terminate();
  }

}

class ColoredStationAnimation extends StationAnimation {

  private static Color[] colors = { new Color(255, 0, 0, 150), new Color(0, 255, 0, 150), new Color(0, 0, 0, 150), new Color(255, 255, 0, 150),
      new Color(0, 0, 255, 150) };

  private double cpuPhase = Math.random() * 360, queuePhase = Math.random() * 16;
  private int colorPhase = (int) (Math.random() * colors.length), jobLength = 6;

  private Image overlayedShading = null;

  public ColoredStationAnimation(Point location, long residenceTime) {
    super("server", new Rectangle(location.x - 20, location.y - 10, 40, 20), residenceTime);
    createOverlayImage();
  }

  @Override
  public void paint(Graphics g, ImageObserver io) {
    createQueue(g);
    createCPU(g);
    g.drawImage(this.overlayedShading, getBounds().x, getBounds().y, io);
  }

  private void createOverlayImage() {
    int height = getBounds().height * 2, width = getBounds().width * 2, qLength = width - (height * 4) / 5, qHeight = (height * 4) / 5, yOffs = (height - qHeight) / 2;
    overlayedShading = new BufferedImage(width, height, BufferedImage.TYPE_4BYTE_ABGR);
    Color[] shades = new Color[7], lights = new Color[7];
    for (int i = 0; i < shades.length; i++) {
      shades[i] = new Color(0, 0, 0, 160 - (i * 160) / shades.length);
      lights[i] = new Color(255, 255, 255, 200 - (i * 200) / lights.length);
    }
    Graphics g = overlayedShading.getGraphics();
    for (int i = 0; i < shades.length; i++) {
      g.setColor(lights[i]);
      g.drawPolyline(new int[] { i, i, qLength - i }, new int[] { height - i - yOffs, i + yOffs, i + yOffs }, 3);
      g.drawArc(width - height + i, i, height - 2 * i, height - 2 * i, 45 + 4 * i, 180 - 8 * i);
      g.setColor(shades[i]);
      g.drawPolyline(new int[] { i, qLength - i, qLength - i }, new int[] { height - i - yOffs, height - i - yOffs, i + yOffs }, 2);
      g.drawArc(width - height + i, i, height - 2 * i, height - 2 * i, 225 + 4 * i, 180 - 8 * i);
    }
    overlayedShading = overlayedShading.getScaledInstance(getBounds().width, getBounds().height, Image.SCALE_SMOOTH);
  }

  private void createCPU(Graphics g) {
    cpuPhase = (cpuPhase - 6) % 360;
    int width = getBounds().width, height = getBounds().height, x = getBounds().x, y = getBounds().y, turn = colors.length;
    g.setColor(Color.WHITE);
    g.fillOval(width - height + x + 1, y + 1, height - 2, height - 2);
    for (int i = 0; i < turn; i++) {
      g.setColor(colors[i % colors.length]);
      g.fillArc(width - height + x, y, height, height, (int) cpuPhase + (i * 360) / turn, 360 / turn);
    }
  }

  private void createQueue(Graphics g) {
    queuePhase = queuePhase + 1;
    if (queuePhase > jobLength) {
      queuePhase = queuePhase - jobLength;
      colorPhase = (colorPhase + colors.length - 1) % colors.length;
    }
    int width = getBounds().width, height = getBounds().height, x = getBounds().x, y = getBounds().y, turn = (width - (height * 4) / 5), qHeight = (height * 4) / 5, yOffs = (height - qHeight) / 2;
    for (int i = 0, col = colorPhase, offsX = (int) queuePhase; offsX <= turn + queuePhase; i++, col = (col + 1) % colors.length, offsX += jobLength) {
      g.setColor(colors[col]);
      int offs = offsX - jobLength;
      if (i == 0) {
        offs = offsX - (int) queuePhase;
      }
      g.fillRect(x + offs, y + yOffs, offsX - offs, qHeight);
    }
  }
}

class SampleIconsToolkit extends DefaultIconsToolkit {

  private static Color[] colors = { new Color(255, 0, 0, 150), new Color(255, 255, 0, 150), new Color(0, 0, 255, 150),
      new Color(100, 100, 100, 150), new Color(0, 255, 0, 150) };

  @Override
  public Image getJobIcon(Rectangle bounds) {
    BufferedImage bi = new BufferedImage(100, 100, BufferedImage.TYPE_4BYTE_ABGR);
    Graphics jig = bi.getGraphics();
    Color col = colors[(int) (colors.length * Math.random())];
    int red = (255 - col.getRed()) * 2 / 5 + col.getRed(), green = (255 - col.getGreen()) * 2 / 5 + col.getGreen(), blue = (255 - col.getBlue())
        * 2 / 5 + col.getBlue();
    Color[] colGradient = new Color[10];
    //Build a color gradient from black to selected color
    for (int i = 0; i < colGradient.length; i++) {
      colGradient[i] = new Color(channelGradient(i, colGradient.length, red), channelGradient(i, colGradient.length, green), channelGradient(i,
          colGradient.length, blue));
    }
    for (int i = 0; i < colGradient.length; i++) {
      jig.setColor(colGradient[i]);
      jig.fillOval(i * 3, i * 3, 100 - (i * 9), 100 - (i * 9));
    }
    return bi.getScaledInstance(bounds.width, bounds.height, Image.SCALE_SMOOTH);
  }

  private int channelGradient(int x, int rangeX, int rangeY) {
    return (int) (rangeY * Math.pow((double) (x) / rangeX, 0.44));
  }

  @Override
  public Image getBGTileIcon(Rectangle bounds) {
    BufferedImage bi = new BufferedImage(bounds.width, bounds.height, BufferedImage.TYPE_4BYTE_ABGR);
    Graphics g = bi.getGraphics();
    g.setColor(new Color(150, 150, 150, 200));
    g.fillRect(0, 0, bounds.width, bounds.height);
    return bi;
  }

}
TOP

Related Classes of jmt.gui.common.startScreen.sampleAnimation.SampleIconsToolkit

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.