Merge master.
[dcpomatic.git] / src / lib / subtitle.h
1 /* -*- c-basic-offset: 8; default-tab-width: 8; -*- */
2
3 /*
4     Copyright (C) 2012 Carl Hetherington <cth@carlh.net>
5
6     This program is free software; you can redistribute it and/or modify
7     it under the terms of the GNU General Public License as published by
8     the Free Software Foundation; either version 2 of the License, or
9     (at your option) any later version.
10
11     This program is distributed in the hope that it will be useful,
12     but WITHOUT ANY WARRANTY; without even the implied warranty of
13     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14     GNU General Public License for more details.
15
16     You should have received a copy of the GNU General Public License
17     along with this program; if not, write to the Free Software
18     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
19
20 */
21
22 /** @file  src/subtitle.h
23  *  @brief Representations of subtitles.
24  */
25
26 #include <list>
27 #include <boost/shared_ptr.hpp>
28 #include "types.h"
29
30 struct AVSubtitle;
31 class Image;
32
33 /** A subtitle, consisting of an image and a position */
34 class Subtitle
35 {
36 public:
37         Subtitle (Position p, boost::shared_ptr<Image> i);
38
39         void set_position (Position p) {
40                 _position = p;
41         }
42
43         Position position () const {
44                 return _position;
45         }
46         
47         boost::shared_ptr<Image> image () const {
48                 return _image;
49         }
50
51         dvdomatic::Rect area () const;
52         
53 private:
54         Position _position;
55         boost::shared_ptr<Image> _image;
56 };
57
58 dvdomatic::Rect
59 subtitle_transformed_area (
60         float target_x_scale, float target_y_scale,
61         dvdomatic::Rect sub_area, int subtitle_offset, float subtitle_scale
62         );
63
64 /** A Subtitle class with details of the time over which it should be shown */
65 class TimedSubtitle
66 {
67 public:
68         TimedSubtitle (AVSubtitle const &);
69
70         bool displayed_at (Time) const;
71         
72         boost::shared_ptr<Subtitle> subtitle () const {
73                 return _subtitle;
74         }
75
76 private:
77         /** the subtitle */
78         boost::shared_ptr<Subtitle> _subtitle;
79         /** display from time from the start of the content */
80         Time _from;
81         /** display to time from the start of the content */
82         Time _to;
83 };