123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134 |
- using System.Collections.Generic;
- using UnityEditor.U2D.Animation;
- using UnityEngine;
- using UnityEngine.UIElements;
- namespace UnityEditor.U2D.Layout
- {
- internal class ScrollableToolbar : VisualElement
- {
- public class ScrollableToolbarFactory : UxmlFactory<ScrollableToolbar, ScrollableToolbarUxmlTraits> {}
- public class ScrollableToolbarUxmlTraits : UxmlTraits
- {
- UxmlBoolAttributeDescription m_IsHorizontal;
- public ScrollableToolbarUxmlTraits()
- {
- m_IsHorizontal = new UxmlBoolAttributeDescription { name = "isHorizontal" };
- }
- public override IEnumerable<UxmlChildElementDescription> uxmlChildElementsDescription
- {
- get { yield break; }
- }
- public override void Init(VisualElement ve, IUxmlAttributes bag, CreationContext cc)
- {
- base.Init(ve, bag, cc);
- ScrollableToolbar toolbar = ((ScrollableToolbar)ve);
- toolbar.isHorizontal = m_IsHorizontal.GetValueFromBag(bag, cc);
- }
- }
- private ScrollView m_ScrollView;
- private bool m_IsHorizontal;
- public bool isHorizontal
- {
- get { return m_IsHorizontal; }
- set
- {
- if (m_IsHorizontal != value)
- {
- m_IsHorizontal = value;
- SetupScrolling();
- }
- }
- }
- public ScrollableToolbar() : this(false)
- {
- }
- public ScrollableToolbar(bool isHorizontal)
- {
- m_ScrollView = new ScrollView() {name = "ScrollView"};;
- m_ScrollView.StretchToParentSize();
- hierarchy.Add(m_ScrollView);
- m_IsHorizontal = isHorizontal;
- SetupScrolling();
- styleSheets.Add(ResourceLoader.Load<StyleSheet>("LayoutOverlay/ScrollableToolbar.uss"));
- // TODO: Add onto current ScrollView internal WheelEvent
- m_ScrollView.RegisterCallback<WheelEvent>(OnScrollWheel);
- pickingMode = PickingMode.Ignore;
- m_ScrollView.pickingMode = PickingMode.Ignore;
- m_ScrollView.contentViewport.pickingMode = PickingMode.Ignore;
- m_ScrollView.contentContainer.pickingMode = PickingMode.Ignore;
- }
-
- public void AddToContainer(VisualElement element)
- {
- m_ScrollView.contentContainer.Add(element);
- }
- public void Collapse(bool collapse)
- {
- if (collapse)
- AddToClassList("Collapse");
- else
- RemoveFromClassList("Collapse");
- }
- private void SetupScrolling()
- {
- if (isHorizontal)
- {
- m_ScrollView.style.flexDirection = FlexDirection.Row;
- m_ScrollView.contentViewport.style.marginLeft = 10;
- m_ScrollView.contentViewport.style.marginRight = 10;
- m_ScrollView.contentViewport.style.marginTop = 0;
- m_ScrollView.contentViewport.style.marginBottom = 0;
- m_ScrollView.contentContainer.style.flexDirection = FlexDirection.Row;
- m_ScrollView.contentContainer.style.flexGrow = 1f;
- }
- else
- {
- m_ScrollView.style.flexDirection = FlexDirection.Column;
- m_ScrollView.contentViewport.style.marginLeft = 0;
- m_ScrollView.contentViewport.style.marginRight = 0;
- m_ScrollView.contentViewport.style.marginTop = 10;
- m_ScrollView.contentViewport.style.marginBottom = 10;
- m_ScrollView.contentContainer.style.flexDirection = FlexDirection.Column;
- m_ScrollView.contentContainer.style.flexGrow = 1f;
- }
- }
- void OnScrollWheel(WheelEvent evt)
- {
- /*
- // Handled by ScrollView
- if (!isHorizontal && m_ScrollView.contentContainer.layout.height - layout.height > 0)
- {
- if (evt.delta.y < 0)
- m_ScrollView.verticalScroller.ScrollPageUp();
- else if (evt.delta.y > 0)
- m_ScrollView.verticalScroller.ScrollPageDown();
- }
- */
- if (isHorizontal && m_ScrollView.contentContainer.layout.width - layout.width > 0)
- {
- // TODO: Does not provide delta.x for sidescrolling mouse wheel. Use delta.y for now.
- if (evt.delta.y < 0)
- m_ScrollView.horizontalScroller.ScrollPageUp();
- else if (evt.delta.y > 0)
- m_ScrollView.horizontalScroller.ScrollPageDown();
- }
- evt.StopPropagation();
- }
- }
- }
|