Changeset 106511 in webkit


Ignore:
Timestamp:
Feb 1, 2012 4:01:45 PM (12 years ago)
Author:
mitz@apple.com
Message:

Source/WebCore: WebCore part of <rdar://problem/10442663> Paginated display does not respect page-break-{before,after}
https://bugs.webkit.org/show_bug.cgi?id=77505

Reviewed by Darin Adler.

  • page/Page.h:

(WebCore::Page::Pagination::Pagination): Added initializer for the behavesLikeColumns member
variable.
(WebCore::Page::Pagination::operator==): Added comparison of behavesLikeColumns values.
(Pagination): Added behavesLikeColumns member variable. When set to false (the default),
paginated display respects the page-break-{before,after} properties rather than the
column-break-{before,after} ones.

  • rendering/ColumnInfo.h:

(WebCore::ColumnInfo::ColumnInfo): Added initializer for the m_paginationUnit member.
(WebCore::ColumnInfo::paginationUnit): Added this getter.
(WebCore::ColumnInfo::setPaginationUnit): Added this setter.
(ColumnInfo): Added m_paginationUnit member. It defaults to Column.

  • rendering/LayoutState.h:

(WebCore::LayoutState::isPaginatingColumns): Changed to check the pagination unit.

  • rendering/RenderBlock.cpp:

(WebCore::RenderBlock::layoutBlock): Added code to set the pagination unit in the ColumnInfo.
(WebCore::RenderBlock::paginationUnit): Added. The base class implementation returns Column.

  • rendering/RenderBlock.h:
  • rendering/RenderView.cpp:

(WebCore::RenderView::paginationUnit): Added this override that returns Page, unless
this is the RenderView for the main frame and pagination is set to behave like columns.

  • rendering/RenderView.h:

Source/WebKit/mac: WebKit/mac part of <rdar://problem/10442663> Paginated display does not respect page-break-{before,after}
https://bugs.webkit.org/show_bug.cgi?id=77505

Reviewed by Darin Adler.

  • WebView/WebView.mm:

(-[WebView _setPaginationBehavesLikeColumns:]): Added this setter.
(-[WebView _paginationBehavesLikeColumns]): Added this getter.

  • WebView/WebViewPrivate.h:

Source/WebKit2: WebKit2 part of <rdar://problem/10442663> Paginated display does not respect page-break-{before,after}
https://bugs.webkit.org/show_bug.cgi?id=77505

Reviewed by Darin Adler.

  • Shared/WebPageCreationParameters.cpp:

(WebKit::WebPageCreationParameters::encode): Encode paginationBehavesLikeColumns.
(WebKit::WebPageCreationParameters::decode): Decode paginationBehavesLikeColumns.

  • Shared/WebPageCreationParameters.h:

(WebPageCreationParameters): Added paginationBehavesLikeColumns boolean.

  • UIProcess/API/C/WKPage.cpp:

(WKPageSetPaginationBehavesLikeColumns): Added this setter.
(WKPageGetPaginationBehavesLikeColumns): Added this getter.

  • UIProcess/API/C/WKPagePrivate.h:
  • UIProcess/API/mac/WKBrowsingContextController.mm:

(-[WKBrowsingContextController setPaginationBehavesLikeColumns:]): Added this Objective-C
wrapper around WKPageSetPaginationBehavesLikeColumns.
(-[WKBrowsingContextController paginationBehavesLikeColumns]): Added this Objective-C wrapper
around WKPageGetPaginationBehavesLikeColumns.

  • UIProcess/API/mac/WKBrowsingContextControllerPrivate.h:
  • UIProcess/WebPageProxy.cpp:

(WebKit::WebPageProxy::WebPageProxy): Added call to setPaginationBehavesLikeColumns() with
the value from the creation parameters.
(WebKit::WebPageProxy::setPaginationBehavesLikeColumns): Added this setter.
(WebKit::WebPageProxy::creationParameters): Populate paginationBehavesLikeColumns.

  • UIProcess/WebPageProxy.h:

(WebKit::WebPageProxy::paginationBehavesLikeColumns): Added this getter.

  • WebProcess/WebPage/WebPage.cpp:

(WebKit::WebPage::setPaginationBehavesLikeColumns): Added this setter.

  • WebProcess/WebPage/WebPage.h:
  • WebProcess/WebPage/WebPage.messages.in: Added SetPaginationBehavesLikeColumns message.
