WebCore:
[WebKit-https.git] / WebCore / platform / graphics / Movie.h
1 /*
2  * Copyright (C) 2007 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 COMPUTER, INC. ``AS IS'' AND ANY
14  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
17  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
20  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
24  */
25
26 #ifndef Movie_h
27 #define Movie_h
28
29 #if ENABLE(VIDEO)
30
31 #include "IntRect.h"
32 #include "StringHash.h"
33 #include "wtf/HashSet.h"
34 #include "wtf/Noncopyable.h"
35
36 namespace WebCore {
37
38 class GraphicsContext;
39 class IntSize;
40 class Movie;
41 class MoviePrivate;
42 class String;
43 class Widget;
44
45 class MovieClient
46 {
47 public:
48     virtual ~MovieClient() { }
49     virtual void movieNetworkStateChanged(Movie*) { }
50     virtual void movieReadyStateChanged(Movie*) { }
51     virtual void movieVolumeChanged(Movie*) { }
52     virtual void movieTimeChanged(Movie*) { }
53     virtual void movieCuePointReached(Movie*, float cueTime) { }
54 };
55
56 class Movie : Noncopyable {
57 public:
58     Movie(MovieClient*);
59     virtual ~Movie();
60     
61     static void getSupportedTypes(HashSet<String>&);
62     
63     IntSize naturalSize();
64     bool hasVideo();
65     
66     Widget* parentWidget() const { return m_parentWidget; }
67     void setParentWidget(Widget* parent) { m_parentWidget = parent; }
68     
69     IntRect rect() const { return m_rect; }
70     void setRect(const IntRect& r);
71     
72     void load(String url);
73     void cancelLoad();
74     
75     bool visible() const;
76     void setVisible(bool);
77     
78     void play();
79     void pause();    
80     
81     bool paused() const;
82     bool seeking() const;
83     
84     float duration() const;
85     float currentTime() const;
86     void seek(float time);
87     
88     void setEndTime(float time);
89     
90     void addCuePoint(float time);
91     void removeCuePoint(float time);
92     void clearCuePoints();
93     
94     float rate() const;
95     void setRate(float);
96     
97     float maxTimeBuffered();
98     float maxTimeSeekable();
99     
100     unsigned bytesLoaded();
101     bool totalBytesKnown();
102     unsigned totalBytes();
103     
104     float volume() const;
105     void setVolume(float);
106     bool muted() const;
107     void setMuted(bool);
108     
109     int dataRate() const;
110     
111     void paint(GraphicsContext*, const IntRect&);
112     
113     enum NetworkState { Empty, LoadFailed, Loading, LoadedMetaData, LoadedFirstFrame, Loaded };
114     NetworkState networkState();
115
116     enum ReadyState  { DataUnavailable, CanShowCurrentFrame, CanPlay, CanPlayThrough };
117     ReadyState readyState();
118     
119     void networkStateChanged();
120     void readyStateChanged();
121     void volumeChanged();
122     void timeChanged();
123     void cuePointReached(float cueTime);
124
125 private:
126         
127     friend class MoviePrivate;
128     
129     MovieClient* m_movieClient;
130     MoviePrivate* m_private;
131     Widget* m_parentWidget;
132     IntRect m_rect;
133     bool m_visible;
134     float m_rate;
135     float m_volume;
136     bool m_muted;
137     HashSet<float> m_cuePoints;
138 };
139
140 }
141
142 #endif
143 #endif