Lots of #include <iostream>s for Arch.
[dcpomatic.git] / src / lib / subtitle_content.cc
index c8fa75e7cfb3a8919a80778000d61190c8599a5d..da3b97e2ffd3942f87f452181b97fe5315de8f63 100644 (file)
@@ -24,7 +24,9 @@
 #include "font.h"
 #include "raw_convert.h"
 #include <libcxml/cxml.h>
+#include <libxml++/libxml++.h>
 #include <boost/foreach.hpp>
+#include <iostream>
 
 #include "i18n.h"
 
@@ -40,12 +42,14 @@ int const SubtitleContentProperty::SUBTITLE_Y_OFFSET = 501;
 int const SubtitleContentProperty::SUBTITLE_X_SCALE = 502;
 int const SubtitleContentProperty::SUBTITLE_Y_SCALE = 503;
 int const SubtitleContentProperty::USE_SUBTITLES = 504;
-int const SubtitleContentProperty::SUBTITLE_LANGUAGE = 505;
-int const SubtitleContentProperty::FONTS = 506;
+int const SubtitleContentProperty::BURN_SUBTITLES = 505;
+int const SubtitleContentProperty::SUBTITLE_LANGUAGE = 506;
+int const SubtitleContentProperty::FONTS = 507;
 
 SubtitleContent::SubtitleContent (shared_ptr<const Film> film)
        : Content (film)
        , _use_subtitles (false)
+       , _burn_subtitles (false)
        , _subtitle_x_offset (0)
        , _subtitle_y_offset (0)
        , _subtitle_x_scale (1)
@@ -57,6 +61,7 @@ SubtitleContent::SubtitleContent (shared_ptr<const Film> film)
 SubtitleContent::SubtitleContent (shared_ptr<const Film> film, boost::filesystem::path p)
        : Content (film, p)
        , _use_subtitles (false)
+       , _burn_subtitles (false)
        , _subtitle_x_offset (0)
        , _subtitle_y_offset (0)
        , _subtitle_x_scale (1)
@@ -68,6 +73,7 @@ SubtitleContent::SubtitleContent (shared_ptr<const Film> film, boost::filesystem
 SubtitleContent::SubtitleContent (shared_ptr<const Film> film, cxml::ConstNodePtr node, int version)
        : Content (film, node)
        , _use_subtitles (false)
+       , _burn_subtitles (false)
        , _subtitle_x_offset (0)
        , _subtitle_y_offset (0)
        , _subtitle_x_scale (1)
@@ -75,8 +81,7 @@ SubtitleContent::SubtitleContent (shared_ptr<const Film> film, cxml::ConstNodePt
 {
        if (version >= 32) {
                _use_subtitles = node->bool_child ("UseSubtitles");
-       } else {
-               _use_subtitles = false;
+               _burn_subtitles = node->bool_child ("BurnSubtitles");
        }
 
        if (version >= 7) {
@@ -117,6 +122,10 @@ SubtitleContent::SubtitleContent (shared_ptr<const Film> film, vector<shared_ptr
                        throw JoinError (_("Content to be joined must have the same 'use subtitles' setting."));
                }
 
+               if (sc->burn_subtitles() != ref->burn_subtitles()) {
+                       throw JoinError (_("Content to be joined must have the same 'burn subtitles' setting."));
+               }
+
                if (sc->subtitle_x_offset() != ref->subtitle_x_offset()) {
                        throw JoinError (_("Content to be joined must have the same subtitle X offset."));
                }
@@ -151,6 +160,7 @@ SubtitleContent::SubtitleContent (shared_ptr<const Film> film, vector<shared_ptr
        }
 
        _use_subtitles = ref->use_subtitles ();
+       _burn_subtitles = ref->burn_subtitles ();
        _subtitle_x_offset = ref->subtitle_x_offset ();
        _subtitle_y_offset = ref->subtitle_y_offset ();
        _subtitle_x_scale = ref->subtitle_x_scale ();
@@ -168,6 +178,7 @@ SubtitleContent::as_xml (xmlpp::Node* root) const
        boost::mutex::scoped_lock lm (_mutex);
 
        root->add_child("UseSubtitles")->add_child_text (raw_convert<string> (_use_subtitles));
+       root->add_child("BurnSubtitles")->add_child_text (raw_convert<string> (_burn_subtitles));
        root->add_child("SubtitleXOffset")->add_child_text (raw_convert<string> (_subtitle_x_offset));
        root->add_child("SubtitleYOffset")->add_child_text (raw_convert<string> (_subtitle_y_offset));
        root->add_child("SubtitleXScale")->add_child_text (raw_convert<string> (_subtitle_x_scale));
@@ -189,6 +200,16 @@ SubtitleContent::set_use_subtitles (bool u)
        signal_changed (SubtitleContentProperty::USE_SUBTITLES);
 }
 
+void
+SubtitleContent::set_burn_subtitles (bool b)
+{
+       {
+               boost::mutex::scoped_lock lm (_mutex);
+               _burn_subtitles = b;
+       }
+       signal_changed (SubtitleContentProperty::BURN_SUBTITLES);
+}
+
 void
 SubtitleContent::set_subtitle_x_offset (double o)
 {
@@ -249,6 +270,13 @@ SubtitleContent::identifier () const
          << "_" << raw_convert<string> (subtitle_x_offset())
          << "_" << raw_convert<string> (subtitle_y_offset());
 
+       /* XXX: I suppose really _fonts shouldn't be in here, since not all
+          types of subtitle content involve fonts.
+       */
+       BOOST_FOREACH (shared_ptr<Font> f, _fonts) {
+               s << f->file().get_value_or ("Default");
+       }
+
        /* The language is for metadata only, and doesn't affect
           how this content looks.
        */