1 #include "beamerwindow.h"
2 #include "viewer.h"
3 #include "canvas.h"
4 #include "config.h"
5 #include "resourcemanager.h"
6 #include "layout/singlelayout.h"
7 #include <QResizeEvent>
8 #include <QApplication>
9 #include <iostream>
10
11 using namespace std;
12
13
BeamerWindow(Viewer * v,QWidget * parent)14 BeamerWindow::BeamerWindow(Viewer *v, QWidget *parent) :
15 QWidget(parent),
16 viewer(v),
17 frozen(false),
18 valid(false) {
19 setFocusPolicy(Qt::StrongFocus);
20
21 layout = new SingleLayout(viewer, 0);
22
23 CFG *config = CFG::get_instance();
24 mouse_wheel_factor = config->get_value("Settings/mouse_wheel_factor").toInt();
25
26 switch (config->get_value("Settings/click_link_button").toInt()) {
27 case 1: click_link_button = Qt::LeftButton; break;
28 case 2: click_link_button = Qt::RightButton; break;
29 case 3: click_link_button = Qt::MidButton; break;
30 case 4: click_link_button = Qt::XButton1; break;
31 case 5: click_link_button = Qt::XButton2; break;
32 default: click_link_button = Qt::NoButton;
33 }
34
35 valid = true;
36 }
37
~BeamerWindow()38 BeamerWindow::~BeamerWindow() {
39 delete layout;
40 }
41
freeze(bool f)42 void BeamerWindow::freeze(bool f) {
43 frozen = f;
44 viewer->get_canvas()->update_page_overlay();
45 }
46
is_frozen() const47 bool BeamerWindow::is_frozen() const {
48 return frozen;
49 }
50
is_valid() const51 bool BeamerWindow::is_valid() const {
52 return valid;
53 }
54
get_layout() const55 Layout *BeamerWindow::get_layout() const {
56 return layout;
57 }
58
toggle_fullscreen()59 void BeamerWindow::toggle_fullscreen() {
60 setWindowState(windowState() ^ Qt::WindowFullScreen);
61 }
62
paintEvent(QPaintEvent *)63 void BeamerWindow::paintEvent(QPaintEvent * /*event*/) {
64 #ifdef DEBUG
65 cerr << "redraw beamer" << endl;
66 #endif
67 QPainter painter(this);
68 painter.fillRect(rect(), QColor(0, 0, 0));
69 layout->render(&painter);
70 }
71
mousePressEvent(QMouseEvent * event)72 void BeamerWindow::mousePressEvent(QMouseEvent *event) {
73 if (click_link_button != Qt::NoButton && event->button() == click_link_button) {
74 mx_down = event->x();
75 my_down = event->y();
76 }
77 }
78
mouseReleaseEvent(QMouseEvent * event)79 void BeamerWindow::mouseReleaseEvent(QMouseEvent *event) {
80 if (click_link_button != Qt::NoButton && event->button() == click_link_button) {
81 if (mx_down == event->x() && my_down == event->y()) {
82 pair<int, QPointF> location = layout->get_location_at(mx_down, my_down);
83 layout->activate_link(location.first, location.second.x(), location.second.y());
84 }
85 }
86 }
87
wheelEvent(QWheelEvent * event)88 void BeamerWindow::wheelEvent(QWheelEvent *event) {
89 int d = event->delta();
90 if (QApplication::keyboardModifiers() == Qt::NoModifier) {
91 if (event->orientation() == Qt::Vertical) {
92 viewer->get_canvas()->get_layout()->scroll_page(-d / mouse_wheel_factor);
93 }
94 }
95 }
96
resizeEvent(QResizeEvent * event)97 void BeamerWindow::resizeEvent(QResizeEvent *event) {
98 layout->resize(event->size().width(), event->size().height());
99 update();
100 }
101
page_rendered(int page)102 void BeamerWindow::page_rendered(int page) {
103 if (layout->page_visible(page)) {
104 update();
105 }
106 }
107
108