Package org.pentaho.reporting.engine.classic.core.modules.gui.base.internal

Source Code of org.pentaho.reporting.engine.classic.core.modules.gui.base.internal.PageBackgroundDrawable

/*
* 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.modules.gui.base.internal;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.geom.AffineTransform;
import java.awt.geom.Rectangle2D;
import java.awt.print.PageFormat;
import javax.swing.UIManager;

import org.pentaho.reporting.engine.classic.core.modules.output.pageable.graphics.PageDrawable;

/**
* Creation-Date: 17.11.2006, 20:31:36
*
* @author Thomas Morgner
*/
public class PageBackgroundDrawable
{
  private int defaultWidth;
  private int defaultHeight;
  private PageDrawable backend;
  private boolean borderPainted;
  private float shadowSize;
  private double zoom;

  public PageBackgroundDrawable()
  {
    this.shadowSize = 6;
    this.borderPainted = false;
    this.zoom = 1;
  }

  public PageDrawable getBackend()
  {
    return backend;
  }

  public void setBackend(final PageDrawable backend)
  {
    this.backend = backend;
  }

  public boolean isBorderPainted()
  {
    return borderPainted;
  }

  public void setBorderPainted(final boolean borderPainted)
  {
    this.borderPainted = borderPainted;
  }

  public double getZoom()
  {
    return zoom;
  }

  public void setZoom(final double zoom)
  {
    this.zoom = zoom;
  }

  public int getDefaultWidth()
  {
    return defaultWidth;
  }

  public void setDefaultWidth(final int defaultWidth)
  {
    this.defaultWidth = defaultWidth;
  }

  public int getDefaultHeight()
  {
    return defaultHeight;
  }

  public void setDefaultHeight(final int defaultHeight)
  {
    this.defaultHeight = defaultHeight;
  }

  public Dimension getPreferredSize()
  {
    if (backend == null)
    {
      return new Dimension((int) ((defaultWidth + shadowSize) * zoom),
          (int) ((defaultHeight + shadowSize) * zoom));
    }
    final Dimension preferredSize = backend.getPreferredSize();

    return new Dimension
        ((int) ((preferredSize.width + shadowSize) * zoom),
            (int) ((preferredSize.height + shadowSize) * zoom));
  }

  public boolean isPreserveAspectRatio()
  {
    return true;
  }

  public float getShadowSize()
  {
    return shadowSize;
  }

  public void setShadowSize(final float shadowSize)
  {
    this.shadowSize = shadowSize;
  }

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

    final PageFormat pageFormat = backend.getPageFormat();
    final float outerW = (float) pageFormat.getWidth();
    final float outerH = (float) pageFormat.getHeight();

    final float innerX = (float) pageFormat.getImageableX();
    final float innerY = (float) pageFormat.getImageableY();
    final float innerW = (float) pageFormat.getImageableWidth();
    final float innerH = (float) pageFormat.getImageableHeight();

    final Graphics2D g2 = (Graphics2D) graphics.create();
    //double paperBorder = paperBorderPixel * zoomFactor;

    /** Prepare background **/
    g2.transform(AffineTransform.getScaleInstance(getZoom(), getZoom()));
    g2.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS, RenderingHints.VALUE_FRACTIONALMETRICS_ON);

    /** Prepare background **/
    final Rectangle2D pageArea = new Rectangle2D.Float(0, 0, outerW, outerH);
    /**
     * The border around the printable area is painted when the corresponding property is
     * set to true.
     */
    final Rectangle2D printingArea = new Rectangle2D.Float(innerX, innerY, innerW, innerH);

    /** Paint Page Shadow */
    final Rectangle2D southborder = new Rectangle2D.Float
        (getShadowSize(), outerH,
            outerW, getShadowSize());
    final Rectangle2D eastborder = new Rectangle2D.Float
        (outerW, getShadowSize(), getShadowSize(), outerH);

    g2.setPaint(UIManager.getColor("controlShadow")); //$NON-NLS-1$

    g2.fill(southborder);
    g2.fill(eastborder);

    if (isBorderPainted())
    {
      g2.setPaint(Color.gray);
      g2.draw(printingArea);
    }

    g2.setPaint(Color.white);
    g2.fill(pageArea);

    final Graphics2D g22 = (Graphics2D) g2.create();
    backend.draw(g22, new Rectangle2D.Double
        (0, 0, pageFormat.getWidth(), pageFormat.getHeight()));
    g22.dispose();
   
    final Rectangle2D transPageArea = new Rectangle2D.Float(0, 0, outerW, outerH);
    g2.setPaint(Color.black);
    g2.draw(transPageArea);


    g2.dispose();
  }
}
TOP

Related Classes of org.pentaho.reporting.engine.classic.core.modules.gui.base.internal.PageBackgroundDrawable

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.