diff --git a/screen-translator.pro b/screen-translator.pro index 2f39422..c8eca0b 100644 --- a/screen-translator.pro +++ b/screen-translator.pro @@ -30,6 +30,7 @@ INCLUDEPATH += src src/service src/capture src/ocr \ src/represent src/translate src/correct HEADERS += \ + src/capture/capturearea.h \ src/capture/captureareaselector.h \ src/capture/capturer.h \ src/correct/corrector.h \ @@ -58,6 +59,7 @@ HEADERS += \ src/trayicon.h SOURCES += \ + src/capture/capturearea.cpp \ src/capture/captureareaselector.cpp \ src/capture/capturer.cpp \ src/correct/corrector.cpp \ diff --git a/src/capture/capturearea.cpp b/src/capture/capturearea.cpp new file mode 100644 index 0000000..4e3deef --- /dev/null +++ b/src/capture/capturearea.cpp @@ -0,0 +1,29 @@ +#include "capturearea.h" +#include "settings.h" +#include "task.h" + +CaptureArea::CaptureArea(const QRect &rect, const Settings &settings) + : rect_(rect) + , doTranslation_(settings.doTranslation) + , sourceLanguage_(settings.sourceLanguage) + , targetLanguage_(settings.targetLanguage) + , translators_(settings.translators) +{ +} + +TaskPtr CaptureArea::task(const QPixmap &pixmap) const +{ + if (pixmap.isNull() || rect_.width() < 3 || rect_.height() < 3) + return {}; + + auto task = std::make_shared(); + task->captured = pixmap.copy(rect_); + task->capturePoint = rect_.topLeft(); + task->sourceLanguage = sourceLanguage_; + if (doTranslation_ && !translators_.isEmpty()) { + task->targetLanguage = targetLanguage_; + task->translators = translators_; + } + + return task; +} diff --git a/src/capture/capturearea.h b/src/capture/capturearea.h new file mode 100644 index 0000000..6137fb7 --- /dev/null +++ b/src/capture/capturearea.h @@ -0,0 +1,22 @@ +#pragma once + +#include "stfwd.h" + +#include +#include + +class QPixmap; + +class CaptureArea +{ +public: + CaptureArea(const QRect& rect, const Settings& settings); + TaskPtr task(const QPixmap& pixmap) const; + +private: + QRect rect_; + bool doTranslation_; + LanguageId sourceLanguage_; + LanguageId targetLanguage_; + QStringList translators_; +}; diff --git a/src/capture/captureareaselector.cpp b/src/capture/captureareaselector.cpp index 97f7e6e..b9f03b2 100644 --- a/src/capture/captureareaselector.cpp +++ b/src/capture/captureareaselector.cpp @@ -149,18 +149,9 @@ void CaptureAreaSelector::mouseReleaseEvent(QMouseEvent *event) const auto endPos = event->pos(); const auto selection = QRect(startSelectPos_, endPos).normalized(); - const auto selectedPixmap = pixmap_.copy(selection); - startSelectPos_ = currentSelectPos_ = QPoint(); + startSelectPos_ = currentSelectPos_ = {}; - if (selectedPixmap.width() < 3 || selectedPixmap.height() < 3) { - capturer_.canceled(); - return; - } - - auto task = std::make_shared(); - task->captured = selectedPixmap; - task->capturePoint = pos() + selection.topLeft(); - // TODO add customization menus - capturer_.captured(task); + const auto area = CaptureArea(selection, settings_); + capturer_.selected(area); } diff --git a/src/capture/capturer.cpp b/src/capture/capturer.cpp index e49abf4..99772fd 100644 --- a/src/capture/capturer.cpp +++ b/src/capture/capturer.cpp @@ -1,4 +1,5 @@ #include "capturer.h" +#include "capturearea.h" #include "captureareaselector.h" #include "debug.h" #include "manager.h" @@ -65,16 +66,17 @@ void Capturer::updateSettings() selector_->updateSettings(); } -void Capturer::captured(const TaskPtr &task) +void Capturer::selected(const CaptureArea &area) { - SOFT_ASSERT(selector_, return ); + SOFT_ASSERT(selector_, return manager_.captureCanceled()) selector_->hide(); - task->translators = settings_.translators; - task->sourceLanguage = settings_.sourceLanguage; - if (settings_.doTranslation) - task->targetLanguage = settings_.targetLanguage; - manager_.captured(task); + SOFT_ASSERT(!pixmap_.isNull(), return manager_.captureCanceled()) + auto task = area.task(pixmap_); + if (task) + manager_.captured(task); + else + manager_.captureCanceled(); } void Capturer::canceled() diff --git a/src/capture/capturer.h b/src/capture/capturer.h index 799aa74..558e30a 100644 --- a/src/capture/capturer.h +++ b/src/capture/capturer.h @@ -14,7 +14,7 @@ public: void repeatCapture(); void updateSettings(); - void captured(const TaskPtr &task); + void selected(const CaptureArea &area); void canceled(); private: diff --git a/src/stfwd.h b/src/stfwd.h index 9158a96..07a203d 100644 --- a/src/stfwd.h +++ b/src/stfwd.h @@ -15,6 +15,7 @@ class Representer; class Translator; class Corrector; class Recognizer; +class CaptureArea; class CaptureAreaSelector; namespace update