Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(728)

Unified Diff: third_party/WebKit/Source/core/paint/PaintLayerPainter.cpp

Issue 1575983002: Display fixed position objects on every page of paged media. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Updated Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/core/paint/PaintLayerPainter.cpp
diff --git a/third_party/WebKit/Source/core/paint/PaintLayerPainter.cpp b/third_party/WebKit/Source/core/paint/PaintLayerPainter.cpp
index 0a6252bb97619ba13f0f2ee27db062730789b882..577e3faed94dfbf51e8e375afe24aa6efc97120b 100644
--- a/third_party/WebKit/Source/core/paint/PaintLayerPainter.cpp
+++ b/third_party/WebKit/Source/core/paint/PaintLayerPainter.cpp
@@ -454,9 +454,23 @@ PaintLayerPainter::PaintResult PaintLayerPainter::paintLayerWithTransform(Graphi
ancestorBackgroundClipRect = m_paintLayer.clipper().backgroundClipRect(clipRectsContext);
}
+ LayoutObject* object = m_paintLayer.layoutObject();
+ LayoutView* view = object->view();
+ bool isFixedPosObjectInPagedMedia = object->style()->position() == FixedPosition && view->pageLogicalHeight();
Xianzhu 2016/03/21 19:37:18 We should exclude the case that the view is not th
PaintLayer* paginationLayer = m_paintLayer.enclosingPaginationLayer();
PaintLayerFragments fragments;
- if (paginationLayer) {
+ if (isFixedPosObjectInPagedMedia) {
+ // "For paged media, boxes with fixed positions are repeated on every page."
Xianzhu 2016/03/21 19:37:18 Nit: include the link of source of the above state
+ ASSERT(view->firstChild() && view->firstChild()->isLayoutBlock());
+ int pages = toLayoutBlock(view->firstChild())->logicalHeight() / view->pageLogicalHeight();
+ LayoutPoint paginationOffset;
+ for (int i = 0; i <= pages; i++) {
+ PaintLayerFragment fragment;
+ fragment.paginationOffset = paginationOffset;
+ fragments.append(fragment);
+ paginationOffset += LayoutPoint(0, view->pageLogicalHeight());
+ }
+ } else if (paginationLayer) {
// FIXME: This is a mess. Look closely at this code and the code in Layer and fix any
// issues in it & refactor to make it obvious from code structure what it does and that it's
// correct.
@@ -484,7 +498,7 @@ PaintLayerPainter::PaintResult PaintLayerPainter::paintLayerWithTransform(Graphi
if (needsScope)
scopeRecorder.emplace(context);
Optional<LayerClipRecorder> clipRecorder;
- if (parentLayer) {
+ if (parentLayer && !isFixedPosObjectInPagedMedia) {
Xianzhu 2016/03/21 19:37:18 I think we should still clip (especially css clip)
ClipRect clipRectForFragment(ancestorBackgroundClipRect);
clipRectForFragment.moveBy(fragment.paginationOffset);
clipRectForFragment.intersect(fragment.backgroundRect);

Powered by Google App Engine
This is Rietveld 408576698