1 17 18 19 20 package org.apache.fop.render.txt; 21 22 import java.awt.Point ; 23 import java.awt.geom.Rectangle2D ; 24 import java.util.Iterator ; 25 import java.util.LinkedList ; 26 27 import org.apache.fop.area.CTM; 28 29 33 public class TXTState { 34 35 36 private LinkedList stackCTM = new LinkedList (); 37 38 42 private CTM resultCTM = new CTM(); 43 44 47 public TXTState() { 48 } 49 50 56 private void updateResultCTM(CTM ctm) { 57 resultCTM = resultCTM.multiply(ctm); 58 } 59 60 63 private void calcResultCTM() { 64 resultCTM = new CTM(); 65 for (Iterator i = stackCTM.iterator(); i.hasNext();) { 66 updateResultCTM((CTM) i.next()); 67 } 68 } 69 70 76 public void push(CTM ctm) { 77 stackCTM.addLast(ctm); 78 updateResultCTM(ctm); 79 } 80 81 85 public void pop() { 86 stackCTM.removeLast(); 87 calcResultCTM(); 88 } 89 90 97 public CTM refineCTM(CTM ctm) { 98 double[] da = ctm.toArray(); 99 da[4] = Helper.roundPosition((int) da[4], TXTRenderer.CHAR_WIDTH); 101 da[5] = Helper.roundPosition((int) da[5], TXTRenderer.CHAR_HEIGHT); 103 104 return new CTM(da[0], da[1], da[2], da[3], da[4], da[5]); 105 } 106 107 114 public Point transformPoint(Point p, CTM ctm) { 115 Rectangle2D r = new Rectangle2D.Double (p.x, p.y, 0, 0); 116 CTM nctm = refineCTM(ctm); 117 r = nctm.transform(r); 118 return new Point ((int) r.getX(), (int) r.getY()); 119 } 120 121 128 public Point transformPoint(int x, int y) { 129 return transformPoint(new Point (x, y), resultCTM); 130 } 131 132 135 public CTM getResultCTM() { 136 return resultCTM; 137 } 138 } 139 | Popular Tags |