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

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: Rebaseline flights-app.sky 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
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 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
106 150
107 void StyleAdjuster::adjustRenderStyle(RenderStyle* style, RenderStyle* parentSty le, Element& element) 151 void StyleAdjuster::adjustRenderStyle(RenderStyle* style, RenderStyle* parentSty le, Element& element)
108 { 152 {
109 ASSERT(parentStyle); 153 ASSERT(parentStyle);
110 154
111 if (style->display() != NONE) { 155 if (style->display() != NONE) {
112 // Absolute/fixed positioned elements, floating elements and the documen t element need block-like outside display. 156 // Absolute/fixed positioned elements, floating elements and the documen t element need block-like outside display.
113 if (style->hasOutOfFlowPosition() || element.document().documentElement( ) == element) 157 if (style->hasOutOfFlowPosition() || element.document().documentElement( ) == element)
114 style->setDisplay(equivalentBlockDisplay(style->display())); 158 style->setDisplay(equivalentBlockDisplay(style->display()));
115 159
116 adjustStyleForDisplay(style, parentStyle); 160 if (requiresOnlyBlockChildren(parentStyle))
161 style->setDisplay(equivalentBlockDisplay(style->display()));
162 else
163 style->setDisplay(equivalentInlineDisplay(style->display()));
117 } 164 }
118 165
119 // Make sure our z-index value is only applied if the object is positioned. 166 // Make sure our z-index value is only applied if the object is positioned.
120 if (style->position() == StaticPosition && !parentStyleForcesZIndexToCreateS tackingContext(parentStyle)) 167 if (style->position() == StaticPosition && !parentStyleForcesZIndexToCreateS tackingContext(parentStyle))
121 style->setHasAutoZIndex(); 168 style->setHasAutoZIndex();
122 169
123 // Auto z-index becomes 0 for the root element and transparent objects. This prevents 170 // Auto z-index becomes 0 for the root element and transparent objects. This prevents
124 // cases where objects that should be blended as a single unit end up with a non-transparent 171 // cases where objects that should be blended as a single unit end up with a non-transparent
125 // object wedged in between them. Auto z-index also becomes 0 for objects th at specify transforms/masks/reflections. 172 // object wedged in between them. Auto z-index also becomes 0 for objects th at specify transforms/masks/reflections.
126 if (style->hasAutoZIndex() && ((element.document().documentElement() == elem ent) 173 if (style->hasAutoZIndex() && ((element.document().documentElement() == elem ent)
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after
226 if (style->overflowX() == OVISIBLE && style->overflowY() != OVISIBLE) { 273 if (style->overflowX() == OVISIBLE && style->overflowY() != OVISIBLE) {
227 // FIXME: Once we implement pagination controls, overflow-x should defau lt to hidden 274 // FIXME: Once we implement pagination controls, overflow-x should defau lt to hidden
228 // if overflow-y is set to -webkit-paged-x or -webkit-page-y. For now, w e'll let it 275 // if overflow-y is set to -webkit-paged-x or -webkit-page-y. For now, w e'll let it
229 // default to auto so we can at least scroll through the pages. 276 // default to auto so we can at least scroll through the pages.
230 style->setOverflowX(OAUTO); 277 style->setOverflowX(OAUTO);
231 } else if (style->overflowY() == OVISIBLE && style->overflowX() != OVISIBLE) { 278 } else if (style->overflowY() == OVISIBLE && style->overflowX() != OVISIBLE) {
232 style->setOverflowY(OAUTO); 279 style->setOverflowY(OAUTO);
233 } 280 }
234 } 281 }
235 282
236 void StyleAdjuster::adjustStyleForDisplay(RenderStyle* style, RenderStyle* paren tStyle)
237 {
238 if (parentStyle->isDisplayFlexibleBox()) {
239 style->setDisplay(equivalentBlockDisplay(style->display()));
240 }
241 }
242
243 } 283 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698