Don't need to block multiple thread access. Refactor and update a bit for an upcoming...
[zxing.git] / android / src / com / google / zxing / client / android / ViewfinderView.java
index b972077..4809c65 100755 (executable)
@@ -16,6 +16,9 @@
 
 package com.google.zxing.client.android;
 
+import com.google.zxing.ResultPoint;
+import com.google.zxing.client.android.camera.CameraManager;
+
 import android.content.Context;
 import android.content.res.Resources;
 import android.graphics.Bitmap;
@@ -24,7 +27,6 @@ import android.graphics.Paint;
 import android.graphics.Rect;
 import android.util.AttributeSet;
 import android.view.View;
-import com.google.zxing.ResultPoint;
 
 import java.util.Collection;
 import java.util.HashSet;
@@ -36,6 +38,7 @@ import java.util.HashSet;
  * @author dswitkin@google.com (Daniel Switkin)
  */
 public final class ViewfinderView extends View {
+
   private static final int[] SCANNER_ALPHA = {0, 64, 128, 192, 255, 192, 128, 64};
   private static final long ANIMATION_DELAY = 100L;
   private static final int OPAQUE = 0xFF;
@@ -86,7 +89,7 @@ public final class ViewfinderView extends View {
     if (resultBitmap != null) {
       // Draw the opaque result bitmap over the scanning rectangle
       paint.setAlpha(OPAQUE);
-      canvas.drawBitmap(resultBitmap, frame.left, frame.top, paint);
+      canvas.drawBitmap(resultBitmap, null, frame, paint);
     } else {
 
       // Draw a two pixel solid black border inside the framing rect
@@ -102,6 +105,10 @@ public final class ViewfinderView extends View {
       scannerAlpha = (scannerAlpha + 1) % SCANNER_ALPHA.length;
       int middle = frame.height() / 2 + frame.top;
       canvas.drawRect(frame.left + 2, middle - 1, frame.right - 1, middle + 2, paint);
+      
+      Rect previewFrame = CameraManager.get().getFramingRectInPreview();
+      float scaleX = frame.width() / (float) previewFrame.width();
+      float scaleY = frame.height() / (float) previewFrame.height();
 
       Collection<ResultPoint> currentPossible = possibleResultPoints;
       Collection<ResultPoint> currentLast = lastPossibleResultPoints;
@@ -113,14 +120,18 @@ public final class ViewfinderView extends View {
         paint.setAlpha(OPAQUE);
         paint.setColor(resultPointColor);
         for (ResultPoint point : currentPossible) {
-          canvas.drawCircle(frame.left + point.getX(), frame.top + point.getY(), 6.0f, paint);
+          canvas.drawCircle(frame.left + (int) (point.getX() * scaleX),
+                            frame.top + (int) (point.getY() * scaleY),
+                            6.0f, paint);
         }
       }
       if (currentLast != null) {
         paint.setAlpha(OPAQUE / 2);
         paint.setColor(resultPointColor);
         for (ResultPoint point : currentLast) {
-          canvas.drawCircle(frame.left + point.getX(), frame.top + point.getY(), 3.0f, paint);
+          canvas.drawCircle(frame.left + (int) (point.getX() * scaleX),
+                            frame.top + (int) (point.getY() * scaleY),
+                            3.0f, paint);
         }
       }