Changeset 147537 in webkit


Ignore:
Timestamp:
Apr 3, 2013 4:06:26 AM (11 years ago)
Author:
anilsson@rim.com
Message:

[BlackBerry] Decouple layout viewport from visual viewport
https://bugs.webkit.org/show_bug.cgi?id=113829

Reviewed by Carlos Garcia Campos.

Setting the visual viewport would force the layout viewport equal to
the visual viewport. Decouple the viewports by allowing the user to
specify a layout viewport when setting the viewport(s). The layout
viewport could be the exact same value passed for visual viewport, if
the old behavior is desired.

Also reevaluate any viewport arguments when (only) the layout viewport
changes in WebPage::setDefaultLayoutSize() since the layout viewport is
used as input to the calculation.

  • Api/WebPage.cpp:

(BlackBerry::WebKit::WebPagePrivate::setScreenOrientation):
(BlackBerry::WebKit::WebPagePrivate::setViewportSize):
(BlackBerry::WebKit::WebPage::setViewportSize):
(WebKit):
(BlackBerry::WebKit::WebPagePrivate::setDefaultLayoutSize):
(BlackBerry::WebKit::WebPage::defaultLayoutSize):

  • Api/WebPage.h:
  • Api/WebPage_p.h:

(WebPagePrivate):

