/*
 * 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: AbstractGraphicsCoord.java 1761026 2016-09-16 12:50:43Z ssteiner $ */

package org.apache.fop.afp.goca;

import java.io.IOException;
import java.io.OutputStream;

import org.apache.fop.afp.util.BinaryUtils;

A base class encapsulating the structure of coordinate based GOCA objects
/** * A base class encapsulating the structure of coordinate based GOCA objects */
public abstract class AbstractGraphicsCoord extends AbstractGraphicsDrawingOrder {
array of x/y coordinates
/** array of x/y coordinates */
protected int[] coords;
if true, then uses relative drawing order
/** if true, then uses relative drawing order */
protected boolean relative;
Constructor
Params:
  • coords – the x/y coordinates for this object
/** * Constructor * * @param coords the x/y coordinates for this object */
public AbstractGraphicsCoord(int[] coords) { if (coords == null) { relative = true; } else { this.coords = coords; } }
Constructor
Params:
  • coords – the x/y coordinates for this object
  • relative – true if relative drawing order
/** * Constructor * * @param coords the x/y coordinates for this object * @param relative true if relative drawing order */
public AbstractGraphicsCoord(int[] coords, boolean relative) { this(coords); this.relative = relative; }
Constructor
Params:
  • x – the x coordinate for this object
  • y – the y coordinate for this object
/** * Constructor * * @param x the x coordinate for this object * @param y the y coordinate for this object */
public AbstractGraphicsCoord(int x, int y) { this(new int[] {x, y}); }
Constructor
Params:
  • x1 – the x1 coordinate for this object
  • y1 – the y1 coordinate for this object
  • x2 – the x2 coordinate for this object
  • y2 – the y2 coordinate for this object
/** * Constructor * * @param x1 the x1 coordinate for this object * @param y1 the y1 coordinate for this object * @param x2 the x2 coordinate for this object * @param y2 the y2 coordinate for this object */
public AbstractGraphicsCoord(int x1, int y1, int x2, int y2) { this(new int[] {x1, y1, x2, y2}); }
{@inheritDoc}
/** {@inheritDoc} */
public int getDataLength() { return 2 + (coords != null ? coords.length * 2 : 0); }
Returns the coordinate data start index
Returns:the coordinate data start index
/** * Returns the coordinate data start index * * @return the coordinate data start index */
int getCoordinateDataStartIndex() { return 2; }
Returns the coordinate data
Returns:the coordinate data
/** * Returns the coordinate data * * @return the coordinate data */
byte[] getData() { byte[] data = super.getData(); if (coords != null) { addCoords(data, getCoordinateDataStartIndex()); } return data; }
{@inheritDoc}
/** {@inheritDoc} */
public void writeToStream(OutputStream os) throws IOException { os.write(getData()); }
Adds the coordinates to the structured field data
Params:
  • data – the structured field data
  • fromIndex – the start index
/** * Adds the coordinates to the structured field data * * @param data the structured field data * @param fromIndex the start index */
protected void addCoords(byte[] data, int fromIndex) { // X/Y POS for (int i = 0; i < coords.length; i++, fromIndex += 2) { byte[] coord = BinaryUtils.convert(coords[i], 2); data[fromIndex] = coord[0]; data[fromIndex + 1] = coord[1]; } }
{@inheritDoc}
/** {@inheritDoc} */
public String toString() { StringBuffer sb = new StringBuffer(); for (int i = 0; i < coords.length; i++) { if (sb.length() > 0) { sb.append(','); } sb.append((i % 2 == 0) ? 'x' : 'y'); sb.append(i / 2); sb.append('='); sb.append(coords[i]); } return getName() + "{" + sb + "}"; }
Returns true if this is a relative drawing order
Returns:true if this is a relative drawing order
/** * Returns true if this is a relative drawing order * * @return true if this is a relative drawing order */
protected boolean isRelative() { return this.relative; } }