Title: [136000] trunk/Source/WebKit2
Revision
136000
Author
[email protected]
Date
2012-11-28 05:09:34 -0800 (Wed, 28 Nov 2012)

Log Message

[EFL][WK2] MiniBrowser rendering should not get blurry when scrolled down with different scale values
https://bugs.webkit.org/show_bug.cgi?id=103079

Reviewed by Simon Hausmann.

The problem was caused because we moved the page inside our viewport
in non-discrete units.

Now instead of changing the content visible in our viewport by
applying scale, and then transforming the CSS offset, we now first
discretely position the page in UI coordinates.

This patch also removes some dead code.

* UIProcess/API/efl/EwkViewImpl.cpp:
(EwkViewImpl::transformFromScene):
(EwkViewImpl::displayTimerFired):

   Transform according to the page position.

* UIProcess/API/efl/EwkViewImpl.h:
(EwkViewImpl::setPagePosition): Now stores a float.
(EwkViewImpl::discretePagePosition): Returns the discrete page position.
(EwkViewImpl):
* UIProcess/efl/PageClientLegacyImpl.cpp:
(WebKit::PageClientLegacyImpl::updateViewportSize):
(WebKit::PageClientLegacyImpl::pageDidRequestScroll):
* UIProcess/efl/PageViewportControllerClientEfl.cpp:
(WebKit::PageViewportControllerClientEfl::PageViewportControllerClientEfl):
(WebKit::PageViewportControllerClientEfl::setViewportPosition): Convert to page position.
(WebKit::PageViewportControllerClientEfl::setContentsScale):
(WebKit::PageViewportControllerClientEfl::didResumeContent):
* UIProcess/efl/PageViewportControllerClientEfl.h:
(WebKit::PageViewportControllerClientEfl::scaleFactor): Use the value
from the view directly.
(WebKit::PageViewportControllerClientEfl::contentPosition):
(PageViewportControllerClientEfl):

Modified Paths

Diff

Modified: trunk/Source/WebKit2/ChangeLog (135999 => 136000)


--- trunk/Source/WebKit2/ChangeLog	2012-11-28 12:56:26 UTC (rev 135999)
+++ trunk/Source/WebKit2/ChangeLog	2012-11-28 13:09:34 UTC (rev 136000)
@@ -1,3 +1,43 @@
+2012-11-28  Kenneth Rohde Christiansen  <[email protected]>
+
+        [EFL][WK2] MiniBrowser rendering should not get blurry when scrolled down with different scale values
+        https://bugs.webkit.org/show_bug.cgi?id=103079
+
+        Reviewed by Simon Hausmann.
+
+        The problem was caused because we moved the page inside our viewport
+        in non-discrete units.
+
+        Now instead of changing the content visible in our viewport by
+        applying scale, and then transforming the CSS offset, we now first
+        discretely position the page in UI coordinates.
+
+        This patch also removes some dead code.
+
+        * UIProcess/API/efl/EwkViewImpl.cpp:
+        (EwkViewImpl::transformFromScene):
+        (EwkViewImpl::displayTimerFired):
+
+           Transform according to the page position.
+
+        * UIProcess/API/efl/EwkViewImpl.h:
+        (EwkViewImpl::setPagePosition): Now stores a float.
+        (EwkViewImpl::discretePagePosition): Returns the discrete page position.
+        (EwkViewImpl):
+        * UIProcess/efl/PageClientLegacyImpl.cpp:
+        (WebKit::PageClientLegacyImpl::updateViewportSize):
+        (WebKit::PageClientLegacyImpl::pageDidRequestScroll):
+        * UIProcess/efl/PageViewportControllerClientEfl.cpp:
+        (WebKit::PageViewportControllerClientEfl::PageViewportControllerClientEfl):
+        (WebKit::PageViewportControllerClientEfl::setViewportPosition): Convert to page position.
+        (WebKit::PageViewportControllerClientEfl::setContentsScale):
+        (WebKit::PageViewportControllerClientEfl::didResumeContent):
+        * UIProcess/efl/PageViewportControllerClientEfl.h:
+        (WebKit::PageViewportControllerClientEfl::scaleFactor): Use the value
+        from the view directly.
+        (WebKit::PageViewportControllerClientEfl::contentPosition):
+        (PageViewportControllerClientEfl):
+
 2012-11-28  Mikhail Pozdnyakov  <[email protected]>
 
         [EFL][WK2][AC] No need to export GL properties from EwkViewImpl class

Modified: trunk/Source/WebKit2/UIProcess/API/efl/EwkViewImpl.cpp (135999 => 136000)


