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/loader/cache/ImageResource.h"
     32 #include "core/loader/cache/ImageResourceClient.h"
     33 #include "core/loader/cache/ResourcePtr.h"
     34 #include "core/platform/graphics/Image.h"
     35 
     36 namespace WebCore {
     37 
     38 class ImageResource;
     39 class CrossfadeSubimageObserverProxy;
     40 class RenderObject;
     41 class Document;
     42 
     43 class CSSCrossfadeValue : public CSSImageGeneratorValue {
     44     friend class CrossfadeSubimageObserverProxy;
     45 public:
     46     static PassRefPtr<CSSCrossfadeValue> create(PassRefPtr<CSSValue> fromValue, PassRefPtr<CSSValue> toValue)
     47     {
     48         return adoptRef(new CSSCrossfadeValue(fromValue, toValue));
     49     }
     50 
     51     ~CSSCrossfadeValue();
     52 
     53     String customCssText() const;
     54 
     55     PassRefPtr<Image> image(RenderObject*, const IntSize&);
     56     bool isFixedSize() const { return true; }
     57     IntSize fixedSize(const RenderObject*);
     58 
     59     bool isPending() const;
     60     bool knownToBeOpaque(const RenderObject*) const;
     61 
     62     void loadSubimages(ResourceFetcher*);
     63 
     64     void setPercentage(PassRefPtr<CSSPrimitiveValue> percentageValue) { m_percentageValue = percentageValue; }
     65 
     66     bool hasFailedOrCanceledSubresources() const;
     67 
     68     bool equals(const CSSCrossfadeValue&) const;
     69 
     70 private:
     71     CSSCrossfadeValue(PassRefPtr<CSSValue> fromValue, PassRefPtr<CSSValue> toValue)
     72         : CSSImageGeneratorValue(CrossfadeClass)
     73         , m_fromValue(fromValue)
     74         , m_toValue(toValue)
     75         , m_cachedFromImage(0)
     76         , m_cachedToImage(0)
     77         , m_crossfadeSubimageObserver(this) { }
     78 
     79     class CrossfadeSubimageObserverProxy : public ImageResourceClient {
     80     public:
     81         CrossfadeSubimageObserverProxy(CSSCrossfadeValue* ownerValue)
     82         : m_ownerValue(ownerValue)
     83         , m_ready(false) { }
     84 
     85         virtual ~CrossfadeSubimageObserverProxy() { }
     86         virtual void imageChanged(ImageResource*, const IntRect* = 0) OVERRIDE;
     87         void setReady(bool ready) { m_ready = ready; }
     88     private:
     89         CSSCrossfadeValue* m_ownerValue;
     90         bool m_ready;
     91     };
     92 
     93     void crossfadeChanged(const IntRect&);
     94 
     95     RefPtr<CSSValue> m_fromValue;
     96     RefPtr<CSSValue> m_toValue;
     97     RefPtr<CSSPrimitiveValue> m_percentageValue;
     98 
     99     ResourcePtr<ImageResource> m_cachedFromImage;
    100     ResourcePtr<ImageResource> m_cachedToImage;
    101 
    102     RefPtr<Image> m_generatedImage;
    103 
    104     CrossfadeSubimageObserverProxy m_crossfadeSubimageObserver;
    105 };
    106 
    107 } // namespace WebCore
    108 
    109 #endif // CSSCrossfadeValue_h
    110