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

Unified Diff: Source/web/PopupMenuImpl.cpp

Issue 1325623002: New SELECT Popup: Compare OPTION style with the parent OPTGROUP. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 5 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « LayoutTests/platform/mac/fast/forms/select/popup-menu-nested-style-expected.txt ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/web/PopupMenuImpl.cpp
diff --git a/Source/web/PopupMenuImpl.cpp b/Source/web/PopupMenuImpl.cpp
index 65f6e092cb84ef15772660e2a49b9501e40d3bb0..d898f80d9ef67ab0f454473e4c4dd3c8b670e964 100644
--- a/Source/web/PopupMenuImpl.cpp
+++ b/Source/web/PopupMenuImpl.cpp
@@ -163,11 +163,8 @@ class PopupMenuImpl::ItemIterationContext {
STACK_ALLOCATED();
public:
ItemIterationContext(const ComputedStyle& style, SharedBuffer* buffer)
- : m_direction(style.direction())
- , m_foregroundColor(style.visitedDependentColor(CSSPropertyColor))
+ : m_baseStyle(style)
, m_backgroundColor(style.visitedDependentColor(CSSPropertyBackgroundColor))
- , m_textTransform(style.textTransform())
- , m_fontDescription(style.fontDescription())
, m_listIndex(0)
, m_isInGroup(false)
, m_buffer(buffer)
@@ -185,16 +182,17 @@ public:
void serializeBaseStyle()
{
+ ASSERT(!m_isInGroup);
PagePopupClient::addString("baseStyle: {", m_buffer);
addProperty("backgroundColor", m_backgroundColor.serialized(), m_buffer);
- addProperty("color", m_foregroundColor.serialized(), m_buffer);
- addProperty("textTransform", String(textTransformToString(m_textTransform)), m_buffer);
- addProperty("fontSize", fontSize(), m_buffer);
- addProperty("fontStyle", String(fontStyleToString(fontStyle())), m_buffer);
- addProperty("fontVariant", String(fontVariantToString(fontVariant())), m_buffer);
+ addProperty("color", baseStyle().visitedDependentColor(CSSPropertyColor).serialized(), m_buffer);
+ addProperty("textTransform", String(textTransformToString(baseStyle().textTransform())), m_buffer);
+ addProperty("fontSize", baseFont().computedPixelSize(), m_buffer);
+ addProperty("fontStyle", String(fontStyleToString(baseFont().style())), m_buffer);
+ addProperty("fontVariant", String(fontVariantToString(baseFont().variant())), m_buffer);
PagePopupClient::addString("fontFamily: [", m_buffer);
- for (const FontFamily* f = &fontFamily(); f; f = f->next()) {
+ for (const FontFamily* f = &baseFont().family(); f; f = f->next()) {
addJavaScriptString(f->family().string(), m_buffer);
if (f->next())
PagePopupClient::addString(",", m_buffer);
@@ -203,11 +201,17 @@ public:
PagePopupClient::addString("},\n", m_buffer);
}
- void startGroupChildren()
+ Color backgroundColor() const { return m_isInGroup ? m_groupStyle->visitedDependentColor(CSSPropertyBackgroundColor) : m_backgroundColor; }
+ // Do not use baseStyle() for background-color, use backgroundColor()
+ // instead.
+ const ComputedStyle& baseStyle() { return m_isInGroup ? *m_groupStyle : m_baseStyle; }
+ const FontDescription& baseFont() { return m_isInGroup ? m_groupStyle->fontDescription() : m_baseStyle.fontDescription(); }
+ void startGroupChildren(const ComputedStyle& groupStyle)
{
ASSERT(!m_isInGroup);
PagePopupClient::addString("children: [", m_buffer);
m_isInGroup = true;
+ m_groupStyle = &groupStyle;
}
void finishGroupIfNecessary()
{
@@ -215,18 +219,12 @@ public:
return;
PagePopupClient::addString("],},\n", m_buffer);
m_isInGroup = false;
+ m_groupStyle = nullptr;
}
- int fontSize() const { return m_fontDescription.computedPixelSize(); }
- FontStyle fontStyle() const { return m_fontDescription.style(); }
- FontVariant fontVariant() const { return m_fontDescription.variant(); }
- const FontFamily& fontFamily() const { return m_fontDescription.family(); }
-
- TextDirection m_direction;
- Color m_foregroundColor;
+ const ComputedStyle& m_baseStyle;
Color m_backgroundColor;
- ETextTransform m_textTransform;
- const FontDescription& m_fontDescription;
+ const ComputedStyle* m_groupStyle;
unsigned m_listIndex;
bool m_isInGroup;
@@ -316,23 +314,25 @@ void PopupMenuImpl::addElementStyle(ItemIterationContext& context, HTMLElement&
addProperty("visibility", String("hidden"), data);
if (style->display() == NONE)
addProperty("display", String("none"), data);
- if (context.m_direction != style->direction())
+ const ComputedStyle& baseStyle = context.baseStyle();
+ if (baseStyle.direction() != style->direction())
addProperty("direction", String(style->direction() == RTL ? "rtl" : "ltr"), data);
if (isOverride(style->unicodeBidi()))
addProperty("unicodeBidi", String("bidi-override"), data);
Color foregroundColor = style->visitedDependentColor(CSSPropertyColor);
- if (context.m_foregroundColor != foregroundColor)
+ if (baseStyle.visitedDependentColor(CSSPropertyColor) != foregroundColor)
addProperty("color", foregroundColor.serialized(), data);
Color backgroundColor = style->visitedDependentColor(CSSPropertyBackgroundColor);
- if (context.m_backgroundColor != backgroundColor && backgroundColor != Color::transparent)
+ if (context.backgroundColor() != backgroundColor && backgroundColor != Color::transparent)
addProperty("backgroundColor", backgroundColor.serialized(), data);
+ const FontDescription& baseFont = context.baseFont();
const FontDescription& fontDescription = style->font().fontDescription();
- if (context.fontSize() != fontDescription.computedPixelSize())
+ if (baseFont.computedPixelSize() != fontDescription.computedPixelSize())
addProperty("fontSize", fontDescription.computedPixelSize(), data);
// Our UA stylesheet has font-weight:normal for OPTION.
if (FontWeightNormal != fontDescription.weight())
addProperty("fontWeight", String(fontWeightToString(fontDescription.weight())), data);
- if (context.fontFamily() != fontDescription.family()) {
+ if (baseFont.family() != fontDescription.family()) {
PagePopupClient::addString("fontFamily: [\n", data);
for (const FontFamily* f = &fontDescription.family(); f; f = f->next()) {
addJavaScriptString(f->family().string(), data);
@@ -341,11 +341,11 @@ void PopupMenuImpl::addElementStyle(ItemIterationContext& context, HTMLElement&
}
PagePopupClient::addString("],\n", data);
}
- if (context.fontStyle() != fontDescription.style())
+ if (baseFont.style() != fontDescription.style())
addProperty("fontStyle", String(fontStyleToString(fontDescription.style())), data);
- if (context.fontVariant() != fontDescription.variant())
+ if (baseFont.variant() != fontDescription.variant())
addProperty("fontVariant", String(fontVariantToString(fontDescription.variant())), data);
- if (context.m_textTransform != style->textTransform())
+ if (baseStyle.textTransform() != style->textTransform())
addProperty("textTransform", String(textTransformToString(style->textTransform())), data);
PagePopupClient::addString("},\n", data);
@@ -378,7 +378,7 @@ void PopupMenuImpl::addOptGroup(ItemIterationContext& context, HTMLOptGroupEleme
addProperty("ariaLabel", element.fastGetAttribute(HTMLNames::aria_labelAttr), data);
addProperty("disabled", element.isDisabledFormControl(), data);
addElementStyle(context, element);
- context.startGroupChildren();
+ context.startGroupChildren(*m_ownerElement->itemComputedStyle(element));
// We should call ItemIterationContext::finishGroupIfNecessary() later.
}
« no previous file with comments | « LayoutTests/platform/mac/fast/forms/select/popup-menu-nested-style-expected.txt ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698