18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/* 28e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Copyright 2006, The Android Open Source Project 38e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 48e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Redistribution and use in source and binary forms, with or without 58e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * modification, are permitted provided that the following conditions 68e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * are met: 78e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * * Redistributions of source code must retain the above copyright 88e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * notice, this list of conditions and the following disclaimer. 98e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * * Redistributions in binary form must reproduce the above copyright 108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * notice, this list of conditions and the following disclaimer in the 118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * documentation and/or other materials provided with the distribution. 128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY 148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 163298a7d84b96ade73c6b170671711a8f2792ae59Steve Block * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR 178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 253298a7d84b96ade73c6b170671711a8f2792ae59Steve Block 268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define LOG_TAG "WebCore" 278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "config.h" 298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "RenderSkinAndroid.h" 307f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard#include "RenderSkinMediaButton.h" 318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "SkImageDecoder.h" 328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 33a54eb7fa1e850d7096f97065f35ed00bcb5384d3Mathias Agopian#include <androidfw/AssetManager.h> 34a54eb7fa1e850d7096f97065f35ed00bcb5384d3Mathias Agopian#include <androidfw/Asset.h> 358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectnamespace WebCore { 378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 38ce03c1c1203621e552d41a8b3831837636f364a9Ben MurdochString RenderSkinAndroid::s_drawableDirectory = ""; 39ce03c1c1203621e552d41a8b3831837636f364a9Ben MurdochRenderSkinAndroid::Resolution RenderSkinAndroid::s_drawableResolution = RenderSkinAndroid::MedRes; 40ce03c1c1203621e552d41a8b3831837636f364a9Ben Murdoch 414de82d04a6a82fee6e2d924768e88af58e966982Leon ScrogginsRenderSkinAndroid::~RenderSkinAndroid() 428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 434de82d04a6a82fee6e2d924768e88af58e966982Leon Scroggins} 44ce03c1c1203621e552d41a8b3831837636f364a9Ben MurdochRenderSkinAndroid::RenderSkinAndroid(String drawableDirectory) 454de82d04a6a82fee6e2d924768e88af58e966982Leon Scroggins{ 46ce03c1c1203621e552d41a8b3831837636f364a9Ben Murdoch if (s_drawableDirectory.isEmpty() && !drawableDirectory.isEmpty()) { 47ce03c1c1203621e552d41a8b3831837636f364a9Ben Murdoch s_drawableResolution = MedRes; 48ce03c1c1203621e552d41a8b3831837636f364a9Ben Murdoch if (drawableDirectory.endsWith("-hdpi/")) 49ce03c1c1203621e552d41a8b3831837636f364a9Ben Murdoch s_drawableResolution = HighRes; 502490e50952b13330c2d7712654a69b90fb572eb0Ben Murdoch else if (drawableDirectory.endsWith("-xhdpi/")) 512490e50952b13330c2d7712654a69b90fb572eb0Ben Murdoch s_drawableResolution = ExtraHighRes; 52ce03c1c1203621e552d41a8b3831837636f364a9Ben Murdoch 53ce03c1c1203621e552d41a8b3831837636f364a9Ben Murdoch s_drawableDirectory = drawableDirectory; 54ce03c1c1203621e552d41a8b3831837636f364a9Ben Murdoch } 558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool RenderSkinAndroid::DecodeBitmap(android::AssetManager* am, const char* fileName, SkBitmap* bitmap) 588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project android::Asset* asset = am->open(fileName, android::Asset::ACCESS_BUFFER); 608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!asset) { 618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project asset = am->openNonAsset(fileName, android::Asset::ACCESS_BUFFER); 628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!asset) { 63a09e7cf49f43950a799f936bf42a9912d696547bSteve Block ALOGD("RenderSkinAndroid: File \"%s\" not found.\n", fileName); 648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return false; 658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool success = SkImageDecoder::DecodeMemory(asset->getBuffer(false), asset->getLength(), bitmap); 698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!success) { 70a09e7cf49f43950a799f936bf42a9912d696547bSteve Block ALOGD("RenderSkinAndroid: Failed to decode %s\n", fileName); 718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project delete asset; 748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return success; 758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} // namespace WebCore 78