Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(486)

Unified Diff: content/browser/renderer_host/render_widget_host_view_mac.mm

Issue 2278283002: Implement Mac Pop-up Dictionary for OOPIF. (Closed)
Patch Set: Addressing lfg@'s comment Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: content/browser/renderer_host/render_widget_host_view_mac.mm
diff --git a/content/browser/renderer_host/render_widget_host_view_mac.mm b/content/browser/renderer_host/render_widget_host_view_mac.mm
index 9093723271b18d41ee615c67d9b21aa1656af22d..604e991a9bde4042e6252687d6f48715808305e6 100644
--- a/content/browser/renderer_host/render_widget_host_view_mac.mm
+++ b/content/browser/renderer_host/render_widget_host_view_mac.mm
@@ -60,6 +60,7 @@
#include "content/public/browser/browser_plugin_guest_manager.h"
#include "content/public/browser/browser_thread.h"
#include "content/public/browser/native_web_keyboard_event.h"
+#include "content/public/browser/render_widget_host.h"
#include "content/public/browser/render_widget_host_view_frame_subscriber.h"
#import "content/public/browser/render_widget_host_view_mac_delegate.h"
#include "content/public/browser/web_contents.h"
@@ -2289,15 +2290,43 @@ void RenderWidgetHostViewMac::OnDisplayMetricsChanged(
}
- (void)showLookUpDictionaryOverlayAtPoint:(NSPoint)point {
+ gfx::Point rootPoint(point.x, NSHeight([self frame]) - point.y);
+ gfx::Point transformedPoint;
+ if (!renderWidgetHostView_->render_widget_host_ ||
+ !renderWidgetHostView_->render_widget_host_->delegate() ||
+ !renderWidgetHostView_->render_widget_host_->delegate()
+ ->GetInputEventRouter())
+ return;
+
+ RenderWidgetHostImpl* widgetHost =
+ renderWidgetHostView_->render_widget_host_->delegate()
+ ->GetInputEventRouter()
+ ->GetRenderWidgetHostAtPoint(renderWidgetHostView_.get(), rootPoint,
+ &transformedPoint);
+ if (!widgetHost)
+ return;
+
+ // TODO(ekaramad): The position reported by the renderer is with respect to
+ // |widgetHost|'s coordinate space with y-axis inverted to conform to AppKit
+ // coordinate system. The point will need to be transformed into root view's
+ // coordinate system (RenderWidgetHostViewMac in this case). However, since
+ // the callback is invoked on IO thread it will require some thread hopping to
+ // do so. For this reason, for now, we accept this non-ideal way of fixing the
+ // point offset manually from the view bounds. This should be revisited when
+ // fixing issues in TextInputClientMac (https://crbug.com/643233).
+ gfx::Rect root_box = renderWidgetHostView_->GetViewBounds();
+ gfx::Rect view_box = widgetHost->GetView()->GetViewBounds();
+
TextInputClientMac::GetInstance()->GetStringAtPoint(
- renderWidgetHostView_->render_widget_host_,
- gfx::Point(point.x, NSHeight([self frame]) - point.y),
+ widgetHost, transformedPoint,
^(NSAttributedString* string, NSPoint baselinePoint) {
+ baselinePoint.x += view_box.origin().x() - root_box.origin().x();
+ baselinePoint.y +=
+ root_box.bottom_left().y() - view_box.bottom_left().y();
[self showLookUpDictionaryOverlayInternal:string
baselinePoint:baselinePoint
targetView:self];
- }
- );
+ });
}
// This is invoked only on 10.8 or newer when the user taps a word using
@@ -2814,10 +2843,25 @@ extern NSString *NSTextInputReplacementRangeAttributeName;
thePoint = [self convertPoint:thePoint fromView:nil];
thePoint.y = NSHeight([self frame]) - thePoint.y;
+ if (!renderWidgetHostView_->render_widget_host_ ||
+ !renderWidgetHostView_->render_widget_host_->delegate() ||
+ !renderWidgetHostView_->render_widget_host_->delegate()
+ ->GetInputEventRouter())
+ return NSNotFound;
+
+ gfx::Point rootPoint(thePoint.x, thePoint.y);
+ gfx::Point transformedPoint;
+ RenderWidgetHostImpl* widgetHost =
+ renderWidgetHostView_->render_widget_host_->delegate()
+ ->GetInputEventRouter()
+ ->GetRenderWidgetHostAtPoint(renderWidgetHostView_.get(), rootPoint,
+ &transformedPoint);
+ if (!widgetHost)
+ return NSNotFound;
+
NSUInteger index =
TextInputClientMac::GetInstance()->GetCharacterIndexAtPoint(
- renderWidgetHostView_->render_widget_host_,
- gfx::Point(thePoint.x, thePoint.y));
+ widgetHost, transformedPoint);
return index;
}
« no previous file with comments | « content/browser/renderer_host/render_widget_host_view_mac.h ('k') | content/browser/renderer_host/text_input_client_mac.mm » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698