From a991943e59bc4341ceef55313642b85565454d86 Mon Sep 17 00:00:00 2001 From: Aleks Kissinger Date: Sun, 16 Dec 2018 16:04:02 +0100 Subject: added dummy preview window, linked to poppler --- CMakeLists.txt | 12 ++++++++- src/gui/previewwindow.cpp | 61 +++++++++++++++++++++++++++++++++++++++++++++ src/gui/previewwindow.h | 7 ++++++ src/gui/previewwindow.ui | 63 +++++++++++++++++++++++++++++++++++++++++++++-- src/tikzit.cpp | 4 +++ 5 files changed, 144 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index ba0eee5..311dac4 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -10,6 +10,11 @@ find_package(Qt5 REQUIRED COMPONENTS Core Gui Widgets Network) find_package(BISON) find_package(FLEX) +# use extra-cmake-modules to find poppler library +find_package(ECM REQUIRED NO_MODULE) +set(CMAKE_MODULE_PATH ${ECM_FIND_MODULE_DIR}) +find_package(Poppler REQUIRED COMPONENTS Core Qt5) + include_directories( ${PROJECT_SOURCE_DIR} ${PROJECT_SOURCE_DIR}/src @@ -38,6 +43,7 @@ set(SOURCES src/gui/mainmenu.cpp src/gui/mainwindow.cpp src/gui/nodeitem.cpp + src/gui/previewwindow.cpp src/gui/propertypalette.cpp src/gui/styleeditor.cpp src/gui/stylepalette.cpp @@ -67,6 +73,7 @@ set(HEADERS src/gui/mainmenu.h src/gui/mainwindow.h src/gui/nodeitem.h + src/gui/previewwindow.h src/gui/propertypalette.h src/gui/styleeditor.h src/gui/stylepalette.h @@ -81,6 +88,7 @@ set(HEADERS set(FORMS src/gui/mainmenu.ui src/gui/mainwindow.ui + src/gui/previewwindow.ui src/gui/propertypalette.ui src/gui/styleeditor.ui src/gui/stylepalette.ui @@ -99,4 +107,6 @@ add_executable(tikzit ${BISON_PARSER_OUTPUTS} ${QT_RESOURCES}) -target_link_libraries(${PROJECT_NAME} Qt5::Core Qt5::Gui Qt5::Widgets Qt5::Network) +target_link_libraries(${PROJECT_NAME} + Qt5::Core Qt5::Gui Qt5::Widgets Qt5::Network + ${Poppler_LIBRARIES}) diff --git a/src/gui/previewwindow.cpp b/src/gui/previewwindow.cpp index 945c77e..bca28e3 100644 --- a/src/gui/previewwindow.cpp +++ b/src/gui/previewwindow.cpp @@ -1,14 +1,75 @@ #include "previewwindow.h" #include "ui_previewwindow.h" +#include +#include +#include +#include +#include +#include +#include + PreviewWindow::PreviewWindow(QWidget *parent) : QDialog(parent), ui(new Ui::PreviewWindow) { + QSettings settings("tikzit", "tikzit"); ui->setupUi(this); + + QVariant geom = settings.value("geometry-preview"); + + if (geom.isValid()) { + restoreGeometry(geom.toByteArray()); + } + + _doc = Poppler::Document::load("/home/aleks/ak-algebras.pdf"); + _doc->setRenderHint(Poppler::Document::Antialiasing); + _doc->setRenderHint(Poppler::Document::TextAntialiasing); + _doc->setRenderHint(Poppler::Document::TextHinting ); + _page = _doc->page(0); + + render(); } PreviewWindow::~PreviewWindow() { delete ui; } + +void PreviewWindow::closeEvent(QCloseEvent *e) { + QSettings settings("tikzit", "tikzit"); + settings.setValue("geometry-preview", saveGeometry()); +} + +void PreviewWindow::resizeEvent(QResizeEvent *e) { + render(); + QDialog::resizeEvent(e); +} + +void PreviewWindow::showEvent(QShowEvent *e) { + render(); + QDialog::showEvent(e); +} + +void PreviewWindow::render() { + QSizeF size = _page->pageSizeF(); + + QRect rect = ui->scrollArea->visibleRegion().boundingRect(); + int w = rect.width(); + int h = rect.height(); + qreal scale = fmin(static_cast(w) / size.width(), + static_cast(h) / size.height()); + int dpi = static_cast(scale * 72.0); + int w1 = static_cast(scale * size.width()); + int h1 = static_cast(scale * size.height()); + + // qDebug() << "visible width:" << w; + // qDebug() << "visible height:" << h; + // qDebug() << "doc width:" << size.width(); + // qDebug() << "doc height:" << size.height(); + // qDebug() << "scale:" << scale; + // qDebug() << "dpi:" << dpi; + + QImage img = _page->renderToImage(dpi,dpi, (w1 - w)/2, (h1 - h)/2, w, h); + ui->pdf->setPixmap(QPixmap::fromImage(img)); +} diff --git a/src/gui/previewwindow.h b/src/gui/previewwindow.h index 5c4a384..f2366d6 100644 --- a/src/gui/previewwindow.h +++ b/src/gui/previewwindow.h @@ -2,6 +2,7 @@ #define PREVIEWWINDOW_H #include +#include namespace Ui { class PreviewWindow; @@ -14,9 +15,15 @@ class PreviewWindow : public QDialog public: explicit PreviewWindow(QWidget *parent = nullptr); ~PreviewWindow(); + void resizeEvent(QResizeEvent *e); + void showEvent(QShowEvent *e); + void closeEvent(QCloseEvent *e); private: Ui::PreviewWindow *ui; + void render(); + Poppler::Document *_doc; + Poppler::Page *_page; }; #endif // PREVIEWWINDOW_H diff --git a/src/gui/previewwindow.ui b/src/gui/previewwindow.ui index 59224aa..6bb993a 100644 --- a/src/gui/previewwindow.ui +++ b/src/gui/previewwindow.ui @@ -1,6 +1,7 @@ + PreviewWindow - + 0 @@ -10,8 +11,66 @@ - Dialog + Preview + + + + + 0 + + + + PDF + + + + + + Qt::ScrollBarAlwaysOff + + + Qt::ScrollBarAlwaysOff + + + true + + + + + 0 + 0 + 358 + 233 + + + + + + + + + + + + + + + + + + + Output + + + + + + + + + + diff --git a/src/tikzit.cpp b/src/tikzit.cpp index 1c3ba23..d69f4a8 100644 --- a/src/tikzit.cpp +++ b/src/tikzit.cpp @@ -19,6 +19,7 @@ #include "tikzit.h" #include "tikzassembler.h" #include "tikzstyles.h" +#include "previewwindow.h" #include #include @@ -126,6 +127,9 @@ void Tikzit::init() if (check.toBool()) { checkForUpdates(); } + + PreviewWindow *preview = new PreviewWindow(); + preview->show(); } //QMenuBar *Tikzit::mainMenu() const -- cgit v1.2.3