| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226 | using UnityEngine;using FairyGUI.Utils;namespace FairyGUI{    /// <summary>    /// GScrollBar class.    /// </summary>    public class GScrollBar : GComponent    {        GObject _grip;        GObject _arrowButton1;        GObject _arrowButton2;        GObject _bar;        ScrollPane _target;        bool _vertical;        float _scrollPerc;        bool _fixedGripSize;        bool _gripDragging;        Vector2 _dragOffset;        public GScrollBar()        {            _scrollPerc = 0;        }        /// <summary>        ///         /// </summary>        /// <param name="target"></param>        /// <param name="vertical"></param>        public void SetScrollPane(ScrollPane target, bool vertical)        {            _target = target;            _vertical = vertical;        }        /// <summary>        ///         /// </summary>        public void SetDisplayPerc(float value)        {            if (_vertical)            {                if (!_fixedGripSize)                    _grip.height = Mathf.FloorToInt(value * _bar.height);                _grip.y = Mathf.RoundToInt(_bar.y + (_bar.height - _grip.height) * _scrollPerc);            }            else            {                if (!_fixedGripSize)                    _grip.width = Mathf.FloorToInt(value * _bar.width);                _grip.x = Mathf.RoundToInt(_bar.x + (_bar.width - _grip.width) * _scrollPerc);            }            _grip.visible = value != 0 && value != 1;        }        /// <summary>        ///         /// </summary>        public void setScrollPerc(float value)        {            _scrollPerc = value;            if (_vertical)                _grip.y = Mathf.RoundToInt(_bar.y + (_bar.height - _grip.height) * _scrollPerc);            else                _grip.x = Mathf.RoundToInt(_bar.x + (_bar.width - _grip.width) * _scrollPerc);        }        /// <summary>        ///         /// </summary>        public float minSize        {            get            {                if (_vertical)                    return (_arrowButton1 != null ? _arrowButton1.height : 0) + (_arrowButton2 != null ? _arrowButton2.height : 0);                else                    return (_arrowButton1 != null ? _arrowButton1.width : 0) + (_arrowButton2 != null ? _arrowButton2.width : 0);            }        }        /// <summary>        ///         /// </summary>        public bool gripDragging        {            get            {                return _gripDragging;            }        }        override protected void ConstructExtension(ByteBuffer buffer)        {            buffer.Seek(0, 6);            _fixedGripSize = buffer.ReadBool();            _grip = GetChild("grip");            if (_grip == null)            {                Debug.LogWarning("FairyGUI: " + this.resourceURL + " should define grip");                return;            }            _bar = GetChild("bar");            if (_bar == null)            {                Debug.LogWarning("FairyGUI: " + this.resourceURL + " should define bar");                return;            }            _arrowButton1 = GetChild("arrow1");            _arrowButton2 = GetChild("arrow2");            _grip.onTouchBegin.Add(__gripTouchBegin);            _grip.onTouchMove.Add(__gripTouchMove);            _grip.onTouchEnd.Add(__gripTouchEnd);            this.onTouchBegin.Add(__touchBegin);            if (_arrowButton1 != null)                _arrowButton1.onTouchBegin.Add(__arrowButton1Click);            if (_arrowButton2 != null)                _arrowButton2.onTouchBegin.Add(__arrowButton2Click);        }        void __gripTouchBegin(EventContext context)        {            if (_bar == null)                return;            context.StopPropagation();            InputEvent evt = context.inputEvent;            if (evt.button != 0)                return;            context.CaptureTouch();            _gripDragging = true;            _target.UpdateScrollBarVisible();            _dragOffset = this.GlobalToLocal(new Vector2(evt.x, evt.y)) - _grip.xy;        }        void __gripTouchMove(EventContext context)        {            InputEvent evt = context.inputEvent;            Vector2 pt = this.GlobalToLocal(new Vector2(evt.x, evt.y));            if (float.IsNaN(pt.x))                return;            if (_vertical)            {                float curY = pt.y - _dragOffset.y;                float diff = _bar.height - _grip.height;                if (diff == 0)                    _target.percY = 0;                else                    _target.percY = (curY - _bar.y) / diff;            }            else            {                float curX = pt.x - _dragOffset.x;                float diff = _bar.width - _grip.width;                if (diff == 0)                    _target.percX = 0;                else                    _target.percX = (curX - _bar.x) / diff;            }        }        void __gripTouchEnd(EventContext context)        {            _gripDragging = false;            _target.UpdateScrollBarVisible();        }        void __arrowButton1Click(EventContext context)        {            context.StopPropagation();            if (_vertical)                _target.ScrollUp();            else                _target.ScrollLeft();        }        void __arrowButton2Click(EventContext context)        {            context.StopPropagation();            if (_vertical)                _target.ScrollDown();            else                _target.ScrollRight();        }        void __touchBegin(EventContext context)        {            context.StopPropagation();            InputEvent evt = context.inputEvent;            Vector2 pt = _grip.GlobalToLocal(new Vector2(evt.x, evt.y));            if (_vertical)            {                if (pt.y < 0)                    _target.ScrollUp(4, false);                else                    _target.ScrollDown(4, false);            }            else            {                if (pt.x < 0)                    _target.ScrollLeft(4, false);                else                    _target.ScrollRight(4, false);            }        }    }}
 |