Package org.pentaho.reporting.engine.classic.core.util

Source Code of org.pentaho.reporting.engine.classic.core.util.ScalingDrawable

/*
* This program is free software; you can redistribute it and/or modify it under the
* terms of the GNU Lesser General Public License, version 2.1 as published by the Free Software
* Foundation.
*
* You should have received a copy of the GNU Lesser General Public License along with this
* program; if not, you can obtain a copy at http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html
* or from the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
* 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 Lesser General Public License for more details.
*
* Copyright (c) 2001 - 2009 Object Refinery Ltd, Pentaho Corporation and Contributors..  All rights reserved.
*/

package org.pentaho.reporting.engine.classic.core.util;

import java.awt.Graphics2D;
import java.awt.geom.Rectangle2D;

import org.pentaho.reporting.engine.classic.core.ResourceBundleFactory;
import org.pentaho.reporting.engine.classic.core.imagemap.ImageMap;
import org.pentaho.reporting.engine.classic.core.layout.LayoutSupport;
import org.pentaho.reporting.engine.classic.core.style.StyleSheet;
import org.pentaho.reporting.libraries.base.config.Configuration;
import org.pentaho.reporting.libraries.resourceloader.factory.drawable.DrawableWrapper;

/**
* A drawable implementation that applies scaling to the wrapped up drawable object.
*
* @author Thomas Morgner
*/
public class ScalingDrawable extends DrawableWrapper implements ReportDrawable
{
  /**
   * The horizontal scale factor.
   */
  private float scaleX;
  /**
   * The vertical scale factor.
   */
  private float scaleY;

  /**
   * The resource-bundle factory used if the drawable is a {@link ReportDrawable}.
   */
  private ResourceBundleFactory resourceBundleFactory;
  /**
   * The layout-support used if the drawable is a {@link ReportDrawable}.
   */
  private LayoutSupport layoutSupport;
  /**
   * The report configuration used if the drawable is a {@link ReportDrawable}.
   */
  private Configuration configuration;
  /**
   * The stylesheet of the element containing the drawable that is used if the drawable is a {@link ReportDrawable}.
   */
  private StyleSheet styleSheet;

  /**
   * Default constructor. Initializes the scaling to 1.
   *
   * @param drawable the drawable object
   */
  public ScalingDrawable(final Object drawable)
  {
    super(drawable);
    scaleX = 1;
    scaleY = 1;
  }

  /**
   * Returns the vertical scale factor.
   *
   * @return the scale factor.
   */
  public float getScaleY()
  {
    return scaleY;
  }

  /**
   * Defines the vertical scale factor.
   *
   * @param scaleY the scale factor.
   */
  public void setScaleY(final float scaleY)
  {
    this.scaleY = scaleY;
  }

  /**
   * Returns the horizontal scale factor.
   *
   * @return the scale factor.
   */
  public float getScaleX()
  {
    return scaleX;
  }

  /**
   * Defines the horizontal scale factor.
   *
   * @param scaleX the scale factor.
   */
  public void setScaleX(final float scaleX)
  {
    this.scaleX = scaleX;
  }

  /**
   * Draws the object.
   *
   * @param g2   the graphics device.
   * @param area the area inside which the object should be drawn.
   */
  public void draw(final Graphics2D g2, final Rectangle2D area)
  {
    final Object drawable = getBackend();
    if (drawable == null)
    {
      return;
    }

    if (drawable instanceof ReportDrawable)
    {
      final ReportDrawable reportDrawable = (ReportDrawable) drawable;
      reportDrawable.setConfiguration(getConfiguration());
      reportDrawable.setResourceBundleFactory(getResourceBundleFactory());
      reportDrawable.setStyleSheet(getStyleSheet());
    }

    final Graphics2D derived = (Graphics2D) g2.create();
    derived.scale(scaleX, scaleY);
    final Rectangle2D scaledArea = (Rectangle2D) area.clone();
    scaledArea.setRect(scaledArea.getX() * scaleX, scaledArea.getY() * scaleY,
        scaledArea.getWidth() * scaleX, scaledArea.getHeight() * scaleY);
    super.draw(derived, scaledArea);
    derived.dispose();
  }

  public ImageMap getImageMap(final Rectangle2D bounds)
  {
    final Object drawable = getBackend();
    if (drawable == null)
    {
      return null;
    }

    if (drawable instanceof ReportDrawable)
    {
      final ReportDrawable reportDrawable = (ReportDrawable) drawable;
      final Rectangle2D scaledArea = (Rectangle2D) bounds.clone();
      scaledArea.setRect(scaledArea.getX() * scaleX, scaledArea.getY() * scaleY,
          scaledArea.getWidth() * scaleX, scaledArea.getHeight() * scaleY);
      reportDrawable.getImageMap(scaledArea);
    }
    return null;
  }

  /**
   * Returns the stylesheet of the element containing this drawable.
   *
   * @return the element's stylesheet.
   */
  public StyleSheet getStyleSheet()
  {
    return styleSheet;
  }

  /**
   * Defines the stylesheet of the element containing this drawable.
   *
   * @param styleSheet the element's stylesheet.
   */
  public void setStyleSheet(final StyleSheet styleSheet)
  {
    this.styleSheet = styleSheet;
  }

  /**
   * Returns the resource-bundle factory used if the drawable is a {@link ReportDrawable}.
   *
   * @return the resource-bundle factory.
   */
  public ResourceBundleFactory getResourceBundleFactory()
  {
    return resourceBundleFactory;
  }

  /**
   * Defines the resource-bundle factory used if the drawable is a {@link ReportDrawable}.
   *
   * @param resourceBundleFactory the resource-bundle factory.
   */
  public void setResourceBundleFactory(final ResourceBundleFactory resourceBundleFactory)
  {
    this.resourceBundleFactory = resourceBundleFactory;
  }

  /**
   * Returns the layout-support used if the drawable is a {@link ReportDrawable}.
   *
   * @return the layout support.
   */
  public LayoutSupport getLayoutSupport()
  {
    return layoutSupport;
  }

  /**
   * Defines the layout-support used if the drawable is a {@link ReportDrawable}.
   *
   * @param layoutSupport the layout support.
   */
  public void setLayoutSupport(final LayoutSupport layoutSupport)
  {
    this.layoutSupport = layoutSupport;
  }

  /**
   * Returns the report configuration used if the drawable is a {@link ReportDrawable}.
   *
   * @return the report's configuration.
   */
  public Configuration getConfiguration()
  {
    return configuration;
  }

  /**
   * Defines the report configuration used if the drawable is a {@link ReportDrawable}.
   *
   * @param configuration the report's configuration.
   */
  public void setConfiguration(final Configuration configuration)
  {
    this.configuration = configuration;
  }
}
TOP

Related Classes of org.pentaho.reporting.engine.classic.core.util.ScalingDrawable

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.