blob: 5161ace541078aafd1966424fdc19077a0fc30dd [file] [log] [blame]
// 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_H_
#define UI_ANDROID_RESOURCES_RESOURCE_MANAGER_H_
#include <memory>
#include "base/android/jni_android.h"
#include "cc/resources/scoped_ui_resource.h"
#include "ui/android/resources/crushed_sprite_resource.h"
#include "ui/android/ui_android_export.h"
#include "ui/gfx/geometry/insets_f.h"
#include "ui/gfx/geometry/rect.h"
#include "ui/gfx/geometry/size.h"
namespace ui {
class UIResourceProvider;
// A Java counterpart will be generated for this enum.
// GENERATED_JAVA_ENUM_PACKAGE: org.chromium.ui.resources
enum AndroidResourceType {
ANDROID_RESOURCE_TYPE_STATIC = 0,
ANDROID_RESOURCE_TYPE_DYNAMIC,
ANDROID_RESOURCE_TYPE_DYNAMIC_BITMAP,
ANDROID_RESOURCE_TYPE_SYSTEM,
ANDROID_RESOURCE_TYPE_CRUSHED_SPRITE,
ANDROID_RESOURCE_TYPE_COUNT,
ANDROID_RESOURCE_TYPE_FIRST = ANDROID_RESOURCE_TYPE_STATIC,
ANDROID_RESOURCE_TYPE_LAST = ANDROID_RESOURCE_TYPE_CRUSHED_SPRITE,
};
// The ResourceManager serves as a cache for resources obtained through Android
// APIs and consumed by the compositor.
class UI_ANDROID_EXPORT ResourceManager {
public:
struct Resource {
public:
Resource();
~Resource();
gfx::Rect Border(const gfx::Size& bounds) const;
gfx::Rect Border(const gfx::Size& bounds, const gfx::InsetsF& scale) const;
std::unique_ptr<cc::ScopedUIResource> ui_resource;
gfx::Size size;
gfx::Rect padding;
gfx::Rect aperture;
};
// Obtain a handle to the Java ResourceManager counterpart.
virtual base::android::ScopedJavaLocalRef<jobject> GetJavaObject() = 0;
// Return a handle to the resource specified by |res_type| and |res_id|.
// If the resource has not been loaded, loading will be performed
// synchronously, blocking until the load completes.
// If load fails, a null handle will be returned and it is up to the caller
// to react appropriately.
virtual Resource* GetResource(AndroidResourceType res_type, int res_id) = 0;
// Trigger asynchronous loading of the resource specified by |res_type| and
// |res_id|, if it has not yet been loaded.
virtual void PreloadResource(AndroidResourceType res_type, int res_id) = 0;
// Return a handle to the CrushedSpriteResource specified by |bitmap_res_id|
// and |metadata_res_id|. If the resource has not been loaded, loading will be
// performed synchronously, blocking until the load completes. If load fails,
// a null handle will be returned and it is up to the caller to react
// appropriately.
virtual CrushedSpriteResource* GetCrushedSpriteResource(
int bitmap_res_id, int metadata_res_id) = 0;
// Convenience wrapper method.
cc::UIResourceId GetUIResourceId(AndroidResourceType res_type, int res_id) {
Resource* resource = GetResource(res_type, res_id);
return resource && resource->ui_resource ? resource->ui_resource->id() : 0;
}
protected:
virtual ~ResourceManager() {}
};
} // namespace ui
#endif // UI_ANDROID_RESOURCES_RESOURCE_MANAGER_H_