OLD | NEW |
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 * Copyright (C) 2003, 2006, 2007 Apple Inc. All rights reserved. | 4 * Copyright (C) 2003, 2006, 2007 Apple Inc. All rights reserved. |
5 * | 5 * |
6 * This library is free software; you can redistribute it and/or | 6 * This library is free software; you can redistribute it and/or |
7 * modify it under the terms of the GNU Library General Public | 7 * modify it under the terms of the GNU Library General Public |
8 * License as published by the Free Software Foundation; either | 8 * License as published by the Free Software Foundation; either |
9 * version 2 of the License, or (at your option) any later version. | 9 * version 2 of the License, or (at your option) any later version. |
10 * | 10 * |
11 * This library is distributed in the hope that it will be useful, | 11 * This library is distributed in the hope that it will be useful, |
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of | 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
14 * Library General Public License for more details. | 14 * Library General Public License for more details. |
15 * | 15 * |
16 * You should have received a copy of the GNU Library General Public License | 16 * You should have received a copy of the GNU Library General Public License |
17 * along with this library; see the file COPYING.LIB. If not, write to | 17 * along with this library; see the file COPYING.LIB. If not, write to |
18 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, | 18 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, |
19 * Boston, MA 02110-1301, USA. | 19 * Boston, MA 02110-1301, USA. |
20 * | 20 * |
21 */ | 21 */ |
22 | 22 |
23 #ifndef SKY_ENGINE_CORE_RENDERING_RENDERBOX_H_ | 23 #ifndef SKY_ENGINE_CORE_RENDERING_RENDERBOX_H_ |
24 #define SKY_ENGINE_CORE_RENDERING_RENDERBOX_H_ | 24 #define SKY_ENGINE_CORE_RENDERING_RENDERBOX_H_ |
25 | 25 |
26 #include "sky/engine/core/rendering/RenderBoxModelObject.h" | 26 #include "sky/engine/core/rendering/RenderBoxModelObject.h" |
27 #include "sky/engine/core/rendering/RenderOverflow.h" | 27 #include "sky/engine/core/rendering/RenderOverflow.h" |
28 #include "sky/engine/platform/scroll/ScrollTypes.h" | |
29 | 28 |
30 namespace blink { | 29 namespace blink { |
31 | 30 |
32 struct PaintInfo; | 31 struct PaintInfo; |
33 class RenderBlockFlow; | 32 class RenderBlockFlow; |
34 | 33 |
35 enum SizeType { MainOrPreferredSize, MinSize, MaxSize }; | 34 enum SizeType { MainOrPreferredSize, MinSize, MaxSize }; |
36 enum AvailableLogicalHeightType { ExcludeMarginBorderPadding, IncludeMarginBorde
rPadding }; | 35 enum AvailableLogicalHeightType { ExcludeMarginBorderPadding, IncludeMarginBorde
rPadding }; |
37 enum MarginDirection { BlockDirection, InlineDirection }; | 36 enum MarginDirection { BlockDirection, InlineDirection }; |
38 | 37 |
39 enum ShouldComputePreferred { ComputeActual, ComputePreferred }; | 38 enum ShouldComputePreferred { ComputeActual, ComputePreferred }; |
40 | 39 |
41 enum ContentsClipBehavior { ForceContentsClip, SkipContentsClipIfPossible }; | 40 enum ContentsClipBehavior { ForceContentsClip, SkipContentsClipIfPossible }; |
42 | 41 |
43 enum ScrollOffsetClamping { | |
44 ScrollOffsetUnclamped, | |
45 ScrollOffsetClamped | |
46 }; | |
47 | |
48 struct RenderBoxRareData { | 42 struct RenderBoxRareData { |
49 WTF_MAKE_NONCOPYABLE(RenderBoxRareData); WTF_MAKE_FAST_ALLOCATED; | 43 WTF_MAKE_NONCOPYABLE(RenderBoxRareData); WTF_MAKE_FAST_ALLOCATED; |
50 public: | 44 public: |
51 RenderBoxRareData() | 45 RenderBoxRareData() |
52 : m_inlineBoxWrapper(0) | 46 : m_inlineBoxWrapper(0) |
53 , m_overrideLogicalContentHeight(-1) | 47 , m_overrideLogicalContentHeight(-1) |
54 , m_overrideLogicalContentWidth(-1) | 48 , m_overrideLogicalContentWidth(-1) |
55 { | 49 { |
56 } | 50 } |
57 | 51 |
(...skipping 169 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
227 LayoutUnit clientWidth() const; | 221 LayoutUnit clientWidth() const; |
228 LayoutUnit clientHeight() const; | 222 LayoutUnit clientHeight() const; |
229 LayoutUnit clientLogicalWidth() const { return clientWidth(); } | 223 LayoutUnit clientLogicalWidth() const { return clientWidth(); } |
230 LayoutUnit clientLogicalHeight() const { return clientHeight(); } | 224 LayoutUnit clientLogicalHeight() const { return clientHeight(); } |
231 LayoutUnit clientLogicalBottom() const { return borderBefore() + clientLogic
alHeight(); } | 225 LayoutUnit clientLogicalBottom() const { return borderBefore() + clientLogic
alHeight(); } |
232 LayoutRect clientBoxRect() const { return LayoutRect(clientLeft(), clientTop
(), clientWidth(), clientHeight()); } | 226 LayoutRect clientBoxRect() const { return LayoutRect(clientLeft(), clientTop
(), clientWidth(), clientHeight()); } |
233 | 227 |
234 int pixelSnappedClientWidth() const; | 228 int pixelSnappedClientWidth() const; |
235 int pixelSnappedClientHeight() const; | 229 int pixelSnappedClientHeight() const; |
236 | 230 |
237 // scrollWidth/scrollHeight will be the same as clientWidth/clientHeight unl
ess the | |
238 // object has overflow:hidden/scroll/auto specified and also has overflow. | |
239 // scrollLeft/Top return the current scroll position. These methods are vir
tual so that objects like | |
240 // textareas can scroll shadow content (but pretend that they are the object
s that are | |
241 // scrolling). | |
242 virtual LayoutUnit scrollLeft() const; | |
243 virtual LayoutUnit scrollTop() const; | |
244 virtual LayoutUnit scrollWidth() const; | |
245 virtual LayoutUnit scrollHeight() const; | |
246 int pixelSnappedScrollWidth() const; | |
247 int pixelSnappedScrollHeight() const; | |
248 virtual void setScrollLeft(LayoutUnit); | |
249 virtual void setScrollTop(LayoutUnit); | |
250 | |
251 void scrollToOffset(const IntSize&); | |
252 void scrollByRecursively(const IntSize& delta, ScrollOffsetClamping = Scroll
OffsetUnclamped); | |
253 void scrollRectToVisible(const LayoutRect&, const ScrollAlignment& alignX, c
onst ScrollAlignment& alignY); | |
254 | |
255 virtual LayoutUnit marginTop() const override { return m_marginBox.top(); } | 231 virtual LayoutUnit marginTop() const override { return m_marginBox.top(); } |
256 virtual LayoutUnit marginBottom() const override { return m_marginBox.bottom
(); } | 232 virtual LayoutUnit marginBottom() const override { return m_marginBox.bottom
(); } |
257 virtual LayoutUnit marginLeft() const override { return m_marginBox.left();
} | 233 virtual LayoutUnit marginLeft() const override { return m_marginBox.left();
} |
258 virtual LayoutUnit marginRight() const override { return m_marginBox.right()
; } | 234 virtual LayoutUnit marginRight() const override { return m_marginBox.right()
; } |
259 void setMarginTop(LayoutUnit margin) { m_marginBox.setTop(margin); } | 235 void setMarginTop(LayoutUnit margin) { m_marginBox.setTop(margin); } |
260 void setMarginBottom(LayoutUnit margin) { m_marginBox.setBottom(margin); } | 236 void setMarginBottom(LayoutUnit margin) { m_marginBox.setBottom(margin); } |
261 void setMarginLeft(LayoutUnit margin) { m_marginBox.setLeft(margin); } | 237 void setMarginLeft(LayoutUnit margin) { m_marginBox.setLeft(margin); } |
262 void setMarginRight(LayoutUnit margin) { m_marginBox.setRight(margin); } | 238 void setMarginRight(LayoutUnit margin) { m_marginBox.setRight(margin); } |
263 | 239 |
264 LayoutUnit marginLogicalLeft() const { return m_marginBox.logicalLeft(); } | 240 LayoutUnit marginLogicalLeft() const { return m_marginBox.logicalLeft(); } |
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
389 // Block flows subclass availableWidth/Height to handle multi column layout
(shrinking the width/height available to children when laying out.) | 365 // Block flows subclass availableWidth/Height to handle multi column layout
(shrinking the width/height available to children when laying out.) |
390 virtual LayoutUnit availableLogicalWidth() const { return contentLogicalWidt
h(); } | 366 virtual LayoutUnit availableLogicalWidth() const { return contentLogicalWidt
h(); } |
391 virtual LayoutUnit availableLogicalHeight(AvailableLogicalHeightType) const; | 367 virtual LayoutUnit availableLogicalHeight(AvailableLogicalHeightType) const; |
392 LayoutUnit availableLogicalHeightUsing(const Length&, AvailableLogicalHeight
Type) const; | 368 LayoutUnit availableLogicalHeightUsing(const Length&, AvailableLogicalHeight
Type) const; |
393 | 369 |
394 // There are a few cases where we need to refer specifically to the availabl
e physical width and available physical height. | 370 // There are a few cases where we need to refer specifically to the availabl
e physical width and available physical height. |
395 // Relative positioning is one of those cases, since left/top offsets are ph
ysical. | 371 // Relative positioning is one of those cases, since left/top offsets are ph
ysical. |
396 LayoutUnit availableWidth() const { return availableLogicalWidth(); } | 372 LayoutUnit availableWidth() const { return availableLogicalWidth(); } |
397 LayoutUnit availableHeight() const { return availableLogicalHeight(IncludeMa
rginBorderPadding); } | 373 LayoutUnit availableHeight() const { return availableLogicalHeight(IncludeMa
rginBorderPadding); } |
398 | 374 |
399 virtual bool scroll(ScrollDirection, ScrollGranularity, float delta = 1); | |
400 virtual bool canBeProgramaticallyScrolled() const; | |
401 virtual void autoscroll(const IntPoint&); | |
402 bool autoscrollInProgress() const; | |
403 bool canAutoscroll() const; | |
404 IntSize calculateAutoscrollDirection(const IntPoint& windowPoint) const; | |
405 static RenderBox* findAutoscrollable(RenderObject*); | |
406 virtual void stopAutoscroll() { } | |
407 | |
408 bool hasAutoVerticalScrollbar() const { return hasOverflowClip() && (style()
->overflowY() == OAUTO || style()->overflowY() == OOVERLAY); } | |
409 bool hasAutoHorizontalScrollbar() const { return hasOverflowClip() && (style
()->overflowX() == OAUTO || style()->overflowX() == OOVERLAY); } | |
410 bool scrollsOverflow() const { return scrollsOverflowX() || scrollsOverflowY
(); } | |
411 | |
412 bool hasScrollableOverflowX() const { return scrollsOverflowX() && pixelSnap
pedScrollWidth() != pixelSnappedClientWidth(); } | |
413 bool hasScrollableOverflowY() const { return scrollsOverflowY() && pixelSnap
pedScrollHeight() != pixelSnappedClientHeight(); } | |
414 virtual bool scrollsOverflowX() const { return hasOverflowClip() && (style()
->overflowX() == OSCROLL || hasAutoHorizontalScrollbar()); } | |
415 virtual bool scrollsOverflowY() const { return hasOverflowClip() && (style()
->overflowY() == OSCROLL || hasAutoVerticalScrollbar()); } | |
416 | |
417 virtual LayoutRect localCaretRect(InlineBox*, int caretOffset, LayoutUnit* e
xtraWidthToEndOfLine = 0) override; | 375 virtual LayoutRect localCaretRect(InlineBox*, int caretOffset, LayoutUnit* e
xtraWidthToEndOfLine = 0) override; |
418 | 376 |
419 virtual LayoutRect overflowClipRect(const LayoutPoint& location); | 377 virtual LayoutRect overflowClipRect(const LayoutPoint& location); |
420 LayoutRect clipRect(const LayoutPoint& location); | 378 LayoutRect clipRect(const LayoutPoint& location); |
421 bool pushContentsClip(PaintInfo&, const LayoutPoint& accumulatedOffset, Cont
entsClipBehavior); | 379 bool pushContentsClip(PaintInfo&, const LayoutPoint& accumulatedOffset, Cont
entsClipBehavior); |
422 void popContentsClip(PaintInfo&, PaintPhase originalPhase, const LayoutPoint
& accumulatedOffset); | 380 void popContentsClip(PaintInfo&, PaintPhase originalPhase, const LayoutPoint
& accumulatedOffset); |
423 | 381 |
424 virtual void paintObject(PaintInfo&, const LayoutPoint&) { ASSERT_NOT_REACHE
D(); } | 382 virtual void paintObject(PaintInfo&, const LayoutPoint&) { ASSERT_NOT_REACHE
D(); } |
425 virtual void paintBoxDecorationBackground(PaintInfo&, const LayoutPoint&); | 383 virtual void paintBoxDecorationBackground(PaintInfo&, const LayoutPoint&); |
426 virtual void paintMask(PaintInfo&, const LayoutPoint&); | 384 virtual void paintMask(PaintInfo&, const LayoutPoint&); |
(...skipping 29 matching lines...) Expand all Loading... |
456 virtual LayoutUnit offsetTop() const override; | 414 virtual LayoutUnit offsetTop() const override; |
457 | 415 |
458 LayoutRect layoutOverflowRectForPropagation() const; | 416 LayoutRect layoutOverflowRectForPropagation() const; |
459 | 417 |
460 bool hasRenderOverflow() const { return m_overflow; } | 418 bool hasRenderOverflow() const { return m_overflow; } |
461 bool hasVisualOverflow() const { return m_overflow && !borderBoxRect().conta
ins(m_overflow->visualOverflowRect()); } | 419 bool hasVisualOverflow() const { return m_overflow && !borderBoxRect().conta
ins(m_overflow->visualOverflowRect()); } |
462 | 420 |
463 virtual bool needsPreferredWidthsRecalculation() const; | 421 virtual bool needsPreferredWidthsRecalculation() const; |
464 virtual void computeIntrinsicRatioInformation(FloatSize& /* intrinsicSize */
, double& /* intrinsicRatio */) const { } | 422 virtual void computeIntrinsicRatioInformation(FloatSize& /* intrinsicSize */
, double& /* intrinsicRatio */) const { } |
465 | 423 |
466 IntSize scrolledContentOffset() const; | |
467 | |
468 virtual bool hasRelativeLogicalHeight() const; | 424 virtual bool hasRelativeLogicalHeight() const; |
469 | 425 |
470 bool hasSameDirectionAs(const RenderBox* object) const { return style()->dir
ection() == object->style()->direction(); } | 426 bool hasSameDirectionAs(const RenderBox* object) const { return style()->dir
ection() == object->style()->direction(); } |
471 | 427 |
472 protected: | 428 protected: |
473 virtual void willBeDestroyed() override; | 429 virtual void willBeDestroyed() override; |
474 | 430 |
475 virtual void styleWillChange(StyleDifference, const RenderStyle& newStyle) o
verride; | 431 virtual void styleWillChange(StyleDifference, const RenderStyle& newStyle) o
verride; |
476 virtual void styleDidChange(StyleDifference, const RenderStyle* oldStyle) ov
erride; | 432 virtual void styleDidChange(StyleDifference, const RenderStyle* oldStyle) ov
erride; |
477 virtual void updateFromStyle() override; | 433 virtual void updateFromStyle() override; |
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
615 if (UNLIKELY(inlineBoxWrapper() != 0)) | 571 if (UNLIKELY(inlineBoxWrapper() != 0)) |
616 deleteLineBoxWrapper(); | 572 deleteLineBoxWrapper(); |
617 } | 573 } |
618 | 574 |
619 ensureRareData().m_inlineBoxWrapper = boxWrapper; | 575 ensureRareData().m_inlineBoxWrapper = boxWrapper; |
620 } | 576 } |
621 | 577 |
622 } // namespace blink | 578 } // namespace blink |
623 | 579 |
624 #endif // SKY_ENGINE_CORE_RENDERING_RENDERBOX_H_ | 580 #endif // SKY_ENGINE_CORE_RENDERING_RENDERBOX_H_ |
OLD | NEW |