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