Home | History | Annotate | Download | only in css
      1 /*
      2  * Copyright (C) 2011 Apple Inc. All rights reserved.
      3  *
      4  * Redistribution and use in source and binary forms, with or without
      5  * modification, are permitted provided that the following conditions
      6  * are met:
      7  * 1. Redistributions of source code must retain the above copyright
      8  *    notice, this list of conditions and the following disclaimer.
      9  * 2. Redistributions in binary form must reproduce the above copyright
     10  *    notice, this list of conditions and the following disclaimer in the
     11  *    documentation and/or other materials provided with the distribution.
     12  *
     13  * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
     14  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
     15  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
     16  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
     17  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
     18  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
     19  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
     20  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
     21  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     22  * (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.
     24  */
     25 
     26 #ifndef CSSCrossfadeValue_h
     27 #define CSSCrossfadeValue_h
     28 
     29 #include "core/css/CSSImageGeneratorValue.h"
     30 #include "core/css/CSSPrimitiveValue.h"
     31 #include "core/fetch/ImageResource.h"
     32 #include "core/fetch/ImageResourceClient.h"
     33 #include "core/fetch/ResourcePtr.h"
     34 #include "platform/graphics/Image.h"
     35 
     36 namespace blink {
     37 
     38 class ImageResource;
     39 class CrossfadeSubimageObserverProxy;
     40 class RenderObject;
     41 
     42 class CSSCrossfadeValue : public CSSImageGeneratorValue {
     43     friend class CrossfadeSubimageObserverProxy;
     44 public:
     45     static PassRefPtrWillBeRawPtr<CSSCrossfadeValue> create(PassRefPtrWillBeRawPtr<CSSValue> fromValue, PassRefPtrWillBeRawPtr<CSSValue> toValue)
     46     {
     47         return adoptRefWillBeNoop(new CSSCrossfadeValue(fromValue, toValue));
     48     }
     49 
     50     ~CSSCrossfadeValue();
     51 
     52     String customCSSText() const;
     53 
     54     PassRefPtr<Image> image(RenderObject*, const IntSize&);
     55     bool isFixedSize() const { return true; }
     56     IntSize fixedSize(const RenderObject*);
     57 
     58     bool isPending() const;
     59     bool knownToBeOpaque(const RenderObject*) const;
     60 
     61     void loadSubimages(ResourceFetcher*);
     62 
     63     void setPercentage(PassRefPtrWillBeRawPtr<CSSPrimitiveValue> percentageValue) { m_percentageValue = percentageValue; }
     64 
     65     bool hasFailedOrCanceledSubresources() const;
     66 
     67     bool equals(const CSSCrossfadeValue&) const;
     68 
     69     void traceAfterDispatch(Visitor*);
     70 
     71 private:
     72     CSSCrossfadeValue(PassRefPtrWillBeRawPtr<CSSValue> fromValue, PassRefPtrWillBeRawPtr<CSSValue> toValue)
     73         : CSSImageGeneratorValue(CrossfadeClass)
     74         , m_fromValue(fromValue)
     75         , m_toValue(toValue)
     76         , m_cachedFromImage(0)
     77         , m_cachedToImage(0)
     78         , m_crossfadeSubimageObserver(this) { }
     79 
     80     class CrossfadeSubimageObserverProxy FINAL : public ImageResourceClient {
     81     public:
     82         CrossfadeSubimageObserverProxy(CSSCrossfadeValue* ownerValue)
     83         : m_ownerValue(ownerValue)
     84         , m_ready(false) { }
     85 
     86         virtual ~CrossfadeSubimageObserverProxy() { }
     87         virtual void imageChanged(ImageResource*, const IntRect* = 0) OVERRIDE;
     88         void setReady(bool ready) { m_ready = ready; }
     89     private:
     90         CSSCrossfadeValue* m_ownerValue;
     91         bool m_ready;
     92     };
     93 
     94     void crossfadeChanged(const IntRect&);
     95 
     96     RefPtrWillBeMember<CSSValue> m_fromValue;
     97     RefPtrWillBeMember<CSSValue> m_toValue;
     98     RefPtrWillBeMember<CSSPrimitiveValue> m_percentageValue;
     99 
    100     ResourcePtr<ImageResource> m_cachedFromImage;
    101     ResourcePtr<ImageResource> m_cachedToImage;
    102 
    103     RefPtr<Image> m_generatedImage;
    104 
    105     CrossfadeSubimageObserverProxy m_crossfadeSubimageObserver;
    106 };
    107 
    108 DEFINE_CSS_VALUE_TYPE_CASTS(CSSCrossfadeValue, isCrossfadeValue());
    109 
    110 } // namespace blink
    111 
    112 #endif // CSSCrossfadeValue_h
    113