diff -rupN --no-dereference qt-creator-opensource-src-12.0.0-beta1/src/libs/qlitehtml/src/container_qpainter.cpp qt-creator-opensource-src-12.0.0-beta1-new/src/libs/qlitehtml/src/container_qpainter.cpp
--- qt-creator-opensource-src-12.0.0-beta1/src/libs/qlitehtml/src/container_qpainter.cpp 2023-10-12 13:48:19.000000000 +0200
+++ qt-creator-opensource-src-12.0.0-beta1-new/src/libs/qlitehtml/src/container_qpainter.cpp 2023-10-14 10:04:48.451192052 +0200
@@ -160,7 +160,7 @@ static Selection::Element selectionDetai
// shortcut, which _might_ not really be correct
if (element->get_children_count() > 0)
return {element, -1, -1}; // everything selected
- const QFont &font = toQFont(element->get_font());
+ const QFont &font = toQFont(element->css().get_font());
const QFontMetrics fm(font);
int previous = 0;
for (int i = 0; i < text.size(); ++i) {
@@ -182,7 +182,7 @@ static Selection::Element deepest_child_
// the following does not find the "smallest" element, it often consists of children
// with individual words as text...
- const litehtml::element::ptr element = document->root()->get_element_by_point(pos.x(),
+ const litehtml::element::ptr element = document->root_renderer()->get_element_by_point(pos.x(),
pos.y(),
viewportPos.x(),
viewportPos.y());
@@ -195,13 +195,14 @@ static Selection::Element deepest_child_
Selection::Element result;
for (int i = 0; i < int(element->get_children_count()); ++i) {
const litehtml::element::ptr child = element->get_child(i);
+ litehtml::render_item render_item(child);
result = recursion(child,
- toQRect(child->get_position()).translated(placement.topLeft()));
+ toQRect(render_item.get_placement()).translated(placement.topLeft()));
if (result.element)
return result;
}
if (placement.contains(pos)) {
- litehtml::tstring text;
+ litehtml::string text;
element->get_text(text);
if (!text.empty()) {
return mode == Selection::Mode::Free
@@ -235,9 +236,9 @@ static QFont::Weight cssWeightToQtWeight
static QFont::Style toQFontStyle(litehtml::font_style style)
{
switch (style) {
- case litehtml::fontStyleNormal:
+ case litehtml::font_style_normal:
return QFont::StyleNormal;
- case litehtml::fontStyleItalic:
+ case litehtml::font_style_italic:
return QFont::StyleItalic;
}
// should not happen
@@ -355,7 +356,7 @@ void Selection::update()
{
const auto addElement = [this](const Selection::Element &element,
const Selection::Element &end = {}) {
- litehtml::tstring elemText;
+ litehtml::string elemText;
element.element->get_text(elemText);
const QString textStr = QString::fromStdString(elemText);
if (!textStr.isEmpty()) {
@@ -429,7 +430,7 @@ DocumentContainer::DocumentContainer()
DocumentContainer::~DocumentContainer() = default;
-litehtml::uint_ptr DocumentContainerPrivate::create_font(const litehtml::tchar_t *faceName,
+litehtml::uint_ptr DocumentContainerPrivate::create_font(const char *faceName,
int size,
int weight,
litehtml::font_style italic,
@@ -486,14 +487,14 @@ void DocumentContainerPrivate::delete_fo
delete font;
}
-int DocumentContainerPrivate::text_width(const litehtml::tchar_t *text, litehtml::uint_ptr hFont)
+int DocumentContainerPrivate::text_width(const char *text, litehtml::uint_ptr hFont)
{
const QFontMetrics fm(toQFont(hFont));
return fm.horizontalAdvance(QString::fromUtf8(text));
}
void DocumentContainerPrivate::draw_text(litehtml::uint_ptr hdc,
- const litehtml::tchar_t *text,
+ const char *text,
litehtml::uint_ptr hFont,
litehtml::web_color color,
const litehtml::position &pos)
@@ -515,7 +516,7 @@ int DocumentContainerPrivate::get_defaul
return m_defaultFont.pointSize();
}
-const litehtml::tchar_t *DocumentContainerPrivate::get_default_font_name() const
+const char *DocumentContainerPrivate::get_default_font_name() const
{
return m_defaultFontFamilyName.constData();
}
@@ -552,8 +553,8 @@ void DocumentContainerPrivate::draw_list
}
}
-void DocumentContainerPrivate::load_image(const litehtml::tchar_t *src,
- const litehtml::tchar_t *baseurl,
+void DocumentContainerPrivate::load_image(const char *src,
+ const char *baseurl,
bool redraw_on_ready)
{
const auto qtSrc = QString::fromUtf8(src);
@@ -570,8 +571,8 @@ void DocumentContainerPrivate::load_imag
m_pixmaps.insert(url, pixmap);
}
-void DocumentContainerPrivate::get_image_size(const litehtml::tchar_t *src,
- const litehtml::tchar_t *baseurl,
+void DocumentContainerPrivate::get_image_size(const char *src,
+ const char *baseurl,
litehtml::size &sz)
{
const auto qtSrc = QString::fromUtf8(src);
@@ -618,8 +619,9 @@ void DocumentContainerPrivate::buildInde
m_index.elementToIndex.insert({current, index});
if (!inBody)
inBody = tagName(current).toLower() == "body";
- if (inBody && current->is_visible()) {
- litehtml::tstring text;
+ litehtml::render_item render_item(current);
+ if (inBody && render_item.is_visible()) {
+ litehtml::string text;
current->get_text(text);
if (!text.empty()) {
m_index.indexToElement.push_back({index, current});
@@ -658,13 +660,14 @@ void DocumentContainerPrivate::clearSele
}
void DocumentContainerPrivate::draw_background(litehtml::uint_ptr hdc,
- const litehtml::background_paint &bg)
+ const std::vector<litehtml::background_paint>&bgs)
{
auto painter = toQPainter(hdc);
- if (bg.is_root) {
+ if (bgs.empty() || bgs[0].is_root) {
// TODO ?
return;
}
+ litehtml::background_paint bg = bgs[0];
painter->save();
painter->setClipRect(toQRect(bg.clip_box));
const QRegion horizontalMiddle(
@@ -807,12 +810,12 @@ void DocumentContainerPrivate::draw_bord
}
}
-void DocumentContainerPrivate::set_caption(const litehtml::tchar_t *caption)
+void DocumentContainerPrivate::set_caption(const char *caption)
{
m_caption = QString::fromUtf8(caption);
}
-void DocumentContainerPrivate::set_base_url(const litehtml::tchar_t *base_url)
+void DocumentContainerPrivate::set_base_url(const char *base_url)
{
m_baseUrl = QString::fromUtf8(base_url);
}
@@ -826,7 +829,7 @@ void DocumentContainerPrivate::link(cons
Q_UNUSED(el)
}
-void DocumentContainerPrivate::on_anchor_click(const litehtml::tchar_t *url,
+void DocumentContainerPrivate::on_anchor_click(const char *url,
const litehtml::element::ptr &el)
{
Q_UNUSED(el)
@@ -834,12 +837,12 @@ void DocumentContainerPrivate::on_anchor
m_linkCallback(resolveUrl(QString::fromUtf8(url), m_baseUrl));
}
-void DocumentContainerPrivate::set_cursor(const litehtml::tchar_t *cursor)
+void DocumentContainerPrivate::set_cursor(const char *cursor)
{
m_cursorCallback(toQCursor(QString::fromUtf8(cursor)));
}
-void DocumentContainerPrivate::transform_text(litehtml::tstring &text, litehtml::text_transform tt)
+void DocumentContainerPrivate::transform_text(litehtml::string &text, litehtml::text_transform tt)
{
// TODO
qDebug(log) << "transform_text";
@@ -847,9 +850,9 @@ void DocumentContainerPrivate::transform
Q_UNUSED(tt)
}
-void DocumentContainerPrivate::import_css(litehtml::tstring &text,
- const litehtml::tstring &url,
- litehtml::tstring &baseurl)
+void DocumentContainerPrivate::import_css(litehtml::string &text,
+ const litehtml::string &url,
+ litehtml::string &baseurl)
{
const QUrl actualUrl = resolveUrl(QString::fromStdString(url), QString::fromStdString(baseurl));
const QString urlString = actualUrl.toString(QUrl::None);
@@ -859,16 +862,12 @@ void DocumentContainerPrivate::import_cs
}
void DocumentContainerPrivate::set_clip(const litehtml::position &pos,
- const litehtml::border_radiuses &bdr_radius,
- bool valid_x,
- bool valid_y)
+ const litehtml::border_radiuses &bdr_radius)
{
// TODO
qDebug(log) << "set_clip";
Q_UNUSED(pos)
Q_UNUSED(bdr_radius)
- Q_UNUSED(valid_x)
- Q_UNUSED(valid_y)
}
void DocumentContainerPrivate::del_clip()
@@ -883,7 +882,7 @@ void DocumentContainerPrivate::get_clien
}
std::shared_ptr<litehtml::element> DocumentContainerPrivate::create_element(
- const litehtml::tchar_t *tag_name,
+ const char *tag_name,
const litehtml::string_map &attributes,
const std::shared_ptr<litehtml::document> &doc)
{
@@ -901,7 +900,7 @@ void DocumentContainerPrivate::get_media
qDebug(log) << "get_media_features";
}
-void DocumentContainerPrivate::get_language(litehtml::tstring &language, litehtml::tstring &culture) const
+void DocumentContainerPrivate::get_language(litehtml::string &language, litehtml::string &culture) const
{
// TODO
qDebug(log) << "get_language";
@@ -919,11 +918,11 @@ void DocumentContainer::setScrollPositio
d->m_scrollPosition = pos;
}
-void DocumentContainer::setDocument(const QByteArray &data, DocumentContainerContext *context)
+void DocumentContainer::setDocument(const QByteArray &data)
{
d->m_pixmaps.clear();
d->clearSelection();
- d->m_document = litehtml::document::createFromUTF8(data.constData(), d.get(), &context->d->context);
+ d->m_document = litehtml::document::createFromString(data.constData(), d.get(), d->m_masterStyleSheet.toUtf8().constData());
d->buildIndex();
}
@@ -1105,7 +1104,7 @@ QUrl DocumentContainer::linkAt(const QPo
{
if (!d->m_document)
return {};
- const litehtml::element::ptr element = d->m_document->root()->get_element_by_point(
+ const litehtml::element::ptr element = d->m_document->root_renderer()->get_element_by_point(
documentPos.x(), documentPos.y(), viewportPos.x(), viewportPos.y());
if (!element)
return {};
@@ -1172,10 +1171,10 @@ void DocumentContainer::findText(const Q
}
const auto fillXPos = [](const Selection::Element &e) {
- litehtml::tstring ttext;
+ litehtml::string ttext;
e.element->get_text(ttext);
const QString text = QString::fromStdString(ttext);
- const QFont &font = toQFont(e.element->get_font());
+ const QFont &font = toQFont(e.element->css().get_font());
const QFontMetrics fm(font);
return Selection::Element{e.element, e.index, fm.size(0, text.left(e.index)).width()};
};
@@ -1227,7 +1226,7 @@ void DocumentContainer::setDefaultFont(c
// we need to trigger the reparse of this info.
if (d->m_document && d->m_document->root()) {
d->m_document->root()->refresh_styles();
- d->m_document->root()->parse_styles();
+ d->m_document->root()->compute_styles();
}
}
@@ -1271,6 +1270,11 @@ void DocumentContainer::setClipboardCall
d->m_clipboardCallback = callback;
}
+void DocumentContainer::setMasterStyleSheet(const QString& styleSheet)
+{
+ d->m_masterStyleSheet = styleSheet;
+}
+
static litehtml::element::ptr elementForY(int y, const litehtml::document::ptr &document)
{
if (!document)
@@ -1279,7 +1283,8 @@ static litehtml::element::ptr elementFor
const std::function<litehtml::element::ptr(int, litehtml::element::ptr)> recursion =
[&recursion](int y, const litehtml::element::ptr &element) {
litehtml::element::ptr result;
- const int subY = y - element->get_position().y;
+ litehtml::render_item render_item(element);
+ const int subY = y - render_item.get_placement().y;
if (subY <= 0)
return element;
for (int i = 0; i < int(element->get_children_count()); ++i) {
@@ -1370,14 +1375,3 @@ Index::Entry Index::findElement(int inde
return {-1, {}};
return *(upper - 1);
}
-
-DocumentContainerContext::DocumentContainerContext()
- : d(new DocumentContainerContextPrivate)
-{}
-
-DocumentContainerContext::~DocumentContainerContext() = default;
-
-void DocumentContainerContext::setMasterStyleSheet(const QString &css)
-{
- d->context.load_master_stylesheet(css.toUtf8().constData());
-}
diff -rupN --no-dereference qt-creator-opensource-src-12.0.0-beta1/src/libs/qlitehtml/src/container_qpainter.h qt-creator-opensource-src-12.0.0-beta1-new/src/libs/qlitehtml/src/container_qpainter.h
--- qt-creator-opensource-src-12.0.0-beta1/src/libs/qlitehtml/src/container_qpainter.h 2023-10-12 13:48:19.000000000 +0200
+++ qt-creator-opensource-src-12.0.0-beta1-new/src/libs/qlitehtml/src/container_qpainter.h 2023-10-14 10:04:48.451192052 +0200
@@ -19,22 +19,6 @@
#include <memory>
class DocumentContainerPrivate;
-class DocumentContainerContextPrivate;
-
-class QLITEHTML_EXPORT DocumentContainerContext
-{
-public:
- DocumentContainerContext();
- ~DocumentContainerContext();
-
- void setMasterStyleSheet(const QString &css);
-
-private:
- std::unique_ptr<DocumentContainerContextPrivate> d;
-
- friend class DocumentContainer;
- friend class DocumentContainerPrivate;
-};
class QLITEHTML_EXPORT DocumentContainer
{
@@ -44,7 +28,7 @@ public:
public: // outside API
void setPaintDevice(QPaintDevice *paintDevice);
- void setDocument(const QByteArray &data, DocumentContainerContext *context);
+ void setDocument(const QByteArray &data);
bool hasDocument() const;
void setBaseUrl(const QString &url);
void setScrollPosition(const QPoint &pos);
@@ -102,6 +86,8 @@ public: // outside API
int withFixedElementPosition(int y, const std::function<void()> &action);
+ void setMasterStyleSheet(const QString& styleSheet);
+
private:
std::unique_ptr<DocumentContainerPrivate> d;
};
diff -rupN --no-dereference qt-creator-opensource-src-12.0.0-beta1/src/libs/qlitehtml/src/container_qpainter_p.h qt-creator-opensource-src-12.0.0-beta1-new/src/libs/qlitehtml/src/container_qpainter_p.h
--- qt-creator-opensource-src-12.0.0-beta1/src/libs/qlitehtml/src/container_qpainter_p.h 2023-10-12 13:48:19.000000000 +0200
+++ qt-creator-opensource-src-12.0.0-beta1-new/src/libs/qlitehtml/src/container_qpainter_p.h 2023-10-14 10:04:48.452192050 +0200
@@ -58,55 +58,53 @@ struct Index
class DocumentContainerPrivate final : public litehtml::document_container
{
public: // document_container API
- litehtml::uint_ptr create_font(const litehtml::tchar_t *faceName,
+ litehtml::uint_ptr create_font(const char *faceName,
int size,
int weight,
litehtml::font_style italic,
unsigned int decoration,
litehtml::font_metrics *fm) override;
void delete_font(litehtml::uint_ptr hFont) override;
- int text_width(const litehtml::tchar_t *text, litehtml::uint_ptr hFont) override;
+ int text_width(const char *text, litehtml::uint_ptr hFont) override;
void draw_text(litehtml::uint_ptr hdc,
- const litehtml::tchar_t *text,
+ const char *text,
litehtml::uint_ptr hFont,
litehtml::web_color color,
const litehtml::position &pos) override;
int pt_to_px(int pt) const override;
int get_default_font_size() const override;
- const litehtml::tchar_t *get_default_font_name() const override;
+ const char *get_default_font_name() const override;
void draw_list_marker(litehtml::uint_ptr hdc, const litehtml::list_marker &marker) override;
- void load_image(const litehtml::tchar_t *src,
- const litehtml::tchar_t *baseurl,
+ void load_image(const char *src,
+ const char *baseurl,
bool redraw_on_ready) override;
- void get_image_size(const litehtml::tchar_t *src,
- const litehtml::tchar_t *baseurl,
+ void get_image_size(const char *src,
+ const char *baseurl,
litehtml::size &sz) override;
- void draw_background(litehtml::uint_ptr hdc, const litehtml::background_paint &bg) override;
+ void draw_background(litehtml::uint_ptr hdc, const std::vector<litehtml::background_paint>&bgs) override;
void draw_borders(litehtml::uint_ptr hdc,
const litehtml::borders &borders,
const litehtml::position &draw_pos,
bool root) override;
- void set_caption(const litehtml::tchar_t *caption) override;
- void set_base_url(const litehtml::tchar_t *base_url) override;
+ void set_caption(const char *caption) override;
+ void set_base_url(const char *base_url) override;
void link(const std::shared_ptr<litehtml::document> &doc,
const litehtml::element::ptr &el) override;
- void on_anchor_click(const litehtml::tchar_t *url, const litehtml::element::ptr &el) override;
- void set_cursor(const litehtml::tchar_t *cursor) override;
- void transform_text(litehtml::tstring &text, litehtml::text_transform tt) override;
- void import_css(litehtml::tstring &text,
- const litehtml::tstring &url,
- litehtml::tstring &baseurl) override;
+ void on_anchor_click(const char *url, const litehtml::element::ptr &el) override;
+ void set_cursor(const char *cursor) override;
+ void transform_text(litehtml::string &text, litehtml::text_transform tt) override;
+ void import_css(litehtml::string &text,
+ const litehtml::string &url,
+ litehtml::string &baseurl) override;
void set_clip(const litehtml::position &pos,
- const litehtml::border_radiuses &bdr_radius,
- bool valid_x,
- bool valid_y) override;
+ const litehtml::border_radiuses &bdr_radius) override;
void del_clip() override;
void get_client_rect(litehtml::position &client) const override;
- std::shared_ptr<litehtml::element> create_element(const litehtml::tchar_t *tag_name,
+ std::shared_ptr<litehtml::element> create_element(const char *tag_name,
const litehtml::string_map &attributes,
const std::shared_ptr<litehtml::document> &doc) override;
void get_media_features(litehtml::media_features &media) const override;
- void get_language(litehtml::tstring &language, litehtml::tstring &culture) const override;
+ void get_language(litehtml::string &language, litehtml::string &culture) const override;
QPixmap getPixmap(const QString &imageUrl, const QString &baseUrl);
QString serifFont() const;
@@ -136,10 +134,5 @@ public: // document_container API
DocumentContainer::PaletteCallback m_paletteCallback;
DocumentContainer::ClipboardCallback m_clipboardCallback;
bool m_blockLinks = false;
-};
-
-class DocumentContainerContextPrivate
-{
-public:
- litehtml::context context;
+ QString m_masterStyleSheet;
};
diff -rupN --no-dereference qt-creator-opensource-src-12.0.0-beta1/src/libs/qlitehtml/src/qlitehtmlwidget.cpp qt-creator-opensource-src-12.0.0-beta1-new/src/libs/qlitehtml/src/qlitehtmlwidget.cpp
--- qt-creator-opensource-src-12.0.0-beta1/src/libs/qlitehtml/src/qlitehtmlwidget.cpp 2023-10-12 13:48:19.000000000 +0200
+++ qt-creator-opensource-src-12.0.0-beta1-new/src/libs/qlitehtml/src/qlitehtmlwidget.cpp 2023-10-14 10:04:48.452192050 +0200
@@ -346,7 +346,6 @@ class QLiteHtmlWidgetPrivate
{
public:
QString html;
- DocumentContainerContext context;
QUrl url;
DocumentContainer documentContainer;
qreal zoomFactor = 1;
@@ -376,7 +375,7 @@ QLiteHtmlWidget::QLiteHtmlWidget(QWidget
d->documentContainer.setClipboardCallback([this](bool yes) { emit copyAvailable(yes); });
// TODO adapt mastercss to palette (default text & background color)
- d->context.setMasterStyleSheet(mastercss);
+ d->documentContainer.setMasterStyleSheet(mastercss);
}
QLiteHtmlWidget::~QLiteHtmlWidget()
@@ -407,7 +406,7 @@ void QLiteHtmlWidget::setHtml(const QStr
{
d->html = content;
d->documentContainer.setPaintDevice(viewport());
- d->documentContainer.setDocument(content.toUtf8(), &d->context);
+ d->documentContainer.setDocument(content.toUtf8());
verticalScrollBar()->setValue(0);
horizontalScrollBar()->setValue(0);
render();