Tidying.
[libdcp.git] / src / subtitle_asset_internal.h
index cea230af874ca56d94f6213b658274a4aefbfc47..c7037dcffae5e65c5afdd6e2ddf5e522769e48fe 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 2012-2016 Carl Hetherington <cth@carlh.net>
+    Copyright (C) 2012-2021 Carl Hetherington <cth@carlh.net>
 
     This file is part of libdcp.
 
     files in the program, then also delete it here.
 */
 
+
+/** @file  src/subtitle_asset_internal.h
+ *  @brief Internal SubtitleAsset helpers
+ */
+
+
 #ifndef LIBDCP_SUBTITLE_ASSET_INTERNAL_H
 #define LIBDCP_SUBTITLE_ASSET_INTERNAL_H
 
+
+#include "array_data.h"
 #include "raw_convert.h"
 #include "types.h"
 #include "dcp_time.h"
 #include <libxml++/libxml++.h>
-#include <boost/foreach.hpp>
+
 
 struct take_intersection_test;
 struct take_difference_test;
@@ -46,12 +54,16 @@ struct pull_fonts_test1;
 struct pull_fonts_test2;
 struct pull_fonts_test3;
 
+
 namespace dcp {
 
+
 class SubtitleString;
 
+
 namespace order {
 
+
 struct Context
 {
        std::string xmlns () const;
@@ -61,12 +73,13 @@ struct Context
        int spot_number;
 };
 
+
 class Font
 {
 public:
        Font () {}
 
-       Font (SubtitleString const & s, Standard standard);
+       Font (std::shared_ptr<SubtitleString> s, Standard standard);
 
        xmlpp::Element* as_xml (xmlpp::Element* parent, Context& context) const;
 
@@ -86,30 +99,34 @@ private:
        std::map<std::string, std::string> _values;
 };
 
+
 class Part
 {
 public:
-       Part (boost::shared_ptr<Part> parent_)
+       Part (std::shared_ptr<Part> parent_)
                : parent (parent_)
        {}
 
-       Part (boost::shared_ptr<Part> parent_, Font font_)
+       Part (std::shared_ptr<Part> parent_, Font font_)
                : parent (parent_)
                , font (font_)
        {}
 
+       virtual ~Part () {}
+
        virtual xmlpp::Element* as_xml (xmlpp::Element* parent, Context &) const;
        void write_xml (xmlpp::Element* parent, order::Context& context) const;
 
-       boost::shared_ptr<Part> parent;
+       std::shared_ptr<Part> parent;
        Font font;
-       std::list<boost::shared_ptr<Part> > children;
+       std::vector<std::shared_ptr<Part>> children;
 };
 
+
 class String : public Part
 {
 public:
-       String (boost::shared_ptr<Part> parent, Font font, std::string text_)
+       String (std::shared_ptr<Part> parent, Font font, std::string text_)
                : Part (parent, font)
                , text (text_)
        {}
@@ -119,10 +136,11 @@ public:
        std::string text;
 };
 
+
 class Text : public Part
 {
 public:
-       Text (boost::shared_ptr<Part> parent, HAlign h_align, float h_position, VAlign v_align, float v_position, Direction direction)
+       Text (std::shared_ptr<Part> parent, HAlign h_align, float h_position, VAlign v_align, float v_position, Direction direction)
                : Part (parent)
                , _h_align (h_align)
                , _h_position (h_position)
@@ -141,10 +159,11 @@ private:
        Direction _direction;
 };
 
+
 class Subtitle : public Part
 {
 public:
-       Subtitle (boost::shared_ptr<Part> parent, Time in, Time out, Time fade_up, Time fade_down)
+       Subtitle (std::shared_ptr<Part> parent, Time in, Time out, Time fade_up, Time fade_down)
                : Part (parent)
                , _in (in)
                , _out (out)
@@ -161,7 +180,34 @@ private:
        Time _fade_down;
 };
 
+
+class Image : public Part
+{
+public:
+       Image (std::shared_ptr<Part> parent, std::string id, ArrayData png_data, HAlign h_align, float h_position, VAlign v_align, float v_position)
+               : Part (parent)
+               , _png_data (png_data)
+               , _id (id)
+               , _h_align (h_align)
+               , _h_position (h_position)
+               , _v_align (v_align)
+               , _v_position (v_position)
+       {}
+
+       xmlpp::Element* as_xml (xmlpp::Element* parent, Context& context) const;
+
+private:
+       ArrayData _png_data;
+       std::string _id; ///< the ID of this image
+       HAlign _h_align;
+       float _h_position;
+       VAlign _v_align;
+       float _v_position;
+};
+
+
 }
 }
 
+
 #endif