[SCM] WebKit Debian packaging branch, webkit-1.3, updated. upstream/1.3.7-4207-g178b198

kbalazs at webkit.org kbalazs at webkit.org
Sun Feb 20 22:47:16 UTC 2011


The following commit has been merged in the webkit-1.3 branch:
commit ff0f85836e38902ffc64e8f37f322c653e84598d
Author: kbalazs at webkit.org <kbalazs at webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date:   Tue Jan 11 17:22:23 2011 +0000

    2011-01-11  Anders Carlsson  <andersca at apple.com>
    
            Reviewed by Andreas Kling.
    
            Work towards having the WebPageProxy decide when to create the DrawingAreaProxy
            https://bugs.webkit.org/show_bug.cgi?id=52184
    
            Qt part made my Balazs Kelemen.
    
            * UIProcess/API/mac/PageClientImpl.h:
            * UIProcess/API/mac/PageClientImpl.mm:
            (WebKit::PageClientImpl::createDrawingAreaProxy):
            Call -[WKView _createDrawingAreaProxy].
    
            (WebKit::PageClientImpl::setViewNeedsDisplay):
            Call setNeedsDisplayInRect on the WKView.
    
            * UIProcess/API/mac/WKView.mm:
            (-[WKView initWithFrame:contextRef:pageGroupRef:]):
            No need to set the drawing area proxy anymore.
    
            (-[WKView _createDrawingAreaProxy]):
            Create a chunked update drawing area proxy for now.
    
            * UIProcess/API/qt/qgraphicswkview.cpp:
            Added a QGraphicsItem* member that is initialized in init to the accociated view.
            Implement the new functions. This is a temporary solution, in the long term the view
            and the page should be decoupled.
            (QGraphicsWKView::QGraphicsWKView):
            * UIProcess/API/qt/qwkpage.cpp:
            (QWKPagePrivate::QWKPagePrivate):
            (QWKPagePrivate::init):
            (QWKPagePrivate::createDrawingAreaProxy):
            (QWKPagePrivate::setViewNeedsDisplay):
            * UIProcess/API/qt/qwkpage.h:
            * UIProcess/API/qt/qwkpage_p.h:
    
            * UIProcess/PageClient.h:
            Add new pure virtual member functions.
    
            * UIProcess/WebPageProxy.cpp:
            (WebKit::WebPageProxy::initializeWebPage):
            (WebKit::WebPageProxy::reinitializeWebPage):
            Set the new drawing area proxy.
    
            * UIProcess/win/WebView.cpp:
            (WebKit::WebView::WebView):
            No need to set the drawing area proxy anymore.
    
            (WebKit::WebView::createDrawingAreaProxy):
            Create a chunked update drawing area proxy for now.
    
            (WebKit::WebView::setViewNeedsDisplay):
            Invalidate the window.
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@75506 268f45cc-cd09-0410-ab3c-d52691b4dbfc

