15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/* 25267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) * Copyright (C) 2013 Google Inc. All rights reserved. 35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Redistribution and use in source and binary forms, with or without 55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * modification, are permitted provided that the following conditions are 65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * met: 75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * * Redistributions of source code must retain the above copyright 95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * notice, this list of conditions and the following disclaimer. 105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * * Redistributions in binary form must reproduce the above 115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * copyright notice, this list of conditions and the following disclaimer 125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * in the documentation and/or other materials provided with the 135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * distribution. 145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * * Neither the name of Google Inc. nor the names of its 155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * contributors may be used to endorse or promote products derived from 165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * this software without specific prior written permission. 175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3119cde67944066db31e633d9e386f2aa9bf9fadb3Torne (Richard Coles)#ifndef DisplayList_h 3219cde67944066db31e633d9e386f2aa9bf9fadb3Torne (Richard Coles)#define DisplayList_h 335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3419cde67944066db31e633d9e386f2aa9bf9fadb3Torne (Richard Coles)#include "platform/geometry/FloatRect.h" 357242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci#include "platform/geometry/IntRect.h" 367242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci#include "platform/geometry/LayoutPoint.h" 377242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci#include "third_party/skia/include/core/SkPicture.h" 3819cde67944066db31e633d9e386f2aa9bf9fadb3Torne (Richard Coles)#include "wtf/FastAllocBase.h" 3919cde67944066db31e633d9e386f2aa9bf9fadb3Torne (Richard Coles)#include "wtf/RefCounted.h" 4019cde67944066db31e633d9e386f2aa9bf9fadb3Torne (Richard Coles)#include "wtf/RefPtr.h" 4119cde67944066db31e633d9e386f2aa9bf9fadb3Torne (Richard Coles) 42c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)namespace blink { 4319cde67944066db31e633d9e386f2aa9bf9fadb3Torne (Richard Coles) 4410f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochclass IntSize; 4510f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch 4619cde67944066db31e633d9e386f2aa9bf9fadb3Torne (Richard Coles)class PLATFORM_EXPORT DisplayList FINAL : public WTF::RefCounted<DisplayList> { 4719cde67944066db31e633d9e386f2aa9bf9fadb3Torne (Richard Coles) WTF_MAKE_FAST_ALLOCATED; 4819cde67944066db31e633d9e386f2aa9bf9fadb3Torne (Richard Coles) WTF_MAKE_NONCOPYABLE(DisplayList); 4919cde67944066db31e633d9e386f2aa9bf9fadb3Torne (Richard Coles)public: 507242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci static PassRefPtr<DisplayList> create(const FloatRect& bounds) 517242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci { 527242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci return adoptRef(new DisplayList(bounds)); 537242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci } 547242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 557242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci virtual ~DisplayList() { } 5619cde67944066db31e633d9e386f2aa9bf9fadb3Torne (Richard Coles) 577242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci const FloatRect& bounds() const { return m_bounds; } 5810f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch 597242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci // This entry point will return 0 when the DisplayList is in the midst of 607242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci // recording (i.e., between a GraphicsContext beginRecording/endRecording pair) 6110f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch // and if no recording has ever been completed. Otherwise it will return 6210f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch // the picture created by the last endRecording call. 637242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci SkPicture* picture() const { return m_picture.get(); } 647242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci void setPicture(SkPicture* picture) { m_picture = adoptRef(picture); } 6519cde67944066db31e633d9e386f2aa9bf9fadb3Torne (Richard Coles) 667242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci // FIXME: Need unit testing of these methods and their effect 677242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci const SkMatrix& transform() const { return m_transform; } 687242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci void setTransform(const SkMatrix& transform) { m_transform = transform; } 697242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci void setTransformFromPaintOffset(const LayoutPoint& paintOffset) 707242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci { 717242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci SkMatrix m; 727242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci m.setTranslate(paintOffset.x().toFloat(), paintOffset.y().toFloat()); 737242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci setTransform(m); 747242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci } 757242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci void clearTransform() { m_transform.reset(); } 767242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 777242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci // FIXME: Need unit testing of these methods and their effect 787242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci const SkRect& clip() const { return m_clip; } 797242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci void setClip(const IntRect& rect) { m_clip = rect; } 807242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci void setClip(const FloatRect& rect) { m_clip = rect; } 817242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci void clearClip() { m_clip.setEmpty(); } 8210f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch 8319cde67944066db31e633d9e386f2aa9bf9fadb3Torne (Richard Coles)private: 847242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci DisplayList(const FloatRect& bounds) : m_bounds(bounds) 857242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci { 867242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci clearTransform(); 877242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci clearClip(); 887242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci } 897242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 9019cde67944066db31e633d9e386f2aa9bf9fadb3Torne (Richard Coles) FloatRect m_bounds; 917242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci SkMatrix m_transform; 927242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci SkRect m_clip; // TODO: Do we need to support other types of clips here? 9319cde67944066db31e633d9e386f2aa9bf9fadb3Torne (Richard Coles) RefPtr<SkPicture> m_picture; 9419cde67944066db31e633d9e386f2aa9bf9fadb3Torne (Richard Coles)}; 955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 96e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)} // namespace blink 975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 9819cde67944066db31e633d9e386f2aa9bf9fadb3Torne (Richard Coles)#endif // DisplayList_h 99