⚠ Archived content — this site is no longer maintained.   Current WebKit documentation is at docs.webkit.org.

Changeset 185731 in webkit


Ignore:
Timestamp:
Jun 18, 2015, 6:13:37 PM (11 years ago)
Author:
dino@apple.com
Message:

Provide a way for web developers to draw a Theme-specific Wireless Playback icon
https://bugs.webkit.org/show_bug.cgi?id=146123
<rdar://problem/21119287>

Reviewed by Simon Fraser.

Source/WebCore:

Implement a -webkit-named-image() CSS <image> generator that allows a site to
request artwork by name and get the platform variant. At the moment
we only support "wireless-playback" which returns a generic image everywhere
but Cocoa platforms, where we render the AirPlay icon.

In order to do this I added a ThemeCocoa to share any Theme code between
Mac and iOS.

Test: fast/css/named-icons.html

  • WebCore.xcodeproj/project.pbxproj: Add new files CSSNamedImageValue, NamedImageGeneratedImage and ThemeCocoa.
  • css/CSSImageGeneratorValue.cpp: Handle the new NamedImageClass in the switch statements for downcasting.

(WebCore::CSSImageGeneratorValue::image):
(WebCore::CSSImageGeneratorValue::isFixedSize):
(WebCore::CSSImageGeneratorValue::isPending):
(WebCore::CSSImageGeneratorValue::knownToBeOpaque):

  • css/CSSNamedImageValue.cpp: New class. Just holds a name String.

(WebCore::CSSNamedImageValue::customCSSText):
(WebCore::CSSNamedImageValue::image):
(WebCore::CSSNamedImageValue::equals):

  • css/CSSNamedImageValue.h:

(WebCore::CSSNamedImageValue::create):
(WebCore::CSSNamedImageValue::isFixedSize):
(WebCore::CSSNamedImageValue::isPending):
(WebCore::CSSNamedImageValue::CSSNamedImageValue):

  • css/CSSParser.cpp:

(WebCore::CSSParser::isGeneratedImageValue): Allow "-webkit-named-image(".
(WebCore::CSSParser::parseGeneratedImage): Call parseNamedImage if we hit named-icon.
(WebCore::CSSParser::parseNamedImage): Parse the function looking for a CSS ident.

  • css/CSSParser.h:
  • css/CSSValue.cpp: Handle NamedImageClass in the various switch statements.

(WebCore::CSSValue::equals):
(WebCore::CSSValue::cssText):
(WebCore::CSSValue::destroy):

  • css/CSSValue.h:

(WebCore::CSSValue::isNamedImageValue): Helper to detect the correct CSSValue subclass.

  • platform/Theme.cpp:

(WebCore::Theme::drawNamedImage): Draw a generic wireless playback icon.

  • platform/Theme.h: Add drawNamedImage.
  • platform/cocoa/ThemeCocoa.cpp: New shared base class for ThemeMac and ThemeIOS.

(WebCore::fitContextToBox):
(WebCore::ThemeCocoa::drawNamedImage): Draw an AirPlay icon for wireless playback.

  • platform/cocoa/ThemeCocoa.h:
  • platform/graphics/CrossfadeGeneratedImage.h: Drive-by removal of unnecessary forward class definition.
  • platform/graphics/ImageBuffer.h: Add NamedImageGeneratedImage as a friend class.
  • platform/graphics/NamedImageGeneratedImage.cpp: New class. Calls into the Theme to render the artwork.

(WebCore::NamedImageGeneratedImage::NamedImageGeneratedImage):
(WebCore::NamedImageGeneratedImage::draw):
(WebCore::NamedImageGeneratedImage::drawPattern):

  • platform/graphics/NamedImageGeneratedImage.h:
  • platform/ios/ThemeIOS.h: Inherit from ThemeCocoa.
  • platform/mac/ThemeMac.h: Ditto.

LayoutTests:

Test the new -webkit-named-image CSS generator. Only "wireless-playback"
is supported for now, and has platform-specific results for Cocoa.

  • fast/css/named-images-expected.png: Added.
  • fast/css/named-images.html: Added.
  • platform/mac/fast/css/named-images-expected.png: Added.
  • platform/mac/fast/css/named-images-expected.txt: Added.
