33 #include "../include/QtHtmlReader.h" 36 #include <QTextDocument> 37 #include <QGuiApplication> 38 #include <QAbstractTextDocumentLayout> 51 : width(width), height(height), x_offset(x_offset), y_offset(y_offset), gravity(gravity), html(html), css(css), background_color(background_color), is_open(false)
65 image = std::shared_ptr<QImage>(
new QImage(width, height, QImage::Format_RGBA8888));
66 image->fill(QColor(background_color.c_str()));
70 if (!painter.begin(image.get())) {
75 painter.setBackground(QBrush(background_color.c_str()));
78 QTextDocument text_document;
81 text_document.setUndoRedoEnabled(
false);
84 text_document.setTextWidth(width);
85 text_document.setDefaultStyleSheet(css.c_str());
86 text_document.setHtml(html.c_str());
88 int td_height = text_document.documentLayout()->documentSize().height();
91 painter.translate(x_offset, y_offset);
93 painter.translate(x_offset, (height - td_height) / 2 + y_offset);
95 painter.translate(x_offset, height - td_height + y_offset);
99 text_document.setDefaultTextOption(QTextOption(Qt::AlignLeft));
101 text_document.setDefaultTextOption(QTextOption(Qt::AlignHCenter));
103 text_document.setDefaultTextOption(QTextOption(Qt::AlignRight));
107 text_document.drawContents(&painter);
165 std::shared_ptr<Frame> image_frame(
new Frame(requested_frame, image->size().width(), image->size().height(), background_color, 0, 2));
168 image_frame->AddImage(image);
174 std::shared_ptr<Frame> image_frame(
new Frame(1, 640, 480, background_color, 0, 2));
194 root[
"type"] =
"QtHtmlReader";
195 root[
"width"] = width;
196 root[
"height"] = height;
197 root[
"x_offset"] = x_offset;
198 root[
"y_offset"] = y_offset;
201 root[
"background_color"] = background_color;
202 root[
"gravity"] = gravity;
213 Json::CharReaderBuilder rbuilder;
214 Json::CharReader* reader(rbuilder.newCharReader());
217 bool success = reader->parse( value.c_str(),
218 value.c_str() + value.size(), &root, &errors );
223 throw InvalidJSON(
"JSON could not be parsed (or is invalid)");
230 catch (
const std::exception& e)
233 throw InvalidJSON(
"JSON is invalid (missing keys or invalid data types)");
244 if (!root[
"width"].isNull())
245 width = root[
"width"].asInt();
246 if (!root[
"height"].isNull())
247 height = root[
"height"].asInt();
248 if (!root[
"x_offset"].isNull())
249 x_offset = root[
"x_offset"].asInt();
250 if (!root[
"y_offset"].isNull())
251 y_offset = root[
"y_offset"].asInt();
252 if (!root[
"html"].isNull())
253 html = root[
"html"].asString();
254 if (!root[
"css"].isNull())
255 css = root[
"css"].asString();
256 if (!root[
"background_color"].isNull())
257 background_color = root[
"background_color"].asString();
258 if (!root[
"gravity"].isNull())
void SetJson(std::string value)
Load JSON string into this object.
int num
Numerator for the fraction.
Align clip to the right of its parent (middle aligned)
Align clip to the bottom right of its parent.
int width
The width of the video (in pixesl)
This class represents a single frame of video (i.e. image & audio data)
std::string Json()
Get and Set JSON methods.
float duration
Length of time (in seconds)
bool has_video
Determines if this file has a video stream.
int64_t file_size
Size of file (in bytes)
Align clip to the top right of its parent.
Align clip to the bottom left of its parent.
bool has_audio
Determines if this file has an audio stream.
int64_t video_length
The number of frames in the video stream.
int height
The height of the video (in pixels)
Align clip to the bottom center of its parent.
Align clip to the top left of its parent.
openshot::Fraction video_timebase
The video timebase determines how long each frame stays on the screen.
This class represents a fraction.
Align clip to the left of its parent (middle aligned)
virtual Json::Value JsonValue()=0
Generate Json::JsonValue for this object.
virtual void SetJsonValue(Json::Value root)=0
Load Json::JsonValue into this object.
openshot::ReaderInfo info
Information about the current media file.
QtHtmlReader()
Default constructor (blank text)
Align clip to the center of its parent (middle aligned)
std::string vcodec
The name of the video codec used to encode / decode the video stream.
Json::Value JsonValue()
Generate Json::JsonValue for this object.
void Close()
Close Reader.
This namespace is the default namespace for all code in the openshot library.
Exception for invalid JSON.
openshot::Fraction display_ratio
The ratio of width to height of the video stream (i.e. 640x480 has a ratio of 4/3) ...
openshot::Fraction pixel_ratio
The pixel ratio of the video stream as a fraction (i.e. some pixels are not square) ...
void SetJsonValue(Json::Value root)
Load Json::JsonValue into this object.
void Open()
Open Reader - which is called by the constructor automatically.
Align clip to the top center of its parent.
int den
Denominator for the fraction.
openshot::Fraction fps
Frames per second, as a fraction (i.e. 24/1 = 24 fps)
GravityType
This enumeration determines how clips are aligned to their parent container.
std::string acodec
The name of the audio codec used to encode / decode the video stream.
double ToDouble()
Return this fraction as a double (i.e. 1/2 = 0.5)
std::shared_ptr< openshot::Frame > GetFrame(int64_t requested_frame)