Package com.mxgraph.shape

Source Code of com.mxgraph.shape.mxLabelShape

package com.mxgraph.shape;

import java.awt.Color;
import java.awt.GradientPaint;
import java.awt.Rectangle;
import java.awt.geom.GeneralPath;
import java.util.Map;

import com.mxgraph.canvas.mxGraphics2DCanvas;
import com.mxgraph.util.mxConstants;
import com.mxgraph.util.mxRectangle;
import com.mxgraph.util.mxUtils;
import com.mxgraph.view.mxCellState;

public class mxLabelShape extends mxImageShape
{

  /**
   *
   */
  public void paintShape(mxGraphics2DCanvas canvas, mxCellState state)
  {
    super.paintShape(canvas, state);

    if (mxUtils.isTrue(state.getStyle(), mxConstants.STYLE_GLASS, false))
    {
      drawGlassEffect(canvas, state);
    }
  }

  /**
   * Draws the glass effect
   */
  public static void drawGlassEffect(mxGraphics2DCanvas canvas,
      mxCellState state)
  {
    double size = 0.4;
    canvas.getGraphics().setPaint(
        new GradientPaint((float) state.getX(), (float) state.getY(),
            new Color(1, 1, 1, 0.9f), (float) (state.getX()),
            (float) (state.getY() + state.getHeight() * size),
            new Color(1, 1, 1, 0.3f)));

    float sw = (float) (mxUtils.getFloat(state.getStyle(),
        mxConstants.STYLE_STROKEWIDTH, 1) * canvas.getScale() / 2);

    GeneralPath path = new GeneralPath();
    path.moveTo((float) state.getX() - sw, (float) state.getY() - sw);
    path.lineTo((float) state.getX() - sw,
        (float) (state.getY() + state.getHeight() * size));
    path.quadTo((float) (state.getX() + state.getWidth() * 0.5),
        (float) (state.getY() + state.getHeight() * 0.7),
        (float) (state.getX() + state.getWidth() + sw),
        (float) (state.getY() + state.getHeight() * size));
    path.lineTo((float) (state.getX() + state.getWidth() + sw),
        (float) state.getY() - sw);
    path.closePath();

    canvas.getGraphics().fill(path);
  }

  /**
   *
   */
  public Rectangle getImageBounds(mxGraphics2DCanvas canvas, mxCellState state)
  {
    Map<String, Object> style = state.getStyle();
    double scale = canvas.getScale();
    String imgAlign = mxUtils.getString(style,
        mxConstants.STYLE_IMAGE_ALIGN, mxConstants.ALIGN_LEFT);
    String imgValign = mxUtils.getString(style,
        mxConstants.STYLE_IMAGE_VERTICAL_ALIGN,
        mxConstants.ALIGN_MIDDLE);
    int imgWidth = (int) (mxUtils.getInt(style,
        mxConstants.STYLE_IMAGE_WIDTH, mxConstants.DEFAULT_IMAGESIZE) * scale);
    int imgHeight = (int) (mxUtils.getInt(style,
        mxConstants.STYLE_IMAGE_HEIGHT, mxConstants.DEFAULT_IMAGESIZE) * scale);
    int spacing = (int) (mxUtils
        .getInt(style, mxConstants.STYLE_SPACING, 2) * scale);

    mxRectangle imageBounds = new mxRectangle(state);

    if (imgAlign.equals(mxConstants.ALIGN_CENTER))
    {
      imageBounds.setX(imageBounds.getX()
          + (imageBounds.getWidth() - imgWidth) / 2);
    }
    else if (imgAlign.equals(mxConstants.ALIGN_RIGHT))
    {
      imageBounds.setX(imageBounds.getX() + imageBounds.getWidth()
          - imgWidth - spacing - 2);
    }
    else
    // LEFT
    {
      imageBounds.setX(imageBounds.getX() + spacing + 4);
    }

    if (imgValign.equals(mxConstants.ALIGN_TOP))
    {
      imageBounds.setY(imageBounds.getY() + spacing);
    }
    else if (imgValign.equals(mxConstants.ALIGN_BOTTOM))
    {
      imageBounds.setY(imageBounds.getY() + imageBounds.getHeight()
          - imgHeight - spacing);
    }
    else
    // MIDDLE
    {
      imageBounds.setY(imageBounds.getY()
          + (imageBounds.getHeight() - imgHeight) / 2);
    }

    imageBounds.setWidth(imgWidth);
    imageBounds.setHeight(imgHeight);

    return imageBounds.getRectangle();
  }

  /**
   *
   */
  public Color getFillColor(mxGraphics2DCanvas canvas, mxCellState state)
  {
    return mxUtils.getColor(state.getStyle(), mxConstants.STYLE_FILLCOLOR);
  }

  /**
   *
   */
  public Color getStrokeColor(mxGraphics2DCanvas canvas, mxCellState state)
  {
    return mxUtils
        .getColor(state.getStyle(), mxConstants.STYLE_STROKECOLOR);
  }

  /**
   *
   */
  public boolean hasGradient(mxGraphics2DCanvas canvas, mxCellState state)
  {
    return true;
  }

}
TOP

Related Classes of com.mxgraph.shape.mxLabelShape

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.