[EFL] EwkView should keep css position instead of scroll position in device pixel.
authorcommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 8 Mar 2013 07:30:02 +0000 (07:30 +0000)
committercommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 8 Mar 2013 07:30:02 +0000 (07:30 +0000)
https://bugs.webkit.org/show_bug.cgi?id=110847

Patch by Huang Dongsung <luxtella@company100.net> on 2013-03-07
Reviewed by Kenneth Rohde Christiansen.

Signed off for WebKit2 by Benjamin Poulain.

There are bugs that some code expect that EwkView::pagePosition() returns css
position while others expect that it returns scroll position in device pixel.
In addition, some code call EwkView::setPagePosition() with css position while
others call it with scroll position in device pixel.

This patch makes all code use setPagePosition() and pagePosition() with
UI pixels (a.k.a Density Independent Pixel).

* UIProcess/efl/PageViewportControllerClientEfl.cpp:
(WebKit::PageViewportControllerClientEfl::setViewportPosition):
* UIProcess/efl/WebView.cpp:
(WebKit::WebView::paintToCairoSurface):
(WebKit::WebView::updateViewportSize):
(WebKit::WebView::transformToScene):
(WebKit::WebView::pageDidRequestScroll):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@145185 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/WebKit2/ChangeLog
Source/WebKit2/UIProcess/efl/PageViewportControllerClientEfl.cpp
Source/WebKit2/UIProcess/efl/WebView.cpp

index 3b89f75..3335d67 100644 (file)
@@ -1,3 +1,28 @@
+2013-03-07  Huang Dongsung  <luxtella@company100.net>
+
+        [EFL] EwkView should keep css position instead of scroll position in device pixel.
+        https://bugs.webkit.org/show_bug.cgi?id=110847
+
+        Reviewed by Kenneth Rohde Christiansen.
+
+        Signed off for WebKit2 by Benjamin Poulain.
+
+        There are bugs that some code expect that EwkView::pagePosition() returns css
+        position while others expect that it returns scroll position in device pixel.
+        In addition, some code call EwkView::setPagePosition() with css position while
+        others call it with scroll position in device pixel.
+
+        This patch makes all code use setPagePosition() and pagePosition() with
+        UI pixels (a.k.a Density Independent Pixel).
+
+        * UIProcess/efl/PageViewportControllerClientEfl.cpp:
+        (WebKit::PageViewportControllerClientEfl::setViewportPosition):
+        * UIProcess/efl/WebView.cpp:
+        (WebKit::WebView::paintToCairoSurface):
+        (WebKit::WebView::updateViewportSize):
+        (WebKit::WebView::transformToScene):
+        (WebKit::WebView::pageDidRequestScroll):
+
 2013-03-07  Alexey Proskuryakov  <ap@apple.com>
 
         https://bugs.webkit.org/show_bug.cgi?id=111801
index 69cde03..81e0a19 100644 (file)
@@ -52,7 +52,6 @@ void PageViewportControllerClientEfl::setViewportPosition(const WebCore::FloatPo
 
     FloatPoint pos(contentsPoint);
     pos.scale(m_view->pageScaleFactor(), m_view->pageScaleFactor());
-    pos.scale(m_view->deviceScaleFactor(), m_view->deviceScaleFactor());
     m_view->setPagePosition(pos);
 
     m_controller->didChangeContentsVisibility(m_contentPosition, m_view->pageScaleFactor());
index 11cfc98..5c2b3ba 100644 (file)
@@ -117,7 +117,7 @@ void WebView::paintToCairoSurface(cairo_surface_t* surface)
     const FloatPoint& pagePosition = m_ewkView->pagePosition();
     double effectiveScale = m_page->deviceScaleFactor() * m_ewkView->pageScaleFactor();
 
-    cairo_matrix_t transform = { effectiveScale, 0, 0, effectiveScale, - pagePosition.x(), - pagePosition.y() };
+    cairo_matrix_t transform = { effectiveScale, 0, 0, effectiveScale, -pagePosition.x() * m_page->deviceScaleFactor(), -pagePosition.y() * m_page->deviceScaleFactor() };
     cairo_set_matrix(context.cr(), &transform);
 
     scene->paintToGraphicsContext(&context);
@@ -200,7 +200,9 @@ void WebView::updateViewportSize()
         m_ewkView->pageViewportController()->didChangeViewportSize(m_ewkView->size());
         return;
     }
-    m_page->drawingArea()->setVisibleContentsRect(FloatRect(m_ewkView->pagePosition(), m_ewkView->size()), FloatPoint());
+    FloatPoint uiPosition(m_ewkView->pagePosition());
+    uiPosition.scale(1 / m_ewkView->pageScaleFactor(), 1 / m_ewkView->pageScaleFactor());
+    m_page->drawingArea()->setVisibleContentsRect(FloatRect(uiPosition, m_ewkView->size()), FloatPoint());
 }
 
 void WebView::didChangeContentsSize(const WebCore::IntSize& size)
@@ -218,8 +220,8 @@ AffineTransform WebView::transformToScene() const
     TransformationMatrix transform = m_userViewportTransform;
 
     const FloatPoint& pagePosition = m_ewkView->pagePosition();
-    transform.translate(-pagePosition.x(), -pagePosition.y());
     transform.scale(m_page->deviceScaleFactor());
+    transform.translate(-pagePosition.x(), -pagePosition.y());
     transform.scale(m_ewkView->pageScaleFactor());
 
     return transform.toAffineTransform();
@@ -493,7 +495,9 @@ void WebView::pageDidRequestScroll(const IntPoint& position)
         m_ewkView->pageViewportController()->pageDidRequestScroll(position);
         return;
     }
-    m_ewkView->setPagePosition(FloatPoint(position));
+    FloatPoint uiPosition(position);
+    uiPosition.scale(m_ewkView->pageScaleFactor(), m_ewkView->pageScaleFactor());
+    m_ewkView->setPagePosition(uiPosition);
     m_ewkView->scheduleUpdateDisplay();
 }