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