Blob Blame History Raw
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();