OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2009, 2010 Apple Inc. All rights reserved. | 2 * Copyright (C) 2009, 2010 Apple Inc. All rights reserved. |
3 * Copyright (C) Research In Motion Limited 2010. All rights reserved. | 3 * Copyright (C) Research In Motion Limited 2010. All rights reserved. |
4 * | 4 * |
5 * Redistribution and use in source and binary forms, with or without | 5 * Redistribution and use in source and binary forms, with or without |
6 * modification, are permitted provided that the following conditions | 6 * modification, are permitted provided that the following conditions |
7 * are met: | 7 * are met: |
8 * 1. Redistributions of source code must retain the above copyright | 8 * 1. 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 * 2. Redistributions in binary form must reproduce the above copyright | 10 * 2. Redistributions in binary form must reproduce the above copyright |
(...skipping 268 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
279 if (AXObjectCache::accessibilityEnabled()) | 279 if (AXObjectCache::accessibilityEnabled()) |
280 owner->document()->axObjectCache()->childrenChanged(owner); | 280 owner->document()->axObjectCache()->childrenChanged(owner); |
281 } | 281 } |
282 | 282 |
283 static RenderObject* findBeforeAfterParent(RenderObject* object) | 283 static RenderObject* findBeforeAfterParent(RenderObject* object) |
284 { | 284 { |
285 // Only table parts need to search for the :before or :after parent | 285 // Only table parts need to search for the :before or :after parent |
286 if (!(object->isTable() || object->isTableSection() || object->isTableRow())
) | 286 if (!(object->isTable() || object->isTableSection() || object->isTableRow())
) |
287 return object; | 287 return object; |
288 | 288 |
| 289 // If there is a :first-letter style applied on the :before or :after conten
t, |
| 290 // then we want the parent of the first-letter block |
289 RenderObject* beforeAfterParent = object; | 291 RenderObject* beforeAfterParent = object; |
290 while (beforeAfterParent && !(beforeAfterParent->isText() || beforeAfterPare
nt->isImage())) | 292 while (beforeAfterParent && !(beforeAfterParent->isText() || beforeAfterPare
nt->isImage()) |
| 293 && (beforeAfterParent->style()->styleType() != FIRST_LETTER)) |
291 beforeAfterParent = beforeAfterParent->firstChild(); | 294 beforeAfterParent = beforeAfterParent->firstChild(); |
| 295 |
292 return beforeAfterParent ? beforeAfterParent->parent() : 0; | 296 return beforeAfterParent ? beforeAfterParent->parent() : 0; |
293 } | 297 } |
294 | 298 |
295 RenderObject* RenderObjectChildList::beforePseudoElementRenderer(const RenderObj
ect* owner) const | 299 RenderObject* RenderObjectChildList::beforePseudoElementRenderer(const RenderObj
ect* owner) const |
296 { | 300 { |
297 // An anonymous (generated) inline run-in that has PseudoId BEFORE must come
from a grandparent. | 301 // An anonymous (generated) inline run-in that has PseudoId BEFORE must come
from a grandparent. |
298 // Therefore we should skip these generated run-ins when checking our immedi
ate children. | 302 // Therefore we should skip these generated run-ins when checking our immedi
ate children. |
299 // If we don't find our :before child immediately, then we should check if w
e own a | 303 // If we don't find our :before child immediately, then we should check if w
e own a |
300 // generated inline run-in in the next level of children. | 304 // generated inline run-in in the next level of children. |
301 RenderObject* first = const_cast<RenderObject*>(owner); | 305 RenderObject* first = const_cast<RenderObject*>(owner); |
(...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
442 // Images get an empty style that inherits from the pseudo. | 446 // Images get an empty style that inherits from the pseudo. |
443 RefPtr<RenderStyle> style = RenderStyle::create(); | 447 RefPtr<RenderStyle> style = RenderStyle::create(); |
444 style->inheritFrom(pseudoElementStyle); | 448 style->inheritFrom(pseudoElementStyle); |
445 genChild->setStyle(style.release()); | 449 genChild->setStyle(style.release()); |
446 } else { | 450 } else { |
447 // RenderListItem may insert a list marker here. We do not n
eed to care about this case. | 451 // RenderListItem may insert a list marker here. We do not n
eed to care about this case. |
448 // Otherwise, genChild must be a first-letter container. upd
ateFirstLetter() will take care of it. | 452 // Otherwise, genChild must be a first-letter container. upd
ateFirstLetter() will take care of it. |
449 ASSERT(genChild->isListMarker() || genChild->style()->styleT
ype() == FIRST_LETTER); | 453 ASSERT(genChild->isListMarker() || genChild->style()->styleT
ype() == FIRST_LETTER); |
450 } | 454 } |
451 } | 455 } |
452 | |
453 // Update style on the remaining text fragment after the first-lette
r. | |
454 if (beforeAfterParent->style()->styleType() == FIRST_LETTER) { | |
455 if (RenderObject* nextSibling = beforeAfterParent->nextSibling()
) { | |
456 if (nextSibling->isText() && nextSibling->style()->styleType
() == child->style()->styleType()) | |
457 nextSibling->setStyle(pseudoElementStyle); | |
458 } | |
459 } | |
460 } | 456 } |
461 return; // We've updated the generated content. That's all we needed to
do. | 457 return; // We've updated the generated content. That's all we needed to
do. |
462 } | 458 } |
463 | 459 |
464 RenderObject* insertBefore = (type == BEFORE) ? owner->virtualChildren()->fi
rstChild() : 0; | 460 RenderObject* insertBefore = (type == BEFORE) ? owner->virtualChildren()->fi
rstChild() : 0; |
465 if (insertBefore && insertBefore->isAnonymousBlock() && insertBefore->childr
enInline() && !insertBefore->isEmpty()) { | 461 if (insertBefore && insertBefore->isAnonymousBlock() && insertBefore->childr
enInline() && !insertBefore->isEmpty()) { |
466 // We are going to add the "before" element. We have to check whether th
e "insertBefore" element | 462 // We are going to add the "before" element. We have to check whether th
e "insertBefore" element |
467 // is an anonymous block with inline children. If it is, then we should
insert the "before" element | 463 // is an anonymous block with inline children. If it is, then we should
insert the "before" element |
468 // before the first inline child of the anonymous block, otherwise we wi
ll end up with the "before" | 464 // before the first inline child of the anonymous block, otherwise we wi
ll end up with the "before" |
469 // element in a different block. We do this only when the anonymous bloc
k has children, otherwise | 465 // element in a different block. We do this only when the anonymous bloc
k has children, otherwise |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
525 } | 521 } |
526 if (generatedContentContainer->isChildAllowed(renderer, pseudoElemen
tStyle)) | 522 if (generatedContentContainer->isChildAllowed(renderer, pseudoElemen
tStyle)) |
527 generatedContentContainer->addChild(renderer); | 523 generatedContentContainer->addChild(renderer); |
528 else | 524 else |
529 renderer->destroy(); | 525 renderer->destroy(); |
530 } | 526 } |
531 } | 527 } |
532 } | 528 } |
533 | 529 |
534 } // namespace WebCore | 530 } // namespace WebCore |
OLD | NEW |