diff options
| author | Carl Hetherington <cth@carlh.net> | 2016-02-15 15:17:32 +0000 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2016-02-15 22:34:57 +0000 |
| commit | 9e8d6f0a2a63ce2ce11cbda8b6dde06664871000 (patch) | |
| tree | e604748ea49c0b7225fafbd5b645e34cde4c9dd2 /src/lib | |
| parent | 6fde557864505b470c438e4161ee494f29b90d63 (diff) | |
Fix scaling of subtitles to be more correct when stretching the fonts.
Diffstat (limited to 'src/lib')
| -rw-r--r-- | src/lib/player.cc | 13 | ||||
| -rw-r--r-- | src/lib/render_subtitles.cc | 5 |
2 files changed, 14 insertions, 4 deletions
diff --git a/src/lib/player.cc b/src/lib/player.cc index fc1332573..3e92eb3d9 100644 --- a/src/lib/player.cc +++ b/src/lib/player.cc @@ -670,8 +670,17 @@ Player::get_subtitles (DCPTime time, DCPTime length, bool starting, bool burnt, s.set_v_position (s.v_position() + subtitle_content->subtitle_y_offset ()); float const xs = subtitle_content->subtitle_x_scale(); float const ys = subtitle_content->subtitle_y_scale(); - float const average = s.size() * (xs + ys) / 2; - s.set_size (average); + float size = s.size(); + + /* Adjust size to express the common part of the scaling; + e.g. if xs = ys = 0.5 we scale size by 2. + */ + if (xs > 1e-5 && ys > 1e-5) { + size *= 1 / min (1 / xs, 1 / ys); + } + s.set_size (size); + + /* Then express aspect ratio changes */ if (fabs (1.0 - xs / ys) > dcp::ASPECT_ADJUST_EPSILON) { s.set_aspect_adjust (xs / ys); } diff --git a/src/lib/render_subtitles.cc b/src/lib/render_subtitles.cc index dd8e8870b..ed7d131fd 100644 --- a/src/lib/render_subtitles.cc +++ b/src/lib/render_subtitles.cc @@ -208,9 +208,8 @@ render_line (list<dcp::SubtitleString> subtitles, list<shared_ptr<Font> > fonts, /* XXX */ float fade_factor = 1; - layout->update_from_cairo_context (context); - context->scale (xscale, yscale); + layout->update_from_cairo_context (context); if (subtitles.front().effect() == dcp::SHADOW) { /* Drop-shadow effect */ @@ -241,6 +240,8 @@ render_line (list<dcp::SubtitleString> subtitles, list<shared_ptr<Font> > fonts, int layout_width; int layout_height; layout->get_pixel_size (layout_width, layout_height); + layout_width *= xscale; + layout_height *= yscale; int x = 0; switch (subtitles.front().h_align ()) { |
