Stop using PassRefPtr in platform/graphics
[WebKit-https.git] / Source / WebCore / platform / graphics / texmap / coordinated / CoordinatedImageBacking.h
1 /*
2  * Copyright (C) 2012 Company 100, 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
27 #ifndef CoordinatedImageBacking_h
28 #define CoordinatedImageBacking_h
29
30 #if USE(COORDINATED_GRAPHICS)
31 #include "CoordinatedGraphicsState.h"
32 #include "CoordinatedSurface.h"
33 #include "Image.h"
34 #include "Timer.h"
35 #include <wtf/RefCounted.h>
36 #include <wtf/Vector.h>
37
38 namespace WebCore {
39
40 class CoordinatedImageBacking : public RefCounted<CoordinatedImageBacking> {
41 public:
42     class Client {
43     public:
44         virtual void createImageBacking(CoordinatedImageBackingID) = 0;
45         virtual void updateImageBacking(CoordinatedImageBackingID, RefPtr<CoordinatedSurface>&&) = 0;
46         virtual void clearImageBackingContents(CoordinatedImageBackingID) = 0;
47         virtual void removeImageBacking(CoordinatedImageBackingID) = 0;
48     };
49
50     class Host {
51     public:
52         virtual bool imageBackingVisible() = 0;
53     };
54
55     static Ref<CoordinatedImageBacking> create(Client&, Ref<Image>&&);
56     virtual ~CoordinatedImageBacking();
57
58     static CoordinatedImageBackingID getCoordinatedImageBackingID(Image*);
59     CoordinatedImageBackingID id() const { return m_id; }
60
61     void addHost(Host*);
62     void removeHost(Host*);
63
64     // When a new image is updated or an animated gif is progressed, CoordinatedGraphicsLayer calls markDirty().
65     void markDirty();
66
67     // Create, remove or update its backing.
68     void update();
69
70 private:
71     CoordinatedImageBacking(Client&, Ref<Image>&&);
72
73     void releaseSurfaceIfNeeded();
74     void updateVisibilityIfNeeded(bool& changedToVisible);
75     void clearContentsTimerFired();
76
77     Client* m_client;
78     RefPtr<Image> m_image;
79     NativeImagePtr m_nativeImagePtr;
80     CoordinatedImageBackingID m_id;
81     Vector<Host*> m_hosts;
82
83     RefPtr<CoordinatedSurface> m_surface;
84
85     Timer m_clearContentsTimer;
86
87     bool m_isDirty;
88     bool m_isVisible;
89
90 };
91
92 } // namespace WebCore
93 #endif // USE(COORDINATED_GRAPHICS)
94
95 #endif // CoordinatedImageBacking_h