Add direction support for SMPTE subtitles; fix pragma warnings with non-openmp builds.
[libdcp.git] / src / subtitle_string.cc
index 151318730ff2255302aa3b4604ccf3d495c6bdab..7ba6e0e112910748f69e6f949d77c9020ba9fffb 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 2012-2014 Carl Hetherington <cth@carlh.net>
+    Copyright (C) 2012-2016 Carl Hetherington <cth@carlh.net>
 
     This program is free software; you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by
@@ -19,6 +19,7 @@
 
 #include "subtitle_string.h"
 #include "xml.h"
+#include <cmath>
 
 using std::string;
 using std::ostream;
@@ -29,12 +30,17 @@ using namespace dcp;
 SubtitleString::SubtitleString (
        optional<string> font,
        bool italic,
+       bool bold,
        Colour colour,
        int size,
+       float aspect_adjust,
        Time in,
        Time out,
+       float h_position,
+       HAlign h_align,
        float v_position,
        VAlign v_align,
+       Direction direction,
        string text,
        Effect effect,
        Colour effect_colour,
@@ -43,12 +49,17 @@ SubtitleString::SubtitleString (
        )
        : _font (font)
        , _italic (italic)
+       , _bold (bold)
        , _colour (colour)
        , _size (size)
+       , _aspect_adjust (aspect_adjust)
        , _in (in)
        , _out (out)
+       , _h_position (h_position)
+       , _h_align (h_align)
        , _v_position (v_position)
        , _v_align (v_align)
+       , _direction (direction)
        , _text (text)
        , _effect (effect)
        , _effect_colour (effect_colour)
@@ -65,7 +76,7 @@ SubtitleString::size_in_pixels (int screen_height) const
           height is 11 inches, so a 72pt font would be 1/11th of the screen
           height.
        */
-       
+
        return _size * screen_height / (11 * 72);
 }
 
@@ -75,12 +86,17 @@ dcp::operator== (SubtitleString const & a, SubtitleString const & b)
        return (
                a.font() == b.font() &&
                a.italic() == b.italic() &&
+               a.bold() == b.bold() &&
                a.colour() == b.colour() &&
                a.size() == b.size() &&
+               fabs (a.aspect_adjust() - b.aspect_adjust()) < ASPECT_ADJUST_EPSILON &&
                a.in() == b.in() &&
                a.out() == b.out() &&
+               a.h_position() == b.h_position() &&
+               a.h_align() == b.h_align() &&
                a.v_position() == b.v_position() &&
                a.v_align() == b.v_align() &&
+               a.direction() == b.direction() &&
                a.text() == b.text() &&
                a.effect() == b.effect() &&
                a.effect_colour() == b.effect_colour() &&
@@ -97,13 +113,22 @@ dcp::operator<< (ostream& s, SubtitleString const & sub)
          << "font " << sub.font().get_value_or ("[default]") << ", ";
 
        if (sub.italic()) {
-               s << "italic";
+               s << "italic";
        } else {
-               s << "non-italic";
+               s << "non-italic";
        }
-       
-       s << ", size " << sub.size() << ", colour " << sub.colour() << ", vpos " << sub.v_position() << ", valign " << ((int) sub.v_align()) << ";\n"
-         << "effect " << ((int) sub.effect()) << ", effect colour " << sub.effect_colour();
+
+       if (sub.bold()) {
+               s << "bold, ";
+       } else {
+               s << "normal, ";
+       }
+
+       s << "size " << sub.size() << ", aspect " << sub.aspect_adjust() << ", colour " << sub.colour()
+         << ", vpos " << sub.v_position() << ", valign " << ((int) sub.v_align())
+         << ", hpos " << sub.h_position() << ", halign " << ((int) sub.h_align())
+         << ", direction " << ((int) sub.direction())
+         << ", effect " << ((int) sub.effect()) << ", effect colour " << sub.effect_colour();
 
        return s;
 }