diff options
| author | Carl Hetherington <cth@carlh.net> | 2015-06-09 16:38:14 +0100 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2015-06-09 16:38:14 +0100 |
| commit | acd023e023cfd0c4ccde3d658d038083e2071661 (patch) | |
| tree | e9dee176713003eb65cd02d7ce4c71569239a342 | |
| parent | 2a01820de9229fd778787421ec4f7bbf1e4b8bf1 (diff) | |
Update hints properly when fonts are changed.
| -rw-r--r-- | src/lib/dcp_subtitle_content.cc | 2 | ||||
| -rw-r--r-- | src/lib/font.h | 4 | ||||
| -rw-r--r-- | src/lib/subrip_content.cc | 2 | ||||
| -rw-r--r-- | src/lib/subtitle_content.cc | 33 | ||||
| -rw-r--r-- | src/lib/subtitle_content.h | 7 |
5 files changed, 45 insertions, 3 deletions
diff --git a/src/lib/dcp_subtitle_content.cc b/src/lib/dcp_subtitle_content.cc index 742773043..3f13f34e2 100644 --- a/src/lib/dcp_subtitle_content.cc +++ b/src/lib/dcp_subtitle_content.cc @@ -71,7 +71,7 @@ DCPSubtitleContent::examine (shared_ptr<Job> job) _length = DCPTime::from_seconds (sc->latest_subtitle_out().as_seconds ()); BOOST_FOREACH (shared_ptr<dcp::LoadFontNode> i, sc->load_font_nodes ()) { - _fonts.push_back (shared_ptr<Font> (new Font (i->id))); + add_font (shared_ptr<Font> (new Font (i->id))); } } diff --git a/src/lib/font.h b/src/lib/font.h index 0dedf7e49..0dd63448e 100644 --- a/src/lib/font.h +++ b/src/lib/font.h @@ -22,6 +22,7 @@ #include <libcxml/cxml.h> #include <boost/optional.hpp> +#include <boost/signals2.hpp> #include <boost/filesystem.hpp> #include <string> @@ -45,8 +46,11 @@ public: void set_file (boost::filesystem::path file) { _file = file; + Changed (); } + boost::signals2::signal<void()> Changed; + private: /** Font ID, used to describe it in the subtitle content */ std::string _id; diff --git a/src/lib/subrip_content.cc b/src/lib/subrip_content.cc index 8becbc4d0..9656ec184 100644 --- a/src/lib/subrip_content.cc +++ b/src/lib/subrip_content.cc @@ -64,7 +64,7 @@ SubRipContent::examine (boost::shared_ptr<Job> job) boost::mutex::scoped_lock lm (_mutex); _length = len; - _fonts.push_back (shared_ptr<Font> (new Font (font_id))); + add_font (shared_ptr<Font> (new Font (font_id))); } string diff --git a/src/lib/subtitle_content.cc b/src/lib/subtitle_content.cc index f42f3db37..f03968d91 100644 --- a/src/lib/subtitle_content.cc +++ b/src/lib/subtitle_content.cc @@ -24,6 +24,7 @@ #include "font.h" #include "raw_convert.h" #include <libcxml/cxml.h> +#include <boost/foreach.hpp> #include "i18n.h" @@ -98,6 +99,8 @@ SubtitleContent::SubtitleContent (shared_ptr<const Film> f, cxml::ConstNodePtr n for (list<cxml::NodePtr>::const_iterator i = fonts.begin(); i != fonts.end(); ++i) { _fonts.push_back (shared_ptr<Font> (new Font (*i))); } + + connect_to_fonts (); } SubtitleContent::SubtitleContent (shared_ptr<const Film> f, vector<shared_ptr<Content> > c) @@ -154,6 +157,8 @@ SubtitleContent::SubtitleContent (shared_ptr<const Film> f, vector<shared_ptr<Co _subtitle_y_scale = ref->subtitle_y_scale (); _subtitle_language = ref->subtitle_language (); _fonts = ref_fonts; + + connect_to_fonts (); } /** _mutex must not be held on entry */ @@ -250,3 +255,31 @@ SubtitleContent::identifier () const return s.str (); } + +void +SubtitleContent::add_font (shared_ptr<Font> font) +{ + _fonts.push_back (font); + connect_to_fonts (); +} + +void +SubtitleContent::connect_to_fonts () +{ + BOOST_FOREACH (boost::signals2::connection& i, _font_connections) { + i.disconnect (); + } + + _font_connections.clear (); + + BOOST_FOREACH (shared_ptr<Font> i, _fonts) { + _font_connections.push_back (i->Changed.connect (boost::bind (&SubtitleContent::font_changed, this))); + } +} + +void +SubtitleContent::font_changed () +{ + signal_changed (SubtitleContentProperty::FONTS); +} + diff --git a/src/lib/subtitle_content.h b/src/lib/subtitle_content.h index e8915fc96..a159d7849 100644 --- a/src/lib/subtitle_content.h +++ b/src/lib/subtitle_content.h @@ -55,6 +55,8 @@ public: virtual bool has_subtitles () const = 0; + void add_font (boost::shared_ptr<Font> font); + void set_use_subtitles (bool); void set_subtitle_x_offset (double); void set_subtitle_y_offset (double); @@ -100,10 +102,11 @@ public: protected: /** subtitle language (e.g. "German") or empty if it is not known */ std::string _subtitle_language; - std::list<boost::shared_ptr<Font> > _fonts; private: friend struct ffmpeg_pts_offset_test; + void font_changed (); + void connect_to_fonts (); bool _use_subtitles; /** x offset for placing subtitles, as a proportion of the container width; @@ -118,6 +121,8 @@ private: double _subtitle_x_scale; /** y scale factor to apply to subtitles */ double _subtitle_y_scale; + std::list<boost::shared_ptr<Font> > _fonts; + std::list<boost::signals2::connection> _font_connections; }; #endif |
