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

Side by Side Diff: sky/engine/core/css/resolver/StyleAdjuster.cpp

Issue 729693003: First step at getting rid of anonymous blocks and continuations. (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Address review comments Created 6 years, 1 month 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
« no previous file with comments | « sky/engine/core/css/resolver/StyleAdjuster.h ('k') | sky/engine/core/rendering/RenderBlock.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org)
3 * (C) 2004-2005 Allan Sandfeld Jensen (kde@carewolf.com) 3 * (C) 2004-2005 Allan Sandfeld Jensen (kde@carewolf.com)
4 * Copyright (C) 2006, 2007 Nicholas Shanks (webkit@nickshanks.com) 4 * Copyright (C) 2006, 2007 Nicholas Shanks (webkit@nickshanks.com)
5 * Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013 Apple Inc. All rights reserved. 5 * Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013 Apple Inc. All rights reserved.
6 * Copyright (C) 2007 Alexey Proskuryakov <ap@webkit.org> 6 * Copyright (C) 2007 Alexey Proskuryakov <ap@webkit.org>
7 * Copyright (C) 2007, 2008 Eric Seidel <eric@webkit.org> 7 * Copyright (C) 2007, 2008 Eric Seidel <eric@webkit.org>
8 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. (http://www.t orchmobile.com/) 8 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. (http://www.t orchmobile.com/)
9 * Copyright (c) 2011, Code Aurora Forum. All rights reserved. 9 * Copyright (c) 2011, Code Aurora Forum. All rights reserved.
10 * Copyright (C) Research In Motion Limited 2011. All rights reserved. 10 * Copyright (C) Research In Motion Limited 2011. All rights reserved.
(...skipping 23 matching lines...) Expand all
34 #include "core/dom/Element.h" 34 #include "core/dom/Element.h"
35 #include "core/dom/NodeRenderStyle.h" 35 #include "core/dom/NodeRenderStyle.h"
36 #include "core/rendering/style/RenderStyle.h" 36 #include "core/rendering/style/RenderStyle.h"
37 #include "core/rendering/style/RenderStyleConstants.h" 37 #include "core/rendering/style/RenderStyleConstants.h"
38 #include "platform/Length.h" 38 #include "platform/Length.h"
39 #include "platform/transforms/TransformOperations.h" 39 #include "platform/transforms/TransformOperations.h"
40 #include "wtf/Assertions.h" 40 #include "wtf/Assertions.h"
41 41
42 namespace blink { 42 namespace blink {
43 43
44 static bool requiresOnlyBlockChildren(RenderStyle* parentStyle)
45 {
46 switch (parentStyle->display()) {
47 case PARAGRAPH:
48 case INLINE:
49 return false;
50
51 case BLOCK:
52 case FLEX:
53 case INLINE_FLEX:
54 case INLINE_BLOCK:
55 return true;
56
57 case NONE:
58 ASSERT_NOT_REACHED();
59 return false;
60 }
61 }
62
63 static EDisplay equivalentInlineDisplay(EDisplay display)
64 {
65 switch (display) {
66 // TODO(ojan): Do we need an INLINE_PARAGRAPH display?
67 case PARAGRAPH:
68 return INLINE;
69
70 case BLOCK:
71 return INLINE_BLOCK;
72
73 case FLEX:
74 return INLINE_FLEX;
75
76 case INLINE:
77 case INLINE_FLEX:
78 case INLINE_BLOCK:
79 return display;
80
81 case NONE:
82 ASSERT_NOT_REACHED();
83 return NONE;
84 }
85 }
86
44 static EDisplay equivalentBlockDisplay(EDisplay display) 87 static EDisplay equivalentBlockDisplay(EDisplay display)
45 { 88 {
46 switch (display) { 89 switch (display) {
90 case PARAGRAPH:
47 case BLOCK: 91 case BLOCK:
48 case FLEX: 92 case FLEX:
49 return display; 93 return display;
94
50 case INLINE_FLEX: 95 case INLINE_FLEX:
51 return FLEX; 96 return FLEX;
52 97
53 case INLINE: 98 case INLINE:
54 case INLINE_BLOCK: 99 case INLINE_BLOCK:
55 return BLOCK; 100 return BLOCK;
101
56 case NONE: 102 case NONE:
57 ASSERT_NOT_REACHED(); 103 ASSERT_NOT_REACHED();
58 return NONE; 104 return NONE;
59 } 105 }
60 ASSERT_NOT_REACHED();
61 return BLOCK;
62 } 106 }
63 107
64 // CSS requires text-decoration to be reset at each DOM element for tables, 108 // CSS requires text-decoration to be reset at each DOM element for tables,
65 // inline blocks, inline tables, shadow DOM crossings, floating elements, 109 // inline blocks, inline tables, shadow DOM crossings, floating elements,
66 // and absolute or relatively positioned elements. 110 // and absolute or relatively positioned elements.
67 static bool doesNotInheritTextDecoration(const RenderStyle* style, const Element & e) 111 static bool doesNotInheritTextDecoration(const RenderStyle* style, const Element & e)
68 { 112 {
69 return style->display() == INLINE_BLOCK || isAtShadowBoundary(&e) || style-> hasOutOfFlowPosition(); 113 return style->display() == INLINE_BLOCK || isAtShadowBoundary(&e) || style-> hasOutOfFlowPosition();
70 } 114 }
71 115
(...skipping 29 matching lines...) Expand all
101 145
102 void StyleAdjuster::adjustRenderStyle(RenderStyle* style, RenderStyle* parentSty le, Element& element) 146 void StyleAdjuster::adjustRenderStyle(RenderStyle* style, RenderStyle* parentSty le, Element& element)
103 { 147 {
104 ASSERT(parentStyle); 148 ASSERT(parentStyle);
105 149
106 if (style->display() != NONE) { 150 if (style->display() != NONE) {
107 // Absolute/fixed positioned elements, floating elements and the documen t element need block-like outside display. 151 // Absolute/fixed positioned elements, floating elements and the documen t element need block-like outside display.
108 if (style->hasOutOfFlowPosition() || element.document().documentElement( ) == element) 152 if (style->hasOutOfFlowPosition() || element.document().documentElement( ) == element)
109 style->setDisplay(equivalentBlockDisplay(style->display())); 153 style->setDisplay(equivalentBlockDisplay(style->display()));
110 154
111 adjustStyleForDisplay(style, parentStyle); 155 if (requiresOnlyBlockChildren(parentStyle))
156 style->setDisplay(equivalentBlockDisplay(style->display()));
157 else
158 style->setDisplay(equivalentInlineDisplay(style->display()));
112 } 159 }
113 160
114 // Make sure our z-index value is only applied if the object is positioned. 161 // Make sure our z-index value is only applied if the object is positioned.
115 if (style->position() == StaticPosition && !parentStyleForcesZIndexToCreateS tackingContext(parentStyle)) 162 if (style->position() == StaticPosition && !parentStyleForcesZIndexToCreateS tackingContext(parentStyle))
116 style->setHasAutoZIndex(); 163 style->setHasAutoZIndex();
117 164
118 // Auto z-index becomes 0 for the root element and transparent objects. This prevents 165 // Auto z-index becomes 0 for the root element and transparent objects. This prevents
119 // cases where objects that should be blended as a single unit end up with a non-transparent 166 // cases where objects that should be blended as a single unit end up with a non-transparent
120 // object wedged in between them. Auto z-index also becomes 0 for objects th at specify transforms/masks/reflections. 167 // object wedged in between them. Auto z-index also becomes 0 for objects th at specify transforms/masks/reflections.
121 if (style->hasAutoZIndex() && ((element.document().documentElement() == elem ent) 168 if (style->hasAutoZIndex() && ((element.document().documentElement() == elem ent)
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
219 if (style->overflowX() == OVISIBLE && style->overflowY() != OVISIBLE) { 266 if (style->overflowX() == OVISIBLE && style->overflowY() != OVISIBLE) {
220 // FIXME: Once we implement pagination controls, overflow-x should defau lt to hidden 267 // FIXME: Once we implement pagination controls, overflow-x should defau lt to hidden
221 // if overflow-y is set to -webkit-paged-x or -webkit-page-y. For now, w e'll let it 268 // if overflow-y is set to -webkit-paged-x or -webkit-page-y. For now, w e'll let it
222 // default to auto so we can at least scroll through the pages. 269 // default to auto so we can at least scroll through the pages.
223 style->setOverflowX(OAUTO); 270 style->setOverflowX(OAUTO);
224 } else if (style->overflowY() == OVISIBLE && style->overflowX() != OVISIBLE) { 271 } else if (style->overflowY() == OVISIBLE && style->overflowX() != OVISIBLE) {
225 style->setOverflowY(OAUTO); 272 style->setOverflowY(OAUTO);
226 } 273 }
227 } 274 }
228 275
229 void StyleAdjuster::adjustStyleForDisplay(RenderStyle* style, RenderStyle* paren tStyle)
230 {
231 if (parentStyle->isDisplayFlexibleBox()) {
232 style->setDisplay(equivalentBlockDisplay(style->display()));
233 }
234 }
235
236 } 276 }
OLDNEW
« no previous file with comments | « sky/engine/core/css/resolver/StyleAdjuster.h ('k') | sky/engine/core/rendering/RenderBlock.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698