/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You under the Apache License, Version 2.0
 * (the "License"); you may not use this file except in compliance with
 * the License.  You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

/* $Id: IFGraphicContext.java 1616590 2014-08-07 20:27:59Z gadams $ */

package org.apache.fop.render.intermediate;

import java.awt.Dimension;
import java.awt.Rectangle;
import java.awt.geom.AffineTransform;
import java.util.ArrayList;

import org.apache.xmlgraphics.java2d.GraphicContext;

Specialized graphic context class for the intermediate format renderer.
/** * Specialized graphic context class for the intermediate format renderer. */
public class IFGraphicContext extends GraphicContext { private static final AffineTransform[] EMPTY_TRANSFORM_ARRAY = new AffineTransform[0]; private ArrayList groupList = new ArrayList();
Default constructor.
/** * Default constructor. */
public IFGraphicContext() { super(); }
Copy constructor.
Params:
  • graphicContext – the graphic context to make a copy of
/** * Copy constructor. * @param graphicContext the graphic context to make a copy of */
protected IFGraphicContext(IFGraphicContext graphicContext) { super(graphicContext); // N.B. do not perform deep copy on groupList; doing so causes // a junit regression... have not investigated cause... [GA] // groupList = (ArrayList) graphicContext.groupList.clone(); }
{@inheritDoc}
/** * {@inheritDoc} */
// @SuppressFBWarnings("CN_IDIOM_NO_SUPER_CALL") public Object clone() { return new IFGraphicContext(this); }
Params:
  • group – a group
/** @param group a group */
public void pushGroup(Group group) { this.groupList.add(group); for (int i = 0, c = group.getTransforms().length; i < c; i++) { transform(group.getTransforms()[i]); } }
Returns:array of groups
/** @return array of groups */
public Group[] getGroups() { return (Group[])this.groupList.toArray(new Group[getGroupStackSize()]); }
Returns:array of groups after clearing group list
/** @return array of groups after clearing group list */
public Group[] dropGroups() { Group[] groups = getGroups(); this.groupList.clear(); return groups; }
Returns:size of group list
/** @return size of group list */
public int getGroupStackSize() { return this.groupList.size(); }
a group
/** a group */
public static class Group { private AffineTransform[] transforms; private String layer;
Construct a Group.
Params:
  • transforms – an array of transforms
/** * Construct a Group. * @param transforms an array of transforms */
public Group(AffineTransform[] transforms) { this.transforms = transforms; }
Construct a Group.
Params:
  • transform – a transform
/** * Construct a Group. * @param transform a transform */
public Group(AffineTransform transform) { this(new AffineTransform[] {transform}); }
Construct a layer Group, i.e., a Group with no transforms but with a optional content group layer label.
Params:
  • layer – a layer label
/** * Construct a layer Group, i.e., a Group with no transforms * but with a optional content group layer label. * @param layer a layer label */
public Group(String layer) { this(); this.layer = layer; }
Default constructor.
/** Default constructor. */
public Group() { this(EMPTY_TRANSFORM_ARRAY); }
Returns:array of transforms
/** @return array of transforms */
public AffineTransform[] getTransforms() { return this.transforms; }
Returns:layer
/** @return layer */
public String getLayer() { return this.layer; }
Params:
  • painter – a painter
Throws:
/** * @param painter a painter * @throws IFException in not caught */
public void start(IFPainter painter) throws IFException { painter.startGroup(transforms, layer); }
Params:
  • painter – a painter
Throws:
/** * @param painter a painter * @throws IFException in not caught */
public void end(IFPainter painter) throws IFException { painter.endGroup(); }
{@inheritDoc}
/** {@inheritDoc} */
public String toString() { StringBuffer sb = new StringBuffer("group: "); IFUtil.toString(getTransforms(), sb); if ((layer != null) && (layer.length() > 0)) { sb.append(" layer("); sb.append(layer); sb.append(')'); } return sb.toString(); } }
a viewport
/** a viewport */
public static class Viewport extends Group { private Dimension size; private Rectangle clipRect;
Construct a viewport.
Params:
  • transforms – an array of transforms
  • size – a dimension
  • clipRect – a clip rectangle
/** * Construct a viewport. * @param transforms an array of transforms * @param size a dimension * @param clipRect a clip rectangle */
public Viewport(AffineTransform[] transforms, Dimension size, Rectangle clipRect) { super(transforms); this.size = size; this.clipRect = clipRect; }
Construct a viewport.
Params:
  • transform – a transform
  • size – a dimension
  • clipRect – a clip rectangle
/** * Construct a viewport. * @param transform a transform * @param size a dimension * @param clipRect a clip rectangle */
public Viewport(AffineTransform transform, Dimension size, Rectangle clipRect) { this(new AffineTransform[] {transform}, size, clipRect); }
Returns:the viewport's size
/** @return the viewport's size */
public Dimension getSize() { return this.size; }
Returns:the clip rectangle
/** @return the clip rectangle */
public Rectangle getClipRect() { return this.clipRect; }
{@inheritDoc}
/** {@inheritDoc} */
public void start(IFPainter painter) throws IFException { painter.startViewport(getTransforms(), size, clipRect); }
{@inheritDoc}
/** {@inheritDoc} */
public void end(IFPainter painter) throws IFException { painter.endViewport(); }
{@inheritDoc}
/** {@inheritDoc} */
public String toString() { StringBuffer sb = new StringBuffer("viewport: "); IFUtil.toString(getTransforms(), sb); sb.append(", ").append(getSize()); if (getClipRect() != null) { sb.append(", ").append(getClipRect()); } return sb.toString(); } } }