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 11 matching lines...) Expand all Loading... | |
22 */ | 22 */ |
23 | 23 |
24 #include "config.h" | 24 #include "config.h" |
25 #include "core/rendering/RenderBlock.h" | 25 #include "core/rendering/RenderBlock.h" |
26 | 26 |
27 #include "HTMLNames.h" | 27 #include "HTMLNames.h" |
28 #include "core/accessibility/AXObjectCache.h" | 28 #include "core/accessibility/AXObjectCache.h" |
29 #include "core/dom/Document.h" | 29 #include "core/dom/Document.h" |
30 #include "core/dom/Element.h" | 30 #include "core/dom/Element.h" |
31 #include "core/dom/OverflowEvent.h" | 31 #include "core/dom/OverflowEvent.h" |
32 #include "core/dom/Text.h" | |
32 #include "core/dom/shadow/ShadowRoot.h" | 33 #include "core/dom/shadow/ShadowRoot.h" |
33 #include "core/editing/Editor.h" | 34 #include "core/editing/Editor.h" |
34 #include "core/editing/FrameSelection.h" | 35 #include "core/editing/FrameSelection.h" |
35 #include "core/page/Frame.h" | 36 #include "core/page/Frame.h" |
36 #include "core/page/FrameView.h" | 37 #include "core/page/FrameView.h" |
37 #include "core/page/Page.h" | 38 #include "core/page/Page.h" |
38 #include "core/page/Settings.h" | 39 #include "core/page/Settings.h" |
39 #include "core/platform/graphics/FloatQuad.h" | 40 #include "core/platform/graphics/FloatQuad.h" |
40 #include "core/platform/graphics/GraphicsContextStateSaver.h" | 41 #include "core/platform/graphics/GraphicsContextStateSaver.h" |
41 #include "core/platform/graphics/transforms/TransformState.h" | 42 #include "core/platform/graphics/transforms/TransformState.h" |
(...skipping 6675 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
6717 } | 6718 } |
6718 | 6719 |
6719 void RenderBlock::updateFirstLetter() | 6720 void RenderBlock::updateFirstLetter() |
6720 { | 6721 { |
6721 if (!document().styleSheetCollections()->usesFirstLetterRules()) | 6722 if (!document().styleSheetCollections()->usesFirstLetterRules()) |
6722 return; | 6723 return; |
6723 // Don't recur | 6724 // Don't recur |
6724 if (style()->styleType() == FIRST_LETTER) | 6725 if (style()->styleType() == FIRST_LETTER) |
6725 return; | 6726 return; |
6726 | 6727 |
6727 // FIXME: We need to destroy the first-letter object if it is no longer the first child. Need to find | |
6728 // an efficient way to check for that situation though before implementing a nything. | |
6729 RenderObject* firstLetterBlock = findFirstLetterBlock(this); | 6728 RenderObject* firstLetterBlock = findFirstLetterBlock(this); |
6730 if (!firstLetterBlock) | 6729 if (!firstLetterBlock) |
6731 return; | 6730 return; |
6732 | 6731 |
6733 // Drill into inlines looking for our first text child. | 6732 // Drill into inlines looking for our first text child. |
6734 RenderObject* currChild = firstLetterBlock->firstChild(); | 6733 RenderObject* currChild = firstLetterBlock->firstChild(); |
6735 while (currChild) { | 6734 while (currChild) { |
6736 if (currChild->isText()) | 6735 if (currChild->isText()) |
6737 break; | 6736 break; |
6738 if (currChild->isListMarker()) | 6737 if (currChild->isListMarker()) |
(...skipping 10 matching lines...) Expand all Loading... | |
6749 // We found a lower-level node with first-letter, which supersedes t he higher-level style | 6748 // We found a lower-level node with first-letter, which supersedes t he higher-level style |
6750 firstLetterBlock = currChild; | 6749 firstLetterBlock = currChild; |
6751 currChild = currChild->firstChild(); | 6750 currChild = currChild->firstChild(); |
6752 } else | 6751 } else |
6753 currChild = currChild->firstChild(); | 6752 currChild = currChild->firstChild(); |
6754 } | 6753 } |
6755 | 6754 |
6756 if (!currChild) | 6755 if (!currChild) |
6757 return; | 6756 return; |
6758 | 6757 |
6759 // If the child already has style, then it has already been created, so we j ust want | |
6760 // to update it. | |
6761 if (currChild->parent()->style()->styleType() == FIRST_LETTER) { | 6758 if (currChild->parent()->style()->styleType() == FIRST_LETTER) { |
6759 // Destroy the first-letter object if it is no longer the first child. | |
6760 RenderObject* remainingText = currChild->parent()->nextSibling(); | |
esprehn
2013/09/09 21:22:57
How do you know the currentCuild->parent() has a n
joone
2013/09/09 22:36:25
The currentChild is the firstLetter(RenderTextFrag
| |
6761 if (currChild->node() != remainingText->node()) { | |
6762 LayoutStateDisabler layoutStateDisabler(view()); | |
6763 | |
6764 RenderObject* oldRemainingText = toRenderBoxModelObject(currChild->p arent())->firstLetterRemainingText(); | |
6765 if (oldRemainingText) | |
6766 toRenderText(oldRemainingText)->setText(toText(oldRemainingText- >node())->data().impl()); | |
6767 | |
6768 createFirstLetterRenderer(firstLetterBlock, remainingText); | |
esprehn
2013/09/09 21:22:57
What destroyed the original RenderTextFragment tha
joone
2013/09/09 22:36:25
When setting a new text to RenderTextFragment(Rema
| |
6769 return; | |
6770 } | |
6771 | |
6772 // If the child already has style, then it has already been created, so we just want | |
6773 // to update it. | |
6762 updateFirstLetterStyle(firstLetterBlock, currChild); | 6774 updateFirstLetterStyle(firstLetterBlock, currChild); |
6763 return; | 6775 return; |
6764 } | 6776 } |
6765 | 6777 |
6766 if (!currChild->isText() || currChild->isBR()) | 6778 if (!currChild->isText() || currChild->isBR()) |
6767 return; | 6779 return; |
6768 | 6780 |
6769 // Our layout state is not valid for the repaints we are going to trigger by | 6781 // Our layout state is not valid for the repaints we are going to trigger by |
6770 // adding and removing children of firstLetterContainer. | 6782 // adding and removing children of firstLetterContainer. |
6771 LayoutStateDisabler layoutStateDisabler(view()); | 6783 LayoutStateDisabler layoutStateDisabler(view()); |
(...skipping 1262 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
8034 void RenderBlock::showLineTreeAndMark(const InlineBox* markedBox1, const char* m arkedLabel1, const InlineBox* markedBox2, const char* markedLabel2, const Render Object* obj) const | 8046 void RenderBlock::showLineTreeAndMark(const InlineBox* markedBox1, const char* m arkedLabel1, const InlineBox* markedBox2, const char* markedLabel2, const Render Object* obj) const |
8035 { | 8047 { |
8036 showRenderObject(); | 8048 showRenderObject(); |
8037 for (const RootInlineBox* root = firstRootBox(); root; root = root->nextRoot Box()) | 8049 for (const RootInlineBox* root = firstRootBox(); root; root = root->nextRoot Box()) |
8038 root->showLineTreeAndMark(markedBox1, markedLabel1, markedBox2, markedLa bel2, obj, 1); | 8050 root->showLineTreeAndMark(markedBox1, markedLabel1, markedBox2, markedLa bel2, obj, 1); |
8039 } | 8051 } |
8040 | 8052 |
8041 #endif | 8053 #endif |
8042 | 8054 |
8043 } // namespace WebCore | 8055 } // namespace WebCore |
OLD | NEW |