Home | History | Annotate | Download | only in graphics
      1 /*
      2  * Copyright (C) 2013 Google 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 are
      6  * met:
      7  *
      8  *     * Redistributions of source code must retain the above copyright
      9  * notice, this list of conditions and the following disclaimer.
     10  *     * Redistributions in binary form must reproduce the above
     11  * copyright notice, this list of conditions and the following disclaimer
     12  * in the documentation and/or other materials provided with the
     13  * distribution.
     14  *     * Neither the name of Google Inc. nor the names of its
     15  * contributors may be used to endorse or promote products derived from
     16  * this software without specific prior written permission.
     17  *
     18  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
     19  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
     20  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
     21  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
     22  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     23  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
     24  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
     25  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
     26  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     27  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
     28  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     29  */
     30 
     31 #ifndef DisplayList_h
     32 #define DisplayList_h
     33 
     34 #include "platform/geometry/FloatRect.h"
     35 #include "platform/geometry/IntRect.h"
     36 #include "platform/geometry/LayoutPoint.h"
     37 #include "third_party/skia/include/core/SkPicture.h"
     38 #include "wtf/FastAllocBase.h"
     39 #include "wtf/RefCounted.h"
     40 #include "wtf/RefPtr.h"
     41 
     42 namespace blink {
     43 
     44 class IntSize;
     45 
     46 class PLATFORM_EXPORT DisplayList FINAL : public WTF::RefCounted<DisplayList> {
     47     WTF_MAKE_FAST_ALLOCATED;
     48     WTF_MAKE_NONCOPYABLE(DisplayList);
     49 public:
     50     static PassRefPtr<DisplayList> create(const FloatRect& bounds)
     51     {
     52         return adoptRef(new DisplayList(bounds));
     53     }
     54 
     55     virtual ~DisplayList() { }
     56 
     57     const FloatRect& bounds() const { return m_bounds; }
     58 
     59     // This entry point will return 0 when the DisplayList is in the midst of
     60     // recording (i.e., between a GraphicsContext beginRecording/endRecording pair)
     61     // and if no recording has ever been completed. Otherwise it will return
     62     // the picture created by the last endRecording call.
     63     SkPicture* picture() const { return m_picture.get(); }
     64     void setPicture(SkPicture* picture) { m_picture = adoptRef(picture); }
     65 
     66     // FIXME: Need unit testing of these methods and their effect
     67     const SkMatrix& transform() const { return m_transform; }
     68     void setTransform(const SkMatrix& transform) { m_transform = transform; }
     69     void setTransformFromPaintOffset(const LayoutPoint& paintOffset)
     70     {
     71         SkMatrix m;
     72         m.setTranslate(paintOffset.x().toFloat(), paintOffset.y().toFloat());
     73         setTransform(m);
     74     }
     75     void clearTransform() { m_transform.reset(); }
     76 
     77     // FIXME: Need unit testing of these methods and their effect
     78     const SkRect& clip() const { return m_clip; }
     79     void setClip(const IntRect& rect) { m_clip = rect; }
     80     void setClip(const FloatRect& rect) { m_clip = rect; }
     81     void clearClip() { m_clip.setEmpty(); }
     82 
     83 private:
     84     DisplayList(const FloatRect& bounds) : m_bounds(bounds)
     85     {
     86         clearTransform();
     87         clearClip();
     88     }
     89 
     90     FloatRect m_bounds;
     91     SkMatrix m_transform;
     92     SkRect m_clip; // TODO: Do we need to support other types of clips here?
     93     RefPtr<SkPicture> m_picture;
     94 };
     95 
     96 } // namespace blink
     97 
     98 #endif // DisplayList_h
     99