Home | History | Annotate | Download | only in css
      1 /*
      2  * Copyright (C) 2012 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 INC. AND ITS CONTRIBUTORS ``AS IS''
     14  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
     15  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
     16  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
     17  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
     18  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
     19  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
     20  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
     21  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
     22  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
     23  * THE POSSIBILITY OF SUCH DAMAGE.
     24  */
     25 
     26 #ifndef CSSImageSetValue_h
     27 #define CSSImageSetValue_h
     28 
     29 #include "core/css/CSSValueList.h"
     30 
     31 namespace WebCore {
     32 
     33 class ResourceFetcher;
     34 class StyleFetchedImageSet;
     35 class StyleImage;
     36 
     37 class CSSImageSetValue : public CSSValueList {
     38 public:
     39 
     40     static PassRefPtr<CSSImageSetValue> create()
     41     {
     42         return adoptRef(new CSSImageSetValue());
     43     }
     44     ~CSSImageSetValue();
     45 
     46     StyleFetchedImageSet* cachedImageSet(ResourceFetcher*, float deviceScaleFactor);
     47 
     48     // Returns a StyleFetchedImageSet if the best fit image has been cached already, otherwise a StylePendingImage.
     49     StyleImage* cachedOrPendingImageSet(float);
     50 
     51     String customCSSText() const;
     52 
     53     bool isPending() const { return !m_accessedBestFitImage; }
     54 
     55     struct ImageWithScale {
     56         String imageURL;
     57         float scaleFactor;
     58     };
     59 
     60     bool hasFailedOrCanceledSubresources() const;
     61 
     62     PassRefPtr<CSSImageSetValue> cloneForCSSOM() const;
     63 
     64 protected:
     65     ImageWithScale bestImageForScaleFactor();
     66 
     67 private:
     68     CSSImageSetValue();
     69     explicit CSSImageSetValue(const CSSImageSetValue& cloneFrom);
     70 
     71     void fillImageSet();
     72     static inline bool compareByScaleFactor(ImageWithScale first, ImageWithScale second) { return first.scaleFactor < second.scaleFactor; }
     73 
     74     RefPtr<StyleImage> m_imageSet;
     75     bool m_accessedBestFitImage;
     76 
     77     // This represents the scale factor that we used to find the best fit image. It does not necessarily
     78     // correspond to the scale factor of the best fit image.
     79     float m_scaleFactor;
     80 
     81     Vector<ImageWithScale> m_imagesInSet;
     82 };
     83 
     84 DEFINE_CSS_VALUE_TYPE_CASTS(CSSImageSetValue, isImageSetValue());
     85 
     86 } // namespace WebCore
     87 
     88 #endif // CSSImageSetValue_h
     89