Skip to content

Commit 1abcf53

Browse files
author
farfromrefug
committed
feat: frontMirrored property
1 parent c74487e commit 1abcf53

File tree

5 files changed

+52
-0
lines changed

5 files changed

+52
-0
lines changed

packages/ui-cameraview/platforms/android/java/com/nativescript/cameraview/CameraView.kt

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,18 @@ constructor(context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0
153153
}
154154
}
155155

156+
var frontMirrored: Boolean = false
157+
set(value) {
158+
field = value
159+
if (value && position == CameraSelector.LENS_FACING_FRONT) {
160+
previewView.setImplementationMode(PreviewView.ImplementationMode.COMPATIBLE)
161+
previewView.scaleX = -1f // Mirror horizontally
162+
} else {
163+
previewView.setImplementationMode(PreviewView.ImplementationMode.PERFORMANCE)
164+
previewView.scaleX = 1f
165+
}
166+
}
167+
156168
private fun handleZoom() {
157169
camera?.cameraControl?.let {
158170
val future = it.setZoomRatio(zoom.coerceIn(minZoom, maxZoom))
@@ -1696,6 +1708,13 @@ constructor(context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0
16961708
}
16971709
safeUnbindAll()
16981710
refreshCamera()
1711+
if (frontMirrored && position == CameraSelector.LENS_FACING_FRONT) {
1712+
previewView.setImplementationMode(PreviewView.ImplementationMode.COMPATIBLE)
1713+
previewView.scaleX = -1f // Mirror horizontally
1714+
} else {
1715+
previewView.setImplementationMode(PreviewView.ImplementationMode.PERFORMANCE)
1716+
previewView.scaleX = 1f
1717+
}
16991718
}
17001719
}
17011720

packages/ui-cameraview/platforms/ios/src/NSCameraView.swift

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,22 @@ public class NSCameraView: UIView, NextLevelVideoDelegate, NextLevelPhotoDelegat
6262
self.nextLevel?.previewLayer.videoGravity = AVLayerVideoGravity(rawValue: newValue)
6363
}
6464
}
65+
66+
private var _frontMirrored: Bool
67+
public var frontMirrored: Bool {
68+
get {
69+
return self.frontMirrored
70+
}
71+
set {
72+
self._frontMirrored = newValue
73+
if newValue && let previewLayer = nextLevel.previewLayer {
74+
previewLayer.connection?.automaticallyAdjustsVideoMirroring = false
75+
previewLayer.connection?.isVideoMirrored = false // or true if you want mirrored
76+
} else {
77+
previewLayer.connection?.automaticallyAdjustsVideoMirroring = true
78+
}
79+
}
80+
}
6581

6682
public var flashMode: Int {
6783
get {
@@ -173,6 +189,12 @@ public class NSCameraView: UIView, NextLevelVideoDelegate, NextLevelPhotoDelegat
173189
}
174190
public func toggleCamera() {
175191
self.nextLevel?.flipCaptureDevicePosition()
192+
if self_frontMirrored && let previewLayer = nextLevel.previewLayer {
193+
previewLayer.connection?.automaticallyAdjustsVideoMirroring = false
194+
previewLayer.connection?.isVideoMirrored = false // or true if you want mirrored
195+
} else {
196+
previewLayer.connection?.automaticallyAdjustsVideoMirroring = true
197+
}
176198
}
177199
public func focusAtAdjustedPointOfInterest(_ adjustedPoint: CGPoint){
178200
self.nextLevel?.focusAtAdjustedPointOfInterest(adjustedPoint: adjustedPoint)

src/ui-cameraview/index.android.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import {
88
captureModeProperty,
99
enablePinchZoomProperty,
1010
flashModeProperty,
11+
frontMirroredProperty,
1112
jpegQualityProperty,
1213
pictureSizeProperty,
1314
saveToGalleryProperty,
@@ -270,6 +271,9 @@ export class CameraView extends CameraViewBase {
270271
[aspectRatioProperty.setNative](value) {
271272
this.nativeViewProtected.setAspectRatio(value);
272273
}
274+
[frontMirroredProperty.setNative](value) {
275+
this.nativeViewProtected.setFrontMirrored(value);
276+
}
273277
[flashModeProperty.setNative](value: string | number) {
274278
if (typeof value === 'number') {
275279
this.nativeViewProtected.setFlashMode(java.lang.Integer.valueOf(value));

src/ui-cameraview/index.common.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,11 @@ export const autoFocusProperty = new Property<CameraViewBase, boolean | number>(
5757
defaultValue: false,
5858
valueConverter: (v) => (v === 'false' || v === 'true' ? booleanConverter(v) : parseInt(v, 10))
5959
});
60+
export const frontMirroredProperty = new Property<CameraViewBase, boolean>({
61+
name: 'frontMirrored',
62+
defaultValue: false,
63+
valueConverter: booleanConverter
64+
});
6065
export const saveToGalleryProperty = new Property<CameraViewBase, boolean>({
6166
name: 'saveToGallery',
6267
defaultValue: false,
@@ -96,3 +101,4 @@ enablePinchZoomProperty.register(CameraViewBase);
96101
saveToGalleryProperty.register(CameraViewBase);
97102
stretchProperty.register(CameraViewBase);
98103
aspectRatioProperty.register(CameraViewBase);
104+
frontMirroredProperty.register(CameraViewBase);

src/ui-cameraview/typings/android.d.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -334,6 +334,7 @@ declare namespace com {
334334
public setSavePhotoToDisk(param0: boolean): void;
335335
public getCameras(): java.util.List<Camera>;
336336
public setAspectRatio(param0: string): void;
337+
public setFrontMirrored(param0: boolean): void;
337338
public getAmplitudeEMA(): number;
338339
public getCurrentResolutionInfo(): string;
339340
public getPause(): boolean;

0 commit comments

Comments
 (0)