Index: Source/core/layout/LayoutListMarker.cpp |
diff --git a/Source/core/layout/LayoutListMarker.cpp b/Source/core/layout/LayoutListMarker.cpp |
index 01a02be83af6053ee2a2df3d0b530a56b31ed374..59ecd761379bc5d34ebcc180b30997ca5728473c 100644 |
--- a/Source/core/layout/LayoutListMarker.cpp |
+++ b/Source/core/layout/LayoutListMarker.cpp |
@@ -25,6 +25,7 @@ |
#include "config.h" |
#include "core/layout/LayoutListMarker.h" |
+#include "core/dom/MarkerPseudoElement.h" |
#include "core/fetch/ImageResource.h" |
#include "core/layout/LayoutAnalyzer.h" |
#include "core/layout/LayoutListItem.h" |
@@ -1048,6 +1049,15 @@ String listMarkerText(EListStyleType type, int value) |
return ""; |
} |
+LayoutListMarker::LayoutListMarker(Element* node, LayoutListItem* item) |
+ : LayoutBox(node) |
+ , m_listItem(item) |
+{ |
+ // init LayoutObject attributes |
+ setInline(true); // our object is Inline |
+ setReplaced(true); // pretend to be replaced |
esprehn
2015/04/20 16:04:08
Link to the spec?
dsinclair
2015/04/21 20:23:10
This is from the constructor below. I needed to ad
|
+} |
+ |
LayoutListMarker::LayoutListMarker(LayoutListItem* item) |
: LayoutBox(0) |
, m_listItem(item) |
@@ -1071,9 +1081,9 @@ void LayoutListMarker::destroy() |
LayoutListMarker* LayoutListMarker::createAnonymous(LayoutListItem* item) |
{ |
Document& document = item->document(); |
- LayoutListMarker* renderer = new LayoutListMarker(item); |
- renderer->setDocumentForAnonymous(&document); |
- return renderer; |
+ LayoutListMarker* layoutObject = new LayoutListMarker(item); |
+ layoutObject->setDocumentForAnonymous(&document); |
+ return layoutObject; |
} |
void LayoutListMarker::styleWillChange(StyleDifference diff, const ComputedStyle& newStyle) |
@@ -1088,6 +1098,13 @@ void LayoutListMarker::styleDidChange(StyleDifference diff, const ComputedStyle* |
{ |
LayoutBox::styleDidChange(diff, oldStyle); |
+ if (RuntimeEnabledFeatures::listMarkerPseudoElementEnabled()) { |
+ updateMarginsAndContent(); |
+ |
+ if (isInside()) |
+ node()->parentElement()->layoutObject()->containingBlock()->updateLogicalWidth(); |
esprehn
2015/04/20 16:04:08
You can't update logical widths from inside a styl
dsinclair
2015/04/21 20:23:10
Done. If I remove the updateMarginsAndContent() th
esprehn
2015/04/22 07:45:44
You should do this in layout, we already do for th
|
+ } |
+ |
if (m_image != style()->listStyleImage()) { |
if (m_image) |
m_image->removeClient(this); |
@@ -1636,16 +1653,8 @@ LayoutRect LayoutListMarker::selectionRectForPaintInvalidation(const LayoutBoxMo |
void LayoutListMarker::listItemStyleDidChange() |
{ |
- RefPtr<ComputedStyle> newStyle = ComputedStyle::create(); |
- // The marker always inherits from the list item, regardless of where it might end |
- // up (e.g., in some deeply nested line box). See CSS3 spec. |
- newStyle->inheritFrom(m_listItem->styleRef()); |
- if (style()) { |
- // Reuse the current margins. Otherwise resetting the margins to initial values |
- // would trigger unnecessary layout. |
- newStyle->setMarginStart(style()->marginStart()); |
- newStyle->setMarginEnd(style()->marginRight()); |
- } |
+ ASSERT(!RuntimeEnabledFeatures::listMarkerPseudoElementEnabled()); |
+ RefPtr<ComputedStyle> newStyle = MarkerPseudoElement::styleForListMarkerLayoutObject(*m_listItem, style()); |
setStyle(newStyle.release()); |
} |