Ignore:
Timestamp:
Nov 16, 2011, 5:28:25 PM (14 years ago)
Author:
[email protected]
Message:

Implement CSS3 Images cross-fade() image function
https://bugs.webkit.org/show_bug.cgi?id=52162
<rdar://problem/10209254>

Reviewed by Simon Fraser.

Render -webkit-cross-fade. Only cross-fades entirely composed of images will render for now,
cross-fades involving generated images are not yet implemented.

Reorganize GeneratedImage to be the base class for GeneratorGeneratedImage and CrossfadeGeneratedImage.

Add a pending state to CSSImageGeneratorValue, which is used to enable the pending-images loading
mechanism for -webkit-cross-fade's sub-images. Rework the logic in CSSStyleSelector to support pending
generated images.

Support parsing fractional values for the cross-fade amount (for example, 0.5 = 50%). Clamp cross-fade
amount to 0-1 range.

Tests: css3/images/cross-fade-invalidation.html

css3/images/cross-fade-simple.html
css3/images/cross-fade-sizing.html
css3/images/cross-fade-tiled.html

  • CMakeLists.txt:
  • GNUmakefile.list.am:
  • Target.pri:
  • WebCore.gypi:
  • WebCore.xcodeproj/project.pbxproj:
  • css/CSSCanvasValue.h:

(WebCore::CSSCanvasValue::isPending):
(WebCore::CSSCanvasValue::loadSubimages):

  • css/CSSCrossfadeValue.cpp:

(WebCore::CSSCrossfadeValue::isPending):
(WebCore::CSSCrossfadeValue::loadSubimages):
(WebCore::subimageIsPending):
(WebCore::loadSubimage):
(WebCore::cachedImageForCSSValue):
(WebCore::CSSCrossfadeValue::image):
(WebCore::CSSCrossfadeValue::crossfadeChanged):

  • css/CSSCrossfadeValue.h:

(WebCore::CSSCrossfadeValue::create):
(WebCore::CSSCrossfadeValue::~CSSCrossfadeValue):
(WebCore::CSSCrossfadeValue::fixedSize):
(WebCore::CSSCrossfadeValue::CSSCrossfadeValue):
(WebCore::CSSCrossfadeValue::CrossfadeObserverProxy::CrossfadeObserverProxy):

  • css/CSSGradientValue.cpp:

(WebCore::CSSGradientValue::image):

  • css/CSSGradientValue.h:

(WebCore::CSSGradientValue::isPending):
(WebCore::CSSGradientValue::loadSubimages):

  • css/CSSImageGeneratorValue.cpp:

(WebCore::CSSImageGeneratorValue::generatedOrPendingImage):
(WebCore::CSSImageGeneratorValue::generatedImage):
(WebCore::CSSImageGeneratorValue::isPending):
(WebCore::CSSImageGeneratorValue::loadSubimages):

  • css/CSSImageGeneratorValue.h:
  • css/CSSParser.cpp:

(WebCore::CSSParser::parseCrossfade):

  • css/CSSStyleSelector.cpp:

(WebCore::CSSStyleSelector::styleImage):
(WebCore::CSSStyleSelector::generatedOrPendingFromValue):
(WebCore::CSSStyleSelector::loadPendingImage):
(WebCore::CSSStyleSelector::loadPendingImages):

  • css/CSSStyleSelector.h:
  • platform/graphics/BitmapImage.h:
  • platform/graphics/CrossfadeGeneratedImage.cpp: Added.

(WebCore::CrossfadeGeneratedImage::CrossfadeGeneratedImage):
(WebCore::CrossfadeGeneratedImage::~CrossfadeGeneratedImage):
(WebCore::CrossfadeGeneratedImage::drawCrossfade):
(WebCore::CrossfadeGeneratedImage::draw):
(WebCore::CrossfadeGeneratedImage::drawPattern):
(WebCore::CrossfadeGeneratedImage::imageChanged):

  • platform/graphics/CrossfadeGeneratedImage.h: Added.

(WebCore::CrossfadeGeneratedImage::create):
(WebCore::CrossfadeSubimageObserverProxy::CrossfadeSubimageObserverProxy):
(WebCore::CrossfadeSubimageObserverProxy::setReady):

  • platform/graphics/GeneratedImage.h:

(WebCore::GeneratedImage::GeneratedImage):

  • platform/graphics/GeneratorGeneratedImage.cpp: Renamed from Source/WebCore/platform/graphics/GeneratedImage.cpp.

(WebCore::GeneratorGeneratedImage::draw):
(WebCore::GeneratorGeneratedImage::drawPattern):
(WebCore::GeneratedImage::computeIntrinsicDimensions):

  • platform/graphics/GeneratorGeneratedImage.h: Copied from Source/WebCore/platform/graphics/GeneratedImage.h.

(WebCore::GeneratorGeneratedImage::create):
(WebCore::GeneratorGeneratedImage::~GeneratorGeneratedImage):
(WebCore::GeneratorGeneratedImage::GeneratorGeneratedImage):

  • platform/graphics/Image.h:
  • platform/graphics/ImageBuffer.h:
  • rendering/style/StylePendingImage.h:

(WebCore::StylePendingImage::create):
(WebCore::StylePendingImage::data):
(WebCore::StylePendingImage::cssImageValue):
(WebCore::StylePendingImage::cssImageGeneratorValue):
(WebCore::StylePendingImage::StylePendingImage):

Add tests of -webkit-cross-fade, ensuring that simple cross-fades between
two images work correctly.

Adjust fast/css/getComputedStyle/computed-style-cross-fade.html to test
fractional and out-of-range cross-fade percentage values.

  • css3/images/cross-fade-invalidation.html: Added.
  • css3/images/cross-fade-simple.html: Added.
  • css3/images/cross-fade-sizing.html: Added.
  • css3/images/cross-fade-tiled.html: Added.
  • css3/images/resources/blue-10.png: Added.
  • css3/images/resources/blue-100.png: Added.
  • css3/images/resources/green-10.png: Added.
  • css3/images/resources/green-100.png: Added.
  • css3/images/resources/green-circle.svg: Added.
  • css3/images/resources/red-10.png: Added.
  • css3/images/resources/red-100.png: Added.
  • fast/css/getComputedStyle/computed-style-cross-fade-expected.txt:
  • fast/css/getComputedStyle/computed-style-cross-fade.html:
  • platform/mac/css3/images/cross-fade-invalidation-expected.png: Added.
  • platform/mac/css3/images/cross-fade-invalidation-expected.txt: Added.
  • platform/mac/css3/images/cross-fade-simple-expected.png: Added.
  • platform/mac/css3/images/cross-fade-simple-expected.txt: Added.
  • platform/mac/css3/images/cross-fade-sizing-expected.png: Added.
  • platform/mac/css3/images/cross-fade-sizing-expected.txt: Added.
  • platform/mac/css3/images/cross-fade-tiled-expected.png: Added.
  • platform/mac/css3/images/cross-fade-tiled-expected.txt: Added.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/css/CSSGradientValue.h

    r99577 r100535  
    6969    bool isFixedSize() const { return false; }
    7070    IntSize fixedSize(const RenderObject*) const { return IntSize(); }
     71
     72    bool isPending() const { return false; }
     73    void loadSubimages(CachedResourceLoader*) { }
    7174
    7275protected:
Note: See TracChangeset for help on using the changeset viewer.