--- trunk/Source/WebKit2/UIProcess/API/efl/EwkViewImpl.cpp	2012-11-28 12:56:26 UTC (rev 135999)
+++ trunk/Source/WebKit2/UIProcess/API/efl/EwkViewImpl.cpp	2012-11-28 13:09:34 UTC (rev 136000)
@@ -291,8 +291,8 @@
     AffineTransform transform;
 
 #if USE(TILED_BACKING_STORE)
-    transform.translate(m_scrollPosition.x(), m_scrollPosition.y());
     transform.scale(1 / m_scaleFactor);
+    transform.translate(discretePagePosition().x(), discretePagePosition().y());
 #endif
 
     Ewk_View_Smart_Data* sd = smartData();
@@ -383,8 +383,8 @@
             return;
 
         RefPtr<cairo_t> graphicsContext = adoptRef(cairo_create(surface.get()));
+        cairo_translate(graphicsContext.get(), - discretePagePosition().x(), - discretePagePosition().y());
         cairo_scale(graphicsContext.get(), m_scaleFactor, m_scaleFactor);
-        cairo_translate(graphicsContext.get(), -m_scrollPosition.x(), -m_scrollPosition.y());
         renderer->paintToGraphicsContext(graphicsContext.get());
         evas_object_image_data_update_add(sd->image, 0, 0, viewport.width(), viewport.height());
     }

Modified: trunk/Source/WebKit2/UIProcess/API/efl/EwkViewImpl.h (135999 => 136000)


--- trunk/Source/WebKit2/UIProcess/API/efl/EwkViewImpl.h	2012-11-28 12:56:26 UTC (rev 135999)
+++ trunk/Source/WebKit2/UIProcess/API/efl/EwkViewImpl.h	2012-11-28 13:09:34 UTC (rev 136000)
@@ -28,6 +28,7 @@
 #include "WKGeometry.h"
 #include "WKRetainPtr.h"
 #include <Evas.h>
+#include <WebCore/FloatPoint.h>
 #include <WebCore/IntRect.h>
 #include <WebCore/TextDirection.h>
 #include <WebCore/Timer.h>
@@ -200,8 +201,8 @@
     void setScaleFactor(float scaleFactor) { m_scaleFactor = scaleFactor; }
     float scaleFactor() const { return m_scaleFactor; }
 
-    void setScrollPosition(WebCore::IntPoint position) { m_scrollPosition = position; }
-    const WebCore::IntPoint scrollPosition() const { return m_scrollPosition; }
+    void setPagePosition(const WebCore::FloatPoint& position) { m_pagePosition = position; }
+    const WebCore::IntPoint discretePagePosition() const { return roundedIntPoint(m_pagePosition); }
 #endif
 
     // FIXME: needs refactoring (split callback invoke)
@@ -261,7 +262,7 @@
     OwnPtr<EwkBackForwardList> m_backForwardList;
 #if USE(TILED_BACKING_STORE)
     float m_scaleFactor;
-    WebCore::IntPoint m_scrollPosition;
+    WebCore::FloatPoint m_pagePosition;
 #endif
     OwnPtr<EwkSettings> m_settings;
     RefPtr<EwkWindowFeatures> m_windowFeatures;

Modified: trunk/Source/WebKit2/UIProcess/efl/PageClientLegacyImpl.cpp (135999 => 136000)


