d626e7b5583b99a5e0d33dc59622b3395cc7c674
[WebKit-https.git] / Source / WebCore / platform / graphics / InbandTextTrackPrivateClient.h
1 /*
2  * Copyright (C) 2012, 2013 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 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 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 InbandTextTrackPrivateClient_h
27 #define InbandTextTrackPrivateClient_h
28
29 #include "Color.h"
30 #include "TrackPrivateBase.h"
31
32 #if ENABLE(DATACUE_VALUE)
33 #include "SerializedPlatformRepresentation.h"
34 #endif
35
36 #if ENABLE(VIDEO_TRACK)
37
38 namespace WebCore {
39
40 class InbandTextTrackPrivate;
41
42 class GenericCueData : public RefCounted<GenericCueData> {
43 public:
44
45     static PassRefPtr<GenericCueData> create() { return adoptRef(new GenericCueData()); }
46     virtual ~GenericCueData() { }
47
48     double startTime() const { return m_startTime; }
49     void setStartTime(double startTime) { m_startTime = startTime; }
50
51     double endTime() const { return m_endTime; }
52     void setEndTime(double endTime) { m_endTime = endTime; }
53
54     String id() const { return m_id; }
55     void setId(String id) { m_id = id; }
56
57     String content() const { return m_content; }
58     void setContent(String content) { m_content = content; }
59
60     double line() const { return m_line; }
61     void setLine(double line) { m_line = line; }
62
63     double position() const { return m_position; }
64     void setPosition(double position) { m_position = position; }
65
66     double size() const { return m_size; }
67     void setSize(double size) { m_size = size; }
68
69     enum Alignment {
70         None,
71         Start,
72         Middle,
73         End
74     };
75     Alignment align() const { return m_align; }
76     void setAlign(Alignment align) { m_align = align; }
77
78     String fontName() const { return m_fontName; }
79     void setFontName(String fontName) { m_fontName = fontName; }
80
81     double baseFontSize() const { return m_baseFontSize; }
82     void setBaseFontSize(double baseFontSize) { m_baseFontSize = baseFontSize; }
83
84     double relativeFontSize() const { return m_relativeFontSize; }
85     void setRelativeFontSize(double relativeFontSize) { m_relativeFontSize = relativeFontSize; }
86
87     Color foregroundColor() const { return m_foregroundColor; }
88     void setForegroundColor(RGBA32 color) { m_foregroundColor.setRGB(color); }
89
90     Color backgroundColor() const { return m_backgroundColor; }
91     void setBackgroundColor(RGBA32 color) { m_backgroundColor.setRGB(color); }
92     
93     Color highlightColor() const { return m_highlightColor; }
94     void setHighlightColor(RGBA32 color) { m_highlightColor.setRGB(color); }
95     
96     enum Status {
97         Uninitialized,
98         Partial,
99         Complete,
100     };
101     Status status() { return m_status; }
102     void setStatus(Status status) { m_status = status; }
103
104     bool doesExtendCueData(const GenericCueData&) const;
105
106 private:
107     GenericCueData()
108         : m_startTime(0)
109         , m_endTime(0)
110         , m_line(-1)
111         , m_position(-1)
112         , m_size(-1)
113         , m_align(None)
114         , m_baseFontSize(0)
115         , m_relativeFontSize(0)
116         , m_status(Uninitialized)
117     {
118     }
119
120     double m_startTime;
121     double m_endTime;
122     String m_id;
123     String m_content;
124     double m_line;
125     double m_position;
126     double m_size;
127     Alignment m_align;
128     String m_fontName;
129     double m_baseFontSize;
130     double m_relativeFontSize;
131     Color m_foregroundColor;
132     Color m_backgroundColor;
133     Color m_highlightColor;
134     Status m_status;
135 };
136
137 inline bool GenericCueData::doesExtendCueData(const GenericCueData& other) const
138 {
139     if (m_relativeFontSize != other.m_relativeFontSize)
140         return false;
141     if (m_baseFontSize != other.m_baseFontSize)
142         return false;
143     if (m_position != other.m_position)
144         return false;
145     if (m_line != other.m_line)
146         return false;
147     if (m_size != other.m_size)
148         return false;
149     if (m_align != other.m_align)
150         return false;
151     if (m_foregroundColor != other.m_foregroundColor)
152         return false;
153     if (m_backgroundColor != other.m_backgroundColor)
154         return false;
155     if (m_highlightColor != other.m_highlightColor)
156         return false;
157     if (m_fontName != other.m_fontName)
158         return false;
159     if (m_id != other.m_id)
160         return false;
161     if (m_content != other.m_content)
162         return false;
163     
164     return true;
165 }
166     
167 class InbandTextTrackPrivateClient : public TrackPrivateBaseClient {
168 public:
169     virtual ~InbandTextTrackPrivateClient() { }
170
171     virtual void addDataCue(InbandTextTrackPrivate*, double start, double end, const void*, unsigned) = 0;
172
173 #if ENABLE(DATACUE_VALUE)
174     virtual void addDataCue(InbandTextTrackPrivate*, double start, double end, PassRefPtr<SerializedPlatformRepresentation>, const String&) = 0;
175     virtual void updateDataCue(InbandTextTrackPrivate*, double start, double end, PassRefPtr<SerializedPlatformRepresentation>) = 0;
176     virtual void removeDataCue(InbandTextTrackPrivate*, double start, double end, PassRefPtr<SerializedPlatformRepresentation>) = 0;
177 #endif
178
179     virtual void addGenericCue(InbandTextTrackPrivate*, PassRefPtr<GenericCueData>) = 0;
180     virtual void updateGenericCue(InbandTextTrackPrivate*, GenericCueData*) = 0;
181     virtual void removeGenericCue(InbandTextTrackPrivate*, GenericCueData*) = 0;
182
183     virtual void parseWebVTTCueData(InbandTextTrackPrivate*, const char* data, unsigned length) = 0;
184 };
185
186 } // namespace WebCore
187
188 #endif
189 #endif