Changeset 82880 in webkit


Ignore:
Timestamp:
Apr 4, 2011 3:15:57 PM (13 years ago)
Author:
morrita@google.com
Message:

2011-04-04 MORITA Hajime <morrita@google.com>

Reviewed by Dimitri Glazkov.

Convert <meter> shadow DOM to a DOM-based shadow.
https://bugs.webkit.org/show_bug.cgi?id=50661

Updated expectations due to shadow structure chagne.
Also updated meter-styles.html pixel result because the render tree is now laid out
as normal flexboxes and its layout result is actually different,
especially if there are non-zero borders on shadow elements.

  • fast/dom/HTMLMeterElement/meter-styles.html:
  • platform/mac/fast/dom/HTMLMeterElement/meter-styles-changing-pseudo-expected.txt:
  • platform/mac/fast/dom/HTMLMeterElement/meter-styles-expected.checksum:
  • platform/mac/fast/dom/HTMLMeterElement/meter-styles-expected.png:
  • platform/mac/fast/dom/HTMLMeterElement/meter-styles-expected.txt:

2011-04-04 MORITA Hajime <morrita@google.com>

Reviewed by Dimitri Glazkov.

Convert <meter> shadow DOM to a DOM-based shadow.
https://bugs.webkit.org/show_bug.cgi?id=50661

Eliminated a large part of <meter> custom layout code,
which is replaced by a shadow tree.
Note that the shadow tree is created on construction time and
will remain during the host HTMLMeterElement lifecycle.

  • Android.mk:
  • CMakeLists.txt:
  • GNUmakefile.am:
  • WebCore.gypi:
  • WebCore.pro:
  • WebCore.vcproj/WebCore.vcproj:
  • WebCore.xcodeproj/project.pbxproj:
  • css/CSSMutableStyleDeclaration.cpp: (WebCore::CSSMutableStyleDeclaration::setProperty):
  • css/CSSMutableStyleDeclaration.h:
  • css/CSSSelector.cpp: (WebCore::CSSSelector::pseudoId): (WebCore::nameToPseudoTypeMap): (WebCore::CSSSelector::extractPseudoType):
  • css/CSSSelector.h:
  • css/html.css: (meter): (meter::-webkit-meter-bar): (meter::-webkit-meter-optimum-value): (meter::-webkit-meter-suboptimum-value): (meter::-webkit-meter-even-less-good-value):
  • html/HTMLMeterElement.cpp: (WebCore::HTMLMeterElement::~HTMLMeterElement): (WebCore::HTMLMeterElement::parseMappedAttribute): (WebCore::HTMLMeterElement::attach): (WebCore::HTMLMeterElement::valueRatio): (WebCore::HTMLMeterElement::didElementStateChange): (WebCore::HTMLMeterElement::createShadowSubtree):
  • html/HTMLMeterElement.h:
  • html/shadow/MeterShadowElement.cpp: Added. (WebCore::MeterShadowElement::MeterShadowElement): (WebCore::MeterShadowElement::meterElement): (WebCore::MeterShadowElement::rendererIsNeeded): (WebCore::MeterBarElement::shadowPseudoId): (WebCore::MeterValueElement::shadowPseudoId): (WebCore::MeterValueElement::setWidthPercentage):
  • html/shadow/MeterShadowElement.h: Added. (WebCore::MeterBarElement::MeterBarElement): (WebCore::MeterBarElement::create): (WebCore::MeterValueElement::MeterValueElement): (WebCore::MeterValueElement::create):
  • rendering/RenderMeter.cpp: (WebCore::RenderMeter::RenderMeter): (WebCore::RenderMeter::~RenderMeter): (WebCore::RenderMeter::valueRatio):
  • rendering/RenderMeter.h: (WebCore::RenderMeter::renderName): (WebCore::RenderMeter::isMeter): (WebCore::RenderMeter::requiresForcedStyleRecalcPropagation): (WebCore::RenderMeter::canHaveChildren):