Location:
trunk/Source/WebKit/blackberry
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit/blackberry/Api/WebPage.cpp

    r147212 r147537  
    36513651}
    36523652
    3653 void WebPagePrivate::setViewportSize(const IntSize& transformedActualVisibleSize, bool ensureFocusElementVisible)
     3653bool WebPagePrivate::setViewportSize(const IntSize& transformedActualVisibleSize, const IntSize& defaultLayoutSize, bool ensureFocusElementVisible)
    36543654{
    36553655    if (m_pendingOrientation == -1 && transformedActualVisibleSize == this->transformedActualVisibleSize())
    3656         return;
     3656        return false;
    36573657
    36583658    // Suspend all screen updates to the backingstore to make sure no-one tries to blit
     
    36793679    bool atLeft = !scrollPosition().x();
    36803680
    3681     setDefaultLayoutSize(transformedActualVisibleSize);
     3681    setDefaultLayoutSize(defaultLayoutSize);
    36823682
    36833683    // Recompute our virtual viewport.
     
    38993899    m_backingStore->d->resumeScreenUpdates(screenResumeOperation);
    39003900    m_inputHandler->redrawSpellCheckDialogIfRequired();
    3901 }
    3902 
    3903 void WebPage::setViewportSize(const Platform::IntSize& viewportSize, bool ensureFocusElementVisible)
    3904 {
    3905     d->setViewportSize(viewportSize, ensureFocusElementVisible);
     3901
     3902    return true;
     3903}
     3904
     3905void WebPage::setViewportSize(const Platform::IntSize& viewportSize, const Platform::IntSize& defaultLayoutSize, bool ensureFocusElementVisible)
     3906{
     3907    if (!d->setViewportSize(viewportSize, defaultLayoutSize, ensureFocusElementVisible)) {
     3908        // If the viewport didn't change, try to apply only the new default layout size.
     3909        setDefaultLayoutSize(defaultLayoutSize);
     3910    }
    39063911}
    39073912
     
    39133918}
    39143919
     3920Platform::IntSize WebPage::defaultLayoutSize() const
     3921{
     3922    return d->m_defaultLayoutSize;
     3923}
     3924
    39153925void WebPage::setDefaultLayoutSize(const Platform::IntSize& platformSize)
    39163926{
     3927    bool needsLayout = false;
    39173928    WebCore::IntSize size = platformSize;
    39183929    if (size == d->m_defaultLayoutSize)
     
    39203931
    39213932    d->setDefaultLayoutSize(size);
    3922     bool needsLayout = d->setViewMode(d->viewMode());
     3933
     3934    // The default layout size affects interpretation of any viewport arguments present.
     3935    Platform::IntSize virtualViewportSize = d->recomputeVirtualViewportFromViewportArguments();
     3936    if (!virtualViewportSize.isEmpty()) {
     3937        setVirtualViewportSize(virtualViewportSize);
     3938        needsLayout = true;
     3939    }
     3940
     3941    if (d->setViewMode(d->viewMode()))
     3942        needsLayout = true;
     3943
    39233944    if (needsLayout) {
    39243945        d->setNeedsLayout();
  • trunk/Source/WebKit/blackberry/Api/WebPage.h

    r146845 r147537  
    143143
    144144    Platform::ViewportAccessor* webkitThreadViewportAccessor() const;
     145
     146    // Returns the size of the visual viewport.
    145147    Platform::IntSize viewportSize() const;
    146     void setViewportSize(const Platform::IntSize&, bool ensureFocusElementVisible = true);
     148
     149    // Sets the sizes of the visual viewport and the layout viewport.
     150    void setViewportSize(const Platform::IntSize& viewportSize, const Platform::IntSize& defaultLayoutSize, bool ensureFocusElementVisible = true);
    147151
    148152    void resetVirtualViewportOnCommitted(bool reset);
    149153    void setVirtualViewportSize(const Platform::IntSize&);
    150154
    151     // Used for default layout size unless overridden by web content or by other APIs.
     155    // Returns the size of the layout viewport.
     156    Platform::IntSize defaultLayoutSize() const;
     157
     158    // Set the size of the layout viewport, in document coordinates, independently of the visual viewport.
    152159    void setDefaultLayoutSize(const Platform::IntSize&);
    153160
  • trunk/Source/WebKit/blackberry/Api/WebPage_p.h

    r146960 r147537  
    376376    void setScreenOrientation(int);
    377377
    378     // Scroll and/or zoom so that the WebPage fits the new actual
    379     // visible size.
    380     void setViewportSize(const WebCore::IntSize& transformedActualVisibleSize, bool ensureFocusElementVisible);
     378    // Scroll and/or zoom so that the WebPage fits the new actual visible size, a.k.a. visual viewport.
     379    // Also sets the default layout size, a.k.a. the layout viewport.
     380    bool setViewportSize(const WebCore::IntSize& transformedActualVisibleSize, const WebCore::IntSize& defaultLayoutSize, bool ensureFocusElementVisible);
    381381
    382382    void scheduleDeferrableTimer(WebCore::Timer<WebPagePrivate>*, double timeOut);
  • trunk/Source/WebKit/blackberry/ChangeLog

    r147497 r147537  
     12013-04-03  Arvid Nilsson  <anilsson@rim.com>
     2
     3        [BlackBerry] Decouple layout viewport from visual viewport
     4        https://bugs.webkit.org/show_bug.cgi?id=113829
     5
     6        Reviewed by Carlos Garcia Campos.
     7
     8        Setting the visual viewport would force the layout viewport equal to
     9        the visual viewport. Decouple the viewports by allowing the user to
     10        specify a layout viewport when setting the viewport(s). The layout
     11        viewport could be the exact same value passed for visual viewport, if
     12        the old behavior is desired.
     13
     14        Also reevaluate any viewport arguments when (only) the layout viewport
     15        changes in WebPage::setDefaultLayoutSize() since the layout viewport is
     16        used as input to the calculation.
     17
     18        * Api/WebPage.cpp:
     19        (BlackBerry::WebKit::WebPagePrivate::setScreenOrientation):
     20        (BlackBerry::WebKit::WebPagePrivate::setViewportSize):
     21        (BlackBerry::WebKit::WebPage::setViewportSize):
     22        (WebKit):
     23        (BlackBerry::WebKit::WebPagePrivate::setDefaultLayoutSize):
     24        (BlackBerry::WebKit::WebPage::defaultLayoutSize):
     25        * Api/WebPage.h:
     26        * Api/WebPage_p.h:
     27        (WebPagePrivate):
     28
    1292013-04-02  Maxim Mogilnitsky  <mmogilnitsky@rim.com>
    230
Note: See TracChangeset for help on using the changeset viewer.