3c0ce523e8497e969836cf0305957fc323f2c46e
[dcpomatic.git] / src / lib / content_subtitle.h
1 /*
2     Copyright (C) 2014 Carl Hetherington <cth@carlh.net>
3
4     This program is free software; you can redistribute it and/or modify
5     it under the terms of the GNU General Public License as published by
6     the Free Software Foundation; either version 2 of the License, or
7     (at your option) any later version.
8
9     This program is distributed in the hope that it will be useful,
10     but WITHOUT ANY WARRANTY; without even the implied warranty of
11     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12     GNU General Public License for more details.
13
14     You should have received a copy of the GNU General Public License
15     along with this program; if not, write to the Free Software
16     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
17
18 */
19
20 #ifndef DCPOMATIC_CONTENT_SUBTITLE_H
21 #define DCPOMATIC_CONTENT_SUBTITLE_H
22
23 #include "dcpomatic_time.h"
24 #include "rect.h"
25 #include "image_subtitle.h"
26 #include <dcp/subtitle_string.h>
27 #include <list>
28
29 class Image;
30
31 class ContentSubtitle
32 {
33 public:
34         ContentSubtitle (ContentTimePeriod p)
35                 : _period (p)
36         {}
37
38         ContentTimePeriod period () const {
39                 return _period;
40         }
41
42 private:
43         ContentTimePeriod _period;
44 };
45
46 class ContentImageSubtitle : public ContentSubtitle
47 {
48 public:
49         ContentImageSubtitle (ContentTimePeriod p, boost::shared_ptr<Image> im, dcpomatic::Rect<double> r)
50                 : ContentSubtitle (p)
51                 , sub (im, r)
52         {}
53
54         /* Our subtitle, with its rectangle unmodified by any offsets or scales that the content specifies */
55         ImageSubtitle sub;
56 };
57
58 /** A text subtitle.  We store the time period separately (as well as in the dcp::SubtitleStrings)
59  *  as the dcp::SubtitleString timings are sometimes quite heavily quantised and this causes problems
60  *  when we want to compare the quantised periods to the unquantised ones.
61  */
62 class ContentTextSubtitle : public ContentSubtitle
63 {
64 public:
65         ContentTextSubtitle (ContentTimePeriod p, std::list<dcp::SubtitleString> s)
66                 : ContentSubtitle (p)
67                 , subs (s)
68         {}
69
70         std::list<dcp::SubtitleString> subs;
71 };
72
73 #endif