summaryrefslogtreecommitdiffstats
path: root/Source/WebCore
diff options
context:
space:
mode:
Diffstat (limited to 'Source/WebCore')
-rw-r--r--Source/WebCore/bridge/jni/v8/JavaInstanceJobjectV8.cpp23
-rw-r--r--Source/WebCore/bridge/jni/v8/JavaNPObjectV8.cpp8
-rw-r--r--Source/WebCore/platform/graphics/android/TiledTexture.cpp24
3 files changed, 40 insertions, 15 deletions
diff --git a/Source/WebCore/bridge/jni/v8/JavaInstanceJobjectV8.cpp b/Source/WebCore/bridge/jni/v8/JavaInstanceJobjectV8.cpp
index 8221eff..f2dd1d2 100644
--- a/Source/WebCore/bridge/jni/v8/JavaInstanceJobjectV8.cpp
+++ b/Source/WebCore/bridge/jni/v8/JavaInstanceJobjectV8.cpp
@@ -37,6 +37,7 @@
#include <wtf/OwnArrayPtr.h>
#include <wtf/PassOwnPtr.h>
#include <wtf/text/CString.h>
+#include <wtf/text/StringBuilder.h>
using namespace JSC::Bindings;
@@ -75,10 +76,30 @@ JavaValue JavaInstanceJobject::invokeMethod(const JavaMethod* method, JavaValue*
return jvalueToJavaValue(result, method->returnType());
}
+static void appendClassName(StringBuilder& builder, const char* className)
+{
+ char* c = fastStrDup(className);
+ char* result = c;
+ while (*c) {
+ if (*c == '.')
+ *c = '/';
+ c++;
+ }
+ builder.append(result);
+ fastFree(result);
+}
+
JavaValue JavaInstanceJobject::getField(const JavaField* field)
{
ASSERT(getClass()->fieldNamed(field->name().utf8().data()) == field);
- return jvalueToJavaValue(getJNIField(javaInstance(), field->type(), field->name().utf8().data(), field->typeClassName()), field->type());
+
+ StringBuilder signature;
+ signature.append(signatureFromJavaType(field->type()));
+ if (field->type() == JavaTypeObject || field->type() == JavaTypeString) {
+ appendClassName(signature, field->typeClassName());
+ signature.append(';');
+ }
+ return jvalueToJavaValue(getJNIField(javaInstance(), field->type(), field->name().utf8().data(), signature.toString().utf8().data()), field->type());
}
#endif // ENABLE(JAVA_BRIDGE)
diff --git a/Source/WebCore/bridge/jni/v8/JavaNPObjectV8.cpp b/Source/WebCore/bridge/jni/v8/JavaNPObjectV8.cpp
index b86a090..b22d57f 100644
--- a/Source/WebCore/bridge/jni/v8/JavaNPObjectV8.cpp
+++ b/Source/WebCore/bridge/jni/v8/JavaNPObjectV8.cpp
@@ -137,8 +137,10 @@ bool JavaNPObjectInvoke(NPObject* obj, NPIdentifier identifier, const NPVariant*
break;
}
}
- if (!jMethod)
+ if (!jMethod) {
+ instance->end();
return false;
+ }
JavaValue* jArgs = new JavaValue[argCount];
for (unsigned int i = 0; i < argCount; i++)
@@ -181,8 +183,10 @@ bool JavaNPObjectGetProperty(NPObject* obj, NPIdentifier identifier, NPVariant*
instance->begin();
JavaField* field = instance->getClass()->fieldNamed(name);
free(name); // TODO: use NPN_MemFree
- if (!field)
+ if (!field) {
+ instance->end();
return false;
+ }
#if PLATFORM(ANDROID)
// JSC does not seem to support returning object properties so we emulate that
diff --git a/Source/WebCore/platform/graphics/android/TiledTexture.cpp b/Source/WebCore/platform/graphics/android/TiledTexture.cpp
index d975825..0efcfc3 100644
--- a/Source/WebCore/platform/graphics/android/TiledTexture.cpp
+++ b/Source/WebCore/platform/graphics/android/TiledTexture.cpp
@@ -63,8 +63,8 @@ void TiledTexture::prepare(GLWebViewState* state, bool repaint)
IntRect visibleArea = m_surface->visibleArea();
IntRect area(visibleArea.x() * m_surface->scale(),
visibleArea.y() * m_surface->scale(),
- visibleArea.width() * m_surface->scale(),
- visibleArea.height() * m_surface->scale());
+ ceilf(visibleArea.width() * m_surface->scale()),
+ ceilf(visibleArea.height() * m_surface->scale()));
for (unsigned int i = 0; i < m_tiles.size(); i++) {
BaseTile* tile = m_tiles[i];
@@ -82,16 +82,16 @@ void TiledTexture::prepare(GLWebViewState* state, bool repaint)
m_area.setX(area.x() / tileWidth);
m_area.setY(area.y() / tileHeight);
- m_area.setWidth(area.width() / tileWidth);
- m_area.setHeight(area.height() / tileHeight);
-
- if (m_area.width() * tileWidth < area.width())
- m_area.setWidth(m_area.width() + 1);
- if (m_area.height() * tileHeight < area.height())
- m_area.setHeight(m_area.height() + 1);
-
- XLOG("for TiledTexture %x, we have a visible area of %d x %d, corresponding to %d x %d tiles",
- this, visibleArea.width(), visibleArea.height(),
+ float right = (area.x() + area.width()) / (float) tileWidth;
+ float bottom = (area.y() + area.height()) / (float) tileHeight;
+ m_area.setWidth(ceilf(right) - m_area.x());
+ m_area.setHeight(ceilf(bottom) - m_area.y());
+
+ XLOG("for TiledTexture %x, we have a visible area of %d, %d - %d x %d, corresponding to %d, %d x - %d x %d tiles",
+ this,
+ visibleArea.x(), visibleArea.y(),
+ visibleArea.width(), visibleArea.height(),
+ m_area.x(), m_area.y(),
m_area.width(), m_area.height());
bool goingDown = m_prevTileY < m_area.y();