Skip to content

Commit abd6761

Browse files
committed
fixed camera reel thumbnail scroll masking
1 parent 66532b9 commit abd6761

File tree

6 files changed

+92
-1
lines changed

6 files changed

+92
-1
lines changed

unity-renderer/Assets/DCLFeatures/CameraReel/CameraReel.asmdef

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,8 @@
2828
"GUID:6426fc92c49cbb342916620a1009be8d",
2929
"GUID:fd6a19eb8dfe417a84a27e537222d98d",
3030
"GUID:4720e174f2805c74bb7aa94cc8bb5bf8",
31-
"GUID:99cea83ca76dcd846abed7e61a8c90bd"
31+
"GUID:99cea83ca76dcd846abed7e61a8c90bd",
32+
"GUID:6e9be8e4a71701b48b60c8881e27a0e3"
3233
],
3334
"includePlatforms": [],
3435
"excludePlatforms": [],

unity-renderer/Assets/DCLFeatures/CameraReel/Gallery/Prefabs/GalleryView.prefab

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -645,6 +645,7 @@ MonoBehaviour:
645645
showMoreButtonPanel: {fileID: 4290208090933550867}
646646
canvas: {fileID: 2452549162064602847}
647647
emptyStateContainer: {fileID: 8552701980970885336}
648+
scrollMaskTransform: {fileID: 8598900832005062844}
648649
monthHeaderPrefab: {fileID: 816142868648288106, guid: 4631d5288231697489b884df705df08e,
649650
type: 3}
650651
monthGridContainerPrefab: {fileID: 6408376535620168257, guid: ec6e563cf5a659e4c8d81d46d9a8eec2,

unity-renderer/Assets/DCLFeatures/CameraReel/Gallery/Prefabs/ScreenshotThumbnail.prefab

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -843,6 +843,7 @@ GameObject:
843843
- component: {fileID: 2566079238092881621}
844844
- component: {fileID: 8156839644814245974}
845845
- component: {fileID: 6465448134092813593}
846+
- component: {fileID: 6784646814467949724}
846847
m_Layer: 5
847848
m_Name: ScreenshotThumbnail
848849
m_TagString: Untagged
@@ -1055,6 +1056,20 @@ MonoBehaviour:
10551056
m_BlockingMask:
10561057
serializedVersion: 2
10571058
m_Bits: 4294967295
1059+
--- !u!114 &6784646814467949724
1060+
MonoBehaviour:
1061+
m_ObjectHideFlags: 0
1062+
m_CorrespondingSourceObject: {fileID: 0}
1063+
m_PrefabInstance: {fileID: 0}
1064+
m_PrefabAsset: {fileID: 0}
1065+
m_GameObject: {fileID: 3698480427522893417}
1066+
m_Enabled: 1
1067+
m_EditorHideFlags: 0
1068+
m_Script: {fileID: 11500000, guid: 02d167b0ab684984b0ac522278bcd459, type: 3}
1069+
m_Name:
1070+
m_EditorClassIdentifier:
1071+
maskRectTransform: {fileID: 0}
1072+
offset: {x: 0, y: -70}
10581073
--- !u!1 &4314700736003648970
10591074
GameObject:
10601075
m_ObjectHideFlags: 0

unity-renderer/Assets/DCLFeatures/CameraReel/Gallery/Scripts/CameraReelGalleryView.cs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using Cysharp.Threading.Tasks;
2+
using DCL.Components.UI;
23
using DCL.Helpers;
34
using DCL.Tasks;
45
using DCLServices.CameraReelService;
@@ -25,6 +26,7 @@ public class CameraReelGalleryView : MonoBehaviour
2526
[SerializeField] private RectTransform showMoreButtonPanel;
2627
[SerializeField] private Canvas canvas;
2728
[SerializeField] private GameObject emptyStateContainer;
29+
[SerializeField] private RectTransform scrollMaskTransform;
2830

2931
[Header("RESOURCES")]
3032
[SerializeField] private GameObject monthHeaderPrefab;
@@ -95,6 +97,13 @@ public void AddScreenshotThumbnail(CameraReelResponse reel, bool setAsFirst)
9597
thumbnail.Show(reel);
9698
thumbnail.OnClicked += () => ScreenshotThumbnailClicked?.Invoke(reel);
9799

100+
// The thumbnail has an internal Canvas to be able to override the Z sorting when playing animations
101+
// but this messes up the UI masking
102+
// As a workaround, a manual masking is applied to the thumbnail given by the current's mask rectangle
103+
MaskCanvasRenderer masking = thumbnail.GetComponent<MaskCanvasRenderer>();
104+
if (masking)
105+
masking.MaskRectTransform = scrollMaskTransform;
106+
98107
if (setAsFirst)
99108
thumbnail.transform.SetAsFirstSibling();
100109

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
using System.Linq;
2+
using UnityEngine;
3+
4+
namespace DCL.Components.UI
5+
{
6+
[RequireComponent(typeof(CanvasRenderer))]
7+
public class MaskCanvasRenderer : MonoBehaviour
8+
{
9+
[SerializeField] private RectTransform maskRectTransform;
10+
[SerializeField] private Vector2 offset;
11+
12+
public RectTransform MaskRectTransform
13+
{
14+
get => maskRectTransform;
15+
16+
set
17+
{
18+
maskRectTransform = value;
19+
20+
if (enabled)
21+
SetTargetClippingRect();
22+
}
23+
}
24+
25+
private CanvasRenderer canvasRenderer;
26+
private Canvas rootCanvas;
27+
28+
private void Awake()
29+
{
30+
canvasRenderer = GetComponent<CanvasRenderer>();
31+
rootCanvas = transform.GetComponentsInParent<Canvas>().FirstOrDefault(canvas => canvas.isRootCanvas);
32+
}
33+
34+
private void OnEnable()
35+
{
36+
SetTargetClippingRect();
37+
}
38+
39+
private void OnDisable()
40+
{
41+
canvasRenderer.DisableRectClipping();
42+
}
43+
44+
private void OnRectTransformDimensionsChange()
45+
{
46+
SetTargetClippingRect();
47+
}
48+
49+
private void SetTargetClippingRect()
50+
{
51+
if (rootCanvas == null) return;
52+
if (canvasRenderer == null) return;
53+
if (maskRectTransform == null) return;
54+
55+
Rect rect = maskRectTransform.rect;
56+
// Get local position of maskRect as if it was direct child of root canvas, then offset mask rect by that amount
57+
rect.center += (Vector2)rootCanvas.transform.InverseTransformPoint(maskRectTransform.position);
58+
rect.center += offset;
59+
canvasRenderer.EnableRectClipping(rect);
60+
}
61+
}
62+
}

unity-renderer/Assets/Scripts/MainScripts/DCL/Components/UI/MaskCanvasRenderer.cs.meta

Lines changed: 3 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)