123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152 |
- /*
- * 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$ */
-
- package org.apache.fop.afp.modca;
-
- import java.io.IOException;
- import java.io.OutputStream;
-
- import org.apache.fop.afp.util.BinaryUtils;
-
- /**
- * GOCA Graphics Data Descriptor
- */
- public class GraphicsDataDescriptor extends AbstractDescriptor {
-
- private final int xlwind;
-
- private final int xrwind;
-
- private final int ybwind;
-
- private final int ytwind;
-
- /**
- * Main constructor
- *
- * @param xlwind
- * the left edge of the graphics window
- * @param xrwind
- * the right edge of the graphics window
- * @param ybwind
- * the top edge of the graphics window
- * @param ytwind
- * the bottom edge of the graphics window
- * @param widthRes
- * the width resolution of the graphics window
- * @param heightRes
- * the height resolution of the graphics window
- */
- public GraphicsDataDescriptor(int xlwind, int xrwind, int ybwind,
- int ytwind, int widthRes, int heightRes) {
- this.xlwind = xlwind;
- this.xrwind = xrwind;
- this.ybwind = ybwind;
- this.ytwind = ytwind;
- super.widthRes = widthRes;
- super.heightRes = heightRes;
- }
-
- /** {@inheritDoc} */
- public void writeToStream(OutputStream os) throws IOException {
- byte[] headerData = new byte[9];
- copySF(headerData, Type.DESCRIPTOR, Category.GRAPHICS);
-
- byte[] drawingOrderSubsetData = getDrawingOrderSubset();
-
- byte[] windowSpecificationData = getWindowSpecification();
-
- byte[] len = BinaryUtils.convert(headerData.length
- + drawingOrderSubsetData.length
- + windowSpecificationData.length - 1, 2);
- headerData[1] = len[0];
- headerData[2] = len[1];
-
- os.write(headerData);
- os.write(drawingOrderSubsetData);
- os.write(windowSpecificationData);
- }
-
- /**
- * Returns the drawing order subset data
- *
- * @return the drawing order subset data
- */
- private byte[] getDrawingOrderSubset() {
- final byte[] data = new byte[] {
- // Drawing order subset
- (byte) 0xF7,
- 7, // LENGTH
- (byte) 0xB0, // drawing order subset
- 0x00, // reserved (must be zero)
- 0x00, // reserved (must be zero)
- 0x02, // SUBLEV
- 0x00, // VERSION 0
- 0x01, // LENGTH (of following field)
- 0x00 // GEOM
- };
- return data;
- }
-
- private static final int ABS = 2;
- private static final int IMGRES = 8;
-
- /**
- * Returns the window specification data
- *
- * @return the window specification data
- */
- private byte[] getWindowSpecification() {
- byte[] xlcoord = BinaryUtils.convert(xlwind, 2);
- byte[] xrcoord = BinaryUtils.convert(xrwind, 2);
- byte[] xbcoord = BinaryUtils.convert(ybwind, 2);
- byte[] ytcoord = BinaryUtils.convert(ytwind, 2);
- byte[] xResol = BinaryUtils.convert(widthRes * 10, 2);
- byte[] yResol = BinaryUtils.convert(heightRes * 10, 2);
- byte[] imxyres = xResol;
-
- // Window specification
- final byte[] data = new byte[] {
- (byte) 0xF6,
- 18, // LENGTH
- (ABS + IMGRES), // FLAGS (ABS)
- 0x00, // reserved (must be zero)
- 0x00, // CFORMAT (coordinate format - 16bit high byte first signed)
- 0x00, // UBASE (unit base - ten inches)
-
- xResol[0], // XRESOL
- xResol[1],
- yResol[0], // YRESOL
- yResol[1],
-
- imxyres[0], // IMXYRES (Number of image points per ten inches
- imxyres[1], // in X and Y directions)
-
- xlcoord[0], // XLWIND
- xlcoord[1],
- xrcoord[0], // XRWIND
- xrcoord[1],
- xbcoord[0], // YBWIND
- xbcoord[1],
- ytcoord[0], // YTWIND
- ytcoord[1]
- };
- return data;
- }
- }
|