diff --git a/WebKit2/ChangeLog b/WebKit2/ChangeLog
index 78ed3a2..6c90327 100644
--- a/WebKit2/ChangeLog
+++ b/WebKit2/ChangeLog
@@ -1,3 +1,58 @@
+2011-01-11  Anders Carlsson  <andersca at apple.com>
+
+        Reviewed by Andreas Kling.
+
+        Work towards having the WebPageProxy decide when to create the DrawingAreaProxy
+        https://bugs.webkit.org/show_bug.cgi?id=52184
+
+        Qt part made my Balazs Kelemen.
+
+        * UIProcess/API/mac/PageClientImpl.h:
+        * UIProcess/API/mac/PageClientImpl.mm:
+        (WebKit::PageClientImpl::createDrawingAreaProxy):
+        Call -[WKView _createDrawingAreaProxy].
+
+        (WebKit::PageClientImpl::setViewNeedsDisplay):
+        Call setNeedsDisplayInRect on the WKView.
+
+        * UIProcess/API/mac/WKView.mm:
+        (-[WKView initWithFrame:contextRef:pageGroupRef:]):
+        No need to set the drawing area proxy anymore.
+
+        (-[WKView _createDrawingAreaProxy]):
+        Create a chunked update drawing area proxy for now.
+
+        * UIProcess/API/qt/qgraphicswkview.cpp:
+        Added a QGraphicsItem* member that is initialized in init to the accociated view.
+        Implement the new functions. This is a temporary solution, in the long term the view
+        and the page should be decoupled.
+        (QGraphicsWKView::QGraphicsWKView):
+        * UIProcess/API/qt/qwkpage.cpp:
+        (QWKPagePrivate::QWKPagePrivate):
+        (QWKPagePrivate::init):
+        (QWKPagePrivate::createDrawingAreaProxy):
+        (QWKPagePrivate::setViewNeedsDisplay):
+        * UIProcess/API/qt/qwkpage.h:
+        * UIProcess/API/qt/qwkpage_p.h:
+        
+        * UIProcess/PageClient.h:
+        Add new pure virtual member functions.
+
+        * UIProcess/WebPageProxy.cpp:
+        (WebKit::WebPageProxy::initializeWebPage):
+        (WebKit::WebPageProxy::reinitializeWebPage):
+        Set the new drawing area proxy.
+
+        * UIProcess/win/WebView.cpp:
+        (WebKit::WebView::WebView):
+        No need to set the drawing area proxy anymore.
+
+        (WebKit::WebView::createDrawingAreaProxy):
+        Create a chunked update drawing area proxy for now.
+
+        (WebKit::WebView::setViewNeedsDisplay):
+        Invalidate the window.
+
 2011-01-11  Adam Roben  <aroben at apple.com>
 
         Fix a typo in a comment
diff --git a/WebKit2/UIProcess/API/mac/PageClientImpl.h b/WebKit2/UIProcess/API/mac/PageClientImpl.h
index a8752c0..609039f 100644
--- a/WebKit2/UIProcess/API/mac/PageClientImpl.h
+++ b/WebKit2/UIProcess/API/mac/PageClientImpl.h
@@ -48,6 +48,9 @@ public:
 private:
     PageClientImpl(WKView*);
 
+    virtual PassOwnPtr<DrawingAreaProxy> createDrawingAreaProxy();
+    virtual void setViewNeedsDisplay(const WebCore::IntRect&);
+    
     virtual WebCore::IntSize viewSize();
     virtual bool isViewWindowActive();
     virtual bool isViewFocused();
diff --git a/WebKit2/UIProcess/API/mac/PageClientImpl.mm b/WebKit2/UIProcess/API/mac/PageClientImpl.mm
index 8779f2f..ae59eba 100644
--- a/WebKit2/UIProcess/API/mac/PageClientImpl.mm
+++ b/WebKit2/UIProcess/API/mac/PageClientImpl.mm
@@ -118,6 +118,16 @@ PageClientImpl::~PageClientImpl()
 {
 }
 
