Supporters update.
[dcpomatic.git] / src / lib / render_text.h
1 /*
2     Copyright (C) 2014-2018 Carl Hetherington <cth@carlh.net>
3
4     This file is part of DCP-o-matic.
5
6     DCP-o-matic 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     DCP-o-matic 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 DCP-o-matic.  If not, see <http://www.gnu.org/licenses/>.
18
19 */
20
21
22 #include "dcpomatic_time.h"
23 #include "position_image.h"
24 #include "rect.h"
25 #include "string_text.h"
26 #include <dcp/util.h>
27 #include <memory>
28
29
30 namespace dcpomatic {
31         class Font;
32 }
33
34
35 std::string marked_up(std::vector<StringText> subtitles, int target_height, float fade_factor, std::string font_name);
36 std::vector<PositionImage> render_text(std::vector<StringText>, dcp::Size, dcpomatic::DCPTime, int);
37 std::vector<dcpomatic::Rect<int>> bounding_box(std::vector<StringText> subtitles, dcp::Size target, boost::optional<dcp::SubtitleStandard> override_standard = boost::none);
38
39
40 class FontMetrics
41 {
42 public:
43         FontMetrics(int target_height)
44                 : _target_height(target_height)
45         {}
46
47         float baseline_to_bottom(StringText const& subtitle);
48         float height(StringText const& subtitle);
49
50 private:
51         /** Class to collect the properties of a subtitle which affect the metrics we care about
52          *  i.e. baseline position and height.
53          */
54         class Identifier
55         {
56         public:
57                 Identifier(StringText const& subtitle);
58
59                 std::shared_ptr<dcpomatic::Font> font;
60                 int size;
61                 float aspect_adjust;
62
63                 bool operator<(Identifier const& other) const;
64         };
65
66         using Cache = std::map<Identifier, std::pair<float, float>>;
67
68         Cache::iterator get(StringText const& subtitle);
69
70         Cache _cache;
71
72         int _target_height;
73 };
74