diff options
-rw-r--r-- | WebCore/WebCore.xcodeproj/project.pbxproj | 8 | ||||
-rw-r--r-- | WebCore/platform/graphics/android/LayerAndroid.cpp | 106 | ||||
-rw-r--r-- | WebCore/platform/graphics/android/LayerAndroid.h | 17 | ||||
-rw-r--r-- | WebCore/plugins/PluginView.h | 1 | ||||
-rw-r--r-- | WebCore/storage/Database.cpp | 3 | ||||
-rw-r--r-- | WebKit/android/nav/WebView.cpp | 13 | ||||
-rw-r--r-- | WebKit/android/plugins/PluginWidgetAndroid.cpp | 2 |
7 files changed, 69 insertions, 81 deletions
diff --git a/WebCore/WebCore.xcodeproj/project.pbxproj b/WebCore/WebCore.xcodeproj/project.pbxproj index f4b8b02..9135a97 100644 --- a/WebCore/WebCore.xcodeproj/project.pbxproj +++ b/WebCore/WebCore.xcodeproj/project.pbxproj @@ -1136,6 +1136,8 @@ 59EE122E1106080F00885116 /* JNIUtilityPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 59EE122D1106080F00885116 /* JNIUtilityPrivate.h */; }; 59EE12301106081F00885116 /* JNIUtility.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 59EE122F1106081F00885116 /* JNIUtility.cpp */; }; 59EE12321106082900885116 /* JNIUtility.h in Headers */ = {isa = PBXBuildFile; fileRef = 59EE12311106082900885116 /* JNIUtility.h */; }; + 59FD5B8B1129B29100DB6D96 /* GeolocationPositionCache.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 59FD5B8A1129B29100DB6D96 /* GeolocationPositionCache.cpp */; }; + 59FD5B8D1129B29F00DB6D96 /* GeolocationPositionCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 59FD5B8C1129B29F00DB6D96 /* GeolocationPositionCache.h */; settings = {ATTRIBUTES = (Private, ); }; }; 5D15E3AB0F9E6AC1009E0E3F /* XMLTokenizerScope.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5D15E3A90F9E6AC1009E0E3F /* XMLTokenizerScope.cpp */; }; 5D15E3AC0F9E6AC1009E0E3F /* XMLTokenizerScope.h in Headers */ = {isa = PBXBuildFile; fileRef = 5D15E3AA0F9E6AC1009E0E3F /* XMLTokenizerScope.h */; }; 5D874F130D161D3200796C3B /* NetscapePlugInStreamLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 93E227DD0AF589AD00D48324 /* NetscapePlugInStreamLoader.cpp */; }; @@ -6530,6 +6532,8 @@ 59EE122D1106080F00885116 /* JNIUtilityPrivate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = JNIUtilityPrivate.h; path = jsc/JNIUtilityPrivate.h; sourceTree = "<group>"; }; 59EE122F1106081F00885116 /* JNIUtility.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JNIUtility.cpp; sourceTree = "<group>"; }; 59EE12311106082900885116 /* JNIUtility.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JNIUtility.h; sourceTree = "<group>"; }; + 59FD5B8A1129B29100DB6D96 /* GeolocationPositionCache.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GeolocationPositionCache.cpp; sourceTree = "<group>"; }; + 59FD5B8C1129B29F00DB6D96 /* GeolocationPositionCache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GeolocationPositionCache.h; sourceTree = "<group>"; }; 5D15E3A90F9E6AC1009E0E3F /* XMLTokenizerScope.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = XMLTokenizerScope.cpp; sourceTree = "<group>"; }; 5D15E3AA0F9E6AC1009E0E3F /* XMLTokenizerScope.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XMLTokenizerScope.h; sourceTree = "<group>"; }; 5D925B650F64D4DD00B847F0 /* ScrollBehavior.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ScrollBehavior.cpp; sourceTree = "<group>"; }; @@ -11408,6 +11412,8 @@ 65BF02180974806300C43196 /* page */ = { isa = PBXGroup; children = ( + 59FD5B8C1129B29F00DB6D96 /* GeolocationPositionCache.h */, + 59FD5B8A1129B29100DB6D96 /* GeolocationPositionCache.cpp */, 316FE1060E6E1D8400BF6088 /* animation */, 93C09A820B064F05005ABD4D /* mac */, 8538F0000AD71770006A81D1 /* AbstractView.idl */, @@ -18505,6 +18511,7 @@ B71FE6DF11091CB300DAEF77 /* PrintContext.h in Headers */, 9F72304F11184B4100AD0126 /* ScriptProfile.h in Headers */, 9F72305111184B4100AD0126 /* ScriptProfiler.h in Headers */, + 59FD5B8D1129B29F00DB6D96 /* GeolocationPositionCache.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -20683,6 +20690,7 @@ 84D0C4041115F1D40018AA34 /* AffineTransform.cpp in Sources */, B776D43D1104527500BEB0EC /* PrintContext.cpp in Sources */, 9F72305011184B4100AD0126 /* ScriptProfiler.cpp in Sources */, + 59FD5B8B1129B29100DB6D96 /* GeolocationPositionCache.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/WebCore/platform/graphics/android/LayerAndroid.cpp b/WebCore/platform/graphics/android/LayerAndroid.cpp index c8266d1..dcbb0c3 100644 --- a/WebCore/platform/graphics/android/LayerAndroid.cpp +++ b/WebCore/platform/graphics/android/LayerAndroid.cpp @@ -161,23 +161,10 @@ void LayerAndroid::setBackgroundColor(SkColor color) static int gDebugChildLevel; -void LayerAndroid::paintOn(int scrollX, int scrollY, - int width, int height, - float scale, SkCanvas* canvas) -{ - SkSize size; - size.set(width, height); - paintOn(SkPoint::Make(scrollX, scrollY), size, scale, canvas); -} - -void LayerAndroid::paintOn(SkPoint offset, SkSize size, SkScalar scale, SkCanvas* canvas) +void LayerAndroid::draw(SkCanvas* canvas, const SkRect* viewPort) { gDebugChildLevel = 0; - int scrollX = offset.fX; - int scrollY = offset.fY; - int width = size.width(); - int height = size.height(); - paintChildren(scrollX, scrollY, width, height, scale, canvas, 1); + paintChildren(viewPort, canvas, 1); } void LayerAndroid::setClip(SkCanvas* canvas) @@ -190,9 +177,7 @@ void LayerAndroid::setClip(SkCanvas* canvas) canvas->clipRect(clip); } -void LayerAndroid::paintChildren(int scrollX, int scrollY, - int width, int height, - float scale, SkCanvas* canvas, +void LayerAndroid::paintChildren(const SkRect* viewPort, SkCanvas* canvas, float opacity) { int count = canvas->save(); @@ -200,7 +185,7 @@ void LayerAndroid::paintChildren(int scrollX, int scrollY, if (m_haveClip) setClip(canvas); - paintMe(scrollX, scrollY, width, height, scale, canvas, opacity); + paintMe(viewPort, canvas, opacity); canvas->translate(m_position.fX + m_translation.fX, m_position.fY + m_translation.fY); @@ -208,7 +193,7 @@ void LayerAndroid::paintChildren(int scrollX, int scrollY, LayerAndroid* layer = static_cast<LayerAndroid*>(getChild(i)); if (layer) { gDebugChildLevel++; - layer->paintChildren(scrollX, scrollY, width, height, scale, + layer->paintChildren(viewPort, canvas, opacity * m_opacity); gDebugChildLevel--; } @@ -217,21 +202,15 @@ void LayerAndroid::paintChildren(int scrollX, int scrollY, canvas->restoreToCount(count); } -void LayerAndroid::calcPosition(int scrollX, - int scrollY, - int viewWidth, - int viewHeight, - float scale, - float* xPtr, - float* yPtr) -{ - float x = 0; - float y = 0; - if (m_isFixed) { - float w = viewWidth / scale; - float h = viewHeight / scale; - float dx = scrollX / scale; - float dy = scrollY / scale; +bool LayerAndroid::calcPosition(const SkRect* viewPort, + SkMatrix* matrix) { + if (viewPort && m_isFixed) { + float x = 0; + float y = 0; + float w = viewPort->width(); + float h = viewPort->height(); + float dx = viewPort->fLeft; + float dy = viewPort->fTop; if (m_fixedLeft.defined()) x = dx + m_fixedLeft.calcFloatValue(w); @@ -243,20 +222,13 @@ void LayerAndroid::calcPosition(int scrollX, else if (m_fixedBottom.defined()) y = dy + h - m_fixedBottom.calcFloatValue(h) - m_size.height(); - m_position.set(x - m_translation.fX, y - m_translation.fY); - } else { - x = m_translation.fX + m_position.fX; - y = m_translation.fY + m_position.fY; + matrix->setTranslate(x, y); + return true; } - if (xPtr) *xPtr = x; - if (yPtr) *yPtr = y; + return false; } -void LayerAndroid::paintMe(int scrollX, - int scrollY, - int viewWidth, - int viewHeight, - float scale, +void LayerAndroid::paintMe(const SkRect* viewPort, SkCanvas* canvas, float opacity) { @@ -283,25 +255,31 @@ void LayerAndroid::paintMe(int scrollX, */ float x, y; - calcPosition(scrollX, scrollY, viewWidth, viewHeight, scale, &x, &y); - canvas->translate(x, y); - - if (m_doRotation) { - float anchorX = m_anchorPoint.fX * m_size.width(); - float anchorY = m_anchorPoint.fY * m_size.height(); - canvas->translate(anchorX, anchorY); - canvas->rotate(m_angleTransform); - canvas->translate(-anchorX, -anchorY); - } + SkMatrix matrix; + if (!calcPosition(viewPort, + &matrix)) { + matrix.reset(); + + if (m_doRotation) { + float anchorX = m_anchorPoint.fX * m_size.width(); + float anchorY = m_anchorPoint.fY * m_size.height(); + matrix.preTranslate(anchorX, anchorY); + matrix.preRotate(m_angleTransform); + matrix.preTranslate(-anchorX, -anchorY); + } - float sx = m_scale.fX; - float sy = m_scale.fY; - if (sx > 1.0f || sy > 1.0f) { - float dx = (sx * m_size.width()) - m_size.width(); - float dy = (sy * m_size.height()) - m_size.height(); - canvas->translate(-dx / 2.0f, -dy / 2.0f); - canvas->scale(sx, sy); + float sx = m_scale.fX; + float sy = m_scale.fY; + if (sx > 1.0f || sy > 1.0f) { + float dx = (sx * m_size.width()) - m_size.width(); + float dy = (sy * m_size.height()) - m_size.height(); + matrix.preTranslate(-dx / 2.0f, -dy / 2.0f); + matrix.preScale(sx, sy); + } + matrix.postTranslate(m_translation.fX + m_position.fX, + m_translation.fY + m_position.fY); } + canvas->concat(matrix); m_recordingPicture->draw(canvas); @@ -448,7 +426,7 @@ void LayerAndroid::dumpLayers(FILE* file, int indentLevel) if (countChildren()) { writeln(file, indentLevel + 1, "children = ["); - for (unsigned int i = 0; i < countChildren(); i++) { + for (int i = 0; i < countChildren(); i++) { if (i > 0) writeln(file, indentLevel + 1, ", "); LayerAndroid* layer = static_cast<LayerAndroid*>(getChild(i)); diff --git a/WebCore/platform/graphics/android/LayerAndroid.h b/WebCore/platform/graphics/android/LayerAndroid.h index 8050356..104c03a 100644 --- a/WebCore/platform/graphics/android/LayerAndroid.h +++ b/WebCore/platform/graphics/android/LayerAndroid.h @@ -31,6 +31,7 @@ #include <wtf/HashMap.h> class SkCanvas; +class SkMatrix; class SkPicture; class SkRect; @@ -56,8 +57,7 @@ public: virtual void setBackgroundColor(SkColor color); void setIsRootLayer(bool isRootLayer) { m_isRootLayer = isRootLayer; } - void paintOn(int scrollX, int scrollY, int width, int height, float scale, SkCanvas*); - void paintOn(SkPoint offset, SkSize size, SkScalar scale, SkCanvas*); + virtual void draw(SkCanvas*, const SkRect* viewPort); bool prepareContext(bool force = false); void startRecording(); void stopRecording(); @@ -70,23 +70,18 @@ public: bool evaluateAnimations(double time) const; bool hasAnimations() const; - void calcPosition(int scrollX, int scrollY, int viewWidth, int viewHeight, - float scale, float* xPtr, float* yPtr); - SkPicture* picture() const { return m_recordingPicture; } void dumpLayers(FILE*, int indentLevel); private: - void paintChildren(int scrollX, int scrollY, - int width, int height, - float scale, SkCanvas* canvas, + bool calcPosition(const SkRect* viewPort, SkMatrix*); + + void paintChildren(const SkRect* viewPort, SkCanvas* canvas, float opacity); - void paintMe(int scrollX, int scrollY, - int width, int height, - float scale, SkCanvas* canvas, + void paintMe(const SkRect* viewPort, SkCanvas* canvas, float opacity); bool m_isRootLayer; diff --git a/WebCore/plugins/PluginView.h b/WebCore/plugins/PluginView.h index f3e3802..48c8ff1 100644 --- a/WebCore/plugins/PluginView.h +++ b/WebCore/plugins/PluginView.h @@ -237,7 +237,6 @@ namespace WebCore { static bool isCallingPlugin(); #ifdef ANDROID_PLUGINS - Frame* getParentFrame() const { return m_parentFrame; } Element* getElement() const { return m_element; } #endif diff --git a/WebCore/storage/Database.cpp b/WebCore/storage/Database.cpp index bbdce87..619c3ce 100644 --- a/WebCore/storage/Database.cpp +++ b/WebCore/storage/Database.cpp @@ -73,10 +73,9 @@ const String& Database::databaseInfoTableName() #if ENABLE(DATABASE) -#if PLATFORM(ANDROID) +// ANDROID // This should default to true, to match the behavior with JSC static bool isDatabaseAvailable = true; -#endif void Database::setIsAvailable(bool available) { diff --git a/WebKit/android/nav/WebView.cpp b/WebKit/android/nav/WebView.cpp index 193a86e..d334589 100644 --- a/WebKit/android/nav/WebView.cpp +++ b/WebKit/android/nav/WebView.cpp @@ -1513,6 +1513,10 @@ static void nativeDrawMatches(JNIEnv *env, jobject obj, jobject canv) view->drawMatches(canvas); } +static void setXYWH(SkRect* r, SkScalar x, SkScalar y, SkScalar w, SkScalar h) { + r->set(x, y, x + w, y + h); +} + static void nativeDrawLayers(JNIEnv *env, jobject obj, jint layer, jint scrollX, jint scrollY, jint width, jint height, @@ -1528,8 +1532,13 @@ static void nativeDrawLayers(JNIEnv *env, jobject obj, #if USE(ACCELERATED_COMPOSITING) LayerAndroid* layerImpl = reinterpret_cast<LayerAndroid*>(layer); SkCanvas* canvas = GraphicsJNI::getNativeCanvas(env, canv); - if (canvas) - layerImpl->paintOn(scrollX, scrollY, width, height, scale, canvas); + if (canvas) { + SkRect viewPort; + setXYWH(&viewPort, + scrollX / scale, scrollY / scale, + width / scale, height / scale); + layerImpl->draw(canvas, &viewPort); + } #endif } diff --git a/WebKit/android/plugins/PluginWidgetAndroid.cpp b/WebKit/android/plugins/PluginWidgetAndroid.cpp index 7109ab4..06dfa39 100644 --- a/WebKit/android/plugins/PluginWidgetAndroid.cpp +++ b/WebKit/android/plugins/PluginWidgetAndroid.cpp @@ -268,7 +268,7 @@ void PluginWidgetAndroid::updateEventFlags(ANPEventFlags flags) { return; } - Document* doc = m_pluginView->getParentFrame()->document(); + Document* doc = m_pluginView->parentFrame()->document(); #if ENABLE(TOUCH_EVENTS) if((m_eventFlags ^ flags) & kTouch_ANPEventFlag) { if (flags & kTouch_ANPEventFlag) |