, m_width(0)
{}
-void RenderSkinAndroid::Init(android::AssetManager* am)
+void RenderSkinAndroid::Init(android::AssetManager* am, String drawableDirectory)
{
- RenderSkinButton::Init(am);
+ RenderSkinButton::Init(am, drawableDirectory);
RenderSkinCombo::Init(am);
- RenderSkinRadio::Init(am);
+ RenderSkinRadio::Init(am, drawableDirectory);
}
bool RenderSkinAndroid::DecodeBitmap(android::AssetManager* am, const char* fileName, SkBitmap* bitmap)
#ifndef RenderSkinAndroid_h
#define RenderSkinAndroid_h
+#include "PlatformString.h"
+
namespace android {
class AssetManager;
}
* Initialize the Android skinning system. The AssetManager may be used to find resources used
* in rendering.
*/
- static void Init(android::AssetManager*);
+ static void Init(android::AssetManager*, String drawableDirectory);
/* DecodeBitmap determines which file to use, with the given fileName of the form
* "images/bitmap.png", and uses the asset manager to select the exact one. It
#define LOG_TAG "WebCore"
#include "config.h"
+#include "CString.h"
#include "android_graphics.h"
#include "Document.h"
#include "IntRect.h"
static const PatchData gFiles[] =
{
- { "res/drawable-mdpi/btn_default_normal_disable.9.png", 2, 7 },
- { "res/drawable-mdpi/btn_default_normal.9.png", 2, 7 },
- { "res/drawable-mdpi/btn_default_selected.9.png", 2, 7 },
- { "res/drawable-mdpi/btn_default_pressed.9.png", 2, 7 }
+ { "btn_default_normal_disable.9.png", 2, 7 },
+ { "btn_default_normal.9.png", 2, 7 },
+ { "btn_default_selected.9.png", 2, 7 },
+ { "btn_default_pressed.9.png", 2, 7 }
};
static SkBitmap gButton[sizeof(gFiles)/sizeof(gFiles[0])];
namespace WebCore {
-void RenderSkinButton::Init(android::AssetManager* am)
+void RenderSkinButton::Init(android::AssetManager* am, String drawableDirectory)
{
static bool gInited;
if (gInited)
gInited = true;
gDecoded = true;
for (size_t i = 0; i < sizeof(gFiles)/sizeof(gFiles[0]); i++) {
- if (!RenderSkinAndroid::DecodeBitmap(am, gFiles[i].name, &gButton[i])) {
+ String path = drawableDirectory + gFiles[i].name;
+ if (!RenderSkinAndroid::DecodeBitmap(am, path.utf8().data(), &gButton[i])) {
gDecoded = false;
LOGD("RenderSkinButton::Init: button assets failed to decode\n\tBrowser buttons will not draw");
break;
* Initialize the class before use. Uses the AssetManager to initialize any
* bitmaps the class may use.
*/
- static void Init(android::AssetManager*);
+ static void Init(android::AssetManager*, String drawableDirectory);
/**
* Draw the skin to the canvas, using the rectangle for its bounds and the
* State to determine which skin to use, i.e. focused or not focused.
#include "config.h"
#include "RenderSkinRadio.h"
+#include "CString.h"
#include "android_graphics.h"
#include "Document.h"
#include "Element.h"
#include "SkCanvas.h"
#include "SkRect.h"
-static const char* checks[] = { "res/drawable-mdpi/btn_check_off.png",
- "res/drawable-mdpi/btn_check_on.png",
- "res/drawable-mdpi/btn_radio_off.png",
- "res/drawable-mdpi/btn_radio_on.png"};
+static const char* checks[] = { "btn_check_off.png",
+ "btn_check_on.png",
+ "btn_radio_off.png",
+ "btn_radio_on.png"};
// Matches the width of the bitmap
static SkScalar SIZE;
static SkBitmap s_bitmap[4];
static bool s_decoded;
-void RenderSkinRadio::Init(android::AssetManager* am)
+void RenderSkinRadio::Init(android::AssetManager* am, String drawableDirectory)
{
if (s_decoded)
return;
- s_decoded = RenderSkinAndroid::DecodeBitmap(am, checks[0], &s_bitmap[0]);
- s_decoded = RenderSkinAndroid::DecodeBitmap(am, checks[1], &s_bitmap[1]) && s_decoded;
- s_decoded = RenderSkinAndroid::DecodeBitmap(am, checks[2], &s_bitmap[2]) && s_decoded;
- s_decoded = RenderSkinAndroid::DecodeBitmap(am, checks[3], &s_bitmap[3]) && s_decoded;
+ String path = drawableDirectory + checks[0];
+ s_decoded = RenderSkinAndroid::DecodeBitmap(am, path.utf8().data(), &s_bitmap[0]);
+ path = drawableDirectory + checks[1];
+ s_decoded = RenderSkinAndroid::DecodeBitmap(am, path.utf8().data(), &s_bitmap[1]) && s_decoded;
+ path = drawableDirectory + checks[2];
+ s_decoded = RenderSkinAndroid::DecodeBitmap(am, path.utf8().data(), &s_bitmap[2]) && s_decoded;
+ path = drawableDirectory + checks[3];
+ s_decoded = RenderSkinAndroid::DecodeBitmap(am, path.utf8().data(), &s_bitmap[3]) && s_decoded;
SIZE = SkIntToScalar(s_bitmap[0].width());
}
#ifndef RenderSkinRadio_h
#define RenderSkinRadio_h
+#include "PlatformString.h"
+
class SkCanvas;
namespace android {
/**
* Initialize the class before use. Uses the AssetManager to initialize any bitmaps the class may use.
*/
- static void Init(android::AssetManager*);
+ static void Init(android::AssetManager*, String drawableDirectory);
/**
* Draw the element to the canvas at the specified size and location.
// Set the mNativeFrame field in Frame
SET_NATIVE_FRAME(env, obj, (int)frame);
- // Setup the asset manager.
- AssetManager* am = assetManagerForJavaObject(env, jAssetManager);
- // Initialize our skinning classes
- WebCore::RenderSkinAndroid::Init(am);
+ String directory = webFrame->getRawResourceFilename(WebFrame::DRAWABLEDIR);
+ if (directory.isEmpty())
+ LOGE("Can't find the drawable directory");
+ else {
+ // Setup the asset manager.
+ AssetManager* am = assetManagerForJavaObject(env, jAssetManager);
+ // Initialize our skinning classes
+ WebCore::RenderSkinAndroid::Init(am, directory);
+ }
}
static void DestroyFrame(JNIEnv* env, jobject obj)
enum RAW_RES_ID {
NODOMAIN = 1,
LOADERROR,
+ DRAWABLEDIR,
};
WebFrame(JNIEnv* env, jobject obj, jobject historyList, WebCore::Page* page);
~WebFrame();