OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) | 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) |
3 * (C) 1999 Antti Koivisto (koivisto@kde.org) | 3 * (C) 1999 Antti Koivisto (koivisto@kde.org) |
4 * (C) 2007 David Smith (catfish.man@gmail.com) | 4 * (C) 2007 David Smith (catfish.man@gmail.com) |
5 * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc.
All rights reserved. | 5 * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc.
All rights reserved. |
6 * Copyright (C) Research In Motion Limited 2010. All rights reserved. | 6 * Copyright (C) Research In Motion Limited 2010. All rights reserved. |
7 * | 7 * |
8 * This library is free software; you can redistribute it and/or | 8 * This library is free software; you can redistribute it and/or |
9 * modify it under the terms of the GNU Library General Public | 9 * modify it under the terms of the GNU Library General Public |
10 * License as published by the Free Software Foundation; either | 10 * License as published by the Free Software Foundation; either |
(...skipping 6068 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6079 // Replace the old renderer with the new one. | 6079 // Replace the old renderer with the new one. |
6080 remainingText->setFirstLetter(newFirstLetter); | 6080 remainingText->setFirstLetter(newFirstLetter); |
6081 toRenderBoxModelObject(newFirstLetter)->setFirstLetterRemainingText(
remainingText); | 6081 toRenderBoxModelObject(newFirstLetter)->setFirstLetterRemainingText(
remainingText); |
6082 } | 6082 } |
6083 // To prevent removal of single anonymous block in RenderBlock::removeCh
ild and causing | 6083 // To prevent removal of single anonymous block in RenderBlock::removeCh
ild and causing |
6084 // |nextSibling| to go stale, we remove the old first letter using remov
eChildNode first. | 6084 // |nextSibling| to go stale, we remove the old first letter using remov
eChildNode first. |
6085 firstLetterContainer->virtualChildren()->removeChildNode(firstLetterCont
ainer, firstLetter); | 6085 firstLetterContainer->virtualChildren()->removeChildNode(firstLetterCont
ainer, firstLetter); |
6086 firstLetter->destroy(); | 6086 firstLetter->destroy(); |
6087 firstLetter = newFirstLetter; | 6087 firstLetter = newFirstLetter; |
6088 firstLetterContainer->addChild(firstLetter, nextSibling); | 6088 firstLetterContainer->addChild(firstLetter, nextSibling); |
6089 } | 6089 } else |
6090 | 6090 firstLetter->setStyle(pseudoStyle); |
6091 firstLetter->setAnimatableStyle(pseudoStyle); | |
6092 | 6091 |
6093 for (RenderObject* genChild = firstLetter->firstChild(); genChild; genChild
= genChild->nextSibling()) { | 6092 for (RenderObject* genChild = firstLetter->firstChild(); genChild; genChild
= genChild->nextSibling()) { |
6094 if (genChild->isText()) | 6093 if (genChild->isText()) |
6095 genChild->setStyle(firstLetter->style()); | 6094 genChild->setStyle(pseudoStyle); |
6096 } | 6095 } |
6097 } | 6096 } |
6098 | 6097 |
6099 void RenderBlock::createFirstLetterRenderer(RenderObject* firstLetterBlock, Rend
erObject* currentChild) | 6098 void RenderBlock::createFirstLetterRenderer(RenderObject* firstLetterBlock, Rend
erObject* currentChild) |
6100 { | 6099 { |
6101 RenderObject* firstLetterContainer = currentChild->parent(); | 6100 RenderObject* firstLetterContainer = currentChild->parent(); |
6102 RenderStyle* pseudoStyle = styleForFirstLetter(firstLetterBlock, firstLetter
Container); | 6101 RenderStyle* pseudoStyle = styleForFirstLetter(firstLetterBlock, firstLetter
Container); |
6103 RenderObject* firstLetter = 0; | 6102 RenderObject* firstLetter = 0; |
6104 if (pseudoStyle->display() == INLINE) | 6103 if (pseudoStyle->display() == INLINE) |
6105 firstLetter = new (renderArena()) RenderInline(document()); | 6104 firstLetter = new (renderArena()) RenderInline(document()); |
6106 else | 6105 else |
6107 firstLetter = new (renderArena()) RenderBlock(document()); | 6106 firstLetter = new (renderArena()) RenderBlock(document()); |
6108 | 6107 firstLetter->setStyle(pseudoStyle); |
6109 RefPtr<RenderStyle> temporaryStyle = RenderStyle::create(); | |
6110 temporaryStyle->inheritFrom(firstLetterBlock->style()); | |
6111 firstLetter->setStyle(temporaryStyle); | |
6112 firstLetterContainer->addChild(firstLetter, currentChild); | 6108 firstLetterContainer->addChild(firstLetter, currentChild); |
6113 | |
6114 firstLetter->setAnimatableStyle(pseudoStyle); | |
6115 | 6109 |
6116 RenderText* textObj = toRenderText(currentChild); | 6110 RenderText* textObj = toRenderText(currentChild); |
6117 | 6111 |
6118 // The original string is going to be either a generated content string or a
DOM node's | 6112 // The original string is going to be either a generated content string or a
DOM node's |
6119 // string. We want the original string before it got transformed in case fi
rst-letter has | 6113 // string. We want the original string before it got transformed in case fi
rst-letter has |
6120 // no text-transform or a different text-transform applied to it. | 6114 // no text-transform or a different text-transform applied to it. |
6121 RefPtr<StringImpl> oldText = textObj->originalText(); | 6115 RefPtr<StringImpl> oldText = textObj->originalText(); |
6122 ASSERT(oldText); | 6116 ASSERT(oldText); |
6123 | 6117 |
6124 if (oldText && oldText->length() > 0) { | 6118 if (oldText && oldText->length() > 0) { |
(...skipping 27 matching lines...) Expand all Loading... |
6152 remainingText->node()->setRenderer(remainingText); | 6146 remainingText->node()->setRenderer(remainingText); |
6153 | 6147 |
6154 firstLetterContainer->addChild(remainingText, textObj); | 6148 firstLetterContainer->addChild(remainingText, textObj); |
6155 firstLetterContainer->removeChild(textObj); | 6149 firstLetterContainer->removeChild(textObj); |
6156 remainingText->setFirstLetter(firstLetter); | 6150 remainingText->setFirstLetter(firstLetter); |
6157 toRenderBoxModelObject(firstLetter)->setFirstLetterRemainingText(remaini
ngText); | 6151 toRenderBoxModelObject(firstLetter)->setFirstLetterRemainingText(remaini
ngText); |
6158 | 6152 |
6159 // construct text fragment for the first letter | 6153 // construct text fragment for the first letter |
6160 RenderTextFragment* letter = | 6154 RenderTextFragment* letter = |
6161 new (renderArena()) RenderTextFragment(remainingText->node() ? remai
ningText->node() : remainingText->document(), oldText.get(), 0, length); | 6155 new (renderArena()) RenderTextFragment(remainingText->node() ? remai
ningText->node() : remainingText->document(), oldText.get(), 0, length); |
6162 letter->setStyle(firstLetter->style()); | 6156 letter->setStyle(pseudoStyle); |
6163 firstLetter->addChild(letter); | 6157 firstLetter->addChild(letter); |
6164 | 6158 |
6165 textObj->destroy(); | 6159 textObj->destroy(); |
6166 } | 6160 } |
6167 } | 6161 } |
6168 | 6162 |
6169 void RenderBlock::updateFirstLetter() | 6163 void RenderBlock::updateFirstLetter() |
6170 { | 6164 { |
6171 if (!document()->usesFirstLetterRules()) | 6165 if (!document()->usesFirstLetterRules()) |
6172 return; | 6166 return; |
(...skipping 1097 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7270 } | 7264 } |
7271 | 7265 |
7272 String ValueToString<RenderBlock::FloatingObject*>::string(const RenderBlock::Fl
oatingObject* floatingObject) | 7266 String ValueToString<RenderBlock::FloatingObject*>::string(const RenderBlock::Fl
oatingObject* floatingObject) |
7273 { | 7267 { |
7274 return String::format("%p (%dx%d %dx%d)", floatingObject, floatingObject->fr
ameRect().pixelSnappedX(), floatingObject->frameRect().pixelSnappedY(), floating
Object->frameRect().pixelSnappedMaxX(), floatingObject->frameRect().pixelSnapped
MaxY()); | 7268 return String::format("%p (%dx%d %dx%d)", floatingObject, floatingObject->fr
ameRect().pixelSnappedX(), floatingObject->frameRect().pixelSnappedY(), floating
Object->frameRect().pixelSnappedMaxX(), floatingObject->frameRect().pixelSnapped
MaxY()); |
7275 } | 7269 } |
7276 | 7270 |
7277 #endif | 7271 #endif |
7278 | 7272 |
7279 } // namespace WebCore | 7273 } // namespace WebCore |
OLD | NEW |