using std::string;
using std::min;
using std::max;
+using std::pair;
using boost::shared_ptr;
using boost::optional;
{
switch (v_align) {
case dcp::TOP:
- return (v_position / 100) * target_height - offset;
+ return v_position * target_height - offset;
case dcp::CENTER:
- return (0.5 + v_position / 100) * target_height - offset;
+ return (0.5 + v_position) * target_height - offset;
case dcp::BOTTOM:
- return (1.0 - v_position / 100) * target_height - offset;
+ return (1.0 - v_position) * target_height - offset;
}
return 0;
}
-void
-render_subtitles (list<dcp::SubtitleString> subtitles, dcp::Size target, shared_ptr<Image>& image, Position<int>& position)
+PositionImage
+render_subtitles (list<dcp::SubtitleString> subtitles, dcp::Size target)
{
if (subtitles.empty ()) {
- image.reset ();
- return;
+ return PositionImage ();
}
/* Estimate height that the subtitle image needs to be */
top = top.get() - 32;
bottom = bottom.get() + 32;
- image.reset (new Image (PIX_FMT_RGBA, dcp::Size (target.width, bottom.get() - top.get ()), false));
+ shared_ptr<Image> image (new Image (PIX_FMT_RGBA, dcp::Size (target.width, bottom.get() - top.get ()), false));
image->make_black ();
Cairo::RefPtr<Cairo::ImageSurface> surface = Cairo::ImageSurface::create (
context->set_line_width (1);
for (list<dcp::SubtitleString>::const_iterator i = subtitles.begin(); i != subtitles.end(); ++i) {
- string f = i->font ();
- if (f.empty ()) {
- f = "Arial";
- }
- Pango::FontDescription font (f);
+ Pango::FontDescription font (i->font().get_value_or ("Arial"));
font.set_absolute_size (i->size_in_pixels (target.height) * PANGO_SCALE);
if (i->italic ()) {
font.set_style (Pango::STYLE_ITALIC);
context->stroke ();
}
}
+
+ return PositionImage (image, Position<int> (0, top.get ()));
}