diff options
author | Ben Murdoch <benm@google.com> | 2011-08-17 02:28:37 -0700 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2011-08-17 02:28:37 -0700 |
commit | 2d9e4c5514130be5468050cdf7b1ad8c5a57ac39 (patch) | |
tree | 2368bb5a21956acb815e5b5fafb91eaeb8f1ba5c /Source/WebKit/android/RenderSkinButton.cpp | |
parent | 41b52b2ab048f02c6ec7732f1e1a3430d8272da9 (diff) | |
parent | ce03c1c1203621e552d41a8b3831837636f364a9 (diff) | |
download | external_webkit-2d9e4c5514130be5468050cdf7b1ad8c5a57ac39.zip external_webkit-2d9e4c5514130be5468050cdf7b1ad8c5a57ac39.tar.gz external_webkit-2d9e4c5514130be5468050cdf7b1ad8c5a57ac39.tar.bz2 |
Merge "Lazily decode assets for form controls."
Diffstat (limited to 'Source/WebKit/android/RenderSkinButton.cpp')
-rw-r--r-- | Source/WebKit/android/RenderSkinButton.cpp | 37 |
1 files changed, 26 insertions, 11 deletions
diff --git a/Source/WebKit/android/RenderSkinButton.cpp b/Source/WebKit/android/RenderSkinButton.cpp index 6a0ae54..11e2fa8 100644 --- a/Source/WebKit/android/RenderSkinButton.cpp +++ b/Source/WebKit/android/RenderSkinButton.cpp @@ -42,6 +42,8 @@ #include <utils/ResourceTypes.h> #include <wtf/text/CString.h> +extern android::AssetManager* globalAssetManager(); + static const char* gFiles[] = { "btn_default_disabled_holo.9.png", "btn_default_normal_holo.9.png", @@ -51,29 +53,42 @@ static const char* gFiles[] = { namespace WebCore { -RenderSkinButton::RenderSkinButton(android::AssetManager* am, String drawableDirectory) +RenderSkinButton::RenderSkinButton(String drawableDirectory) + : m_decoded(false) + , m_decodingAttempted(false) + , m_drawableDirectory(drawableDirectory) { - m_decoded = true; + // Ensure our enums properly line up with our arrays. + android::CompileTimeAssert<(RenderSkinAndroid::kDisabled == 0)> a1; + android::CompileTimeAssert<(RenderSkinAndroid::kNormal == 1)> a2; + android::CompileTimeAssert<(RenderSkinAndroid::kFocused == 2)> a3; + android::CompileTimeAssert<(RenderSkinAndroid::kPressed == 3)> a4; +} + +void RenderSkinButton::decode() +{ + m_decodingAttempted = true; + + android::AssetManager* am = globalAssetManager(); + for (size_t i = 0; i < 4; i++) { - String path = String(drawableDirectory.impl()); + String path = m_drawableDirectory; path.append(String(gFiles[i])); if (!RenderSkinNinePatch::decodeAsset(am, path.utf8().data(), &m_buttons[i])) { m_decoded = false; - LOGE("RenderSkinButton::Init: button assets failed to decode\n\tBrowser buttons will not draw"); + LOGE("RenderSkinButton::decode: button assets failed to decode\n\tWebView buttons will not draw"); return; } } - - // Ensure our enums properly line up with our arrays. - android::CompileTimeAssert<(RenderSkinAndroid::kDisabled == 0)> a1; - android::CompileTimeAssert<(RenderSkinAndroid::kNormal == 1)> a2; - android::CompileTimeAssert<(RenderSkinAndroid::kFocused == 2)> a3; - android::CompileTimeAssert<(RenderSkinAndroid::kPressed == 3)> a4; + m_decoded = true; } void RenderSkinButton::draw(SkCanvas* canvas, const IntRect& r, - RenderSkinAndroid::State newState) const + RenderSkinAndroid::State newState) { + if (!m_decodingAttempted) + decode(); + // If we failed to decode, do nothing. This way the browser still works, // and webkit will still draw the label and layout space for us. if (!m_decoded) { |