Location:
trunk
Files:
6 added
18 edited
4 copied

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r185729 r185731  
     12015-06-18  Dean Jackson  <dino@apple.com>
     2
     3        Provide a way for web developers to draw a Theme-specific Wireless Playback icon
     4        https://bugs.webkit.org/show_bug.cgi?id=146123
     5        <rdar://problem/21119287>
     6
     7        Reviewed by Simon Fraser.
     8
     9        Test the new -webkit-named-image CSS generator. Only "wireless-playback"
     10        is supported for now, and has platform-specific results for Cocoa.
     11
     12        * fast/css/named-images-expected.png: Added.
     13        * fast/css/named-images.html: Added.
     14        * platform/mac/fast/css/named-images-expected.png: Added.
     15        * platform/mac/fast/css/named-images-expected.txt: Added.
     16
    1172015-06-18  KyungTae Kim  <ktf.kim@samsung.com> and Myles C. Maxfield  <mmaxfield@apple.com>
    218
  • trunk/Source/WebCore/CMakeLists.txt

    r185707 r185731  
    12901290    css/CSSLineBoxContainValue.cpp
    12911291    css/CSSMediaRule.cpp
     1292    css/CSSNamedImageValue.cpp
    12921293    css/CSSOMUtils.cpp
    12931294    css/CSSPageRule.cpp
     
    21642165    platform/graphics/MaskImageOperation.cpp
    21652166    platform/graphics/MediaPlayer.cpp
     2167    platform/graphics/NamedImageGeneratedImage.cpp
    21662168    platform/graphics/Path.cpp
    21672169    platform/graphics/PathTraversalState.cpp
  • trunk/Source/WebCore/ChangeLog

    r185729 r185731  
     12015-06-18  Dean Jackson  <dino@apple.com>
     2
     3        Provide a way for web developers to draw a Theme-specific Wireless Playback icon
     4        https://bugs.webkit.org/show_bug.cgi?id=146123
     5        <rdar://problem/21119287>
     6
     7        Reviewed by Simon Fraser.
     8
     9        Implement a -webkit-named-image() CSS <image> generator that allows a site to
     10        request artwork by name and get the platform variant. At the moment
     11        we only support "wireless-playback" which returns a generic image everywhere
     12        but Cocoa platforms, where we render the AirPlay icon.
     13
     14        In order to do this I added a ThemeCocoa to share any Theme code between
     15        Mac and iOS.
     16
     17        Test: fast/css/named-icons.html
     18
     19        * WebCore.xcodeproj/project.pbxproj: Add new files CSSNamedImageValue, NamedImageGeneratedImage and ThemeCocoa.
     20
     21        * css/CSSImageGeneratorValue.cpp: Handle the new NamedImageClass in the switch statements for downcasting.
     22        (WebCore::CSSImageGeneratorValue::image):
     23        (WebCore::CSSImageGeneratorValue::isFixedSize):
     24        (WebCore::CSSImageGeneratorValue::isPending):
     25        (WebCore::CSSImageGeneratorValue::knownToBeOpaque):
     26
     27        * css/CSSNamedImageValue.cpp: New class. Just holds a name String.
     28        (WebCore::CSSNamedImageValue::customCSSText):
     29        (WebCore::CSSNamedImageValue::image):
     30        (WebCore::CSSNamedImageValue::equals):
     31        * css/CSSNamedImageValue.h:
     32        (WebCore::CSSNamedImageValue::create):
     33        (WebCore::CSSNamedImageValue::isFixedSize):
     34        (WebCore::CSSNamedImageValue::isPending):
     35        (WebCore::CSSNamedImageValue::CSSNamedImageValue):
     36
     37        * css/CSSParser.cpp:
     38        (WebCore::CSSParser::isGeneratedImageValue): Allow "-webkit-named-image(".
     39        (WebCore::CSSParser::parseGeneratedImage): Call parseNamedImage if we hit named-icon.
     40        (WebCore::CSSParser::parseNamedImage): Parse the function looking for a CSS ident.
     41        * css/CSSParser.h:
     42
     43        * css/CSSValue.cpp: Handle NamedImageClass in the various switch statements.
     44        (WebCore::CSSValue::equals):
     45        (WebCore::CSSValue::cssText):
     46        (WebCore::CSSValue::destroy):
     47        * css/CSSValue.h:
     48        (WebCore::CSSValue::isNamedImageValue): Helper to detect the correct CSSValue subclass.
     49
     50        * platform/Theme.cpp:
     51        (WebCore::Theme::drawNamedImage): Draw a generic wireless playback icon.
     52        * platform/Theme.h: Add drawNamedImage.
     53
     54        * platform/cocoa/ThemeCocoa.cpp: New shared base class for ThemeMac and ThemeIOS.
     55        (WebCore::fitContextToBox):
     56        (WebCore::ThemeCocoa::drawNamedImage): Draw an AirPlay icon for wireless playback.
     57        * platform/cocoa/ThemeCocoa.h:
     58
     59        * platform/graphics/CrossfadeGeneratedImage.h: Drive-by removal of unnecessary forward class definition.
     60
     61        * platform/graphics/ImageBuffer.h: Add NamedImageGeneratedImage as a friend class.
     62
     63        * platform/graphics/NamedImageGeneratedImage.cpp: New class. Calls into the Theme to render the artwork.
     64        (WebCore::NamedImageGeneratedImage::NamedImageGeneratedImage):
     65        (WebCore::NamedImageGeneratedImage::draw):
     66        (WebCore::NamedImageGeneratedImage::drawPattern):
     67        * platform/graphics/NamedImageGeneratedImage.h:
     68
     69        * platform/ios/ThemeIOS.h: Inherit from ThemeCocoa.
     70        * platform/mac/ThemeMac.h: Ditto.
     71
    1722015-06-18  KyungTae Kim  <ktf.kim@samsung.com> and Myles C. Maxfield  <mmaxfield@apple.com>
    273
  • trunk/Source/WebCore/WebCore.vcxproj/WebCore.vcxproj

    r185459 r185731  
    82048204    <ClCompile Include="..\platform\graphics\LayoutRect.cpp" />
    82058205    <ClCompile Include="..\platform\graphics\MediaPlayer.cpp" />
     8206    <ClCompile Include="..\platform\graphics\NamedImageGeneratedImage.cpp" />
    82068207    <ClCompile Include="..\platform\graphics\Path.cpp" />
    82078208    <ClCompile Include="..\platform\graphics\PathTraversalState.cpp" />
     
    96229623    </ClCompile>
    96239624    <ClCompile Include="..\css\CSSMediaRule.cpp">
     9625      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
     9626      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
     9627      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug_WinCairo|Win32'">true</ExcludedFromBuild>
     9628      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug_WinCairo|x64'">true</ExcludedFromBuild>
     9629      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='DebugSuffix|Win32'">true</ExcludedFromBuild>
     9630      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='DebugSuffix|x64'">true</ExcludedFromBuild>
     9631      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
     9632      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
     9633      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release_WinCairo|Win32'">true</ExcludedFromBuild>
     9634      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release_WinCairo|x64'">true</ExcludedFromBuild>
     9635      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Production|Win32'">true</ExcludedFromBuild>
     9636      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Production|x64'">true</ExcludedFromBuild>
     9637    </ClCompile>
     9638    <ClCompile Include="..\css\CSSNamedImageValue.cpp">
    96249639      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
    96259640      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
     
    2000020015    <ClInclude Include="..\platform\graphics\LayoutSize.h" />
    2000120016    <ClInclude Include="..\platform\graphics\MediaPlayer.h" />
     20017    <ClInclude Include="..\platform\graphics\NamedImageGeneratedImage.h" />
    2000220018    <ClInclude Include="..\platform\graphics\NativeImagePtr.h" />
    2000320019    <ClInclude Include="..\platform\graphics\Path.h" />
     
    2050520521    <ClInclude Include="..\css\CSSLineBoxContainValue.h" />
    2050620522    <ClInclude Include="..\css\CSSMediaRule.h" />
     20523    <ClInclude Include="..\css\CSSNamedImageValue.h" />
    2050720524    <ClInclude Include="..\css\CSSOMUtils.h" />
    2050820525    <ClInclude Include="..\css\CSSPageRule.h" />
  • trunk/Source/WebCore/WebCore.vcxproj/WebCore.vcxproj.filters

    r185459 r185731  
    13781378      <Filter>platform\graphics</Filter>
    13791379    </ClCompile>
     1380    <ClCompile Include="..\platform\graphics\NamedImageGeneratedImage.cpp">
     1381      <Filter>platform\graphics</Filter>
     1382    </ClCompile>
    13801383    <ClCompile Include="..\platform\graphics\Path.cpp">
    13811384      <Filter>platform\graphics</Filter>
     
    21472150    </ClCompile>
    21482151    <ClCompile Include="..\css\CSSMediaRule.cpp">
     2152      <Filter>css</Filter>
     2153    </ClCompile>
     2154    <ClCompile Include="..\css\CSSNamedImageValue.cpp">
    21492155      <Filter>css</Filter>
    21502156    </ClCompile>
     
    85038509      <Filter>platform\graphics</Filter>
    85048510    </ClInclude>
     8511    <ClInclude Include="..\platform\graphics\NamedImageGeneratedImage.h">
     8512      <Filter>platform\graphics</Filter>
     8513    </ClInclude>
    85058514    <ClInclude Include="..\platform\graphics\NativeImagePtr.h">
    85068515      <Filter>platform\graphics</Filter>
     
    91259134    </ClInclude>
    91269135    <ClInclude Include="..\css\CSSMediaRule.h">
     9136      <Filter>css</Filter>
     9137    </ClInclude>
     9138    <ClInclude Include="..\css\CSSNamedImageValue.h">
    91279139      <Filter>css</Filter>
    91289140    </ClInclude>
  • trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj

    r185679 r185731  
    12251225                31078CC91880AAC9008099DC /* JSOESTextureHalfFloatLinear.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 31078CC51880AAAA008099DC /* JSOESTextureHalfFloatLinear.cpp */; };
    12261226                31078CCA1880AACE008099DC /* JSOESTextureHalfFloatLinear.h in Headers */ = {isa = PBXBuildFile; fileRef = 31078CC61880AAAA008099DC /* JSOESTextureHalfFloatLinear.h */; };
     1227                310D71951B335C9D009C7B73 /* ThemeCocoa.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 310D71931B335C9D009C7B73 /* ThemeCocoa.cpp */; };
     1228                310D71961B335C9E009C7B73 /* ThemeCocoa.h in Headers */ = {isa = PBXBuildFile; fileRef = 310D71941B335C9D009C7B73 /* ThemeCocoa.h */; };
    12271229                311C08BD18EB7CAF00B65615 /* mediaControlsApple.css in Resources */ = {isa = PBXBuildFile; fileRef = CDC1DD4117CC2C48008CB55D /* mediaControlsApple.css */; };
    12281230                311C08BE18EB7CAF00B65615 /* mediaControlsApple.js in Resources */ = {isa = PBXBuildFile; fileRef = CDE6560E17CA6E7600526BA7 /* mediaControlsApple.js */; };
     
    12471249                3146FE7418442370001A937C /* JSOESTextureFloatLinear.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3146FE7018442367001A937C /* JSOESTextureFloatLinear.cpp */; };
    12481250                3146FE7518442370001A937C /* JSOESTextureFloatLinear.h in Headers */ = {isa = PBXBuildFile; fileRef = 3146FE7118442367001A937C /* JSOESTextureFloatLinear.h */; };
     1251                314BE3A11B30F6B700141982 /* CSSNamedImageValue.h in Headers */ = {isa = PBXBuildFile; fileRef = 314BE3A01B30F6B700141982 /* CSSNamedImageValue.h */; settings = {ATTRIBUTES = (Private, ); }; };
     1252                314BE3A31B30F6D100141982 /* CSSNamedImageValue.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 314BE3A21B30F6D100141982 /* CSSNamedImageValue.cpp */; };
     1253                314BE3A61B3103FB00141982 /* NamedImageGeneratedImage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 314BE3A41B3103FB00141982 /* NamedImageGeneratedImage.cpp */; };
     1254                314BE3A71B3103FB00141982 /* NamedImageGeneratedImage.h in Headers */ = {isa = PBXBuildFile; fileRef = 314BE3A51B3103FB00141982 /* NamedImageGeneratedImage.h */; };
    12491255                316023F01532C40C00D50FF4 /* Dictionary.h in Headers */ = {isa = PBXBuildFile; fileRef = 316023EF1532C40C00D50FF4 /* Dictionary.h */; settings = {ATTRIBUTES = (Private, ); }; };
    12501256                31611E5A0E1C4DE000F6A579 /* JSWebKitCSSTransformValue.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 31611E580E1C4DE000F6A579 /* JSWebKitCSSTransformValue.cpp */; };
     
    83848390                31078CC51880AAAA008099DC /* JSOESTextureHalfFloatLinear.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSOESTextureHalfFloatLinear.cpp; sourceTree = "<group>"; };
    83858391                31078CC61880AAAA008099DC /* JSOESTextureHalfFloatLinear.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSOESTextureHalfFloatLinear.h; sourceTree = "<group>"; };
     8392                310D71931B335C9D009C7B73 /* ThemeCocoa.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ThemeCocoa.cpp; sourceTree = "<group>"; };
     8393                310D71941B335C9D009C7B73 /* ThemeCocoa.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ThemeCocoa.h; sourceTree = "<group>"; };
    83868394                311C08BC18E35D6800B65615 /* ControlStates.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ControlStates.h; sourceTree = "<group>"; };
    83878395                31288E6E0E3005D6003619AE /* CSSKeyframeRule.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CSSKeyframeRule.cpp; sourceTree = "<group>"; };
     
    84038411                3146FE7018442367001A937C /* JSOESTextureFloatLinear.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSOESTextureFloatLinear.cpp; sourceTree = "<group>"; };
    84048412                3146FE7118442367001A937C /* JSOESTextureFloatLinear.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSOESTextureFloatLinear.h; sourceTree = "<group>"; };
     8413                314BE3A01B30F6B700141982 /* CSSNamedImageValue.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = CSSNamedImageValue.h; sourceTree = "<group>"; };
     8414                314BE3A21B30F6D100141982 /* CSSNamedImageValue.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; lineEnding = 0; path = CSSNamedImageValue.cpp; sourceTree = "<group>"; };
     8415                314BE3A41B3103FB00141982 /* NamedImageGeneratedImage.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = NamedImageGeneratedImage.cpp; sourceTree = "<group>"; };
     8416                314BE3A51B3103FB00141982 /* NamedImageGeneratedImage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NamedImageGeneratedImage.h; sourceTree = "<group>"; };
    84058417                316023EF1532C40C00D50FF4 /* Dictionary.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Dictionary.h; sourceTree = "<group>"; };
    84068418                31611E540E1C4D4A00F6A579 /* WebKitCSSTransformValue.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = WebKitCSSTransformValue.idl; sourceTree = "<group>"; };
     
    1899519007                                5D5975B219635F1100D00878 /* SystemVersion.mm */,
    1899619008                                7CC564B918BAC720001B9652 /* TelephoneNumberDetectorCocoa.cpp */,
     19009                                310D71931B335C9D009C7B73 /* ThemeCocoa.cpp */,
     19010                                310D71941B335C9D009C7B73 /* ThemeCocoa.h */,
    1899719011                                46DB7D561B20FE3C005651B2 /* VNodeTrackerCocoa.cpp */,
    1899819012                        );
     
    2095720971                                CD641EB11818F5ED00EE4C41 /* MediaSourcePrivate.h */,
    2095820972                                CDDC1E7918A952F30027A9D4 /* MediaSourcePrivateClient.h */,
     20973                                314BE3A41B3103FB00141982 /* NamedImageGeneratedImage.cpp */,
     20974                                314BE3A51B3103FB00141982 /* NamedImageGeneratedImage.h */,
    2095920975                                6B3480920EEF50D400AC1B41 /* NativeImagePtr.h */,
    2096020976                                B27535520B053814002CE64F /* Path.cpp */,
     
    2249722513                                A80E6CD90A1989CA007FB8C5 /* CSSMediaRule.h */,
    2249822514                                85C56CA20AA89C1000D95755 /* CSSMediaRule.idl */,
     22515                                314BE3A01B30F6B700141982 /* CSSNamedImageValue.h */,
     22516                                314BE3A21B30F6D100141982 /* CSSNamedImageValue.cpp */,
    2249922517                                F98FFF4211A2676200F548E8 /* CSSOMUtils.cpp */,
    2250022518                                F98FFF4311A2676200F548E8 /* CSSOMUtils.h */,
     
    2412424142                                E125F82C1822CFEC00D84CD9 /* CryptoAlgorithmSHA1.h in Headers */,
    2412524143                                E19AC3EF1824DC7900349426 /* CryptoAlgorithmSHA224.h in Headers */,
     24144                                314BE3A11B30F6B700141982 /* CSSNamedImageValue.h in Headers */,
    2412624145                                E19AC3F11824DC7900349426 /* CryptoAlgorithmSHA256.h in Headers */,
    2412724146                                E19AC3F31824DC7900349426 /* CryptoAlgorithmSHA384.h in Headers */,
     
    2536125380                                1AE2AE5C0A1D26F200B42B25 /* JSHTMLMenuElement.h in Headers */,
    2536225381                                A80E7A180A19C3D6007FB8C5 /* JSHTMLMetaElement.h in Headers */,
     25382                                314BE3A71B3103FB00141982 /* NamedImageGeneratedImage.h in Headers */,
    2536325383                                A7BBE26711AFB3F20005EA03 /* JSHTMLMeterElement.h in Headers */,
    2536425384                                1AE2AB2A0A1CE63B00B42B25 /* JSHTMLModElement.h in Headers */,
     
    2677526795                                08F859D51463F9CD0067D933 /* SVGImageCache.h in Headers */,
    2677626796                                B2227A2D0D00BF220071B782 /* SVGImageElement.h in Headers */,
     26797                                310D71961B335C9E009C7B73 /* ThemeCocoa.h in Headers */,
    2677726798                                08F859D51463F9CD0067D934 /* SVGImageForContainer.h in Headers */,
    2677826799                                B28C6A2A0D00C44800334AA4 /* SVGImageLoader.h in Headers */,
     
    2847628497                                93309DE5099E64920056E581 /* HTMLInterchange.cpp in Sources */,
    2847728498                                A81369E5097374F600D74463 /* HTMLKeygenElement.cpp in Sources */,
     28499                                314BE3A61B3103FB00141982 /* NamedImageGeneratedImage.cpp in Sources */,
    2847828500                                A81369E3097374F600D74463 /* HTMLLabelElement.cpp in Sources */,
    2847928501                                A81369E1097374F600D74463 /* HTMLLegendElement.cpp in Sources */,
     
    2851828540                                536D5A21193E18EE00CE4CAB /* HTMLSrcsetParser.cpp in Sources */,
    2851928541                                A871DC260A15205700B12A68 /* HTMLStyleElement.cpp in Sources */,
     28542                                310D71951B335C9D009C7B73 /* ThemeCocoa.cpp in Sources */,
    2852028543                                D3D4E972130C7CFE007BA540 /* HTMLSummaryElement.cpp in Sources */,
    2852128544                                A871DB320A150BD600B12A68 /* HTMLTableCaptionElement.cpp in Sources */,
     
    2989829921                                A84D82C211D3474800972990 /* ScriptableDocumentParser.cpp in Sources */,
    2989929922                                41F1D2200EF35C2A00DA8753 /* ScriptCachedFrameData.cpp in Sources */,
     29923                                314BE3A31B30F6D100141982 /* CSSNamedImageValue.cpp in Sources */,
    2990029924                                93B70D6F09EB0C7C009D8468 /* ScriptController.cpp in Sources */,
    2990129925                                A83E1C740E49042C00140B9C /* ScriptControllerMac.mm in Sources */,
  • trunk/Source/WebCore/css/CSSAllInOne.cpp

    r183748 r185731  
    5858#include "CSSLineBoxContainValue.cpp"
    5959#include "CSSMediaRule.cpp"
     60#include "CSSNamedImageValue.cpp"
    6061#include "CSSOMUtils.cpp"
    6162#include "CSSPageRule.cpp"
  • trunk/Source/WebCore/css/CSSImageGeneratorValue.cpp

    r179242 r185731  
    3333#include "CSSGradientValue.h"
    3434#include "CSSImageValue.h"
     35#include "CSSNamedImageValue.h"
    3536#include "GeneratedImage.h"
    3637#include "RenderElement.h"
     
    111112    case CanvasClass:
    112113        return downcast<CSSCanvasValue>(*this).image(renderer, size);
     114    case NamedImageClass:
     115        return downcast<CSSNamedImageValue>(*this).image(renderer, size);
    113116    case CrossfadeClass:
    114117        return downcast<CSSCrossfadeValue>(*this).image(renderer, size);
     
    130133    case CanvasClass:
    131134        return downcast<CSSCanvasValue>(*this).isFixedSize();
     135    case NamedImageClass:
     136        return downcast<CSSNamedImageValue>(*this).isFixedSize();
    132137    case CrossfadeClass:
    133138        return downcast<CSSCrossfadeValue>(*this).isFixedSize();
     
    170175    case CanvasClass:
    171176        return downcast<CSSCanvasValue>(*this).isPending();
     177    case NamedImageClass:
     178        return downcast<CSSNamedImageValue>(*this).isPending();
    172179    case FilterImageClass:
    173180        return downcast<CSSFilterImageValue>(*this).isPending();
     
    188195        return downcast<CSSCrossfadeValue>(*this).knownToBeOpaque(renderer);
    189196    case CanvasClass:
     197        return false;
     198    case NamedImageClass:
    190199        return false;
    191200    case FilterImageClass:
  • trunk/Source/WebCore/css/CSSNamedImageValue.cpp

    r185729 r185731  
    11/*
    2  * Copyright (C) 2008 Apple Inc. All Rights Reserved.
     2 * Copyright (C) 2015 Apple Inc.  All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    2121 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    2222 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    23  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
     23 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    2424 */
    2525
    26 #ifndef ThemeIOS_h
    27 #define ThemeIOS_h
     26#include "config.h"
     27#include "CSSNamedImageValue.h"
    2828
    29 #include "Theme.h"
     29#include "ImageBuffer.h"
     30#include "NamedImageGeneratedImage.h"
    3031
    3132namespace WebCore {
    3233
    33 class ThemeIOS : public Theme {
    34 public:
    35     ThemeIOS() { }
    36     virtual ~ThemeIOS() { }
    37 };
     34String CSSNamedImageValue::customCSSText() const
     35{
     36    return makeString("-webkit-named-image(", m_name, ')');
     37}
     38
     39PassRefPtr<Image> CSSNamedImageValue::image(RenderElement*, const FloatSize& size)
     40{
     41    if (size.isEmpty())
     42        return nullptr;
     43
     44    m_generatedImage = NamedImageGeneratedImage::create(m_name, size);
     45
     46    return m_generatedImage.release();
     47}
     48
     49bool CSSNamedImageValue::equals(const CSSNamedImageValue& other) const
     50{
     51    return m_name == other.m_name;
     52}
    3853
    3954} // namespace WebCore
    40 
    41 #endif // ThemeIOS_h
  • trunk/Source/WebCore/css/CSSNamedImageValue.h

    r185729 r185731  
    11/*
    2  * Copyright (C) 2008 Apple Inc. All Rights Reserved.
     2 * Copyright (C) 2015 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    2121 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    2222 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    23  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
     23 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    2424 */
    2525
    26 #ifndef ThemeIOS_h
    27 #define ThemeIOS_h
     26#ifndef CSSNamedImageValue_h
     27#define CSSNamedImageValue_h
    2828
    29 #include "Theme.h"
     29#include "CSSImageGeneratorValue.h"
     30
     31#include "Image.h"
    3032
    3133namespace WebCore {
    3234
    33 class ThemeIOS : public Theme {
     35class Document;
     36
     37class CSSNamedImageValue : public CSSImageGeneratorValue {
    3438public:
    35     ThemeIOS() { }
    36     virtual ~ThemeIOS() { }
     39    static Ref<CSSNamedImageValue> create(const String& name)
     40    {
     41        return adoptRef(*new CSSNamedImageValue(name));
     42    }
     43
     44    String customCSSText() const;
     45
     46    bool isFixedSize() const { return false; }
     47    bool isPending() const { return false; }
     48
     49    PassRefPtr<Image> image(RenderElement*, const FloatSize&);
     50
     51    bool equals(const CSSNamedImageValue&) const;
     52
     53private:
     54    explicit CSSNamedImageValue(const String& name)
     55        : CSSImageGeneratorValue(NamedImageClass)
     56        , m_name(name)
     57    {
     58    }
     59
     60    String m_name;
     61    RefPtr<Image> m_generatedImage;
    3762};
    3863
    3964} // namespace WebCore
    4065
    41 #endif // ThemeIOS_h
     66SPECIALIZE_TYPE_TRAITS_CSS_VALUE(CSSNamedImageValue, isNamedImageValue())
     67
     68#endif // CSSNamedImageValue_h
  • trunk/Source/WebCore/css/CSSParser.cpp

    r185729 r185731  
    5151#include "CSSLineBoxContainValue.h"
    5252#include "CSSMediaRule.h"
     53#include "CSSNamedImageValue.h"
    5354#include "CSSPageRule.h"
    5455#include "CSSPrimitiveValue.h"
     
    91539154        || equalIgnoringCase(value.function->name, "-webkit-canvas(")
    91549155        || equalIgnoringCase(value.function->name, "-webkit-cross-fade(")
    9155         || equalIgnoringCase(value.function->name, "-webkit-filter(");
     9156        || equalIgnoringCase(value.function->name, "-webkit-filter(")
     9157        || equalIgnoringCase(value.function->name, "-webkit-named-image(");
    91569158}
    91579159
     
    91989200    if (equalIgnoringCase(parserValue.function->name, "-webkit-filter("))
    91999201        return parseFilterImage(valueList, value);
     9202
     9203    if (equalIgnoringCase(parserValue.function->name, "-webkit-named-image("))
     9204        return parseNamedImage(valueList, value);
    92009205
    92019206    return false;
     
    93089313
    93099314    canvas = CSSCanvasValue::create(value->string);
     9315    return true;
     9316}
     9317
     9318bool CSSParser::parseNamedImage(CSSParserValueList& valueList, RefPtr<CSSValue>& namedImage)
     9319{
     9320    CSSParserValueList* args = valueList.current()->function->args.get();
     9321    if (!args || args->size() != 1)
     9322        return false;
     9323
     9324    // The only argument is the image name.
     9325    CSSParserValue* value = args->current();
     9326    if (!value || value->unit != CSSPrimitiveValue::CSS_IDENT)
     9327        return false;
     9328
     9329    namedImage = CSSNamedImageValue::create(value->string);
    93109330    return true;
    93119331}
  • trunk/Source/WebCore/css/CSSParser.h

    r185238 r185731  
    291291    // Image generators
    292292    bool parseCanvas(CSSParserValueList&, RefPtr<CSSValue>&);
     293    bool parseNamedImage(CSSParserValueList&, RefPtr<CSSValue>&);
    293294
    294295    bool parseDeprecatedGradient(CSSParserValueList&, RefPtr<CSSValue>&);
  • trunk/Source/WebCore/css/CSSValue.cpp

    r184315 r185731  
    4848#include "CSSInitialValue.h"
    4949#include "CSSLineBoxContainValue.h"
     50#include "CSSNamedImageValue.h"
    5051#include "CSSPrimitiveValue.h"
    5152#include "CSSReflectValue.h"
     
    169170        case CanvasClass:
    170171            return compareCSSValues<CSSCanvasValue>(*this, other);
     172        case NamedImageClass:
     173            return compareCSSValues<CSSNamedImageValue>(*this, other);
    171174        case CursorImageClass:
    172175            return compareCSSValues<CSSCursorImageValue>(*this, other);
     
    261264    case CanvasClass:
    262265        return downcast<CSSCanvasValue>(*this).customCSSText();
     266    case NamedImageClass:
     267        return downcast<CSSNamedImageValue>(*this).customCSSText();
    263268    case CursorImageClass:
    264269        return downcast<CSSCursorImageValue>(*this).customCSSText();
     
    353358        delete downcast<CSSCanvasValue>(this);
    354359        return;
     360    case NamedImageClass:
     361        delete downcast<CSSNamedImageValue>(this);
     362        return;
    355363    case CursorImageClass:
    356364        delete downcast<CSSCursorImageValue>(this);
  • trunk/Source/WebCore/css/CSSValue.h

    r184315 r185731  
    8080    bool isImageGeneratorValue() const { return m_classType >= CanvasClass && m_classType <= RadialGradientClass; }
    8181    bool isGradientValue() const { return m_classType >= LinearGradientClass && m_classType <= RadialGradientClass; }
     82    bool isNamedImageValue() const { return m_classType == NamedImageClass; }
    8283#if ENABLE(CSS_IMAGE_SET)
    8384    bool isImageSetValue() const { return m_classType == ImageSetClass; }
     
    140141        // Image generator classes.
    141142        CanvasClass,
     143        NamedImageClass,
    142144        CrossfadeClass,
    143145        FilterImageClass,
  • trunk/Source/WebCore/platform/Theme.cpp

    r178510 r185731  
    2626#include "config.h"
    2727#include "Theme.h"
     28
     29#include "GraphicsContext.h"
    2830
    2931namespace WebCore {
     
    5658}
    5759
     60void Theme::drawNamedImage(const String& name, GraphicsContext* context, const FloatRect& rect) const
     61{
     62    // We only handle one icon at the moment.
     63    if (name != "wireless-playback")
     64        return;
     65
     66    GraphicsContextStateSaver stateSaver(*context);
     67    context->setFillColor(Color::black, ColorSpaceDeviceRGB);
     68
     69    // Draw a generic Wireless Playback icon.
     70
     71    context->scale(FloatSize(rect.size().width() / 100, rect.size().height() / 100));
     72    context->translate(8, 1);
     73
     74    Path outline;
     75    outline.moveTo(FloatPoint(59, 58.7));
     76    outline.addBezierCurveTo(FloatPoint(58.1, 58.7), FloatPoint(57.2, 58.4), FloatPoint(56.4, 57.7));
     77    outline.addLineTo(FloatPoint(42, 45.5));
     78    outline.addLineTo(FloatPoint(27.6, 57.8));
     79    outline.addBezierCurveTo(FloatPoint(25.9, 59.2), FloatPoint(23.4, 59), FloatPoint(22, 57.3));
     80    outline.addBezierCurveTo(FloatPoint(20.6, 55.6), FloatPoint(20.8, 53.1), FloatPoint(22.5, 51.7));
     81    outline.addLineTo(FloatPoint(39.5, 37.3));
     82    outline.addBezierCurveTo(FloatPoint(41, 36), FloatPoint(43.2, 36), FloatPoint(44.7, 37.3));
     83    outline.addLineTo(FloatPoint(61.7, 51.7));
     84    outline.addBezierCurveTo(FloatPoint(63.4, 53.1), FloatPoint(63.6, 55.7), FloatPoint(62.2, 57.3));
     85    outline.addBezierCurveTo(FloatPoint(61.3, 58.2), FloatPoint(60.1, 58.7), FloatPoint(59, 58.7));
     86    outline.addLineTo(FloatPoint(59, 58.7));
     87    outline.closeSubpath();
     88
     89    outline.moveTo(FloatPoint(42, 98));
     90    outline.addBezierCurveTo(FloatPoint(39.8, 98), FloatPoint(38, 96.3), FloatPoint(38, 94.2));
     91    outline.addLineTo(FloatPoint(38, 43.6));
     92    outline.addBezierCurveTo(FloatPoint(38, 41.5), FloatPoint(39.8, 39.8), FloatPoint(42, 39.8));
     93    outline.addBezierCurveTo(FloatPoint(44.2, 39.8), FloatPoint(46, 41.5), FloatPoint(46, 43.6));
     94    outline.addLineTo(FloatPoint(46, 94.2));
     95    outline.addBezierCurveTo(FloatPoint(46, 96.3), FloatPoint(44.2, 98), FloatPoint(42, 98));
     96    outline.addLineTo(FloatPoint(42, 98));
     97    outline.closeSubpath();
     98
     99    outline.moveTo(FloatPoint(83.6, 41.6));
     100    outline.addBezierCurveTo(FloatPoint(83.6, 18.6), FloatPoint(65, 0), FloatPoint(42, 0));
     101    outline.addBezierCurveTo(FloatPoint(19, 0), FloatPoint(0.4, 18.6), FloatPoint(0.4, 41.6));
     102    outline.addBezierCurveTo(FloatPoint(0.4, 62.2), FloatPoint(15, 79.2), FloatPoint(35, 82.6));
     103    outline.addLineTo(FloatPoint(35, 74.5));
     104    outline.addBezierCurveTo(FloatPoint(20, 71.2), FloatPoint(8.4, 57.7), FloatPoint(8.4, 41.6));
     105    outline.addBezierCurveTo(FloatPoint(8.4, 23.1), FloatPoint(23.5, 8), FloatPoint(42, 8));
     106    outline.addBezierCurveTo(FloatPoint(60.5, 8), FloatPoint(75.5, 23.1), FloatPoint(75.5, 41.6));
     107    outline.addBezierCurveTo(FloatPoint(75.6, 57.7), FloatPoint(64, 71.2), FloatPoint(49, 74.5));
     108    outline.addLineTo(FloatPoint(49, 82.6));
     109    outline.addBezierCurveTo(FloatPoint(69, 79.3), FloatPoint(83.6, 62.2), FloatPoint(83.6, 41.6));
     110    outline.addLineTo(FloatPoint(83.6, 41.6));
     111    outline.closeSubpath();
     112
     113    context->fillPath(outline);
    58114}
     115
     116}
  • trunk/Source/WebCore/platform/Theme.h

    r183366 r185731  
    3030#include "ControlStates.h"
    3131#include "FontCascade.h"
     32#include "GraphicsTypes.h"
    3233#include "IntRect.h"
    3334#include "LengthBox.h"
     
    107108    // amount is also scaled by the zoomFactor.
    108109    virtual void inflateControlPaintRect(ControlPart, const ControlStates*, FloatRect& /*zoomedRect*/, float /*zoomFactor*/) const { }
    109    
     110
     111    virtual void drawNamedImage(const String&, GraphicsContext*, const FloatRect&) const;
     112
    110113    // This method is called once, from RenderTheme::adjustDefaultStyleSheet(), to let each platform adjust
    111114    // the default CSS rules in html.css.
  • trunk/Source/WebCore/platform/cocoa/ThemeCocoa.h

    r185729 r185731  
    11/*
    2  * Copyright (C) 2008 Apple Inc. All Rights Reserved.
     2 * Copyright (C) 2015 Apple Inc. All Rights Reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    2121 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    2222 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    23  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
     23 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    2424 */
    2525
    26 #ifndef ThemeIOS_h
    27 #define ThemeIOS_h
     26#ifndef ThemeCocoa_h
     27#define ThemeCocoa_h
    2828
    2929#include "Theme.h"
     
    3131namespace WebCore {
    3232
    33 class ThemeIOS : public Theme {
     33class ThemeCocoa : public Theme {
    3434public:
    35     ThemeIOS() { }
    36     virtual ~ThemeIOS() { }
     35    ThemeCocoa() { }
     36    virtual ~ThemeCocoa() { }
     37
     38    virtual void drawNamedImage(const String&, GraphicsContext*, const FloatRect&) const override;
    3739};
    3840
    3941} // namespace WebCore
    4042
    41 #endif // ThemeIOS_h
     43#endif // ThemeCocoa_h
  • trunk/Source/WebCore/platform/graphics/CrossfadeGeneratedImage.h

    r177733 r185731  
    3535namespace WebCore {
    3636
    37 class CSSCrossfadeValue;
    38 
    3937class CrossfadeGeneratedImage final : public GeneratedImage {
    4038public:
  • trunk/Source/WebCore/platform/graphics/ImageBuffer.h

    r183960 r185731  
    150150    friend class GeneratedImage;
    151151    friend class CrossfadeGeneratedImage;
     152    friend class NamedImageGeneratedImage;
    152153    friend class GradientImage;
    153154
  • trunk/Source/WebCore/platform/graphics/NamedImageGeneratedImage.h

    r185729 r185731  
    11/*
    2  * Copyright (C) 2011 Apple Inc. All rights reserved.
     2 * Copyright (C) 2015 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    2424 */
    2525
    26 #ifndef CrossfadeGeneratedImage_h
    27 #define CrossfadeGeneratedImage_h
     26#ifndef NamedImageGeneratedImage_h
     27#define NamedImageGeneratedImage_h
    2828
    2929#include "FloatSize.h"
    3030#include "GeneratedImage.h"
    3131#include "Image.h"
    32 #include "ImageObserver.h"
    3332#include <wtf/RefPtr.h>
    3433
    3534namespace WebCore {
    3635
    37 class CSSCrossfadeValue;
    38 
    39 class CrossfadeGeneratedImage final : public GeneratedImage {
     36class NamedImageGeneratedImage final : public GeneratedImage {
    4037public:
    41     static Ref<CrossfadeGeneratedImage> create(Image* fromImage, Image* toImage, float percentage, const FloatSize& crossfadeSize, const FloatSize& size)
     38    static Ref<NamedImageGeneratedImage> create(String name, const FloatSize& size)
    4239    {
    43         return adoptRef(*new CrossfadeGeneratedImage(fromImage, toImage, percentage, crossfadeSize, size));
     40        return adoptRef(*new NamedImageGeneratedImage(name, size));
    4441    }
    45 
    46     virtual void setContainerSize(const FloatSize&) override { }
    47     virtual bool usesContainerSize() const override { return false; }
    48     virtual bool hasRelativeWidth() const override { return false; }
    49     virtual bool hasRelativeHeight() const override { return false; }
    50 
    51     virtual FloatSize size() const override { return m_crossfadeSize; }
    5242
    5343protected:
     
    5545    virtual void drawPattern(GraphicsContext*, const FloatRect& srcRect, const AffineTransform& patternTransform, const FloatPoint& phase, ColorSpace styleColorSpace, CompositeOperator, const FloatRect& dstRect, BlendMode) override;
    5646
    57     CrossfadeGeneratedImage(Image* fromImage, Image* toImage, float percentage, const FloatSize& crossfadeSize, const FloatSize&);
     47    NamedImageGeneratedImage(String name, const FloatSize&);
    5848
    5949private:
    60     void drawCrossfade(GraphicsContext*);
    61 
    62     Image* m_fromImage;
    63     Image* m_toImage;
    64 
    65     float m_percentage;
    66     FloatSize m_crossfadeSize;
     50    String m_name;
    6751};
    6852
  • trunk/Source/WebCore/platform/ios/ThemeIOS.h

    r161589 r185731  
    2727#define ThemeIOS_h
    2828
    29 #include "Theme.h"
     29#include "ThemeCocoa.h"
    3030
    3131namespace WebCore {
    3232
    33 class ThemeIOS : public Theme {
     33class ThemeIOS : public ThemeCocoa {
    3434public:
    3535    ThemeIOS() { }
  • trunk/Source/WebCore/platform/mac/ThemeMac.h

    r185272 r185731  
    2727#define ThemeMac_h
    2828
    29 #include "Theme.h"
     29#include "ThemeCocoa.h"
    3030
    3131@interface NSFont(WebCoreTheme)
     
    3535namespace WebCore {
    3636
    37 class ThemeMac : public Theme {
     37class ThemeMac : public ThemeCocoa {
    3838    WTF_MAKE_FAST_ALLOCATED;
    3939public:
Note: See TracChangeset for help on using the changeset viewer.