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

Side by Side Diff: sky/engine/core/rendering/RenderBox.cpp

Issue 878303002: Remove more scrolling code from Sky (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 5 years, 11 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 unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org)
3 * (C) 1999 Antti Koivisto (koivisto@kde.org) 3 * (C) 1999 Antti Koivisto (koivisto@kde.org)
4 * (C) 2005 Allan Sandfeld Jensen (kde@carewolf.com) 4 * (C) 2005 Allan Sandfeld Jensen (kde@carewolf.com)
5 * (C) 2005, 2006 Samuel Weinig (sam.weinig@gmail.com) 5 * (C) 2005, 2006 Samuel Weinig (sam.weinig@gmail.com)
6 * Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010 Apple Inc. All rights reserv ed. 6 * Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010 Apple Inc. All rights reserv ed.
7 * Copyright (C) 2013 Adobe Systems Incorporated. All rights reserved. 7 * Copyright (C) 2013 Adobe Systems Incorporated. All rights reserved.
8 * 8 *
9 * This library is free software; you can redistribute it and/or 9 * This library is free software; you can redistribute it and/or
10 * modify it under the terms of the GNU Library General Public 10 * modify it under the terms of the GNU Library General Public
(...skipping 17 matching lines...) Expand all
28 28
29 #include <math.h> 29 #include <math.h>
30 #include <algorithm> 30 #include <algorithm>
31 #include "sky/engine/core/dom/Document.h" 31 #include "sky/engine/core/dom/Document.h"
32 #include "sky/engine/core/editing/htmlediting.h" 32 #include "sky/engine/core/editing/htmlediting.h"
33 #include "sky/engine/core/frame/FrameHost.h" 33 #include "sky/engine/core/frame/FrameHost.h"
34 #include "sky/engine/core/frame/FrameView.h" 34 #include "sky/engine/core/frame/FrameView.h"
35 #include "sky/engine/core/frame/LocalFrame.h" 35 #include "sky/engine/core/frame/LocalFrame.h"
36 #include "sky/engine/core/frame/Settings.h" 36 #include "sky/engine/core/frame/Settings.h"
37 #include "sky/engine/core/html/HTMLElement.h" 37 #include "sky/engine/core/html/HTMLElement.h"
38 #include "sky/engine/core/page/AutoscrollController.h"
39 #include "sky/engine/core/page/EventHandler.h" 38 #include "sky/engine/core/page/EventHandler.h"
40 #include "sky/engine/core/page/Page.h" 39 #include "sky/engine/core/page/Page.h"
41 #include "sky/engine/core/rendering/HitTestResult.h" 40 #include "sky/engine/core/rendering/HitTestResult.h"
42 #include "sky/engine/core/rendering/PaintInfo.h" 41 #include "sky/engine/core/rendering/PaintInfo.h"
43 #include "sky/engine/core/rendering/RenderFlexibleBox.h" 42 #include "sky/engine/core/rendering/RenderFlexibleBox.h"
44 #include "sky/engine/core/rendering/RenderGeometryMap.h" 43 #include "sky/engine/core/rendering/RenderGeometryMap.h"
45 #include "sky/engine/core/rendering/RenderInline.h" 44 #include "sky/engine/core/rendering/RenderInline.h"
46 #include "sky/engine/core/rendering/RenderLayer.h" 45 #include "sky/engine/core/rendering/RenderLayer.h"
47 #include "sky/engine/core/rendering/RenderView.h" 46 #include "sky/engine/core/rendering/RenderView.h"
48 #include "sky/engine/platform/LengthFunctions.h" 47 #include "sky/engine/platform/LengthFunctions.h"
49 #include "sky/engine/platform/geometry/FloatQuad.h" 48 #include "sky/engine/platform/geometry/FloatQuad.h"
50 #include "sky/engine/platform/geometry/TransformState.h" 49 #include "sky/engine/platform/geometry/TransformState.h"
51 #include "sky/engine/platform/graphics/GraphicsContextStateSaver.h" 50 #include "sky/engine/platform/graphics/GraphicsContextStateSaver.h"
52 51
53 namespace blink { 52 namespace blink {
54 53
55 // Size of border belt for autoscroll. When mouse pointer in border belt,
56 // autoscroll is started.
57 static const int autoscrollBeltSize = 20;
58
59 RenderBox::RenderBox(ContainerNode* node) 54 RenderBox::RenderBox(ContainerNode* node)
60 : RenderBoxModelObject(node) 55 : RenderBoxModelObject(node)
61 , m_intrinsicContentLogicalHeight(-1) 56 , m_intrinsicContentLogicalHeight(-1)
62 , m_minPreferredLogicalWidth(-1) 57 , m_minPreferredLogicalWidth(-1)
63 , m_maxPreferredLogicalWidth(-1) 58 , m_maxPreferredLogicalWidth(-1)
64 { 59 {
65 setIsBox(); 60 setIsBox();
66 } 61 }
67 62
68 void RenderBox::willBeDestroyed() 63 void RenderBox::willBeDestroyed()
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after
179 int RenderBox::pixelSnappedOffsetWidth() const 174 int RenderBox::pixelSnappedOffsetWidth() const
180 { 175 {
181 return snapSizeToPixel(offsetWidth(), x() + clientLeft()); 176 return snapSizeToPixel(offsetWidth(), x() + clientLeft());
182 } 177 }
183 178
184 int RenderBox::pixelSnappedOffsetHeight() const 179 int RenderBox::pixelSnappedOffsetHeight() const
185 { 180 {
186 return snapSizeToPixel(offsetHeight(), y() + clientTop()); 181 return snapSizeToPixel(offsetHeight(), y() + clientTop());
187 } 182 }
188 183
189 LayoutUnit RenderBox::scrollWidth() const
190 {
191 // FIXME(sky): Remove.
192 // For objects with visible overflow, this matches IE.
193 // FIXME: Need to work right with writing modes.
194 if (style()->isLeftToRightDirection())
195 return std::max(clientWidth(), layoutOverflowRect().maxX() - borderLeft( ));
196 return clientWidth() - std::min<LayoutUnit>(0, layoutOverflowRect().x() - bo rderLeft());
197 }
198
199 LayoutUnit RenderBox::scrollHeight() const
200 {
201 // FIXME(sky): Remove.
202 // For objects with visible overflow, this matches IE.
203 // FIXME: Need to work right with writing modes.
204 return std::max(clientHeight(), layoutOverflowRect().maxY() - borderTop());
205 }
206
207 LayoutUnit RenderBox::scrollLeft() const
208 {
209 // FIXME(sky): Remove.
210 return 0;
211 }
212
213 LayoutUnit RenderBox::scrollTop() const
214 {
215 // FIXME(sky): Remove.
216 return 0;
217 }
218
219 int RenderBox::pixelSnappedScrollWidth() const
220 {
221 // FIXME(sky): Remove.
222 return snapSizeToPixel(scrollWidth(), x() + clientLeft());
223 }
224
225 int RenderBox::pixelSnappedScrollHeight() const
226 {
227 // FIXME(sky): Remove.
228 // For objects with visible overflow, this matches IE.
229 // FIXME: Need to work right with writing modes.
230 return snapSizeToPixel(scrollHeight(), y() + clientTop());
231 }
232
233 void RenderBox::setScrollLeft(LayoutUnit newLeft)
234 {
235 // FIXME(sky): Remove.
236 }
237
238 void RenderBox::setScrollTop(LayoutUnit newTop)
239 {
240 // FIXME(sky): Remove.
241 }
242
243 void RenderBox::scrollToOffset(const IntSize& offset)
244 {
245 // FIXME(sky): Remove.
246 }
247
248 void RenderBox::scrollRectToVisible(const LayoutRect& rect, const ScrollAlignmen t& alignX, const ScrollAlignment& alignY)
249 {
250 // FIXME(sky): Remove.
251 }
252
253 void RenderBox::absoluteQuads(Vector<FloatQuad>& quads) const 184 void RenderBox::absoluteQuads(Vector<FloatQuad>& quads) const
254 { 185 {
255 quads.append(localToAbsoluteQuad(FloatRect(0, 0, width().toFloat(), height() .toFloat()), 0 /* mode */)); 186 quads.append(localToAbsoluteQuad(FloatRect(0, 0, width().toFloat(), height() .toFloat()), 0 /* mode */));
256 } 187 }
257 188
258 void RenderBox::updateLayerTransformAfterLayout() 189 void RenderBox::updateLayerTransformAfterLayout()
259 { 190 {
260 // Transform-origin depends on box size, so we need to update the layer tran sform after layout. 191 // Transform-origin depends on box size, so we need to update the layer tran sform after layout.
261 if (hasLayer()) 192 if (hasLayer())
262 layer()->updateTransformationMatrix(); 193 layer()->updateTransformationMatrix();
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
306 LayoutRect rect = contentBoxRect(); 237 LayoutRect rect = contentBoxRect();
307 return localToAbsoluteQuad(FloatRect(rect)); 238 return localToAbsoluteQuad(FloatRect(rect));
308 } 239 }
309 240
310 void RenderBox::addFocusRingRects(Vector<IntRect>& rects, const LayoutPoint& add itionalOffset, const RenderLayerModelObject*) const 241 void RenderBox::addFocusRingRects(Vector<IntRect>& rects, const LayoutPoint& add itionalOffset, const RenderLayerModelObject*) const
311 { 242 {
312 if (!size().isEmpty()) 243 if (!size().isEmpty())
313 rects.append(pixelSnappedIntRect(additionalOffset, size())); 244 rects.append(pixelSnappedIntRect(additionalOffset, size()));
314 } 245 }
315 246
316 bool RenderBox::scroll(ScrollDirection direction, ScrollGranularity granularity, float delta)
317 {
318 // FIXME(sky): Remove.
319 return false;
320 }
321
322 bool RenderBox::canBeProgramaticallyScrolled() const
323 {
324 Node* node = this->node();
325 if (node && node->isDocumentNode())
326 return true;
327
328 if (!hasOverflowClip())
329 return false;
330
331 bool hasScrollableOverflow = hasScrollableOverflowX() || hasScrollableOverfl owY();
332 if (scrollsOverflow() && hasScrollableOverflow)
333 return true;
334
335 return node && node->hasEditableStyle();
336 }
337
338 void RenderBox::autoscroll(const IntPoint& position)
339 {
340 LocalFrame* frame = this->frame();
341 if (!frame)
342 return;
343
344 FrameView* frameView = frame->view();
345 if (!frameView)
346 return;
347
348 IntPoint currentDocumentPosition = frameView->windowToContents(position);
349 scrollRectToVisible(LayoutRect(currentDocumentPosition, LayoutSize(1, 1)), S crollAlignment::alignToEdgeIfNeeded, ScrollAlignment::alignToEdgeIfNeeded);
350 }
351
352 bool RenderBox::autoscrollInProgress() const
353 {
354 return frame() && frame()->page() && frame()->page()->autoscrollController() .autoscrollInProgress(this);
355 }
356
357 // FIXME(sky): Replace with canBeScrolledAndHasScrollableArea.
358 bool RenderBox::canAutoscroll() const
359 {
360 // FIXME(sky): Remove.
361 return false;
362 }
363
364 // If specified point is in border belt, returned offset denotes direction of
365 // scrolling.
366 IntSize RenderBox::calculateAutoscrollDirection(const IntPoint& windowPoint) con st
367 {
368 if (!frame())
369 return IntSize();
370
371 FrameView* frameView = frame()->view();
372 if (!frameView)
373 return IntSize();
374
375 IntRect box(absoluteBoundingBoxRect());
376 IntRect windowBox = view()->frameView()->contentsToWindow(box);
377
378 IntPoint windowAutoscrollPoint = windowPoint;
379
380 if (windowAutoscrollPoint.x() < windowBox.x() + autoscrollBeltSize)
381 windowAutoscrollPoint.move(-autoscrollBeltSize, 0);
382 else if (windowAutoscrollPoint.x() > windowBox.maxX() - autoscrollBeltSize)
383 windowAutoscrollPoint.move(autoscrollBeltSize, 0);
384
385 if (windowAutoscrollPoint.y() < windowBox.y() + autoscrollBeltSize)
386 windowAutoscrollPoint.move(0, -autoscrollBeltSize);
387 else if (windowAutoscrollPoint.y() > windowBox.maxY() - autoscrollBeltSize)
388 windowAutoscrollPoint.move(0, autoscrollBeltSize);
389
390 return windowAutoscrollPoint - windowPoint;
391 }
392
393 RenderBox* RenderBox::findAutoscrollable(RenderObject* renderer)
394 {
395 while (renderer && !(renderer->isBox() && toRenderBox(renderer)->canAutoscro ll())) {
396 renderer = renderer->parent();
397 }
398
399 return renderer && renderer->isBox() ? toRenderBox(renderer) : 0;
400 }
401
402 void RenderBox::scrollByRecursively(const IntSize& delta, ScrollOffsetClamping c lamp)
403 {
404 // FIXME(sky): Remove.
405 }
406
407 bool RenderBox::needsPreferredWidthsRecalculation() const 247 bool RenderBox::needsPreferredWidthsRecalculation() const
408 { 248 {
409 return style()->paddingStart().isPercent() || style()->paddingEnd().isPercen t(); 249 return style()->paddingStart().isPercent() || style()->paddingEnd().isPercen t();
410 } 250 }
411 251
412 IntSize RenderBox::scrolledContentOffset() const
413 {
414 // FIXME(sky): Remove.
415 return IntSize();
416 }
417
418 void RenderBox::computeIntrinsicLogicalWidths(LayoutUnit& minLogicalWidth, Layou tUnit& maxLogicalWidth) const 252 void RenderBox::computeIntrinsicLogicalWidths(LayoutUnit& minLogicalWidth, Layou tUnit& maxLogicalWidth) const
419 { 253 {
420 minLogicalWidth = minPreferredLogicalWidth() - borderAndPaddingLogicalWidth( ); 254 minLogicalWidth = minPreferredLogicalWidth() - borderAndPaddingLogicalWidth( );
421 maxLogicalWidth = maxPreferredLogicalWidth() - borderAndPaddingLogicalWidth( ); 255 maxLogicalWidth = maxPreferredLogicalWidth() - borderAndPaddingLogicalWidth( );
422 } 256 }
423 257
424 LayoutUnit RenderBox::minPreferredLogicalWidth() const 258 LayoutUnit RenderBox::minPreferredLogicalWidth() const
425 { 259 {
426 if (preferredLogicalWidthsDirty()) { 260 if (preferredLogicalWidthsDirty()) {
427 #if ENABLE(ASSERT) 261 #if ENABLE(ASSERT)
(...skipping 223 matching lines...) Expand 10 before | Expand all | Expand 10 after
651 } 485 }
652 paintFillLayers(paintInfo, backgroundColor, style()->backgroundLayers(), pai ntRect, bleedAvoidance); 486 paintFillLayers(paintInfo, backgroundColor, style()->backgroundLayers(), pai ntRect, bleedAvoidance);
653 } 487 }
654 488
655 bool RenderBox::backgroundHasOpaqueTopLayer() const 489 bool RenderBox::backgroundHasOpaqueTopLayer() const
656 { 490 {
657 const FillLayer& fillLayer = style()->backgroundLayers(); 491 const FillLayer& fillLayer = style()->backgroundLayers();
658 if (fillLayer.clip() != BorderFillBox) 492 if (fillLayer.clip() != BorderFillBox)
659 return false; 493 return false;
660 494
661 // Clipped with local scrolling
662 if (hasOverflowClip() && fillLayer.attachment() == LocalBackgroundAttachment )
663 return false;
664
665 if (fillLayer.hasOpaqueImage(this) && fillLayer.hasRepeatXY() && fillLayer.i mage()->canRender(*this)) 495 if (fillLayer.hasOpaqueImage(this) && fillLayer.hasRepeatXY() && fillLayer.i mage()->canRender(*this))
666 return true; 496 return true;
667 497
668 // If there is only one layer and no image, check whether the background col or is opaque 498 // If there is only one layer and no image, check whether the background col or is opaque
669 if (!fillLayer.next() && !fillLayer.hasImage()) { 499 if (!fillLayer.next() && !fillLayer.hasImage()) {
670 Color bgColor = resolveColor(CSSPropertyBackgroundColor); 500 Color bgColor = resolveColor(CSSPropertyBackgroundColor);
671 if (bgColor.alpha() == 255) 501 if (bgColor.alpha() == 255)
672 return true; 502 return true;
673 } 503 }
674 504
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
767 597
768 if (contentsClipBehavior == SkipContentsClipIfPossible) { 598 if (contentsClipBehavior == SkipContentsClipIfPossible) {
769 LayoutRect contentsVisualOverflow = contentsVisualOverflowRect(); 599 LayoutRect contentsVisualOverflow = contentsVisualOverflowRect();
770 if (contentsVisualOverflow.isEmpty()) 600 if (contentsVisualOverflow.isEmpty())
771 return false; 601 return false;
772 602
773 LayoutRect conservativeClipRect = clipRect; 603 LayoutRect conservativeClipRect = clipRect;
774 if (hasBorderRadius) 604 if (hasBorderRadius)
775 conservativeClipRect.intersect(clipRoundedRect.radiusCenterRect()); 605 conservativeClipRect.intersect(clipRoundedRect.radiusCenterRect());
776 conservativeClipRect.moveBy(-accumulatedOffset); 606 conservativeClipRect.moveBy(-accumulatedOffset);
777 if (hasLayer())
778 conservativeClipRect.move(scrolledContentOffset());
779 if (conservativeClipRect.contains(contentsVisualOverflow)) 607 if (conservativeClipRect.contains(contentsVisualOverflow))
780 return false; 608 return false;
781 } 609 }
782 610
783 if (paintInfo.phase == PaintPhaseOutline) 611 if (paintInfo.phase == PaintPhaseOutline)
784 paintInfo.phase = PaintPhaseChildOutlines; 612 paintInfo.phase = PaintPhaseChildOutlines;
785 paintInfo.context->save(); 613 paintInfo.context->save();
786 if (hasBorderRadius) 614 if (hasBorderRadius)
787 paintInfo.context->clipRoundedRect(clipRoundedRect); 615 paintInfo.context->clipRoundedRect(clipRoundedRect);
788 paintInfo.context->clip(pixelSnappedIntRect(clipRect)); 616 paintInfo.context->clip(pixelSnappedIntRect(clipRect));
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
877 { 705 {
878 ASSERT(o == container()); 706 ASSERT(o == container());
879 707
880 LayoutSize offset; 708 LayoutSize offset;
881 if (isRelPositioned()) 709 if (isRelPositioned())
882 offset += offsetForInFlowPosition(); 710 offset += offsetForInFlowPosition();
883 711
884 if (!isInline() || isReplaced()) 712 if (!isInline() || isReplaced())
885 offset += locationOffset(); 713 offset += locationOffset();
886 714
887 if (o->hasOverflowClip())
888 offset -= toRenderBox(o)->scrolledContentOffset();
889
890 if (style()->position() == AbsolutePosition && o->isRelPositioned() && o->is RenderInline()) 715 if (style()->position() == AbsolutePosition && o->isRelPositioned() && o->is RenderInline())
891 offset += toRenderInline(o)->offsetForInFlowPositionedInline(*this); 716 offset += toRenderInline(o)->offsetForInFlowPositionedInline(*this);
892 717
893 return offset; 718 return offset;
894 } 719 }
895 720
896 InlineBox* RenderBox::createInlineBox() 721 InlineBox* RenderBox::createInlineBox()
897 { 722 {
898 return new InlineBox(*this); 723 return new InlineBox(*this);
899 } 724 }
(...skipping 1995 matching lines...) Expand 10 before | Expand all | Expand 10 after
2895 2720
2896 RenderBox::BoxDecorationData::BoxDecorationData(const RenderStyle& style) 2721 RenderBox::BoxDecorationData::BoxDecorationData(const RenderStyle& style)
2897 { 2722 {
2898 backgroundColor = style.colorIncludingFallback(CSSPropertyBackgroundColor); 2723 backgroundColor = style.colorIncludingFallback(CSSPropertyBackgroundColor);
2899 hasBackground = backgroundColor.alpha() || style.hasBackgroundImage(); 2724 hasBackground = backgroundColor.alpha() || style.hasBackgroundImage();
2900 ASSERT(hasBackground == style.hasBackground()); 2725 ASSERT(hasBackground == style.hasBackground());
2901 hasBorder = style.hasBorder(); 2726 hasBorder = style.hasBorder();
2902 } 2727 }
2903 2728
2904 } // namespace blink 2729 } // namespace blink
OLDNEW
« no previous file with comments | « sky/engine/core/rendering/RenderBox.h ('k') | sky/engine/core/rendering/RenderBoxModelObject.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698