Files
BABA_YAGA/Packages/app.rive.rive-unity/Runtime/Components/CanvasRendererRawImage.cs
2026-05-19 17:39:03 +07:00

87 lines
2.4 KiB
C#

using UnityEngine;
using UnityEngine.UI;
namespace Rive.Components
{
/// <summary>
/// A RawImage that can display Rive content. Also used to display Rive content in the editor.
/// </summary>
internal class CanvasRendererRawImage : RawImage
{
#if UNITY_EDITOR
private Texture m_editorPreviewTexture;
private bool m_isPopulatingMesh = false;
internal void UpdateEditorPreview(Texture previewTexture)
{
if (Application.isPlaying) return;
if (m_editorPreviewTexture != previewTexture)
{
m_editorPreviewTexture = previewTexture;
// we're using SetAllDirty() to mark the graphic for rebuilding
SetAllDirty();
}
}
internal void CleanupEditorPreview()
{
if (!Application.isPlaying)
{
m_editorPreviewTexture = null;
SetAllDirty();
}
}
protected override void OnDisable()
{
base.OnDisable();
if (!Application.isPlaying)
{
CleanupEditorPreview();
}
}
protected override void OnDestroy()
{
base.OnDestroy();
if (!Application.isPlaying)
{
CleanupEditorPreview();
}
}
protected override void OnRectTransformDimensionsChange()
{
base.OnRectTransformDimensionsChange();
if (!Application.isPlaying)
{
SetAllDirty();
}
}
// We need to override mainTexture to return the editor preview texture when not playing
// We do this to avoid dirtying the scene view when the editor preview texture changes
public override Texture mainTexture
{
get
{
if (!Application.isPlaying && m_editorPreviewTexture != null)
{
return m_editorPreviewTexture;
}
return base.mainTexture;
}
}
protected override void OnPopulateMesh(VertexHelper vh)
{
// We've added an m_isPopulatingMesh flag to prevent recursive calls to OnPopulateMesh.
if (m_isPopulatingMesh) return;
m_isPopulatingMesh = true;
base.OnPopulateMesh(vh);
m_isPopulatingMesh = false;
}
#endif
}
}