[webkit-dev] New feature: CSS3 GCPM

David Hyatt hyatt at apple.com
Thu Aug 23 12:23:45 PDT 2012

On Aug 22, 2012, at 10:11 AM, Milian Wolff wrote:

> On Monday 20 August 2012 11:15:21 David Hyatt wrote:
>> You're going to see some patches in the coming weeks (first one coming soon)
>> to begin work on implementing:
>> http://www.w3.org/TR/css3-gcpm/
>> In some cases, there are going to be syntactic deviations from the spec as
>> we experiment (based off discussions that are ongoing in the CSS WG), but
>> in general we'll be implementing the features in the working draft.
> Hey there,
> very interesting to see you working on this! Can you tell me whether you are 
> going to work on the css3 paged-based media module next? Paired with GCPM it 
> would make WebKit a very powerful publishing tool.
> Thanks, take care.

There are a number of tasks happening first that are mostly about fixing what code is there.

Right now we have a screen pagination mode that works in terms of columns. This has led us to add CSS properties to hack how columns get stacked (inline direction or block direction), when in reality this pagination mode should be operating in terms of pages instead.

In addition columns and pages don't play well together in terms of nesting. You can't even print a page with columns on it for example, because we're incapable of handling that nesting.

So architecturally what's happening is that pages and columns are getting a complete re-write, and they're being re-implemented in terms of regions and flow threads. In effect, we're unifying columns, pages and CSS Regions to all work in terms of RenderFlowThreads that hold the actual content and RenderRegions that the content flows into.

RenderRegion and RenderFlowThread are the base classes used by all three models.

RenderRegionSet is a new class that derives from RenderRegion and represents a run of contiguous identical regions. It is going to be used by columns and pages and (assuming it gets adopted) by overflow:regions (dbaron's proposal for auto-cloning of new regions to accommodate overflow).

RenderPageSet and RenderColumnSet derive from RenderRegionSet and handle specialized rendering of pages and column boxes. For example, RenderPageSet will eventually be expanded to render all the additional boxes around pages that CSS3 Paged Media allows.

Columns will no longer have any code in RenderBlock. Everything will be in subclasses, i.e., RenderMultiColumnBlock.

When printing, RenderView will shunt its children into a RenderPageFlowThread and create RenderPageSets as needed for the pages (with runs of identical pages sharing the same page set).

The screen pagination mode that changes RenderView to have columns will be re-written to use a RenderPageFlowThread and RenderPageSet instead.

RenderPageSet will know about progression direction and it will determine this based off overflow:paged-x/paged-y instead of having a custom column-specific property.

Anyway, that's the basic run-down. There is a lot of architectural work to be done to build up this new model, but the advantage is that regions, pages and columns will all be nestable and work much better together (e.g., you'll be able to have columns thread through regions, or regions thread through pages, etc.).

(hyatt at apple.com)

More information about the webkit-dev mailing list