Reviewed and partially fixed by Tim Hatcher.
[WebKit-https.git] / WebCore / platform / graphics / mac / MediaPlayerPrivateQTKit.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 MediaPlayerPrivateQTKit_h
27 #define MediaPlayerPrivateQTKit_h
28
29 #if ENABLE(VIDEO)
30
31 #include "MediaPlayer.h"
32 #include "Timer.h"
33 #include <wtf/RetainPtr.h>
34
35 #ifdef __OBJC__
36 #import <QTKit/QTTime.h>
37 @class QTMovie;
38 @class QTMovieView;
39 @class WebCoreMovieObserver;
40 #else
41 class QTMovie;
42 class QTMovieView;
43 class QTTime;
44 class WebCoreMovieObserver;
45 #endif
46
47 namespace WebCore {
48
49 class MediaPlayerPrivate : Noncopyable {
50 public:
51     MediaPlayerPrivate(MediaPlayer*);
52     ~MediaPlayerPrivate();
53     
54     IntSize naturalSize() const;
55     bool hasVideo() const;
56     
57     void load(const String& url);
58     void cancelLoad();
59     
60     void play();
61     void pause();    
62     
63     bool paused() const;
64     bool seeking() const;
65     
66     float duration() const;
67     float currentTime() const;
68     void seek(float time);
69     void setEndTime(float time);
70     
71     void addCuePoint(float time);
72     void removeCuePoint(float time);
73     void clearCuePoints();
74     
75     void setRate(float);
76     void setVolume(float);
77     void setMuted(bool);
78     
79     int dataRate() const;
80     
81     MediaPlayer::NetworkState networkState() const { return m_networkState; }
82     MediaPlayer::ReadyState readyState() const { return m_readyState; }
83     
84     float maxTimeBuffered() const;
85     float maxTimeSeekable() const;
86     unsigned bytesLoaded() const;
87     bool totalBytesKnown() const;
88     unsigned totalBytes() const;
89     
90     void setVisible(bool);
91     void setRect(const IntRect& r);
92     
93     void loadStateChanged();
94     void rateChanged();
95     void sizeChanged();
96     void timeChanged();
97     void volumeChanged();
98     void didEnd();
99     
100     void repaint();
101     void paint(GraphicsContext*, const IntRect&);
102     
103     static void getSupportedTypes(HashSet<String>& types);
104     
105 private:
106     void createQTMovie(const String& url);
107     void createQTMovieView();
108     void detachQTMovieView();
109     QTTime createQTTime(float time) const;
110     
111     void updateStates();
112     void doSeek();
113     void cancelSeek();
114     void seekTimerFired(Timer<MediaPlayerPrivate>*);
115     void cuePointTimerFired(Timer<MediaPlayerPrivate>*);
116     float maxTimeLoaded() const;
117     void startCuePointTimerIfNeeded();
118
119     MediaPlayer* m_player;
120     RetainPtr<QTMovie> m_qtMovie;
121     RetainPtr<QTMovieView> m_qtMovieView;
122     RetainPtr<WebCoreMovieObserver> m_objcObserver;
123     float m_seekTo;
124     float m_endTime;
125     Timer<MediaPlayerPrivate> m_seekTimer;
126     Timer<MediaPlayerPrivate> m_cuePointTimer;
127     float m_previousTimeCueTimerFired;
128     MediaPlayer::NetworkState m_networkState;
129     MediaPlayer::ReadyState m_readyState;
130     bool m_startedPlaying;
131     bool m_isStreaming;
132 };
133
134 }
135
136 #endif
137 #endif