| Index: content/renderer/render_view_impl.cc
|
| diff --git a/content/renderer/render_view_impl.cc b/content/renderer/render_view_impl.cc
|
| index 9639d2e26bfe224a2b7b8d9130b0872ba12da9c4..5508609b9dd579bbc64a942319ccbc72f45d972c 100644
|
| --- a/content/renderer/render_view_impl.cc
|
| +++ b/content/renderer/render_view_impl.cc
|
| @@ -66,6 +66,7 @@
|
| #include "content/renderer/browser_plugin/old/guest_to_embedder_channel.h"
|
| #include "content/renderer/device_orientation_dispatcher.h"
|
| #include "content/renderer/devtools_agent.h"
|
| +#include "content/renderer/disambiguation_popup_helper.h"
|
| #include "content/renderer/dom_automation_controller.h"
|
| #include "content/renderer/dom_storage/webstoragenamespace_impl.h"
|
| #include "content/renderer/external_popup_menu.h"
|
| @@ -1046,6 +1047,8 @@ bool RenderViewImpl::OnMessageReceived(const IPC::Message& message) {
|
| IPC_MESSAGE_HANDLER(JavaBridgeMsg_Init, OnJavaBridgeInit)
|
| IPC_MESSAGE_HANDLER(ViewMsg_SetAccessibilityMode, OnSetAccessibilityMode)
|
| IPC_MESSAGE_HANDLER(ViewMsg_UpdateFrameTree, OnUpdatedFrameTree)
|
| + IPC_MESSAGE_HANDLER(ViewMsg_ReleaseDisambiguationPopupDIB,
|
| + OnReleaseDisambiguationPopupDIB)
|
|
|
| // Have the super handle all other messages.
|
| IPC_MESSAGE_UNHANDLED(handled = RenderWidget::OnMessageReceived(message))
|
| @@ -6052,3 +6055,42 @@ void RenderViewImpl::OnUpdatedFrameTree(
|
|
|
| updating_frame_tree_ = false;
|
| }
|
| +
|
| +bool RenderViewImpl::multipleTargetsTapped(
|
| + const WebKit::WebGestureEvent& event,
|
| + const WebVector<WebRect>& target_rects) {
|
| + gfx::Rect zoom_rect;
|
| + float scale = DisambiguationPopupHelper::ComputeZoomAreaAndScaleFactor(
|
| + zoom_rect, event.boundingBox, target_rects, GetSize());
|
| + if (!scale)
|
| + return false;
|
| +
|
| + gfx::Size canvas_size = zoom_rect.size();
|
| + canvas_size = canvas_size.Scale(scale);
|
| + TransportDIB* transport_dib = NULL;
|
| + {
|
| + scoped_ptr<skia::PlatformCanvas> canvas(
|
| + RenderProcess::current()->GetDrawingCanvas(&transport_dib,
|
| + gfx::Rect(canvas_size)));
|
| + if (!canvas.get())
|
| + return false;
|
| +
|
| + canvas->scale(scale, scale);
|
| +
|
| + canvas->translate(-zoom_rect.x(), -zoom_rect.y());
|
| + webwidget_->paint(webkit_glue::ToWebCanvas(canvas.get()), zoom_rect,
|
| + WebWidget::ForceSoftwareRenderingAndIgnoreGPUResidentContent);
|
| + }
|
| + Send(new ViewHostMsg_ShowDisambiguationPopup(routing_id_,
|
| + zoom_rect,
|
| + canvas_size,
|
| + transport_dib->id()));
|
| +
|
| + return true;
|
| +}
|
| +
|
| +void RenderViewImpl::OnReleaseDisambiguationPopupDIB(
|
| + TransportDIB::Handle dib_handle) {
|
| + TransportDIB* dib = TransportDIB::CreateWithHandle(dib_handle);
|
| + RenderProcess::current()->ReleaseTransportDIB(dib);
|
| +}
|
|
|