summaryrefslogtreecommitdiffstats
path: root/ui/gfx/android
diff options
context:
space:
mode:
authorpowei@chromium.org <powei@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-09-20 03:34:14 +0000
committerpowei@chromium.org <powei@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-09-20 03:34:14 +0000
commit741fba42846459cbecdeb933f98e74bffdc0e306 (patch)
tree318ace136ecc0ef477c912cb8e98352a6e45e665 /ui/gfx/android
parent0dff241faa6cc89083d24f6443cf03695e64f1e4 (diff)
downloadchromium_src-741fba42846459cbecdeb933f98e74bffdc0e306.zip
chromium_src-741fba42846459cbecdeb933f98e74bffdc0e306.tar.gz
chromium_src-741fba42846459cbecdeb933f98e74bffdc0e306.tar.bz2
Update the nine patch layer to use UI resources
The old nine-patch layer used priority resource manager for requesting textures. This patch updates the nine-patch layer to use the UI resource manager. this patch clarifies the semantics of the aperture in both image and layer The new semantics corresponds to existing logic on the android-side. Changes have been made to UIResourceBitmap to use SkPixelRef as ref-counted of the bitmap content. The android-side changes: https://gerrit-int.chromium.org/#/c/43103/ [Update 8/13/2013] Reverted due to "regression" ( https://code.google.com/p/chromium/issues/detail?id=290215 ): https://codereview.chromium.org/23620047/ [Update 8/13/2013] Reverted due to failed mac_gpu bot: https://codereview.chromium.org/23740010/ BUG=276482,276487,290215 Committed: https://src.chromium.org/viewvc/chrome?view=rev&revision=222732 Committed: https://src.chromium.org/viewvc/chrome?view=rev&revision=223162 Review URL: https://chromiumcodereview.appspot.com/22870016 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@224270 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ui/gfx/android')
-rw-r--r--ui/gfx/android/java_bitmap.cc46
-rw-r--r--ui/gfx/android/java_bitmap.h2
2 files changed, 20 insertions, 28 deletions
diff --git a/ui/gfx/android/java_bitmap.cc b/ui/gfx/android/java_bitmap.cc
index c3cd94d..6c2eaa8 100644
--- a/ui/gfx/android/java_bitmap.cc
+++ b/ui/gfx/android/java_bitmap.cc
@@ -62,33 +62,20 @@ ScopedJavaLocalRef<jobject> ConvertToJavaBitmap(const SkBitmap* skbitmap) {
return jbitmap;
}
-static ScopedJavaLocalRef<jobject> CreateJavaBitmapFromResource(
- const char* name, gfx::Size requested_size) {
- JNIEnv* env = AttachCurrentThread();
- ScopedJavaLocalRef<jstring> jname(
- base::android::ConvertUTF8ToJavaString(env, name));
- return ui::Java_BitmapHelper_decodeDrawableResource(env,
- jname.obj(),
- requested_size.width(),
- requested_size.height());
-}
-
-static SkBitmap ConvertToSkBitmap(ScopedJavaLocalRef<jobject> jbitmap) {
- if (jbitmap.is_null())
- return SkBitmap();
+SkBitmap CreateSkBitmapFromJavaBitmap(JavaBitmap& jbitmap) {
+ DCHECK_EQ(jbitmap.format(), ANDROID_BITMAP_FORMAT_RGBA_8888);
- JavaBitmap src_lock(jbitmap.obj());
- DCHECK_EQ(src_lock.format(), ANDROID_BITMAP_FORMAT_RGBA_8888);
-
- gfx::Size src_size = src_lock.size();
+ gfx::Size src_size = jbitmap.size();
SkBitmap skbitmap;
skbitmap.setConfig(SkBitmap::kARGB_8888_Config,
- src_size.width(), src_size.height(), src_lock.stride());
+ src_size.width(),
+ src_size.height(),
+ jbitmap.stride());
skbitmap.allocPixels();
SkAutoLockPixels dst_lock(skbitmap);
- void* src_pixels = src_lock.pixels();
+ void* src_pixels = jbitmap.pixels();
void* dst_pixels = skbitmap.getPixels();
memcpy(dst_pixels, src_pixels, skbitmap.getSize());
@@ -98,14 +85,17 @@ static SkBitmap ConvertToSkBitmap(ScopedJavaLocalRef<jobject> jbitmap) {
SkBitmap CreateSkBitmapFromResource(const char* name, gfx::Size size) {
DCHECK(!size.IsEmpty());
- SkBitmap bitmap =
- ConvertToSkBitmap(CreateJavaBitmapFromResource(name, size));
- if (bitmap.isNull())
- return bitmap;
- // RESIZE_BOX has sufficient downsampling quality with minimal runtime cost.
- return skia::ImageOperations::Resize(bitmap,
- skia::ImageOperations::RESIZE_BOX,
- size.width(), size.height());
+ JNIEnv* env = AttachCurrentThread();
+ ScopedJavaLocalRef<jstring> jname(env, env->NewStringUTF(name));
+ ScopedJavaLocalRef<jobject> jobj(ui::Java_BitmapHelper_decodeDrawableResource(
+ env, jname.obj(), size.width(), size.height()));
+ if (jobj.is_null())
+ return SkBitmap();
+
+ JavaBitmap jbitmap(jobj.obj());
+ SkBitmap bitmap = CreateSkBitmapFromJavaBitmap(jbitmap);
+ return skia::ImageOperations::Resize(
+ bitmap, skia::ImageOperations::RESIZE_BOX, size.width(), size.height());
}
} // namespace gfx
diff --git a/ui/gfx/android/java_bitmap.h b/ui/gfx/android/java_bitmap.h
index 14bfc990..319ad79 100644
--- a/ui/gfx/android/java_bitmap.h
+++ b/ui/gfx/android/java_bitmap.h
@@ -44,6 +44,8 @@ class UI_EXPORT JavaBitmap {
UI_EXPORT base::android::ScopedJavaLocalRef<jobject> ConvertToJavaBitmap(
const SkBitmap* skbitmap);
+UI_EXPORT SkBitmap CreateSkBitmapFromJavaBitmap(JavaBitmap& jbitmap);
+
// If the resource loads successfully, it will be resized to |size|.
// Note: If the source resource is smaller than |size|, quality may suffer.
UI_EXPORT SkBitmap CreateSkBitmapFromResource(const char* name, gfx::Size size);