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);
- }
- }
- }
- }
|