Changeset 136000 in webkit


Ignore:
Timestamp:
Nov 28, 2012 5:09:34 AM (11 years ago)
Author:
kenneth@webkit.org
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):

Location:
trunk/Source/WebKit2
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit2/ChangeLog

    r135999 r136000  
     12012-11-28  Kenneth Rohde Christiansen  <kenneth@webkit.org>
     2
     3        [EFL][WK2] MiniBrowser rendering should not get blurry when scrolled down with different scale values
     4        https://bugs.webkit.org/show_bug.cgi?id=103079
     5
     6        Reviewed by Simon Hausmann.
     7
     8        The problem was caused because we moved the page inside our viewport
     9        in non-discrete units.
     10
     11        Now instead of changing the content visible in our viewport by
     12        applying scale, and then transforming the CSS offset, we now first
     13        discretely position the page in UI coordinates.
     14
     15        This patch also removes some dead code.
     16
     17        * UIProcess/API/efl/EwkViewImpl.cpp:
     18        (EwkViewImpl::transformFromScene):
     19        (EwkViewImpl::displayTimerFired):
     20
     21           Transform according to the page position.
     22
     23        * UIProcess/API/efl/EwkViewImpl.h:
     24        (EwkViewImpl::setPagePosition): Now stores a float.
     25        (EwkViewImpl::discretePagePosition): Returns the discrete page position.
     26        (EwkViewImpl):
     27        * UIProcess/efl/PageClientLegacyImpl.cpp:
     28        (WebKit::PageClientLegacyImpl::updateViewportSize):
     29        (WebKit::PageClientLegacyImpl::pageDidRequestScroll):
     30        * UIProcess/efl/PageViewportControllerClientEfl.cpp:
     31        (WebKit::PageViewportControllerClientEfl::PageViewportControllerClientEfl):
     32        (WebKit::PageViewportControllerClientEfl::setViewportPosition): Convert to page position.
     33        (WebKit::PageViewportControllerClientEfl::setContentsScale):
     34        (WebKit::PageViewportControllerClientEfl::didResumeContent):
     35        * UIProcess/efl/PageViewportControllerClientEfl.h:
     36        (WebKit::PageViewportControllerClientEfl::scaleFactor): Use the value
     37        from the view directly.
     38        (WebKit::PageViewportControllerClientEfl::contentPosition):
     39        (PageViewportControllerClientEfl):
     40
    1412012-11-28  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>
    242
  • trunk/Source/WebKit2/UIProcess/API/efl/EwkViewImpl.cpp

    r135999 r136000  
    292292
    293293#if USE(TILED_BACKING_STORE)
    294     transform.translate(m_scrollPosition.x(), m_scrollPosition.y());
    295294    transform.scale(1 / m_scaleFactor);
     295    transform.translate(discretePagePosition().x(), discretePagePosition().y());
    296296#endif
    297297
     
    384384
    385385        RefPtr<cairo_t> graphicsContext = adoptRef(cairo_create(surface.get()));
     386        cairo_translate(graphicsContext.get(), - discretePagePosition().x(), - discretePagePosition().y());
    386387        cairo_scale(graphicsContext.get(), m_scaleFactor, m_scaleFactor);
    387         cairo_translate(graphicsContext.get(), -m_scrollPosition.x(), -m_scrollPosition.y());
    388388        renderer->paintToGraphicsContext(graphicsContext.get());
    389389        evas_object_image_data_update_add(sd->image, 0, 0, viewport.width(), viewport.height());
  • trunk/Source/WebKit2/UIProcess/API/efl/EwkViewImpl.h

    r135999 r136000  
    2929#include "WKRetainPtr.h"
    3030#include <Evas.h>
     31#include <WebCore/FloatPoint.h>
    3132#include <WebCore/IntRect.h>
    3233#include <WebCore/TextDirection.h>
     
    201202    float scaleFactor() const { return m_scaleFactor; }
    202203
    203     void setScrollPosition(WebCore::IntPoint position) { m_scrollPosition = position; }
    204     const WebCore::IntPoint scrollPosition() const { return m_scrollPosition; }
     204    void setPagePosition(const WebCore::FloatPoint& position) { m_pagePosition = position; }
     205    const WebCore::IntPoint discretePagePosition() const { return roundedIntPoint(m_pagePosition); }
    205206#endif
    206207
     
    262263#if USE(TILED_BACKING_STORE)
    263264    float m_scaleFactor;
    264     WebCore::IntPoint m_scrollPosition;
     265    WebCore::FloatPoint m_pagePosition;
    265266#endif
    266267    OwnPtr<EwkSettings> m_settings;
  • trunk/Source/WebKit2/UIProcess/efl/PageClientLegacyImpl.cpp

    r134251 r136000  
    5050{
    5151#if USE(TILED_BACKING_STORE)
    52     m_viewImpl->page()->drawingArea()->setVisibleContentsRect(IntRect(m_viewImpl->scrollPosition(), size), m_viewImpl->scaleFactor(), FloatPoint());
     52    m_viewImpl->page()->drawingArea()->setVisibleContentsRect(IntRect(m_viewImpl->discretePagePosition(), size), m_viewImpl->scaleFactor(), FloatPoint());
    5353#else
    5454    UNUSED_PARAM(size);
     
    8787void PageClientLegacyImpl::pageDidRequestScroll(const IntPoint& position)
    8888{
    89     m_viewImpl->setScrollPosition(position);
     89    m_viewImpl->setPagePosition(FloatPoint(position));
    9090    m_viewImpl->update();
    9191}
  • trunk/Source/WebKit2/UIProcess/efl/PageViewportControllerClientEfl.cpp

    r135453 r136000  
    4141PageViewportControllerClientEfl::PageViewportControllerClientEfl(EwkViewImpl* viewImpl)
    4242    : m_viewImpl(viewImpl)
    43     , m_scaleFactor(1)
    4443    , m_controller(0)
    4544{
     
    6968}
    7069
    71 void PageViewportControllerClientEfl::setVisibleContentsRect(const IntPoint& newScrollPosition, float newScale, const FloatPoint& trajectory)
    72 {
    73     m_scaleFactor = newScale;
    74     m_scrollPosition = newScrollPosition;
    75 
    76     ASSERT(m_controller);
    77     m_controller->didChangeContentsVisibility(m_scrollPosition, m_scaleFactor, trajectory);
    78 }
    79 
    8070void PageViewportControllerClientEfl::didChangeContentsSize(const WebCore::IntSize& contentsSize)
    8171{
     
    8676void PageViewportControllerClientEfl::setViewportPosition(const WebCore::FloatPoint& contentsPoint)
    8777{
    88     IntPoint position(contentsPoint.x(), contentsPoint.y());
    89     setVisibleContentsRect(position, m_scaleFactor, FloatPoint());
    90     m_viewImpl->setScrollPosition(position);
     78    m_contentPosition = roundedIntPoint(contentsPoint);
     79
     80    FloatPoint pos(contentsPoint);
     81    pos.scale(scaleFactor(), scaleFactor());
     82    m_viewImpl->setPagePosition(pos);
     83
     84    m_controller->didChangeContentsVisibility(m_contentPosition, scaleFactor());
    9185}
    9286
    9387void PageViewportControllerClientEfl::setContentsScale(float newScale, bool treatAsInitialValue)
    9488{
    95     if (treatAsInitialValue) {
    96         m_scrollPosition = IntPoint();
    97         m_viewImpl->setScrollPosition(IntPoint());
    98     }
    99     m_scaleFactor = newScale;
     89    if (treatAsInitialValue)
     90        setViewportPosition(FloatPoint(0, 0));
     91
    10092    m_viewImpl->setScaleFactor(newScale);
    10193}
     
    10496{
    10597    ASSERT(m_controller);
    106     m_controller->didChangeContentsVisibility(m_scrollPosition, m_scaleFactor);
     98    m_controller->didChangeContentsVisibility(m_contentPosition, scaleFactor());
    10799}
    108100
  • trunk/Source/WebKit2/UIProcess/efl/PageViewportControllerClientEfl.h

    r133464 r136000  
    2929#if USE(TILED_BACKING_STORE)
    3030
     31#include "EwkViewImpl.h"
    3132#include "PageClientBase.h"
    3233#include "PageViewportControllerClient.h"
    3334#include <wtf/PassOwnPtr.h>
    34 
    35 class EwkViewImpl;
    3635
    3736namespace WebKit {
     
    4746    DrawingAreaProxy* drawingArea() const;
    4847    WebCore::IntSize viewSize() { return m_viewportSize; }
    49     float scaleFactor() const { return m_scaleFactor; }
    50     WebCore::IntPoint scrollPosition() { return m_scrollPosition; }
     48    float scaleFactor() const { return m_viewImpl->scaleFactor(); }
     49    WebCore::IntPoint contentPosition() const { return m_contentPosition; }
    5150
    5251    void updateViewportSize(const WebCore::IntSize& viewportSize);
    53     void setVisibleContentsRect(const WebCore::IntPoint&, float, const WebCore::FloatPoint&);
    5452    void setRendererActive(bool);
    5553
     
    6967    EwkViewImpl* m_viewImpl;
    7068    WebCore::IntSize m_viewportSize;
    71     WebCore::IntPoint m_scrollPosition;
    72     float m_scaleFactor;
     69    WebCore::IntPoint m_contentPosition;
    7370    PageViewportController* m_controller;
    7471};
Note: See TracChangeset for help on using the changeset viewer.