1
This repository has been archived on 2025-03-15. You can view files and clone it, but cannot push or open issues or pull requests.
2025-03-15 20:02:21 +01:00

92 lines
2.8 KiB
C#

// Copyright 2016 Google Inc. All rights reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
using UnityEngine;
using UnityEngine.UI;
using System.Collections;
/// Extension of Unity's built-in Scrollbar that integrates with PagedScrollRect.
/// Dragging the scrollbar will control the PagedScrollRect.
/// The Scrollbar will also automatically update when the PagedScrollRect
/// is scrolled directly.
public class PagedScrollBar : Scrollbar {
#if UNITY_HAS_GOOGLEVR && (UNITY_ANDROID || UNITY_EDITOR)
public const string PAGED_SCROLL_RECT_PROP_NAME = "pagedScrollRect";
[SerializeField]
private PagedScrollRect pagedScrollRect;
private bool isDragging = false;
private const float LERP_SPEED = 12.0f;
private bool IsDragging {
get {
return isDragging;
}
set {
if (isDragging == value) {
return;
}
isDragging = value;
if (!isDragging && pagedScrollRect != null) {
pagedScrollRect.SetScrollOffsetOverride(null);
}
}
}
void Update() {
if (pagedScrollRect == null) {
Debug.LogWarning("PagedScrollRect must be set.");
return;
}
// Update the size of the handle in case the PageCount has changed.
float desiredSize = 1.0f / pagedScrollRect.PageCount;
if (size != desiredSize) {
size = desiredSize;
}
if (IsDragging) {
float offset = value * (pagedScrollRect.PageCount - 1) * pagedScrollRect.PageSpacing;
pagedScrollRect.SetScrollOffsetOverride(offset);
} else {
// If the PageCount is 1 make sure we don't divide by zero by just setting the value to 0 directly.
if (pagedScrollRect.PageCount == 1) {
value = 0.0f;
} else {
// Calculate the desired a value of the scrollbar.
float desiredValue = (float) pagedScrollRect.ActivePageIndex / (pagedScrollRect.PageCount - 1);
// Animate towards the desired value.
value = Mathf.Lerp(value, desiredValue, Time.deltaTime * LERP_SPEED);
}
}
}
public override void OnPointerDown(UnityEngine.EventSystems.PointerEventData eventData) {
base.OnPointerDown(eventData);
IsDragging = true;
}
public override void OnPointerUp(UnityEngine.EventSystems.PointerEventData eventData) {
base.OnPointerUp(eventData);
IsDragging = false;
}
#endif // UNITY_HAS_GOOGLEVR &&(UNITY_ANDROID || UNITY_EDITOR
}