Package org.timepedia.chronoscope.java2d.canvas

Source Code of org.timepedia.chronoscope.java2d.canvas.CanvasJava2D

package org.timepedia.chronoscope.java2d.canvas;

import org.timepedia.chronoscope.client.Chart;
import org.timepedia.chronoscope.client.Cursor;
import org.timepedia.chronoscope.client.canvas.Bounds;
import org.timepedia.chronoscope.client.canvas.Canvas;
import org.timepedia.chronoscope.client.canvas.CanvasPattern;
import org.timepedia.chronoscope.client.canvas.CanvasReadyCallback;
import org.timepedia.chronoscope.client.canvas.Color;
import org.timepedia.chronoscope.client.canvas.DisplayList;
import org.timepedia.chronoscope.client.canvas.Layer;
import org.timepedia.chronoscope.client.canvas.PaintStyle;
import org.timepedia.chronoscope.client.canvas.RadialGradient;
import org.timepedia.chronoscope.client.canvas.View;
import org.timepedia.chronoscope.client.canvas.CanvasImage;
import org.timepedia.chronoscope.client.render.LinearGradient;

import java.awt.Image;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;

/**
* A Java2D Canvas implementation to facillitate Server, Applet, and Application
* rendering
*/
public class CanvasJava2D extends Canvas {

  private Layer rootLayer;

  private HashMap<String, Layer> id2Layer = new HashMap<String, Layer>();

  private LayerJava2D backingLayer;

  public CanvasJava2D(View view, int w, int h) {
    super(view);
    rootLayer = createLayer("rootLayer", new Bounds(0, 0, w, h));
    backingLayer = new LayerJava2D(this, "backing", new Bounds(0, 0, w, h));
    rootLayer.setFillColor(Color.TRANSPARENT);
    rootLayer.clearRect(0, 0, w, h);
  }

  public void arc(double x, double y, double radius, double startAngle,
      double endAngle, int clockwise) {
    rootLayer.arc(x, y, radius, startAngle, endAngle, clockwise);
  }

  public void attach(View view, CanvasReadyCallback canvasReadyCallback) {
    super.attach(view, canvasReadyCallback);
  }

  public void beginPath() {
    rootLayer.beginPath();
  }

  public void clearRect(double x, double y, double width, double height) {
    rootLayer.clearRect(x, y, width, height);
  }

  public void clearTextLayer(String textLayer) {
    rootLayer.clearTextLayer(textLayer);
  }

  public void clip(double x, double y, double width, double height) {
    rootLayer.clip(x, y, width, height);
  }

  public void closePath() {
    rootLayer.closePath();
  }

  public DisplayList createDisplayList(String id) {
    return rootLayer.createDisplayList(id);
  }

  public Layer createLayer(String layerId, Bounds b) {
    Layer layer = getLayer(layerId);
    if (layer == null) {
      layer = new LayerJava2D(this, layerId, b);
      id2Layer.put(layer.getLayerId(), layer);
      layer.setFillColor(Color.TRANSPARENT);
      layer.clearRect(0, 0, layer.getWidth(), layer.getHeight());
    }
    return layer;
  }

  public LinearGradient createLinearGradient(double startx, double starty,
      double endx, double endy) {
    return rootLayer.createLinearGradient(startx, starty, endx, endy);
  }

  public PaintStyle createPattern(String imageUri) {
    return rootLayer.createPattern(imageUri);
  }

  public RadialGradient createRadialGradient(double x0, double y0, double r0,
      double x1, double y1, double r1) {
    return rootLayer.createRadialGradient(x0, y0, r0, x1, y1, r1);
  }

  public void disposeLayer(String layerId) {
    Layer layer = getLayer(layerId);
    if (layer != null) {
      ((LayerJava2D) layer).dipose();
    }
    id2Layer.remove(layerId);
  }

  public void drawImage(Layer layer, double x, double y, double width,
      double height) {
    rootLayer.drawImage(layer, x, y, width, height);
  }

  public void drawImage(Layer layer, double sx, double sy, double swidth,
      double sheight, double dx, double dy, double dwidth, double dheight) {
    rootLayer
        .drawImage(layer, sx, sy, swidth, sheight, dx, dy, dwidth, dheight);
  }

  public void drawRotatedText(double x, double y, double v, String label,
      String fontFamily, String fontWeight, String fontSize, String layerName,
      Chart chart) {
    rootLayer.drawRotatedText(x, y, v, label, fontFamily, fontWeight, fontSize,
        layerName, chart);
  }

  public void drawText(double x, double y, String label, String fontFamily,
      String fontWeight, String fontSize, String textLayer, Cursor cursor) {
    rootLayer
        .drawText(x, y, label, fontFamily, fontWeight, fontSize, textLayer, cursor);
  }

  public void endFrame() {
    super.endFrame();
    ArrayList<Layer> layers = new ArrayList<Layer>(id2Layer.values());
    Collections.sort(layers, new Comparator<Layer>() {
      public int compare(Layer l1, Layer l2) {
        int diff = l1.getLayerOrder() - l2.getLayerOrder();
        if (diff != 0) {
          return diff;
        } else if (l1.getLayerOrder() == Layer.Z_LAYER_AXIS && l1.getLayerId()
            .startsWith("verticalAxis")) {
          return +1;
        } else {
          return 0;
        }
      }
    });
    int ord = 0;
    backingLayer.save();
    backingLayer.setFillColor("rgba(255,255,255,255)");
    backingLayer.setComposite(Layer.COPY);
    backingLayer
        .fillRect(0, 0, backingLayer.getWidth(), backingLayer.getHeight());
    backingLayer.restore();

    int i = 0;
    for (Layer l : layers) {
      Bounds b = l.getBounds();

      if (l.isVisible() /* && !"rootLayer".equals(l.getLayerId()) && ("plotLayer".equals(l.getLayerId()) || "verticalAxis".equals(l.getLayerId()) ||
            "domainAxis".equals(l.getLayerId()) || "topLayer".equals(l.getLayerId())) */) {
        //    if(l.getLayerId().startsWith("highlight")) break;
//                System.out.println("layer " + l.getLayerId());
        backingLayer.save();
        backingLayer
            .drawImage(l, 0, 0, b.width, b.height, b.x, b.y, b.width, b.height);
        backingLayer.restore();
      }
    }
//        backingLayer.setFillColor("rgb(255, 0, 255)");
//        backingLayer.fillRect(0, 0, backingLayer.getWidth(), backingLayer.getHeight());
  }

