summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAleks Kissinger <aleks0@gmail.com>2018-12-16 16:04:02 +0100
committerAleks Kissinger <aleks0@gmail.com>2018-12-16 16:04:02 +0100
commita991943e59bc4341ceef55313642b85565454d86 (patch)
treed53b92cb346488963a130156e069156bb1984abb
parent9ad4adf9207d3cbda6b92802b91f0435b74d2029 (diff)
added dummy preview window, linked to poppler
-rw-r--r--CMakeLists.txt12
-rw-r--r--src/gui/previewwindow.cpp61
-rw-r--r--src/gui/previewwindow.h7
-rw-r--r--src/gui/previewwindow.ui63
-rw-r--r--src/tikzit.cpp4
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 <QLabel>
+#include <QImage>
+#include <QPixmap>
+#include <QDebug>
+#include <QRegion>
+#include <QSettings>
+#include <cmath>
+
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<qreal>(w) / size.width(),
+ static_cast<qreal>(h) / size.height());
+ int dpi = static_cast<int>(scale * 72.0);
+ int w1 = static_cast<int>(scale * size.width());
+ int h1 = static_cast<int>(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 <QDialog>
+#include <poppler/qt5/poppler-qt5.h>
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 @@
+<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>PreviewWindow</class>
- <widget name="PreviewWindow" class="QDialog">
+ <widget class="QDialog" name="PreviewWindow">
<property name="geometry">
<rect>
<x>0</x>
@@ -10,8 +11,66 @@
</rect>
</property>
<property name="windowTitle">
- <string>Dialog</string>
+ <string>Preview</string>
</property>
+ <layout class="QVBoxLayout" name="verticalLayout">
+ <item>
+ <widget class="QTabWidget" name="tabWidget">
+ <property name="currentIndex">
+ <number>0</number>
+ </property>
+ <widget class="QWidget" name="pdfTab">
+ <attribute name="title">
+ <string>PDF</string>
+ </attribute>
+ <layout class="QVBoxLayout" name="verticalLayout_2">
+ <item>
+ <widget class="QScrollArea" name="scrollArea">
+ <property name="verticalScrollBarPolicy">
+ <enum>Qt::ScrollBarAlwaysOff</enum>
+ </property>
+ <property name="horizontalScrollBarPolicy">
+ <enum>Qt::ScrollBarAlwaysOff</enum>
+ </property>
+ <property name="widgetResizable">
+ <bool>true</bool>
+ </property>
+ <widget class="QWidget" name="scrollAreaWidgetContents">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>358</width>
+ <height>233</height>
+ </rect>
+ </property>
+ <layout class="QVBoxLayout" name="verticalLayout_4">
+ <item>
+ <widget class="QLabel" name="pdf">
+ <property name="text">
+ <string/>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ <widget class="QWidget" name="outputTab">
+ <attribute name="title">
+ <string>Output</string>
+ </attribute>
+ <layout class="QVBoxLayout" name="verticalLayout_3">
+ <item>
+ <widget class="QPlainTextEdit" name="output"/>
+ </item>
+ </layout>
+ </widget>
+ </widget>
+ </item>
+ </layout>
</widget>
<resources/>
<connections/>
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 <QFile>
#include <QFileDialog>
@@ -126,6 +127,9 @@ void Tikzit::init()
if (check.toBool()) {
checkForUpdates();
}
+
+ PreviewWindow *preview = new PreviewWindow();
+ preview->show();
}
//QMenuBar *Tikzit::mainMenu() const