// Copyright 2014 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef UI_ANDROID_RESOURCES_RESOURCE_MANAGER_IMPL_H_ #define UI_ANDROID_RESOURCES_RESOURCE_MANAGER_IMPL_H_ #include "base/id_map.h" #include "base/macros.h" #include "ui/android/resources/resource_manager.h" #include "ui/android/ui_android_export.h" #include "ui/gfx/geometry/rect.h" #include "ui/gfx/native_widget_types.h" namespace ui { class UI_ANDROID_EXPORT ResourceManagerImpl : public ResourceManager { public: static ResourceManagerImpl* FromJavaObject(jobject jobj); explicit ResourceManagerImpl(gfx::NativeWindow native_window); ~ResourceManagerImpl() override; void Init(cc::LayerTreeHost* host); // ResourceManager implementation. base::android::ScopedJavaLocalRef GetJavaObject() override; Resource* GetResource(AndroidResourceType res_type, int res_id) override; void PreloadResource(AndroidResourceType res_type, int res_id) override; CrushedSpriteResource* GetCrushedSpriteResource( int bitmap_res_id, int metadata_res_id) override; // Called from Java // ---------------------------------------------------------- void OnResourceReady(JNIEnv* env, const base::android::JavaRef& jobj, jint res_type, jint res_id, const base::android::JavaRef& bitmap, jint padding_left, jint padding_top, jint padding_right, jint padding_bottom, jint aperture_left, jint aperture_top, jint aperture_right, jint aperture_bottom); void OnCrushedSpriteResourceReady( JNIEnv* env, const base::android::JavaRef& jobj, jint bitmap_res_id, const base::android::JavaRef& bitmap, const base::android::JavaRef& frame_rects, jint unscaled_sprite_width, jint unscaled_sprite_height, jfloat scaled_sprite_width, jfloat scaled_sprite_height); void OnCrushedSpriteResourceReloaded( JNIEnv* env, const base::android::JavaRef& jobj, jint bitmap_res_id, const base::android::JavaRef& bitmap); static bool RegisterResourceManager(JNIEnv* env); // Helper method for processing crushed sprite metadata; public for testing. CrushedSpriteResource::SrcDstRects ProcessCrushedSpriteFrameRects( std::vector> frame_rects_vector); private: friend class TestResourceManagerImpl; // Start loading the resource. virtual for testing. virtual void PreloadResourceFromJava(AndroidResourceType res_type, int res_id); virtual void RequestResourceFromJava(AndroidResourceType res_type, int res_id); virtual void RequestCrushedSpriteResourceFromJava(int bitmap_res_id, int metadata_res_id, bool reloading); typedef IDMap ResourceMap; typedef IDMap CrushedSpriteResourceMap; cc::LayerTreeHost* host_; ResourceMap resources_[ANDROID_RESOURCE_TYPE_COUNT]; CrushedSpriteResourceMap crushed_sprite_resources_; base::android::ScopedJavaGlobalRef java_obj_; DISALLOW_COPY_AND_ASSIGN(ResourceManagerImpl); }; } // namespace ui #endif // UI_ANDROID_RESOURCES_RESOURCE_MANAGER_IMPL_H_