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

Side by Side Diff: WebCore/rendering/RenderRubyRun.cpp

Issue 3179009: Merge 65090 - 2010-08-10 Abhishek Arya <inferno@chromium.org>... (Closed) Base URL: svn://chrome-svn/chrome/branches/WebKit/375/
Patch Set: Created 10 years, 4 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 | Annotate | Revision Log
« no previous file with comments | « LayoutTests/fast/ruby/ruby-remove-no-base-expected.txt ('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) 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 125 matching lines...) Expand 10 before | Expand all | Expand 10 after
136 RenderBlock* newRun = staticCreateRubyRun(ruby); 136 RenderBlock* newRun = staticCreateRubyRun(ruby);
137 ruby->addChild(newRun, nextSibling()); 137 ruby->addChild(newRun, nextSibling());
138 // Add the new ruby text and move the old one to the new run 138 // Add the new ruby text and move the old one to the new run
139 // Note: Doing it in this order and not using RenderRubyRun's method s, 139 // Note: Doing it in this order and not using RenderRubyRun's method s,
140 // in order to avoid automatic removal of the ruby run in case there is no 140 // in order to avoid automatic removal of the ruby run in case there is no
141 // other child besides the old ruby text. 141 // other child besides the old ruby text.
142 RenderBlock::addChild(child, beforeChild); 142 RenderBlock::addChild(child, beforeChild);
143 RenderBlock::removeChild(beforeChild); 143 RenderBlock::removeChild(beforeChild);
144 newRun->addChild(beforeChild); 144 newRun->addChild(beforeChild);
145 } else { 145 } else {
146 ASSERT(hasRubyBase()); // Otherwise beforeChild would be borked. 146 if (hasRubyBase()) {
147 // Insertion before a ruby base object. 147 // Insertion before a ruby base object.
148 // In this case we need insert a new run before the current one and split the base. 148 // In this case we need insert a new run before the current one and split the base.
149 RenderObject* ruby = parent(); 149 RenderObject* ruby = parent();
150 RenderRubyRun* newRun = staticCreateRubyRun(ruby); 150 RenderRubyRun* newRun = staticCreateRubyRun(ruby);
151 ruby->addChild(newRun, this); 151 ruby->addChild(newRun, this);
152 newRun->addChild(child); 152 newRun->addChild(child);
153 rubyBaseSafe()->moveChildren(newRun->rubyBaseSafe(), beforeChild); 153 rubyBaseSafe()->moveChildren(newRun->rubyBaseSafe(), beforeChild );
154 }
154 } 155 }
155 } else { 156 } else {
156 // child is not a text -> insert it into the base 157 // child is not a text -> insert it into the base
157 // (append it instead if beforeChild is the ruby text) 158 // (append it instead if beforeChild is the ruby text)
158 if (beforeChild && beforeChild->isRubyText()) 159 if (beforeChild && beforeChild->isRubyText())
159 beforeChild = 0; 160 beforeChild = 0;
160 rubyBaseSafe()->addChild(child, beforeChild); 161 rubyBaseSafe()->addChild(child, beforeChild);
161 } 162 }
162 } 163 }
163 164
164 void RenderRubyRun::removeChild(RenderObject* child) 165 void RenderRubyRun::removeChild(RenderObject* child)
165 { 166 {
166 // If the child is a ruby text, then merge the ruby base with the base of 167 // If the child is a ruby text, then merge the ruby base with the base of
167 // the right sibling run, if possible. 168 // the right sibling run, if possible.
168 if (!m_beingDestroyed && !documentBeingDestroyed() && child->isRubyText()) { 169 if (!m_beingDestroyed && !documentBeingDestroyed() && child->isRubyText()) {
169 RenderRubyBase* base = rubyBase(); 170 RenderRubyBase* base = rubyBase();
170 RenderObject* rightNeighbour = nextSibling(); 171 RenderObject* rightNeighbour = nextSibling();
171 if (base && rightNeighbour && rightNeighbour->isRubyRun()) { 172 if (base && rightNeighbour && rightNeighbour->isRubyRun()) {
172 // Ruby run without a base can happen only at the first run. 173 // Ruby run without a base can happen only at the first run.
173 RenderRubyRun* rightRun = static_cast<RenderRubyRun*>(rightNeighbour ); 174 RenderRubyRun* rightRun = static_cast<RenderRubyRun*>(rightNeighbour );
174 ASSERT(rightRun->hasRubyBase()); 175 if (rightRun->hasRubyBase()) {
175 RenderRubyBase* rightBase = rightRun->rubyBaseSafe(); 176 RenderRubyBase* rightBase = rightRun->rubyBaseSafe();
176 // Collect all children in a single base, then swap the bases. 177 // Collect all children in a single base, then swap the bases.
177 rightBase->moveChildren(base); 178 rightBase->moveChildren(base);
178 moveChildTo(rightRun, rightRun->children(), base); 179 moveChildTo(rightRun, rightRun->children(), base);
179 rightRun->moveChildTo(this, children(), rightBase); 180 rightRun->moveChildTo(this, children(), rightBase);
180 // The now empty ruby base will be removed below. 181 // The now empty ruby base will be removed below.
182 }
181 } 183 }
182 } 184 }
183 185
184 RenderBlock::removeChild(child); 186 RenderBlock::removeChild(child);
185 187
186 if (!m_beingDestroyed && !documentBeingDestroyed()) { 188 if (!m_beingDestroyed && !documentBeingDestroyed()) {
187 // Check if our base (if any) is now empty. If so, destroy it. 189 // Check if our base (if any) is now empty. If so, destroy it.
188 RenderBlock* base = rubyBase(); 190 RenderBlock* base = rubyBase();
189 if (base && !base->firstChild()) { 191 if (base && !base->firstChild()) {
190 RenderBlock::removeChild(base); 192 RenderBlock::removeChild(base);
(...skipping 28 matching lines...) Expand all
219 RefPtr<RenderStyle> newStyle = RenderStyle::create(); 221 RefPtr<RenderStyle> newStyle = RenderStyle::create();
220 newStyle->inheritFrom(parentRuby->style()); 222 newStyle->inheritFrom(parentRuby->style());
221 newStyle->setDisplay(INLINE_BLOCK); 223 newStyle->setDisplay(INLINE_BLOCK);
222 rr->setStyle(newStyle.release()); 224 rr->setStyle(newStyle.release());
223 return rr; 225 return rr;
224 } 226 }
225 227
226 } // namespace WebCore 228 } // namespace WebCore
227 229
228 #endif // ENABLE(RUBY) 230 #endif // ENABLE(RUBY)
OLDNEW
« no previous file with comments | « LayoutTests/fast/ruby/ruby-remove-no-base-expected.txt ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698