--- trunk/Source/WebKit2/UIProcess/efl/PageClientLegacyImpl.cpp	2012-11-28 12:56:26 UTC (rev 135999)
+++ trunk/Source/WebKit2/UIProcess/efl/PageClientLegacyImpl.cpp	2012-11-28 13:09:34 UTC (rev 136000)
@@ -49,7 +49,7 @@
 void PageClientLegacyImpl::updateViewportSize(const WebCore::IntSize& size)
 {
 #if USE(TILED_BACKING_STORE)
-    m_viewImpl->page()->drawingArea()->setVisibleContentsRect(IntRect(m_viewImpl->scrollPosition(), size), m_viewImpl->scaleFactor(), FloatPoint());
+    m_viewImpl->page()->drawingArea()->setVisibleContentsRect(IntRect(m_viewImpl->discretePagePosition(), size), m_viewImpl->scaleFactor(), FloatPoint());
 #else
     UNUSED_PARAM(size);
 #endif
@@ -86,7 +86,7 @@
 #if USE(TILED_BACKING_STORE)
 void PageClientLegacyImpl::pageDidRequestScroll(const IntPoint& position)
 {
-    m_viewImpl->setScrollPosition(position);
+    m_viewImpl->setPagePosition(FloatPoint(position));
     m_viewImpl->update();
 }
 

Modified: trunk/Source/WebKit2/UIProcess/efl/PageViewportControllerClientEfl.cpp (135999 => 136000)


--- trunk/Source/WebKit2/UIProcess/efl/PageViewportControllerClientEfl.cpp	2012-11-28 12:56:26 UTC (rev 135999)
+++ trunk/Source/WebKit2/UIProcess/efl/PageViewportControllerClientEfl.cpp	2012-11-28 13:09:34 UTC (rev 136000)
@@ -40,7 +40,6 @@
 
 PageViewportControllerClientEfl::PageViewportControllerClientEfl(EwkViewImpl* viewImpl)
     : m_viewImpl(viewImpl)
-    , m_scaleFactor(1)
     , m_controller(0)
 {
     ASSERT(m_viewImpl);
@@ -68,15 +67,6 @@
     m_controller->didChangeViewportSize(viewportSize);
 }
 
-void PageViewportControllerClientEfl::setVisibleContentsRect(const IntPoint& newScrollPosition, float newScale, const FloatPoint& trajectory)
-{
-    m_scaleFactor = newScale;
-    m_scrollPosition = newScrollPosition;
-
-    ASSERT(m_controller);
-    m_controller->didChangeContentsVisibility(m_scrollPosition, m_scaleFactor, trajectory);
-}
-
 void PageViewportControllerClientEfl::didChangeContentsSize(const WebCore::IntSize& contentsSize)
 {
     drawingArea()->layerTreeCoordinatorProxy()->setContentsSize(contentsSize);
@@ -85,25 +75,27 @@
 
 void PageViewportControllerClientEfl::setViewportPosition(const WebCore::FloatPoint& contentsPoint)
 {
-    IntPoint position(contentsPoint.x(), contentsPoint.y());
-    setVisibleContentsRect(position, m_scaleFactor, FloatPoint());
-    m_viewImpl->setScrollPosition(position);
+    m_contentPosition = roundedIntPoint(contentsPoint);
+
+    FloatPoint pos(contentsPoint);
+    pos.scale(scaleFactor(), scaleFactor());
+    m_viewImpl->setPagePosition(pos);
+
+    m_controller->didChangeContentsVisibility(m_contentPosition, scaleFactor());
 }
 
 void PageViewportControllerClientEfl::setContentsScale(float newScale, bool treatAsInitialValue)
 {
-    if (treatAsInitialValue) {
-        m_scrollPosition = IntPoint();
-        m_viewImpl->setScrollPosition(IntPoint());
-    }
-    m_scaleFactor = newScale;
+    if (treatAsInitialValue)
+        setViewportPosition(FloatPoint(0, 0));
+
     m_viewImpl->setScaleFactor(newScale);
 }
 
 void PageViewportControllerClientEfl::didResumeContent()
 {
     ASSERT(m_controller);
-    m_controller->didChangeContentsVisibility(m_scrollPosition, m_scaleFactor);
+    m_controller->didChangeContentsVisibility(m_contentPosition, scaleFactor());
 }
 
 void PageViewportControllerClientEfl::didChangeVisibleContents()

Modified: trunk/Source/WebKit2/UIProcess/efl/PageViewportControllerClientEfl.h (135999 => 136000)


--- trunk/Source/WebKit2/UIProcess/efl/PageViewportControllerClientEfl.h	2012-11-28 12:56:26 UTC (rev 135999)
+++ trunk/Source/WebKit2/UIProcess/efl/PageViewportControllerClientEfl.h	2012-11-28 13:09:34 UTC (rev 136000)
@@ -28,12 +28,11 @@
 
 #if USE(TILED_BACKING_STORE)
 
+#include "EwkViewImpl.h"
 #include "PageClientBase.h"
 #include "PageViewportControllerClient.h"
 #include <wtf/PassOwnPtr.h>
 
-class EwkViewImpl;
-
 namespace WebKit {
 
 class PageViewportControllerClientEfl : public PageViewportControllerClient {
@@ -46,11 +45,10 @@
 
     DrawingAreaProxy* drawingArea() const;
     WebCore::IntSize viewSize() { return m_viewportSize; }
-    float scaleFactor() const { return m_scaleFactor; }
-    WebCore::IntPoint scrollPosition() { return m_scrollPosition; }
+    float scaleFactor() const { return m_viewImpl->scaleFactor(); }
+    WebCore::IntPoint contentPosition() const { return m_contentPosition; }
 
     void updateViewportSize(const WebCore::IntSize& viewportSize);
-    void setVisibleContentsRect(const WebCore::IntPoint&, float, const WebCore::FloatPoint&);
     void setRendererActive(bool);
 
     virtual void setViewportPosition(const WebCore::FloatPoint& contentsPoint);
@@ -68,8 +66,7 @@
 
     EwkViewImpl* m_viewImpl;
     WebCore::IntSize m_viewportSize;
-    WebCore::IntPoint m_scrollPosition;
-    float m_scaleFactor;
+    WebCore::IntPoint m_contentPosition;
     PageViewportController* m_controller;
 };
 
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to