| 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) 2001 Dirk Mueller (mueller@kde.org) | 4 * (C) 2001 Dirk Mueller (mueller@kde.org) |
| 5 * (C) 2006 Alexey Proskuryakov (ap@nypop.com) | 5 * (C) 2006 Alexey Proskuryakov (ap@nypop.com) |
| 6 * Copyright (C) 2004, 2005, 2006, 2010 Apple Inc. All rights reserved. | 6 * Copyright (C) 2004, 2005, 2006, 2010 Apple Inc. All rights reserved. |
| 7 * Copyright (C) 2010 Google Inc. All rights reserved. | 7 * Copyright (C) 2010 Google Inc. All rights reserved. |
| 8 * Copyright (C) 2011 Motorola Mobility, Inc. All rights reserved. | 8 * Copyright (C) 2011 Motorola Mobility, Inc. All rights reserved. |
| 9 * | 9 * |
| 10 * This library is free software; you can redistribute it and/or | 10 * This library is free software; you can redistribute it and/or |
| (...skipping 12 matching lines...) Expand all Loading... |
| 23 * Boston, MA 02110-1301, USA. | 23 * Boston, MA 02110-1301, USA. |
| 24 * | 24 * |
| 25 */ | 25 */ |
| 26 | 26 |
| 27 #include "config.h" | 27 #include "config.h" |
| 28 #include "core/html/HTMLOptionElement.h" | 28 #include "core/html/HTMLOptionElement.h" |
| 29 | 29 |
| 30 #include "bindings/core/v8/ExceptionState.h" | 30 #include "bindings/core/v8/ExceptionState.h" |
| 31 #include "core/HTMLNames.h" | 31 #include "core/HTMLNames.h" |
| 32 #include "core/dom/Document.h" | 32 #include "core/dom/Document.h" |
| 33 #include "core/dom/NodeLayoutStyle.h" | 33 #include "core/dom/NodeComputedStyle.h" |
| 34 #include "core/dom/NodeTraversal.h" | 34 #include "core/dom/NodeTraversal.h" |
| 35 #include "core/dom/ScriptLoader.h" | 35 #include "core/dom/ScriptLoader.h" |
| 36 #include "core/dom/Text.h" | 36 #include "core/dom/Text.h" |
| 37 #include "core/dom/shadow/ShadowRoot.h" | 37 #include "core/dom/shadow/ShadowRoot.h" |
| 38 #include "core/html/HTMLDataListElement.h" | 38 #include "core/html/HTMLDataListElement.h" |
| 39 #include "core/html/HTMLOptGroupElement.h" | 39 #include "core/html/HTMLOptGroupElement.h" |
| 40 #include "core/html/HTMLSelectElement.h" | 40 #include "core/html/HTMLSelectElement.h" |
| 41 #include "core/html/parser/HTMLParserIdioms.h" | 41 #include "core/html/parser/HTMLParserIdioms.h" |
| 42 #include "core/layout/LayoutTheme.h" | 42 #include "core/layout/LayoutTheme.h" |
| 43 #include "wtf/Vector.h" | 43 #include "wtf/Vector.h" |
| 44 #include "wtf/text/StringBuilder.h" | 44 #include "wtf/text/StringBuilder.h" |
| 45 | 45 |
| 46 namespace blink { | 46 namespace blink { |
| 47 | 47 |
| 48 using namespace HTMLNames; | 48 using namespace HTMLNames; |
| 49 | 49 |
| 50 HTMLOptionElement::HTMLOptionElement(Document& document) | 50 HTMLOptionElement::HTMLOptionElement(Document& document) |
| 51 : HTMLElement(optionTag, document) | 51 : HTMLElement(optionTag, document) |
| 52 , m_disabled(false) | 52 , m_disabled(false) |
| 53 , m_isSelected(false) | 53 , m_isSelected(false) |
| 54 { | 54 { |
| 55 setHasCustomStyleCallbacks(); | 55 setHasCustomStyleCallbacks(); |
| 56 } | 56 } |
| 57 | 57 |
| 58 // An explicit empty destructor should be in HTMLOptionElement.cpp, because | 58 // An explicit empty destructor should be in HTMLOptionElement.cpp, because |
| 59 // if an implicit destructor is used or an empty destructor is defined in | 59 // if an implicit destructor is used or an empty destructor is defined in |
| 60 // HTMLOptionElement.h, when including HTMLOptionElement.h, | 60 // HTMLOptionElement.h, when including HTMLOptionElement.h, |
| 61 // msvc tries to expand the destructor and causes | 61 // msvc tries to expand the destructor and causes |
| 62 // a compile error because of lack of LayoutStyle definition. | 62 // a compile error because of lack of ComputedStyle definition. |
| 63 HTMLOptionElement::~HTMLOptionElement() | 63 HTMLOptionElement::~HTMLOptionElement() |
| 64 { | 64 { |
| 65 } | 65 } |
| 66 | 66 |
| 67 PassRefPtrWillBeRawPtr<HTMLOptionElement> HTMLOptionElement::create(Document& do
cument) | 67 PassRefPtrWillBeRawPtr<HTMLOptionElement> HTMLOptionElement::create(Document& do
cument) |
| 68 { | 68 { |
| 69 RefPtrWillBeRawPtr<HTMLOptionElement> option = adoptRefWillBeNoop(new HTMLOp
tionElement(document)); | 69 RefPtrWillBeRawPtr<HTMLOptionElement> option = adoptRefWillBeNoop(new HTMLOp
tionElement(document)); |
| 70 option->ensureClosedShadowRoot(); | 70 option->ensureClosedShadowRoot(); |
| 71 return option.release(); | 71 return option.release(); |
| 72 } | 72 } |
| (...skipping 16 matching lines...) Expand all Loading... |
| 89 return element.release(); | 89 return element.release(); |
| 90 } | 90 } |
| 91 | 91 |
| 92 void HTMLOptionElement::attach(const AttachContext& context) | 92 void HTMLOptionElement::attach(const AttachContext& context) |
| 93 { | 93 { |
| 94 AttachContext optionContext(context); | 94 AttachContext optionContext(context); |
| 95 if (context.resolvedStyle) { | 95 if (context.resolvedStyle) { |
| 96 ASSERT(!m_style || m_style == context.resolvedStyle); | 96 ASSERT(!m_style || m_style == context.resolvedStyle); |
| 97 m_style = context.resolvedStyle; | 97 m_style = context.resolvedStyle; |
| 98 } else { | 98 } else { |
| 99 updateNonLayoutStyle(); | 99 updateNonComputedStyle(); |
| 100 optionContext.resolvedStyle = m_style.get(); | 100 optionContext.resolvedStyle = m_style.get(); |
| 101 } | 101 } |
| 102 HTMLElement::attach(optionContext); | 102 HTMLElement::attach(optionContext); |
| 103 } | 103 } |
| 104 | 104 |
| 105 void HTMLOptionElement::detach(const AttachContext& context) | 105 void HTMLOptionElement::detach(const AttachContext& context) |
| 106 { | 106 { |
| 107 m_style.clear(); | 107 m_style.clear(); |
| 108 HTMLElement::detach(context); | 108 HTMLElement::detach(context); |
| 109 } | 109 } |
| (...skipping 184 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 294 if (!label.isNull()) | 294 if (!label.isNull()) |
| 295 return label; | 295 return label; |
| 296 return collectOptionInnerText().stripWhiteSpace(isHTMLSpace<UChar>).simplify
WhiteSpace(isHTMLSpace<UChar>); | 296 return collectOptionInnerText().stripWhiteSpace(isHTMLSpace<UChar>).simplify
WhiteSpace(isHTMLSpace<UChar>); |
| 297 } | 297 } |
| 298 | 298 |
| 299 void HTMLOptionElement::setLabel(const AtomicString& label) | 299 void HTMLOptionElement::setLabel(const AtomicString& label) |
| 300 { | 300 { |
| 301 setAttribute(labelAttr, label); | 301 setAttribute(labelAttr, label); |
| 302 } | 302 } |
| 303 | 303 |
| 304 void HTMLOptionElement::updateNonLayoutStyle() | 304 void HTMLOptionElement::updateNonComputedStyle() |
| 305 { | 305 { |
| 306 m_style = originalStyleForLayoutObject(); | 306 m_style = originalStyleForLayoutObject(); |
| 307 if (HTMLSelectElement* select = ownerSelectElement()) | 307 if (HTMLSelectElement* select = ownerSelectElement()) |
| 308 select->updateListOnRenderer(); | 308 select->updateListOnRenderer(); |
| 309 } | 309 } |
| 310 | 310 |
| 311 LayoutStyle* HTMLOptionElement::nonRendererStyle() const | 311 ComputedStyle* HTMLOptionElement::nonLayoutObjectComputedStyle() const |
| 312 { | 312 { |
| 313 return m_style.get(); | 313 return m_style.get(); |
| 314 } | 314 } |
| 315 | 315 |
| 316 PassRefPtr<LayoutStyle> HTMLOptionElement::customStyleForLayoutObject() | 316 PassRefPtr<ComputedStyle> HTMLOptionElement::customStyleForLayoutObject() |
| 317 { | 317 { |
| 318 updateNonLayoutStyle(); | 318 updateNonComputedStyle(); |
| 319 return m_style; | 319 return m_style; |
| 320 } | 320 } |
| 321 | 321 |
| 322 void HTMLOptionElement::didRecalcStyle(StyleRecalcChange change) | 322 void HTMLOptionElement::didRecalcStyle(StyleRecalcChange change) |
| 323 { | 323 { |
| 324 if (change == NoChange) | 324 if (change == NoChange) |
| 325 return; | 325 return; |
| 326 | 326 |
| 327 // FIXME: We ask our owner select to repaint regardless of which property ch
anged. | 327 // FIXME: We ask our owner select to repaint regardless of which property ch
anged. |
| 328 if (HTMLSelectElement* select = ownerSelectElement()) { | 328 if (HTMLSelectElement* select = ownerSelectElement()) { |
| (...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 417 { | 417 { |
| 418 // If m_style is not set, then the node is still unattached. | 418 // If m_style is not set, then the node is still unattached. |
| 419 // We have to wait till it gets attached to read the display property. | 419 // We have to wait till it gets attached to read the display property. |
| 420 if (!m_style) | 420 if (!m_style) |
| 421 return false; | 421 return false; |
| 422 | 422 |
| 423 if (m_style->display() != NONE) { | 423 if (m_style->display() != NONE) { |
| 424 Element* parent = parentElement(); | 424 Element* parent = parentElement(); |
| 425 ASSERT(parent); | 425 ASSERT(parent); |
| 426 if (isHTMLOptGroupElement(*parent)) { | 426 if (isHTMLOptGroupElement(*parent)) { |
| 427 const LayoutStyle* parentStyle = parent->layoutStyle() ? parent->lay
outStyle() : parent->computedStyle(); | 427 const ComputedStyle* parentStyle = parent->computedStyle() ? parent-
>computedStyle() : parent->ensureComputedStyle(); |
| 428 return !parentStyle || parentStyle->display() == NONE; | 428 return !parentStyle || parentStyle->display() == NONE; |
| 429 } | 429 } |
| 430 } | 430 } |
| 431 return m_style->display() == NONE; | 431 return m_style->display() == NONE; |
| 432 } | 432 } |
| 433 | 433 |
| 434 } // namespace blink | 434 } // namespace blink |
| OLD | NEW |