react-native-rectangle-doc-scanner 7.44.0 → 7.46.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -581,23 +581,37 @@ class CameraController(
581
581
 
582
582
  if (rotation == Surface.ROTATION_90 || rotation == Surface.ROTATION_270) {
583
583
  // When rotated 90/270, preview dimensions are swapped
584
- val swappedWidth = preview.height.toFloat()
585
- val swappedHeight = preview.width.toFloat()
586
-
587
- // Android: Use 85% of view height to add 15% padding (7.5% top + 7.5% bottom)
588
- val effectiveViewHeight = viewHeight * 0.85f
589
- val verticalPadding = (viewHeight - effectiveViewHeight) / 2f
590
-
591
- // Calculate scale to fit within the effective area while maintaining aspect ratio
592
- val scaleX = viewWidth / swappedWidth
593
- val scaleY = effectiveViewHeight / swappedHeight
594
- val scale = min(scaleX, scaleY)
595
-
596
- // Apply transformations: first rotate, then scale
597
- matrix.postRotate(90f * (rotation - 2), centerX, centerY)
598
- matrix.postScale(scale, scale, centerX, centerY)
584
+ val bufferWidth = preview.height.toFloat() // 1088
585
+ val bufferHeight = preview.width.toFloat() // 1920
586
+
587
+ // Android: Use 90% of view height for 10% vertical padding
588
+ val effectiveHeight = viewHeight * 0.90f
589
+
590
+ // Calculate scale to fit the preview proportionally
591
+ // Use min to ensure entire preview fits (no cropping, no stretching)
592
+ val scaleX = viewWidth / bufferWidth
593
+ val scaleY = effectiveHeight / bufferHeight
594
+ val scale = min(scaleX, scaleY) // This maintains aspect ratio
595
+
596
+ // Create swap buffer rect (before rotation: height x width)
597
+ val bufferRect = RectF(0f, 0f, bufferHeight, bufferWidth)
598
+
599
+ // Apply the transformation
600
+ // 1. Scale uniformly to fit in view
601
+ matrix.postScale(scale, scale)
602
+
603
+ // 2. Rotate 90 degrees
604
+ val scaledWidth = bufferWidth * scale
605
+ val scaledHeight = bufferHeight * scale
606
+ matrix.postRotate(90f * (rotation - 2), scaledHeight / 2f, scaledWidth / 2f)
607
+
608
+ // 3. Center in view
609
+ matrix.postTranslate(
610
+ centerX - scaledHeight / 2f,
611
+ centerY - scaledWidth / 2f
612
+ )
599
613
 
600
- Log.d(TAG, "[TRANSFORM] Android tablet mode: effectiveHeight=$effectiveViewHeight, padding=$verticalPadding, scale=$scale")
614
+ Log.d(TAG, "[TRANSFORM] Android: buffer=${bufferWidth}x${bufferHeight}, scale=$scale, final=${scaledWidth}x${scaledHeight}")
601
615
  } else if (rotation == Surface.ROTATION_180) {
602
616
  matrix.postRotate(180f, centerX, centerY)
603
617
  } else {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-native-rectangle-doc-scanner",
3
- "version": "7.44.0",
3
+ "version": "7.46.0",
4
4
  "description": "Native-backed document scanner for React Native with customizable overlays.",
5
5
  "license": "MIT",
6
6
  "main": "dist/index.js",