From e8b06cb33e6fbe6c614cd52575dd1514a4a00781 Mon Sep 17 00:00:00 2001 From: Aleks Kissinger Date: Tue, 30 Oct 2018 17:31:58 +0100 Subject: started popple --- src/gui/previewwindow.cpp | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 src/gui/previewwindow.cpp (limited to 'src/gui/previewwindow.cpp') diff --git a/src/gui/previewwindow.cpp b/src/gui/previewwindow.cpp new file mode 100644 index 0000000..945c77e --- /dev/null +++ b/src/gui/previewwindow.cpp @@ -0,0 +1,14 @@ +#include "previewwindow.h" +#include "ui_previewwindow.h" + +PreviewWindow::PreviewWindow(QWidget *parent) : + QDialog(parent), + ui(new Ui::PreviewWindow) +{ + ui->setupUi(this); +} + +PreviewWindow::~PreviewWindow() +{ + delete ui; +} -- cgit v1.2.3 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(-) (limited to 'src/gui/previewwindow.cpp') 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 From 6121b486e168334db70cbbe7a67afe56c0272748 Mon Sep 17 00:00:00 2001 From: Aleks Kissinger Date: Mon, 17 Dec 2018 12:37:15 +0100 Subject: preview almost works --- src/gui/latexprocess.cpp | 98 +++++++++++++++++++++++++++++++++++++++++++++++ src/gui/latexprocess.h | 33 ++++++++++++++++ src/gui/mainmenu.cpp | 5 +++ src/gui/mainmenu.h | 1 + src/gui/mainmenu.ui | 9 +++++ src/gui/previewwindow.cpp | 37 +++++++++++++++--- src/gui/previewwindow.h | 6 +++ src/gui/previewwindow.ui | 8 ++-- src/tikzit.cpp | 33 +++++++++++++++- src/tikzit.h | 6 +++ tex/sample/tikzit.sty | 2 +- tikzit.pro | 6 ++- tikzit.qrc | 1 + 13 files changed, 231 insertions(+), 14 deletions(-) create mode 100644 src/gui/latexprocess.cpp create mode 100644 src/gui/latexprocess.h (limited to 'src/gui/previewwindow.cpp') diff --git a/src/gui/latexprocess.cpp b/src/gui/latexprocess.cpp new file mode 100644 index 0000000..f81e883 --- /dev/null +++ b/src/gui/latexprocess.cpp @@ -0,0 +1,98 @@ +#include "latexprocess.h" +#include "tikzit.h" + +#include +#include +#include + +LatexProcess::LatexProcess(PreviewWindow *preview, QObject *parent) : QObject(parent) +{ + _preview = preview; + _output = preview->outputTextEdit(); + + _proc = new QProcess(this); + _proc->setProcessChannelMode(QProcess::MergedChannels); + _proc->setWorkingDirectory(_workingDir.path()); + + connect(_proc, SIGNAL(readyReadStandardOutput()), this, SLOT(readyReadStandardOutput())); + connect(_proc, SIGNAL(finished(int)), this, SLOT(finished(int))); + + // for debug purposes + _workingDir.setAutoRemove(false); +} + +void LatexProcess::makePreview(QString tikz) +{ + _output->clear(); + + if (!_workingDir.isValid()) { + _output->appendPlainText("COULD NOT WRITE TO TEMP DIR: " + _workingDir.path() + "\n"); + return; + } + + _output->appendPlainText("USING TEMP DIR: " + _workingDir.path() + "\n"); + _output->appendPlainText("SEARCHING FOR pdflatex IN:"); + _output->appendPlainText(qgetenv("PATH")); + _output->appendPlainText("\n"); + + + QString pdflatex = QStandardPaths::findExecutable("pdflatex"); + if (pdflatex.isEmpty()) { + _output->appendPlainText("pdflatex NOT FOUND, ABORTING.\n"); + return; + } + + _output->appendPlainText("FOUND: " + pdflatex + "\n"); + + // copy active *.tikzstyles file to preview dir + if (!tikzit->styleFile().isEmpty() && QFile::exists(tikzit->styleFilePath())) { + QFile::copy(tikzit->styleFilePath(), _workingDir.path() + "/" + tikzit->styleFile()); + } + + // copy tikzit.sty to preview dir + QFile::copy(":/tex/sample/tikzit.sty", _workingDir.path() + "/tikzit.sty"); + + // write out the file containing the tikz picture + QFile f(_workingDir.path() + "/preview.tex"); + f.open(QIODevice::WriteOnly); + QTextStream tex(&f); + tex << "\\documentclass{article}\n"; + tex << "\\usepackage[active,tightpage]{preview}\n"; + tex << "\\PreviewEnvironment{tikzpicture}\n"; + tex << "\\usepackage{tikzit}\n"; + tex << "\\input{" + tikzit->styleFile() + "}\n"; + tex << "\\begin{document}\n\n"; + tex << tikz; + tex << "\n\n\\end{document}\n"; + + f.close(); + _proc->start(pdflatex, QStringList() << "preview.tex"); + +} + +void LatexProcess::kill() +{ + if (_proc->state() == QProcess::Running) _proc->kill(); +} + +void LatexProcess::readyReadStandardOutput() +{ + QByteArray s = _proc->readAllStandardOutput(); + _output->appendPlainText(s); +} + +void LatexProcess::finished(int exitCode) +{ + QByteArray s = _proc->readAllStandardOutput(); + _output->appendPlainText(s); + + if (exitCode == 0) { + QString pdf = _workingDir.path() + "/preview.pdf"; + _output->appendPlainText("\n\nSUCCESSFULLY GENERATED: " + pdf + "\n"); + //_preview->setPdf(pdf); + emit previewFinished(); + } else { + _output->appendPlainText("\n\npdflatex RETURNED AN ERROR\n"); + emit previewFinished(); + } +} diff --git a/src/gui/latexprocess.h b/src/gui/latexprocess.h new file mode 100644 index 0000000..dc815f2 --- /dev/null +++ b/src/gui/latexprocess.h @@ -0,0 +1,33 @@ +#ifndef LATEXPROCESS_H +#define LATEXPROCESS_H + +#include "previewwindow.h" + +#include +#include +#include +#include + +class LatexProcess : public QObject +{ + Q_OBJECT +public: + explicit LatexProcess(PreviewWindow *preview, QObject *parent = nullptr); + void makePreview(QString tikz); + void kill(); + +private: + QTemporaryDir _workingDir; + PreviewWindow *_preview; + QPlainTextEdit *_output; + QProcess *_proc; + +public slots: + void readyReadStandardOutput(); + void finished(int exitCode); + +signals: + void previewFinished(); +}; + +#endif // LATEXPROCESS_H diff --git a/src/gui/mainmenu.cpp b/src/gui/mainmenu.cpp index 8166c59..ab1b898 100644 --- a/src/gui/mainmenu.cpp +++ b/src/gui/mainmenu.cpp @@ -228,6 +228,11 @@ void MainMenu::on_actionJump_to_Selection_triggered() } } +void MainMenu::on_actionRun_LaTeX_triggered() +{ + tikzit->makePreview(); +} + // View void MainMenu::on_actionZoom_In_triggered() diff --git a/src/gui/mainmenu.h b/src/gui/mainmenu.h index c14a284..e1477b4 100644 --- a/src/gui/mainmenu.h +++ b/src/gui/mainmenu.h @@ -67,6 +67,7 @@ public slots: void on_actionParse_triggered(); void on_actionRevert_triggered(); void on_actionJump_to_Selection_triggered(); + void on_actionRun_LaTeX_triggered(); // View void on_actionZoom_In_triggered(); diff --git a/src/gui/mainmenu.ui b/src/gui/mainmenu.ui index 0481c1d..58a2ff0 100644 --- a/src/gui/mainmenu.ui +++ b/src/gui/mainmenu.ui @@ -74,6 +74,7 @@ + @@ -335,6 +336,14 @@ About + + + Run LaTeX + + + Ctrl+R + + diff --git a/src/gui/previewwindow.cpp b/src/gui/previewwindow.cpp index bca28e3..0a37e1b 100644 --- a/src/gui/previewwindow.cpp +++ b/src/gui/previewwindow.cpp @@ -1,12 +1,18 @@ #include "previewwindow.h" #include "ui_previewwindow.h" +#include "tikzit.h" +#include "latexprocess.h" + #include #include #include #include -#include #include +#include +#include +#include +#include #include PreviewWindow::PreviewWindow(QWidget *parent) : @@ -22,23 +28,42 @@ PreviewWindow::PreviewWindow(QWidget *parent) : restoreGeometry(geom.toByteArray()); } - _doc = Poppler::Document::load("/home/aleks/ak-algebras.pdf"); + _doc = nullptr; + _page = nullptr; + //setPdf("/home/aleks/ak-algebras.pdf"); + + //qDebug() << "preview dir:" << preparePreview("foo"); + + render(); +} + +PreviewWindow::~PreviewWindow() +{ + delete ui; +} + +void PreviewWindow::setPdf(QString file) +{ + Poppler::Document *oldDoc = _doc; + _doc = Poppler::Document::load(file); _doc->setRenderHint(Poppler::Document::Antialiasing); _doc->setRenderHint(Poppler::Document::TextAntialiasing); _doc->setRenderHint(Poppler::Document::TextHinting ); _page = _doc->page(0); - render(); + + if (oldDoc != nullptr) delete oldDoc; } -PreviewWindow::~PreviewWindow() +QPlainTextEdit *PreviewWindow::outputTextEdit() { - delete ui; + return ui->output; } void PreviewWindow::closeEvent(QCloseEvent *e) { QSettings settings("tikzit", "tikzit"); settings.setValue("geometry-preview", saveGeometry()); + QDialog::closeEvent(e); } void PreviewWindow::resizeEvent(QResizeEvent *e) { @@ -52,6 +77,8 @@ void PreviewWindow::showEvent(QShowEvent *e) { } void PreviewWindow::render() { + if (_page == nullptr) return; + QSizeF size = _page->pageSizeF(); QRect rect = ui->scrollArea->visibleRegion().boundingRect(); diff --git a/src/gui/previewwindow.h b/src/gui/previewwindow.h index f2366d6..c850ce9 100644 --- a/src/gui/previewwindow.h +++ b/src/gui/previewwindow.h @@ -2,6 +2,7 @@ #define PREVIEWWINDOW_H #include +#include #include namespace Ui { @@ -15,6 +16,11 @@ class PreviewWindow : public QDialog public: explicit PreviewWindow(QWidget *parent = nullptr); ~PreviewWindow(); + void setPdf(QString file); + QString preparePreview(QString tikz); + QPlainTextEdit *outputTextEdit(); + +protected: void resizeEvent(QResizeEvent *e); void showEvent(QShowEvent *e); void closeEvent(QCloseEvent *e); diff --git a/src/gui/previewwindow.ui b/src/gui/previewwindow.ui index 6bb993a..394fc41 100644 --- a/src/gui/previewwindow.ui +++ b/src/gui/previewwindow.ui @@ -6,8 +6,8 @@ 0 0 - 400 - 300 + 603 + 480 @@ -40,8 +40,8 @@ 0 0 - 358 - 233 + 561 + 413 diff --git a/src/tikzit.cpp b/src/tikzit.cpp index d69f4a8..5f74d0b 100644 --- a/src/tikzit.cpp +++ b/src/tikzit.cpp @@ -20,6 +20,7 @@ #include "tikzassembler.h" #include "tikzstyles.h" #include "previewwindow.h" +#include "latexprocess.h" #include #include @@ -30,6 +31,7 @@ #include #include + // application-level instance of Tikzit Tikzit *tikzit; @@ -107,6 +109,8 @@ void Tikzit::init() _windows << new MainWindow(); _windows[0]->show(); + _styleFile = ""; + _styleFilePath = ""; QString styleFile = settings.value("previous-tikzstyles-file").toString(); if (!styleFile.isEmpty()) loadStyles(styleFile); @@ -128,8 +132,8 @@ void Tikzit::init() checkForUpdates(); } - PreviewWindow *preview = new PreviewWindow(); - preview->show(); + _preview = new PreviewWindow(); + _latex = nullptr; } //QMenuBar *Tikzit::mainMenu() const @@ -415,6 +419,31 @@ void Tikzit::updateReply(QNetworkReply *reply) } } +void Tikzit::makePreview() +{ + if (activeWindow()) { + LatexProcess *oldProc = _latex; + _latex = new LatexProcess(_preview, this); + if (oldProc != nullptr) { + oldProc->kill(); + oldProc->deleteLater(); + } + + connect(_latex, SIGNAL(previewFinished()), this, SLOT(cleanupLatex())); + _latex->makePreview(activeWindow()->tikzSource()); + _preview->show(); + } +} + +void Tikzit::cleanupLatex() +{ + LatexProcess *oldProc = _latex; + _latex = nullptr; + if (oldProc != nullptr) { + oldProc->deleteLater(); + } +} + //StylePalette *Tikzit::stylePalette() const //{ // return _stylePalette; diff --git a/src/tikzit.h b/src/tikzit.h index 5fed22c..3d4847d 100644 --- a/src/tikzit.h +++ b/src/tikzit.h @@ -60,6 +60,8 @@ #include "propertypalette.h" #include "stylepalette.h" #include "tikzstyles.h" +#include "latexprocess.h" +#include "previewwindow.h" #include #include @@ -137,6 +139,8 @@ public slots: void setCheckForUpdates(bool check); void checkForUpdates(); void updateReply(QNetworkReply *reply); + void makePreview(); + void cleanupLatex(); private: // void createMenu(); @@ -153,6 +157,8 @@ private: StyleEditor *_styleEditor; QStringList _colNames; QVector _cols; + LatexProcess *_latex; + PreviewWindow *_preview; }; extern Tikzit *tikzit; diff --git a/tex/sample/tikzit.sty b/tex/sample/tikzit.sty index b893a4a..9c51148 100644 --- a/tex/sample/tikzit.sty +++ b/tex/sample/tikzit.sty @@ -29,4 +29,4 @@ \pgfsetlayers{background,edgelayer,nodelayer,main} \tikzstyle{none}=[inner sep=0mm] \tikzstyle{every loop}=[] -\tikzstyle{mark coordinate}=[inner sep=0pt,outer sep=0pt,minimum size=3pt,fill=black,circle] \ No newline at end of file +\tikzstyle{mark coordinate}=[inner sep=0pt,outer sep=0pt,minimum size=3pt,fill=black,circle] diff --git a/tikzit.pro b/tikzit.pro index e1e07b4..82b4032 100644 --- a/tikzit.pro +++ b/tikzit.pro @@ -72,7 +72,8 @@ SOURCES += src/gui/mainwindow.cpp \ src/data/style.cpp \ src/gui/styleeditor.cpp \ src/data/stylelist.cpp \ - src/gui/previewwindow.cpp + src/gui/previewwindow.cpp \ + src/gui/latexprocess.cpp HEADERS += src/gui/mainwindow.h \ src/gui/toolpalette.h \ @@ -99,7 +100,8 @@ HEADERS += src/gui/mainwindow.h \ src/data/style.h \ src/gui/styleeditor.h \ src/data/stylelist.h \ - src/gui/previewwindow.h + src/gui/previewwindow.h \ + src/gui/latexprocess.h FORMS += src/gui/mainwindow.ui \ src/gui/propertypalette.ui \ diff --git a/tikzit.qrc b/tikzit.qrc index 0484c2d..32bdfc8 100644 --- a/tikzit.qrc +++ b/tikzit.qrc @@ -8,6 +8,7 @@ images/refresh.svg images/tikzit.png images/text-x-generic_with_pencil.svg + tex/sample/tikzit.sty qt.conf -- cgit v1.2.3 From 2332239082db6a33ee66bb08491c1e9cf099f9b6 Mon Sep 17 00:00:00 2001 From: Aleks Kissinger Date: Tue, 18 Dec 2018 09:53:00 +0100 Subject: preview works --- src/gui/latexprocess.cpp | 8 ++++---- src/gui/previewwindow.cpp | 15 ++++++++++++--- 2 files changed, 16 insertions(+), 7 deletions(-) (limited to 'src/gui/previewwindow.cpp') diff --git a/src/gui/latexprocess.cpp b/src/gui/latexprocess.cpp index f81e883..20b22a4 100644 --- a/src/gui/latexprocess.cpp +++ b/src/gui/latexprocess.cpp @@ -18,7 +18,7 @@ LatexProcess::LatexProcess(PreviewWindow *preview, QObject *parent) : QObject(pa connect(_proc, SIGNAL(finished(int)), this, SLOT(finished(int))); // for debug purposes - _workingDir.setAutoRemove(false); + // _workingDir.setAutoRemove(false); } void LatexProcess::makePreview(QString tikz) @@ -57,9 +57,9 @@ void LatexProcess::makePreview(QString tikz) f.open(QIODevice::WriteOnly); QTextStream tex(&f); tex << "\\documentclass{article}\n"; - tex << "\\usepackage[active,tightpage]{preview}\n"; - tex << "\\PreviewEnvironment{tikzpicture}\n"; tex << "\\usepackage{tikzit}\n"; + tex << "\\usepackage[graphics,active,tightpage]{preview}\n"; + tex << "\\PreviewEnvironment{tikzpicture}\n"; tex << "\\input{" + tikzit->styleFile() + "}\n"; tex << "\\begin{document}\n\n"; tex << tikz; @@ -89,7 +89,7 @@ void LatexProcess::finished(int exitCode) if (exitCode == 0) { QString pdf = _workingDir.path() + "/preview.pdf"; _output->appendPlainText("\n\nSUCCESSFULLY GENERATED: " + pdf + "\n"); - //_preview->setPdf(pdf); + _preview->setPdf(pdf); emit previewFinished(); } else { _output->appendPlainText("\n\npdflatex RETURNED AN ERROR\n"); diff --git a/src/gui/previewwindow.cpp b/src/gui/previewwindow.cpp index 0a37e1b..8625045 100644 --- a/src/gui/previewwindow.cpp +++ b/src/gui/previewwindow.cpp @@ -13,6 +13,7 @@ #include #include #include +#include #include PreviewWindow::PreviewWindow(QWidget *parent) : @@ -45,7 +46,15 @@ PreviewWindow::~PreviewWindow() void PreviewWindow::setPdf(QString file) { Poppler::Document *oldDoc = _doc; - _doc = Poppler::Document::load(file); + Poppler::Document *newDoc = Poppler::Document::load(file); + if (!newDoc) { + QMessageBox::warning(nullptr, + "Could not read PDF", + "Could not read: '" + file + "'."); + return; + } + + _doc = newDoc; _doc->setRenderHint(Poppler::Document::Antialiasing); _doc->setRenderHint(Poppler::Document::TextAntialiasing); _doc->setRenderHint(Poppler::Document::TextHinting ); @@ -82,8 +91,8 @@ void PreviewWindow::render() { QSizeF size = _page->pageSizeF(); QRect rect = ui->scrollArea->visibleRegion().boundingRect(); - int w = rect.width(); - int h = rect.height(); + int w = rect.width() - 20; + int h = rect.height() - 20; qreal scale = fmin(static_cast(w) / size.width(), static_cast(h) / size.height()); int dpi = static_cast(scale * 72.0); -- cgit v1.2.3 From a923245a1151ffc36da25702a50a508d43094cd0 Mon Sep 17 00:00:00 2001 From: Aleks Kissinger Date: Wed, 19 Dec 2018 14:11:06 +0000 Subject: build in windows works --- src/gui/mainmenu.cpp | 2 +- src/gui/previewwindow.cpp | 2 +- src/tikzit.cpp | 33 ++++++++++++++++++++++++++------- src/tikzit.h | 6 ++++-- tikzit.pro | 4 ++-- 5 files changed, 34 insertions(+), 13 deletions(-) (limited to 'src/gui/previewwindow.cpp') diff --git a/src/gui/mainmenu.cpp b/src/gui/mainmenu.cpp index ab1b898..6f6ab00 100644 --- a/src/gui/mainmenu.cpp +++ b/src/gui/mainmenu.cpp @@ -265,5 +265,5 @@ void MainMenu::on_actionCheck_for_updates_automatically_triggered() void MainMenu::on_actionCheck_now_triggered() { - tikzit->checkForUpdates(); + tikzit->checkForUpdates(true); } diff --git a/src/gui/previewwindow.cpp b/src/gui/previewwindow.cpp index 8625045..5452a7e 100644 --- a/src/gui/previewwindow.cpp +++ b/src/gui/previewwindow.cpp @@ -106,6 +106,6 @@ void PreviewWindow::render() { // qDebug() << "scale:" << scale; // qDebug() << "dpi:" << dpi; - QImage img = _page->renderToImage(dpi,dpi, (w1 - w)/2, (h1 - h)/2, w, h); + QImage img = _page->renderToImage(dpi, dpi, (w1 - w)/2, (h1 - h)/2, w, h); ui->pdf->setPixmap(QPixmap::fromImage(img)); } diff --git a/src/tikzit.cpp b/src/tikzit.cpp index 5f74d0b..39a2924 100644 --- a/src/tikzit.cpp +++ b/src/tikzit.cpp @@ -129,7 +129,7 @@ void Tikzit::init() setCheckForUpdates(check.toBool()); if (check.toBool()) { - checkForUpdates(); + checkForUpdates(false); } _preview = new PreviewWindow(); @@ -365,16 +365,32 @@ void Tikzit::setCheckForUpdates(bool check) } } -void Tikzit::checkForUpdates() +void Tikzit::checkForUpdates(bool manual) { QNetworkAccessManager *manager = new QNetworkAccessManager(this); - connect(manager, SIGNAL(finished(QNetworkReply*)), - this, SLOT(updateReply(QNetworkReply*))); + + if (manual) { + connect(manager, SIGNAL(finished(QNetworkReply*)), + this, SLOT(updateManual(QNetworkReply*))); + } else { + connect(manager, SIGNAL(finished(QNetworkReply*)), + this, SLOT(updateAuto(QNetworkReply*))); + } manager->get(QNetworkRequest(QUrl("https://tikzit.github.io/latest-version.txt"))); } -void Tikzit::updateReply(QNetworkReply *reply) +void Tikzit::updateAuto(QNetworkReply *reply) +{ + updateReply(reply, false); +} + +void Tikzit::updateManual(QNetworkReply *reply) +{ + updateReply(reply, true); +} + +void Tikzit::updateReply(QNetworkReply *reply, bool manual) { if (!reply->isReadable()) return; @@ -403,7 +419,7 @@ void Tikzit::updateReply(QNetworkReply *reply) QString::number(latest.minorVersion()) + "." + QString::number(latest.microVersion()); if (rcLatest != 1000) strLatest += "-rc" + QString::number(rcLatest); - QMessageBox::information(0, + QMessageBox::information(nullptr, tr("Update available"), "

