Add equality option for vertical subtitle position.
[libdcp.git] / src / subtitle.cc
index 9d82a1280a732b51b84e23bfc91a35eace8c3643..de3fe03f82cccdffebdc8d8455af2669321df096 100644 (file)
  */
 
 
+#include "compose.hpp"
 #include "subtitle.h"
 #include "dcp_time.h"
 
 
+using std::shared_ptr;
 using namespace dcp;
 
 
@@ -52,6 +54,7 @@ Subtitle::Subtitle (
        HAlign h_align,
        float v_position,
        VAlign v_align,
+       float z_position,
        Time fade_up_time,
        Time fade_down_time
        )
@@ -61,8 +64,67 @@ Subtitle::Subtitle (
        , _h_align (h_align)
        , _v_position (v_position)
        , _v_align (v_align)
+       , _z_position(z_position)
        , _fade_up_time (fade_up_time)
        , _fade_down_time (fade_down_time)
 {
 
 }
+
+
+bool
+Subtitle::equals(shared_ptr<const Subtitle> other, EqualityOptions options, NoteHandler note) const
+{
+       bool same = true;
+
+       if (in() != other->in()) {
+               note(NoteType::ERROR, "subtitle in times differ");
+               same = false;
+       }
+
+       if (out() != other->out()) {
+               note(NoteType::ERROR, "subtitle out times differ");
+               same = false;
+       }
+
+       if (h_position() != other->h_position()) {
+               note(NoteType::ERROR, "subtitle horizontal positions differ");
+               same = false;
+       }
+
+       if (h_align() != other->h_align()) {
+               note(NoteType::ERROR, "subtitle horizontal alignments differ");
+               same = false;
+       }
+
+       auto const vpos = std::abs(v_position() - other->v_position());
+       if (vpos > options.max_subtitle_vertical_position_error)  {
+               note(
+                       NoteType::ERROR,
+                       String::compose("subtitle vertical positions differ by %1 (more than the allowed difference of %2)", vpos, options.max_subtitle_vertical_position_error)
+                   );
+               same = false;
+       }
+
+       if (v_align() != other->v_align()) {
+               note(NoteType::ERROR, "subtitle vertical alignments differ");
+               same = false;
+       }
+
+       if (z_position() != other->z_position()) {
+               note(NoteType::ERROR, "subtitle Z positions differ");
+               same = false;
+       }
+
+       if (fade_up_time() != other->fade_up_time()) {
+               note(NoteType::ERROR, "subtitle fade-up times differ");
+               same = false;
+       }
+
+       if (fade_down_time() != other->fade_down_time()) {
+               note(NoteType::ERROR, "subtitle fade-down times differ");
+               same = false;
+       }
+
+       return same;
+}