Location:
trunk
Files:
2 added
23 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r82879 r82880  
     12011-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
    1192011-04-04  Adrienne Walker  <enne@google.com>
    220
  • trunk/LayoutTests/fast/dom/HTMLMeterElement/meter-styles.html

    r82686 r82880  
    1313  meter.barstyled::-webkit-meter-bar { background: gray; border-style: solid; border-width: 2px; border-color: #222; }
    1414  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; }
    1517</style>
    1618</head>
     
    5658  </ul>
    5759  </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>
    5865</body>
    5966</html>
  • trunk/LayoutTests/platform/mac/fast/dom/HTMLMeterElement/meter-styles-changing-pseudo-expected.txt

    r82686 r82880  
    1313        RenderMeter {METER} at (0,0) size 80x16
    1414          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]
    1616        RenderText {#text} at (0,0) size 0x0
  • trunk/LayoutTests/platform/mac/fast/dom/HTMLMeterElement/meter-styles-expected.checksum

    r82686 r82880  
    1 68de127fae2b71bbf82c2d53c2787cc1
     1f284e9ed2b55b4536bd76d97dcd4188b
  • trunk/LayoutTests/platform/mac/fast/dom/HTMLMeterElement/meter-styles-expected.txt

    r82686 r82880  
    1111          RenderMeter {METER} at (0,1) size 80x16
    1212            RenderBlock {DIV} at (0,0) size 80x16
    13             RenderBlock {DIV} at (0,0) size 20x16
     13              RenderBlock {DIV} at (0,0) size 20x16
    1414          RenderText {#text} at (80,0) size 4x18
    1515            text run at (80,0) width 4: " "
    1616          RenderMeter {METER} at (84,1) size 80x16
    1717            RenderBlock {DIV} at (0,0) size 80x16
    18             RenderBlock {DIV} at (0,0) size 36x16
     18              RenderBlock {DIV} at (0,0) size 36x16
    1919          RenderText {#text} at (164,0) size 4x18
    2020            text run at (164,0) width 4: " "
    2121          RenderMeter {METER} at (168,1) size 80x16
    2222            RenderBlock {DIV} at (0,0) size 80x16
    23             RenderBlock {DIV} at (0,0) size 60x16
     23              RenderBlock {DIV} at (0,0) size 60x16
    2424        RenderListItem {LI} at (43,21) size 732x41
    2525          RenderMeter {METER} at (0,0) size 30x40
     
    3333        RenderText {#text} at (0,0) size 150x18
    3434          text run at (0,0) width 150: "Providing meter styles"
    35       RenderBlock {DIV} at (0,107) size 784x102 [bgcolor=#EEEEEE]
    36         RenderBlock {UL} at (3,0) size 778x102
    37           RenderListItem {LI} at (43,0) size 732x32
    38             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 80x16
    40               RenderBlock {DIV} at (100,10) size 64x16
    41             RenderText {#text} at (230,14) size 70x18
    42               text run at (230,14) width 70: " has border"
    43           RenderListItem {LI} at (43,35) size 732x32
    44             RenderMeter {METER} at (0,0) size 230x31 [bgcolor=#AAAACC]
    45               RenderBlock {DIV} at (100,10) size 80x16
    46               RenderBlock {DIV} at (100,10) size 64x16
    47             RenderText {#text} at (230,14) size 80x18
    48               text run at (230,14) width 80: " has padding"
    49           RenderListItem {LI} at (43,70) size 732x32
     35      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
    5050            RenderMeter {METER} at (100,10) size 80x16 [bgcolor=#AAAACC]
    5151              RenderBlock {DIV} at (0,0) size 80x16
    52               RenderBlock {DIV} at (0,0) size 64x16
     52                RenderBlock {DIV} at (0,0) size 64x16
    5353            RenderText {#text} at (230,14) size 73x18
    5454              text run at (230,14) width 73: " has margin"
    55       RenderBlock {H2} at (3,212) size 778x18
     55      RenderBlock {H2} at (3,184) size 778x18
    5656        RenderText {#text} at (0,0) size 224x18
    5757          text run at (0,0) width 224: "Providing bar and/or value styles"
    58       RenderBlock {DIV} at (0,233) size 784x165 [bgcolor=#EEEEEE]
     58      RenderBlock {DIV} at (0,205) size 784x165 [bgcolor=#EEEEEE]
    5959        RenderBlock {UL} at (3,0) size 778x81
    6060          RenderBlock (anonymous) at (40,0) size 738x18
     
    8080            RenderMeter {METER} at (0,1) size 80x16
    8181              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)]
    8383            RenderText {#text} at (80,0) size 270x18
    8484              text run at (80,0) width 270: " has bar style, should have solid value part."
     
    8686            RenderMeter {METER} at (0,1) size 80x16
    8787              RenderBlock {DIV} at (0,0) size 80x16 [bgcolor=#808080] [border: (2px solid #222222)]
    88               RenderBlock {DIV} at (0,0) size 64x16
     88                RenderBlock {DIV} at (2,2) size 60x12
    8989            RenderText {#text} at (80,0) size 255x18
    9090              text run at (80,0) width 255: " has value style, should be solid bar part."
     
    9292            RenderMeter {METER} at (0,1) size 80x16
    9393              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)]
    9595            RenderText {#text} at (80,0) size 235x18
    9696              text run at (80,0) width 235: " should have solid bar and value part."
    97       RenderBlock {H2} at (3,401) size 778x18
     97      RenderBlock {H2} at (3,373) size 778x18
    9898        RenderText {#text} at (0,0) size 156x18
    9999          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]
    101101        RenderBlock {UL} at (3,0) size 778x39
    102102          RenderListItem {LI} at (43,0) size 732x18
    103103            RenderMeter {METER} at (0,1) size 80x16
    104104              RenderBlock {DIV} at (0,0) size 80x16
    105               RenderBlock {DIV} at (0,0) size 64x16
     105                RenderBlock {DIV} at (0,0) size 64x16
    106106            RenderText {#text} at (80,0) size 375x18
    107107              text run at (80,0) width 375: " has \"none\" appearance, should be styled with default style."
     
    110110            RenderText {#text} at (80,0) size 276x18
    111111              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  
    355355        \
    356356        html/shadow/MediaControls.cpp \
     357        html/shadow/MeterShadowElement.cpp \
    357358        html/shadow/SliderThumbElement.cpp \
    358359        html/shadow/TextControlInnerElements.cpp \
  • trunk/Source/WebCore/CMakeLists.txt

    r82800 r82880  
    874874
    875875    html/shadow/MediaControls.cpp
     876    html/shadow/MeterShadowElement.cpp
    876877    html/shadow/SliderThumbElement.cpp
    877878    html/shadow/TextControlInnerElements.cpp
  • trunk/Source/WebCore/ChangeLog

    r82878 r82880  
     12011-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
    1642011-04-04  Martin Robinson  <mrobinson@igalia.com>
    265
  • trunk/Source/WebCore/GNUmakefile.am

    r82878 r82880  
    19221922        Source/WebCore/html/shadow/MediaControls.cpp \
    19231923        Source/WebCore/html/shadow/MediaControls.h \
     1924        Source/WebCore/html/shadow/MeterShadowElement.cpp \
     1925        Source/WebCore/html/shadow/MeterShadowElement.h \
    19241926        Source/WebCore/html/shadow/ProgressBarValueElement.h \
    19251927        Source/WebCore/html/shadow/SliderThumbElement.cpp \
  • trunk/Source/WebCore/WebCore.gypi

    r82828 r82880  
    31463146            'html/shadow/MediaControls.cpp',
    31473147            'html/shadow/MediaControls.h',
     3148            'html/shadow/MeterShadowElement.cpp',
     3149            'html/shadow/MeterShadowElement.h',
    31483150            'html/shadow/ProgressBarValueElement.h',
    31493151            'html/shadow/SliderThumbElement.cpp',
  • trunk/Source/WebCore/WebCore.pro

    r82828 r82880  
    801801    html/parser/XSSFilter.cpp \
    802802    html/shadow/MediaControls.cpp \
     803    html/shadow/MeterShadowElement.cpp \
    803804    html/shadow/SliderThumbElement.cpp \
    804805    html/shadow/TextControlInnerElements.cpp \
  • trunk/Source/WebCore/WebCore.vcproj/WebCore.vcproj

    r82869 r82880  
    5630256302                                </File>
    5630356303                                <File
     56304                                        RelativePath="..\html\shadow\MeterShadowElement.cpp"
     56305                                        >
     56306                                </File>
     56307                                <File
     56308                                        RelativePath="..\html\shadow\MeterShadowElement.h"
     56309                                        >
     56310                                </File>
     56311                                <File
    5630456312                                        RelativePath="..\html\shadow\ProgressBarValueElement.h"
    5630556313                                        >
  • trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj

    r82862 r82880  
    32173217                A77D0012133B0AEB00D6658C /* TextChecking.h in Headers */ = {isa = PBXBuildFile; fileRef = A77D0011133B0AEB00D6658C /* TextChecking.h */; settings = {ATTRIBUTES = (Private, ); }; };
    32183218                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 */; };
    32193221                A78FE13B12366B1000ACE8D0 /* SpellChecker.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A78FE13912366B1000ACE8D0 /* SpellChecker.cpp */; };
    32203222                A78FE13C12366B1000ACE8D0 /* SpellChecker.h in Headers */ = {isa = PBXBuildFile; fileRef = A78FE13A12366B1000ACE8D0 /* SpellChecker.h */; settings = {ATTRIBUTES = (Private, ); }; };
     
    97299731                A77D0011133B0AEB00D6658C /* TextChecking.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TextChecking.h; sourceTree = "<group>"; };
    97309732                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>"; };
    97319735                A78FE13912366B1000ACE8D0 /* SpellChecker.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SpellChecker.cpp; sourceTree = "<group>"; };
    97329736                A78FE13A12366B1000ACE8D0 /* SpellChecker.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 4; path = SpellChecker.h; sourceTree = "<group>"; };
     
    1341013414                                4157AF7F12F1FB0400A8C6F5 /* MediaControls.cpp */,
    1341113415                                4157AF7E12F1FB0400A8C6F5 /* MediaControls.h */,
     13416                                A78E526D1346BD1700AD9C31 /* MeterShadowElement.cpp */,
     13417                                A78E526E1346BD1700AD9C31 /* MeterShadowElement.h */,
    1341213418                                A7FE819B12FA677700850C1E /* ProgressBarValueElement.h */,
    1341313419                                4150F9F012B6E0E70008C860 /* SliderThumbElement.cpp */,
     
    2182721833                                89878569122CA064003AABDA /* Metadata.h in Headers */,
    2182821834                                8987856A122CA064003AABDA /* MetadataCallback.h in Headers */,
     21835                                A78E52701346BD1700AD9C31 /* MeterShadowElement.h in Headers */,
    2182921836                                BC772C4F0C4EB3040083285F /* MIMETypeRegistry.h in Headers */,
    2183021837                                C6D74AD509AA282E000B0A52 /* ModifySelectionListLevel.h in Headers */,
     
    2471024717                                E1ADECC00E76ACF1004A1A5E /* MessagePort.cpp in Sources */,
    2471124718                                41BF700B0FE86F49005E8DEC /* MessagePortChannel.cpp in Sources */,
     24719                                A78E526F1346BD1700AD9C31 /* MeterShadowElement.cpp in Sources */,
    2471224720                                BC772C4E0C4EB3040083285F /* MIMETypeRegistry.cpp in Sources */,
    2471324721                                BC772C5E0C4EB3440083285F /* MIMETypeRegistryMac.mm in Sources */,
  • trunk/Source/WebCore/css/CSSMutableStyleDeclaration.cpp

    r81092 r82880  
    606606}
    607607
     608bool 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
    608617void CSSMutableStyleDeclaration::setStringProperty(int propertyId, const String &value, CSSPrimitiveValue::UnitTypes type, bool important)
    609618{
  • trunk/Source/WebCore/css/CSSMutableStyleDeclaration.h

    r81092 r82880  
    110110
    111111    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);
    112113    bool setProperty(int propertyID, const String& value, bool important = false, bool notifyChanged = true);
    113114
     
    118119    void setStringProperty(int propertyId, const String& value, CSSPrimitiveValue::UnitTypes, bool important = false); // parsed string value
    119120    void setImageProperty(int propertyId, const String& url, bool important = false);
    120  
     121
    121122    // The following parses an entire new style declaration.
    122123    void parseDeclaration(const String& styleDeclaration);
  • trunk/Source/WebCore/css/CSSSelector.cpp

    r82686 r82880  
    161161    case PseudoOuterSpinButton:
    162162        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 #else
    173     case PseudoMeterBar:
    174     case PseudoMeterOptimum:
    175     case PseudoMeterSuboptimal:
    176     case PseudoMeterEvenLessGood:
    177         ASSERT_NOT_REACHED();
    178         return NOPSEUDO;
    179 #endif
    180 
    181163#if ENABLE(FULLSCREEN_API)
    182164    case PseudoFullScreen:
     
    304286    DEFINE_STATIC_LOCAL(AtomicString, optional, ("optional"));
    305287    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 #endif
    312 
    313288    DEFINE_STATIC_LOCAL(AtomicString, required, ("required"));
    314289    DEFINE_STATIC_LOCAL(AtomicString, resizer, ("-webkit-resizer"));
     
    398373        nameToPseudoType->set(nthLastOfType.impl(), CSSSelector::PseudoNthLastOfType);
    399374        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 #endif
    406375        nameToPseudoType->set(root.impl(), CSSSelector::PseudoRoot);
    407376        nameToPseudoType->set(windowInactive.impl(), CSSSelector::PseudoWindowInactive);
     
    478447#endif
    479448    case PseudoInnerSpinButton:
    480     case PseudoMeterBar:
    481     case PseudoMeterOptimum:
    482     case PseudoMeterSuboptimal:
    483     case PseudoMeterEvenLessGood:
    484     case PseudoOuterSpinButton:
    485449    case PseudoResizer:
    486450    case PseudoScrollbar:
  • trunk/Source/WebCore/css/CSSSelector.h

    r82686 r82880  
    183183            PseudoSearchResultsDecoration,
    184184            PseudoSearchResultsButton,
    185             PseudoMeterBar,
    186             PseudoMeterOptimum,
    187             PseudoMeterSuboptimal,
    188             PseudoMeterEvenLessGood,
    189185            PseudoInputListButton,
    190186#if ENABLE(INPUT_SPEECH)
  • trunk/Source/WebCore/css/html.css

    r82686 r82880  
    674674meter {
    675675    -webkit-appearance: meter;
    676     display: inline-block;
     676    -webkit-box-sizing: border-box;
     677    display: inline-box;
    677678    height: 1em;
    678679    width: 5em;
     
    680681}
    681682
    682 meter::-webkit-meter {
    683     -webkit-appearance: meter;
    684 }
    685 
    686683meter::-webkit-meter-bar {
    687     -webkit-appearance: meter;
    688684    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;
    689687}
    690688
    691689meter::-webkit-meter-optimum-value {
    692     -webkit-appearance: meter;
    693690    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
     695meter::-webkit-meter-suboptimum-value {
    698696    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;
    699699}
    700700
    701701meter::-webkit-meter-even-less-good-value {
    702     -webkit-appearance: meter;
    703702    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;
    704705}
    705706
  • trunk/Source/WebCore/html/HTMLMeterElement.cpp

    r73488 r82880  
    3030#include "HTMLNames.h"
    3131#include "HTMLParserIdioms.h"
     32#include "MeterShadowElement.h"
    3233#include "RenderMeter.h"
    3334#include <wtf/StdLibExtras.h>
     
    4344}
    4445
     46HTMLMeterElement::~HTMLMeterElement()
     47{
     48}
     49
    4550PassRefPtr<HTMLMeterElement> HTMLMeterElement::create(const QualifiedName& tagName, Document* document, HTMLFormElement* form)
    4651{
    47     return adoptRef(new HTMLMeterElement(tagName, document, form));
     52    RefPtr<HTMLMeterElement> meter = adoptRef(new HTMLMeterElement(tagName, document, form));
     53    meter->createShadowSubtree();
     54    return meter;
    4855}
    4956
     
    6168void HTMLMeterElement::parseMappedAttribute(Attribute* attribute)
    6269{
    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
    6773        HTMLFormControlElement::parseMappedAttribute(attribute);
    6874}
     
    7177{
    7278    HTMLFormControlElement::attach();
    73     if (renderer())
    74         renderer()->updateFromElement();
     79    didElementStateChange();
    7580}
    7681
     
    204209}
    205210
     211double 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
     222void HTMLMeterElement::didElementStateChange()
     223{
     224    m_value->setWidthPercentage(valueRatio()*100);
     225}
     226
     227void 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
    206236} // namespace
    207237#endif
  • trunk/Source/WebCore/html/HTMLMeterElement.h

    r78232 r82880  
    2626
    2727namespace WebCore {
     28
     29class MeterValueElement;
    2830
    2931class HTMLMeterElement : public HTMLFormControlElement {
     
    5557    void setOptimum(double, ExceptionCode&);
    5658
     59    double valueRatio() const;
    5760    GaugeRegion gaugeRegion() const;
     61
    5862private:
    5963    HTMLMeterElement(const QualifiedName&, Document*, HTMLFormElement*);
     64    virtual ~HTMLMeterElement();
    6065
    6166    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();
    6271
    63     virtual const AtomicString& formControlType() const;
     72    void didElementStateChange();
     73    void createShadowSubtree();
    6474
    65     virtual RenderObject* createRenderer(RenderArena*, RenderStyle*);
    66 
    67     virtual void parseMappedAttribute(Attribute*);
    68 
    69     virtual void attach();
     75    RefPtr<MeterValueElement> m_value;
    7076};
    7177
  • trunk/Source/WebCore/rendering/RenderMeter.cpp

    r82686 r82880  
    3737
    3838RenderMeter::RenderMeter(HTMLMeterElement* element)
    39     : RenderIndicator(element)
     39    : RenderBlock(element)
    4040{
    4141}
     
    4343RenderMeter::~RenderMeter()
    4444{
    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();
    6045}
    6146
     
    7257}
    7358
    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() const
    96 {
    97     return !theme()->supportsMeter(style()->appearance());
    98 }
    99 
    10059double RenderMeter::valueRatio() const
    10160{
    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();
    17362}
    17463
  • trunk/Source/WebCore/rendering/RenderMeter.h

    r82686 r82880  
    3333class ShadowBlockElement;
    3434
    35 class RenderMeter : public RenderIndicator {
     35class RenderMeter : public RenderBlock {
    3636public:
    3737    RenderMeter(HTMLMeterElement*);
     
    3939
    4040private:
    41     virtual const char* renderName() const { return "RenderMeter"; }
    42     virtual bool isMeter() const { return true; }
    43     virtual void updateFromElement();
    4441    virtual void computeLogicalWidth();
    4542    virtual void computeLogicalHeight();
    4643
    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; }
    5848
    5949    double valueRatio() const;
    60     bool shouldHaveParts() const;
    61     PassRefPtr<ShadowBlockElement> createPart(PseudoId);
    62 
    63     RefPtr<ShadowBlockElement> m_barPart;
    64     RefPtr<ShadowBlockElement> m_valuePart;
    6550};
    6651
Note: See TracChangeset for help on using the changeset viewer.