OpenShot Library | libopenshot  0.2.5
QtHtmlReader.h
Go to the documentation of this file.
1 /**
2  * @file
3  * @brief Header file for QtHtmlReader class
4  * @author Jonathan Thomas <jonathan@openshot.org>
5  * @author Sergei Kolesov (jediserg)
6  * @author Jeff Shillitto (jeffski)
7  *
8  * @ref License
9  */
10 
11 /* LICENSE
12  *
13  * Copyright (c) 2008-2019 OpenShot Studios, LLC
14  * <http://www.openshotstudios.com/>. This file is part of
15  * OpenShot Library (libopenshot), an open-source project dedicated to
16  * delivering high quality video editing and animation solutions to the
17  * world. For more information visit <http://www.openshot.org/>.
18  *
19  * OpenShot Library (libopenshot) is free software: you can redistribute it
20  * and/or modify it under the terms of the GNU Lesser General Public License
21  * as published by the Free Software Foundation, either version 3 of the
22  * License, or (at your option) any later version.
23  *
24  * OpenShot Library (libopenshot) is distributed in the hope that it will be
25  * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
26  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
27  * GNU Lesser General Public License for more details.
28  *
29  * You should have received a copy of the GNU Lesser General Public License
30  * along with OpenShot Library. If not, see <http://www.gnu.org/licenses/>.
31  */
32 
33 #ifndef OPENSHOT_QT_HTML_READER_H
34 #define OPENSHOT_QT_HTML_READER_H
35 
36 #include "ReaderBase.h"
37 
38 #include <cmath>
39 #include <ctime>
40 #include <iostream>
41 #include <omp.h>
42 #include <stdio.h>
43 #include <memory>
44 #include "CacheMemory.h"
45 #include "Enums.h"
46 #include "Exceptions.h"
47 
48 class QImage;
49 
50 namespace openshot
51 {
52 
53  /**
54  * @brief This class uses Qt libraries, to create frames with rendered HTML, and return
55  * openshot::Frame objects.
56  *
57  * Supports HTML/CSS subset available via Qt libraries, see: https://doc.qt.io/qt-5/richtext-html-subset.html
58  *
59  * @code
60  * // Any application using this class must instantiate either QGuiApplication or QApplication
61  * QApplication a(argc, argv);
62  *
63  * // Create a reader to generate an openshot::Frame containing text
64  * QtHtmlReader r(720, // width
65  * 480, // height
66  * 5, // x_offset
67  * 5, // y_offset
68  * GRAVITY_CENTER, // gravity
69  * "<b>Check out</b> this Text!", // html
70  * "b { color: #ff0000 }", // css
71  * "#000000" // background_color
72  * );
73  * r.Open(); // Open the reader
74  *
75  * // Get frame number 1 from the video (in fact, any frame # you request will return the same frame)
76  * std::shared_ptr<Frame> f = r.GetFrame(1);
77  *
78  * // Now that we have an openshot::Frame object, lets have some fun!
79  * f->Display(); // Display the frame on the screen
80  *
81  * // Close the reader
82  * r.Close();
83  * @endcode
84  */
85  class QtHtmlReader : public ReaderBase
86  {
87  private:
88  int width;
89  int height;
90  int x_offset;
91  int y_offset;
92  std::string html;
93  std::string css;
94  std::string background_color;
95  std::shared_ptr<QImage> image;
96  bool is_open;
97  openshot::GravityType gravity;
98  public:
99 
100  /// Default constructor (blank text)
101  QtHtmlReader();
102 
103  /// @brief Constructor for QtHtmlReader with all parameters.
104  /// @param width The width of the requested openshot::Frame (not the size of the text)
105  /// @param height The height of the requested openshot::Frame (not the size of the text)
106  /// @param x_offset The number of pixels to offset the text on the X axis (horizontal)
107  /// @param y_offset The number of pixels to offset the text on the Y axis (vertical)
108  /// @param gravity The alignment / gravity of the text
109  /// @param html The HTML you want to render / display
110  /// @param css The CSS you want to apply to style the HTML
111  /// @param background_color The background color of the frame image (valid values are a color string in \#RRGGBB or \#AARRGGBB notation, a CSS color name, or 'transparent')
112  QtHtmlReader(int width, int height, int x_offset, int y_offset, GravityType gravity, std::string html, std::string css, std::string background_color);
113 
114  /// Close Reader
115  void Close();
116 
117  /// Get the cache object used by this reader (always returns NULL for this object)
118  openshot::CacheMemory* GetCache() { return NULL; };
119 
120  /// Get an openshot::Frame object for a specific frame number of this reader. All numbers
121  /// return the same Frame, since they all share the same image data.
122  ///
123  /// @returns The requested frame (containing the image)
124  /// @param requested_frame The frame number that is requested.
125  std::shared_ptr<openshot::Frame> GetFrame(int64_t requested_frame);
126 
127  /// Determine if reader is open or closed
128  bool IsOpen() { return is_open; };
129 
130  /// Return the type name of the class
131  std::string Name() { return "QtHtmlReader"; };
132 
133  /// Get and Set JSON methods
134  std::string Json() const override; ///< Generate JSON string of this object
135  void SetJson(const std::string value); ///< Load JSON string into this object
136  Json::Value JsonValue() const override; ///< Generate Json::Value for this object
137  void SetJsonValue(const Json::Value root); ///< Load Json::Value into this object
138 
139  /// Open Reader - which is called by the constructor automatically
140  void Open();
141  };
142 
143 }
144 
145 #endif
openshot::CacheMemory * GetCache()
Get the cache object used by this reader (always returns NULL for this object)
Definition: QtHtmlReader.h:118
Json::Value JsonValue() const override
Generate Json::Value for this object.
Header file for ReaderBase class.
This abstract class is the base class, used by all readers in libopenshot.
Definition: ReaderBase.h:97
std::string Name()
Return the type name of the class.
Definition: QtHtmlReader.h:131
std::string Json() const override
Get and Set JSON methods.
Header file for CacheMemory class.
Header file for all Exception classes.
bool IsOpen()
Determine if reader is open or closed.
Definition: QtHtmlReader.h:128
void SetJsonValue(const Json::Value root)
Load Json::Value into this object.
QtHtmlReader()
Default constructor (blank text)
Header file for TextReader class.
void Close()
Close Reader.
This namespace is the default namespace for all code in the openshot library.
void SetJson(const std::string value)
Load JSON string into this object.
void Open()
Open Reader - which is called by the constructor automatically.
This class is a memory-based cache manager for Frame objects.
Definition: CacheMemory.h:51
GravityType
This enumeration determines how clips are aligned to their parent container.
Definition: Enums.h:38
This class uses Qt libraries, to create frames with rendered HTML, and return openshot::Frame objects...
Definition: QtHtmlReader.h:85
std::shared_ptr< openshot::Frame > GetFrame(int64_t requested_frame)