axmol/extensions/fairygui/ScrollPane.h

220 lines
6.6 KiB
C++

#ifndef __SCROLLPANE_H__
#define __SCROLLPANE_H__
#include "FairyGUIMacros.h"
#include "Margin.h"
#include "cocos2d.h"
NS_FGUI_BEGIN
class GObject;
class GComponent;
class GScrollBar;
class FUIContainer;
class FUIInnerContainer;
class GController;
class EventContext;
class ByteBuffer;
class GTweener;
class ScrollPane : public cocos2d::Ref
{
public:
ScrollPane(GComponent* owner);
virtual ~ScrollPane();
void setup(ByteBuffer* buffer);
GComponent* getOwner() const { return _owner; }
GComponent* getHeader() const { return _header; }
GComponent* getFooter() const { return _footer; }
GScrollBar* getVtScrollBar() const { return _vtScrollBar; }
GScrollBar* getHzScrollBar() const { return _hzScrollBar; }
bool isBouncebackEffect() const { return _bouncebackEffect; }
void setBouncebackEffect(bool value) { _bouncebackEffect = value; }
bool isTouchEffect() const { return _touchEffect; }
void setTouchEffect(bool value) { _touchEffect = value; }
bool isInertiaDisabled() const { return _inertiaDisabled; }
void setInertiaDisabled(bool value) { _inertiaDisabled = value; }
float getScrollStep() const { return _scrollStep; }
void setScrollStep(float value);
bool isSnapToItem() const { return _snapToItem; }
void setSnapToItem(bool value) { _snapToItem = value; }
bool isPageMode() const { return _pageMode; }
void setPageMode(bool value) { _pageMode = value; }
GController* getPageController() const { return _pageController; }
void setPageController(GController* value) { _pageController = value; }
bool isMouseWheelEnabled() const { return _mouseWheelEnabled; }
void setMouseWheelEnabled(bool value) { _mouseWheelEnabled = value; }
float getDecelerationRate() const { return _decelerationRate; }
void setDecelerationRate(float value) { _decelerationRate = value; }
float getPosX() const { return _xPos; }
void setPosX(float value, bool ani = false);
float getPosY() const { return _yPos; }
void setPosY(float value, bool ani = false);
float getPercX() const;
void setPercX(float value, bool ani = false);
float getPercY() const;
void setPercY(float value, bool ani = false);
bool isBottomMost() const;
bool isRightMost() const;
void scrollLeft(float ratio = 1, bool ani = false);
void scrollRight(float ratio = 1, bool ani = false);
void scrollUp(float ratio = 1, bool ani = false);
void scrollDown(float ratio = 1, bool ani = false);
void scrollTop(bool ani = false);
void scrollBottom(bool ani = false);
void scrollToView(GObject* obj, bool ani = false, bool setFirst = false);
void scrollToView(const cocos2d::Rect& rect, bool ani = false, bool setFirst = false);
bool isChildInView(GObject* obj) const;
int getPageX() const;
void setPageX(int value, bool ani = false);
int getPageY() const;
void setPageY(int value, bool ani = false);
float getScrollingPosX() const;
float getScrollingPosY() const;
const cocos2d::Size& getContentSize() const { return _contentSize; }
const cocos2d::Size& getViewSize() const { return _viewSize; }
void lockHeader(int size);
void lockFooter(int size);
void cancelDragging();
static ScrollPane* getDraggingPane() { return _draggingPane; }
private:
void onOwnerSizeChanged();
void adjustMaskContainer();
void setContentSize(float wv, float hv);
void changeContentSizeOnScrolling(float deltaWidth, float deltaHeight, float deltaPosX, float deltaPosY);
void setViewWidth(float value);
void setViewHeight(float value);
void setSize(float wv, float hv);
void handleSizeChanged();
void handleControllerChanged(GController* c);
void updatePageController();
GObject* hitTest(const cocos2d::Vec2& pt, const cocos2d::Camera* camera);
void posChanged(bool ani);
CALL_LATER_FUNC(ScrollPane, refresh);
void refresh2();
void updateScrollBarPos();
void updateScrollBarVisible();
void updateScrollBarVisible2(GScrollBar* bar);
float getLoopPartSize(float division, int axis);
bool loopCheckingCurrent();
void loopCheckingTarget(cocos2d::Vec2& endPos);
void loopCheckingTarget(cocos2d::Vec2& endPos, int axis);
void loopCheckingNewPos(float& value, int axis);
void alignPosition(cocos2d::Vec2& pos, bool inertialScrolling);
float alignByPage(float pos, int axis, bool inertialScrolling);
cocos2d::Vec2 updateTargetAndDuration(const cocos2d::Vec2& orignPos);
float updateTargetAndDuration(float pos, int axis);
void fixDuration(int axis, float oldChange);
void startTween(int type);
void killTween();
void tweenUpdate(float dt);
float runTween(int axis, float dt);
void checkRefreshBar();
void onTouchBegin(EventContext* context);
void onTouchMove(EventContext* context);
void onTouchEnd(EventContext* context);
void onMouseWheel(EventContext* context);
void onRollOver(EventContext* context);
void onRollOut(EventContext* context);
void onBarTweenComplete(GTweener* tweener);
ScrollType _scrollType;
float _scrollStep;
float _mouseWheelStep;
Margin _scrollBarMargin;
bool _bouncebackEffect;
bool _touchEffect;
bool _scrollBarDisplayAuto;
bool _vScrollNone;
bool _hScrollNone;
bool _needRefresh;
int _refreshBarAxis;
bool _displayOnLeft;
bool _snapToItem;
bool _displayInDemand;
bool _mouseWheelEnabled;
bool _inertiaDisabled;
float _decelerationRate;
bool _pageMode;
bool _floating;
bool _dontClipMargin;
float _xPos;
float _yPos;
cocos2d::Size _viewSize;
cocos2d::Size _contentSize;
cocos2d::Size _overlapSize;
cocos2d::Size _pageSize;
cocos2d::Vec2 _containerPos;
cocos2d::Vec2 _beginTouchPos;
cocos2d::Vec2 _lastTouchPos;
cocos2d::Vec2 _lastTouchGlobalPos;
cocos2d::Vec2 _velocity;
float _velocityScale;
clock_t _lastMoveTime;
bool _dragged;
bool _isHoldAreaDone;
int _aniFlag;
int _loop;
bool _hover;
int _headerLockedSize;
int _footerLockedSize;
int _tweening;
cocos2d::Vec2 _tweenStart;
cocos2d::Vec2 _tweenChange;
cocos2d::Vec2 _tweenTime;
cocos2d::Vec2 _tweenDuration;
GComponent* _owner;
FUIContainer* _maskContainer;
FUIInnerContainer* _container;
GScrollBar* _hzScrollBar;
GScrollBar* _vtScrollBar;
GComponent* _header;
GComponent* _footer;
GController* _pageController;
static int _gestureFlag;
static ScrollPane* _draggingPane;
friend class GComponent;
friend class GList;
friend class GScrollBar;
};
NS_FGUI_END
#endif