{
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;
PositionImage
render_subtitles (list<dcp::SubtitleString> subtitles, dcp::Size target)
{
- if (subtitles.empty ()) {
- return PositionImage ();
- }
-
/* Estimate height that the subtitle image needs to be */
optional<int> top;
optional<int> bottom;
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);
/* Compute fade factor */
/* XXX */
float fade_factor = 1;
-#if 0
- dcp::Time now (time * 1000 / (4 * TIME_HZ));
- dcp::Time end_fade_up = i->in() + i->fade_up_time ();
- dcp::Time start_fade_down = i->out() - i->fade_down_time ();
- if (now < end_fade_up) {
- fade_factor = (now - i->in()) / i->fade_up_time();
- } else if (now > start_fade_down) {
- fade_factor = 1.0 - ((now - start_fade_down) / i->fade_down_time ());
- }
-#endif
layout->update_from_cairo_context (context);
if (i->effect() == dcp::SHADOW) {
/* Drop-shadow effect */
- dcp::Color const ec = i->effect_color ();
+ dcp::Colour const ec = i->effect_colour ();
context->set_source_rgba (float(ec.r) / 255, float(ec.g) / 255, float(ec.b) / 255, fade_factor);
context->move_to (x + 4, y + 4);
layout->add_to_cairo_context (context);
/* The actual subtitle */
context->move_to (x, y);
- dcp::Color const c = i->color ();
+ dcp::Colour const c = i->colour ();
context->set_source_rgba (float(c.r) / 255, float(c.g) / 255, float(c.b) / 255, fade_factor);
layout->add_to_cairo_context (context);
context->fill ();
if (i->effect() == dcp::BORDER) {
/* Border effect */
context->move_to (x, y);
- dcp::Color ec = i->effect_color ();
+ dcp::Colour ec = i->effect_colour ();
context->set_source_rgba (float(ec.r) / 255, float(ec.g) / 255, float(ec.b) / 255, fade_factor);
layout->add_to_cairo_context (context);
context->stroke ();