Maze / Library /PackageCache /com.unity.collab-proxy@2.0.4 /Editor /PlasticSCM /UI /UIElements /LoadingSpinner.cs
| using UnityEngine; | |
| using UnityEditor; | |
| using UnityEngine.UIElements; | |
| namespace Unity.PlasticSCM.Editor.UI.UIElements | |
| { | |
| internal class LoadingSpinner : VisualElement | |
| { | |
| internal LoadingSpinner() | |
| { | |
| mStarted = false; | |
| // add child elements to set up centered spinner rotation | |
| mSpinner = new VisualElement(); | |
| Add(mSpinner); | |
| mSpinner.style.backgroundImage = Images.GetImage(Images.Name.Loading); | |
| mSpinner.style.position = Position.Absolute; | |
| mSpinner.style.width = 16; | |
| mSpinner.style.height = 16; | |
| mSpinner.style.left = -8; | |
| mSpinner.style.top = -8; | |
| style.position = Position.Relative; | |
| style.width = 16; | |
| style.height = 16; | |
| style.left = 8; | |
| style.top = 8; | |
| } | |
| internal void Dispose() | |
| { | |
| if (mStarted) | |
| EditorApplication.update -= UpdateProgress; | |
| } | |
| internal void Start() | |
| { | |
| if (mStarted) | |
| return; | |
| mRotation = 0; | |
| mLastRotationTime = EditorApplication.timeSinceStartup; | |
| EditorApplication.update += UpdateProgress; | |
| mStarted = true; | |
| } | |
| internal void Stop() | |
| { | |
| if (!mStarted) | |
| return; | |
| EditorApplication.update -= UpdateProgress; | |
| mStarted = false; | |
| } | |
| void UpdateProgress() | |
| { | |
| double currentTime = EditorApplication.timeSinceStartup; | |
| double deltaTime = currentTime - mLastRotationTime; | |
| mSpinner.transform.rotation = Quaternion.Euler(0, 0, mRotation); | |
| transform.rotation = Quaternion.Euler(0, 0, mRotation); | |
| mRotation += (int)(ROTATION_SPEED * deltaTime); | |
| mRotation = mRotation % 360; | |
| if (mRotation < 0) mRotation += 360; | |
| mLastRotationTime = currentTime; | |
| } | |
| int mRotation; | |
| double mLastRotationTime; | |
| bool mStarted; | |
| VisualElement mSpinner; | |
| const int ROTATION_SPEED = 360; // Euler degrees per second | |
| } | |
| } | |