+PassOwnPtr<DrawingAreaProxy> PageClientImpl::createDrawingAreaProxy()
+{
+    return [m_wkView _createDrawingAreaProxy];
+}
+
+void PageClientImpl::setViewNeedsDisplay(const WebCore::IntRect& rect)
+{
+    [m_wkView setNeedsDisplayInRect:rect];
+}
+
 IntSize PageClientImpl::viewSize()
 {
     return IntSize([m_wkView bounds].size);
diff --git a/WebKit2/UIProcess/API/mac/WKView.mm b/WebKit2/UIProcess/API/mac/WKView.mm
index 7c2dfeb..5322d7e 100644
--- a/WebKit2/UIProcess/API/mac/WKView.mm
+++ b/WebKit2/UIProcess/API/mac/WKView.mm
@@ -166,7 +166,6 @@ typedef HashMap<String, ValidationVector> ValidationMap;
 
     _data->_pageClient = PageClientImpl::create(self);
     _data->_page = toImpl(contextRef)->createWebPage(_data->_pageClient.get(), toImpl(pageGroupRef));
-    _data->_page->setDrawingArea(ChunkedUpdateDrawingAreaProxy::create(self, _data->_page.get()));
     _data->_page->initializeWebPage();
 
     WebContext::statistics().wkViewCount++;
@@ -1199,6 +1198,11 @@ static void extractUnderlines(NSAttributedString *string, Vector<CompositionUnde
 
 @implementation WKView (Internal)
 
+- (PassOwnPtr<WebKit::DrawingAreaProxy>)_createDrawingAreaProxy
+{
+    return ChunkedUpdateDrawingAreaProxy::create(self, _data->_page.get());
+}
+
 - (BOOL)_isFocused
 {
     if (_data->_inBecomeFirstResponder)
diff --git a/WebKit2/UIProcess/API/mac/WKViewInternal.h b/WebKit2/UIProcess/API/mac/WKViewInternal.h
index 4939d91..1c70b38 100644
--- a/WebKit2/UIProcess/API/mac/WKViewInternal.h
+++ b/WebKit2/UIProcess/API/mac/WKViewInternal.h
@@ -28,10 +28,12 @@
 #import <WebCore/KeyboardEvent.h>
 
 namespace WebKit {
+    class DrawingAreaProxy;
     class FindIndicator;
 }
 
 @interface WKView (Internal)
+- (PassOwnPtr<WebKit::DrawingAreaProxy>)_createDrawingAreaProxy;
 - (BOOL)_isFocused;
 - (void)_processDidCrash;
 - (void)_didRelaunchProcess;
diff --git a/WebKit2/UIProcess/API/qt/qgraphicswkview.cpp b/WebKit2/UIProcess/API/qt/qgraphicswkview.cpp
index 4a2e6b1..44cdfa9 100644
--- a/WebKit2/UIProcess/API/qt/qgraphicswkview.cpp
+++ b/WebKit2/UIProcess/API/qt/qgraphicswkview.cpp
@@ -83,7 +83,7 @@ QGraphicsWKView::QGraphicsWKView(QWKContext* context, BackingStoreType backingSt
         break;
     }
 
-    d->page->d->init(size().toSize(), drawingAreaProxy);
+    d->page->d->init(this, size().toSize(), drawingAreaProxy);
     connect(d->page, SIGNAL(titleChanged(QString)), this, SIGNAL(titleChanged(QString)));
     connect(d->page, SIGNAL(loadStarted()), this, SIGNAL(loadStarted()));
     connect(d->page, SIGNAL(loadFinished(bool)), this, SIGNAL(loadFinished(bool)));
diff --git a/WebKit2/UIProcess/API/qt/qwkpage.cpp b/WebKit2/UIProcess/API/qt/qwkpage.cpp
index 99ee617..507e8d3 100644
--- a/WebKit2/UIProcess/API/qt/qwkpage.cpp
+++ b/WebKit2/UIProcess/API/qt/qwkpage.cpp
@@ -23,7 +23,9 @@
 
 #include "qwkpreferences_p.h"
 
+#include "ChunkedUpdateDrawingAreaProxy.h"
 #include "ClientImpl.h"
+#include "qgraphicswkview.h"
 #include "qwkcontext.h"
 #include "qwkcontext_p.h"
 #include "qwkhistory.h"
@@ -31,6 +33,7 @@
 #include "FindIndicator.h"
 #include "LocalizedStrings.h"
 #include "NativeWebKeyboardEvent.h"
+#include "TiledDrawingAreaProxy.h"
 #include "WebContext.h"
 #include "WebContextMenuProxyQt.h"
 #include "WebEventFactoryQt.h"
@@ -81,6 +84,7 @@ static WebCore::ContextMenuAction contextMenuActionForWebAction(QWKPage::WebActi
 
 QWKPagePrivate::QWKPagePrivate(QWKPage* qq, QWKContext* c)
     : q(qq)
+    , view(0)
     , context(c)
     , preferences(0)
     , createNewPageFn(0)
@@ -96,8 +100,9 @@ QWKPagePrivate::~QWKPagePrivate()
     delete history;
 }
 
-void QWKPagePrivate::init(const QSize& viewportSize, PassOwnPtr<DrawingAreaProxy> proxy)
+void QWKPagePrivate::init(QGraphicsItem* view, const QSize& viewportSize, PassOwnPtr<DrawingAreaProxy> proxy)
 {
+    this->view = view;
     page->setDrawingArea(proxy);
     page->initializeWebPage();
 }
@@ -120,6 +125,23 @@ void QWKPagePrivate::takeFocus(bool direction)
     emit q->focusNextPrevChild(direction);
 }
 
+PassOwnPtr<DrawingAreaProxy> QWKPagePrivate::createDrawingAreaProxy()
+{
+    // FIXME: We should avoid this cast by decoupling the view from the page.
+    QGraphicsWKView* wkView = static_cast<QGraphicsWKView*>(view);
+
+#if ENABLE(TILED_BACKING_STORE)
+    if (page->drawingArea()->info().type == DrawingAreaInfo::Tiled)
+        return TiledDrawingAreaProxy::create(wkView, page.get());
+#endif
+    return ChunkedUpdateDrawingAreaProxy::create(wkView, page.get());
+}
+
+void QWKPagePrivate::setViewNeedsDisplay(const WebCore::IntRect& rect)
+{
+    view->update(QRect(rect));
+}
+
 WebCore::IntSize QWKPagePrivate::viewSize()
 {
     // FIXME: Implement.
diff --git a/WebKit2/UIProcess/API/qt/qwkpage.h b/WebKit2/UIProcess/API/qt/qwkpage.h
index 554ad8e..e0bb4c3 100644
--- a/WebKit2/UIProcess/API/qt/qwkpage.h
+++ b/WebKit2/UIProcess/API/qt/qwkpage.h
@@ -12,6 +12,7 @@
 #include <WebKit2/WKPage.h>
 
 class QCursor;
+class QGraphicsItem;
 class QWKContext;
 class QWKGraphicsWidget;
 class QWKPreferences;
diff --git a/WebKit2/UIProcess/API/qt/qwkpage_p.h b/WebKit2/UIProcess/API/qt/qwkpage_p.h
index bbae5d6..52726c0 100644
--- a/WebKit2/UIProcess/API/qt/qwkpage_p.h
+++ b/WebKit2/UIProcess/API/qt/qwkpage_p.h
@@ -31,6 +31,7 @@
 #include <QGraphicsView>
 #include <QKeyEvent>
 
+class QGraphicsWKView;
 class QWKPreferences;
 
 class QWKPagePrivate : WebKit::PageClient {
@@ -40,9 +41,12 @@ public:
 
     static QWKPagePrivate* get(QWKPage* page) { return page->d; }
 
-    void init(const QSize& viewportSize, WTF::PassOwnPtr<WebKit::DrawingAreaProxy>);
+    void init(QGraphicsItem*, const QSize& viewportSize, WTF::PassOwnPtr<WebKit::DrawingAreaProxy>);
 
     // PageClient
+    virtual PassOwnPtr<WebKit::DrawingAreaProxy> createDrawingAreaProxy();
+    virtual void setViewNeedsDisplay(const WebCore::IntRect&);
+
     virtual WebCore::IntSize viewSize();
     virtual bool isViewWindowActive();
     virtual bool isViewFocused();
@@ -99,6 +103,7 @@ public:
 
     QWKPage* q;
 
+    QGraphicsItem* view;
     QWKContext* context;
     QWKHistory* history;
 
diff --git a/WebKit2/UIProcess/PageClient.h b/WebKit2/UIProcess/PageClient.h
index 2af6677..f413342 100644
--- a/WebKit2/UIProcess/PageClient.h
+++ b/WebKit2/UIProcess/PageClient.h
@@ -37,6 +37,7 @@ namespace WebCore {
 
 namespace WebKit {
 
+class DrawingAreaProxy;
 class FindIndicator;
 class NativeWebKeyboardEvent;
 class NativeWebKeyboardEvent;
@@ -48,6 +49,12 @@ class PageClient {
 public:
     virtual ~PageClient() { }
 
+    // Create a new drawing area proxy for the given page.
+    virtual PassOwnPtr<DrawingAreaProxy> createDrawingAreaProxy() = 0;
+
+    // Tell the view to invalidate the given rect. The rect is in view coordinates.
+    virtual void setViewNeedsDisplay(const WebCore::IntRect&) = 0;
+
     // Return the size of the view the page is associated with.
     virtual WebCore::IntSize viewSize() = 0;
 
diff --git a/WebKit2/UIProcess/WebPageProxy.cpp b/WebKit2/UIProcess/WebPageProxy.cpp
index df0b071..703ebef 100644
--- a/WebKit2/UIProcess/WebPageProxy.cpp
+++ b/WebKit2/UIProcess/WebPageProxy.cpp
@@ -218,6 +218,7 @@ void WebPageProxy::initializeWebPage()
         return;
     }
 
+    m_drawingArea = m_pageClient->createDrawingAreaProxy();
     ASSERT(m_drawingArea);
 
     process()->send(Messages::WebProcess::CreateWebPage(m_pageID, creationParameters()), 0);
@@ -228,6 +229,7 @@ void WebPageProxy::reinitializeWebPage(const WebCore::IntSize& size)
     if (!isValid())
         return;
 
+    m_drawingArea = m_pageClient->createDrawingAreaProxy();
     ASSERT(m_drawingArea);
 
     process()->send(Messages::WebProcess::CreateWebPage(m_pageID, creationParameters()), 0);
diff --git a/WebKit2/UIProcess/win/WebView.cpp b/WebKit2/UIProcess/win/WebView.cpp
index c49637a..c22d54d 100644
--- a/WebKit2/UIProcess/win/WebView.cpp
+++ b/WebKit2/UIProcess/win/WebView.cpp
@@ -236,7 +236,6 @@ WebView::WebView(RECT rect, WebContext* context, WebPageGroup* pageGroup, HWND p
     registerWebViewWindowClass();
 
     m_page = context->createWebPage(this, pageGroup);
-    m_page->setDrawingArea(ChunkedUpdateDrawingAreaProxy::create(this, m_page.get()));
 
     m_window = ::CreateWindowEx(0, kWebKit2WebViewWindowClassName, 0, WS_CHILD | WS_CLIPSIBLINGS | WS_CLIPCHILDREN,
         rect.top, rect.left, rect.right - rect.left, rect.bottom - rect.top, parentWindow ? parentWindow : HWND_MESSAGE, 0, instanceHandle(), this);
@@ -575,6 +574,17 @@ void WebView::close()
 
 // PageClient
 
+PassOwnPtr<DrawingAreaProxy> WebView::createDrawingAreaProxy()
+{
+    return ChunkedUpdateDrawingAreaProxy::create(this, m_page.get());
+}
+
+void WebView::setViewNeedsDisplay(const WebCore::IntRect& rect)
+{
+    RECT r = rect;
+    ::InvalidateRect(m_window, &r, false);
+}
+
 WebCore::IntSize WebView::viewSize()
 {
     RECT clientRect;
diff --git a/WebKit2/UIProcess/win/WebView.h b/WebKit2/UIProcess/win/WebView.h
index bfff344..8bf8a5c 100644
--- a/WebKit2/UIProcess/win/WebView.h
+++ b/WebKit2/UIProcess/win/WebView.h
@@ -104,6 +104,8 @@ private:
     void updateNativeCursor();
 
     // PageClient
+    virtual PassOwnPtr<DrawingAreaProxy> createDrawingAreaProxy();
+    virtual void setViewNeedsDisplay(const WebCore::IntRect&);
     virtual WebCore::IntSize viewSize();
     virtual bool isViewWindowActive();
     virtual bool isViewFocused();

-- 
WebKit Debian packaging



More information about the Pkg-webkit-commits mailing list