A new version of TikZiT is available!

" "

current version: " TIKZIT_VERSION "
" @@ -412,10 +428,13 @@ void Tikzit::updateReply(QNetworkReply *reply) "tikzit.github.io.

"); } } else { - QMessageBox::warning(0, + // don't complain of invalid response for auto update check + if (manual) { + QMessageBox::warning(nullptr, tr("Invalid response"), "

Got invalid version response from " "tikzit.github.io.

"); + } } } diff --git a/src/tikzit.h b/src/tikzit.h index 3d4847d..9011cc3 100644 --- a/src/tikzit.h +++ b/src/tikzit.h @@ -137,8 +137,10 @@ public: public slots: void setCheckForUpdates(bool check); - void checkForUpdates(); - void updateReply(QNetworkReply *reply); + void checkForUpdates(bool manual); + void updateAuto(QNetworkReply *reply); + void updateManual(QNetworkReply *reply); + void updateReply(QNetworkReply *reply, bool manual); void makePreview(); void cleanupLatex(); diff --git a/tikzit.pro b/tikzit.pro index 82b4032..b026511 100644 --- a/tikzit.pro +++ b/tikzit.pro @@ -110,9 +110,9 @@ FORMS += src/gui/mainwindow.ui \ src/gui/styleeditor.ui \ src/gui/previewwindow.ui -INCLUDEPATH += src src/gui src/data +INCLUDEPATH += src src/gui src/data extra -LIBS += -lpoppler-qt5 +LIBS += -L"$$PWD/extra" -lpoppler-qt5 DISTFILES += -- cgit v1.2.3 From 5c44437a879e37dfb311354603756f9436d1bfb8 Mon Sep 17 00:00:00 2001 From: Aleks Kissinger Date: Wed, 19 Dec 2018 22:54:51 +0100 Subject: hidpi support --- src/gui/previewwindow.cpp | 21 ++++++++++++++++----- tikzit.pro | 8 ++++++-- 2 files changed, 22 insertions(+), 7 deletions(-) (limited to 'src/gui/previewwindow.cpp') diff --git a/src/gui/previewwindow.cpp b/src/gui/previewwindow.cpp index 5452a7e..724a951 100644 --- a/src/gui/previewwindow.cpp +++ b/src/gui/previewwindow.cpp @@ -46,7 +46,14 @@ PreviewWindow::~PreviewWindow() void PreviewWindow::setPdf(QString file) { Poppler::Document *oldDoc = _doc; - Poppler::Document *newDoc = Poppler::Document::load(file); + + // use loadFromData to avoid holding a lock on the PDF file in windows + QFile f(file); + f.open(QFile::ReadOnly); + QByteArray data = f.readAll(); + f.close(); + Poppler::Document *newDoc = Poppler::Document::loadFromData(data); + if (!newDoc) { QMessageBox::warning(nullptr, "Could not read PDF", @@ -90,11 +97,14 @@ void PreviewWindow::render() { QSizeF size = _page->pageSizeF(); + qreal ratio = devicePixelRatioF(); QRect rect = ui->scrollArea->visibleRegion().boundingRect(); - int w = rect.width() - 20; - int h = rect.height() - 20; + int w = static_cast(ratio * (rect.width() - 20)); + int h = static_cast(ratio * (rect.height() - 20)); 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()); @@ -106,6 +116,7 @@ void PreviewWindow::render() { // 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)); + QPixmap pm = QPixmap::fromImage(_page->renderToImage(dpi, dpi, (w1 - w)/2, (h1 - h)/2, w, h)); + pm.setDevicePixelRatio(ratio); + ui->pdf->setPixmap(pm); } diff --git a/tikzit.pro b/tikzit.pro index b026511..3fa4d5a 100644 --- a/tikzit.pro +++ b/tikzit.pro @@ -110,9 +110,13 @@ FORMS += src/gui/mainwindow.ui \ src/gui/styleeditor.ui \ src/gui/previewwindow.ui -INCLUDEPATH += src src/gui src/data extra +INCLUDEPATH += src src/gui src/data -LIBS += -L"$$PWD/extra" -lpoppler-qt5 +# link to pre-compiled poppler libs on windows +win32:INCLUDEPATH += win32-deps/include +win32:LIBS += -L"$$PWD/win32-deps/bin" + +LIBS += -lpoppler-qt5 DISTFILES += -- cgit v1.2.3