diff options
author | powei@chromium.org <powei@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-09-20 03:34:14 +0000 |
---|---|---|
committer | powei@chromium.org <powei@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-09-20 03:34:14 +0000 |
commit | 741fba42846459cbecdeb933f98e74bffdc0e306 (patch) | |
tree | 318ace136ecc0ef477c912cb8e98352a6e45e665 /ui/gfx/android | |
parent | 0dff241faa6cc89083d24f6443cf03695e64f1e4 (diff) | |
download | chromium_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.cc | 46 | ||||
-rw-r--r-- | ui/gfx/android/java_bitmap.h | 2 |
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); |