diff options
Diffstat (limited to 'Source/WebCore')
-rw-r--r-- | Source/WebCore/bridge/jni/v8/JavaInstanceJobjectV8.cpp | 23 | ||||
-rw-r--r-- | Source/WebCore/bridge/jni/v8/JavaNPObjectV8.cpp | 8 | ||||
-rw-r--r-- | Source/WebCore/platform/graphics/android/TiledTexture.cpp | 24 |
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(); |