| OLD | NEW |
| (Empty) |
| 1 // Copyright 2012 The Chromium Authors. All rights reserved. | |
| 2 // Use of this source code is governed by a BSD-style license that can be | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 #include "webkit/compositor_bindings/web_to_ccinput_handler_adapter.h" | |
| 6 | |
| 7 #include "third_party/WebKit/Source/Platform/chromium/public/WebInputHandlerClie
nt.h" | |
| 8 | |
| 9 #define COMPILE_ASSERT_MATCHING_ENUM(webkit_name, cc_name) \ | |
| 10 COMPILE_ASSERT(static_cast<int>(WebKit::webkit_name) == \ | |
| 11 static_cast<int>(cc::cc_name), \ | |
| 12 mismatching_enums) | |
| 13 | |
| 14 COMPILE_ASSERT_MATCHING_ENUM(WebInputHandlerClient::ScrollStatusOnMainThread, | |
| 15 InputHandler::ScrollOnMainThread); | |
| 16 COMPILE_ASSERT_MATCHING_ENUM(WebInputHandlerClient::ScrollStatusStarted, | |
| 17 InputHandler::ScrollStarted); | |
| 18 COMPILE_ASSERT_MATCHING_ENUM(WebInputHandlerClient::ScrollStatusIgnored, | |
| 19 InputHandler::ScrollIgnored); | |
| 20 COMPILE_ASSERT_MATCHING_ENUM(WebInputHandlerClient::ScrollInputTypeGesture, | |
| 21 InputHandler::Gesture); | |
| 22 COMPILE_ASSERT_MATCHING_ENUM(WebInputHandlerClient::ScrollInputTypeWheel, | |
| 23 InputHandler::Wheel); | |
| 24 | |
| 25 namespace WebKit { | |
| 26 | |
| 27 scoped_ptr<WebToCCInputHandlerAdapter> WebToCCInputHandlerAdapter::create( | |
| 28 scoped_ptr<WebInputHandler> handler) { | |
| 29 return scoped_ptr<WebToCCInputHandlerAdapter>( | |
| 30 new WebToCCInputHandlerAdapter(handler.Pass())); | |
| 31 } | |
| 32 | |
| 33 WebToCCInputHandlerAdapter::WebToCCInputHandlerAdapter( | |
| 34 scoped_ptr<WebInputHandler> handler) | |
| 35 : handler_(handler.Pass()) {} | |
| 36 | |
| 37 WebToCCInputHandlerAdapter::~WebToCCInputHandlerAdapter() {} | |
| 38 | |
| 39 class WebToCCInputHandlerAdapter::HandlerAdapter | |
| 40 : public WebInputHandlerClient { | |
| 41 public: | |
| 42 explicit HandlerAdapter(cc::InputHandler* handler) : handler_(handler) {} | |
| 43 | |
| 44 virtual ~HandlerAdapter() {} | |
| 45 | |
| 46 virtual ScrollStatus scrollBegin(WebPoint point, ScrollInputType type) { | |
| 47 return static_cast<WebInputHandlerClient::ScrollStatus>( | |
| 48 handler_->ScrollBegin( | |
| 49 point, static_cast<cc::InputHandler::ScrollInputType>(type))); | |
| 50 } | |
| 51 | |
| 52 virtual bool scrollByIfPossible(WebPoint point, WebFloatSize delta) { | |
| 53 return handler_->ScrollBy(point, delta); | |
| 54 } | |
| 55 | |
| 56 virtual bool scrollVerticallyByPageIfPossible( | |
| 57 WebPoint point, WebScrollbar::ScrollDirection direction) { | |
| 58 return handler_->ScrollVerticallyByPage(point, direction); | |
| 59 } | |
| 60 | |
| 61 virtual ScrollStatus flingScrollBegin() { | |
| 62 return static_cast<WebInputHandlerClient::ScrollStatus>( | |
| 63 handler_->FlingScrollBegin()); | |
| 64 } | |
| 65 | |
| 66 virtual void notifyCurrentFlingVelocity(WebFloatSize velocity) { | |
| 67 handler_->NotifyCurrentFlingVelocity(velocity); | |
| 68 } | |
| 69 | |
| 70 virtual void scrollEnd() { handler_->ScrollEnd(); } | |
| 71 | |
| 72 virtual void pinchGestureBegin() { handler_->PinchGestureBegin(); } | |
| 73 | |
| 74 virtual void pinchGestureUpdate(float magnify_delta, WebPoint anchor) { | |
| 75 handler_->PinchGestureUpdate(magnify_delta, anchor); | |
| 76 } | |
| 77 | |
| 78 virtual void pinchGestureEnd() { handler_->PinchGestureEnd(); } | |
| 79 | |
| 80 virtual void startPageScaleAnimation(WebSize target_position, | |
| 81 bool anchor_point, | |
| 82 float page_scale, | |
| 83 double start_time_sec, | |
| 84 double duration_sec) { | |
| 85 base::TimeTicks start_time = base::TimeTicks::FromInternalValue( | |
| 86 start_time_sec * base::Time::kMicrosecondsPerSecond); | |
| 87 base::TimeDelta duration = base::TimeDelta::FromMicroseconds( | |
| 88 duration_sec * base::Time::kMicrosecondsPerSecond); | |
| 89 handler_->StartPageScaleAnimation( | |
| 90 target_position, anchor_point, page_scale, start_time, duration); | |
| 91 } | |
| 92 | |
| 93 virtual void scheduleAnimation() { handler_->ScheduleAnimation(); } | |
| 94 | |
| 95 virtual bool haveTouchEventHandlersAt(WebPoint point) { | |
| 96 return handler_->HaveTouchEventHandlersAt(point); | |
| 97 } | |
| 98 | |
| 99 virtual void didReceiveLastInputEventForVSync(double frame_time_sec) | |
| 100 OVERRIDE { | |
| 101 base::TimeTicks frame_time = base::TimeTicks::FromInternalValue( | |
| 102 frame_time_sec * base::Time::kMicrosecondsPerSecond); | |
| 103 handler_->DidReceiveLastInputEventForVSync(frame_time); | |
| 104 } | |
| 105 | |
| 106 private: | |
| 107 cc::InputHandler* handler_; | |
| 108 }; | |
| 109 | |
| 110 void WebToCCInputHandlerAdapter::BindToHandler(cc::InputHandler* handler) { | |
| 111 handler_adapter_.reset(new HandlerAdapter(handler)); | |
| 112 handler_->bindToClient(handler_adapter_.get()); | |
| 113 } | |
| 114 | |
| 115 void WebToCCInputHandlerAdapter::Animate(base::TimeTicks time) { | |
| 116 double monotonic_time_seconds = (time - base::TimeTicks()).InSecondsF(); | |
| 117 handler_->animate(monotonic_time_seconds); | |
| 118 } | |
| 119 | |
| 120 void WebToCCInputHandlerAdapter::MainThreadHasStoppedFlinging() { | |
| 121 handler_->mainThreadHasStoppedFlinging(); | |
| 122 } | |
| 123 | |
| 124 } // namespace WebKit | |
| OLD | NEW |