- 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;
};