Location:
trunk/Source
Files:
23 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r106510 r106511  
     12012-02-01  Dan Bernstein  <mitz@apple.com>
     2
     3        WebCore part of <rdar://problem/10442663> Paginated display does not respect page-break-{before,after}
     4        https://bugs.webkit.org/show_bug.cgi?id=77505
     5
     6        Reviewed by Darin Adler.
     7
     8        * page/Page.h:
     9        (WebCore::Page::Pagination::Pagination): Added initializer for the behavesLikeColumns member
     10        variable.
     11        (WebCore::Page::Pagination::operator==): Added comparison of behavesLikeColumns values.
     12        (Pagination): Added behavesLikeColumns member variable. When set to false (the default),
     13        paginated display respects the page-break-{before,after} properties rather than the
     14        column-break-{before,after} ones.
     15        * rendering/ColumnInfo.h:
     16        (WebCore::ColumnInfo::ColumnInfo): Added initializer for the m_paginationUnit member.
     17        (WebCore::ColumnInfo::paginationUnit): Added this getter.
     18        (WebCore::ColumnInfo::setPaginationUnit): Added this setter.
     19        (ColumnInfo): Added m_paginationUnit member. It defaults to Column.
     20        * rendering/LayoutState.h:
     21        (WebCore::LayoutState::isPaginatingColumns): Changed to check the pagination unit.
     22        * rendering/RenderBlock.cpp:
     23        (WebCore::RenderBlock::layoutBlock): Added code to set the pagination unit in the ColumnInfo.
     24        (WebCore::RenderBlock::paginationUnit): Added. The base class implementation returns Column.
     25        * rendering/RenderBlock.h:
     26        * rendering/RenderView.cpp:
     27        (WebCore::RenderView::paginationUnit): Added this override that returns Page, unless
     28        this is the RenderView for the main frame and pagination is set to behave like columns.
     29        * rendering/RenderView.h:
     30
    1312012-02-01  Florin Malita  <fmalita@google.com>
    232
  • trunk/Source/WebCore/page/Page.h

    r106492 r106511  
    272272            Pagination()
    273273                : mode(Unpaginated)
     274                , behavesLikeColumns(false)
    274275                , pageLength(0)
    275276                , gap(0)
     
    279280            bool operator==(const Pagination& other) const
    280281            {
    281                 return mode == other.mode && pageLength == other.pageLength && gap == other.gap;
     282                return mode == other.mode && behavesLikeColumns == other.behavesLikeColumns && pageLength == other.pageLength && gap == other.gap;
    282283            }
    283284
    284285            Mode mode;
     286            bool behavesLikeColumns;
    285287            unsigned pageLength;
    286288            unsigned gap;
  • trunk/Source/WebCore/rendering/ColumnInfo.h

    r98608 r106511  
    4545        , m_maximumDistanceBetweenForcedBreaks(0)
    4646        , m_forcedBreakOffset(0)
     47        , m_paginationUnit(Column)
    4748    {
    4849    }
     
    9495    }
    9596
     97    enum PaginationUnit { Column, Page };
     98    PaginationUnit paginationUnit() const { return m_paginationUnit; }
     99    void setPaginationUnit(PaginationUnit paginationUnit) { m_paginationUnit = paginationUnit; }
     100
    96101private:
    97102    LayoutUnit m_desiredColumnWidth;
     
    105110    int m_maximumDistanceBetweenForcedBreaks;
    106111    int m_forcedBreakOffset;
     112    PaginationUnit m_paginationUnit;
    107113};
    108114
  • trunk/Source/WebCore/rendering/LayoutState.h

    r105176 r106511  
    2727#define LayoutState_h
    2828
     29#include "ColumnInfo.h"
    2930#include "LayoutTypes.h"
    3031#include <wtf/HashMap.h>
     
    3334namespace WebCore {
    3435
    35 class ColumnInfo;
    3636class RenderArena;
    3737class RenderBlock;
     
    7070
    7171    void clearPaginationInformation();
    72     bool isPaginatingColumns() const { return m_columnInfo; }
     72    bool isPaginatingColumns() const { return m_columnInfo && m_columnInfo->paginationUnit() == ColumnInfo::Column; }
    7373    bool isPaginated() const { return m_isPaginated; }
    7474   
  • trunk/Source/WebCore/rendering/RenderBlock.cpp

    r106228 r106511  
    12621262        if (!hasSpecifiedPageLogicalHeight && !pageLogicalHeight)
    12631263            colInfo->clearForcedBreaks();
     1264
     1265        colInfo->setPaginationUnit(paginationUnit());
    12641266    }
    12651267
     
    63896391    }
    63906392    return true;
     6393}
     6394
     6395ColumnInfo::PaginationUnit RenderBlock::paginationUnit() const
     6396{
     6397    return ColumnInfo::Column;
    63916398}
    63926399
  • trunk/Source/WebCore/rendering/RenderBlock.h

    r106150 r106511  
    2424#define RenderBlock_h
    2525
     26#include "ColumnInfo.h"
    2627#include "GapRects.h"
    2728#include "PODIntervalTree.h"
     
    3637
    3738class BidiContext;
    38 class ColumnInfo;
    3939class InlineIterator;
    4040class LayoutStateMaintainer;
     
    906906    bool hasNextPage(LayoutUnit logicalOffset, PageBoundaryRule = ExcludePageBoundary) const;
    907907
     908    virtual ColumnInfo::PaginationUnit paginationUnit() const;
     909
    908910    LayoutUnit applyBeforeBreak(RenderBox* child, LayoutUnit logicalOffset); // If the child has a before break, then return a new yPos that shifts to the top of the next page/column.
    909911    LayoutUnit applyAfterBreak(RenderBox* child, LayoutUnit logicalOffset, MarginInfo&); // If the child has an after break, then return a new offset that shifts to the top of the next page/column.
  • trunk/Source/WebCore/rendering/RenderView.cpp

    r106281 r106511  
    200200}
    201201
     202ColumnInfo::PaginationUnit RenderView::paginationUnit() const
     203{
     204    if (m_frameView) {
     205        if (Frame* frame = m_frameView->frame()) {
     206            if (Page* page = frame->page())
     207                return (frame == page->mainFrame() && page->pagination().behavesLikeColumns) ? ColumnInfo::Column : ColumnInfo::Page;
     208        }
     209    }
     210    return ColumnInfo::Page;
     211}
     212
    202213void RenderView::paint(PaintInfo& paintInfo, const LayoutPoint& paintOffset)
    203214{
  • trunk/Source/WebCore/rendering/RenderView.h

    r106281 r106511  
    199199private:
    200200    virtual void calcColumnWidth() OVERRIDE;
     201    virtual ColumnInfo::PaginationUnit paginationUnit() const OVERRIDE;
    201202
    202203    bool shouldRepaint(const IntRect& r) const;
  • trunk/Source/WebKit/mac/ChangeLog

    r106373 r106511  
     12012-02-01  Dan Bernstein  <mitz@apple.com>
     2
     3        WebKit/mac part of <rdar://problem/10442663> Paginated display does not respect page-break-{before,after}
     4        https://bugs.webkit.org/show_bug.cgi?id=77505
     5
     6        Reviewed by Darin Adler.
     7
     8        * WebView/WebView.mm:
     9        (-[WebView _setPaginationBehavesLikeColumns:]): Added this setter.
     10        (-[WebView _paginationBehavesLikeColumns]): Added this getter.
     11        * WebView/WebViewPrivate.h:
     12
    1132012-01-25  Eric Seidel  <eric@webkit.org>
    214
  • trunk/Source/WebKit/mac/WebView/WebView.mm

    r105908 r106511  
    27922792}
    27932793
     2794- (void)_setPaginationBehavesLikeColumns:(BOOL)behavesLikeColumns
     2795{
     2796    Page* page = core(self);
     2797    if (!page)
     2798        return;
     2799
     2800    Page::Pagination pagination = page->pagination();
     2801    pagination.behavesLikeColumns = behavesLikeColumns;
     2802}
     2803
     2804- (BOOL)_paginationBehavesLikeColumns
     2805{
     2806    Page* page = core(self);
     2807    if (!page)
     2808        return NO;
     2809
     2810    return page->pagination().behavesLikeColumns;
     2811}
     2812
    27942813- (void)_setPageLength:(CGFloat)pageLength
    27952814{
  • trunk/Source/WebKit/mac/WebView/WebViewPrivate.h

    r103910 r106511  
    558558- (void)_setPaginationMode:(WebPaginationMode)paginationMode;
    559559- (WebPaginationMode)_paginationMode;
     560
     561// Whether the column-break-{before,after} properties are respected instead of the
     562// page-break-{before,after} properties.
     563- (void)_setPaginationBehavesLikeColumns:(BOOL)behavesLikeColumns;
     564- (BOOL)_paginationBehavesLikeColumns;
     565
    560566// Set to 0 to have the page length equal the view length.
    561567- (void)_setPageLength:(CGFloat)pageLength;
  • trunk/Source/WebKit2/ChangeLog

    r106508 r106511  
     12012-02-01  Dan Bernstein  <mitz@apple.com>
     2
     3        WebKit2 part of <rdar://problem/10442663> Paginated display does not respect page-break-{before,after}
     4        https://bugs.webkit.org/show_bug.cgi?id=77505
     5
     6        Reviewed by Darin Adler.
     7
     8        * Shared/WebPageCreationParameters.cpp:
     9        (WebKit::WebPageCreationParameters::encode): Encode paginationBehavesLikeColumns.
     10        (WebKit::WebPageCreationParameters::decode): Decode paginationBehavesLikeColumns.
     11        * Shared/WebPageCreationParameters.h:
     12        (WebPageCreationParameters): Added paginationBehavesLikeColumns boolean.
     13        * UIProcess/API/C/WKPage.cpp:
     14        (WKPageSetPaginationBehavesLikeColumns): Added this setter.
     15        (WKPageGetPaginationBehavesLikeColumns): Added this getter.
     16        * UIProcess/API/C/WKPagePrivate.h:
     17        * UIProcess/API/mac/WKBrowsingContextController.mm:
     18        (-[WKBrowsingContextController setPaginationBehavesLikeColumns:]): Added this Objective-C
     19        wrapper around WKPageSetPaginationBehavesLikeColumns.
     20        (-[WKBrowsingContextController paginationBehavesLikeColumns]): Added this Objective-C wrapper
     21        around WKPageGetPaginationBehavesLikeColumns.
     22        * UIProcess/API/mac/WKBrowsingContextControllerPrivate.h:
     23        * UIProcess/WebPageProxy.cpp:
     24        (WebKit::WebPageProxy::WebPageProxy): Added call to setPaginationBehavesLikeColumns() with
     25        the value from the creation parameters.
     26        (WebKit::WebPageProxy::setPaginationBehavesLikeColumns): Added this setter.
     27        (WebKit::WebPageProxy::creationParameters): Populate paginationBehavesLikeColumns.
     28        * UIProcess/WebPageProxy.h:
     29        (WebKit::WebPageProxy::paginationBehavesLikeColumns): Added this getter.
     30        * WebProcess/WebPage/WebPage.cpp:
     31        (WebKit::WebPage::setPaginationBehavesLikeColumns): Added this setter.
     32        * WebProcess/WebPage/WebPage.h:
     33        * WebProcess/WebPage/WebPage.messages.in: Added SetPaginationBehavesLikeColumns message.
     34
    1352012-02-01  Anders Carlsson  <andersca@apple.com>
    236
  • trunk/Source/WebKit2/Shared/WebPageCreationParameters.cpp

    r105439 r106511  
    4848    encoder->encode(fixedLayoutSize);
    4949    encoder->encodeEnum(paginationMode);
     50    encoder->encode(paginationBehavesLikeColumns);
    5051    encoder->encode(pageLength);
    5152    encoder->encode(gapBetweenPages);
     
    9798    if (!decoder->decodeEnum(parameters.paginationMode))
    9899        return false;
     100    if (!decoder->decode(parameters.paginationBehavesLikeColumns))
     101        return false;
    99102    if (!decoder->decode(parameters.pageLength))
    100103        return false;
  • trunk/Source/WebKit2/Shared/WebPageCreationParameters.h

    r105439 r106511  
    6565
    6666    WebCore::Page::Pagination::Mode paginationMode;
     67    bool paginationBehavesLikeColumns;
    6768    double pageLength;
    6869    double gapBetweenPages;
  • trunk/Source/WebKit2/UIProcess/API/C/WKPage.cpp

    r105439 r106511  
    380380}
    381381
     382void WKPageSetPaginationBehavesLikeColumns(WKPageRef pageRef, bool behavesLikeColumns)
     383{
     384    toImpl(pageRef)->setPaginationBehavesLikeColumns(behavesLikeColumns);
     385}
     386
     387bool WKPageGetPaginationBehavesLikeColumns(WKPageRef pageRef)
     388{
     389    return toImpl(pageRef)->paginationBehavesLikeColumns();
     390}
     391
    382392void WKPageSetPageLength(WKPageRef pageRef, double pageLength)
    383393{
  • trunk/Source/WebKit2/UIProcess/API/C/WKPagePrivate.h

    r105439 r106511  
    6262WK_EXPORT void WKPageSetPaginationMode(WKPageRef page, WKPaginationMode paginationMode);
    6363WK_EXPORT WKPaginationMode WKPageGetPaginationMode(WKPageRef page);
     64WK_EXPORT void WKPageSetPaginationBehavesLikeColumns(WKPageRef page, bool behavesLikeColumns);
     65WK_EXPORT bool WKPageGetPaginationBehavesLikeColumns(WKPageRef page);
    6466WK_EXPORT void WKPageSetPageLength(WKPageRef page, double pagesPerView);
    6567WK_EXPORT double WKPageGetPageLength(WKPageRef page);
  • trunk/Source/WebKit2/UIProcess/API/mac/WKBrowsingContextController.mm

    r103414 r106511  
    244244}
    245245
     246- (void)setPaginationBehavesLikeColumns:(BOOL)behavesLikeColumns
     247{
     248    WKPageSetPaginationBehavesLikeColumns(self._pageRef, behavesLikeColumns);
     249}
     250
     251- (BOOL)paginationBehavesLikeColumns
     252{
     253    return WKPageGetPaginationBehavesLikeColumns(self._pageRef);
     254}
     255
    246256- (void)setPageLength:(CGFloat)pageLength
    247257{
  • trunk/Source/WebKit2/UIProcess/API/mac/WKBrowsingContextControllerPrivate.h

    r101574 r106511  
    3636
    3737@property WKBrowsingContextPaginationMode paginationMode;
     38// Whether the column-break-{before,after} properties are respected instead of the
     39// page-break-{before,after} properties.
     40@property BOOL paginationBehavesLikeColumns;
    3841// Set to 0 to have the page length equal the view length.
    3942@property CGFloat pageLength;
  • trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp

    r106492 r106511  
    167167    , m_useFixedLayout(false)
    168168    , m_paginationMode(Page::Pagination::Unpaginated)
     169    , m_paginationBehavesLikeColumns(false)
    169170    , m_pageLength(0)
    170171    , m_gapBetweenPages(0)
     
    13141315}
    13151316
     1317void WebPageProxy::setPaginationBehavesLikeColumns(bool behavesLikeColumns)
     1318{
     1319    if (behavesLikeColumns == m_paginationBehavesLikeColumns)
     1320        return;
     1321
     1322    m_paginationBehavesLikeColumns = behavesLikeColumns;
     1323
     1324    if (!isValid())
     1325        return;
     1326    process()->send(Messages::WebPage::SetPaginationBehavesLikeColumns(behavesLikeColumns), m_pageID);
     1327}
     1328
    13161329void WebPageProxy::setPageLength(double pageLength)
    13171330{
     
    32713284    parameters.fixedLayoutSize = m_fixedLayoutSize;
    32723285    parameters.paginationMode = m_paginationMode;
     3286    parameters.paginationBehavesLikeColumns = m_paginationBehavesLikeColumns;
    32733287    parameters.pageLength = m_pageLength;
    32743288    parameters.gapBetweenPages = m_gapBetweenPages;
  • trunk/Source/WebKit2/UIProcess/WebPageProxy.h

    r106492 r106511  
    442442    void setPaginationMode(WebCore::Page::Pagination::Mode);
    443443    WebCore::Page::Pagination::Mode paginationMode() const { return m_paginationMode; }
     444    void setPaginationBehavesLikeColumns(bool);
     445    bool paginationBehavesLikeColumns() const { return m_paginationBehavesLikeColumns; }
    444446    void setPageLength(double);
    445447    double pageLength() const { return m_pageLength; }
     
    948950
    949951    WebCore::Page::Pagination::Mode m_paginationMode;
     952    bool m_paginationBehavesLikeColumns;
    950953    double m_pageLength;
    951954    double m_gapBetweenPages;
  • trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp

    r106492 r106511  
    262262
    263263    setPaginationMode(parameters.paginationMode);
     264    setPaginationBehavesLikeColumns(parameters.paginationBehavesLikeColumns);
    264265    setPageLength(parameters.pageLength);
    265266    setGapBetweenPages(parameters.gapBetweenPages);
     
    10241025}
    10251026
     1027void WebPage::setPaginationBehavesLikeColumns(bool behavesLikeColumns)
     1028{
     1029    Page::Pagination pagination = m_page->pagination();
     1030    pagination.behavesLikeColumns = behavesLikeColumns;
     1031    m_page->setPagination(pagination);
     1032}
     1033
    10261034void WebPage::setPageLength(double pageLength)
    10271035{
  • trunk/Source/WebKit2/WebProcess/WebPage/WebPage.h

    r106492 r106511  
    280280
    281281    void setPaginationMode(uint32_t /* WebCore::Page::Pagination::Mode */);
     282    void setPaginationBehavesLikeColumns(bool);
    282283    void setPageLength(double);
    283284    void setGapBetweenPages(double);
  • trunk/Source/WebKit2/WebProcess/WebPage/WebPage.messages.in

    r106102 r106511  
    127127
    128128    SetPaginationMode(uint32_t mode);
     129    SetPaginationBehavesLikeColumns(bool behavesLikeColumns);
    129130    SetPageLength(double pageLength);
    130131    SetGapBetweenPages(double gap);
Note: See TracChangeset for help on using the changeset viewer.