ZFFramework
 
Loading...
Searching...
No Matches
ZFProtocolZFUIScrollView.h
Go to the documentation of this file.
1
5
6#ifndef _ZFI_ZFProtocolZFUIScrollView_h_
7#define _ZFI_ZFProtocolZFUIScrollView_h_
8
9#include "ZFCore/ZFProtocol.h"
12
14extern ZFLIB_ZFUIKit zftimet _ZFP_ZFProtocolZFUIScrollView_scrollAnimationStart(
16 , ZF_IN ZFUIScrollView *scrollView
17 , ZF_IN zftimet recommendTimerInterval
18 );
19extern ZFLIB_ZFUIKit void _ZFP_ZFProtocolZFUIScrollView_scrollAnimationStop(
21 , ZF_IN ZFUIScrollView *scrollView
22 );
23
28public:
33 ZF_IN ZFUIScrollView *scrollView
34 , ZF_OUT zfbool &nativeImplViewRequireVirtualIndex
40 ZF_IN ZFUIScrollView *scrollView
41 , ZF_IN void *nativeScrollView
43
44public:
48 virtual void scrollEnable(
49 ZF_IN ZFUIScrollView *scrollView
60 virtual void scrollBounce(
61 ZF_IN ZFUIScrollView *scrollView
62 , ZF_IN zfbool scrollBounceHorizontal
63 , ZF_IN zfbool scrollBounceVertical
64 , ZF_IN zfbool scrollBounceHorizontalAlways
65 , ZF_IN zfbool scrollBounceVerticalAlways
79 virtual void scrollContentFrame(
80 ZF_IN ZFUIScrollView *scrollView
81 , ZF_IN const ZFUIRect &frame
87 ZF_IN ZFUIScrollView *scrollView
88 , ZF_IN const ZFUIRect &frame
89 ) {
90 ZFUIRect frameNew = ZFUIRectApplyScaleReversely(frame, scrollView->UIScaleFixed());
91 frameNew.x -= scrollView->scrollAreaMargin().left;
92 frameNew.y -= scrollView->scrollAreaMargin().top;
93 scrollView->_ZFP_ZFUIScrollView_scrollContentFrameByImpl(frameNew);
94 }
95
109 ZF_IN ZFUIScrollView *scrollView
110 , ZF_IN zftimet recommendTimerInterval
111 ) {
112 return _ZFP_ZFProtocolZFUIScrollView_scrollAnimationStart(this, scrollView, recommendTimerInterval);
113 }
114
117 virtual void scrollAnimationStop(ZF_IN ZFUIScrollView *scrollView) {
118 _ZFP_ZFProtocolZFUIScrollView_scrollAnimationStop(this, scrollView);
119 }
120
121 // ============================================================
122 // children
123public:
131 virtual void scrollChildAdd(
132 ZF_IN ZFUIScrollView *parent
133 , ZF_IN ZFUIView *child
134 , ZF_IN zfindex atIndex
142 virtual void scrollChildRemove(
143 ZF_IN ZFUIScrollView *parent
144 , ZF_IN ZFUIView *child
145 , ZF_IN zfindex atIndex
153
154 // ============================================================
155 // callbacks that implementations must notify
156public:
161 ZF_IN ZFUIScrollView *scrollView
162 , ZF_IN const ZFUIPoint &mousePos
163 , ZF_IN zftimet mouseTime
164 ) {
165 scrollView->_ZFP_ZFUIScrollView_notifyDragBegin(ZFUIPointApplyScaleReversely(mousePos, scrollView->UIScaleFixed()), mouseTime);
166 }
167
171 ZF_IN ZFUIScrollView *scrollView
172 , ZF_IN const ZFUIPoint &mousePos
173 , ZF_IN zftimet mouseTime
174 ) {
175 scrollView->_ZFP_ZFUIScrollView_notifyDrag(ZFUIPointApplyScaleReversely(mousePos, scrollView->UIScaleFixed()), mouseTime);
176 }
177
181 ZF_IN ZFUIScrollView *scrollView
182 , ZF_IN zftimet mouseTime
183 , ZF_IN zfbool needScrollAni
184 ) {
185 scrollView->_ZFP_ZFUIScrollView_notifyDragEnd(mouseTime, needScrollAni);
186 }
187
191 ZF_IN ZFUIScrollView *scrollView
192 , ZF_IN zftimet relativeTimeInMiliseconds
193 ) {
194 scrollView->_ZFP_ZFUIScrollView_notifyScrollAnimation(relativeTimeInMiliseconds);
195 }
197
198// ============================================================
202public:
203 virtual ~ZFUIScrollViewImplHelperProtocol(void) {}
204
205public:
214 virtual void mouseEventPos(
215 ZF_OUT ZFUIPoint &ret
216 , ZF_IN void *nativeMouseEvent
219 virtual void *mouseEventClone(
220 ZF_IN void *nativeMouseEvent
221 , ZF_IN_OPT zfbool changeMouseAction = zffalse
225 virtual void mouseEventCleanup(ZF_IN void *nativeMouseEvent) zfpurevirtual;
231 virtual void mouseEventForward(
232 ZF_IN void *nativeChild
233 , ZF_IN void *nativeMouseEvent
235
238 ZF_IN zffloat x
239 , ZF_IN zffloat y
244 virtual void *findTouchedChild(
245 ZF_IN zffloat x
246 , ZF_IN zffloat y
249 virtual void findTouchedChildCleanup(ZF_IN void *nativeChild) zfpurevirtual;
250
257 virtual void trackDelayStart(
258 ZF_IN zftimet timeoutMiliSeconds
260 );
263
271 ZF_IN void *nativeChild
272 , ZF_IN_OUT void *nativeMouseEvent
273 , ZF_IN zffloat const &xInParent
274 , ZF_IN zffloat const &yInParent
278 ZF_IN void *nativeChild
279 , ZF_IN_OUT void *nativeMouseEvent
280 , ZF_IN zffloat const &xInChild
281 , ZF_IN zffloat const &yInChild
283};
284zfclassFwd _ZFP_ZFUIScrollViewImplHelperPrivate;
297zfclassNotPOD ZFLIB_ZFUIKit ZFUIScrollViewImplHelper {
298 ZFCLASS_DISALLOW_COPY_CONSTRUCTOR(ZFUIScrollViewImplHelper)
299
300public:
304 ZFUIScrollViewImplHelperProtocol *implProtocol;
307
308public:
311 ~ZFUIScrollViewImplHelper(void);
312
313public:
316 ZF_IN void *nativeMouseEvent
317 , ZF_IN ZFUIMouseAction mouseAction
318 );
321
322private:
323 _ZFP_ZFUIScrollViewImplHelperPrivate *d;
324 friend zfclassFwd _ZFP_ZFUIScrollViewImplHelperPrivate;
325 friend zfclassFwd ZFUIScrollViewImplHelperProtocol;
326 ZFTimer *_trackDelayDefaultImplTimer;
327};
328
330#endif // #ifndef _ZFI_ZFProtocolZFUIScrollView_h_
331
#define zffinal
dummy macro shows that a method or class is designed must not to be overrided
Definition ZFCoreTypeDef_ClassType.h:63
#define zfpurevirtual
dummy macro shows that a method is pure virtual method
Definition ZFCoreTypeDef_ClassType.h:68
#define ZF_IN
dummy macro that shows the param used as required input
Definition ZFCoreTypeDef_ClassType.h:180
#define ZF_IN_OPT
dummy macro that shows the param used as optional input
Definition ZFCoreTypeDef_ClassType.h:184
#define ZF_OUT
dummy macro that shows the param used as required output
Definition ZFCoreTypeDef_ClassType.h:188
#define zfclassNotPOD
shows the class is not a POD type, you should not memset it or declare it in stack or copy value by c...
Definition ZFCoreTypeDef_ClassType.h:48
#define ZF_IN_OUT
dummy macro that shows the param used as required input and output
Definition ZFCoreTypeDef_ClassType.h:196
#define ZFCLASS_DISALLOW_COPY_CONSTRUCTOR(ClassName)
a macro to show that a class doesn't allow copy constructor
Definition ZFCoreTypeDef_ClassType.h:81
#define zfclassFwd
forward declaration of a class type
Definition ZFCoreTypeDef_ClassType.h:31
_ZFT_t_zfbool zfbool
bool type
Definition ZFCoreTypeDef_CoreType.h:103
_ZFT_t_zfindex zfindex
similar to size_t, used for index and size only
Definition ZFCoreTypeDef_CoreType.h:154
_zft_zftimet zftimet
time unit, ensured at least 64 bit, ensured signed
Definition ZFCoreTypeDef_CoreType.h:203
_zft_zffloat zffloat
same as float, see zfindex
Definition ZFCoreTypeDef_CoreType.h:183
#define zffalse
bool false type
Definition ZFCoreTypeDef_CoreType.h:111
#define ZF_NAMESPACE_GLOBAL_BEGIN
begin namespace ZFFramework
Definition ZFNamespace.h:97
#define ZF_NAMESPACE_GLOBAL_END
end namespace ZFFramework
Definition ZFNamespace.h:98
protocol definitions for ZFFramework
#define ZFPROTOCOL_INTERFACE_END(ModuleName)
for more information, please refer to ZFPROTOCOL_INTERFACE_BEGIN
Definition ZFProtocol.h:414
#define ZFPROTOCOL_INTERFACE_CLASS(ModuleName)
access the class name of ZFProtocol for ModuleName
Definition ZFProtocol.h:210
#define ZFPROTOCOL_INTERFACE_BEGIN(ZFLIB_, ModuleName)
declare a protocol interface for ZFFramework
Definition ZFProtocol.h:408
#define ZFLIB_ZFUIKit
used to export symbols
Definition ZFUIKitDef.h:16
v_ZFUIMouseAction::ZFEnumType ZFUIMouseAction
see v_ZFUIMouseAction
Definition ZFUIMouseEvent.h:31
scroll view
ZFUIPoint ZFUIPointApplyScaleReversely(const ZFUIPoint &point, zffloat scale)
return a scaled point reversely
Definition ZFUITypeDef.h:137
ZFUIRect ZFUIRectApplyScaleReversely(const ZFUIRect &rect, zffloat scale)
return a scaled rect reversely
Definition ZFUITypeDef.h:859
void notifyScrollViewDrag(ZFUIScrollView *scrollView, const ZFUIPoint &mousePos, zftimet mouseTime)
see scrollContentFrame for how to implement scroll logic
Definition ZFProtocolZFUIScrollView.h:170
void notifyScrollViewDragBegin(ZFUIScrollView *scrollView, const ZFUIPoint &mousePos, zftimet mouseTime)
see scrollContentFrame for how to implement scroll logic
Definition ZFProtocolZFUIScrollView.h:160
virtual void scrollAnimationStop(ZFUIScrollView *scrollView)
see scrollAnimationStart
Definition ZFProtocolZFUIScrollView.h:117
void notifyScrollViewDragEnd(ZFUIScrollView *scrollView, zftimet mouseTime, zfbool needScrollAni)
see scrollContentFrame for how to implement scroll logic
Definition ZFProtocolZFUIScrollView.h:180
virtual void scrollChildRemoveAllForDealloc(ZFUIScrollView *parent)=0
called to remove all children during parent dealloc for performance
virtual void scrollEnable(ZFUIScrollView *scrollView, zfbool scrollEnable)=0
see ZFUIScrollView::scrollEnable
virtual void scrollChildAdd(ZFUIScrollView *parent, ZFUIView *child, zfindex atIndex)=0
add child view
virtual void scrollContentFrame(ZFUIScrollView *scrollView, const ZFUIRect &frame)=0
change content's frame
virtual void scrollBounce(ZFUIScrollView *scrollView, zfbool scrollBounceHorizontal, zfbool scrollBounceVertical, zfbool scrollBounceHorizontalAlways, zfbool scrollBounceVerticalAlways)=0
see ZFUIScrollView::scrollBounceHorizontal
virtual void * nativeScrollViewCreate(ZFUIScrollView *scrollView, zfbool &nativeImplViewRequireVirtualIndex)=0
create native scroll view
void scrollContentFrameUpdateByImpl(ZFUIScrollView *scrollView, const ZFUIRect &frame)
for impl to update scroll content frame without activating any other event
Definition ZFProtocolZFUIScrollView.h:86
void notifyScrollViewScrollAnimation(ZFUIScrollView *scrollView, zftimet relativeTimeInMiliseconds)
see scrollAnimationStart for how to implement scroll animation logic
Definition ZFProtocolZFUIScrollView.h:190
virtual zftimet scrollAnimationStart(ZFUIScrollView *scrollView, zftimet recommendTimerInterval)
used to start scroll animation for performance
Definition ZFProtocolZFUIScrollView.h:108
virtual void nativeScrollViewDestroy(ZFUIScrollView *scrollView, void *nativeScrollView)=0
destroy native scroll view
virtual void scrollChildRemove(ZFUIScrollView *parent, ZFUIView *child, zfindex atIndex)=0
remove child view
timer utility
Definition ZFTimer.h:23
2D point
Definition ZFUITypeDef.h:62
2D rectangle
Definition ZFUITypeDef.h:636
zffloat y
y
Definition ZFUITypeDef.h:639
zffloat x
x
Definition ZFUITypeDef.h:638
native scroll view
Definition ZFUIScrollView.h:35
util class to achieve ZFUIScrollView's drag tracking logic
Definition ZFProtocolZFUIScrollView.h:297
zffloat nativeScrollTolerance
see ZFUIScrollViewImplHelper
Definition ZFProtocolZFUIScrollView.h:306
ZFUIScrollView * scrollView
see ZFUIScrollViewImplHelper
Definition ZFProtocolZFUIScrollView.h:302
void interceptMouse(void *nativeMouseEvent, ZFUIMouseAction mouseAction)
see ZFUIScrollViewImplHelper
void trackDelayNotifyTimeout(void)
see ZFUIScrollViewImplHelper
ZFUIScrollViewImplHelperProtocol * implProtocol
see ZFUIScrollViewImplHelper
Definition ZFProtocolZFUIScrollView.h:304
ZFUIScrollViewImplHelper(void)
see ZFUIScrollViewImplHelper
see ZFUIScrollViewImplHelper
Definition ZFProtocolZFUIScrollView.h:201
virtual ZFUIScrollViewImplHelper * findTouchedChildScrollView(zffloat x, zffloat y)=0
see ZFUIScrollViewImplHelper
virtual void trackDelayStart(zftimet timeoutMiliSeconds, ZFUIScrollViewImplHelper *owner)
see ZFUIScrollViewImplHelper, after time out, you must invoke ZFUIScrollViewImplHelper::trackDelayNot...
virtual void * translateFromParentToChild(void *nativeChild, void *nativeMouseEvent, zffloat const &xInParent, zffloat const &yInParent)=0
see ZFUIScrollViewImplHelper
virtual zftimet nativeTime(void)=0
see ZFUIScrollViewImplHelper
virtual void mouseEventPos(ZFUIPoint &ret, void *nativeMouseEvent)=0
see ZFUIScrollViewImplHelper
virtual void * findTouchedChild(zffloat x, zffloat y)=0
see ZFUIScrollViewImplHelper
virtual void trackDelayStop(ZFUIScrollViewImplHelper *owner)
see ZFUIScrollViewImplHelper
virtual void findTouchedChildCleanup(void *nativeChild)=0
see ZFUIScrollViewImplHelper
virtual void * mouseEventClone(void *nativeMouseEvent, zfbool changeMouseAction=_ZFT_t_zffalse, ZFUIMouseAction mouseAction=v_ZFUIMouseAction::e_Cancel)=0
see ZFUIScrollViewImplHelper
virtual void mouseEventCleanup(void *nativeMouseEvent)=0
see ZFUIScrollViewImplHelper
virtual void mouseEventForward(void *nativeChild, void *nativeMouseEvent)=0
see ZFUIScrollViewImplHelper
virtual void * translateFromChildToParent(void *nativeChild, void *nativeMouseEvent, zffloat const &xInChild, zffloat const &yInChild)=0
see translateFromParentToChild
virtual void findTouchedChildScrollViewCleanup(void *nativeChild)=0
see ZFUIScrollViewImplHelper
base class of all UI views
Definition ZFUIView.h:93
@ e_Cancel
mouse cancel
Definition ZFUIMouseEvent.h:19