提交 b5b6a100 编写于 作者: C Collin Jackson

In Sky framework AppView, cache the hit test result for pointer events and...

In Sky framework AppView, cache the hit test result for pointer events and continue using that result until pointerup or pointer cancel event is received

R=abarth@chromium.org, abarth

Review URL: https://codereview.chromium.org/1158933004
上级 26be5af1
......@@ -20,21 +20,40 @@ class AppView {
RenderView _renderView;
Map<int, HitTestResult> _hitTestResultForPointer = new Map<int, HitTestResult>();
RenderBox get root => _renderView.child;
void set root(RenderBox value) {
_renderView.child = value;
}
void _beginFrame(double timeStamp) {
RenderNode.flushLayout();
_renderView.paintFrame();
}
void _handleEvent(sky.Event event) {
if (event is! sky.PointerEvent)
return;
HitTestResult result = new HitTestResult();
_renderView.hitTest(result, x: event.x, y: event.y);
if (event is sky.PointerEvent)
_handlePointerEvent(event);
}
void _handlePointerEvent(sky.PointerEvent event) {
HitTestResult result;
switch(event.type) {
case 'pointerdown':
result = new HitTestResult();
_renderView.hitTest(result, x: event.x, y: event.y);
_hitTestResultForPointer[event.pointer] = result;
break;
case 'pointerup':
case 'pointercancel':
result = _hitTestResultForPointer[event.pointer];
_hitTestResultForPointer.remove(event.pointer);
break;
case 'pointermove':
result = _hitTestResultForPointer[event.pointer];
break;
}
assert(result != null);
result.path.reversed.forEach((RenderNode node) {
node.handlePointer(event);
});
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册