15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*
25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2009 Apple 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
65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * are met:
75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 1. Redistributions of source code must retain the above copyright
85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *    notice, this list of conditions and the following disclaimer.
95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 2. Redistributions in binary form must reproduce the above copyright
105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *    notice, this list of conditions and the following disclaimer in the
115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *    documentation and/or other materials provided with the distribution.
125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *
135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
2302772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */
255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#ifndef GraphicsLayerClient_h
275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#define GraphicsLayerClient_h
285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
29a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)#include "platform/PlatformExport.h"
30e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)#include "wtf/text/WTFString.h"
31e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)
32c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)namespace blink {
335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class GraphicsContext;
355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class GraphicsLayer;
365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class IntRect;
375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)enum GraphicsLayerPaintingPhaseFlags {
395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    GraphicsLayerPaintBackground = (1 << 0),
405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    GraphicsLayerPaintForeground = (1 << 1),
415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    GraphicsLayerPaintMask = (1 << 2),
425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    GraphicsLayerPaintOverflowContents = (1 << 3),
43926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    GraphicsLayerPaintCompositedScroll = (1 << 4),
4406f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)    GraphicsLayerPaintChildClippingMask = (1 << 5),
455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    GraphicsLayerPaintAllWithOverflowClip = (GraphicsLayerPaintBackground | GraphicsLayerPaintForeground | GraphicsLayerPaintMask)
465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)};
475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)typedef unsigned GraphicsLayerPaintingPhase;
485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
49521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)enum {
50521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)    LayerTreeNormal = 0,
51521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)    LayerTreeIncludesDebugInfo = 1 << 0, // Dump extra debugging info like layer addresses.
52e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)    LayerTreeIncludesPaintInvalidationRects = 1 << 1,
53e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch    LayerTreeIncludesPaintingPhases = 1 << 2,
5406f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)    LayerTreeIncludesRootLayer = 1 << 3,
5506f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)    LayerTreeIncludesClipAndScrollParents = 1 << 4
56521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)};
57521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)typedef unsigned LayerTreeFlags;
58521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)
59a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)class PLATFORM_EXPORT GraphicsLayerClient {
605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)public:
615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    virtual ~GraphicsLayerClient() {}
625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // Callback for when hardware-accelerated animation started.
64d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    virtual void notifyAnimationStarted(const GraphicsLayer*, double monotonicTime) = 0;
655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    virtual void paintContents(const GraphicsLayer*, GraphicsContext&, GraphicsLayerPaintingPhase, const IntRect& inClip) = 0;
67e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)    virtual bool isTrackingPaintInvalidations() const { return false; }
685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
69e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)    virtual String debugName(const GraphicsLayer*) = 0;
70e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)
71197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#if ENABLE(ASSERT)
721e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)    // CompositedLayerMapping overrides this to verify that it is not
735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // currently painting contents. An ASSERT fails, if it is.
745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // This is executed in GraphicsLayer construction and destruction
755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // to verify that we don't create or destroy GraphicsLayers
765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // while painting.
775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    virtual void verifyNotPainting() { }
785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#endif
795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)};
805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
81c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)} // namespace blink
825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#endif // GraphicsLayerClient_h
84