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

Side by Side Diff: Source/core/rendering/RenderNamedFlowThread.cpp

Issue 18374008: Propagate writing-mode from the first region to the flow thread. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 7 years, 5 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
« no previous file with comments | « Source/core/rendering/RenderNamedFlowThread.h ('k') | no next file » | 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) 2012 Apple Inc. All rights reserved. 2 * Copyright (C) 2012 Apple Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions 5 * modification, are permitted provided that the following conditions
6 * are met: 6 * are met:
7 * 1. Redistributions of source code must retain the above copyright 7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer. 8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright 9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the 10 * notice, this list of conditions and the following disclaimer in the
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
83 ASSERT(contentNode && contentNode->isElementNode()); 83 ASSERT(contentNode && contentNode->isElementNode());
84 ASSERT(contentNode->inNamedFlow()); 84 ASSERT(contentNode->inNamedFlow());
85 ASSERT(contentNode->document() == document()); 85 ASSERT(contentNode->document() == document());
86 86
87 contentNode->clearInNamedFlow(); 87 contentNode->clearInNamedFlow();
88 } 88 }
89 89
90 m_contentNodes.clear(); 90 m_contentNodes.clear();
91 } 91 }
92 92
93 void RenderNamedFlowThread::updateWritingMode()
94 {
95 if (m_regionList.isEmpty())
mihnea 2013/07/30 15:50:44 I believe you want to add an assert here instead.
mstensho (USE GERRIT) 2013/07/31 13:09:37 If you remove the last region, this list may be em
96 return;
97
98 RenderRegion* firstRegion = m_regionList.first();
99 if (style()->writingMode() != firstRegion->style()->writingMode()) {
100 // The first region defines the principal writing mode for the entire fl ow.
101 RefPtr<RenderStyle> newStyle = RenderStyle::clone(style());
102 newStyle->setWritingMode(firstRegion->style()->writingMode());
103 setStyle(newStyle);
104 }
105 }
106
93 RenderObject* RenderNamedFlowThread::nextRendererForNode(Node* node) const 107 RenderObject* RenderNamedFlowThread::nextRendererForNode(Node* node) const
94 { 108 {
95 FlowThreadChildList::const_iterator it = m_flowThreadChildList.begin(); 109 FlowThreadChildList::const_iterator it = m_flowThreadChildList.begin();
96 FlowThreadChildList::const_iterator end = m_flowThreadChildList.end(); 110 FlowThreadChildList::const_iterator end = m_flowThreadChildList.end();
97 111
98 for (; it != end; ++it) { 112 for (; it != end; ++it) {
99 RenderObject* child = *it; 113 RenderObject* child = *it;
100 ASSERT(child->node()); 114 ASSERT(child->node());
101 unsigned short position = node->compareDocumentPosition(child->node()); 115 unsigned short position = node->compareDocumentPosition(child->node());
102 if (position & Node::DOCUMENT_POSITION_FOLLOWING) 116 if (position & Node::DOCUMENT_POSITION_FOLLOWING)
(...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after
237 void RenderNamedFlowThread::addRegionToNamedFlowThread(RenderRegion* renderRegio n) 251 void RenderNamedFlowThread::addRegionToNamedFlowThread(RenderRegion* renderRegio n)
238 { 252 {
239 ASSERT(renderRegion); 253 ASSERT(renderRegion);
240 ASSERT(!renderRegion->isValid()); 254 ASSERT(!renderRegion->isValid());
241 255
242 if (renderRegion->parentNamedFlowThread()) 256 if (renderRegion->parentNamedFlowThread())
243 addDependencyOnFlowThread(renderRegion->parentNamedFlowThread()); 257 addDependencyOnFlowThread(renderRegion->parentNamedFlowThread());
244 258
245 renderRegion->setIsValid(true); 259 renderRegion->setIsValid(true);
246 addRegionToList(m_regionList, renderRegion); 260 addRegionToList(m_regionList, renderRegion);
261
262 if (m_regionList.first() == renderRegion)
263 updateWritingMode();
247 } 264 }
248 265
249 void RenderNamedFlowThread::addRegionToThread(RenderRegion* renderRegion) 266 void RenderNamedFlowThread::addRegionToThread(RenderRegion* renderRegion)
250 { 267 {
251 ASSERT(renderRegion); 268 ASSERT(renderRegion);
252 ASSERT(!renderRegion->isValid()); 269 ASSERT(!renderRegion->isValid());
253 270
254 resetMarkForDestruction(); 271 resetMarkForDestruction();
255 272
256 if (renderRegion->parentNamedFlowThread() && renderRegion->parentNamedFlowTh read()->dependsOn(this)) { 273 if (renderRegion->parentNamedFlowThread() && renderRegion->parentNamedFlowTh read()->dependsOn(this)) {
(...skipping 19 matching lines...) Expand all
276 m_invalidRegionList.remove(renderRegion); 293 m_invalidRegionList.remove(renderRegion);
277 renderRegion->parentNamedFlowThread()->m_observerThreadsSet.remove(t his); 294 renderRegion->parentNamedFlowThread()->m_observerThreadsSet.remove(t his);
278 // No need to invalidate the regions rectangles. The removed region 295 // No need to invalidate the regions rectangles. The removed region
279 // was not taken into account. Just return here. 296 // was not taken into account. Just return here.
280 return; 297 return;
281 } 298 }
282 removeDependencyOnFlowThread(renderRegion->parentNamedFlowThread()); 299 removeDependencyOnFlowThread(renderRegion->parentNamedFlowThread());
283 } 300 }
284 301
285 ASSERT(m_regionList.contains(renderRegion)); 302 ASSERT(m_regionList.contains(renderRegion));
303 bool wasFirst = m_regionList.first() == renderRegion;
286 m_regionList.remove(renderRegion); 304 m_regionList.remove(renderRegion);
287 305
288 if (canBeDestroyed()) 306 if (canBeDestroyed())
289 setMarkForDestruction(); 307 setMarkForDestruction();
290 308
291 // After removing all the regions in the flow the following layout needs to dispatch the regionLayoutUpdate event 309 // After removing all the regions in the flow the following layout needs to dispatch the regionLayoutUpdate event
292 if (m_regionList.isEmpty()) 310 if (m_regionList.isEmpty())
293 setDispatchRegionLayoutUpdateEvent(true); 311 setDispatchRegionLayoutUpdateEvent(true);
312 else if (wasFirst)
313 updateWritingMode();
294 314
295 invalidateRegions(); 315 invalidateRegions();
296 } 316 }
297 317
298 void RenderNamedFlowThread::computeOversetStateForRegions(LayoutUnit oldClientAf terEdge) 318 void RenderNamedFlowThread::computeOversetStateForRegions(LayoutUnit oldClientAf terEdge)
299 { 319 {
300 LayoutUnit height = oldClientAfterEdge; 320 LayoutUnit height = oldClientAfterEdge;
301 321
302 // FIXME: the visual overflow of middle region (if it is the last one to con tain any content in a render flow thread) 322 // FIXME: the visual overflow of middle region (if it is the last one to con tain any content in a render flow thread)
303 // might not be taken into account because the render flow thread height is greater that that regions height + its visual overflow 323 // might not be taken into account because the render flow thread height is greater that that regions height + its visual overflow
(...skipping 383 matching lines...) Expand 10 before | Expand all | Expand 10 after
687 lastEndNode = node; 707 lastEndNode = node;
688 } 708 }
689 } 709 }
690 } 710 }
691 if (foundStartPosition || skipOverOutsideNodes) 711 if (foundStartPosition || skipOverOutsideNodes)
692 rangeObjects.append(range); 712 rangeObjects.append(range);
693 } 713 }
694 } 714 }
695 715
696 } 716 }
OLDNEW
« no previous file with comments | « Source/core/rendering/RenderNamedFlowThread.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698