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

Side by Side Diff: ui/android/resources/resource_manager_impl.cc

Issue 1337703002: [Contextual Search] Add support for crushed sprites and animate the search provider icon (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: More changes from dtrainor@ review Created 5 years, 1 month 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 unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "ui/android/resources/resource_manager_impl.h" 5 #include "ui/android/resources/resource_manager_impl.h"
6 6
7 #include <utility>
8 #include <vector>
9
10 #include "base/android/jni_array.h"
7 #include "base/android/jni_string.h" 11 #include "base/android/jni_string.h"
8 #include "base/trace_event/trace_event.h" 12 #include "base/trace_event/trace_event.h"
9 #include "cc/resources/scoped_ui_resource.h" 13 #include "cc/resources/scoped_ui_resource.h"
10 #include "jni/ResourceManager_jni.h" 14 #include "jni/ResourceManager_jni.h"
11 #include "ui/android/resources/ui_resource_provider.h" 15 #include "ui/android/resources/ui_resource_provider.h"
12 #include "ui/gfx/android/java_bitmap.h" 16 #include "ui/gfx/android/java_bitmap.h"
17 #include "ui/gfx/geometry/rect.h"
18
19 using base::android::JavaArrayOfIntArrayToIntVector;
13 20
14 namespace ui { 21 namespace ui {
15 22
16 // static 23 // static
17 ResourceManagerImpl* ResourceManagerImpl::FromJavaObject(jobject jobj) { 24 ResourceManagerImpl* ResourceManagerImpl::FromJavaObject(jobject jobj) {
18 return reinterpret_cast<ResourceManagerImpl*>( 25 return reinterpret_cast<ResourceManagerImpl*>(
19 Java_ResourceManager_getNativePtr(base::android::AttachCurrentThread(), 26 Java_ResourceManager_getNativePtr(base::android::AttachCurrentThread(),
20 jobj)); 27 jobj));
21 } 28 }
22 29
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
106 resource->aperture.SetRect(aperture_left, aperture_top, 113 resource->aperture.SetRect(aperture_left, aperture_top,
107 aperture_right - aperture_left, 114 aperture_right - aperture_left,
108 aperture_bottom - aperture_top); 115 aperture_bottom - aperture_top);
109 116
110 SkBitmap skbitmap = gfx::CreateSkBitmapFromJavaBitmap(jbitmap); 117 SkBitmap skbitmap = gfx::CreateSkBitmapFromJavaBitmap(jbitmap);
111 skbitmap.setImmutable(); 118 skbitmap.setImmutable();
112 resource->ui_resource = 119 resource->ui_resource =
113 cc::ScopedUIResource::Create(host_, cc::UIResourceBitmap(skbitmap)); 120 cc::ScopedUIResource::Create(host_, cc::UIResourceBitmap(skbitmap));
114 } 121 }
115 122
123 CrushedSpriteResource* ResourceManagerImpl::GetCrushedSpriteResource(
124 int bitmap_res_id, int metadata_res_id) {
125 CrushedSpriteResource* resource =
126 crushed_sprite_resources_.Lookup(bitmap_res_id);
127 if (!resource) {
128 RequestCrushedSpriteResourceFromJava(bitmap_res_id, metadata_res_id, false);
129 resource = crushed_sprite_resources_.Lookup(bitmap_res_id);
130 } else if (resource->BitmapHasBeenEvictedFromMemory()) {
131 RequestCrushedSpriteResourceFromJava(bitmap_res_id, metadata_res_id, true);
132 }
133
134 return resource;
135 }
136
137 void ResourceManagerImpl::OnCrushedSpriteResourceReady(
138 JNIEnv* env,
139 jobject jobj,
140 jint bitmap_res_id,
141 jobject bitmap,
142 jobjectArray frame_rects,
143 jint sprite_width,
144 jint sprite_height) {
145
146 // Construct source and destination rectangles for each frame from
147 // |frame_rects|.
148 std::vector<std::vector<int>> all_frame_rects_vector;
149 JavaArrayOfIntArrayToIntVector(env, frame_rects, &all_frame_rects_vector);
150 CrushedSpriteResource::SrcDstRects src_dst_rects;
151
152 for (size_t i = 0; i < all_frame_rects_vector.size(); ++i) {
153 std::vector<int> frame_ints = all_frame_rects_vector[i];
154 CrushedSpriteResource::FrameSrcDstRects frame_src_dst_rects;
155
156 // Create source and destination gfx::Rect's for each rectangle in
157 // |frame_ints|. Each rectangle consists of 6 values:
158 // i: destination x i+1: destination y i+2: source x i+3: source y
159 // i+4: width i+5: height
160 for (size_t j = 0; j < frame_ints.size(); j += 6) {
161 gfx::Rect sprite_rect_destination(frame_ints[j],
162 frame_ints[j+1],
163 frame_ints[j+4],
164 frame_ints[j+5]);
165 gfx::Rect sprite_rect_source(frame_ints[j+2],
166 frame_ints[j+3],
167 frame_ints[j+4],
168 frame_ints[j+5]);
169 frame_src_dst_rects.push_back(std::pair<gfx::Rect, gfx::Rect>(
170 sprite_rect_source, sprite_rect_destination));
171 }
172 src_dst_rects.push_back(frame_src_dst_rects);
173 }
174
175 SkBitmap skbitmap =
176 gfx::CreateSkBitmapFromJavaBitmap(gfx::JavaBitmap(bitmap));
177 skbitmap.setImmutable();
178
179 CrushedSpriteResource* resource = new CrushedSpriteResource(
180 skbitmap,
181 src_dst_rects,
182 gfx::Size(sprite_width, sprite_height));
183
184 if (crushed_sprite_resources_.Lookup(bitmap_res_id)) {
185 crushed_sprite_resources_.Replace(bitmap_res_id, resource);
186 } else {
187 crushed_sprite_resources_.AddWithID(resource, bitmap_res_id);
188 }
189 }
190
191 void ResourceManagerImpl::OnCrushedSpriteResourceReloaded(
192 JNIEnv* env,
193 jobject jobj,
194 jint bitmap_res_id,
195 jobject bitmap) {
196 CrushedSpriteResource* resource =
197 crushed_sprite_resources_.Lookup(bitmap_res_id);
198 if (!resource) {
199 // Cannot reload a resource that has not been previously loaded.
200 return;
201 }
202 SkBitmap skbitmap =
203 gfx::CreateSkBitmapFromJavaBitmap(gfx::JavaBitmap(bitmap));
204 skbitmap.setImmutable();
205 resource->SetBitmap(skbitmap);
206 }
207
116 // static 208 // static
117 bool ResourceManagerImpl::RegisterResourceManager(JNIEnv* env) { 209 bool ResourceManagerImpl::RegisterResourceManager(JNIEnv* env) {
118 return RegisterNativesImpl(env); 210 return RegisterNativesImpl(env);
119 } 211 }
120 212
121 void ResourceManagerImpl::PreloadResourceFromJava(AndroidResourceType res_type, 213 void ResourceManagerImpl::PreloadResourceFromJava(AndroidResourceType res_type,
122 int res_id) { 214 int res_id) {
123 TRACE_EVENT2("ui", "ResourceManagerImpl::PreloadResourceFromJava", 215 TRACE_EVENT2("ui", "ResourceManagerImpl::PreloadResourceFromJava",
124 "resource_type", res_type, 216 "resource_type", res_type,
125 "resource_id", res_id); 217 "resource_id", res_id);
126 Java_ResourceManager_preloadResource(base::android::AttachCurrentThread(), 218 Java_ResourceManager_preloadResource(base::android::AttachCurrentThread(),
127 java_obj_.obj(), res_type, res_id); 219 java_obj_.obj(), res_type, res_id);
128 } 220 }
129 221
130 void ResourceManagerImpl::RequestResourceFromJava(AndroidResourceType res_type, 222 void ResourceManagerImpl::RequestResourceFromJava(AndroidResourceType res_type,
131 int res_id) { 223 int res_id) {
132 TRACE_EVENT2("ui", "ResourceManagerImpl::RequestResourceFromJava", 224 TRACE_EVENT2("ui", "ResourceManagerImpl::RequestResourceFromJava",
133 "resource_type", res_type, 225 "resource_type", res_type,
134 "resource_id", res_id); 226 "resource_id", res_id);
135 Java_ResourceManager_resourceRequested(base::android::AttachCurrentThread(), 227 Java_ResourceManager_resourceRequested(base::android::AttachCurrentThread(),
136 java_obj_.obj(), res_type, res_id); 228 java_obj_.obj(), res_type, res_id);
137 } 229 }
138 230
231 void ResourceManagerImpl::RequestCrushedSpriteResourceFromJava(
232 int bitmap_res_id, int metadata_res_id, bool reloading) {
233 TRACE_EVENT2("ui",
234 "ResourceManagerImpl::RequestCrushedSpriteResourceFromJava",
235 "bitmap_res_id", bitmap_res_id,
236 "metadata_res_id", metadata_res_id);
237 Java_ResourceManager_crushedSpriteResourceRequested(
238 base::android::AttachCurrentThread(), java_obj_.obj(),
239 bitmap_res_id, metadata_res_id, reloading);
240 }
241
139 } // namespace ui 242 } // namespace ui
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698