Skip to content

Commit eea86a2

Browse files
committed
Improve Web camera display handling
1 parent 8477edb commit eea86a2

File tree

2 files changed

+19
-11
lines changed

2 files changed

+19
-11
lines changed

misc/camera_feed/camerafeed.gd

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -44,10 +44,6 @@ func _adjust_ui() -> void:
4444
rotation_container.pivot_offset = rotation_container.size / 2
4545
rotation_container.rotation = saved_rotation
4646

47-
if camera_display.resized.is_connected(_adjust_ui):
48-
camera_display.resized.disconnect(_adjust_ui)
49-
camera_display.resized.connect(_adjust_ui, ConnectFlags.CONNECT_ONE_SHOT)
50-
5147

5248
func _reload_camera_list() -> void:
5349
camera_list.clear()
@@ -180,6 +176,10 @@ func _start_camera_feed() -> void:
180176
camera_feed.feed_is_active = true
181177

182178

179+
func _is_mobile_web() -> bool:
180+
return OS.get_name() == "Web" and DisplayServer.is_touchscreen_available()
181+
182+
183183
func _update_scene_transform() -> void:
184184
if not camera_feed or not camera_feed.feed_is_active:
185185
return
@@ -197,13 +197,21 @@ func _update_scene_transform() -> void:
197197
var is_front_camera := camera_feed.get_position() == CameraFeed.FeedPosition.FEED_FRONT
198198
mirror_container.scale = Vector2(-1.0 if is_front_camera else 1.0, 1.0)
199199

200-
rotation_container.rotation = camera_feed.feed_transform.get_rotation()
201-
202-
var display_size := DisplayServer.window_get_size()
203-
if display_size.x > display_size.y:
204-
aspect_container.ratio = preview_size.x / preview_size.y
200+
if OS.get_name() == "Web":
201+
rotation_container.rotation = 0
202+
if _is_mobile_web():
203+
var display_size := DisplayServer.window_get_size()
204+
var device_is_portrait := display_size.x < display_size.y
205+
var preview_is_portrait := preview_size.x < preview_size.y
206+
if device_is_portrait == preview_is_portrait:
207+
aspect_container.ratio = preview_size.x / preview_size.y
208+
else:
209+
aspect_container.ratio = preview_size.y / preview_size.x
210+
else:
211+
aspect_container.ratio = preview_size.x / preview_size.y
205212
else:
206-
aspect_container.ratio = preview_size.y / preview_size.x
213+
rotation_container.rotation = camera_feed.feed_transform.get_rotation()
214+
aspect_container.ratio = preview_size.x / preview_size.y
207215

208216

209217
func _get_preview_size(mat: ShaderMaterial) -> Vector2:
@@ -313,6 +321,7 @@ func _notification(what: int) -> void:
313321
match what:
314322
NOTIFICATION_RESIZED, NOTIFICATION_WM_SIZE_CHANGED:
315323
_adjust_ui()
324+
_update_scene_transform()
316325

317326

318327
func _exit_tree() -> void:

misc/camera_feed/camerafeed.tscn

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,6 @@ stretch_mode = 3
9797
material = SubResource("ShaderMaterial_lgiw1")
9898
layout_mode = 2
9999
expand_mode = 1
100-
stretch_mode = 6
101100

102101
[node name="DrawerContainer" type="Control" parent="."]
103102
modulate = Color(1, 1, 1, 0.5019608)

0 commit comments

Comments
 (0)