From 09e670bf231f3c7e0aa94a375b05364542b4c4e3 Mon Sep 17 00:00:00 2001 From: ArsenArsen Date: Wed, 31 May 2017 17:24:17 +0200 Subject: [PATCH] Area selection dialog --- KShare.pro | 6 ++-- main.cpp | 2 ++ screenareaselector/screenareaselector.cpp | 38 +++++++++++++++++++++++ screenareaselector/screenareaselector.hpp | 19 ++++++++++++ 4 files changed, 63 insertions(+), 2 deletions(-) create mode 100644 screenareaselector/screenareaselector.cpp create mode 100644 screenareaselector/screenareaselector.hpp diff --git a/KShare.pro b/KShare.pro index 1c9d84f..a115114 100644 --- a/KShare.pro +++ b/KShare.pro @@ -47,7 +47,8 @@ SOURCES += main.cpp\ cropeditor/drawing/lineitem.cpp \ cropeditor/drawing/textitem.cpp \ colorpicker/colorpickerscene.cpp \ - worker/worker.cpp + worker/worker.cpp \ + screenareaselector/screenareaselector.cpp HEADERS += mainwindow.hpp \ cropeditor/cropeditor.hpp \ @@ -76,7 +77,8 @@ HEADERS += mainwindow.hpp \ colorpicker/colorpickerscene.hpp \ platformbackend.hpp \ gif-h/gif.h \ - worker/worker.hpp + worker/worker.hpp \ + screenareaselector/screenareaselector.hpp mac { SOURCES += $$PWD/platformspecifics/mac/macbackend.cpp diff --git a/main.cpp b/main.cpp index ea285d9..2562dfe 100644 --- a/main.cpp +++ b/main.cpp @@ -5,6 +5,7 @@ #include #include #include +#include #include #include @@ -62,5 +63,6 @@ int main(int argc, char *argv[]) { Worker::init(); a.connect(&a, &QApplication::aboutToQuit, Worker::end); if (!parser.isSet(h)) w.show(); + (new ScreenAreaSelector())->show(); return a.exec(); } diff --git a/screenareaselector/screenareaselector.cpp b/screenareaselector/screenareaselector.cpp new file mode 100644 index 0000000..b7f6e4e --- /dev/null +++ b/screenareaselector/screenareaselector.cpp @@ -0,0 +1,38 @@ +#include "screenareaselector.hpp" +#include +#include +#include +#include + +ScreenAreaSelector::ScreenAreaSelector() { + setAttribute(Qt::WA_TranslucentBackground); + setAttribute(Qt::WA_DeleteOnClose); + setStyleSheet("background:transparent;"); + setWindowTitle("KShare: Select Area (By resizig this window)"); + QTimer::singleShot(0, [&] { + QVariant val = settings::settings().value("screenareaselector/rect"); + if (val.canConvert()) { + QRect rect = val.value(); + resize(rect.size()); + move(rect.topLeft()); + } + }); +} + +ScreenAreaSelector::~ScreenAreaSelector() { +} + +void ScreenAreaSelector::keyPressEvent(QKeyEvent *event) { + event->accept(); + if (event->key() == Qt::Key_Return || event->key() == Qt::Key_Enter) { + QRect r = QRect(pos(), rect().size()); + emit selectedArea(r); + close(); + } else if (event->key() == Qt::Key_Escape) + close(); +} + +void ScreenAreaSelector::closeEvent(QCloseEvent *) { + QRect r = QRect(pos(), rect().size()); + settings::settings().setValue("screenareaselector/rect", r); +} diff --git a/screenareaselector/screenareaselector.hpp b/screenareaselector/screenareaselector.hpp new file mode 100644 index 0000000..4fc6872 --- /dev/null +++ b/screenareaselector/screenareaselector.hpp @@ -0,0 +1,19 @@ +#ifndef SCREENAREASELECTOR_HPP +#define SCREENAREASELECTOR_HPP + +#include + +class ScreenAreaSelector : public QWidget { + Q_OBJECT +public: + ScreenAreaSelector(); + ~ScreenAreaSelector(); + +protected: + void closeEvent(QCloseEvent *event) override; + void keyPressEvent(QKeyEvent *) override; +signals: + void selectedArea(QRect area); +}; + +#endif // SCREENAREASELECTOR_HPP