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

Unified Diff: ui/android/resources/resource_manager_impl.cc

Issue 2746483003: ui/android: Fix Resource meta-data sharing with ResourceManager. (Closed)
Patch Set: jni Created 3 years, 9 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 side-by-side diff with in-line comments
Download patch
Index: ui/android/resources/resource_manager_impl.cc
diff --git a/ui/android/resources/resource_manager_impl.cc b/ui/android/resources/resource_manager_impl.cc
index 2e001bd9dcec9eea5950e88b33ce186c87d438be..f39278548b19e9dfc9faec402f657c1389d5b1c9 100644
--- a/ui/android/resources/resource_manager_impl.cc
+++ b/ui/android/resources/resource_manager_impl.cc
@@ -31,6 +31,7 @@
#include "ui/gfx/geometry/rect.h"
using base::android::JavaArrayOfIntArrayToIntVector;
+using base::android::JavaParamRef;
using base::android::JavaRef;
namespace ui {
@@ -73,9 +74,8 @@ ResourceManagerImpl::GetJavaObject() {
return base::android::ScopedJavaLocalRef<jobject>(java_obj_);
}
-ResourceManager::Resource* ResourceManagerImpl::GetResource(
- AndroidResourceType res_type,
- int res_id) {
+Resource* ResourceManagerImpl::GetResource(AndroidResourceType res_type,
+ int res_id) {
DCHECK_GE(res_type, ANDROID_RESOURCE_TYPE_FIRST);
DCHECK_LE(res_type, ANDROID_RESOURCE_TYPE_LAST);
@@ -109,9 +109,8 @@ void ResourceManagerImpl::RemoveUnusedTints(
}
}
-ResourceManager::Resource* ResourceManagerImpl::GetStaticResourceWithTint(
- int res_id,
- SkColor tint_color) {
+Resource* ResourceManagerImpl::GetStaticResourceWithTint(int res_id,
+ SkColor tint_color) {
if (tinted_resources_.find(tint_color) == tinted_resources_.end()) {
tinted_resources_[tint_color] = base::MakeUnique<ResourceMap>();
}
@@ -123,16 +122,15 @@ ResourceManager::Resource* ResourceManagerImpl::GetStaticResourceWithTint(
if (item != resource_map->end())
return item->second.get();
- std::unique_ptr<Resource> tinted_resource = base::MakeUnique<Resource>();
-
- ResourceManager::Resource* base_image =
- GetResource(ANDROID_RESOURCE_TYPE_STATIC, res_id);
+ Resource* base_image = GetResource(ANDROID_RESOURCE_TYPE_STATIC, res_id);
DCHECK(base_image);
+ std::unique_ptr<Resource> tinted_resource = base_image->CreateForCopy();
+
TRACE_EVENT0("browser", "ResourceManagerImpl::GetStaticResourceWithTint");
SkBitmap tinted_bitmap;
- tinted_bitmap.allocPixels(SkImageInfo::MakeN32Premul(base_image->size.width(),
- base_image->size.height()));
+ tinted_bitmap.allocPixels(SkImageInfo::MakeN32Premul(
+ base_image->size().width(), base_image->size().height()));
SkCanvas canvas(tinted_bitmap);
canvas.clear(SK_ColorTRANSPARENT);
@@ -145,16 +143,16 @@ ResourceManager::Resource* ResourceManagerImpl::GetStaticResourceWithTint(
SkColorFilter::MakeModeFilter(tint_color, SkBlendMode::kModulate));
// Draw the resource and make it immutable.
- base_image->ui_resource->GetBitmap(base_image->ui_resource->id(), false)
+ base_image->ui_resource()
+ ->GetBitmap(base_image->ui_resource()->id(), false)
.DrawToCanvas(&canvas, &color_filter);
tinted_bitmap.setImmutable();
// Create a UI resource from the new bitmap.
- tinted_resource->size = gfx::Size(base_image->size);
- tinted_resource->padding = gfx::Rect(base_image->padding);
- tinted_resource->aperture = gfx::Rect(base_image->aperture);
- tinted_resource->ui_resource = cc::ScopedUIResource::Create(
- ui_resource_manager_, cc::UIResourceBitmap(tinted_bitmap));
+ tinted_resource->SetUIResource(
+ cc::ScopedUIResource::Create(ui_resource_manager_,
+ cc::UIResourceBitmap(tinted_bitmap)),
+ base_image->size());
(*resource_map)[res_id].swap(tinted_resource);
@@ -183,41 +181,24 @@ void ResourceManagerImpl::OnResourceReady(JNIEnv* env,
jint res_type,
jint res_id,
const JavaRef<jobject>& 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) {
+ jlong native_resource) {
DCHECK_GE(res_type, ANDROID_RESOURCE_TYPE_FIRST);
DCHECK_LE(res_type, ANDROID_RESOURCE_TYPE_LAST);
TRACE_EVENT2("ui", "ResourceManagerImpl::OnResourceReady",
"resource_type", res_type,
"resource_id", res_id);
- std::unordered_map<int, std::unique_ptr<Resource>>::iterator item =
- resources_[res_type].find(res_id);
- if (item == resources_[res_type].end()) {
- resources_[res_type][res_id] = base::MakeUnique<Resource>();
- }
-
+ resources_[res_type][res_id] =
+ base::WrapUnique(reinterpret_cast<Resource*>(native_resource));
Resource* resource = resources_[res_type][res_id].get();
gfx::JavaBitmap jbitmap(bitmap);
- resource->size = jbitmap.size();
- resource->padding.SetRect(padding_left, padding_top,
- padding_right - padding_left,
- padding_bottom - padding_top);
- resource->aperture.SetRect(aperture_left, aperture_top,
- aperture_right - aperture_left,
- aperture_bottom - aperture_top);
-
SkBitmap skbitmap = gfx::CreateSkBitmapFromJavaBitmap(jbitmap);
skbitmap.setImmutable();
- resource->ui_resource = cc::ScopedUIResource::Create(
- ui_resource_manager_, cc::UIResourceBitmap(skbitmap));
+ resource->SetUIResource(
+ cc::ScopedUIResource::Create(ui_resource_manager_,
+ cc::UIResourceBitmap(skbitmap)),
+ jbitmap.size());
}
void ResourceManagerImpl::RemoveResource(
« no previous file with comments | « ui/android/resources/resource_manager_impl.h ('k') | ui/android/resources/resource_manager_impl_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698