From 344777e9af0b6ca1d6714262f2547696526e28e1 Mon Sep 17 00:00:00 2001 From: Joerg Kreuzberger Date: Wed, 4 Feb 2026 10:52:02 +0100 Subject: [PATCH 1/7] [#29] open images in own windows (modal) for detail view --- src/QLiteHtmlBrowserImpl.cpp | 101 +++++++++++++++--- src/QLiteHtmlBrowserImpl.h | 3 + .../files/images_01/index-linkedimages.html | 43 ++++++++ 3 files changed, 133 insertions(+), 14 deletions(-) create mode 100644 test/browser/files/images_01/index-linkedimages.html diff --git a/src/QLiteHtmlBrowserImpl.cpp b/src/QLiteHtmlBrowserImpl.cpp index cc048e6..7973ff2 100644 --- a/src/QLiteHtmlBrowserImpl.cpp +++ b/src/QLiteHtmlBrowserImpl.cpp @@ -12,6 +12,8 @@ #include #include #include +#include +#include QLiteHtmlBrowserImpl::QLiteHtmlBrowserImpl( QWidget* parent ) : QWidget( parent ) @@ -166,20 +168,26 @@ void QLiteHtmlBrowserImpl::mousePressEvent( QMouseEvent* e ) // } //} -void QLiteHtmlBrowserImpl::setUrl( const QUrl& url, int type, bool clearFWHist ) +bool QLiteHtmlBrowserImpl::isImageUrl( const QString& u ) const { - mUrl = UrlType( url, type ); - auto [home_url, home_type] = mHome; - if ( home_url.isEmpty() ) - { - mHome = UrlType( url, type ); - } + const auto lower = u.toLower(); + return lower.endsWith( ".png" ) || lower.endsWith( ".jpg" ) || lower.endsWith( ".jpeg" ) || lower.endsWith( ".gif" ) || lower.endsWith( ".svg" ); +} +bool QLiteHtmlBrowserImpl::isHtmlUrl( const QString& u ) const +{ + const auto lower = u.toLower(); + return lower.endsWith( ".html" ) || lower.endsWith( ".htm" ); +} + +#include +void QLiteHtmlBrowserImpl::setUrl( const QUrl& url, int type, bool clearFWHist ) +{ if ( mContainer ) { auto pure_url = QUrl( url ); pure_url.setFragment( {} ); - QString html; + QByteArray content; if ( pure_url.isLocalFile() ) { @@ -188,20 +196,40 @@ void QLiteHtmlBrowserImpl::setUrl( const QUrl& url, int type, bool clearFWHist ) QFile f( pure_url.toLocalFile() ); if ( f.open( QIODevice::ReadOnly ) ) { - html = f.readAll(); + content = f.readAll(); f.close(); } } else { // eg. if ( url.scheme() == "qthelp" ) - html = mResourceHandler( type, url ); + content = mResourceHandler( type, url ); } - if ( !html.isEmpty() ) + if ( !content.isEmpty() ) { - parseUrl( url ); - mContainer->setHtml( html, url ); + if ( isHtmlUrl( url.toString() ) ) + { + parseUrl( url ); + mContainer->setHtml( QString::fromUtf8( content ), url ); + } + else if ( isImageUrl( url.toString() ) ) + { + onImageClicked( url, content ); + return; + } + else + { + // could not be shown / displayed -> return + return; + } + + mUrl = UrlType( url, type ); + auto [home_url, home_type] = mHome; + if ( home_url.isEmpty() ) + { + mHome = UrlType( url, type ); + } auto hist_url = QUrl(); @@ -330,12 +358,13 @@ QUrl QLiteHtmlBrowserImpl::resolveUrl( const QString& url ) { resolved = QUrl( mBaseUrl ).resolved( _url ); } + if ( !resolved.isRelative() ) { return resolved; } - else if ( QFileInfo( resolved.toLocalFile() ).isReadable() ) + if ( QFileInfo( resolved.toLocalFile() ).isReadable() ) { return QUrl::fromLocalFile( resolved.toLocalFile() ); } @@ -504,3 +533,47 @@ QString QLiteHtmlBrowserImpl::selectedText() const } return text; } + +void QLiteHtmlBrowserImpl::onImageClicked( const QUrl& url, const QByteArray& content ) +{ + Q_UNUSED( url ); + + // Bild aus Bytes laden + QImage img; + if ( !img.loadFromData( content ) ) + { + return; + } + + // Dialog mit Bild anlegen, Parent ist dieses Widget (MyViewer) + QDialog* dlg = new QDialog( this ); + dlg->setAttribute( Qt::WA_DeleteOnClose ); + dlg->setWindowTitle( tr( "Bildanzeige" ) ); + + // Inhalt: ScrollArea + QLabel mit Pixmap + auto* layout = new QVBoxLayout( dlg ); + auto* scroll = new QScrollArea( dlg ); + auto* label = new QLabel( dlg ); + + label->setPixmap( QPixmap::fromImage( img ) ); + label->setAlignment( Qt::AlignCenter ); + scroll->setWidget( label ); + scroll->setWidgetResizable( true ); + + layout->addWidget( scroll ); + dlg->setLayout( layout ); + + // sinnvolle Startgröße (z.B. max 80% der Parentgröße) + const QSize parentSize = this->size(); + const int w = qMin( img.width(), parentSize.width() * 8 / 10 ); + const int h = qMin( img.height(), parentSize.height() * 8 / 10 ); + dlg->resize( qMax( 200, w ), qMax( 200, h ) ); + + // Dialog über dem Parent zentrieren (absolute Screen-Koordinaten) + const QRect parentGeom = this->frameGeometry(); + const QPoint parentCenter = this->mapToGlobal( parentGeom.center() ); + dlg->move( parentCenter.x() - dlg->width() / 2, parentCenter.y() - dlg->height() / 2 ); + + dlg->setModal( true ); // optional, je nach gewünschtem Verhalten + dlg->show(); // oder dlg->exec(); +} diff --git a/src/QLiteHtmlBrowserImpl.h b/src/QLiteHtmlBrowserImpl.h index 95b6253..c3bf3e5 100644 --- a/src/QLiteHtmlBrowserImpl.h +++ b/src/QLiteHtmlBrowserImpl.h @@ -111,6 +111,9 @@ class QLiteHtmlBrowserImpl : public QWidget void parseUrl( const QUrl& url ); QString readResourceCss( const QString& ) const; void applyCSS(); + bool isImageUrl( const QString& u ) const; + bool isHtmlUrl( const QString& u ) const; + void onImageClicked( const QUrl& url, const QByteArray& content ); Q_DISABLE_COPY_MOVE( QLiteHtmlBrowserImpl ); diff --git a/test/browser/files/images_01/index-linkedimages.html b/test/browser/files/images_01/index-linkedimages.html new file mode 100644 index 0000000..0ce9180 --- /dev/null +++ b/test/browser/files/images_01/index-linkedimages.html @@ -0,0 +1,43 @@ + + + +Images Demo + + + +
+ unscaled gradient +

Image from subdirectory.

+
+ +
+ unscaled gradient +

Scaled image from subdirectory.

+
+ +
+
    +
  • item 1
  • +
  • item 2
  • +
+

List with local icons.

+
+ +
+
    +
  • item 1
  • +
  • item 2
  • +
+

List with web content icons.

+
+ +
+ +

Invalid URL.

+
+ + + + + + From 1cf4ec62efa007eaa36c556c6c93c1c99402d81c Mon Sep 17 00:00:00 2001 From: Joerg Kreuzberger Date: Wed, 4 Feb 2026 10:58:54 +0100 Subject: [PATCH 2/7] [] reduce code for image view centering --- src/QLiteHtmlBrowserImpl.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/QLiteHtmlBrowserImpl.cpp b/src/QLiteHtmlBrowserImpl.cpp index 7973ff2..7305036 100644 --- a/src/QLiteHtmlBrowserImpl.cpp +++ b/src/QLiteHtmlBrowserImpl.cpp @@ -570,9 +570,9 @@ void QLiteHtmlBrowserImpl::onImageClicked( const QUrl& url, const QByteArray& co dlg->resize( qMax( 200, w ), qMax( 200, h ) ); // Dialog über dem Parent zentrieren (absolute Screen-Koordinaten) - const QRect parentGeom = this->frameGeometry(); - const QPoint parentCenter = this->mapToGlobal( parentGeom.center() ); - dlg->move( parentCenter.x() - dlg->width() / 2, parentCenter.y() - dlg->height() / 2 ); + QRect dialogRect = dlg->frameGeometry(); + dialogRect.moveCenter( this->mapToGlobal( this->rect().center() ) ); + dlg->move( dialogRect.topLeft() ); dlg->setModal( true ); // optional, je nach gewünschtem Verhalten dlg->show(); // oder dlg->exec(); From 53229d71a142d94ddf4a3b2eb5faf0bcdf9ed95a Mon Sep 17 00:00:00 2001 From: Joerg Kreuzberger Date: Wed, 4 Feb 2026 11:03:11 +0100 Subject: [PATCH 3/7] increate patch version and update changelog --- CHANGELOG.md | 4 ++++ CMakeLists.txt | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0c94410..61ff504 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # Changelog +## v2.3.2 + +- [#29](https://github.com/procitec/qlitehtmlbrowser/issues/29): Show links to image files in own Dialog + ## v2.3.1 - [#26](https://github.com/procitec/qlitehtmlbrowser/issues/26): Fix Multi-Elemen selection highlight boxes diff --git a/CMakeLists.txt b/CMakeLists.txt index 2d2c9cc..100a48b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,6 +1,6 @@ cmake_minimum_required(VERSION 3.28) -project( QLiteHtmlBrowser VERSION 2.3.1 ) +project( QLiteHtmlBrowser VERSION 2.3.2 ) include(GNUInstallDirs) From 507e0dddb0d48427610988ae4dda52ed90808cf6 Mon Sep 17 00:00:00 2001 From: Joerg Kreuzberger Date: Wed, 4 Feb 2026 13:37:00 +0100 Subject: [PATCH 4/7] Add support for svg images --- CHANGELOG.md | 1 + CMakeLists.txt | 4 +- src/CMakeLists.txt | 2 +- src/QLiteHtmlBrowserImpl.cpp | 98 ++++++++++++++++--- src/QLiteHtmlBrowserImpl.h | 3 +- test/browser/CMakeLists.txt | 6 +- .../files/images_01/images/plantuml.svg | 1 + .../files/images_01/index-linkedimages.html | 28 ++---- test/library/CMakeLists.txt | 6 +- 9 files changed, 103 insertions(+), 46 deletions(-) create mode 100644 test/browser/files/images_01/images/plantuml.svg diff --git a/CHANGELOG.md b/CHANGELOG.md index 61ff504..2966239 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,7 @@ ## v2.3.2 +- support SVG Images - [#29](https://github.com/procitec/qlitehtmlbrowser/issues/29): Show links to image files in own Dialog ## v2.3.1 diff --git a/CMakeLists.txt b/CMakeLists.txt index 100a48b..a43ca28 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -27,12 +27,12 @@ if(PROJECT_IS_TOP_LEVEL) set( AUTOUIC OFF) set( AUTORCC OFF) - find_package(Qt6 COMPONENTS Core Gui Widgets) + find_package(Qt6 COMPONENTS Core Gui Widgets Svg) if(Qt6_FOUND) set(QT_VERSION_MAJOR 6) else() set(QT_VERSION_MAJOR 5) - find_package(Qt5 5.15 COMPONENTS Core Gui Widgets REQUIRED) + find_package(Qt5 5.15 COMPONENTS Core Gui Widgets Svg REQUIRED) endif() if( WITH_DOCS ) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 18ec27d..a11879e 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -41,7 +41,7 @@ PRIVATE "${PROJECT_SOURCE_DIR}/include" ) -target_link_libraries(QLiteHtmlBrowser PRIVATE litehtml Qt::Widgets Qt::Gui Qt::Core) +target_link_libraries(QLiteHtmlBrowser PRIVATE litehtml Qt::Widgets Qt::Gui Qt::Svg Qt::Core) set_target_properties(QLiteHtmlBrowser PROPERTIES VERSION ${QLiteHtmlBrowser_VERSION}) set_target_properties(QLiteHtmlBrowser PROPERTIES PUBLIC_HEADER "${PUBLIC_HEADERS}") set_property(TARGET QLiteHtmlBrowser PROPERTY CXX_STANDARD 17) diff --git a/src/QLiteHtmlBrowserImpl.cpp b/src/QLiteHtmlBrowserImpl.cpp index 7305036..ab28f96 100644 --- a/src/QLiteHtmlBrowserImpl.cpp +++ b/src/QLiteHtmlBrowserImpl.cpp @@ -14,6 +14,11 @@ #include #include #include +#include +#include +#include +#include +#include QLiteHtmlBrowserImpl::QLiteHtmlBrowserImpl( QWidget* parent ) : QWidget( parent ) @@ -215,7 +220,7 @@ void QLiteHtmlBrowserImpl::setUrl( const QUrl& url, int type, bool clearFWHist ) } else if ( isImageUrl( url.toString() ) ) { - onImageClicked( url, content ); + onImageClicked( url ); return; } else @@ -318,18 +323,49 @@ double QLiteHtmlBrowserImpl::scale() const return scale; } -QByteArray QLiteHtmlBrowserImpl::loadResource( int /*type*/, const QUrl& url ) +QImage QLiteHtmlBrowserImpl::loadSvgFromFile( const QString& filename ) +{ + QSvgRenderer renderer; + QImage img; + renderer.load( filename ); + if ( renderer.isValid() ) + { + QSize size( renderer.defaultSize() ); + QImage svgImg( size, QImage::Format_ARGB32_Premultiplied ); + svgImg.fill( Qt::transparent ); + QPainter p( &svgImg ); + renderer.render( &p ); + img = svgImg; + } + return img; +} + +QByteArray QLiteHtmlBrowserImpl::loadResource( int type, const QUrl& url ) { QByteArray data; + auto resource_type = static_cast( type ); + QString fileName = findFile( url ); if ( !fileName.isEmpty() ) { - QFile f( fileName ); - if ( f.open( QFile::ReadOnly ) ) + if ( resource_type == Browser::ResourceType::Image && fileName.toLower().endsWith( ".svg" ) ) { - data = f.readAll(); - f.close(); + auto img = loadSvgFromFile( fileName ); + auto pixmap = QPixmap::fromImage( img ); + QBuffer buffer( &data ); + buffer.open( QIODevice::WriteOnly ); + pixmap.save( &buffer, "PNG" ); + buffer.close(); + } + else + { + QFile f( fileName ); + if ( f.open( QFile::ReadOnly ) ) + { + data = f.readAll(); + f.close(); + } } } @@ -534,40 +570,70 @@ QString QLiteHtmlBrowserImpl::selectedText() const return text; } -void QLiteHtmlBrowserImpl::onImageClicked( const QUrl& url, const QByteArray& content ) +void QLiteHtmlBrowserImpl::onImageClicked( const QUrl& url ) { - Q_UNUSED( url ); + auto pure_url = QUrl( url ); + pure_url.setFragment( {} ); + QFileInfo f( url.toLocalFile() ); + + if ( !f.exists() ) + { + return; + } // Bild aus Bytes laden QImage img; - if ( !img.loadFromData( content ) ) + + // sinnvolle Startgröße (z.B. max 80% der Parentgröße) + const QSize parentSize = this->size(); + const int def_w = parentSize.width() * 8 / 10; + const int def_h = parentSize.height() * 8 / 10; + + if ( !img.load( f.absoluteFilePath() ) ) + { + if ( url.toString().toLower().endsWith( ".svg" ) ) + { + img = loadSvgFromFile( f.absoluteFilePath() ); + } + } + + if ( img.isNull() ) { return; } + const int w = qMax( img.width(), def_w ); + const int h = qMax( img.height(), def_h ); + // Dialog mit Bild anlegen, Parent ist dieses Widget (MyViewer) QDialog* dlg = new QDialog( this ); dlg->setAttribute( Qt::WA_DeleteOnClose ); - dlg->setWindowTitle( tr( "Bildanzeige" ) ); + dlg->setWindowTitle( f.fileName() ); // Inhalt: ScrollArea + QLabel mit Pixmap auto* layout = new QVBoxLayout( dlg ); auto* scroll = new QScrollArea( dlg ); - auto* label = new QLabel( dlg ); + // scroll->setHorizontalScrollBarPolicy( Qt::ScrollBarAlwaysOn ); + // scroll->setVerticalScrollBarPolicy( Qt::ScrollBarAlwaysOn ); + auto* label = new QLabel( dlg ); label->setPixmap( QPixmap::fromImage( img ) ); label->setAlignment( Qt::AlignCenter ); + label->resize( w, h ); scroll->setWidget( label ); scroll->setWidgetResizable( true ); layout->addWidget( scroll ); dlg->setLayout( layout ); - // sinnvolle Startgröße (z.B. max 80% der Parentgröße) - const QSize parentSize = this->size(); - const int w = qMin( img.width(), parentSize.width() * 8 / 10 ); - const int h = qMin( img.height(), parentSize.height() * 8 / 10 ); - dlg->resize( qMax( 200, w ), qMax( 200, h ) ); + // Optional: Maximalgröße begrenzen (80% des Screens) + QSize screenSize = screen()->availableGeometry().size(); + dlg->setMaximumSize( screenSize * 0.5 ); + + auto margins = dlg->contentsMargins() + scroll->contentsMargins() + scroll->viewport()->contentsMargins() + label->contentsMargins(); + + dlg->resize( qMax( 200, w + scroll->verticalScrollBar()->width() + margins.left() + margins.right() ), + qMax( 200, h + scroll->horizontalScrollBar()->height() + margins.top() + margins.bottom() ) ); // Dialog über dem Parent zentrieren (absolute Screen-Koordinaten) QRect dialogRect = dlg->frameGeometry(); diff --git a/src/QLiteHtmlBrowserImpl.h b/src/QLiteHtmlBrowserImpl.h index c3bf3e5..4cd8ee9 100644 --- a/src/QLiteHtmlBrowserImpl.h +++ b/src/QLiteHtmlBrowserImpl.h @@ -113,7 +113,8 @@ class QLiteHtmlBrowserImpl : public QWidget void applyCSS(); bool isImageUrl( const QString& u ) const; bool isHtmlUrl( const QString& u ) const; - void onImageClicked( const QUrl& url, const QByteArray& content ); + void onImageClicked( const QUrl& url ); + QImage loadSvgFromFile( const QString& filename ); Q_DISABLE_COPY_MOVE( QLiteHtmlBrowserImpl ); diff --git a/test/browser/CMakeLists.txt b/test/browser/CMakeLists.txt index b541018..b12795b 100644 --- a/test/browser/CMakeLists.txt +++ b/test/browser/CMakeLists.txt @@ -1,11 +1,11 @@ project( TestBrowser ) -find_package(Qt6 COMPONENTS Core Gui Widgets Help) +find_package(Qt6 COMPONENTS Core Gui Widgets Svg Help) if(Qt6_FOUND) set(QT_VERSION_MAJOR 6) else() set(QT_VERSION_MAJOR 5) - find_package(Qt5 5.15 COMPONENTS Core Gui Widgets Help REQUIRED) + find_package(Qt5 5.15 COMPONENTS Core Gui Widgets Svg Help REQUIRED) endif() add_executable( testbrowser ) @@ -26,4 +26,4 @@ target_sources( testbrowser ) target_include_directories(testbrowser PRIVATE "${QLiteHtmlBrowser_SOURCE_DIR}/include") -target_link_libraries( testbrowser PRIVATE QLiteHtmlBrowser Qt::Widgets Qt::Gui Qt::Core Qt::Help ) +target_link_libraries( testbrowser PRIVATE QLiteHtmlBrowser Qt::Widgets Qt::Gui Qt::Core Qt::Svg Qt::Help ) diff --git a/test/browser/files/images_01/images/plantuml.svg b/test/browser/files/images_01/images/plantuml.svg new file mode 100644 index 0000000..899a182 --- /dev/null +++ b/test/browser/files/images_01/images/plantuml.svg @@ -0,0 +1 @@ +yesa?activitydo ado bnob?yesnoc?yesyese?do somethingnod?yesdummysome functionnoc?yesyesf?noactivity \ No newline at end of file diff --git a/test/browser/files/images_01/index-linkedimages.html b/test/browser/files/images_01/index-linkedimages.html index 0ce9180..24b10a2 100644 --- a/test/browser/files/images_01/index-linkedimages.html +++ b/test/browser/files/images_01/index-linkedimages.html @@ -6,37 +6,25 @@
- unscaled gradient -

Image from subdirectory.

+ unscaled gradient jpg +

Unscaled image (jpg) from subdirectory.

- unscaled gradient -

Scaled image from subdirectory.

+ unscaled procitec png +

Scaled image (png) from subdirectory.

-
-
    -
  • item 1
  • -
  • item 2
  • -
-

List with local icons.

-
- -
-
    -
  • item 1
  • -
  • item 2
  • -
-

List with web content icons.

+
+ unscaled plantuml svg +

Scaled image (svg) from subdirectory.

- + broken url jpg

Invalid URL.

- diff --git a/test/library/CMakeLists.txt b/test/library/CMakeLists.txt index 12d40d4..4c933aa 100644 --- a/test/library/CMakeLists.txt +++ b/test/library/CMakeLists.txt @@ -1,10 +1,10 @@ project( QLiteHtmlBrowserTest ) -find_package(Qt6 COMPONENTS Core Gui Widgets Test) +find_package(Qt6 COMPONENTS Core Gui Widgets Svg Test) if(Qt6_FOUND) set(QT_VERSION_MAJOR 6) else() - find_package(Qt5 5.15 COMPONENTS Core Gui Widgets Test REQUIRED) + find_package(Qt5 5.15 COMPONENTS Core Gui Widgets Svg Test REQUIRED) set(QT_VERSION_MAJOR 5) endif() @@ -60,7 +60,7 @@ foreach( name ${test_names}) target_include_directories( ${name} PRIVATE ${QLiteHtmlBrowser_SOURCE_DIR}/include ${QLiteHtmlBrowser_SOURCE_DIR}/src) - target_link_libraries(${name} PUBLIC litehtml Qt::Widgets Qt::Gui Qt::Test ) + target_link_libraries(${name} PUBLIC litehtml Qt::Widgets Qt::Gui Qt::Svg Qt::Test ) target_compile_definitions(${name} PRIVATE TEST_SOURCE_DIR="${CMAKE_CURRENT_SOURCE_DIR}") From 66bdf909db3dd3ecd95982a5b57d38e0241d5c11 Mon Sep 17 00:00:00 2001 From: Joerg Kreuzberger Date: Wed, 4 Feb 2026 13:47:53 +0100 Subject: [PATCH 5/7] install qsvg in workflow --- .github/workflows/build.yml | 8 ++++---- src/QLiteHtmlBrowserImpl.cpp | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 500c83d..ce8a769 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -33,7 +33,7 @@ jobs: # Qt 6 (latest) on Linux - os: ubuntu-latest qt-version: '6.7.*' - qt-modules: 'qt5compat' + qt-modules: 'qt5compat qtsvg' name: Linux-Qt6 use-apt: false test-cmd: xvfb-run -a ctest -V -E NOT_BUILT @@ -44,7 +44,7 @@ jobs: qt-modules: '' name: Linux-Qt5 use-apt: true - apt-packages: 'qtbase5-dev qttools5-dev ninja-build xvfb libxcb-cursor0' + apt-packages: 'qtbase5-dev qttools5-dev libqt5svg5-dev ninja-build xvfb libxcb-cursor0' test-cmd: xvfb-run -a ctest -V -E NOT_BUILT # ========== Windows Builds ========== @@ -52,7 +52,7 @@ jobs: - os: windows-latest qt-version: '6.7.*' qt-arch: 'win64_msvc2019_64' - qt-modules: 'qt5compat' + qt-modules: 'qt5compat qtsvg' name: Windows-Qt6 use-apt: false test-cmd: ctest -C Release -V -E NOT_BUILT @@ -61,7 +61,7 @@ jobs: - os: windows-latest qt-version: '5.15.2' qt-arch: 'win64_msvc2019_64' - qt-modules: '' + qt-modules: 'qtsvg' name: Windows-Qt5 use-apt: false test-cmd: ctest -C Release -V -E NOT_BUILT diff --git a/src/QLiteHtmlBrowserImpl.cpp b/src/QLiteHtmlBrowserImpl.cpp index ab28f96..282dc08 100644 --- a/src/QLiteHtmlBrowserImpl.cpp +++ b/src/QLiteHtmlBrowserImpl.cpp @@ -17,8 +17,8 @@ #include #include #include -#include -#include +#include +#include QLiteHtmlBrowserImpl::QLiteHtmlBrowserImpl( QWidget* parent ) : QWidget( parent ) From 060c89574c949b8512dd1151e01fa0133c024f60 Mon Sep 17 00:00:00 2001 From: Joerg Kreuzberger Date: Wed, 4 Feb 2026 13:53:55 +0100 Subject: [PATCH 6/7] install qsvg in workflow --- .github/workflows/build.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index ce8a769..61618d0 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -33,7 +33,7 @@ jobs: # Qt 6 (latest) on Linux - os: ubuntu-latest qt-version: '6.7.*' - qt-modules: 'qt5compat qtsvg' + qt-modules: 'qt5compat' name: Linux-Qt6 use-apt: false test-cmd: xvfb-run -a ctest -V -E NOT_BUILT @@ -52,7 +52,7 @@ jobs: - os: windows-latest qt-version: '6.7.*' qt-arch: 'win64_msvc2019_64' - qt-modules: 'qt5compat qtsvg' + qt-modules: 'qt5compat' name: Windows-Qt6 use-apt: false test-cmd: ctest -C Release -V -E NOT_BUILT @@ -61,7 +61,7 @@ jobs: - os: windows-latest qt-version: '5.15.2' qt-arch: 'win64_msvc2019_64' - qt-modules: 'qtsvg' + qt-modules: '' name: Windows-Qt5 use-apt: false test-cmd: ctest -C Release -V -E NOT_BUILT From 3c8f823f03e56df642ee53b9d3b3b21f2d00639e Mon Sep 17 00:00:00 2001 From: Joerg Kreuzberger Date: Wed, 4 Feb 2026 14:09:09 +0100 Subject: [PATCH 7/7] add test for images of type jpg and svg --- test/library/images/plantuml.jpg | Bin 0 -> 73854 bytes test/library/images/plantuml.svg | 1 + test/library/test_html_content.cpp | 44 +++++++++++++++++++++++------ 3 files changed, 37 insertions(+), 8 deletions(-) create mode 100644 test/library/images/plantuml.jpg create mode 100644 test/library/images/plantuml.svg diff --git a/test/library/images/plantuml.jpg b/test/library/images/plantuml.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2f293a2ec22e31ef9bc19c9ff2e65b4f7819437d GIT binary patch literal 73854 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 K^U@7tUS$!^-5z<0> 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¥~chke=o-b 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 ado bnob?yesnoc?yesyese?do somethingnod?yesdummysome functionnoc?yesyesf?noactivity \ No newline at end of file diff --git a/test/library/test_html_content.cpp b/test/library/test_html_content.cpp index e782237..be106e3 100644 --- a/test/library/test_html_content.cpp +++ b/test/library/test_html_content.cpp @@ -75,7 +75,7 @@ void HTMLContentTest::test_lists_data()

  • Coffee
  • Tea
  • Milk
  • - + )-"; QTest::newRow( "description list" ) << R"-( @@ -84,7 +84,7 @@ void HTMLContentTest::test_lists_data()
    - black hot drink
    Milk
    - white cold drink
    - + )-"; // litehtml seems to support this via css only @@ -94,7 +94,7 @@ void HTMLContentTest::test_lists_data()
  • Coffee
  • Tea
  • Milk
  • - + )-"; // litehtml seems to support this via css only @@ -104,7 +104,7 @@ void HTMLContentTest::test_lists_data()
  • Coffee
  • Tea
  • Milk
  • - + )-"; QTest::newRow( "unordered list disc image " ) << R"-( @@ -151,7 +151,7 @@ void HTMLContentTest::test_img_data() { QTest::addColumn( "html" ); - QTest::newRow( "Simple local image " ) << R"-( + QTest::newRow( "Simple local image (png) " ) << R"-( @@ -160,6 +160,24 @@ void HTMLContentTest::test_img_data() )-"; + QTest::newRow( "Simple local image (svg) " ) << R"-( + + + + + + + )-"; + + QTest::newRow( "Simple local image (jpg) " ) << R"-( + + + + + + + )-"; + QTest::newRow( "invalid image" ) << R"-( @@ -191,9 +209,19 @@ void HTMLContentTest::test_img_scale_data() )-"; + auto contentSVG = R"-( + + + + + + + )-"; + QTest::newRow( "procitec_logo scale 100% " ) << content << 1.0; QTest::newRow( "procitec_logo scale 150% " ) << content << 1.50; QTest::newRow( "procitec_logo scale 50% " ) << content << 0.50; + QTest::newRow( "plantuml svg scale 50% " ) << contentSVG << 0.50; } void HTMLContentTest::test_img_scale() @@ -213,9 +241,9 @@ void HTMLContentTest::test_tables_data() - +

    HTML Table

    - + @@ -253,7 +281,7 @@ void HTMLContentTest::test_tables_data()
    CompanyItaly
    - + )-"; }