handle_view_resources.cc 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. // Copyright 2018 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 "ui/android/handle_view_resources.h"
  5. #include "base/trace_event/trace_event.h"
  6. #include "ui/android/ui_android_jni_headers/HandleViewResources_jni.h"
  7. namespace {
  8. static SkBitmap CreateSkBitmapFromJavaBitmap(
  9. base::android::ScopedJavaLocalRef<jobject> jbitmap) {
  10. return jbitmap.is_null()
  11. ? SkBitmap()
  12. : CreateSkBitmapFromJavaBitmap(gfx::JavaBitmap(jbitmap));
  13. }
  14. } // namespace
  15. namespace ui {
  16. HandleViewResources::HandleViewResources() {}
  17. void HandleViewResources::LoadIfNecessary(const JavaRef<jobject>& context) {
  18. if (loaded_)
  19. return;
  20. loaded_ = true;
  21. TRACE_EVENT0("ui", "HandleViewResources::Create");
  22. JNIEnv* env = base::android::AttachCurrentThread();
  23. left_bitmap_ = CreateSkBitmapFromJavaBitmap(
  24. Java_HandleViewResources_getLeftHandleBitmap(env, context));
  25. right_bitmap_ = CreateSkBitmapFromJavaBitmap(
  26. Java_HandleViewResources_getRightHandleBitmap(env, context));
  27. center_bitmap_ = CreateSkBitmapFromJavaBitmap(
  28. Java_HandleViewResources_getCenterHandleBitmap(env, context));
  29. left_bitmap_.setImmutable();
  30. right_bitmap_.setImmutable();
  31. center_bitmap_.setImmutable();
  32. drawable_horizontal_padding_ratio_ =
  33. Java_HandleViewResources_getHandleHorizontalPaddingRatio(env);
  34. }
  35. const SkBitmap& HandleViewResources::GetBitmap(
  36. ui::TouchHandleOrientation orientation) {
  37. DCHECK(loaded_);
  38. switch (orientation) {
  39. case ui::TouchHandleOrientation::LEFT:
  40. return left_bitmap_;
  41. case ui::TouchHandleOrientation::RIGHT:
  42. return right_bitmap_;
  43. case ui::TouchHandleOrientation::CENTER:
  44. return center_bitmap_;
  45. case ui::TouchHandleOrientation::UNDEFINED:
  46. NOTREACHED() << "Invalid touch handle orientation.";
  47. };
  48. return center_bitmap_;
  49. }
  50. float HandleViewResources::GetDrawableHorizontalPaddingRatio() const {
  51. DCHECK(loaded_);
  52. return drawable_horizontal_padding_ratio_;
  53. }
  54. } // namespace ui