You.i Engine
YiScrollController.h
Go to the documentation of this file.
1 // © You i Labs Inc. 2000-2017. All rights reserved.
2 #ifndef _YI_SCROLL_CONTROLLER_H_
3 #define _YI_SCROLL_CONTROLLER_H_
4 
7 #include "framework/YiPredef.h"
8 
9 class CYIInputInterpreter;
10 
17 {
19 
20  float fDelta;
21  float fSpeed;
22  float fEventPos;
23  int32_t nPageBefore;
24  int32_t nPageAfter;
27 };
28 
38 {
39 public:
40 
46  {
47  public:
48  virtual ~ScrollListener() {}
52  virtual void OnScrollStarted(CYIScrollController * /*pControl*/) {};
56  virtual void OnScrollEnded(CYIScrollController * /*pControl*/) {};
62  virtual void OnScrollAuto(CYIScrollController * /*pControl*/) {};
66  virtual void OnScrolled(CYIScrollController * /*pControl*/, YI_SCROLLED_INFO /*scrolledInfo*/) {};
67  };
68 
77  {
78  public:
79  virtual ~OutOfRangeListener() {}
80 
84  virtual void OnOutOfRangeAtStart(CYIScrollController * /*pControl*/, float /*fOutOfRange*/, float /*fDelta*/){};
88  virtual void OnOutOfRangeAtEnd(CYIScrollController * /*pControl*/, float /*fOutOfRange*/, float /*fDelta*/){};
89 
93  virtual void OnOutOfRangeAtStartDirectionChanged(CYIScrollController * /*pControl*/, float /*fOutOfRange*/, float /*fDelta*/){};
97  virtual void OnOutOfRangeAtEndDirectionChanged(CYIScrollController * /*pControl*/, float /*fOutOfRange*/, float /*fDelta*/){};
101  virtual void OnOutOfRangeAtStartSnapBack(CYIScrollController * /*pControl*/, float /*fOutOfRange*/){};
105  virtual void OnOutOfRangeAtEndSnapBack(CYIScrollController * /*pControl*/, float /*fOutOfRange*/){};
109  virtual void OnOutOfRangeAtStartBegan(CYIScrollController * /*pControl*/, float /*fOutOfRange*/, float /*fDelta*/){};
113  virtual void OnOutOfRangeAtEndBegan(CYIScrollController * /*pControl*/, float /*fOutOfRange*/, float /*fDelta*/){};
117  virtual void OnOutOfRangeAtStartFinished(CYIScrollController * /*pControl*/) {};
121  virtual void OnOutOfRangeAtEndFinished (CYIScrollController * /*pControl*/) {};
122  };
123 
125  virtual ~CYIScrollController() override;
126 
130  void SetSnapBackDur(uint64_t uSnapBackDur);
134  uint64_t GetSnapBackDur() const;
135 
139  void SetFrictionCoeff(float fFrictionCoefficient);
143  void SetMaxVelocityCoeff(float fMaxVelocityCoefficient);
144 
148  void SetScrollListener(ScrollListener *pListener);
152  void SetOutOfRangeListener(OutOfRangeListener *pListener);
153 
158  void GetDataRange(float *pStart, float *pSize) const;
163  void SetDataRange(float fDataStart, float fDataSize, bool bAnimate = true);
168  void SetMagnetRules(bool bSnapBack, float fSnapBackStart, float fSnapBackEnd, float fMaxOutOfRangeStart, float fMaxOutOfRangeEnd);
169 
175  void SetCarousel(bool bCarousel);
176 
182  void MoveBy(float fDelta, float fEventPos = 0, bool bAllowOutOfRange = false, bool bNotifyListener = true);
183 
191  void MoveByAnimate(float fDelta, uint64_t uDur, CYITimeInterpolator *pInterpolator = nullptr, bool bAllowOutOfRange = true);
200  void MoveToPercentage(float fPercentage, bool bNotifyListener = true);
210  void MoveToPercentageAnimate(float fPercentage, uint64_t uDur, CYITimeInterpolator *pInterpolator = nullptr);
214  void StopScrolling();
218  bool IsScrolling() const;
222  float GetPctPos() const;
226  int64_t GetCurrentVelocity() const;
232  void GetCurrentWindowPos(float *pStart, float *pEnd) const;
238  float GetDataStart() const;
239 
243  float GetScrollStartPos() const;
249  void Reset();
250 
260  void SetPageSize(float fPageSize, bool bAlwaysCenterOnPage = false, bool bSwipeToNextPage = false);
266  float GetPageSize() const;
272  bool GetAlwaysCenterOnPage() const;
278  int32_t GetCurPage() const;
285  int32_t GetPageCount() const;
291  float CalculatePageOffset(int32_t nPage) const;
297  float CalculateOffsetToNearestPage(float fMoveBy) const;
298 
302  float CalculateCenterOffset() const;
303 
313  virtual float CalculateSnapBackOffset() const;
314 
318  void GestureStart(float fPos, uint64_t uEventTimeMs);
322  void GestureMove(float fPos, uint64_t uEventTimeMs);
326  void GestureEnd(float fPos, uint64_t uEventTimeMs);
327 
333  void SetDecelerationDuration(uint32_t uDurationMs);
334 
340  virtual uint32_t GetDecelerationDuration() const;
341 
345  float GetScrollDelta() const;
346 
350  float GetCompletedScrollDelta() const;
351 
352 protected:
353 
360  virtual bool AdjustMoveBy(float *pMoveBy, const float &fDataEnd) const;
364  virtual bool AdjustMoveByNoOutOfRange(float *pMoveBy) const;
370  virtual bool AdjustMoveByNoOutOfRangeDuringDecelerate(float *pMoveBy, int32_t nDir);
371 
375  void AnimateMoveBy(float fDelta, uint64_t uDur, bool bCanCancel, CYITimeInterpolator *pInterpolator = nullptr);
379  void Decelerate();
385  void FinishMoveBy();
391  bool SnapBack(bool bAnimate = true);
392 
396  virtual void OnAnimate(CYIAnimation *pAnim, float fDataPosition) override;
400  virtual void OnAnimationBegin(CYIAnimation *pAnim) override;
401 
405  virtual void OnAnimationEnd(CYIAnimation *pAnim) override;
406 
411  void StartScroll(bool bAlreadyScrolling);
415  void EndScroll();
419  void AutoScroll();
420 
426  float GetDataEnd() const;
427 
433  bool IsOutOfRange(float fOffset = 0.0f) const;
434 
438  float CalculateSnapBackOffset(float fDataStart) const;
439 
441  float m_fDataSize;
444 
447 
449 
457  float m_fPageSize;
459 
460  uint64_t m_uSnapBackDur;
463 
467 
473 
476 
477  CYIInputInterpreter *m_pGestureData;
478 
479 private:
481 };
482 
485 #endif // _YI_SCROLL_CONTROLLER_H_
float m_fAnticipatedDataEnd
Definition: YiScrollController.h:443
bool m_bAllowOutOfRangeOnAnimateMoveBy
Definition: YiScrollController.h:472
Container for basic interpolator functions.
Definition: YiTimeInterpolator.h:21
virtual ~OutOfRangeListener()
Definition: YiScrollController.h:79
bool bReachedEnd
Definition: YiScrollController.h:26
#define YI_DISALLOW_COPY_AND_ASSIGN(TypeName)
Delete the copy constructor and assignment operator (and consequently the move constructor as well) ...
Definition: YiPredef.h:114
virtual void OnOutOfRangeAtStartSnapBack(CYIScrollController *, float)
Definition: YiScrollController.h:101
uint64_t m_uSnapBackDur
Definition: YiScrollController.h:460
virtual void OnOutOfRangeAtStart(CYIScrollController *, float, float)
Definition: YiScrollController.h:84
virtual void OnOutOfRangeAtEndFinished(CYIScrollController *)
Definition: YiScrollController.h:121
virtual void OnScrollStarted(CYIScrollController *)
Definition: YiScrollController.h:52
float fSpeed
Definition: YiScrollController.h:21
virtual void OnOutOfRangeAtEndSnapBack(CYIScrollController *, float)
Definition: YiScrollController.h:105
virtual void OnScrolled(CYIScrollController *, YI_SCROLLED_INFO)
Definition: YiScrollController.h:66
bool m_bMoveByCanCancel
Definition: YiScrollController.h:471
virtual void OnOutOfRangeAtStartDirectionChanged(CYIScrollController *, float, float)
Definition: YiScrollController.h:93
int32_t m_nOutOfRangeDirection
Definition: YiScrollController.h:448
float m_fGestureEndPos
Definition: YiScrollController.h:466
virtual void OnOutOfRangeAtEnd(CYIScrollController *, float, float)
Definition: YiScrollController.h:88
virtual void OnOutOfRangeAtEndDirectionChanged(CYIScrollController *, float, float)
Definition: YiScrollController.h:97
OutOfRangeListener * m_pOutOfRangeListener
Definition: YiScrollController.h:475
bool m_bSwipeToNextPage
Definition: YiScrollController.h:451
float m_fMaxOutOfRangeEnd
Definition: YiScrollController.h:456
float m_fMoveByTarget
Definition: YiScrollController.h:469
float m_fPageSize
Definition: YiScrollController.h:457
float m_fAnticipatedDataStart
Definition: YiScrollController.h:442
The base class for an object accessible from script source code.
Definition: YiScriptableObject.h:28
int32_t nPageBefore
Definition: YiScrollController.h:23
float m_fSnapBackStart
Definition: YiScrollController.h:453
int32_t nPageAfter
Definition: YiScrollController.h:24
Definition: YiScrollController.h:16
float m_fMaxOutOfRangeStart
Definition: YiScrollController.h:455
CYIScrollController provides scrolling behaviour to views.
Definition: YiScrollController.h:37
virtual void OnOutOfRangeAtStartBegan(CYIScrollController *, float, float)
Definition: YiScrollController.h:109
float m_fScrollStartPos
Definition: YiScrollController.h:445
virtual void OnOutOfRangeAtEndBegan(CYIScrollController *, float, float)
Definition: YiScrollController.h:113
int32_t m_nPageAtGestureStart
Definition: YiScrollController.h:465
virtual void OnOutOfRangeAtStartFinished(CYIScrollController *)
Definition: YiScrollController.h:117
float m_fFrictionCoeff
Definition: YiScrollController.h:461
float m_fDataStart
Definition: YiScrollController.h:440
bool m_bIsScrolling
Definition: YiScrollController.h:446
float fEventPos
Definition: YiScrollController.h:22
Definition: YiScrollController.h:45
float m_fDataSize
Definition: YiScrollController.h:441
virtual void OnScrollEnded(CYIScrollController *)
Definition: YiScrollController.h:56
CYIInputInterpreter * m_pGestureData
Definition: YiScrollController.h:477
virtual ~ScrollListener()
Definition: YiScrollController.h:48
float m_fSnapBackEnd
Definition: YiScrollController.h:454
bool m_bGestureStarted
Definition: YiScrollController.h:464
virtual void OnScrollAuto(CYIScrollController *)
Definition: YiScrollController.h:62
CYIAnimation * m_pMoveByAnim
Definition: YiScrollController.h:468
Used to create animations programatically.
Definition: YiAnimation.h:32
bool m_bSnapBack
Definition: YiScrollController.h:452
bool m_bCarousel
Definition: YiScrollController.h:458
bool m_bAlwaysCenterOnPage
Definition: YiScrollController.h:450
Provides a means of being notified when a scroll controller is outside of the snap back range...
Definition: YiScrollController.h:76
Base class used to listen to one or more CYIAnimations as they update over time.
Definition: YiAnimation.h:65
float fDelta
Definition: YiScrollController.h:20
ScrollListener * m_pScrollListener
Definition: YiScrollController.h:474
uint32_t m_uDecelerationDuration
Definition: YiScrollController.h:462
float m_fMoveByDone
Definition: YiScrollController.h:470
bool bReachedStart
Definition: YiScrollController.h:25