popup_touch_handle_drawable.cc 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. // Copyright 2016 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. #include "android_webview/browser/popup_touch_handle_drawable.h"
  5. #include "android_webview/browser_jni_headers/PopupTouchHandleDrawable_jni.h"
  6. using base::android::JavaParamRef;
  7. using base::android::ScopedJavaLocalRef;
  8. namespace android_webview {
  9. PopupTouchHandleDrawable::PopupTouchHandleDrawable(
  10. JNIEnv* env,
  11. jobject obj,
  12. float horizontal_padding_ratio)
  13. : java_ref_(env, obj),
  14. drawable_horizontal_padding_ratio_(horizontal_padding_ratio) {
  15. DCHECK(obj);
  16. }
  17. PopupTouchHandleDrawable::~PopupTouchHandleDrawable() {
  18. JNIEnv* env = base::android::AttachCurrentThread();
  19. ScopedJavaLocalRef<jobject> obj = java_ref_.get(env);
  20. if (obj)
  21. Java_PopupTouchHandleDrawable_destroy(env, obj);
  22. }
  23. void PopupTouchHandleDrawable::SetEnabled(bool enabled) {
  24. JNIEnv* env = base::android::AttachCurrentThread();
  25. ScopedJavaLocalRef<jobject> obj = java_ref_.get(env);
  26. if (!obj)
  27. return;
  28. if (enabled)
  29. Java_PopupTouchHandleDrawable_show(env, obj);
  30. else
  31. Java_PopupTouchHandleDrawable_hide(env, obj);
  32. }
  33. void PopupTouchHandleDrawable::SetOrientation(
  34. ui::TouchHandleOrientation orientation,
  35. bool mirror_vertical,
  36. bool mirror_horizontal) {
  37. JNIEnv* env = base::android::AttachCurrentThread();
  38. ScopedJavaLocalRef<jobject> obj = java_ref_.get(env);
  39. if (obj) {
  40. Java_PopupTouchHandleDrawable_setOrientation(
  41. env, obj, static_cast<int>(orientation), mirror_vertical,
  42. mirror_horizontal);
  43. }
  44. }
  45. void PopupTouchHandleDrawable::SetOrigin(const gfx::PointF& origin) {
  46. JNIEnv* env = base::android::AttachCurrentThread();
  47. ScopedJavaLocalRef<jobject> obj = java_ref_.get(env);
  48. if (obj) {
  49. Java_PopupTouchHandleDrawable_setOrigin(env, obj, origin.x(), origin.y());
  50. }
  51. }
  52. void PopupTouchHandleDrawable::SetAlpha(float alpha) {
  53. JNIEnv* env = base::android::AttachCurrentThread();
  54. ScopedJavaLocalRef<jobject> obj = java_ref_.get(env);
  55. bool visible = alpha > 0;
  56. if (obj)
  57. Java_PopupTouchHandleDrawable_setVisible(env, obj, visible);
  58. }
  59. gfx::RectF PopupTouchHandleDrawable::GetVisibleBounds() const {
  60. JNIEnv* env = base::android::AttachCurrentThread();
  61. ScopedJavaLocalRef<jobject> obj = java_ref_.get(env);
  62. if (!obj)
  63. return gfx::RectF();
  64. return gfx::RectF(
  65. Java_PopupTouchHandleDrawable_getOriginXDip(env, obj),
  66. Java_PopupTouchHandleDrawable_getOriginYDip(env, obj),
  67. Java_PopupTouchHandleDrawable_getVisibleWidthDip(env, obj),
  68. Java_PopupTouchHandleDrawable_getVisibleHeightDip(env, obj));
  69. }
  70. float PopupTouchHandleDrawable::GetDrawableHorizontalPaddingRatio() const {
  71. return drawable_horizontal_padding_ratio_;
  72. }
  73. static jlong JNI_PopupTouchHandleDrawable_Init(
  74. JNIEnv* env,
  75. const JavaParamRef<jobject>& obj,
  76. const jfloat horizontal_padding_ratio) {
  77. return reinterpret_cast<intptr_t>(
  78. new PopupTouchHandleDrawable(env, obj, horizontal_padding_ratio));
  79. }
  80. } // namespace android_webview