32 33 TransformingPathConsumer2D() { 34 // used by RendererContext 35 } 36 37 // recycled PathConsumer2D instances from deltaTransformConsumer() 38 private final DeltaScaleFilter dt_DeltaScaleFilter = new DeltaScaleFilter(); 39 private final DeltaTransformFilter dt_DeltaTransformFilter = new DeltaTransformFilter(); 40 41 public PathConsumer2D deltaTransformConsumer(PathConsumer2D out, 42 BaseTransform at) 43 { 44 if (at == null) { 45 return out; 46 } 47 float mxx = (float) at.getMxx(); 48 float mxy = (float) at.getMxy(); 49 float myx = (float) at.getMyx(); 50 float myy = (float) at.getMyy(); 51 52 if (mxy == 0f && myx == 0f) { 53 if (mxx == 1f && myy == 1f) { 54 return out; 55 } else { 56 return dt_DeltaScaleFilter.init(out, mxx, myy); 57 } 58 } else { 59 return dt_DeltaTransformFilter.init(out, mxx, mxy, myx, myy); 60 } 61 } 62 63 // recycled PathConsumer2D instances from inverseDeltaTransformConsumer() 64 private final DeltaScaleFilter iv_DeltaScaleFilter = new DeltaScaleFilter(); 65 private final DeltaTransformFilter iv_DeltaTransformFilter = new DeltaTransformFilter(); 66 67 public PathConsumer2D inverseDeltaTransformConsumer(PathConsumer2D out, 68 BaseTransform at) 69 { 70 if (at == null) { 71 return out; 72 } 73 float mxx = (float) at.getMxx(); 74 float mxy = (float) at.getMxy(); 75 float myx = (float) at.getMyx(); 76 float myy = (float) at.getMyy(); 77 78 if (mxy == 0f && myx == 0f) { 79 if (mxx == 1f && myy == 1f) { 80 return out; 81 } else { 82 return iv_DeltaScaleFilter.init(out, 1.0f/mxx, 1.0f/myy); 83 } 84 } else { 85 float det = mxx * myy - mxy * myx; 86 return iv_DeltaTransformFilter.init(out, 87 myy / det, 88 -mxy / det, 89 -myx / det, 90 mxx / det); 91 } 92 } 93 94 95 static final class DeltaScaleFilter implements PathConsumer2D { 96 private PathConsumer2D out; 97 private float sx, sy; 98 99 DeltaScaleFilter() {} | 32 33 TransformingPathConsumer2D() { 34 // used by RendererContext 35 } 36 37 // recycled PathConsumer2D instances from deltaTransformConsumer() 38 private final DeltaScaleFilter dt_DeltaScaleFilter = new DeltaScaleFilter(); 39 private final DeltaTransformFilter dt_DeltaTransformFilter = new DeltaTransformFilter(); 40 41 public PathConsumer2D deltaTransformConsumer(PathConsumer2D out, 42 BaseTransform at) 43 { 44 if (at == null) { 45 return out; 46 } 47 float mxx = (float) at.getMxx(); 48 float mxy = (float) at.getMxy(); 49 float myx = (float) at.getMyx(); 50 float myy = (float) at.getMyy(); 51 52 if (mxy == 0.0f && myx == 0.0f) { 53 if (mxx == 1.0f && myy == 1.0f) { 54 return out; 55 } else { 56 return dt_DeltaScaleFilter.init(out, mxx, myy); 57 } 58 } else { 59 return dt_DeltaTransformFilter.init(out, mxx, mxy, myx, myy); 60 } 61 } 62 63 // recycled PathConsumer2D instances from inverseDeltaTransformConsumer() 64 private final DeltaScaleFilter iv_DeltaScaleFilter = new DeltaScaleFilter(); 65 private final DeltaTransformFilter iv_DeltaTransformFilter = new DeltaTransformFilter(); 66 67 public PathConsumer2D inverseDeltaTransformConsumer(PathConsumer2D out, 68 BaseTransform at) 69 { 70 if (at == null) { 71 return out; 72 } 73 float mxx = (float) at.getMxx(); 74 float mxy = (float) at.getMxy(); 75 float myx = (float) at.getMyx(); 76 float myy = (float) at.getMyy(); 77 78 if (mxy == 0.0f && myx == 0.0f) { 79 if (mxx == 1.0f && myy == 1.0f) { 80 return out; 81 } else { 82 return iv_DeltaScaleFilter.init(out, 1.0f/mxx, 1.0f/myy); 83 } 84 } else { 85 float det = mxx * myy - mxy * myx; 86 return iv_DeltaTransformFilter.init(out, 87 myy / det, 88 -mxy / det, 89 -myx / det, 90 mxx / det); 91 } 92 } 93 94 95 static final class DeltaScaleFilter implements PathConsumer2D { 96 private PathConsumer2D out; 97 private float sx, sy; 98 99 DeltaScaleFilter() {} |