Vertical align.
authorCarl Hetherington <cth@carlh.net>
Tue, 21 Aug 2012 21:23:13 +0000 (22:23 +0100)
committerCarl Hetherington <cth@carlh.net>
Tue, 21 Aug 2012 21:23:13 +0000 (22:23 +0100)
src/subtitle_asset.cc
src/subtitle_asset.h
src/types.h
test/tests.cc

index 827fbf7d2b173d34b92053d000e89009be84aed3..9a3e3bbc9929b1302ab1d9ac8a6542a5eb5096a9 100644 (file)
@@ -65,6 +65,7 @@ SubtitleAsset::examine_font_node (shared_ptr<FontNode> font_node, list<shared_pt
                                                (*j)->in,
                                                (*j)->out,
                                                (*k)->v_position,
+                                               (*k)->v_align,
                                                (*k)->text,
                                                effective.effect.get(),
                                                effective.effect_color.get()
@@ -149,9 +150,18 @@ SubtitleNode::SubtitleNode (xmlpp::Node const * node)
 
 TextNode::TextNode (xmlpp::Node const * node)
        : XMLNode (node)
+       , v_align (CENTER)
 {
        text = content ();
        v_position = float_attribute ("VPosition");
+       string const v = optional_string_attribute ("VAlign");
+       if (v == "top") {
+               v_align = TOP;
+       } else if (v == "center") {
+               v_align = CENTER;
+       } else if (v == "bottom") {
+               v_align = BOTTOM;
+       }
 }
 
 list<shared_ptr<Subtitle> >
@@ -194,6 +204,7 @@ Subtitle::Subtitle (
        Time in,
        Time out,
        float v_position,
+       VAlign v_align,
        string text,
        Effect effect,
        Color effect_color
@@ -205,6 +216,7 @@ Subtitle::Subtitle (
        , _in (in)
        , _out (out)
        , _v_position (v_position)
+       , _v_align (v_align)
        , _text (text)
        , _effect (effect)
        , _effect_color (effect_color)
index aff3dae582ef0e8cf111ed3b1129d11bde3e658d..d272957edc0346e175c48198094955bda364a98c 100644 (file)
@@ -31,6 +31,7 @@ public:
        TextNode (xmlpp::Node const * node);
 
        float v_position;
+       VAlign v_align;
        std::string text;
 };
 
@@ -84,6 +85,7 @@ public:
                Time in,
                Time out,
                float v_position,
+               VAlign v_align,
                std::string text,
                Effect effect,
                Color effect_color
@@ -117,6 +119,10 @@ public:
                return _v_position;
        }
 
+       VAlign v_align () const {
+               return _v_align;
+       }
+
        Effect effect () const {
                return _effect;
        }
@@ -135,6 +141,7 @@ private:
        Time _in;
        Time _out;
        float _v_position;
+       VAlign _v_align;
        std::string _text;
        Effect _effect;
        Color _effect_color;
index c49c5f8f80920589f5d59bc2b555c0b55e637729..280c60cdea9493a702303dcb33662cd54117685f 100644 (file)
@@ -57,6 +57,13 @@ enum Effect
        BORDER,
        SHADOW
 };
+
+enum VAlign
+{
+       TOP,
+       CENTER,
+       BOTTOM
+};
        
 class Fraction
 {
index a03e2f686aca8b34bfb749b97aec0e1e8b8c3642..c47e8938c420cb7de005b6c7881fd8228a0942b8 100644 (file)
@@ -128,6 +128,7 @@ BOOST_AUTO_TEST_CASE (subtitles)
        BOOST_CHECK_EQUAL (s.front()->size_in_pixels(1080), 53);
        BOOST_CHECK_EQUAL (s.front()->effect(), libdcp::BORDER);
        BOOST_CHECK_EQUAL (s.front()->effect_color(), libdcp::Color(0, 0, 0));
+       BOOST_CHECK_EQUAL (s.front()->v_align(), libdcp::BOTTOM);
 
        s = subs.subtitles_at (libdcp::Time (0, 0, 7, 190));
        BOOST_CHECK_EQUAL (s.size(), 2);
@@ -140,6 +141,7 @@ BOOST_AUTO_TEST_CASE (subtitles)
        BOOST_CHECK_EQUAL (s.front()->size_in_pixels(1080), 53);
        BOOST_CHECK_EQUAL (s.front()->effect(), libdcp::BORDER);
        BOOST_CHECK_EQUAL (s.front()->effect_color(), libdcp::Color(0, 0, 0));
+       BOOST_CHECK_EQUAL (s.front()->v_align(), libdcp::BOTTOM);
        BOOST_CHECK_EQUAL (s.back()->text(), "My large wonderbra");
        BOOST_CHECK_EQUAL (s.back()->v_position(), 15);
        BOOST_CHECK_EQUAL (s.back()->in(), libdcp::Time (0, 0, 7, 177));
@@ -150,6 +152,7 @@ BOOST_AUTO_TEST_CASE (subtitles)
        BOOST_CHECK_EQUAL (s.back()->size_in_pixels(1080), 53);
        BOOST_CHECK_EQUAL (s.back()->effect(), libdcp::BORDER);
        BOOST_CHECK_EQUAL (s.back()->effect_color(), libdcp::Color(0, 0, 0));
+       BOOST_CHECK_EQUAL (s.back()->v_align(), libdcp::BOTTOM);
        
        s = subs.subtitles_at (libdcp::Time (0, 0, 11, 95));
        BOOST_CHECK_EQUAL (s.size(), 1);
@@ -163,6 +166,7 @@ BOOST_AUTO_TEST_CASE (subtitles)
        BOOST_CHECK_EQUAL (s.front()->size_in_pixels(1080), 53);
        BOOST_CHECK_EQUAL (s.front()->effect(), libdcp::BORDER);
        BOOST_CHECK_EQUAL (s.front()->effect_color(), libdcp::Color(0, 0, 0));
+       BOOST_CHECK_EQUAL (s.front()->v_align(), libdcp::BOTTOM);
 
        s = subs.subtitles_at (libdcp::Time (0, 0, 14, 42));
        BOOST_CHECK_EQUAL (s.size(), 1);
@@ -176,6 +180,7 @@ BOOST_AUTO_TEST_CASE (subtitles)
        BOOST_CHECK_EQUAL (s.front()->size_in_pixels(1080), 53);
        BOOST_CHECK_EQUAL (s.front()->effect(), libdcp::BORDER);
        BOOST_CHECK_EQUAL (s.front()->effect_color(), libdcp::Color(0, 0, 0));
+       BOOST_CHECK_EQUAL (s.front()->v_align(), libdcp::BOTTOM);
 }
 
 BOOST_AUTO_TEST_CASE (dcp_time)