ECopyPreview.java 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671
  1. package epson.print.copy.Component.ecopycomponent;
  2. import android.app.Activity;
  3. import android.content.Context;
  4. import android.graphics.Bitmap;
  5. import android.graphics.Canvas;
  6. import android.graphics.ColorMatrix;
  7. import android.graphics.ColorMatrixColorFilter;
  8. import android.graphics.Matrix;
  9. import android.graphics.Paint;
  10. import android.graphics.Path;
  11. import android.graphics.Point;
  12. import android.graphics.PointF;
  13. import android.graphics.Rect;
  14. import android.graphics.RectF;
  15. import android.graphics.drawable.ColorDrawable;
  16. import android.graphics.drawable.Drawable;
  17. import android.support.p000v4.internal.view.SupportMenu;
  18. import android.view.View;
  19. import android.widget.LinearLayout;
  20. import epson.common.Constants;
  21. public class ECopyPreview extends View {
  22. /* renamed from: A4 */
  23. final Size f360A4 = new Size(1240, Constants.SCAN_MAX_HEIGHT);
  24. final Size A4_2Up = new Size(Constants.SCAN_MAX_HEIGHT, 1240);
  25. final Size A4_2UpPage = new Size(827, 1176);
  26. /* renamed from: B5 */
  27. final Size f361B5 = new Size(1075, 1518);
  28. final int BM_2Up = 35;
  29. final int BM_Border = 18;
  30. final int BO_Type1 = 24;
  31. final int BO_Type2 = 15;
  32. final Size Hagaki = new Size(591, 874);
  33. /* renamed from: KG */
  34. final Size f362KG = new Size(602, 898);
  35. /* renamed from: L */
  36. final Size f363L = new Size(526, 750);
  37. /* renamed from: L2 */
  38. final Size f364L2 = new Size(750, 1051);
  39. final int LM_2Up = 32;
  40. final int LM_Border = 18;
  41. final int LO_Type1 = 15;
  42. final int LO_Type2 = 15;
  43. final Size Max = new Size(Constants.SCAN_MAX_WIDTH, Constants.SCAN_MAX_HEIGHT);
  44. /* renamed from: P6 */
  45. final Size f365P6 = new Size(1199, 1500);
  46. final int PG_2Up = 35;
  47. final int PL_A4 = Constants.SCAN_MAX_HEIGHT;
  48. final int PL_B5 = 1518;
  49. final int PL_Hagaki = 874;
  50. final int PL_KG = 898;
  51. final int PL_L = 750;
  52. final int PL_L2 = 1051;
  53. final int PL_MAX = Constants.SCAN_MAX_HEIGHT;
  54. final int PL_P6 = 1500;
  55. final int PW_A4 = 1240;
  56. final int PW_B5 = 1075;
  57. final int PW_Hagaki = 591;
  58. final int PW_KG = 602;
  59. final int PW_L = 526;
  60. final int PW_L2 = 750;
  61. final int PW_MAX = Constants.SCAN_MAX_WIDTH;
  62. final int PW_P6 = 1199;
  63. final int RM_2Up = 32;
  64. final int RM_Border = 18;
  65. final int RO_Type1 = 15;
  66. final int RO_Type2 = 15;
  67. final int TM_2Up = 30;
  68. final int TM_Border = 18;
  69. final int TO_Type1 = 17;
  70. final int TO_Type2 = 8;
  71. Drawable backgroundDrawable = new ColorDrawable(0);
  72. ECopyOptionItem colorOption;
  73. ECopyOptionItem copiesOpiton;
  74. Paint copyFramePaint = new Paint();
  75. Size drawSize;
  76. Paint grayscalePaint;
  77. Layout layout;
  78. ECopyPreviewInvalidateListener listener;
  79. ICopyPreviewCommitEditedOptionContext optionCommitter;
  80. ECopyOptionContext optionContext;
  81. Drawable paperDrawable = new ColorDrawable(-1);
  82. RectF paperFrame;
  83. Rect paperPadding;
  84. Paint paperShadowPaint;
  85. ECopyOptionItem scaleOption;
  86. public enum ECopyPreviewColor {
  87. Color,
  88. Monochrome
  89. }
  90. public interface ECopyPreviewInvalidateListener {
  91. void needInvalidateView();
  92. }
  93. interface ICopyPreviewCommitEditedOptionContext {
  94. void commit(ECopyOptionContext eCopyOptionContext);
  95. }
  96. protected interface ScanImageSizeCalculator {
  97. void onScanImageSize(int i, int i2, float f);
  98. }
  99. private ECopyPreview(Context context) {
  100. super(context);
  101. copyFramePaint.setColor(SupportMenu.CATEGORY_MASK);
  102. copyFramePaint.setStyle(Paint.Style.STROKE);
  103. copyFramePaint.setStrokeWidth(2.0f);
  104. paperPadding = new Rect();
  105. grayscalePaint = new Paint();
  106. paperShadowPaint = new Paint();
  107. paperFrame = new RectF();
  108. ColorMatrix colorMatrix = new ColorMatrix();
  109. colorMatrix.setSaturation(0.0f);
  110. grayscalePaint.setColorFilter(new ColorMatrixColorFilter(colorMatrix));
  111. }
  112. public void setBackground(Drawable drawable) {
  113. backgroundDrawable = drawable;
  114. }
  115. public void setPaperDrawable(Drawable drawable) {
  116. paperDrawable = drawable;
  117. }
  118. public void setCopyFramePaint(Paint paint) {
  119. copyFramePaint = paint;
  120. }
  121. public void setPaperShadowPaint(Paint paint) {
  122. paperShadowPaint = paint;
  123. }
  124. public void setPaperPadding(Rect rect) {
  125. paperPadding = new Rect(rect);
  126. resize();
  127. }
  128. private void requestInvalidateView() {
  129. ((Activity) getContext()).runOnUiThread(new Runnable() {
  130. public void run() {
  131. listener.needInvalidateView();
  132. }
  133. });
  134. }
  135. public void setColor(ECopyPreviewColor eCopyPreviewColor) {
  136. ECopyOptionItem.ECopyOptionItemChoice eCopyOptionItemChoice = ECopyOptionItem.ECopyOptionItemChoice.ColorEffectsType_Color;
  137. if (eCopyPreviewColor == ECopyPreviewColor.Monochrome) {
  138. eCopyOptionItemChoice = ECopyOptionItem.ECopyOptionItemChoice.ColorEffectsType_MonochromeGrayscale;
  139. }
  140. colorOption.selectChoice(eCopyOptionItemChoice);
  141. requestInvalidateView();
  142. }
  143. public ECopyPreviewColor getColor() {
  144. return colorOption.getSelectedChoice() == ECopyOptionItem.ECopyOptionItemChoice.ColorEffectsType_MonochromeGrayscale ? ECopyPreviewColor.Monochrome : ECopyPreviewColor.Color;
  145. }
  146. public void setScale(int i) {
  147. scaleOption.selectValue(i);
  148. layout.setCopyScale(((float) scaleOption.getSelectedValue()) / 100.0f);
  149. requestInvalidateView();
  150. }
  151. public int getScale() {
  152. return scaleOption.getSelectedValue();
  153. }
  154. public void setCopies(int i) {
  155. copiesOpiton.selectValue(i);
  156. }
  157. public int getCopies() {
  158. return copiesOpiton.getSelectedValue();
  159. }
  160. public void dismiss(boolean z) {
  161. if (z) {
  162. optionCommitter.commit(optionContext);
  163. }
  164. }
  165. private void compose(ECopyOptionContext eCopyOptionContext, ICopyPreviewCommitEditedOptionContext iCopyPreviewCommitEditedOptionContext) {
  166. optionContext = eCopyOptionContext;
  167. optionCommitter = iCopyPreviewCommitEditedOptionContext;
  168. copiesOpiton = optionContext.getCopyOptionItemOf(ECopyOptionItem.ECopyOptionItemKey.Copies);
  169. scaleOption = optionContext.getCopyOptionItemOf(ECopyOptionItem.ECopyOptionItemKey.CopyMagnification);
  170. colorOption = optionContext.getCopyOptionItemOf(ECopyOptionItem.ECopyOptionItemKey.ColorEffectsType);
  171. resize();
  172. }
  173. private void resize() {
  174. int i = (drawSize.width - paperPadding.left) - paperPadding.right;
  175. int i2 = (drawSize.height - paperPadding.top) - paperPadding.bottom;
  176. ECopyComponent.ECopyType copyType = optionContext.getCopyType();
  177. if (copyType == ECopyComponent.ECopyType.A4_2up || copyType == ECopyComponent.ECopyType.B5_2up || copyType == ECopyComponent.ECopyType.A4_2up_Book || copyType == ECopyComponent.ECopyType.B5_2up_Book) {
  178. layout = new Layout2Up(i, i2);
  179. } else if (copyType == ECopyComponent.ECopyType.Mirror) {
  180. layout = new LayoutMirror(i, i2);
  181. } else if (copyType == ECopyComponent.ECopyType.Borderless) {
  182. layout = new LayoutBorderless(i, i2);
  183. } else {
  184. layout = new LayoutStandard(i, i2);
  185. }
  186. layout.setCopyScale(((float) scaleOption.getSelectedValue()) / 100.0f);
  187. }
  188. protected static ECopyPreview createPreview(Context context, int i, int i2, ECopyPreviewInvalidateListener eCopyPreviewInvalidateListener) {
  189. ECopyPreview eCopyPreview = new ECopyPreview(context);
  190. eCopyPreview.setLayoutParams(new LinearLayout.LayoutParams(i, i2));
  191. eCopyPreview.getClass();
  192. eCopyPreview.drawSize = new Size(i, i2);
  193. eCopyPreview.listener = eCopyPreviewInvalidateListener;
  194. return eCopyPreview;
  195. }
  196. protected void drawScanPreview(Bitmap bitmap) {
  197. layout.setScanImage(bitmap);
  198. requestInvalidateView();
  199. }
  200. protected void calculateScanImageSize(int i, int i2, ScanImageSizeCalculator scanImageSizeCalculator) {
  201. float scanImageScale = layout.getScanImageScale(i, i2);
  202. scanImageSizeCalculator.onScanImageSize((int) (((float) i) * scanImageScale), (int) (((float) i2) * scanImageScale), scanImageScale);
  203. }
  204. protected void setPaperFrame(RectF rectF) {
  205. paperFrame = rectF;
  206. layout.setPaperFrame(rectF);
  207. requestInvalidateView();
  208. }
  209. protected void onDraw(Canvas canvas) {
  210. canvas.save();
  211. backgroundDrawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());
  212. backgroundDrawable.draw(canvas);
  213. Point offset = layout.getOffset();
  214. offset.offset(paperPadding.left, paperPadding.top);
  215. RectF paperRect = layout.getPaperRect();
  216. paperRect.offset((float) offset.x, (float) offset.y);
  217. if (optionContext.copyType == ECopyComponent.ECopyType.Mirror) {
  218. canvas.scale(-1.0f, 1.0f);
  219. canvas.translate(-(paperRect.centerX() * 2.0f), 0.0f);
  220. }
  221. canvas.drawRect(paperRect, paperShadowPaint);
  222. Paint paint = null;
  223. if (colorOption.getSelectedChoice() == ECopyOptionItem.ECopyOptionItemChoice.ColorEffectsType_MonochromeGrayscale) {
  224. paint = grayscalePaint;
  225. }
  226. canvas.drawBitmap(layout.getBitmap(), (float) offset.x, (float) offset.y, paint);
  227. RectF copyFrame = layout.getCopyFrame();
  228. if (!paperFrame.isEmpty() && copyFrame != null) {
  229. copyFrame.offset((float) offset.x, (float) offset.y);
  230. Path path = new Path();
  231. path.addRect(copyFrame, Path.Direction.CW);
  232. canvas.drawPath(path, copyFramePaint);
  233. }
  234. canvas.restore();
  235. }
  236. class Size {
  237. int height;
  238. int width;
  239. Size(int i, int i2) {
  240. width = i;
  241. height = i2;
  242. }
  243. Size(Size size) {
  244. width = size.width;
  245. height = size.height;
  246. }
  247. private void scale(float f) {
  248. width = (int) (((float) width) * f);
  249. height = (int) (((float) height) * f);
  250. }
  251. }
  252. static abstract class Layout {
  253. enum AspectFit {
  254. Max,
  255. Min
  256. }
  257. private abstract Bitmap getBitmap();
  258. private abstract RectF getCopyFrame();
  259. private abstract Point getOffset();
  260. private abstract RectF getPaperRect();
  261. private abstract float getScanImageScale(int i, int i2);
  262. private abstract void setCopyScale(float f);
  263. private abstract void setPaperFrame(RectF rectF);
  264. private abstract void setScanImage(Bitmap bitmap);
  265. Layout() {
  266. }
  267. private void scaleRect(float f, RectF rectF) {
  268. Matrix matrix = new Matrix();
  269. matrix.postScale(f, f);
  270. matrix.mapRect(rectF);
  271. }
  272. private float getAspectFitScale(float f, float f2, float f3, float f4, AspectFit aspectFit) {
  273. PointF pointF = new PointF();
  274. pointF.x = f / f3;
  275. pointF.y = f2 / f4;
  276. return aspectFit == AspectFit.Min ? Math.min(pointF.x, pointF.y) : Math.max(pointF.x, pointF.y);
  277. }
  278. }
  279. class LayoutStandard extends Layout {
  280. boolean autofitEnabled = false;
  281. Canvas canvas;
  282. RectF copyFrame;
  283. float copyScale = 1.0f;
  284. float imageScale = 1.0f;
  285. int layoutHeight;
  286. int layoutWidth;
  287. float limitCopyScaleDown = 0.0f;
  288. Bitmap maxPaperImage;
  289. Point offset = new Point();
  290. RectF paper;
  291. Path paperBorderClipPath = new Path();
  292. Bitmap paperImage;
  293. Size paperSize;
  294. RectF scanFrame;
  295. Bitmap scanImage;
  296. LayoutStandard(int i, int i2) {
  297. layoutWidth = i;
  298. layoutHeight = i2;
  299. if (optionContext.getCopyOptionItemOf(ECopyOptionItem.ECopyOptionItemKey.XScale).getSelectedChoice() == ECopyOptionItem.ECopyOptionItemChoice.XScale_Autofit) {
  300. autofitEnabled = true;
  301. }
  302. ECopyOptionItem copyOptionItemOf = optionContext.getCopyOptionItemOf(ECopyOptionItem.ECopyOptionItemKey.PrintMediaSize);
  303. switch (copyOptionItemOf.getSelectedChoice()) {
  304. case PrintMediaSize_A4:
  305. paperSize = f360A4;
  306. break;
  307. case PrintMediaSize_B5:
  308. paperSize = f361B5;
  309. break;
  310. case PrintMediaSize_L:
  311. paperSize = f363L;
  312. break;
  313. case PrintMediaSize_2L:
  314. paperSize = f364L2;
  315. break;
  316. case PrintMediaSize_Postcard:
  317. paperSize = Hagaki;
  318. break;
  319. case PrintMediaSize_KG:
  320. paperSize = f362KG;
  321. break;
  322. case PrintMediaSize_8x10in:
  323. paperSize = f365P6;
  324. break;
  325. default:
  326. paperSize = Max;
  327. break;
  328. }
  329. float f = (float) i;
  330. float f2 = (float) i2;
  331. float aspectFitScale = getAspectFitScale(f, f2, (float) paperSize.width, (float) paperSize.height, Layout.AspectFit.Min);
  332. RectF rectF = new RectF(0.0f, 0.0f, (float) paperSize.width, (float) paperSize.height);
  333. scaleRect(aspectFitScale, rectF);
  334. paperImage = Bitmap.createBitmap((int) rectF.width(), (int) rectF.height(), Bitmap.Config.ARGB_8888);
  335. RectF rectF2 = new RectF(0.0f, 0.0f, (float) paperSize.width, (float) paperSize.height);
  336. rectF2.left += 18.0f;
  337. rectF2.top += 18.0f;
  338. rectF2.right -= 18.0f;
  339. rectF2.bottom -= 18.0f;
  340. scaleRect(aspectFitScale, rectF2);
  341. paperBorderClipPath.addRect(rectF2, Path.Direction.CW);
  342. float aspectFitScale2 = getAspectFitScale(f, f2, (float) Max.width, (float) Max.height, Layout.AspectFit.Min);
  343. RectF rectF3 = new RectF(0.0f, 0.0f, (float) Max.width, (float) Max.height);
  344. scaleRect(aspectFitScale2, rectF3);
  345. maxPaperImage = Bitmap.createBitmap((int) rectF3.width(), (int) rectF3.height(), Bitmap.Config.ARGB_8888);
  346. invalidatePaperSize();
  347. }
  348. private Bitmap getBitmap() {
  349. boolean showPaper = showPaper();
  350. Bitmap bitmap = showPaper ? paperImage : maxPaperImage;
  351. canvas = new Canvas(bitmap);
  352. canvas.save();
  353. paperDrawable.setBounds(0, 0, bitmap.getWidth(), bitmap.getHeight());
  354. paperDrawable.draw(canvas);
  355. Bitmap bitmap2 = scanImage;
  356. if (bitmap2 != null) {
  357. if (showPaper) {
  358. float f = copyScale / limitCopyScaleDown;
  359. if (autofitEnabled) {
  360. f = 1.0f / getAspectFitScale(scanFrame.width(), scanFrame.height(), (float) canvas.getWidth(), (float) canvas.getHeight(), Layout.AspectFit.Max);
  361. }
  362. Matrix matrix = new Matrix();
  363. matrix.postScale(f, f);
  364. canvas.clipPath(paperBorderClipPath);
  365. canvas.drawBitmap(scanImage, matrix, (Paint) null);
  366. } else {
  367. canvas.drawBitmap(bitmap2, 0.0f, 0.0f, (Paint) null);
  368. }
  369. }
  370. canvas.restore();
  371. return bitmap;
  372. }
  373. private float getScanImageScale(int i, int i2) {
  374. imageScale = getAspectFitScale((float) (drawSize.width - paperPadding.left) - paperPadding.right), (float) (drawSize.height - paperPadding.top) - paperPadding.bottom), (float) i, (float) i2, Layout.AspectFit.Min);
  375. return imageScale;
  376. }
  377. private void setScanImage(Bitmap bitmap) {
  378. scanImage = bitmap;
  379. }
  380. private Point getOffset() {
  381. return new Point(offset);
  382. }
  383. private void setPaperFrame(RectF rectF) {
  384. scanFrame = new RectF(rectF);
  385. scaleRect(imageScale, scanFrame);
  386. copyFrame = new RectF(rectF);
  387. copyFrame.left += 18.0f;
  388. copyFrame.top += 18.0f;
  389. copyFrame.right -= 36.0f;
  390. copyFrame.bottom -= 36.0f;
  391. scaleRect(imageScale, copyFrame);
  392. calcLimitCopyScaleDown();
  393. invalidatePaperSize();
  394. }
  395. private RectF getCopyFrame() {
  396. RectF rectF;
  397. if (showPaper() || scanImage == null || (rectF = copyFrame) == null) {
  398. return null;
  399. }
  400. RectF rectF2 = new RectF(rectF);
  401. float max = 1.0f / Math.max(copyScale, limitCopyScaleDown);
  402. rectF2.right *= max;
  403. rectF2.bottom *= max;
  404. return rectF2;
  405. }
  406. private void setCopyScale(float f) {
  407. copyScale = f;
  408. invalidatePaperSize();
  409. }
  410. private boolean showPaper() {
  411. boolean z = copyScale < limitCopyScaleDown;
  412. if (autofitEnabled) {
  413. return true;
  414. }
  415. return z;
  416. }
  417. private void invalidatePaperSize() {
  418. Size size = showPaper() ? paperSize : Max;
  419. float aspectFitScale = getAspectFitScale((float) layoutWidth, (float) layoutHeight, (float) size.width, (float) size.height, Layout.AspectFit.Min);
  420. paper = new RectF(0.0f, 0.0f, (float) size.width, (float) size.height);
  421. scaleRect(aspectFitScale, paper);
  422. offset.x = ((int) (((float) layoutWidth) - paper.right)) / 2;
  423. offset.y = ((int) (((float) layoutHeight) - paper.bottom)) / 2;
  424. }
  425. private void calcLimitCopyScaleDown() {
  426. limitCopyScaleDown = getAspectFitScale(copyFrame.right, copyFrame.bottom, paper.width(), paper.height(), Layout.AspectFit.Max);
  427. }
  428. private RectF getPaperRect() {
  429. return new RectF(0.0f, 0.0f, paper.width(), paper.height());
  430. }
  431. }
  432. class LayoutMirror extends LayoutStandard {
  433. LayoutMirror(int i, int i2) {
  434. super(i, i2);
  435. }
  436. private Bitmap getBitmap() {
  437. boolean showPaper = showPaper();
  438. Bitmap bitmap = showPaper ? paperImage : maxPaperImage;
  439. canvas = new Canvas(bitmap);
  440. canvas.save();
  441. paperDrawable.setBounds(0, 0, bitmap.getWidth(), bitmap.getHeight());
  442. paperDrawable.draw(canvas);
  443. if (scanImage != null) {
  444. if (showPaper) {
  445. float f = copyScale / limitCopyScaleDown;
  446. if (autofitEnabled) {
  447. f = 1.0f / getAspectFitScale(scanFrame.width(), scanFrame.height(), (float) canvas.getWidth(), (float) canvas.getHeight(), Layout.AspectFit.Max);
  448. }
  449. Matrix matrix = new Matrix();
  450. matrix.postScale(f, f);
  451. matrix.postTranslate(((float) bitmap.getWidth()) - (((float) scanImage.getWidth()) * f), 0.0f);
  452. canvas.clipPath(paperBorderClipPath);
  453. canvas.drawBitmap(scanImage, matrix, (Paint) null);
  454. } else {
  455. canvas.drawBitmap(scanImage, 0.0f, 0.0f, (Paint) null);
  456. }
  457. }
  458. canvas.restore();
  459. return bitmap;
  460. }
  461. }
  462. class LayoutBorderless extends LayoutStandard {
  463. /* renamed from: BO */
  464. int f367BO;
  465. /* renamed from: LO */
  466. int f368LO;
  467. /* renamed from: RO */
  468. int f369RO;
  469. /* renamed from: TO */
  470. int f370TO;
  471. LayoutBorderless(int i, int i2) {
  472. super(i, i2);
  473. ECopyOptionItem.ECopyOptionItemChoice selectedChoice = optionContext.getCopyOptionItemOf(ECopyOptionItem.ECopyOptionItemKey.PrintMediaSize).getSelectedChoice();
  474. if (selectedChoice == ECopyOptionItem.ECopyOptionItemChoice.PrintMediaSize_KG || selectedChoice == ECopyOptionItem.ECopyOptionItemChoice.PrintMediaSize_L || selectedChoice == ECopyOptionItem.ECopyOptionItemChoice.PrintMediaSize_Postcard) {
  475. f368LO = 15;
  476. f369RO = 15;
  477. f370TO = 8;
  478. f367BO = 15;
  479. return;
  480. }
  481. f368LO = 15;
  482. f369RO = 15;
  483. f370TO = 17;
  484. f367BO = 15;
  485. }
  486. private Bitmap getBitmap() {
  487. boolean showPaper = showPaper();
  488. Bitmap bitmap = showPaper ? paperImage : maxPaperImage;
  489. canvas = new Canvas(bitmap);
  490. canvas.save();
  491. paperDrawable.setBounds(0, 0, bitmap.getWidth(), bitmap.getHeight());
  492. paperDrawable.draw(canvas);
  493. if (scanImage != null) {
  494. if (showPaper) {
  495. float f = copyScale;
  496. if (autofitEnabled) {
  497. f = 1.0f / getAspectFitScale(scanFrame.width(), scanFrame.height(), (float) ((paperImage.getWidth() + f368LO) + f369RO), (float) ((paperImage.getHeight() + f370TO) + f367BO), Layout.AspectFit.Min);
  498. }
  499. Matrix matrix = new Matrix();
  500. matrix.postTranslate((float) (-this.f368LO), (float) (-this.f370TO));
  501. matrix.postScale(f, f);
  502. canvas.drawBitmap(scanImage, matrix, (Paint) null);
  503. } else {
  504. canvas.drawBitmap(scanImage, (float) (-this.f368LO), (float) (-this.f370TO), (Paint) null);
  505. }
  506. }
  507. canvas.restore();
  508. return bitmap;
  509. }
  510. private void setPaperFrame(RectF rectF) {
  511. scanFrame = new RectF(rectF);
  512. scaleRect(imageScale, scanFrame);
  513. copyFrame = new RectF(rectF);
  514. scaleRect(imageScale, copyFrame);
  515. calcLimitCopyScaleDown();
  516. invalidatePaperSize();
  517. f368LO = (int) (((float) f368LO) * imageScale);
  518. f369RO = (int) (((float) f369RO) * imageScale);
  519. f370TO = (int) (((float) f370TO) * imageScale);
  520. f367BO = (int) (((float) f367BO) * imageScale);
  521. }
  522. }
  523. class Layout2Up extends Layout {
  524. RectF copyFrame;
  525. float imageScale;
  526. Point offset = new Point();
  527. RectF page1;
  528. Bitmap page1Bitmap;
  529. RectF page2;
  530. RectF paper;
  531. private RectF getCopyFrame() {
  532. return null;
  533. }
  534. private void setCopyScale(float f) {
  535. }
  536. Layout2Up(int i, int i2) {
  537. Size size = A4_2Up;
  538. Size size2 = A4_2UpPage;
  539. paper = new RectF(0.0f, 0.0f, (float) size.width, (float) size.height);
  540. page1 = new RectF(30.0f, 32.0f, (float) (size2.width + 30), (float) (size2.height + 32));
  541. page2 = new RectF(page1.right + 35.0f, page1.top, page1.right + 35.0f + ((float) size2.width), page1.bottom);
  542. float f = (float) i;
  543. float f2 = (float) i2;
  544. float aspectFitScale = getAspectFitScale(f, f2, (float) size.width, (float) size.height, Layout.AspectFit.Min);
  545. scaleRect(aspectFitScale, paper);
  546. scaleRect(aspectFitScale, page1);
  547. scaleRect(aspectFitScale, page2);
  548. offset.x = ((int) (f - paper.right)) / 2;
  549. offset.y = ((int) (f2 - paper.bottom)) / 2;
  550. }
  551. public Bitmap getBitmap() {
  552. Bitmap createBitmap = Bitmap.createBitmap((int) paper.width(), (int) paper.height(), Bitmap.Config.ARGB_8888);
  553. Canvas canvas = new Canvas(createBitmap);
  554. paperDrawable.setBounds(0, 0, createBitmap.getWidth(), createBitmap.getHeight());
  555. paperDrawable.draw(canvas);
  556. Bitmap createBitmap2 = Bitmap.createBitmap((int) page1.width(), (int) page1.height(), Bitmap.Config.ARGB_8888);
  557. new Canvas(createBitmap2).drawColor(-3355444);
  558. Bitmap bitmap = page1Bitmap;
  559. if (bitmap == null) {
  560. bitmap = createBitmap2;
  561. }
  562. canvas.drawBitmap(bitmap, (Rect) null, page1, (Paint) null);
  563. canvas.drawBitmap(createBitmap2, (Rect) null, page2, (Paint) null);
  564. return createBitmap;
  565. }
  566. private float getScanImageScale(int i, int i2) {
  567. imageScale = getAspectFitScale(page1.width(), page1.height(), (float) i, (float) i2, Layout.AspectFit.Min);
  568. return imageScale;
  569. }
  570. private void setScanImage(Bitmap bitmap) {
  571. Rect rect = new Rect((int) copyFrame.left, (int) copyFrame.top, (int) copyFrame.right, (int) copyFrame.bottom);
  572. page1Bitmap = Bitmap.createBitmap((int) page1.width(), (int) page1.height(), Bitmap.Config.ARGB_8888);
  573. Canvas canvas = new Canvas(page1Bitmap);
  574. canvas.drawBitmap(bitmap, rect, new RectF(0.0f, 0.0f, (float) canvas.getWidth(), (float) canvas.getHeight()), (Paint) null);
  575. }
  576. private Point getOffset() {
  577. return new Point(offset);
  578. }
  579. private void setPaperFrame(RectF rectF) {
  580. copyFrame = new RectF(rectF);
  581. scaleRect(imageScale, copyFrame);
  582. }
  583. private RectF getPaperRect() {
  584. return new RectF(0.0f, 0.0f, paper.width(), paper.height());
  585. }
  586. }
  587. }