  public void fill() {
    rootLayer.fill();
  }

  public void fillRect(double startx, double starty, double width,
      double height) {
    rootLayer.fillRect(startx, starty, width, height);
  }

  public void fillRect() {
    rootLayer.fillRect();
  }

  public Bounds getBounds() {
    return rootLayer.getBounds();
  }

  public Canvas getCanvas() {
    return rootLayer.getCanvas();
  }

  public double getHeight() {
    return rootLayer.getHeight();
  }

  public Image getImage() {
    return backingLayer.getImage();
  }

  public Layer getLayer(String layerId) {
    return id2Layer.get(layerId);
  }

  public float getLayerAlpha() {
    return rootLayer.getLayerAlpha();
  }

  public String getLayerId() {
    return rootLayer.getLayerId();
  }

  public int getLayerOrder() {
    return rootLayer.getLayerOrder();
  }

  public Layer getRootLayer() {
    return rootLayer;
  }

  public CanvasImage createImage(String url) {
    //TODO: implement
    return null;
  }

  public int getScrollLeft() {
    return rootLayer.getScrollLeft();
  }

  public String getStrokeColor() {
    return rootLayer.getStrokeColor();
  }

  public String getTransparency() {
    return rootLayer.getTransparency();
  }

  public double getWidth() {
    return rootLayer.getWidth();
  }

  public boolean isVisible() {
    return rootLayer.isVisible();
  }

  public void lineTo(double x, double y) {
    rootLayer.lineTo(x, y);
  }

  public void moveTo(double x, double y) {
    rootLayer.moveTo(x, y);
  }

  public void rect(double x, double y, double width, double height) {
    rootLayer.rect(x, y, width, height);
  }

  public void restore() {
    rootLayer.restore();
  }

  public int rotatedStringHeight(String str, double rotationAngle,
      String fontFamily, String fontWeight, String fontSize) {
    return rootLayer.rotatedStringHeight(str, rotationAngle, fontFamily,
        fontWeight, fontSize);
  }

  public int rotatedStringWidth(String str, double rotationAngle,
      String fontFamily, String fontWeight, String fontSize) {
    return rootLayer.rotatedStringWidth(str, rotationAngle, fontFamily,
        fontWeight, fontSize);
  }

  public void save() {
    rootLayer.save();
  }

  public void scale(double sx, double sy) {
    rootLayer.scale(sx, sy);
  }

  public void setCanvasPattern(CanvasPattern canvasPattern) {
    rootLayer.setCanvasPattern(canvasPattern);
  }

  public void setComposite(int mode) {
    rootLayer.setComposite(mode);
  }

  public void setFillColor(Color color) {
    rootLayer.setFillColor(color);
  }

  public void setFillColor(PaintStyle p) {
    rootLayer.setFillColor(p);
  }

  public void setLayerAlpha(float alpha) {
    rootLayer.setLayerAlpha(alpha);
  }

  public void setLayerOrder(int zorder) {
    rootLayer.setLayerOrder(zorder);
  }

  public void setLinearGradient(LinearGradient lingrad) {
    rootLayer.setLinearGradient(lingrad);
  }

  public void setLineWidth(double width) {
    rootLayer.setLineWidth(width);
  }

  public void setRadialGradient(RadialGradient radialGradient) {
    rootLayer.setRadialGradient(radialGradient);
  }

  public void setScrollLeft(int i) {
    rootLayer.setScrollLeft(i);
  }

  public void setShadowBlur(double width) {
    rootLayer.setShadowBlur(width);
  }

  public void setShadowColor(String color) {
    rootLayer.setShadowColor(color);
  }

  public void setShadowColor(Color shadowColor) {
    rootLayer.setShadowColor(shadowColor);
  }

  public void setShadowOffsetX(double x) {
    rootLayer.setShadowOffsetX(x);
  }

  public void setShadowOffsetY(double y) {
    rootLayer.setShadowOffsetY(y);
  }

  public void setStrokeColor(Color color) {
    rootLayer.setStrokeColor(color);
  }

  public void setStrokeColor(PaintStyle p) {
    rootLayer.setStrokeColor(p);
  }

  public void setTextLayerBounds(String textLayer, Bounds textLayerBounds) {
    rootLayer.setTextLayerBounds(textLayer, textLayerBounds);
  }

  public void setTransparency(float value) {
    rootLayer.setTransparency(value);
  }

  public void setVisibility(boolean visibility) {
    rootLayer.setVisibility(visibility);
  }

  public int stringHeight(String string, String font, String bold,
      String size) {
    return rootLayer.stringHeight(string, font, bold, size);
  }

  public int stringWidth(String string, String font, String bold, String size) {
    return rootLayer.stringWidth(string, font, bold, size);
  }

  public void stroke() {
    rootLayer.stroke();
  }

  public void translate(double x, double y) {
    rootLayer.translate(x, y);
  }
}
TOP

Related Classes of org.timepedia.chronoscope.java2d.canvas.CanvasJava2D

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.