/* * 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.render.intermediate; import java.awt.Color; import java.awt.Point; import java.io.IOException; import org.apache.fop.traits.RuleStyle; /** * Used primarily by {@link BorderPainter}, implementations are created for rendering * primitive graphical operations. * */ public interface GraphicsPainter { /** * Draws a border line. * @param x1 X coordinate of the upper left corner * of the line's bounding rectangle (in millipoints) * @param y1 start Y coordinate of the upper left corner * of the line's bounding rectangle (in millipoints) * @param x2 end X coordinate of the lower right corner * of the line's bounding rectangle (in millipoints) * @param y2 end y coordinate of the lower right corner * of the line's bounding rectangle (in millipoints) * @param horz true if it is a horizontal line * @param startOrBefore true if the line is the start or end edge of a border box * @param style the border style * @param color the border color * @throws IOException if an I/O error occurs */ void drawBorderLine(int x1, int y1, int x2, int y2, boolean horz, boolean startOrBefore, int style, Color color) throws IOException; /** * Draws a line/rule. * @param start start point (coordinates in millipoints) * @param end end point (coordinates in millipoints) * @param width width of the line * @param color the line color * @param style the rule style * @throws IOException if an I/O error occurs */ void drawLine(Point start, Point end, int width, Color color, RuleStyle style) throws IOException; /** * Moves the cursor to the given coordinate. * @param x the X coordinate (in millipoints) * @param y the Y coordinate (in millipoints) * @throws IOException if an I/O error occurs */ void moveTo(int x, int y) throws IOException; /** * Draws a line from the current cursor position to the given coordinates. * @param x the X coordinate (in millipoints) * @param y the Y coordinate (in millipoints) * @throws IOException if an I/O error occurs */ void lineTo(int x, int y) throws IOException; /** * Draws an arc on the ellipse centered at (cx, cy) with width width and height height * from start angle startAngle (with respect to the x-axis counter-clockwise) * to the end angle endAngle. * The ellipses major axis are assumed to coincide with the coordinate axis. * The current position MUST coincide with the starting position on the ellipse. * @param startAngle the start angle * @param endAngle the end angle * @param cx the x coordinate of the ellipse center * @param cy the y coordinate of the ellipse center * @param width the extent of the ellipse in the x direction * @param height the extent of the ellipse in the y direction * @throws IOException if an I/O error occurs */ void arcTo(final double startAngle, final double endAngle, final int cx, final int cy, final int width, final int height) throws IOException; /** * Rotate the coordinate frame * @param angle angle in radians to rotate the coordinate frame * @throws IOException if an I/O error occurs */ void rotateCoordinates(double angle) throws IOException; /** * Translate the coordinate frame * @param xTranslate translation in the x direction * @param yTranslate translation in the y direction * @throws IOException if an I/O error occurs */ void translateCoordinates(int xTranslate, int yTranslate) throws IOException; /** * Scale the coordinate frame * @param xScale scale factor in the x direction * @param yScale scale factor in the y direction * @throws IOException if an I/O error occurs */ void scaleCoordinates(float xScale, float yScale) throws IOException; /** * Closes the current path. * @throws IOException if an I/O error occurs */ void closePath() throws IOException; /** * Reduces the current clipping region to the current path. * @throws IOException if an I/O error occurs */ void clip() throws IOException; /** * Save the graphics state on the stack. * @throws IOException if an I/O error occurs */ void saveGraphicsState() throws IOException; /** * Restore the last graphics state from the stack. * @throws IOException if an I/O error occurs */ void restoreGraphicsState() throws IOException; }