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

Side by Side Diff: content/browser/android/popup_touch_handle_drawable.cc

Issue 1341013002: [Android] Move weak ref for PopupWindowTouchHandleDrawable to native (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase Created 5 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 unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/browser/android/popup_touch_handle_drawable.h" 5 #include "content/browser/android/popup_touch_handle_drawable.h"
6 6
7 #include "content/public/browser/android/content_view_core.h"
7 #include "jni/PopupTouchHandleDrawable_jni.h" 8 #include "jni/PopupTouchHandleDrawable_jni.h"
8 9
9 namespace content { 10 namespace content {
10 11
11 PopupTouchHandleDrawable::PopupTouchHandleDrawable( 12 // static
12 base::android::ScopedJavaLocalRef<jobject> drawable, 13 scoped_ptr<PopupTouchHandleDrawable> PopupTouchHandleDrawable::Create(
13 float dpi_scale) 14 ContentViewCore* content_view_core) {
14 : dpi_scale_(dpi_scale), drawable_(drawable) { 15 DCHECK(content_view_core);
15 DCHECK(drawable.obj()); 16 base::android::ScopedJavaLocalRef<jobject> content_view_core_obj =
17 content_view_core->GetJavaObject();
18 if (content_view_core_obj.is_null())
19 return nullptr;
20 JNIEnv* env = base::android::AttachCurrentThread();
21 base::android::ScopedJavaLocalRef<jobject> drawable_obj(
22 Java_PopupTouchHandleDrawable_create(env, content_view_core_obj.obj()));
23 return scoped_ptr<PopupTouchHandleDrawable>(new PopupTouchHandleDrawable(
24 env, drawable_obj.obj(), content_view_core->GetDpiScale()));
25 }
26
27 PopupTouchHandleDrawable::PopupTouchHandleDrawable(JNIEnv* env,
28 jobject obj,
29 float dpi_scale)
30 : java_ref_(env, obj), dpi_scale_(dpi_scale) {
31 DCHECK(!java_ref_.is_empty());
16 } 32 }
17 33
18 PopupTouchHandleDrawable::~PopupTouchHandleDrawable() { 34 PopupTouchHandleDrawable::~PopupTouchHandleDrawable() {
19 // Explicitly disabling ensures that any external references to the Java 35 JNIEnv* env = base::android::AttachCurrentThread();
20 // object are cleared, allowing it to be GC'ed in a timely fashion. 36 ScopedJavaLocalRef<jobject> obj = java_ref_.get(env);
21 SetEnabled(false); 37 if (!obj.is_null())
38 Java_PopupTouchHandleDrawable_destroy(env, obj.obj());
22 } 39 }
23 40
24 void PopupTouchHandleDrawable::SetEnabled(bool enabled) { 41 void PopupTouchHandleDrawable::SetEnabled(bool enabled) {
25 JNIEnv* env = base::android::AttachCurrentThread(); 42 JNIEnv* env = base::android::AttachCurrentThread();
43 ScopedJavaLocalRef<jobject> obj = java_ref_.get(env);
44 if (obj.is_null())
45 return;
26 if (enabled) 46 if (enabled)
27 Java_PopupTouchHandleDrawable_show(env, drawable_.obj()); 47 Java_PopupTouchHandleDrawable_show(env, obj.obj());
28 else 48 else
29 Java_PopupTouchHandleDrawable_hide(env, drawable_.obj()); 49 Java_PopupTouchHandleDrawable_hide(env, obj.obj());
30 } 50 }
31 51
32 void PopupTouchHandleDrawable::SetOrientation( 52 void PopupTouchHandleDrawable::SetOrientation(
33 ui::TouchHandleOrientation orientation) { 53 ui::TouchHandleOrientation orientation) {
34 JNIEnv* env = base::android::AttachCurrentThread(); 54 JNIEnv* env = base::android::AttachCurrentThread();
35 jobject obj = drawable_.obj(); 55 ScopedJavaLocalRef<jobject> obj = java_ref_.get(env);
36 Java_PopupTouchHandleDrawable_setOrientation(env, obj, 56 if (!obj.is_null()) {
37 static_cast<int>(orientation)); 57 Java_PopupTouchHandleDrawable_setOrientation(env, obj.obj(),
58 static_cast<int>(orientation));
59 }
38 } 60 }
39 61
40 void PopupTouchHandleDrawable::SetAlpha(float alpha) { 62 void PopupTouchHandleDrawable::SetAlpha(float alpha) {
41 JNIEnv* env = base::android::AttachCurrentThread(); 63 JNIEnv* env = base::android::AttachCurrentThread();
64 ScopedJavaLocalRef<jobject> obj = java_ref_.get(env);
42 bool visible = alpha > 0; 65 bool visible = alpha > 0;
43 Java_PopupTouchHandleDrawable_setVisible(env, drawable_.obj(), visible); 66 if (!obj.is_null())
67 Java_PopupTouchHandleDrawable_setVisible(env, obj.obj(), visible);
44 } 68 }
45 69
46 void PopupTouchHandleDrawable::SetFocus(const gfx::PointF& position) { 70 void PopupTouchHandleDrawable::SetFocus(const gfx::PointF& position) {
47 const gfx::PointF position_pix = gfx::ScalePoint(position, dpi_scale_); 71 const gfx::PointF position_pix = gfx::ScalePoint(position, dpi_scale_);
48 JNIEnv* env = base::android::AttachCurrentThread(); 72 JNIEnv* env = base::android::AttachCurrentThread();
49 Java_PopupTouchHandleDrawable_setFocus( 73 ScopedJavaLocalRef<jobject> obj = java_ref_.get(env);
50 env, drawable_.obj(), position_pix.x(), position_pix.y()); 74 if (!obj.is_null()) {
75 Java_PopupTouchHandleDrawable_setFocus(env, obj.obj(), position_pix.x(),
76 position_pix.y());
77 }
51 } 78 }
52 79
53 gfx::RectF PopupTouchHandleDrawable::GetVisibleBounds() const { 80 gfx::RectF PopupTouchHandleDrawable::GetVisibleBounds() const {
54 JNIEnv* env = base::android::AttachCurrentThread(); 81 JNIEnv* env = base::android::AttachCurrentThread();
82 ScopedJavaLocalRef<jobject> obj = java_ref_.get(env);
83 if (obj.is_null())
84 return gfx::RectF();
55 gfx::RectF unscaled_rect( 85 gfx::RectF unscaled_rect(
56 Java_PopupTouchHandleDrawable_getPositionX(env, drawable_.obj()), 86 Java_PopupTouchHandleDrawable_getPositionX(env, obj.obj()),
57 Java_PopupTouchHandleDrawable_getPositionY(env, drawable_.obj()), 87 Java_PopupTouchHandleDrawable_getPositionY(env, obj.obj()),
58 Java_PopupTouchHandleDrawable_getVisibleWidth(env, drawable_.obj()), 88 Java_PopupTouchHandleDrawable_getVisibleWidth(env, obj.obj()),
59 Java_PopupTouchHandleDrawable_getVisibleHeight(env, drawable_.obj())); 89 Java_PopupTouchHandleDrawable_getVisibleHeight(env, obj.obj()));
60 return gfx::ScaleRect(unscaled_rect, 1.f / dpi_scale_); 90 return gfx::ScaleRect(unscaled_rect, 1.f / dpi_scale_);
61 } 91 }
62 92
63 // static 93 // static
64 bool PopupTouchHandleDrawable::RegisterPopupTouchHandleDrawable(JNIEnv* env) { 94 bool PopupTouchHandleDrawable::RegisterPopupTouchHandleDrawable(JNIEnv* env) {
65 return RegisterNativesImpl(env); 95 return RegisterNativesImpl(env);
66 } 96 }
67 97
68 } // namespace content 98 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698