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

Unified Diff: content/browser/android/content_view_core_impl.cc

Issue 335943002: [Android] Composited selection handle rendering (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@input_native_handles_final
Patch Set: Clean up paste popup interaction Created 6 years, 5 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/android/content_view_core_impl.cc
diff --git a/content/browser/android/content_view_core_impl.cc b/content/browser/android/content_view_core_impl.cc
index d3eb700e397e68fa76a023d070bb60527eff508e..0d21e3c6a882204b597610779747ebe103c2ce56 100644
--- a/content/browser/android/content_view_core_impl.cc
+++ b/content/browser/android/content_view_core_impl.cc
@@ -22,6 +22,7 @@
#include "content/browser/android/java/java_bound_object.h"
#include "content/browser/android/java/java_bridge_dispatcher_host_manager.h"
#include "content/browser/android/load_url_params.h"
+#include "content/browser/android/popup_touch_handle_drawable.h"
#include "content/browser/frame_host/interstitial_page_impl.h"
#include "content/browser/frame_host/navigation_controller_impl.h"
#include "content/browser/frame_host/navigation_entry_impl.h"
@@ -551,9 +552,6 @@ void ContentViewCoreImpl::OnGestureEventAck(const blink::WebGestureEvent& event,
event.x * dpi_scale(),
event.y * dpi_scale());
break;
- case WebInputEvent::GestureDoubleTap:
- Java_ContentViewCore_onDoubleTapEventAck(env, j_obj.obj());
- break;
default:
break;
}
@@ -600,26 +598,27 @@ void ContentViewCoreImpl::OnSelectionChanged(const std::string& text) {
Java_ContentViewCore_onSelectionChanged(env, obj.obj(), jtext.obj());
}
-void ContentViewCoreImpl::OnSelectionBoundsChanged(const gfx::PointF& anchor,
- const gfx::PointF& focus,
- int anchor_dir,
- int focus_dir,
- bool is_anchor_visible,
- bool is_focus_visible) {
+void ContentViewCoreImpl::OnSelectionEvent(SelectionEventType event,
+ const gfx::PointF& position) {
JNIEnv* env = AttachCurrentThread();
- ScopedJavaLocalRef<jobject> obj = java_ref_.get(env);
- if (obj.is_null())
+ ScopedJavaLocalRef<jobject> j_obj = java_ref_.get(env);
+ if (j_obj.is_null())
return;
- Java_ContentViewCore_onSelectionBoundsChanged(env,
- obj.obj(),
- anchor.x(),
- anchor.y(),
- focus.x(),
- focus.y(),
- anchor_dir,
- focus_dir,
- is_anchor_visible,
- is_focus_visible);
+ Java_ContentViewCore_onSelectionEvent(
+ env, j_obj.obj(), event, position.x(), position.y());
+}
+
+scoped_ptr<TouchHandleDrawable>
+ContentViewCoreImpl::CreatePopupTouchHandleDrawable() {
+ JNIEnv* env = AttachCurrentThread();
+ ScopedJavaLocalRef<jobject> obj = java_ref_.get(env);
+ if (obj.is_null()) {
+ NOTREACHED();
+ return scoped_ptr<TouchHandleDrawable>();
+ }
+ return scoped_ptr<TouchHandleDrawable>(new PopupTouchHandleDrawable(
+ Java_ContentViewCore_createPopupTouchHandleDrawable(env, obj.obj()),
+ dpi_scale_));
}
void ContentViewCoreImpl::ShowPastePopup(int x_dip, int y_dip) {
@@ -785,7 +784,7 @@ float ContentViewCoreImpl::GetOverdrawBottomHeightDip() const {
}
void ContentViewCoreImpl::AttachLayer(scoped_refptr<cc::Layer> layer) {
- root_layer_->AddChild(layer);
+ root_layer_->InsertChild(layer, 0);
root_layer_->SetIsDrawable(false);
}
@@ -796,6 +795,19 @@ void ContentViewCoreImpl::RemoveLayer(scoped_refptr<cc::Layer> layer) {
root_layer_->SetIsDrawable(true);
}
+void ContentViewCoreImpl::SelectBetweenCoordinates(const gfx::PointF& start,
+ const gfx::PointF& end) {
+ if (!web_contents_)
+ return;
+
+ gfx::Point anchor = gfx::Point(start.x(), start.y());
+ gfx::Point focus = gfx::Point(end.x(), end.y());
+ if (anchor.x() == focus.x() && anchor.y() == focus.y())
cjhopman 2014/07/09 22:29:12 nit: if (anchor == focus) {
jdduke (slow) 2014/07/10 02:08:39 Done.
+ return;
+
+ web_contents_->SelectRange(anchor, focus);
+}
+
void ContentViewCoreImpl::LoadUrl(
NavigationController::LoadURLParams& params) {
GetWebContents()->GetController().LoadURLWithParams(params);
@@ -984,6 +996,20 @@ jboolean ContentViewCoreImpl::OnTouchEvent(JNIEnv* env,
return rwhv->OnTouchEvent(event);
}
+jboolean ContentViewCoreImpl::OnTouchHandleEvent(JNIEnv* env,
+ jobject obj,
+ jobject motion_event) {
+ RenderWidgetHostViewAndroid* rwhv = GetRenderWidgetHostViewAndroid();
+ // Avoid synthesizing a touch event if it cannot be forwarded.
+ if (!rwhv)
+ return false;
+
+ const bool recycle = false;
+ MotionEventAndroid event(1.f / dpi_scale(), env, motion_event, recycle);
+
+ return rwhv->OnTouchHandleEvent(event);
+}
+
float ContentViewCoreImpl::GetDpiScale() const {
return dpi_scale_;
}
@@ -1145,22 +1171,23 @@ void ContentViewCoreImpl::PinchBy(JNIEnv* env, jobject obj, jlong time_ms,
void ContentViewCoreImpl::SelectBetweenCoordinates(JNIEnv* env, jobject obj,
jfloat x1, jfloat y1,
jfloat x2, jfloat y2) {
- if (!web_contents_)
- return;
-
- web_contents_->SelectRange(
- gfx::Point(x1 / dpi_scale(), y1 / dpi_scale()),
- gfx::Point(x2 / dpi_scale(), y2 / dpi_scale()));
+ SelectBetweenCoordinates(gfx::PointF(x1 / dpi_scale(), y1 / dpi_scale()),
+ gfx::PointF(x2 / dpi_scale(), y2 / dpi_scale()));
}
void ContentViewCoreImpl::MoveCaret(JNIEnv* env, jobject obj,
jfloat x, jfloat y) {
if (GetRenderWidgetHostViewAndroid()) {
GetRenderWidgetHostViewAndroid()->MoveCaret(
- gfx::Point(x / dpi_scale(), y / dpi_scale()));
+ gfx::Point(x / dpi_scale_, y / dpi_scale_));
}
}
+void ContentViewCoreImpl::HideTextHandles(JNIEnv* env, jobject obj) {
+ if (GetRenderWidgetHostViewAndroid())
+ GetRenderWidgetHostViewAndroid()->HideTextHandles();
+}
+
void ContentViewCoreImpl::ResetGestureDetection(JNIEnv* env, jobject obj) {
RenderWidgetHostViewAndroid* rwhv = GetRenderWidgetHostViewAndroid();
if (rwhv)
@@ -1535,14 +1562,6 @@ void ContentViewCoreImpl::SetAccessibilityEnabled(JNIEnv* env, jobject obj,
SetAccessibilityEnabledInternal(enabled);
}
-void ContentViewCoreImpl::ShowSelectionHandlesAutomatically() const {
- JNIEnv* env = AttachCurrentThread();
- ScopedJavaLocalRef<jobject> obj(java_ref_.get(env));
- if (obj.is_null())
- return;
- Java_ContentViewCore_showSelectionHandlesAutomatically(env, obj.obj());
-}
-
bool ContentViewCoreImpl::IsFullscreenRequiredForOrientationLock() const {
JNIEnv* env = AttachCurrentThread();
ScopedJavaLocalRef<jobject> obj = java_ref_.get(env);

Powered by Google App Engine
This is Rietveld 408576698