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

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

Issue 163513002: Have RenderBlockFlow sub-classes' methods call their super-class method properly. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 6 years, 10 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/RenderRuby.cpp ('k') | Source/core/rendering/RenderRubyText.cpp » ('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) 2009 Google Inc. All rights reserved. 2 * Copyright (C) 2009 Google 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 are 5 * modification, are permitted provided that the following conditions are
6 * met: 6 * met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright 8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above 10 * * Redistributions in binary form must reproduce the above
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
84 { 84 {
85 RenderObject* child = lastChild(); 85 RenderObject* child = lastChild();
86 return child && child->isRubyBase() ? static_cast<RenderRubyBase*>(child) : 0; 86 return child && child->isRubyBase() ? static_cast<RenderRubyBase*>(child) : 0;
87 } 87 }
88 88
89 RenderRubyBase* RenderRubyRun::rubyBaseSafe() 89 RenderRubyBase* RenderRubyRun::rubyBaseSafe()
90 { 90 {
91 RenderRubyBase* base = rubyBase(); 91 RenderRubyBase* base = rubyBase();
92 if (!base) { 92 if (!base) {
93 base = createRubyBase(); 93 base = createRubyBase();
94 RenderBlock::addChild(base); 94 RenderBlockFlow::addChild(base);
95 } 95 }
96 return base; 96 return base;
97 } 97 }
98 98
99 RenderBlock* RenderRubyRun::firstLineBlock() const 99 RenderBlock* RenderRubyRun::firstLineBlock() const
100 { 100 {
101 return 0; 101 return 0;
102 } 102 }
103 103
104 void RenderRubyRun::updateFirstLetter() 104 void RenderRubyRun::updateFirstLetter()
105 { 105 {
106 } 106 }
107 107
108 bool RenderRubyRun::isChildAllowed(RenderObject* child, RenderStyle*) const 108 bool RenderRubyRun::isChildAllowed(RenderObject* child, RenderStyle*) const
109 { 109 {
110 return child->isRubyText() || child->isInline(); 110 return child->isRubyText() || child->isInline();
111 } 111 }
112 112
113 void RenderRubyRun::addChild(RenderObject* child, RenderObject* beforeChild) 113 void RenderRubyRun::addChild(RenderObject* child, RenderObject* beforeChild)
114 { 114 {
115 ASSERT(child); 115 ASSERT(child);
116 116
117 if (child->isRubyText()) { 117 if (child->isRubyText()) {
118 if (!beforeChild) { 118 if (!beforeChild) {
119 // RenderRuby has already ascertained that we can add the child here . 119 // RenderRuby has already ascertained that we can add the child here .
120 ASSERT(!hasRubyText()); 120 ASSERT(!hasRubyText());
121 // prepend ruby texts as first child 121 // prepend ruby texts as first child
122 RenderBlock::addChild(child, firstChild()); 122 RenderBlockFlow::addChild(child, firstChild());
123 } else if (beforeChild->isRubyText()) { 123 } else if (beforeChild->isRubyText()) {
124 // New text is inserted just before another. 124 // New text is inserted just before another.
125 // In this case the new text takes the place of the old one, and 125 // In this case the new text takes the place of the old one, and
126 // the old text goes into a new run that is inserted as next sibling . 126 // the old text goes into a new run that is inserted as next sibling .
127 ASSERT(beforeChild->parent() == this); 127 ASSERT(beforeChild->parent() == this);
128 RenderObject* ruby = parent(); 128 RenderObject* ruby = parent();
129 ASSERT(ruby->isRuby()); 129 ASSERT(ruby->isRuby());
130 RenderBlock* newRun = staticCreateRubyRun(ruby); 130 RenderBlock* newRun = staticCreateRubyRun(ruby);
131 ruby->addChild(newRun, nextSibling()); 131 ruby->addChild(newRun, nextSibling());
132 // Add the new ruby text and move the old one to the new run 132 // Add the new ruby text and move the old one to the new run
133 // Note: Doing it in this order and not using RenderRubyRun's method s, 133 // Note: Doing it in this order and not using RenderRubyRun's method s,
134 // in order to avoid automatic removal of the ruby run in case there is no 134 // in order to avoid automatic removal of the ruby run in case there is no
135 // other child besides the old ruby text. 135 // other child besides the old ruby text.
136 RenderBlock::addChild(child, beforeChild); 136 RenderBlockFlow::addChild(child, beforeChild);
137 RenderBlock::removeChild(beforeChild); 137 RenderBlockFlow::removeChild(beforeChild);
138 newRun->addChild(beforeChild); 138 newRun->addChild(beforeChild);
139 } else if (hasRubyBase()) { 139 } else if (hasRubyBase()) {
140 // Insertion before a ruby base object. 140 // Insertion before a ruby base object.
141 // In this case we need insert a new run before the current one and split the base. 141 // In this case we need insert a new run before the current one and split the base.
142 RenderObject* ruby = parent(); 142 RenderObject* ruby = parent();
143 RenderRubyRun* newRun = staticCreateRubyRun(ruby); 143 RenderRubyRun* newRun = staticCreateRubyRun(ruby);
144 ruby->addChild(newRun, this); 144 ruby->addChild(newRun, this);
145 newRun->addChild(child); 145 newRun->addChild(child);
146 rubyBaseSafe()->moveChildren(newRun->rubyBaseSafe(), beforeChild); 146 rubyBaseSafe()->moveChildren(newRun->rubyBaseSafe(), beforeChild);
147 } 147 }
(...skipping 21 matching lines...) Expand all
169 // Collect all children in a single base, then swap the bases. 169 // Collect all children in a single base, then swap the bases.
170 rightBase->moveChildren(base); 170 rightBase->moveChildren(base);
171 moveChildTo(rightRun, base); 171 moveChildTo(rightRun, base);
172 rightRun->moveChildTo(this, rightBase); 172 rightRun->moveChildTo(this, rightBase);
173 // The now empty ruby base will be removed below. 173 // The now empty ruby base will be removed below.
174 ASSERT(!rubyBase()->firstChild()); 174 ASSERT(!rubyBase()->firstChild());
175 } 175 }
176 } 176 }
177 } 177 }
178 178
179 RenderBlock::removeChild(child); 179 RenderBlockFlow::removeChild(child);
180 180
181 if (!beingDestroyed() && !documentBeingDestroyed()) { 181 if (!beingDestroyed() && !documentBeingDestroyed()) {
182 // Check if our base (if any) is now empty. If so, destroy it. 182 // Check if our base (if any) is now empty. If so, destroy it.
183 RenderBlock* base = rubyBase(); 183 RenderBlock* base = rubyBase();
184 if (base && !base->firstChild()) { 184 if (base && !base->firstChild()) {
185 RenderBlock::removeChild(base); 185 RenderBlockFlow::removeChild(base);
186 base->deleteLineBoxTree(); 186 base->deleteLineBoxTree();
187 base->destroy(); 187 base->destroy();
188 } 188 }
189 189
190 // If any of the above leaves the run empty, destroy it as well. 190 // If any of the above leaves the run empty, destroy it as well.
191 if (isEmpty()) { 191 if (isEmpty()) {
192 parent()->removeChild(this); 192 parent()->removeChild(this);
193 deleteLineBoxTree(); 193 deleteLineBoxTree();
194 destroy(); 194 destroy();
195 } 195 }
(...skipping 27 matching lines...) Expand all
223 return 0; 223 return 0;
224 if (relayoutChildren) 224 if (relayoutChildren)
225 layoutScope.setChildNeedsLayout(rt); 225 layoutScope.setChildNeedsLayout(rt);
226 rt->layoutIfNeeded(); 226 rt->layoutIfNeeded();
227 return rt; 227 return rt;
228 } 228 }
229 229
230 void RenderRubyRun::layout() 230 void RenderRubyRun::layout()
231 { 231 {
232 LayoutRectRecorder recorder(*this); 232 LayoutRectRecorder recorder(*this);
233 RenderBlock::layout(); 233 RenderBlockFlow::layout();
234 234
235 RenderRubyText* rt = rubyText(); 235 RenderRubyText* rt = rubyText();
236 if (!rt) 236 if (!rt)
237 return; 237 return;
238 238
239 rt->setLogicalLeft(0); 239 rt->setLogicalLeft(0);
240 240
241 // Place the RenderRubyText such that its bottom is flush with the lineTop o f the first line of the RenderRubyBase. 241 // Place the RenderRubyText such that its bottom is flush with the lineTop o f the first line of the RenderRubyBase.
242 LayoutUnit lastLineRubyTextBottom = rt->logicalHeight(); 242 LayoutUnit lastLineRubyTextBottom = rt->logicalHeight();
243 LayoutUnit firstLineRubyTextTop = 0; 243 LayoutUnit firstLineRubyTextTop = 0;
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
311 // We can overhang the ruby by no more than half the width of the neighborin g text 311 // We can overhang the ruby by no more than half the width of the neighborin g text
312 // and no more than half the font size. 312 // and no more than half the font size.
313 int halfWidthOfFontSize = rubyText->style(firstLine)->fontSize() / 2; 313 int halfWidthOfFontSize = rubyText->style(firstLine)->fontSize() / 2;
314 if (startOverhang) 314 if (startOverhang)
315 startOverhang = min<int>(startOverhang, min<int>(toRenderText(startRende rer)->minLogicalWidth(), halfWidthOfFontSize)); 315 startOverhang = min<int>(startOverhang, min<int>(toRenderText(startRende rer)->minLogicalWidth(), halfWidthOfFontSize));
316 if (endOverhang) 316 if (endOverhang)
317 endOverhang = min<int>(endOverhang, min<int>(toRenderText(endRenderer)-> minLogicalWidth(), halfWidthOfFontSize)); 317 endOverhang = min<int>(endOverhang, min<int>(toRenderText(endRenderer)-> minLogicalWidth(), halfWidthOfFontSize));
318 } 318 }
319 319
320 } // namespace WebCore 320 } // namespace WebCore
OLDNEW
« no previous file with comments | « Source/core/rendering/RenderRuby.cpp ('k') | Source/core/rendering/RenderRubyText.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698