1 17 18 19 20 package org.apache.fop.render.txt.border; 21 22 import java.awt.Point ; 23 import java.util.Arrays ; 24 25 import org.apache.fop.area.CTM; 26 import org.apache.fop.fo.Constants; 27 import org.apache.fop.render.txt.TXTState; 28 29 33 public abstract class AbstractBorderElement implements Constants { 34 35 39 public static final int UP = 0; 40 41 45 public static final int RIGHT = 1; 46 47 51 public static final int DOWN = 2; 52 53 57 public static final int LEFT = 3; 58 59 63 protected int[] data = {0, 0, 0, 0}; 64 65 69 public AbstractBorderElement() { 70 } 71 72 79 public AbstractBorderElement(int type) { 80 for (int i = 0; i < 4; i++) { 81 data[i] = (type >> i) & 1; 82 } 83 } 84 85 91 public int getData(int side) { 92 return data[side]; 93 } 94 95 101 public void setData(int side, int value) { 102 data[side] = value; 103 } 104 105 109 public void transformElement(TXTState state) { 110 double[] da = state.getResultCTM().toArray(); 112 CTM ctm = new CTM(da[0], -da[1], -da[2], da[3], 0, 0); 113 114 Point [] pa = new Point [4]; 115 pa[0] = new Point (0, data[UP]); 116 pa[1] = new Point (data[RIGHT], 0); 117 pa[2] = new Point (0, -data[DOWN]); 118 pa[3] = new Point (-data[LEFT], 0); 119 120 Arrays.fill(data, 0); 121 for (int i = 0; i < 4; i++) { 122 Point p = state.transformPoint(pa[i], ctm); 123 124 int length = (int) p.distance(0, 0); 125 if (p.x == 0 && p.y > 0) { 126 data[UP] = length; 127 } else if (p.x == 0 && p.y < 0) { 128 data[DOWN] = length; 129 } else if (p.x > 0 && p.y == 0) { 130 data[RIGHT] = length; 131 } else if (p.x < 0 && p.y == 0) { 132 data[LEFT] = length; 133 } 134 } 135 } 136 137 142 public abstract AbstractBorderElement merge(AbstractBorderElement e); 143 144 148 public abstract char convert2Char(); 149 } 150 | Popular Tags |