PreviewPosition.java 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410
  1. package com.epson.cameracopy.printlayout;
  2. import android.graphics.Rect;
  3. import java.io.IOException;
  4. import java.io.ObjectInputStream;
  5. import java.io.ObjectOutputStream;
  6. import java.io.Serializable;
  7. class PreviewPosition implements Serializable {
  8. static final /* synthetic */ boolean $assertionsDisabled = false;
  9. public static final double MAX_IMAGE_RATE = 4.0d;
  10. public static final double MIN_IMAGE_RATE = 0.25d;
  11. private static final int MOVABLE_PREVIE_PIXEL = 10;
  12. private static final long serialVersionUID = 1;
  13. private int m3mPrintAreaActualHeight;
  14. private int m3mPrintAreaActualWidth;
  15. private double mActualPreviewRate;
  16. private int mBorderlessDataHeight;
  17. private int mBorderlessDataWidth;
  18. private int mBorderlessLeftMargin;
  19. private boolean mBorderlessMode;
  20. private int mBorderlessTopMargin;
  21. private boolean mFitSizeMode;
  22. private int mPaperActualHeight = 297;
  23. private int mPaperActualWidth = 210;
  24. private int mPaperTo3mActualLeftMargin;
  25. private int mPaperTo3mActualTopMargin;
  26. private int[] mPreviewMovableArea = new int[4];
  27. private double mPreviewPaperRate = 0.98d;
  28. private transient Rect mPreviewPaperRect = new Rect();
  29. private int mPrintTargetAddRotation;
  30. private int mPrtimageActualHeight;
  31. private int mPrtimageActualWidth;
  32. private final PreviewRect mPrtimagePreviewPosition = new PreviewRect();
  33. private transient Rect mScaledPrtimagePreviewRect = new Rect();
  34. private int mScreenHeight;
  35. private int mScreenWidth;
  36. public PreviewPosition() {
  37. }
  38. public PreviewPosition(double d) {
  39. mPreviewPaperRate = d;
  40. }
  41. public void setPrtimageActualSize(int i, int i2) {
  42. mPrtimageActualWidth = i;
  43. mPrtimageActualHeight = i2;
  44. }
  45. public int[] getPrtImageActualSIze() {
  46. return new int[]{mPrtimageActualWidth, mPrtimageActualHeight};
  47. }
  48. public void setScreenSize(int i, int i2) {
  49. mScreenWidth = i;
  50. mScreenHeight = i2;
  51. }
  52. public void changeScreenSize(int i, int i2) {
  53. if (mActualPreviewRate <= 0.0d || i <= 0 || i2 <= 0) {
  54. return;
  55. }
  56. if (mScreenWidth != i || mScreenHeight != i2) {
  57. mScreenWidth = i;
  58. mScreenHeight = i2;
  59. double left = ((mPrtimagePreviewPosition.getLeft() - mPreviewPaperRect.left)) / mActualPreviewRate;
  60. double top = ((mPrtimagePreviewPosition.getTop() - mPreviewPaperRect.top)) / mActualPreviewRate;
  61. calcPreviewPaperSize();
  62. double d = mActualPreviewRate;
  63. mPrtimagePreviewPosition.setX1Size(((mPrtimageActualWidth) * d), ((mPrtimageActualHeight) * d));
  64. mPrtimagePreviewPosition.setLeft(mPreviewPaperRect.left + ((left * mActualPreviewRate)));
  65. mPrtimagePreviewPosition.setTop(mPreviewPaperRect.top + ((top * mActualPreviewRate)));
  66. setMovableArea();
  67. }
  68. }
  69. public void setPaperSize(int i, int i2, int i3, int i4, int i5, int i6, int i7, int i8, int i9, int i10) {
  70. mPaperActualWidth = i;
  71. mPaperActualHeight = i2;
  72. mPaperTo3mActualLeftMargin = i3;
  73. mPaperTo3mActualTopMargin = i4;
  74. m3mPrintAreaActualWidth = i5;
  75. m3mPrintAreaActualHeight = i6;
  76. mBorderlessLeftMargin = i7;
  77. mBorderlessTopMargin = i8;
  78. mBorderlessDataWidth = i9;
  79. mBorderlessDataHeight = i10;
  80. }
  81. public int[] getPaperMaginAnd3mPrintableArea() {
  82. double d = mActualPreviewRate;
  83. return new int[]{((mPaperTo3mActualLeftMargin) * d), ((mPaperTo3mActualTopMargin) * d), ((m3mPrintAreaActualWidth) * d), ((m3mPrintAreaActualHeight) * d)};
  84. }
  85. public void calcSizeAndPositionOnScreen() {
  86. calcPreviewPaperSize();
  87. initPreviewPrtimageRect();
  88. setMovableArea();
  89. }
  90. private void setMovableArea() {
  91. mPreviewMovableArea[0] = mPreviewPaperRect.left + 10;
  92. mPreviewMovableArea[1] = mPreviewPaperRect.top + 10;
  93. mPreviewMovableArea[2] = mPreviewPaperRect.right - 10;
  94. mPreviewMovableArea[3] = mPreviewPaperRect.bottom - 10;
  95. if (!mBorderlessMode) {
  96. int[] paperMaginAnd3mPrintableArea = getPaperMaginAnd3mPrintableArea();
  97. int[] iArr = mPreviewMovableArea;
  98. iArr[0] = iArr[0] + paperMaginAnd3mPrintableArea[0];
  99. iArr[1] = iArr[1] + paperMaginAnd3mPrintableArea[1];
  100. iArr[2] = ((mPreviewPaperRect.left + paperMaginAnd3mPrintableArea[0]) + paperMaginAnd3mPrintableArea[2]) - 10;
  101. mPreviewMovableArea[3] = ((mPreviewPaperRect.top + paperMaginAnd3mPrintableArea[1]) + paperMaginAnd3mPrintableArea[3]) - 10;
  102. }
  103. }
  104. private void initPreviewPrtimageRect() {
  105. if (mPreviewPaperRect.right > 0 && mPreviewPaperRect.width() > 0 && mPrtimageActualWidth > 0 && mPrtimageActualHeight > 0) {
  106. mFitSizeMode = false;
  107. mPrtimagePreviewPosition.setScale(1.0d);
  108. mPrtimagePreviewPosition.resetRotate();
  109. double d = mActualPreviewRate;
  110. mPrtimagePreviewPosition.setX1Size((((mPrtimageActualWidth) * d) + 0.5d), (((mPrtimageActualHeight) * d) + 0.5d));
  111. mPrtimagePreviewPosition.setLeft(mPreviewPaperRect.left);
  112. mPrtimagePreviewPosition.setTop(mPreviewPaperRect.top);
  113. }
  114. }
  115. private void calcPreviewPaperSize() {
  116. int i;
  117. int i2;
  118. int i3;
  119. int i4 = mScreenWidth;
  120. if (i4 > 0 && (i = mScreenHeight) > 0 && (i2 = mPaperActualWidth) > 0 && (i3 = mPaperActualHeight) > 0) {
  121. mFitSizeMode = false;
  122. double d = mPreviewPaperRate;
  123. mActualPreviewRate = Math.min(((i4) * d) / (i2), ((i) * d) / (i3));
  124. mPreviewPaperRect.setEmpty();
  125. Rect rect = mPreviewPaperRect;
  126. double d2 = mActualPreviewRate;
  127. rect.right = ((mPaperActualWidth) * d2);
  128. rect.bottom = ((mPaperActualHeight) * d2);
  129. mPreviewPaperRect.offsetTo((mScreenWidth - rect.right) / 2, (mScreenHeight - mPreviewPaperRect.bottom) / 2);
  130. }
  131. }
  132. public void move(int i, int i2) {
  133. mPrtimagePreviewPosition.move(i, i2);
  134. adjustPrtimagePosition();
  135. }
  136. public Rect getPreviewPaperRect() {
  137. return mPreviewPaperRect;
  138. }
  139. public Rect getPreviewPrtimageRect() {
  140. mScaledPrtimagePreviewRect.left = mPrtimagePreviewPosition.getLeft();
  141. mScaledPrtimagePreviewRect.right = mPrtimagePreviewPosition.getRight();
  142. mScaledPrtimagePreviewRect.top = mPrtimagePreviewPosition.getTop();
  143. mScaledPrtimagePreviewRect.bottom = mPrtimagePreviewPosition.getBottom();
  144. return mScaledPrtimagePreviewRect;
  145. }
  146. public int getPrtimageRotation() {
  147. return (mPrtimagePreviewPosition.getRotation() + mPrintTargetAddRotation) & 3;
  148. }
  149. public void rotateRight90() {
  150. mPrtimagePreviewPosition.rotateRight90();
  151. adjustPrtimagePosition();
  152. }
  153. public void resetRotation() {
  154. mPrtimagePreviewPosition.resetRotate();
  155. adjustPrtimagePosition();
  156. }
  157. public void setPrintTargetAddRotation(int i) {
  158. mPrintTargetAddRotation = i;
  159. }
  160. public double getCurrentPrttargetScale() {
  161. return mPrtimagePreviewPosition.getScale();
  162. }
  163. public void setScaleFactor(double d) {
  164. if (d < 0.25d) {
  165. d = 0.25d;
  166. } else if (d > 4.0d) {
  167. d = 4.0d;
  168. }
  169. mPrtimagePreviewPosition.setScale(d);
  170. adjustPrtimagePosition();
  171. }
  172. private void adjustPrtimagePosition() {
  173. int right = mPrtimagePreviewPosition.getRight();
  174. int[] iArr = mPreviewMovableArea;
  175. if (right < iArr[0]) {
  176. mPrtimagePreviewPosition.setRight(iArr[0]);
  177. }
  178. int bottom = mPrtimagePreviewPosition.getBottom();
  179. int[] iArr2 = mPreviewMovableArea;
  180. if (bottom < iArr2[1]) {
  181. mPrtimagePreviewPosition.setBottom(iArr2[1]);
  182. }
  183. int left = mPrtimagePreviewPosition.getLeft();
  184. int[] iArr3 = mPreviewMovableArea;
  185. if (left > iArr3[2]) {
  186. mPrtimagePreviewPosition.setLeft(iArr3[2]);
  187. }
  188. int top = mPrtimagePreviewPosition.getTop();
  189. int[] iArr4 = mPreviewMovableArea;
  190. if (top > iArr4[3]) {
  191. mPrtimagePreviewPosition.setTop(iArr4[3]);
  192. }
  193. mFitSizeMode = false;
  194. }
  195. public void resetPrtimagePosition() {
  196. initPreviewPrtimageRect();
  197. }
  198. public PreviewView.SizeAndPosition getPrintSizeAndPosition() {
  199. if (mActualPreviewRate <= 0.0d) {
  200. return null;
  201. }
  202. return new PreviewView.SizeAndPosition(((mPrtimagePreviewPosition.getWidth()) / mActualPreviewRate), ((mPrtimagePreviewPosition.getHeight()) / mActualPreviewRate), (((mPrtimagePreviewPosition.getLeft() - mPreviewPaperRect.left)) / mActualPreviewRate), (((mPrtimagePreviewPosition.getTop() - mPreviewPaperRect.top)) / mActualPreviewRate), getPrtimageRotation());
  203. }
  204. public ImageAndLayout getImageAndLayout(boolean z) {
  205. double d;
  206. double d2;
  207. if (mActualPreviewRate <= 0.0d) {
  208. return null;
  209. }
  210. ImageAndLayout imageAndLayout = new ImageAndLayout();
  211. if (z) {
  212. imageAndLayout.setLayoutAreaSize(mBorderlessDataWidth, mBorderlessDataHeight);
  213. d2 = (((mPrtimagePreviewPosition.getLeft() - mPreviewPaperRect.left)) / mActualPreviewRate) + (mBorderlessLeftMargin);
  214. d = (((mPrtimagePreviewPosition.getTop() - mPreviewPaperRect.top)) / mActualPreviewRate) + (mBorderlessTopMargin);
  215. } else {
  216. imageAndLayout.setLayoutAreaSize(m3mPrintAreaActualWidth, m3mPrintAreaActualHeight);
  217. d2 = (((mPrtimagePreviewPosition.getLeft() - mPreviewPaperRect.left)) / mActualPreviewRate) - (mPaperTo3mActualLeftMargin);
  218. d = (((mPrtimagePreviewPosition.getTop() - mPreviewPaperRect.top)) / mActualPreviewRate) - (mPaperTo3mActualTopMargin);
  219. }
  220. imageAndLayout.setLayout((mPrtimagePreviewPosition.getWidth()) / mActualPreviewRate, (mPrtimagePreviewPosition.getHeight()) / mActualPreviewRate, d2, d, getPrtimageRotation());
  221. return imageAndLayout;
  222. }
  223. public void fitSize() {
  224. int i;
  225. int i2 = mPrtimageActualWidth;
  226. if (i2 > 0 && (i = mPrtimageActualHeight) > 0) {
  227. if ((mPrtimagePreviewPosition.getRotation() & 1) != 0) {
  228. int i3 = i;
  229. i = i2;
  230. i2 = i3;
  231. }
  232. double d = (mPaperActualWidth) / (i2);
  233. double d2 = (mPaperActualHeight) / (i);
  234. if (d <= d2) {
  235. d2 = d;
  236. }
  237. if (d2 > 4.0d) {
  238. d2 = 4.0d;
  239. }
  240. if (d2 < 0.25d) {
  241. d2 = 0.25d;
  242. }
  243. mPrtimagePreviewPosition.setScale(d2);
  244. mPrtimagePreviewPosition.setLeft(mPreviewPaperRect.left);
  245. mPrtimagePreviewPosition.setTop(mPreviewPaperRect.top);
  246. mFitSizeMode = true;
  247. }
  248. }
  249. public boolean isFitSize() {
  250. return mFitSizeMode;
  251. }
  252. public void setBorderless(boolean z) {
  253. mBorderlessMode = z;
  254. }
  255. private void writeObject(ObjectOutputStream objectOutputStream) throws IOException {
  256. objectOutputStream.defaultWriteObject();
  257. objectOutputStream.writeInt(mPreviewPaperRect.left);
  258. objectOutputStream.writeInt(mPreviewPaperRect.right);
  259. objectOutputStream.writeInt(mPreviewPaperRect.top);
  260. objectOutputStream.writeInt(mPreviewPaperRect.bottom);
  261. objectOutputStream.writeInt(mScaledPrtimagePreviewRect.left);
  262. objectOutputStream.writeInt(mScaledPrtimagePreviewRect.right);
  263. objectOutputStream.writeInt(mScaledPrtimagePreviewRect.top);
  264. objectOutputStream.writeInt(mScaledPrtimagePreviewRect.bottom);
  265. }
  266. private void readObject(ObjectInputStream objectInputStream) throws IOException, ClassNotFoundException {
  267. objectInputStream.defaultReadObject();
  268. mPreviewPaperRect = new Rect();
  269. mPreviewPaperRect.left = objectInputStream.readInt();
  270. mPreviewPaperRect.right = objectInputStream.readInt();
  271. mPreviewPaperRect.top = objectInputStream.readInt();
  272. mPreviewPaperRect.bottom = objectInputStream.readInt();
  273. mScaledPrtimagePreviewRect = new Rect();
  274. mScaledPrtimagePreviewRect.left = objectInputStream.readInt();
  275. mScaledPrtimagePreviewRect.right = objectInputStream.readInt();
  276. mScaledPrtimagePreviewRect.top = objectInputStream.readInt();
  277. mScaledPrtimagePreviewRect.bottom = objectInputStream.readInt();
  278. }
  279. static class PreviewRect implements Serializable {
  280. private static final long serialVersionUID = 1;
  281. private int mCx;
  282. private int mCy;
  283. private int mRotation;
  284. private double mScale = 1.0d;
  285. private int mScaledHeight;
  286. private int mScaledWidth;
  287. private int mX1Height;
  288. private int mX1Width;
  289. PreviewRect() {
  290. }
  291. public final void setX1Size(int i, int i2) {
  292. mX1Width = i;
  293. mX1Height = i2;
  294. setScale(mScale);
  295. }
  296. public final void setLeft(int i) {
  297. mCx = (mScaledWidth / 2) + i;
  298. }
  299. public final void setRight(int i) {
  300. setLeft(i - mScaledWidth);
  301. }
  302. public final void setTop(int i) {
  303. mCy = (mScaledHeight / 2) + i;
  304. }
  305. public final void setBottom(int i) {
  306. setTop(i - mScaledHeight);
  307. }
  308. public int getLeft() {
  309. return mCx - (mScaledWidth / 2);
  310. }
  311. public int getRight() {
  312. return getLeft() + mScaledWidth;
  313. }
  314. public int getTop() {
  315. return mCy - (mScaledHeight / 2);
  316. }
  317. public int getBottom() {
  318. return getTop() + mScaledHeight;
  319. }
  320. public int getWidth() {
  321. return mScaledWidth;
  322. }
  323. public int getHeight() {
  324. return mScaledHeight;
  325. }
  326. public void setScale(double d) {
  327. mScale = d;
  328. mScaledWidth = ((mX1Width) * d);
  329. mScaledHeight = ((mX1Height) * d);
  330. if ((mRotation & 1) != 0) {
  331. int i = mScaledWidth;
  332. mScaledWidth = mScaledHeight;
  333. mScaledHeight = i;
  334. }
  335. }
  336. public double getScale() {
  337. return mScale;
  338. }
  339. public void move(int i, int i2) {
  340. mCx += i;
  341. mCy += i2;
  342. }
  343. public int getRotation() {
  344. return mRotation;
  345. }
  346. public void rotateRight90() {
  347. mRotation++;
  348. if (mRotation >= 4) {
  349. mRotation = 0;
  350. }
  351. setScale(mScale);
  352. }
  353. public void resetRotate() {
  354. mRotation = 0;
  355. setScale(mScale);
  356. }
  357. }
  358. }