Changeset 57809 in webkit
- Timestamp:
- Apr 19, 2010 6:28:27 AM (14 years ago)
- Location:
- trunk
- Files:
-
- 2 added
- 13 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r57808 r57809 1 2010-04-19 Jessie Berlin <jberlin@webkit.org> 2 3 Reviewed by Dave Hyatt. 4 5 First steps towards fixing bug 24021 - pseudo-element styles not accessible / retrievable via DOM methods. 6 https://bugs.webkit.org/show_bug.cgi?id=24021 7 8 * fast/css/getComputedStyle/getComputedStyle-with-pseudo-element-expected.txt: Added. 9 * fast/css/getComputedStyle/getComputedStyle-with-pseudo-element.html: Added. 10 1 11 2010-04-19 Csaba Osztrogonác <ossy@webkit.org> 2 12 -
trunk/WebCore/ChangeLog
r57802 r57809 1 2010-04-19 Jessie Berlin <jberlin@webkit.org> 2 3 Reviewed by Dave Hyatt. 4 5 First steps towards fixing bug 24021 - pseudo-element styles not accessible / retrievable via DOM methods. 6 https://bugs.webkit.org/show_bug.cgi?id=24021 7 8 Allows access to the computed styles for the pseudo-elements through the second argument to getComputedStyle. 9 This approach does not provide the correct values for 'length' properties and does not work for the ':selection' pseudo-element and will instead return results similiar to those returned by Firefox. This approach also requires waiting until at least one iteration of a hardware accelerated composited animation to return the correct values for the "opacity" and "transform" properties of a pseudo-element associated with the element being animated. 10 Those values need to be retrieved from the renderer for the pseudo-element as opposed to the cached RenderStyle for the element on which the pseudo-element is defined, which is further complicated by the fact that not all elements have renderers. 11 12 Test: fast/css/getComputedStyle/getComputedStyle-with-pseudo-element.html 13 14 * WebCore.base.exp: 15 * css/CSSComputedStyleDeclaration.cpp: 16 (WebCore::CSSComputedStyleDeclaration::CSSComputedStyleDeclaration): 17 Parse the and store the pseudo-element specifier from the string provided by the user. 18 (WebCore::CSSComputedStyleDeclaration::getFontSizeCSSValuePreferringKeyword): 19 Get the computed style for the pseudo-element if it has been specified. 20 (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue): 21 Get the computed style for the pseudo-element if it has been specified, with a FIXME noting that the values returned for the "opacity" and "transform" properties of a pseudo-element associated with an element being animated and using hardware accelerated compositing will not be correct until after the first iteration of the animation. 22 (WebCore::CSSComputedStyleDeclaration::length): 23 Get the computed style for the pseudo-element if it has been specified. 24 (WebCore::CSSComputedStyleDeclaration::cssPropertyMatches): 25 Ditto. 26 * css/CSSComputedStyleDeclaration.h: 27 (WebCore::computedStyle): 28 Take into consideration the pseudo-element. 29 30 * css/CSSSelector.cpp: 31 (WebCore::CSSSelector::pseudoId): 32 Return the PseudoId that corresponds to the given PseudoType. If there is no corresponding PseudoId, returns NOPSEUDO. 33 (WebCore::nameToPseudoTypeMap): 34 Create and return the mapping between string names and PseudoTypes. 35 (WebCore::CSSSelector::parsePseudoType): 36 Parse and the given string into a PseudoType. 37 (WebCore::CSSSelector::extractPseudoType): 38 Refactored to use parsePseudoType. 39 * css/CSSSelector.h: 40 41 * css/CSSStyleSelector.cpp: 42 (WebCore::CSSStyleSelector::SelectorChecker::checkOneSelector): 43 Refactored to use pseudoId. 44 45 * dom/Element.cpp: 46 (WebCore::Element::computedStyle): 47 If the pseudo-element is specified, then return the cached RenderStyle for that PseudoId. Added a FIXME to find the actual renders of the pseudo-elements instead of just the cached RenderStyle of the RenderStyle for the associated element. 48 * dom/Element.h: 49 (WebCore::Element::virtualComputedStyle): 50 Because Element::computedStyle is used so often, don't make it virtual. Instead, provide a virtualComputedStyle method in the Node.h class andmake computedStyle non-virtual. That way the Element version and the Node version of computedStyle will have the same name and look the same at the call site, but the Element version will be more efficient. 51 52 * dom/Node.h: 53 (WebCore::Node::computedStyle): 54 Ditto. 55 * dom/Node.cpp: 56 (WebCore::Node::virtualComputedStyle): 57 Get the computed style for the pseudo-element if it has been specified. 58 59 * page/DOMWindow.cpp: 60 (WebCore::DOMWindow::getComputedStyle): 61 Ditto. 62 1 63 2010-04-18 Simon Hausmann <simon.hausmann@nokia.com> 2 64 -
trunk/WebCore/WebCore.base.exp
r57748 r57809 481 481 __ZN7WebCore26NetscapePlugInStreamLoader6createEPNS_5FrameEPNS_32NetscapePlugInStreamLoaderClientE 482 482 __ZN7WebCore26usesTestModeFocusRingColorEv 483 __ZN7WebCore27CSSComputedStyleDeclarationC1EN3WTF10PassRefPtrINS_4NodeEEEb 483 __ZN7WebCore27CSSComputedStyleDeclarationC1EN3WTF10PassRefPtrINS_4NodeEEEbRKNS_6StringE 484 484 __ZN7WebCore27applicationIsAdobeInstallerEv 485 485 __ZN7WebCore29isCharacterSmartReplaceExemptEib -
trunk/WebCore/css/CSSComputedStyleDeclaration.cpp
r57482 r57809 32 32 #include "CSSPropertyNames.h" 33 33 #include "CSSReflectValue.h" 34 #include "CSSSelector.h" 34 35 #include "CSSTimingFunctionValue.h" 35 36 #include "CSSValueList.h" … … 501 502 } 502 503 503 CSSComputedStyleDeclaration::CSSComputedStyleDeclaration(PassRefPtr<Node> n, bool allowVisitedStyle )504 CSSComputedStyleDeclaration::CSSComputedStyleDeclaration(PassRefPtr<Node> n, bool allowVisitedStyle, const String& pseudoElementName) 504 505 : m_node(n) 505 506 , m_allowVisitedStyle(allowVisitedStyle) 506 507 { 508 unsigned nameWithoutColonsStart = pseudoElementName[0] == ':' ? (pseudoElementName[1] == ':' ? 2 : 1) : 0; 509 m_pseudoElementSpecifier = CSSSelector::pseudoId(CSSSelector::parsePseudoType( 510 AtomicString(pseudoElementName.substring(nameWithoutColonsStart)))); 507 511 } 508 512 … … 547 551 node->document()->updateLayoutIgnorePendingStylesheets(); 548 552 549 RefPtr<RenderStyle> style = node->computedStyle( );553 RefPtr<RenderStyle> style = node->computedStyle(m_pseudoElementSpecifier); 550 554 if (!style) 551 555 return 0; … … 665 669 666 670 RefPtr<RenderStyle> style; 667 if (renderer && hasCompositedLayer(renderer) && AnimationController::supportsAcceleratedAnimationOfProperty(static_cast<CSSPropertyID>(propertyID))) 671 if (renderer && hasCompositedLayer(renderer) && AnimationController::supportsAcceleratedAnimationOfProperty(static_cast<CSSPropertyID>(propertyID))) { 668 672 style = renderer->animation()->getAnimatedStyleForRenderer(renderer); 669 else 670 style = node->computedStyle(); 673 if (m_pseudoElementSpecifier) { 674 // FIXME: This cached pseudo style will only exist if the animation has been run at least once. 675 style = style->getCachedPseudoStyle(m_pseudoElementSpecifier); 676 } 677 } else 678 style = node->computedStyle(m_pseudoElementSpecifier); 679 671 680 if (!style) 672 681 return 0; … … 1497 1506 return 0; 1498 1507 1499 RenderStyle* style = node->computedStyle( );1508 RenderStyle* style = node->computedStyle(m_pseudoElementSpecifier); 1500 1509 if (!style) 1501 1510 return 0; … … 1516 1525 if (property->id() == CSSPropertyFontSize && property->value()->isPrimitiveValue() && m_node) { 1517 1526 m_node->document()->updateLayoutIgnorePendingStylesheets(); 1518 RenderStyle* style = m_node->computedStyle( );1527 RenderStyle* style = m_node->computedStyle(m_pseudoElementSpecifier); 1519 1528 if (style && style->fontDescription().keywordSize()) { 1520 1529 int sizeValue = cssIdentifierForFontSizeKeyword(style->fontDescription().keywordSize()); -
trunk/WebCore/css/CSSComputedStyleDeclaration.h
r57292 r57809 24 24 #include "CSSStyleDeclaration.h" 25 25 #include "Node.h" 26 #include "RenderStyleConstants.h" 26 27 27 28 namespace WebCore { … … 34 35 class CSSComputedStyleDeclaration : public CSSStyleDeclaration { 35 36 public: 36 friend PassRefPtr<CSSComputedStyleDeclaration> computedStyle(PassRefPtr<Node>, bool allowVisitedStyle = false);37 friend PassRefPtr<CSSComputedStyleDeclaration> computedStyle(PassRefPtr<Node>, bool allowVisitedStyle, const String& pseudoElementName); 37 38 virtual ~CSSComputedStyleDeclaration(); 38 39 … … 61 62 62 63 private: 63 CSSComputedStyleDeclaration(PassRefPtr<Node>, bool allowVisitedStyle );64 CSSComputedStyleDeclaration(PassRefPtr<Node>, bool allowVisitedStyle, const String&); 64 65 65 66 virtual void setCssText(const String&, ExceptionCode&); … … 71 72 72 73 RefPtr<Node> m_node; 74 PseudoId m_pseudoElementSpecifier; 73 75 bool m_allowVisitedStyle; 74 76 }; 75 77 76 inline PassRefPtr<CSSComputedStyleDeclaration> computedStyle(PassRefPtr<Node> node, bool allowVisitedStyle)78 inline PassRefPtr<CSSComputedStyleDeclaration> computedStyle(PassRefPtr<Node> node, bool allowVisitedStyle = false, const String& pseudoElementName = String()) 77 79 { 78 return adoptRef(new CSSComputedStyleDeclaration(node, allowVisitedStyle ));80 return adoptRef(new CSSComputedStyleDeclaration(node, allowVisitedStyle, pseudoElementName)); 79 81 } 80 82 -
trunk/WebCore/css/CSSSelector.cpp
r57161 r57809 29 29 #include "HTMLNames.h" 30 30 31 #include <wtf/HashMap.h> 31 32 #include <wtf/StdLibExtras.h> 32 33 … … 66 67 } 67 68 68 void CSSSelector::extractPseudoType() const 69 { 70 if (m_match != PseudoClass && m_match != PseudoElement) 71 return; 72 69 PseudoId CSSSelector::pseudoId(PseudoType type) 70 { 71 switch (type) { 72 case PseudoFirstLine: 73 return FIRST_LINE; 74 case PseudoFirstLetter: 75 return FIRST_LETTER; 76 case PseudoSelection: 77 return SELECTION; 78 case PseudoBefore: 79 return BEFORE; 80 case PseudoAfter: 81 return AFTER; 82 case PseudoFileUploadButton: 83 return FILE_UPLOAD_BUTTON; 84 #if ENABLE(DATALIST) 85 case PseudoInputListButton: 86 return INPUT_LIST_BUTTON; 87 #endif 88 case PseudoInputPlaceholder: 89 return INPUT_PLACEHOLDER; 90 case PseudoSliderThumb: 91 return SLIDER_THUMB; 92 case PseudoSearchCancelButton: 93 return SEARCH_CANCEL_BUTTON; 94 case PseudoSearchDecoration: 95 return SEARCH_DECORATION; 96 case PseudoSearchResultsDecoration: 97 return SEARCH_RESULTS_DECORATION; 98 case PseudoSearchResultsButton: 99 return SEARCH_RESULTS_BUTTON; 100 case PseudoMediaControlsPanel: 101 return MEDIA_CONTROLS_PANEL; 102 case PseudoMediaControlsMuteButton: 103 return MEDIA_CONTROLS_MUTE_BUTTON; 104 case PseudoMediaControlsPlayButton: 105 return MEDIA_CONTROLS_PLAY_BUTTON; 106 case PseudoMediaControlsTimelineContainer: 107 return MEDIA_CONTROLS_TIMELINE_CONTAINER; 108 case PseudoMediaControlsVolumeSliderContainer: 109 return MEDIA_CONTROLS_VOLUME_SLIDER_CONTAINER; 110 case PseudoMediaControlsCurrentTimeDisplay: 111 return MEDIA_CONTROLS_CURRENT_TIME_DISPLAY; 112 case PseudoMediaControlsTimeRemainingDisplay: 113 return MEDIA_CONTROLS_TIME_REMAINING_DISPLAY; 114 case PseudoMediaControlsTimeline: 115 return MEDIA_CONTROLS_TIMELINE; 116 case PseudoMediaControlsVolumeSlider: 117 return MEDIA_CONTROLS_VOLUME_SLIDER; 118 case PseudoMediaControlsSeekBackButton: 119 return MEDIA_CONTROLS_SEEK_BACK_BUTTON; 120 case PseudoMediaControlsSeekForwardButton: 121 return MEDIA_CONTROLS_SEEK_FORWARD_BUTTON; 122 case PseudoMediaControlsRewindButton: 123 return MEDIA_CONTROLS_REWIND_BUTTON; 124 case PseudoMediaControlsReturnToRealtimeButton: 125 return MEDIA_CONTROLS_RETURN_TO_REALTIME_BUTTON; 126 case PseudoMediaControlsToggleClosedCaptions: 127 return MEDIA_CONTROLS_TOGGLE_CLOSED_CAPTIONS_BUTTON; 128 case PseudoMediaControlsStatusDisplay: 129 return MEDIA_CONTROLS_STATUS_DISPLAY; 130 case PseudoMediaControlsFullscreenButton: 131 return MEDIA_CONTROLS_FULLSCREEN_BUTTON; 132 case PseudoScrollbar: 133 return SCROLLBAR; 134 case PseudoScrollbarButton: 135 return SCROLLBAR_BUTTON; 136 case PseudoScrollbarCorner: 137 return SCROLLBAR_CORNER; 138 case PseudoScrollbarThumb: 139 return SCROLLBAR_THUMB; 140 case PseudoScrollbarTrack: 141 return SCROLLBAR_TRACK; 142 case PseudoScrollbarTrackPiece: 143 return SCROLLBAR_TRACK_PIECE; 144 case PseudoResizer: 145 return RESIZER; 146 case PseudoInnerSpinButton: 147 return INNER_SPIN_BUTTON; 148 case PseudoOuterSpinButton: 149 return OUTER_SPIN_BUTTON; 150 case PseudoUnknown: 151 case PseudoEmpty: 152 case PseudoFirstChild: 153 case PseudoFirstOfType: 154 case PseudoLastChild: 155 case PseudoLastOfType: 156 case PseudoOnlyChild: 157 case PseudoOnlyOfType: 158 case PseudoNthChild: 159 case PseudoNthOfType: 160 case PseudoNthLastChild: 161 case PseudoNthLastOfType: 162 case PseudoLink: 163 case PseudoVisited: 164 case PseudoAnyLink: 165 case PseudoAutofill: 166 case PseudoHover: 167 case PseudoDrag: 168 case PseudoFocus: 169 case PseudoActive: 170 case PseudoChecked: 171 case PseudoEnabled: 172 case PseudoFullPageMedia: 173 case PseudoDefault: 174 case PseudoDisabled: 175 case PseudoOptional: 176 case PseudoRequired: 177 case PseudoReadOnly: 178 case PseudoReadWrite: 179 case PseudoValid: 180 case PseudoInvalid: 181 case PseudoIndeterminate: 182 case PseudoTarget: 183 case PseudoLang: 184 case PseudoNot: 185 case PseudoRoot: 186 case PseudoScrollbarBack: 187 case PseudoScrollbarForward: 188 case PseudoWindowInactive: 189 case PseudoCornerPresent: 190 case PseudoDecrement: 191 case PseudoIncrement: 192 case PseudoHorizontal: 193 case PseudoVertical: 194 case PseudoStart: 195 case PseudoEnd: 196 case PseudoDoubleButton: 197 case PseudoSingleButton: 198 case PseudoNoButton: 199 return NOPSEUDO; 200 case PseudoNotParsed: 201 ASSERT_NOT_REACHED(); 202 return NOPSEUDO; 203 } 204 205 ASSERT_NOT_REACHED(); 206 return NOPSEUDO; 207 } 208 209 static HashMap<AtomicStringImpl*, CSSSelector::PseudoType>* nameToPseudoTypeMap() 210 { 73 211 DEFINE_STATIC_LOCAL(AtomicString, active, ("active")); 74 212 DEFINE_STATIC_LOCAL(AtomicString, after, ("after")); … … 162 300 DEFINE_STATIC_LOCAL(AtomicString, cornerPresent, ("corner-present")); 163 301 302 static HashMap<AtomicStringImpl*, CSSSelector::PseudoType>* nameToPseudoType = 0; 303 if (!nameToPseudoType) { 304 nameToPseudoType = new HashMap<AtomicStringImpl*, CSSSelector::PseudoType>; 305 nameToPseudoType->set(active.impl(), CSSSelector::PseudoActive); 306 nameToPseudoType->set(after.impl(), CSSSelector::PseudoAfter); 307 nameToPseudoType->set(anyLink.impl(), CSSSelector::PseudoAnyLink); 308 nameToPseudoType->set(autofill.impl(), CSSSelector::PseudoAutofill); 309 nameToPseudoType->set(before.impl(), CSSSelector::PseudoBefore); 310 nameToPseudoType->set(checked.impl(), CSSSelector::PseudoChecked); 311 nameToPseudoType->set(fileUploadButton.impl(), CSSSelector::PseudoFileUploadButton); 312 nameToPseudoType->set(defaultString.impl(), CSSSelector::PseudoDefault); 313 nameToPseudoType->set(disabled.impl(), CSSSelector::PseudoDisabled); 314 nameToPseudoType->set(readOnly.impl(), CSSSelector::PseudoReadOnly); 315 nameToPseudoType->set(readWrite.impl(), CSSSelector::PseudoReadWrite); 316 nameToPseudoType->set(valid.impl(), CSSSelector::PseudoValid); 317 nameToPseudoType->set(invalid.impl(), CSSSelector::PseudoInvalid); 318 nameToPseudoType->set(drag.impl(), CSSSelector::PseudoDrag); 319 nameToPseudoType->set(dragAlias.impl(), CSSSelector::PseudoDrag); 320 nameToPseudoType->set(enabled.impl(), CSSSelector::PseudoEnabled); 321 nameToPseudoType->set(empty.impl(), CSSSelector::PseudoEmpty); 322 nameToPseudoType->set(firstChild.impl(), CSSSelector::PseudoFirstChild); 323 nameToPseudoType->set(fullPageMedia.impl(), CSSSelector::PseudoFullPageMedia); 324 #if ENABLE(DATALIST) 325 nameToPseudoType->set(inputListButton.impl(), CSSSelector::PseudoInputListButton); 326 #endif 327 nameToPseudoType->set(inputPlaceholder.impl(), CSSSelector::PseudoInputPlaceholder); 328 nameToPseudoType->set(lastChild.impl(), CSSSelector::PseudoLastChild); 329 nameToPseudoType->set(lastOfType.impl(), CSSSelector::PseudoLastOfType); 330 nameToPseudoType->set(onlyChild.impl(), CSSSelector::PseudoOnlyChild); 331 nameToPseudoType->set(onlyOfType.impl(), CSSSelector::PseudoOnlyOfType); 332 nameToPseudoType->set(firstLetter.impl(), CSSSelector::PseudoFirstLetter); 333 nameToPseudoType->set(firstLine.impl(), CSSSelector::PseudoFirstLine); 334 nameToPseudoType->set(firstOfType.impl(), CSSSelector::PseudoFirstOfType); 335 nameToPseudoType->set(focus.impl(), CSSSelector::PseudoFocus); 336 nameToPseudoType->set(hover.impl(), CSSSelector::PseudoHover); 337 nameToPseudoType->set(indeterminate.impl(), CSSSelector::PseudoIndeterminate); 338 nameToPseudoType->set(innerSpinButton.impl(), CSSSelector::PseudoInnerSpinButton); 339 nameToPseudoType->set(link.impl(), CSSSelector::PseudoLink); 340 nameToPseudoType->set(lang.impl(), CSSSelector::PseudoLang); 341 nameToPseudoType->set(mediaControlsPanel.impl(), CSSSelector::PseudoMediaControlsPanel); 342 nameToPseudoType->set(mediaControlsMuteButton.impl(), CSSSelector::PseudoMediaControlsMuteButton); 343 nameToPseudoType->set(mediaControlsPlayButton.impl(), CSSSelector::PseudoMediaControlsPlayButton); 344 nameToPseudoType->set(mediaControlsCurrentTimeDisplay.impl(), CSSSelector::PseudoMediaControlsCurrentTimeDisplay); 345 nameToPseudoType->set(mediaControlsTimeRemainingDisplay.impl(), CSSSelector::PseudoMediaControlsTimeRemainingDisplay); 346 nameToPseudoType->set(mediaControlsTimeline.impl(), CSSSelector::PseudoMediaControlsTimeline); 347 nameToPseudoType->set(mediaControlsVolumeSlider.impl(), CSSSelector::PseudoMediaControlsVolumeSlider); 348 nameToPseudoType->set(mediaControlsSeekBackButton.impl(), CSSSelector::PseudoMediaControlsSeekBackButton); 349 nameToPseudoType->set(mediaControlsSeekForwardButton.impl(), CSSSelector::PseudoMediaControlsSeekForwardButton); 350 nameToPseudoType->set(mediaControlsRewindButton.impl(), CSSSelector::PseudoMediaControlsRewindButton); 351 nameToPseudoType->set(mediaControlsReturnToRealtimeButton.impl(), CSSSelector::PseudoMediaControlsReturnToRealtimeButton); 352 nameToPseudoType->set(mediaControlsToggleClosedCaptionsButton.impl(), CSSSelector::PseudoMediaControlsToggleClosedCaptions); 353 nameToPseudoType->set(mediaControlsStatusDisplay.impl(), CSSSelector::PseudoMediaControlsStatusDisplay); 354 nameToPseudoType->set(mediaControlsFullscreenButton.impl(), CSSSelector::PseudoMediaControlsFullscreenButton); 355 nameToPseudoType->set(mediaControlsTimelineContainer.impl(), CSSSelector::PseudoMediaControlsTimelineContainer); 356 nameToPseudoType->set(mediaControlsVolumeSliderContainer.impl(), CSSSelector::PseudoMediaControlsVolumeSliderContainer); 357 nameToPseudoType->set(notStr.impl(), CSSSelector::PseudoNot); 358 nameToPseudoType->set(nthChild.impl(), CSSSelector::PseudoNthChild); 359 nameToPseudoType->set(nthOfType.impl(), CSSSelector::PseudoNthOfType); 360 nameToPseudoType->set(nthLastChild.impl(), CSSSelector::PseudoNthLastChild); 361 nameToPseudoType->set(nthLastOfType.impl(), CSSSelector::PseudoNthLastOfType); 362 nameToPseudoType->set(outerSpinButton.impl(), CSSSelector::PseudoOuterSpinButton); 363 nameToPseudoType->set(root.impl(), CSSSelector::PseudoRoot); 364 nameToPseudoType->set(windowInactive.impl(), CSSSelector::PseudoWindowInactive); 365 nameToPseudoType->set(decrement.impl(), CSSSelector::PseudoDecrement); 366 nameToPseudoType->set(increment.impl(), CSSSelector::PseudoIncrement); 367 nameToPseudoType->set(start.impl(), CSSSelector::PseudoStart); 368 nameToPseudoType->set(end.impl(), CSSSelector::PseudoEnd); 369 nameToPseudoType->set(horizontal.impl(), CSSSelector::PseudoHorizontal); 370 nameToPseudoType->set(vertical.impl(), CSSSelector::PseudoVertical); 371 nameToPseudoType->set(doubleButton.impl(), CSSSelector::PseudoDoubleButton); 372 nameToPseudoType->set(singleButton.impl(), CSSSelector::PseudoSingleButton); 373 nameToPseudoType->set(noButton.impl(), CSSSelector::PseudoNoButton); 374 nameToPseudoType->set(optional.impl(), CSSSelector::PseudoOptional); 375 nameToPseudoType->set(required.impl(), CSSSelector::PseudoRequired); 376 nameToPseudoType->set(resizer.impl(), CSSSelector::PseudoResizer); 377 nameToPseudoType->set(scrollbar.impl(), CSSSelector::PseudoScrollbar); 378 nameToPseudoType->set(scrollbarButton.impl(), CSSSelector::PseudoScrollbarButton); 379 nameToPseudoType->set(scrollbarCorner.impl(), CSSSelector::PseudoScrollbarCorner); 380 nameToPseudoType->set(scrollbarThumb.impl(), CSSSelector::PseudoScrollbarThumb); 381 nameToPseudoType->set(scrollbarTrack.impl(), CSSSelector::PseudoScrollbarTrack); 382 nameToPseudoType->set(scrollbarTrackPiece.impl(), CSSSelector::PseudoScrollbarTrackPiece); 383 nameToPseudoType->set(cornerPresent.impl(), CSSSelector::PseudoCornerPresent); 384 nameToPseudoType->set(searchCancelButton.impl(), CSSSelector::PseudoSearchCancelButton); 385 nameToPseudoType->set(searchDecoration.impl(), CSSSelector::PseudoSearchDecoration); 386 nameToPseudoType->set(searchResultsDecoration.impl(), CSSSelector::PseudoSearchResultsDecoration); 387 nameToPseudoType->set(searchResultsButton.impl(), CSSSelector::PseudoSearchResultsButton); 388 nameToPseudoType->set(selection.impl(), CSSSelector::PseudoSelection); 389 nameToPseudoType->set(sliderThumb.impl(), CSSSelector::PseudoSliderThumb); 390 nameToPseudoType->set(target.impl(), CSSSelector::PseudoTarget); 391 nameToPseudoType->set(visited.impl(), CSSSelector::PseudoVisited); 392 } 393 return nameToPseudoType; 394 } 395 396 CSSSelector::PseudoType CSSSelector::parsePseudoType(const AtomicString& name) 397 { 398 if (name.isNull()) 399 return PseudoUnknown; 400 HashMap<AtomicStringImpl*, CSSSelector::PseudoType>* nameToPseudoType = nameToPseudoTypeMap(); 401 HashMap<AtomicStringImpl*, CSSSelector::PseudoType>::iterator slot = nameToPseudoType->find(name.impl()); 402 return slot == nameToPseudoType->end() ? PseudoUnknown : slot->second; 403 } 404 405 void CSSSelector::extractPseudoType() const 406 { 407 if (m_match != PseudoClass && m_match != PseudoElement) 408 return; 409 410 m_pseudoType = parsePseudoType(m_value); 411 164 412 bool element = false; // pseudo-element 165 413 bool compat = false; // single colon compatbility mode 166 414 167 m_pseudoType = PseudoUnknown; 168 if (m_value == active) 169 m_pseudoType = PseudoActive; 170 else if (m_value == after) { 171 m_pseudoType = PseudoAfter; 415 switch (m_pseudoType) { 416 case PseudoAfter: 417 case PseudoBefore: 418 case PseudoFirstLetter: 419 case PseudoFirstLine: 420 compat = true; 421 case PseudoFileUploadButton: 422 case PseudoInputListButton: 423 case PseudoInputPlaceholder: 424 case PseudoInnerSpinButton: 425 case PseudoMediaControlsPanel: 426 case PseudoMediaControlsMuteButton: 427 case PseudoMediaControlsPlayButton: 428 case PseudoMediaControlsCurrentTimeDisplay: 429 case PseudoMediaControlsTimeRemainingDisplay: 430 case PseudoMediaControlsTimeline: 431 case PseudoMediaControlsVolumeSlider: 432 case PseudoMediaControlsSeekBackButton: 433 case PseudoMediaControlsSeekForwardButton: 434 case PseudoMediaControlsRewindButton: 435 case PseudoMediaControlsReturnToRealtimeButton: 436 case PseudoMediaControlsToggleClosedCaptions: 437 case PseudoMediaControlsStatusDisplay: 438 case PseudoMediaControlsFullscreenButton: 439 case PseudoMediaControlsTimelineContainer: 440 case PseudoMediaControlsVolumeSliderContainer: 441 case PseudoOuterSpinButton: 442 case PseudoResizer: 443 case PseudoScrollbar: 444 case PseudoScrollbarCorner: 445 case PseudoScrollbarButton: 446 case PseudoScrollbarThumb: 447 case PseudoScrollbarTrack: 448 case PseudoScrollbarTrackPiece: 449 case PseudoSearchCancelButton: 450 case PseudoSearchDecoration: 451 case PseudoSearchResultsDecoration: 452 case PseudoSearchResultsButton: 453 case PseudoSelection: 454 case PseudoSliderThumb: 172 455 element = true; 173 compat = true; 174 } else if (m_value == anyLink) 175 m_pseudoType = PseudoAnyLink; 176 else if (m_value == autofill) 177 m_pseudoType = PseudoAutofill; 178 else if (m_value == before) { 179 m_pseudoType = PseudoBefore; 180 element = true; 181 compat = true; 182 } else if (m_value == checked) 183 m_pseudoType = PseudoChecked; 184 else if (m_value == fileUploadButton) { 185 m_pseudoType = PseudoFileUploadButton; 186 element = true; 187 } else if (m_value == defaultString) 188 m_pseudoType = PseudoDefault; 189 else if (m_value == disabled) 190 m_pseudoType = PseudoDisabled; 191 else if (m_value == readOnly) 192 m_pseudoType = PseudoReadOnly; 193 else if (m_value == readWrite) 194 m_pseudoType = PseudoReadWrite; 195 else if (m_value == valid) 196 m_pseudoType = PseudoValid; 197 else if (m_value == invalid) 198 m_pseudoType = PseudoInvalid; 199 else if (m_value == drag || m_value == dragAlias) 200 m_pseudoType = PseudoDrag; 201 else if (m_value == enabled) 202 m_pseudoType = PseudoEnabled; 203 else if (m_value == empty) 204 m_pseudoType = PseudoEmpty; 205 else if (m_value == firstChild) 206 m_pseudoType = PseudoFirstChild; 207 else if (m_value == fullPageMedia) 208 m_pseudoType = PseudoFullPageMedia; 209 else 210 #if ENABLE(DATALIST) 211 if (m_value == inputListButton) { 212 m_pseudoType = PseudoInputListButton; 213 element = true; 214 } else 215 #endif 216 if (m_value == inputPlaceholder) { 217 m_pseudoType = PseudoInputPlaceholder; 218 element = true; 219 } else if (m_value == lastChild) 220 m_pseudoType = PseudoLastChild; 221 else if (m_value == lastOfType) 222 m_pseudoType = PseudoLastOfType; 223 else if (m_value == onlyChild) 224 m_pseudoType = PseudoOnlyChild; 225 else if (m_value == onlyOfType) 226 m_pseudoType = PseudoOnlyOfType; 227 else if (m_value == firstLetter) { 228 m_pseudoType = PseudoFirstLetter; 229 element = true; 230 compat = true; 231 } else if (m_value == firstLine) { 232 m_pseudoType = PseudoFirstLine; 233 element = true; 234 compat = true; 235 } else if (m_value == firstOfType) 236 m_pseudoType = PseudoFirstOfType; 237 else if (m_value == focus) 238 m_pseudoType = PseudoFocus; 239 else if (m_value == hover) 240 m_pseudoType = PseudoHover; 241 else if (m_value == indeterminate) 242 m_pseudoType = PseudoIndeterminate; 243 else if (m_value == innerSpinButton) { 244 m_pseudoType = PseudoInnerSpinButton; 245 element = true; 246 } else if (m_value == link) 247 m_pseudoType = PseudoLink; 248 else if (m_value == lang) 249 m_pseudoType = PseudoLang; 250 else if (m_value == mediaControlsPanel) { 251 m_pseudoType = PseudoMediaControlsPanel; 252 element = true; 253 } else if (m_value == mediaControlsMuteButton) { 254 m_pseudoType = PseudoMediaControlsMuteButton; 255 element = true; 256 } else if (m_value == mediaControlsPlayButton) { 257 m_pseudoType = PseudoMediaControlsPlayButton; 258 element = true; 259 } else if (m_value == mediaControlsCurrentTimeDisplay) { 260 m_pseudoType = PseudoMediaControlsCurrentTimeDisplay; 261 element = true; 262 } else if (m_value == mediaControlsTimeRemainingDisplay) { 263 m_pseudoType = PseudoMediaControlsTimeRemainingDisplay; 264 element = true; 265 } else if (m_value == mediaControlsTimeline) { 266 m_pseudoType = PseudoMediaControlsTimeline; 267 element = true; 268 } else if (m_value == mediaControlsVolumeSlider) { 269 m_pseudoType = PseudoMediaControlsVolumeSlider; 270 element = true; 271 } else if (m_value == mediaControlsSeekBackButton) { 272 m_pseudoType = PseudoMediaControlsSeekBackButton; 273 element = true; 274 } else if (m_value == mediaControlsSeekForwardButton) { 275 m_pseudoType = PseudoMediaControlsSeekForwardButton; 276 element = true; 277 } else if (m_value == mediaControlsRewindButton) { 278 m_pseudoType = PseudoMediaControlsRewindButton; 279 element = true; 280 } else if (m_value == mediaControlsReturnToRealtimeButton) { 281 m_pseudoType = PseudoMediaControlsReturnToRealtimeButton; 282 element = true; 283 } else if (m_value == mediaControlsToggleClosedCaptionsButton) { 284 m_pseudoType = PseudoMediaControlsToggleClosedCaptions; 285 element = true; 286 } else if (m_value == mediaControlsStatusDisplay) { 287 m_pseudoType = PseudoMediaControlsStatusDisplay; 288 element = true; 289 } else if (m_value == mediaControlsFullscreenButton) { 290 m_pseudoType = PseudoMediaControlsFullscreenButton; 291 element = true; 292 } else if (m_value == mediaControlsTimelineContainer) { 293 m_pseudoType = PseudoMediaControlsTimelineContainer; 294 element = true; 295 } else if (m_value == mediaControlsVolumeSliderContainer) { 296 m_pseudoType = PseudoMediaControlsVolumeSliderContainer; 297 element = true; 298 } else if (m_value == notStr) 299 m_pseudoType = PseudoNot; 300 else if (m_value == nthChild) 301 m_pseudoType = PseudoNthChild; 302 else if (m_value == nthOfType) 303 m_pseudoType = PseudoNthOfType; 304 else if (m_value == nthLastChild) 305 m_pseudoType = PseudoNthLastChild; 306 else if (m_value == nthLastOfType) 307 m_pseudoType = PseudoNthLastOfType; 308 else if (m_value == outerSpinButton) { 309 m_pseudoType = PseudoOuterSpinButton; 310 element = true; 311 } else if (m_value == root) 312 m_pseudoType = PseudoRoot; 313 else if (m_value == windowInactive) 314 m_pseudoType = PseudoWindowInactive; 315 else if (m_value == decrement) 316 m_pseudoType = PseudoDecrement; 317 else if (m_value == increment) 318 m_pseudoType = PseudoIncrement; 319 else if (m_value == start) 320 m_pseudoType = PseudoStart; 321 else if (m_value == end) 322 m_pseudoType = PseudoEnd; 323 else if (m_value == horizontal) 324 m_pseudoType = PseudoHorizontal; 325 else if (m_value == vertical) 326 m_pseudoType = PseudoVertical; 327 else if (m_value == doubleButton) 328 m_pseudoType = PseudoDoubleButton; 329 else if (m_value == singleButton) 330 m_pseudoType = PseudoSingleButton; 331 else if (m_value == noButton) 332 m_pseudoType = PseudoNoButton; 333 else if (m_value == optional) 334 m_pseudoType = PseudoOptional; 335 else if (m_value == required) 336 m_pseudoType = PseudoRequired; 337 else if (m_value == scrollbarCorner) { 338 element = true; 339 m_pseudoType = PseudoScrollbarCorner; 340 } else if (m_value == resizer) { 341 element = true; 342 m_pseudoType = PseudoResizer; 343 } else if (m_value == scrollbar) { 344 element = true; 345 m_pseudoType = PseudoScrollbar; 346 } else if (m_value == scrollbarButton) { 347 element = true; 348 m_pseudoType = PseudoScrollbarButton; 349 } else if (m_value == scrollbarCorner) { 350 element = true; 351 m_pseudoType = PseudoScrollbarCorner; 352 } else if (m_value == scrollbarThumb) { 353 element = true; 354 m_pseudoType = PseudoScrollbarThumb; 355 } else if (m_value == scrollbarTrack) { 356 element = true; 357 m_pseudoType = PseudoScrollbarTrack; 358 } else if (m_value == scrollbarTrackPiece) { 359 element = true; 360 m_pseudoType = PseudoScrollbarTrackPiece; 361 } else if (m_value == cornerPresent) 362 m_pseudoType = PseudoCornerPresent; 363 else if (m_value == searchCancelButton) { 364 m_pseudoType = PseudoSearchCancelButton; 365 element = true; 366 } else if (m_value == searchDecoration) { 367 m_pseudoType = PseudoSearchDecoration; 368 element = true; 369 } else if (m_value == searchResultsDecoration) { 370 m_pseudoType = PseudoSearchResultsDecoration; 371 element = true; 372 } else if (m_value == searchResultsButton) { 373 m_pseudoType = PseudoSearchResultsButton; 374 element = true; 375 } else if (m_value == selection) { 376 m_pseudoType = PseudoSelection; 377 element = true; 378 } else if (m_value == sliderThumb) { 379 m_pseudoType = PseudoSliderThumb; 380 element = true; 381 } else if (m_value == target) 382 m_pseudoType = PseudoTarget; 383 else if (m_value == visited) 384 m_pseudoType = PseudoVisited; 456 break; 457 case PseudoUnknown: 458 case PseudoEmpty: 459 case PseudoFirstChild: 460 case PseudoFirstOfType: 461 case PseudoLastChild: 462 case PseudoLastOfType: 463 case PseudoOnlyChild: 464 case PseudoOnlyOfType: 465 case PseudoNthChild: 466 case PseudoNthOfType: 467 case PseudoNthLastChild: 468 case PseudoNthLastOfType: 469 case PseudoLink: 470 case PseudoVisited: 471 case PseudoAnyLink: 472 case PseudoAutofill: 473 case PseudoHover: 474 case PseudoDrag: 475 case PseudoFocus: 476 case PseudoActive: 477 case PseudoChecked: 478 case PseudoEnabled: 479 case PseudoFullPageMedia: 480 case PseudoDefault: 481 case PseudoDisabled: 482 case PseudoOptional: 483 case PseudoRequired: 484 case PseudoReadOnly: 485 case PseudoReadWrite: 486 case PseudoValid: 487 case PseudoInvalid: 488 case PseudoIndeterminate: 489 case PseudoTarget: 490 case PseudoLang: 491 case PseudoNot: 492 case PseudoRoot: 493 case PseudoScrollbarBack: 494 case PseudoScrollbarForward: 495 case PseudoWindowInactive: 496 case PseudoCornerPresent: 497 case PseudoDecrement: 498 case PseudoIncrement: 499 case PseudoHorizontal: 500 case PseudoVertical: 501 case PseudoStart: 502 case PseudoEnd: 503 case PseudoDoubleButton: 504 case PseudoSingleButton: 505 case PseudoNoButton: 506 case PseudoNotParsed: 507 break; 508 } 385 509 386 510 if (m_match == PseudoClass && element) { 387 if (!compat) 511 if (!compat) 388 512 m_pseudoType = PseudoUnknown; 389 else 513 else 390 514 m_match = PseudoElement; 391 515 } else if (m_match == PseudoElement && !element) -
trunk/WebCore/css/CSSSelector.h
r57161 r57809 23 23 #define CSSSelector_h 24 24 25 #include "RenderStyleConstants.h" 25 26 #include "QualifiedName.h" 26 27 #include <wtf/Noncopyable.h> … … 195 196 return static_cast<PseudoType>(m_pseudoType); 196 197 } 197 198 199 static PseudoType parsePseudoType(const AtomicString&); 200 static PseudoId pseudoId(PseudoType); 201 198 202 CSSSelector* tagHistory() const { return m_hasRareData ? m_data.m_rareData->m_tagHistory.get() : m_data.m_tagHistory; } 199 203 void setTagHistory(CSSSelector* tagHistory); -
trunk/WebCore/css/CSSStyleSelector.cpp
r57671 r57809 2553 2553 return false; 2554 2554 2555 switch (sel->pseudoType()) { 2556 // Pseudo-elements: 2557 case CSSSelector::PseudoFirstLine: 2558 dynamicPseudo = FIRST_LINE; 2559 return true; 2560 case CSSSelector::PseudoFirstLetter: 2561 dynamicPseudo = FIRST_LETTER; 2562 if (Document* doc = e->document()) 2563 doc->setUsesFirstLetterRules(true); 2564 return true; 2565 case CSSSelector::PseudoSelection: 2566 dynamicPseudo = SELECTION; 2567 return true; 2568 case CSSSelector::PseudoBefore: 2569 dynamicPseudo = BEFORE; 2570 return true; 2571 case CSSSelector::PseudoAfter: 2572 dynamicPseudo = AFTER; 2573 return true; 2574 case CSSSelector::PseudoFileUploadButton: 2575 dynamicPseudo = FILE_UPLOAD_BUTTON; 2576 return true; 2577 #if ENABLE(DATALIST) 2578 case CSSSelector::PseudoInputListButton: 2579 dynamicPseudo = INPUT_LIST_BUTTON; 2580 return true; 2581 #endif 2582 case CSSSelector::PseudoInputPlaceholder: 2583 dynamicPseudo = INPUT_PLACEHOLDER; 2584 return true; 2585 case CSSSelector::PseudoSliderThumb: 2586 dynamicPseudo = SLIDER_THUMB; 2587 return true; 2588 case CSSSelector::PseudoSearchCancelButton: 2589 dynamicPseudo = SEARCH_CANCEL_BUTTON; 2590 return true; 2591 case CSSSelector::PseudoSearchDecoration: 2592 dynamicPseudo = SEARCH_DECORATION; 2593 return true; 2594 case CSSSelector::PseudoSearchResultsDecoration: 2595 dynamicPseudo = SEARCH_RESULTS_DECORATION; 2596 return true; 2597 case CSSSelector::PseudoSearchResultsButton: 2598 dynamicPseudo = SEARCH_RESULTS_BUTTON; 2599 return true; 2600 case CSSSelector::PseudoMediaControlsPanel: 2601 dynamicPseudo = MEDIA_CONTROLS_PANEL; 2602 return true; 2603 case CSSSelector::PseudoMediaControlsMuteButton: 2604 dynamicPseudo = MEDIA_CONTROLS_MUTE_BUTTON; 2605 return true; 2606 case CSSSelector::PseudoMediaControlsPlayButton: 2607 dynamicPseudo = MEDIA_CONTROLS_PLAY_BUTTON; 2608 return true; 2609 case CSSSelector::PseudoMediaControlsTimelineContainer: 2610 dynamicPseudo = MEDIA_CONTROLS_TIMELINE_CONTAINER; 2611 return true; 2612 case CSSSelector::PseudoMediaControlsVolumeSliderContainer: 2613 dynamicPseudo = MEDIA_CONTROLS_VOLUME_SLIDER_CONTAINER; 2614 return true; 2615 case CSSSelector::PseudoMediaControlsCurrentTimeDisplay: 2616 dynamicPseudo = MEDIA_CONTROLS_CURRENT_TIME_DISPLAY; 2617 return true; 2618 case CSSSelector::PseudoMediaControlsTimeRemainingDisplay: 2619 dynamicPseudo = MEDIA_CONTROLS_TIME_REMAINING_DISPLAY; 2620 return true; 2621 case CSSSelector::PseudoMediaControlsTimeline: 2622 dynamicPseudo = MEDIA_CONTROLS_TIMELINE; 2623 return true; 2624 case CSSSelector::PseudoMediaControlsVolumeSlider: 2625 dynamicPseudo = MEDIA_CONTROLS_VOLUME_SLIDER; 2626 return true; 2627 case CSSSelector::PseudoMediaControlsSeekBackButton: 2628 dynamicPseudo = MEDIA_CONTROLS_SEEK_BACK_BUTTON; 2629 return true; 2630 case CSSSelector::PseudoMediaControlsSeekForwardButton: 2631 dynamicPseudo = MEDIA_CONTROLS_SEEK_FORWARD_BUTTON; 2632 return true; 2633 case CSSSelector::PseudoMediaControlsRewindButton: 2634 dynamicPseudo = MEDIA_CONTROLS_REWIND_BUTTON; 2635 return true; 2636 case CSSSelector::PseudoMediaControlsReturnToRealtimeButton: 2637 dynamicPseudo = MEDIA_CONTROLS_RETURN_TO_REALTIME_BUTTON; 2638 return true; 2639 case CSSSelector::PseudoMediaControlsToggleClosedCaptions: 2640 dynamicPseudo = MEDIA_CONTROLS_TOGGLE_CLOSED_CAPTIONS_BUTTON; 2641 return true; 2642 case CSSSelector::PseudoMediaControlsStatusDisplay: 2643 dynamicPseudo = MEDIA_CONTROLS_STATUS_DISPLAY; 2644 return true; 2645 case CSSSelector::PseudoMediaControlsFullscreenButton: 2646 dynamicPseudo = MEDIA_CONTROLS_FULLSCREEN_BUTTON; 2647 return true; 2648 case CSSSelector::PseudoScrollbar: 2649 dynamicPseudo = SCROLLBAR; 2650 return true; 2651 case CSSSelector::PseudoScrollbarButton: 2652 dynamicPseudo = SCROLLBAR_BUTTON; 2653 return true; 2654 case CSSSelector::PseudoScrollbarCorner: 2655 dynamicPseudo = SCROLLBAR_CORNER; 2656 return true; 2657 case CSSSelector::PseudoScrollbarThumb: 2658 dynamicPseudo = SCROLLBAR_THUMB; 2659 return true; 2660 case CSSSelector::PseudoScrollbarTrack: 2661 dynamicPseudo = SCROLLBAR_TRACK; 2662 return true; 2663 case CSSSelector::PseudoScrollbarTrackPiece: 2664 dynamicPseudo = SCROLLBAR_TRACK_PIECE; 2665 return true; 2666 case CSSSelector::PseudoResizer: 2667 dynamicPseudo = RESIZER; 2668 return true; 2669 case CSSSelector::PseudoInnerSpinButton: 2670 dynamicPseudo = INNER_SPIN_BUTTON; 2671 return true; 2672 case CSSSelector::PseudoOuterSpinButton: 2673 dynamicPseudo = OUTER_SPIN_BUTTON; 2674 return true; 2675 case CSSSelector::PseudoUnknown: 2676 case CSSSelector::PseudoNotParsed: 2677 default: 2678 ASSERT_NOT_REACHED(); 2679 break; 2680 } 2555 PseudoId pseudoId = CSSSelector::pseudoId(sel->pseudoType()); 2556 if (pseudoId == FIRST_LETTER) { 2557 if (Document* document = e->document()) 2558 document->setUsesFirstLetterRules(true); 2559 } 2560 if (pseudoId != NOPSEUDO) { 2561 dynamicPseudo = pseudoId; 2562 return true; 2563 } 2564 ASSERT_NOT_REACHED(); 2681 2565 return false; 2682 2566 } -
trunk/WebCore/dom/Element.cpp
r57671 r57809 1399 1399 } 1400 1400 1401 RenderStyle* Element::computedStyle() 1402 { 1401 RenderStyle* Element::computedStyle(PseudoId pseudoElementSpecifier) 1402 { 1403 // FIXME: Find and use the renderer from the pseudo element instead of the actual element so that the 'length' 1404 // properties, which are only known by the renderer because it did the layout, will be correct and so that the 1405 // values returned for the ":selection" pseudo-element will be correct. 1403 1406 if (RenderStyle* usedStyle = renderStyle()) 1404 return usedStyle;1407 return pseudoElementSpecifier ? usedStyle->getCachedPseudoStyle(pseudoElementSpecifier) : usedStyle; 1405 1408 1406 1409 if (!attached()) … … 1412 1415 if (!data->m_computedStyle) 1413 1416 data->m_computedStyle = document()->styleForElementIgnoringPendingStylesheets(this); 1414 return data->m_computedStyle.get();1417 return pseudoElementSpecifier ? data->m_computedStyle->getCachedPseudoStyle(pseudoElementSpecifier) : data->m_computedStyle.get(); 1415 1418 } 1416 1419 -
trunk/WebCore/dom/Element.h
r57012 r57809 202 202 virtual void recalcStyle(StyleChange = NoChange); 203 203 204 virtual RenderStyle* computedStyle();204 RenderStyle* computedStyle(PseudoId = NOPSEUDO); 205 205 206 206 void dispatchAttrRemovalEvent(Attribute*); … … 313 313 virtual const AtomicString& virtualLocalName() const { return localName(); } 314 314 virtual const AtomicString& virtualNamespaceURI() const { return namespaceURI(); } 315 virtual RenderStyle* virtualComputedStyle(PseudoId pseudoElementSpecifier = NOPSEUDO) { return computedStyle(pseudoElementSpecifier); } 315 316 316 317 // cloneNode is private so that non-virtual cloneElementWithChildren and cloneElementWithoutChildren -
trunk/WebCore/dom/Node.cpp
r57116 r57809 1433 1433 } 1434 1434 1435 RenderStyle* Node:: computedStyle()1436 { 1437 return parent() ? parent()->computedStyle( ) : 0;1435 RenderStyle* Node::virtualComputedStyle(PseudoId pseudoElementSpecifier) 1436 { 1437 return parent() ? parent()->computedStyle(pseudoElementSpecifier) : 0; 1438 1438 } 1439 1439 -
trunk/WebCore/dom/Node.h
r56152 r57809 28 28 #include "EventTarget.h" 29 29 #include "KURLHash.h" 30 #include "RenderStyleConstants.h" 30 31 #include "ScriptWrappable.h" 31 32 #include "TreeShared.h" … … 446 447 virtual void setRenderStyle(PassRefPtr<RenderStyle>); 447 448 448 virtual RenderStyle* computedStyle();449 RenderStyle* computedStyle(PseudoId pseudoElementSpecifier = NOPSEUDO) { return virtualComputedStyle(pseudoElementSpecifier); } 449 450 450 451 // ----------------------------------------------------------------------------- … … 600 601 virtual const AtomicString& virtualLocalName() const; 601 602 virtual const AtomicString& virtualNamespaceURI() const; 603 virtual RenderStyle* virtualComputedStyle(PseudoId = NOPSEUDO); 602 604 603 605 Element* ancestorElement() const; -
trunk/WebCore/page/DOMWindow.cpp
r57077 r57809 1144 1144 } 1145 1145 1146 PassRefPtr<CSSStyleDeclaration> DOMWindow::getComputedStyle(Element* elt, const String& ) const1146 PassRefPtr<CSSStyleDeclaration> DOMWindow::getComputedStyle(Element* elt, const String& pseudoElt) const 1147 1147 { 1148 1148 if (!elt) 1149 1149 return 0; 1150 1150 1151 // FIXME: This needs take pseudo elements into account. 1152 return computedStyle(elt); 1151 return computedStyle(elt, false, pseudoElt); 1153 1152 } 1154 1153
Note: See TracChangeset
for help on using the changeset viewer.