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

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

Issue 2816873002: Update PaintLayer size during layout, not after.
Patch Set: s/UpdateICBAndViewportSize/ResizeFrameView/ Created 3 years, 8 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
« no previous file with comments | « third_party/WebKit/Source/core/paint/PaintLayer.cpp ('k') | third_party/WebKit/Source/web/WebViewImpl.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: third_party/WebKit/Source/core/paint/PaintLayerScrollableArea.cpp
diff --git a/third_party/WebKit/Source/core/paint/PaintLayerScrollableArea.cpp b/third_party/WebKit/Source/core/paint/PaintLayerScrollableArea.cpp
index c3dcf5fc2a9a88ea94878a54c8eba71e1f94facf..d9fcb92a61ba4b3385310f4740c28caa277e3389 100644
--- a/third_party/WebKit/Source/core/paint/PaintLayerScrollableArea.cpp
+++ b/third_party/WebKit/Source/core/paint/PaintLayerScrollableArea.cpp
@@ -309,9 +309,10 @@ IntRect PaintLayerScrollableArea::ScrollCornerRect() const {
bool has_vertical_bar = VerticalScrollbar();
bool has_resizer = Box().Style()->Resize() != RESIZE_NONE;
if ((has_horizontal_bar && has_vertical_bar) ||
- (has_resizer && (has_horizontal_bar || has_vertical_bar)))
+ (has_resizer && (has_horizontal_bar || has_vertical_bar))) {
return CornerRect(Box(), HorizontalScrollbar(), VerticalScrollbar(),
- Box().PixelSnappedBorderBoxRect());
+ IntRect(IntPoint(), layer_.size()));
+ }
return IntRect();
}
@@ -634,7 +635,9 @@ bool PaintLayerScrollableArea::ScrollbarsCanBeActive() const {
}
IntRect PaintLayerScrollableArea::ScrollableAreaBoundingBox() const {
- return Box().AbsoluteBoundingBoxRect(kTraverseDocumentBoundaries);
+ FloatQuad quad(FloatRect(FloatPoint(), FloatSize(layer_.size())));
+ quad = Box().LocalToAbsoluteQuad(quad, kTraverseDocumentBoundaries);
+ return quad.EnclosingBoundingBox();
}
void PaintLayerScrollableArea::RegisterForAnimation() {
@@ -684,9 +687,14 @@ bool PaintLayerScrollableArea::ShouldPlaceVerticalScrollbarOnLeft() const {
}
int PaintLayerScrollableArea::PageStep(ScrollbarOrientation orientation) const {
+ // Note: For the root layer of the main frame, pageStep() will not be based
+ // on the scrollable area size (which matches the layout viewport), but
+ // instead on the initial containing block size. It's unclear whether this
+ // is "correct" behavior; there is no spec guidance on the scroll distance
+ // of page scrolling in this circumstance.
int length = (orientation == kHorizontalScrollbar)
- ? Box().PixelSnappedClientWidth()
- : Box().PixelSnappedClientHeight();
+ ? PixelSnappedClientSize().Width()
+ : PixelSnappedClientSize().Height();
int min_page_step = static_cast<float>(length) *
ScrollableArea::MinFractionToStepWhenPaging();
int page_step =
@@ -1153,15 +1161,15 @@ int PaintLayerScrollableArea::HorizontalScrollbarStart(int min_x) const {
IntSize PaintLayerScrollableArea::ScrollbarOffset(
const Scrollbar& scrollbar) const {
if (&scrollbar == VerticalScrollbar()) {
- return IntSize(VerticalScrollbarStart(0, Box().Size().Width().ToInt()),
+ return IntSize(VerticalScrollbarStart(0, layer_.size().Width()),
Box().BorderTop().ToInt());
}
- if (&scrollbar == HorizontalScrollbar())
- return IntSize(
- HorizontalScrollbarStart(0),
- (Box().Size().Height() - Box().BorderBottom() - scrollbar.Height())
- .ToInt());
+ if (&scrollbar == HorizontalScrollbar()) {
+ return IntSize(HorizontalScrollbarStart(0),
+ layer_.size().Height() - Box().BorderBottom().ToInt() -
+ scrollbar.Height());
+ }
NOTREACHED();
return IntSize();
@@ -1390,20 +1398,23 @@ void PaintLayerScrollableArea::PositionOverflowControls() {
if (!HasScrollbar() && !Box().CanResize())
return;
- const IntRect border_box = Box().PixelSnappedBorderBoxRect();
+ const IntRect layer_bounds(IntPoint(), layer_.size());
if (Scrollbar* vertical_scrollbar = this->VerticalScrollbar())
- vertical_scrollbar->SetFrameRect(RectForVerticalScrollbar(border_box));
+ vertical_scrollbar->SetFrameRect(RectForVerticalScrollbar(layer_bounds));
- if (Scrollbar* horizontal_scrollbar = this->HorizontalScrollbar())
- horizontal_scrollbar->SetFrameRect(RectForHorizontalScrollbar(border_box));
+ if (Scrollbar* horizontal_scrollbar = this->HorizontalScrollbar()) {
+ horizontal_scrollbar->SetFrameRect(
+ RectForHorizontalScrollbar(layer_bounds));
+ }
const IntRect& scroll_corner = ScrollCornerRect();
if (scroll_corner_)
scroll_corner_->SetFrameRect(LayoutRect(scroll_corner));
- if (resizer_)
+ if (resizer_) {
resizer_->SetFrameRect(
- LayoutRect(ResizerCornerRect(border_box, kResizerForPointer)));
+ LayoutRect(ResizerCornerRect(layer_bounds, kResizerForPointer)));
+ }
// FIXME, this should eventually be removed, once we are certain that
// composited controls get correctly positioned on a compositor update. For
@@ -1446,7 +1457,7 @@ bool PaintLayerScrollableArea::HitTestOverflowControls(
IntRect resize_control_rect;
if (Box().Style()->Resize() != RESIZE_NONE) {
- resize_control_rect = ResizerCornerRect(Box().PixelSnappedBorderBoxRect(),
+ resize_control_rect = ResizerCornerRect(IntRect(IntPoint(), layer_.size()),
kResizerForPointer);
if (resize_control_rect.Contains(local_point))
return true;
@@ -1458,7 +1469,7 @@ bool PaintLayerScrollableArea::HitTestOverflowControls(
LayoutRect v_bar_rect(
VerticalScrollbarStart(0, Box().Size().Width().ToInt()),
Box().BorderTop().ToInt(), VerticalScrollbar()->ScrollbarThickness(),
- Box().Size().Height().ToInt() -
+ layer_.size().Height() -
(Box().BorderTop() + Box().BorderBottom()).ToInt() -
(HasHorizontalScrollbar()
? HorizontalScrollbar()->ScrollbarThickness()
@@ -1475,10 +1486,10 @@ bool PaintLayerScrollableArea::HitTestOverflowControls(
// TODO(crbug.com/638981): Are the conversions to int intentional?
LayoutRect h_bar_rect(
HorizontalScrollbarStart(0),
- (Box().Size().Height() - Box().BorderBottom() -
+ (layer_.size().Height() - Box().BorderBottom() -
HorizontalScrollbar()->ScrollbarThickness())
.ToInt(),
- (Box().Size().Width() - (Box().BorderLeft() + Box().BorderRight()) -
+ (layer_.size().Width() - (Box().BorderLeft() + Box().BorderRight()) -
(HasVerticalScrollbar() ? VerticalScrollbar()->ScrollbarThickness()
: resize_control_size))
.ToInt(),
@@ -1534,8 +1545,7 @@ bool PaintLayerScrollableArea::IsPointInResizeControl(
IntPoint local_point =
RoundedIntPoint(Box().AbsoluteToLocal(absolute_point, kUseTransforms));
- IntRect local_bounds(0, 0, Box().PixelSnappedWidth(),
- Box().PixelSnappedHeight());
+ IntRect local_bounds(IntPoint(), layer_.size());
return ResizerCornerRect(local_bounds, resizer_hit_test_type)
.Contains(local_point);
}
« no previous file with comments | « third_party/WebKit/Source/core/paint/PaintLayer.cpp ('k') | third_party/WebKit/Source/web/WebViewImpl.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698