Changeset 82880 in webkit
- Timestamp:
- Apr 4, 2011 3:15:57 PM (13 years ago)
- Location:
- trunk
- Files:
-
- 2 added
- 23 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r82879 r82880 1 2011-04-04 MORITA Hajime <morrita@google.com> 2 3 Reviewed by Dimitri Glazkov. 4 5 Convert <meter> shadow DOM to a DOM-based shadow. 6 https://bugs.webkit.org/show_bug.cgi?id=50661 7 8 Updated expectations due to shadow structure chagne. 9 Also updated meter-styles.html pixel result because the render tree is now laid out 10 as normal flexboxes and its layout result is actually different, 11 especially if there are non-zero borders on shadow elements. 12 13 * fast/dom/HTMLMeterElement/meter-styles.html: 14 * platform/mac/fast/dom/HTMLMeterElement/meter-styles-changing-pseudo-expected.txt: 15 * platform/mac/fast/dom/HTMLMeterElement/meter-styles-expected.checksum: 16 * platform/mac/fast/dom/HTMLMeterElement/meter-styles-expected.png: 17 * platform/mac/fast/dom/HTMLMeterElement/meter-styles-expected.txt: 18 1 19 2011-04-04 Adrienne Walker <enne@google.com> 2 20 -
trunk/LayoutTests/fast/dom/HTMLMeterElement/meter-styles.html
r82686 r82880 13 13 meter.barstyled::-webkit-meter-bar { background: gray; border-style: solid; border-width: 2px; border-color: #222; } 14 14 meter.valstyled::-webkit-meter-optimum-value { background: green; border-style: solid; border-width: 2px; border-color: #7c7; } 15 meter#bar-paddings { -webkit-appearance: none; } 16 meter#bar-paddings::-webkit-meter-bar { padding: 5px; } 15 17 </style> 16 18 </head> … … 56 58 </ul> 57 59 </div> 60 <h2>Providing bar paddings</h2> 61 <div style="background-color: #eee"> 62 <meter id="bar-paddings" min="0" max="100" low="30" high="60" optimum="50" value="50" ></meter> has "padding" on the bar. 63 </ul> 64 </div> 58 65 </body> 59 66 </html> -
trunk/LayoutTests/platform/mac/fast/dom/HTMLMeterElement/meter-styles-changing-pseudo-expected.txt
r82686 r82880 13 13 RenderMeter {METER} at (0,0) size 80x16 14 14 RenderBlock {DIV} at (0,0) size 80x16 [bgcolor=#808080] 15 RenderBlock {DIV} at (0,0) size 72x16 [bgcolor=#008000]15 RenderBlock {DIV} at (0,0) size 72x16 [bgcolor=#008000] 16 16 RenderText {#text} at (0,0) size 0x0 -
trunk/LayoutTests/platform/mac/fast/dom/HTMLMeterElement/meter-styles-expected.checksum
r82686 r82880 1 68de127fae2b71bbf82c2d53c2787cc1 1 f284e9ed2b55b4536bd76d97dcd4188b -
trunk/LayoutTests/platform/mac/fast/dom/HTMLMeterElement/meter-styles-expected.txt
r82686 r82880 11 11 RenderMeter {METER} at (0,1) size 80x16 12 12 RenderBlock {DIV} at (0,0) size 80x16 13 RenderBlock {DIV} at (0,0) size 20x1613 RenderBlock {DIV} at (0,0) size 20x16 14 14 RenderText {#text} at (80,0) size 4x18 15 15 text run at (80,0) width 4: " " 16 16 RenderMeter {METER} at (84,1) size 80x16 17 17 RenderBlock {DIV} at (0,0) size 80x16 18 RenderBlock {DIV} at (0,0) size 36x1618 RenderBlock {DIV} at (0,0) size 36x16 19 19 RenderText {#text} at (164,0) size 4x18 20 20 text run at (164,0) width 4: " " 21 21 RenderMeter {METER} at (168,1) size 80x16 22 22 RenderBlock {DIV} at (0,0) size 80x16 23 RenderBlock {DIV} at (0,0) size 60x1623 RenderBlock {DIV} at (0,0) size 60x16 24 24 RenderListItem {LI} at (43,21) size 732x41 25 25 RenderMeter {METER} at (0,0) size 30x40 … … 33 33 RenderText {#text} at (0,0) size 150x18 34 34 text run at (0,0) width 150: "Providing meter styles" 35 RenderBlock {DIV} at (0,107) size 784x 102[bgcolor=#EEEEEE]36 RenderBlock {UL} at (3,0) size 778x 10237 RenderListItem {LI} at (43,0) size 732x 3238 RenderMeter {METER} at (0, 0) size 230x31[bgcolor=#AAAACC] [border: (10px solid #222244) (50px solid #222244) (5px solid #222244) (100px solid #222244)]39 RenderBlock {DIV} at (100,10) size 80x1640 RenderBlock {DIV} at (100,10) size 64x1641 RenderText {#text} at ( 230,14) size 70x1842 text run at ( 230,14) width 70: " has border"43 RenderListItem {LI} at (43, 35) size 732x3244 RenderMeter {METER} at (0, 0) size 230x31[bgcolor=#AAAACC]45 RenderBlock {DIV} at (100,10) size 80x1646 RenderBlock {DIV} at (100,10) size 64x1647 RenderText {#text} at ( 230,14) size 80x1848 text run at ( 230,14) width 80: " has padding"49 RenderListItem {LI} at (43, 70) size 732x3235 RenderBlock {DIV} at (0,107) size 784x74 [bgcolor=#EEEEEE] 36 RenderBlock {UL} at (3,0) size 778x74 37 RenderListItem {LI} at (43,0) size 732x18 38 RenderMeter {METER} at (0,1) size 150x16 [bgcolor=#AAAACC] [border: (10px solid #222244) (50px solid #222244) (5px solid #222244) (100px solid #222244)] 39 RenderBlock {DIV} at (100,10) size 0x1 40 RenderBlock {DIV} at (0,0) size 0x1 41 RenderText {#text} at (150,0) size 70x18 42 text run at (150,0) width 70: " has border" 43 RenderListItem {LI} at (43,21) size 732x18 44 RenderMeter {METER} at (0,1) size 150x16 [bgcolor=#AAAACC] 45 RenderBlock {DIV} at (100,10) size 0x1 46 RenderBlock {DIV} at (0,0) size 0x1 47 RenderText {#text} at (150,0) size 80x18 48 text run at (150,0) width 80: " has padding" 49 RenderListItem {LI} at (43,42) size 732x32 50 50 RenderMeter {METER} at (100,10) size 80x16 [bgcolor=#AAAACC] 51 51 RenderBlock {DIV} at (0,0) size 80x16 52 RenderBlock {DIV} at (0,0) size 64x1652 RenderBlock {DIV} at (0,0) size 64x16 53 53 RenderText {#text} at (230,14) size 73x18 54 54 text run at (230,14) width 73: " has margin" 55 RenderBlock {H2} at (3, 212) size 778x1855 RenderBlock {H2} at (3,184) size 778x18 56 56 RenderText {#text} at (0,0) size 224x18 57 57 text run at (0,0) width 224: "Providing bar and/or value styles" 58 RenderBlock {DIV} at (0,2 33) size 784x165 [bgcolor=#EEEEEE]58 RenderBlock {DIV} at (0,205) size 784x165 [bgcolor=#EEEEEE] 59 59 RenderBlock {UL} at (3,0) size 778x81 60 60 RenderBlock (anonymous) at (40,0) size 738x18 … … 80 80 RenderMeter {METER} at (0,1) size 80x16 81 81 RenderBlock {DIV} at (0,0) size 80x16 82 RenderBlock {DIV} at (0,0) size 64x16 [bgcolor=#008000] [border: (2px solid #77CC77)]82 RenderBlock {DIV} at (0,0) size 64x16 [bgcolor=#008000] [border: (2px solid #77CC77)] 83 83 RenderText {#text} at (80,0) size 270x18 84 84 text run at (80,0) width 270: " has bar style, should have solid value part." … … 86 86 RenderMeter {METER} at (0,1) size 80x16 87 87 RenderBlock {DIV} at (0,0) size 80x16 [bgcolor=#808080] [border: (2px solid #222222)] 88 RenderBlock {DIV} at (0,0) size 64x1688 RenderBlock {DIV} at (2,2) size 60x12 89 89 RenderText {#text} at (80,0) size 255x18 90 90 text run at (80,0) width 255: " has value style, should be solid bar part." … … 92 92 RenderMeter {METER} at (0,1) size 80x16 93 93 RenderBlock {DIV} at (0,0) size 80x16 [bgcolor=#808080] [border: (2px solid #222222)] 94 RenderBlock {DIV} at (0,0) size 64x16[bgcolor=#008000] [border: (2px solid #77CC77)]94 RenderBlock {DIV} at (2,2) size 60x12 [bgcolor=#008000] [border: (2px solid #77CC77)] 95 95 RenderText {#text} at (80,0) size 235x18 96 96 text run at (80,0) width 235: " should have solid bar and value part." 97 RenderBlock {H2} at (3, 401) size 778x1897 RenderBlock {H2} at (3,373) size 778x18 98 98 RenderText {#text} at (0,0) size 156x18 99 99 text run at (0,0) width 156: "Providing appearances" 100 RenderBlock {DIV} at (0, 422) size 784x39 [bgcolor=#EEEEEE]100 RenderBlock {DIV} at (0,394) size 784x39 [bgcolor=#EEEEEE] 101 101 RenderBlock {UL} at (3,0) size 778x39 102 102 RenderListItem {LI} at (43,0) size 732x18 103 103 RenderMeter {METER} at (0,1) size 80x16 104 104 RenderBlock {DIV} at (0,0) size 80x16 105 RenderBlock {DIV} at (0,0) size 64x16105 RenderBlock {DIV} at (0,0) size 64x16 106 106 RenderText {#text} at (80,0) size 375x18 107 107 text run at (80,0) width 375: " has \"none\" appearance, should be styled with default style." … … 110 110 RenderText {#text} at (80,0) size 276x18 111 111 text run at (80,0) width 276: " has \"meter\" appearance, should be themed." 112 RenderBlock {H2} at (3,436) size 778x18 113 RenderText {#text} at (0,0) size 161x18 114 text run at (0,0) width 161: "Providing bar paddings" 115 RenderBlock {DIV} at (0,457) size 784x18 [bgcolor=#EEEEEE] 116 RenderMeter {METER} at (0,1) size 80x16 117 RenderBlock {DIV} at (0,0) size 80x16 118 RenderBlock {DIV} at (5,5) size 35x6 119 RenderText {#text} at (80,0) size 165x18 120 text run at (80,0) width 165: " has \"padding\" on the bar." -
trunk/Source/WebCore/Android.mk
r82465 r82880 355 355 \ 356 356 html/shadow/MediaControls.cpp \ 357 html/shadow/MeterShadowElement.cpp \ 357 358 html/shadow/SliderThumbElement.cpp \ 358 359 html/shadow/TextControlInnerElements.cpp \ -
trunk/Source/WebCore/CMakeLists.txt
r82800 r82880 874 874 875 875 html/shadow/MediaControls.cpp 876 html/shadow/MeterShadowElement.cpp 876 877 html/shadow/SliderThumbElement.cpp 877 878 html/shadow/TextControlInnerElements.cpp -
trunk/Source/WebCore/ChangeLog
r82878 r82880 1 2011-04-04 MORITA Hajime <morrita@google.com> 2 3 Reviewed by Dimitri Glazkov. 4 5 Convert <meter> shadow DOM to a DOM-based shadow. 6 https://bugs.webkit.org/show_bug.cgi?id=50661 7 8 Eliminated a large part of <meter> custom layout code, 9 which is replaced by a shadow tree. 10 Note that the shadow tree is created on construction time and 11 will remain during the host HTMLMeterElement lifecycle. 12 13 * Android.mk: 14 * CMakeLists.txt: 15 * GNUmakefile.am: 16 * WebCore.gypi: 17 * WebCore.pro: 18 * WebCore.vcproj/WebCore.vcproj: 19 * WebCore.xcodeproj/project.pbxproj: 20 * css/CSSMutableStyleDeclaration.cpp: 21 (WebCore::CSSMutableStyleDeclaration::setProperty): 22 * css/CSSMutableStyleDeclaration.h: 23 * css/CSSSelector.cpp: 24 (WebCore::CSSSelector::pseudoId): 25 (WebCore::nameToPseudoTypeMap): 26 (WebCore::CSSSelector::extractPseudoType): 27 * css/CSSSelector.h: 28 * css/html.css: 29 (meter): 30 (meter::-webkit-meter-bar): 31 (meter::-webkit-meter-optimum-value): 32 (meter::-webkit-meter-suboptimum-value): 33 (meter::-webkit-meter-even-less-good-value): 34 * html/HTMLMeterElement.cpp: 35 (WebCore::HTMLMeterElement::~HTMLMeterElement): 36 (WebCore::HTMLMeterElement::parseMappedAttribute): 37 (WebCore::HTMLMeterElement::attach): 38 (WebCore::HTMLMeterElement::valueRatio): 39 (WebCore::HTMLMeterElement::didElementStateChange): 40 (WebCore::HTMLMeterElement::createShadowSubtree): 41 * html/HTMLMeterElement.h: 42 * html/shadow/MeterShadowElement.cpp: Added. 43 (WebCore::MeterShadowElement::MeterShadowElement): 44 (WebCore::MeterShadowElement::meterElement): 45 (WebCore::MeterShadowElement::rendererIsNeeded): 46 (WebCore::MeterBarElement::shadowPseudoId): 47 (WebCore::MeterValueElement::shadowPseudoId): 48 (WebCore::MeterValueElement::setWidthPercentage): 49 * html/shadow/MeterShadowElement.h: Added. 50 (WebCore::MeterBarElement::MeterBarElement): 51 (WebCore::MeterBarElement::create): 52 (WebCore::MeterValueElement::MeterValueElement): 53 (WebCore::MeterValueElement::create): 54 * rendering/RenderMeter.cpp: 55 (WebCore::RenderMeter::RenderMeter): 56 (WebCore::RenderMeter::~RenderMeter): 57 (WebCore::RenderMeter::valueRatio): 58 * rendering/RenderMeter.h: 59 (WebCore::RenderMeter::renderName): 60 (WebCore::RenderMeter::isMeter): 61 (WebCore::RenderMeter::requiresForcedStyleRecalcPropagation): 62 (WebCore::RenderMeter::canHaveChildren): 63 1 64 2011-04-04 Martin Robinson <mrobinson@igalia.com> 2 65 -
trunk/Source/WebCore/GNUmakefile.am
r82878 r82880 1922 1922 Source/WebCore/html/shadow/MediaControls.cpp \ 1923 1923 Source/WebCore/html/shadow/MediaControls.h \ 1924 Source/WebCore/html/shadow/MeterShadowElement.cpp \ 1925 Source/WebCore/html/shadow/MeterShadowElement.h \ 1924 1926 Source/WebCore/html/shadow/ProgressBarValueElement.h \ 1925 1927 Source/WebCore/html/shadow/SliderThumbElement.cpp \ -
trunk/Source/WebCore/WebCore.gypi
r82828 r82880 3146 3146 'html/shadow/MediaControls.cpp', 3147 3147 'html/shadow/MediaControls.h', 3148 'html/shadow/MeterShadowElement.cpp', 3149 'html/shadow/MeterShadowElement.h', 3148 3150 'html/shadow/ProgressBarValueElement.h', 3149 3151 'html/shadow/SliderThumbElement.cpp', -
trunk/Source/WebCore/WebCore.pro
r82828 r82880 801 801 html/parser/XSSFilter.cpp \ 802 802 html/shadow/MediaControls.cpp \ 803 html/shadow/MeterShadowElement.cpp \ 803 804 html/shadow/SliderThumbElement.cpp \ 804 805 html/shadow/TextControlInnerElements.cpp \ -
trunk/Source/WebCore/WebCore.vcproj/WebCore.vcproj
r82869 r82880 56302 56302 </File> 56303 56303 <File 56304 RelativePath="..\html\shadow\MeterShadowElement.cpp" 56305 > 56306 </File> 56307 <File 56308 RelativePath="..\html\shadow\MeterShadowElement.h" 56309 > 56310 </File> 56311 <File 56304 56312 RelativePath="..\html\shadow\ProgressBarValueElement.h" 56305 56313 > -
trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj
r82862 r82880 3217 3217 A77D0012133B0AEB00D6658C /* TextChecking.h in Headers */ = {isa = PBXBuildFile; fileRef = A77D0011133B0AEB00D6658C /* TextChecking.h */; settings = {ATTRIBUTES = (Private, ); }; }; 3218 3218 A784941B0B5FE507001E237A /* Clipboard.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A784941A0B5FE507001E237A /* Clipboard.cpp */; }; 3219 A78E526F1346BD1700AD9C31 /* MeterShadowElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A78E526D1346BD1700AD9C31 /* MeterShadowElement.cpp */; }; 3220 A78E52701346BD1700AD9C31 /* MeterShadowElement.h in Headers */ = {isa = PBXBuildFile; fileRef = A78E526E1346BD1700AD9C31 /* MeterShadowElement.h */; }; 3219 3221 A78FE13B12366B1000ACE8D0 /* SpellChecker.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A78FE13912366B1000ACE8D0 /* SpellChecker.cpp */; }; 3220 3222 A78FE13C12366B1000ACE8D0 /* SpellChecker.h in Headers */ = {isa = PBXBuildFile; fileRef = A78FE13A12366B1000ACE8D0 /* SpellChecker.h */; settings = {ATTRIBUTES = (Private, ); }; }; … … 9729 9731 A77D0011133B0AEB00D6658C /* TextChecking.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TextChecking.h; sourceTree = "<group>"; }; 9730 9732 A784941A0B5FE507001E237A /* Clipboard.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = Clipboard.cpp; sourceTree = "<group>"; }; 9733 A78E526D1346BD1700AD9C31 /* MeterShadowElement.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MeterShadowElement.cpp; sourceTree = "<group>"; }; 9734 A78E526E1346BD1700AD9C31 /* MeterShadowElement.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MeterShadowElement.h; sourceTree = "<group>"; }; 9731 9735 A78FE13912366B1000ACE8D0 /* SpellChecker.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SpellChecker.cpp; sourceTree = "<group>"; }; 9732 9736 A78FE13A12366B1000ACE8D0 /* SpellChecker.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 4; path = SpellChecker.h; sourceTree = "<group>"; }; … … 13410 13414 4157AF7F12F1FB0400A8C6F5 /* MediaControls.cpp */, 13411 13415 4157AF7E12F1FB0400A8C6F5 /* MediaControls.h */, 13416 A78E526D1346BD1700AD9C31 /* MeterShadowElement.cpp */, 13417 A78E526E1346BD1700AD9C31 /* MeterShadowElement.h */, 13412 13418 A7FE819B12FA677700850C1E /* ProgressBarValueElement.h */, 13413 13419 4150F9F012B6E0E70008C860 /* SliderThumbElement.cpp */, … … 21827 21833 89878569122CA064003AABDA /* Metadata.h in Headers */, 21828 21834 8987856A122CA064003AABDA /* MetadataCallback.h in Headers */, 21835 A78E52701346BD1700AD9C31 /* MeterShadowElement.h in Headers */, 21829 21836 BC772C4F0C4EB3040083285F /* MIMETypeRegistry.h in Headers */, 21830 21837 C6D74AD509AA282E000B0A52 /* ModifySelectionListLevel.h in Headers */, … … 24710 24717 E1ADECC00E76ACF1004A1A5E /* MessagePort.cpp in Sources */, 24711 24718 41BF700B0FE86F49005E8DEC /* MessagePortChannel.cpp in Sources */, 24719 A78E526F1346BD1700AD9C31 /* MeterShadowElement.cpp in Sources */, 24712 24720 BC772C4E0C4EB3040083285F /* MIMETypeRegistry.cpp in Sources */, 24713 24721 BC772C5E0C4EB3440083285F /* MIMETypeRegistryMac.mm in Sources */, -
trunk/Source/WebCore/css/CSSMutableStyleDeclaration.cpp
r81092 r82880 606 606 } 607 607 608 bool CSSMutableStyleDeclaration::setProperty(int propertyID, double value, CSSPrimitiveValue::UnitTypes unit, bool important, bool notifyChanged) 609 { 610 CSSProperty property(propertyID, CSSPrimitiveValue::create(value, unit), important); 611 setPropertyInternal(property); 612 if (notifyChanged) 613 setNeedsStyleRecalc(); 614 return true; 615 } 616 608 617 void CSSMutableStyleDeclaration::setStringProperty(int propertyId, const String &value, CSSPrimitiveValue::UnitTypes type, bool important) 609 618 { -
trunk/Source/WebCore/css/CSSMutableStyleDeclaration.h
r81092 r82880 110 110 111 111 bool setProperty(int propertyID, int value, bool important = false, bool notifyChanged = true); 112 bool setProperty(int propertyId, double value, CSSPrimitiveValue::UnitTypes, bool important = false, bool notifyChanged = true); 112 113 bool setProperty(int propertyID, const String& value, bool important = false, bool notifyChanged = true); 113 114 … … 118 119 void setStringProperty(int propertyId, const String& value, CSSPrimitiveValue::UnitTypes, bool important = false); // parsed string value 119 120 void setImageProperty(int propertyId, const String& url, bool important = false); 120 121 121 122 // The following parses an entire new style declaration. 122 123 void parseDeclaration(const String& styleDeclaration); -
trunk/Source/WebCore/css/CSSSelector.cpp
r82686 r82880 161 161 case PseudoOuterSpinButton: 162 162 return OUTER_SPIN_BUTTON; 163 #if ENABLE(METER_TAG)164 case PseudoMeterBar:165 return METER_BAR;166 case PseudoMeterOptimum:167 return METER_OPTIMUM;168 case PseudoMeterSuboptimal:169 return METER_SUBOPTIMAL;170 case PseudoMeterEvenLessGood:171 return METER_EVEN_LESS_GOOD;172 #else173 case PseudoMeterBar:174 case PseudoMeterOptimum:175 case PseudoMeterSuboptimal:176 case PseudoMeterEvenLessGood:177 ASSERT_NOT_REACHED();178 return NOPSEUDO;179 #endif180 181 163 #if ENABLE(FULLSCREEN_API) 182 164 case PseudoFullScreen: … … 304 286 DEFINE_STATIC_LOCAL(AtomicString, optional, ("optional")); 305 287 DEFINE_STATIC_LOCAL(AtomicString, outerSpinButton, ("-webkit-outer-spin-button")); 306 #if ENABLE(METER_TAG)307 DEFINE_STATIC_LOCAL(AtomicString, meterBar, ("-webkit-meter-bar"));308 DEFINE_STATIC_LOCAL(AtomicString, meterOptimumValue, ("-webkit-meter-optimum-value"));309 DEFINE_STATIC_LOCAL(AtomicString, meterSuboptimalValue, ("-webkit-meter-suboptimal-value"));310 DEFINE_STATIC_LOCAL(AtomicString, meterEvenLessGoodValue, ("-webkit-meter-even-less-good-value"));311 #endif312 313 288 DEFINE_STATIC_LOCAL(AtomicString, required, ("required")); 314 289 DEFINE_STATIC_LOCAL(AtomicString, resizer, ("-webkit-resizer")); … … 398 373 nameToPseudoType->set(nthLastOfType.impl(), CSSSelector::PseudoNthLastOfType); 399 374 nameToPseudoType->set(outerSpinButton.impl(), CSSSelector::PseudoOuterSpinButton); 400 #if ENABLE(METER_TAG)401 nameToPseudoType->set(meterBar.impl(), CSSSelector::PseudoMeterBar);402 nameToPseudoType->set(meterOptimumValue.impl(), CSSSelector::PseudoMeterOptimum);403 nameToPseudoType->set(meterSuboptimalValue.impl(), CSSSelector::PseudoMeterSuboptimal);404 nameToPseudoType->set(meterEvenLessGoodValue.impl(), CSSSelector::PseudoMeterEvenLessGood);405 #endif406 375 nameToPseudoType->set(root.impl(), CSSSelector::PseudoRoot); 407 376 nameToPseudoType->set(windowInactive.impl(), CSSSelector::PseudoWindowInactive); … … 478 447 #endif 479 448 case PseudoInnerSpinButton: 480 case PseudoMeterBar:481 case PseudoMeterOptimum:482 case PseudoMeterSuboptimal:483 case PseudoMeterEvenLessGood:484 case PseudoOuterSpinButton:485 449 case PseudoResizer: 486 450 case PseudoScrollbar: -
trunk/Source/WebCore/css/CSSSelector.h
r82686 r82880 183 183 PseudoSearchResultsDecoration, 184 184 PseudoSearchResultsButton, 185 PseudoMeterBar,186 PseudoMeterOptimum,187 PseudoMeterSuboptimal,188 PseudoMeterEvenLessGood,189 185 PseudoInputListButton, 190 186 #if ENABLE(INPUT_SPEECH) -
trunk/Source/WebCore/css/html.css
r82686 r82880 674 674 meter { 675 675 -webkit-appearance: meter; 676 display: inline-block; 676 -webkit-box-sizing: border-box; 677 display: inline-box; 677 678 height: 1em; 678 679 width: 5em; … … 680 681 } 681 682 682 meter::-webkit-meter {683 -webkit-appearance: meter;684 }685 686 683 meter::-webkit-meter-bar { 687 -webkit-appearance: meter;688 684 background: -webkit-gradient(linear, left top, left bottom, from(#ddd), to(#ddd), color-stop(0.20, #eee), color-stop(0.45, #ccc), color-stop(0.55, #ccc)); 685 height: 100%; 686 -webkit-box-sizing: border-box; 689 687 } 690 688 691 689 meter::-webkit-meter-optimum-value { 692 -webkit-appearance: meter;693 690 background: -webkit-gradient(linear, left top, left bottom, from(#ad7), to(#ad7), color-stop(0.20, #cea), color-stop(0.45, #7a3), color-stop(0.55, #7a3)); 694 } 695 696 meter::-webkit-meter-suboptimal-value { 697 -webkit-appearance: meter; 691 height: 100%; 692 -webkit-box-sizing: border-box; 693 } 694 695 meter::-webkit-meter-suboptimum-value { 698 696 background: -webkit-gradient(linear, left top, left bottom, from(#fe7), to(#fe7), color-stop(0.20, #ffc), color-stop(0.45, #db3), color-stop(0.55, #db3)); 697 height: 100%; 698 -webkit-box-sizing: border-box; 699 699 } 700 700 701 701 meter::-webkit-meter-even-less-good-value { 702 -webkit-appearance: meter;703 702 background: -webkit-gradient(linear, left top, left bottom, from(#f77), to(#f77), color-stop(0.20, #fcc), color-stop(0.45, #d44), color-stop(0.55, #d44)); 703 height: 100%; 704 -webkit-box-sizing: border-box; 704 705 } 705 706 -
trunk/Source/WebCore/html/HTMLMeterElement.cpp
r73488 r82880 30 30 #include "HTMLNames.h" 31 31 #include "HTMLParserIdioms.h" 32 #include "MeterShadowElement.h" 32 33 #include "RenderMeter.h" 33 34 #include <wtf/StdLibExtras.h> … … 43 44 } 44 45 46 HTMLMeterElement::~HTMLMeterElement() 47 { 48 } 49 45 50 PassRefPtr<HTMLMeterElement> HTMLMeterElement::create(const QualifiedName& tagName, Document* document, HTMLFormElement* form) 46 51 { 47 return adoptRef(new HTMLMeterElement(tagName, document, form)); 52 RefPtr<HTMLMeterElement> meter = adoptRef(new HTMLMeterElement(tagName, document, form)); 53 meter->createShadowSubtree(); 54 return meter; 48 55 } 49 56 … … 61 68 void HTMLMeterElement::parseMappedAttribute(Attribute* attribute) 62 69 { 63 if (attribute->name() == valueAttr || attribute->name() == minAttr || attribute->name() == maxAttr || attribute->name() == lowAttr || attribute->name() == highAttr || attribute->name() == optimumAttr) { 64 if (renderer()) 65 renderer()->updateFromElement(); 66 } else 70 if (attribute->name() == valueAttr || attribute->name() == minAttr || attribute->name() == maxAttr || attribute->name() == lowAttr || attribute->name() == highAttr || attribute->name() == optimumAttr) 71 didElementStateChange(); 72 else 67 73 HTMLFormControlElement::parseMappedAttribute(attribute); 68 74 } … … 71 77 { 72 78 HTMLFormControlElement::attach(); 73 if (renderer()) 74 renderer()->updateFromElement(); 79 didElementStateChange(); 75 80 } 76 81 … … 204 209 } 205 210 211 double HTMLMeterElement::valueRatio() const 212 { 213 double min = this->min(); 214 double max = this->max(); 215 double value = this->value(); 216 217 if (max <= min) 218 return 0; 219 return (value - min) / (max - min); 220 } 221 222 void HTMLMeterElement::didElementStateChange() 223 { 224 m_value->setWidthPercentage(valueRatio()*100); 225 } 226 227 void HTMLMeterElement::createShadowSubtree() 228 { 229 RefPtr<MeterBarElement> bar = MeterBarElement::create(document()); 230 m_value = MeterValueElement::create(document()); 231 ExceptionCode ec = 0; 232 bar->appendChild(m_value, ec); 233 setShadowRoot(bar); 234 } 235 206 236 } // namespace 207 237 #endif -
trunk/Source/WebCore/html/HTMLMeterElement.h
r78232 r82880 26 26 27 27 namespace WebCore { 28 29 class MeterValueElement; 28 30 29 31 class HTMLMeterElement : public HTMLFormControlElement { … … 55 57 void setOptimum(double, ExceptionCode&); 56 58 59 double valueRatio() const; 57 60 GaugeRegion gaugeRegion() const; 61 58 62 private: 59 63 HTMLMeterElement(const QualifiedName&, Document*, HTMLFormElement*); 64 virtual ~HTMLMeterElement(); 60 65 61 66 virtual bool recalcWillValidate() const { return false; } 67 virtual const AtomicString& formControlType() const; 68 virtual RenderObject* createRenderer(RenderArena*, RenderStyle*); 69 virtual void parseMappedAttribute(Attribute*); 70 virtual void attach(); 62 71 63 virtual const AtomicString& formControlType() const; 72 void didElementStateChange(); 73 void createShadowSubtree(); 64 74 65 virtual RenderObject* createRenderer(RenderArena*, RenderStyle*); 66 67 virtual void parseMappedAttribute(Attribute*); 68 69 virtual void attach(); 75 RefPtr<MeterValueElement> m_value; 70 76 }; 71 77 -
trunk/Source/WebCore/rendering/RenderMeter.cpp
r82686 r82880 37 37 38 38 RenderMeter::RenderMeter(HTMLMeterElement* element) 39 : Render Indicator(element)39 : RenderBlock(element) 40 40 { 41 41 } … … 43 43 RenderMeter::~RenderMeter() 44 44 { 45 detachShadows();46 }47 48 PassRefPtr<ShadowBlockElement> RenderMeter::createPart(PseudoId pseudoId)49 {50 RefPtr<ShadowBlockElement> element = ShadowBlockElement::createForPart(toHTMLElement(node()), pseudoId);51 if (element->renderer())52 addChild(element->renderer());53 return element;54 }55 56 void RenderMeter::updateFromElement()57 {58 updateShadows();59 RenderIndicator::updateFromElement();60 45 } 61 46 … … 72 57 } 73 58 74 void RenderMeter::layoutParts()75 {76 if (shadowAttached()) {77 m_barPart->layoutAsPart(barPartRect());78 m_valuePart->layoutAsPart(valuePartRect());79 }80 }81 82 void RenderMeter::styleDidChange(StyleDifference diff, const RenderStyle* oldStyle)83 {84 RenderBlock::styleDidChange(diff, oldStyle);85 86 if (!oldStyle)87 return;88 89 if (oldStyle->appearance() != style()->appearance()) {90 detachShadows();91 updateShadows();92 }93 }94 95 bool RenderMeter::shouldHaveParts() const96 {97 return !theme()->supportsMeter(style()->appearance());98 }99 100 59 double RenderMeter::valueRatio() const 101 60 { 102 HTMLMeterElement* element = static_cast<HTMLMeterElement*>(node()); 103 double min = element->min(); 104 double max = element->max(); 105 double value = element->value(); 106 107 if (max <= min) 108 return 0; 109 return (value - min) / (max - min); 110 } 111 112 IntRect RenderMeter::barPartRect() const 113 { 114 return IntRect(borderLeft() + paddingLeft(), borderTop() + paddingTop(), lround(width() - borderLeft() - paddingLeft() - borderRight() - paddingRight()), height() - borderTop() - paddingTop() - borderBottom() - paddingBottom()); 115 } 116 117 IntRect RenderMeter::valuePartRect() const 118 { 119 IntRect rect = barPartRect(); 120 int width = static_cast<int>(rect.width()*valueRatio()); 121 if (!style()->isLeftToRightDirection()) { 122 rect.setX(rect.x() + (rect.width() - width)); 123 rect.setWidth(width); 124 } else 125 rect.setWidth(width); 126 127 return rect; 128 } 129 130 PseudoId RenderMeter::valuePseudoId() const 131 { 132 HTMLMeterElement* element = static_cast<HTMLMeterElement*>(node()); 133 134 switch (element->gaugeRegion()) { 135 case HTMLMeterElement::GaugeRegionOptimum: 136 return METER_OPTIMUM; 137 case HTMLMeterElement::GaugeRegionSuboptimal: 138 return METER_SUBOPTIMAL; 139 case HTMLMeterElement::GaugeRegionEvenLessGood: 140 return METER_EVEN_LESS_GOOD; 141 } 142 143 ASSERT_NOT_REACHED(); 144 return NOPSEUDO; 145 } 146 147 PseudoId RenderMeter::barPseudoId() const 148 { 149 return METER_BAR; 150 } 151 152 void RenderMeter::detachShadows() 153 { 154 if (shadowAttached()) { 155 m_valuePart->detach(); 156 m_valuePart = 0; 157 m_barPart->detach(); 158 m_barPart = 0; 159 } 160 } 161 162 void RenderMeter::updateShadows() 163 { 164 if (!shadowAttached() && shouldHaveParts()) { 165 m_barPart = createPart(barPseudoId()); 166 m_valuePart = createPart(valuePseudoId()); 167 } 168 169 if (shadowAttached()) { 170 m_barPart->updateStyleForPart(barPseudoId()); 171 m_valuePart->updateStyleForPart(valuePseudoId()); 172 } 61 return static_cast<HTMLMeterElement*>(node())->valueRatio(); 173 62 } 174 63 -
trunk/Source/WebCore/rendering/RenderMeter.h
r82686 r82880 33 33 class ShadowBlockElement; 34 34 35 class RenderMeter : public Render Indicator{35 class RenderMeter : public RenderBlock { 36 36 public: 37 37 RenderMeter(HTMLMeterElement*); … … 39 39 40 40 private: 41 virtual const char* renderName() const { return "RenderMeter"; }42 virtual bool isMeter() const { return true; }43 virtual void updateFromElement();44 41 virtual void computeLogicalWidth(); 45 42 virtual void computeLogicalHeight(); 46 43 47 virtual void layoutParts(); 48 virtual void styleDidChange(StyleDifference, const RenderStyle* oldStyle); 49 50 void updateShadows(); 51 void detachShadows(); 52 53 bool shadowAttached() const { return m_barPart; } 54 IntRect valuePartRect() const; 55 PseudoId valuePseudoId() const; 56 IntRect barPartRect() const; 57 PseudoId barPseudoId() const; 44 virtual const char* renderName() const { return "RenderMeter"; } 45 virtual bool isMeter() const { return true; } 46 virtual bool requiresForcedStyleRecalcPropagation() const { return true; } 47 virtual bool canHaveChildren() const { return false; } 58 48 59 49 double valueRatio() const; 60 bool shouldHaveParts() const;61 PassRefPtr<ShadowBlockElement> createPart(PseudoId);62 63 RefPtr<ShadowBlockElement> m_barPart;64 RefPtr<ShadowBlockElement> m_valuePart;65 50 }; 66 51
Note: See TracChangeset
for help on using the changeset viewer.