/* * Copyright (C) 2015-2016 Département de l'Instruction Publique (DIP-SEM) * * Copyright (C) 2013 Open Education Foundation * * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour * l'Education Numérique en Afrique (GIP ENA) * * This file is part of OpenBoard. * * OpenBoard is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, version 3 of the License, * with a specific linking exception for the OpenSSL project's * "OpenSSL" library (or with modified versions of it that use the * same license as the "OpenSSL" library). * * OpenBoard is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with OpenBoard. If not, see . */ #include #include #include #include "UBCustomCaptureWindow.h" #include "frameworks/UBPlatformUtils.h" #include "gui/UBRubberBand.h" #include "core/memcheck.h" UBCustomCaptureWindow::UBCustomCaptureWindow(QWidget *parent) : QDialog(parent, Qt::FramelessWindowHint | Qt::Window) , mSelectionBand(0) , mRubberBandStyle(0) , mOrigin(0,0) , mIsSelecting(false) { setCursor(Qt::CrossCursor); setWindowOpacity(0.0); } UBCustomCaptureWindow::~UBCustomCaptureWindow() { delete mSelectionBand; delete mRubberBandStyle; } QPixmap UBCustomCaptureWindow::getSelectedPixmap() { if (mSelectionBand) { return mWholeScreenPixmap.copy(mSelectionBand->geometry()); } else { return QPixmap(); } } int UBCustomCaptureWindow::execute(const QPixmap &pScreenPixmap) { mWholeScreenPixmap = pScreenPixmap; QDesktopWidget *desktop = QApplication::desktop(); int currentScreen = desktop->screenNumber(QCursor::pos()); setGeometry(desktop->screenGeometry(currentScreen)); this->show(); setWindowOpacity(1.0); return exec(); } void UBCustomCaptureWindow::mouseMoveEvent ( QMouseEvent * event ) { if (mIsSelecting) { mSelectionBand->setGeometry(QRect(mOrigin, event->pos()).normalized()); } event->accept(); } void UBCustomCaptureWindow::mousePressEvent ( QMouseEvent * event ) { if (!mIsSelecting) { mIsSelecting = true; mOrigin = event->pos(); if (!mSelectionBand) { mSelectionBand = new UBRubberBand(QRubberBand::Rectangle, this); } mSelectionBand->setGeometry(QRect(mOrigin, QSize())); mSelectionBand->show(); event->accept(); } } void UBCustomCaptureWindow::mouseReleaseEvent ( QMouseEvent * event ) { mIsSelecting = false; if (mSelectionBand) { mSelectionBand->hide(); } event->accept(); // do not accept very small selection if (!(mSelectionBand->geometry().width() < 6 && mSelectionBand->geometry().height() < 6)) { accept(); } } void UBCustomCaptureWindow::keyPressEvent ( QKeyEvent * event ) { if (event->key() == Qt::Key_Escape) { mIsSelecting = false; if (mSelectionBand) { mSelectionBand->hide(); } event->accept(); reject(); } } void UBCustomCaptureWindow::showEvent ( QShowEvent * event ) { Q_UNUSED(event); } void UBCustomCaptureWindow::paintEvent(QPaintEvent *event) { Q_UNUSED(event); QPainter painter(this); painter.drawPixmap(0,0, mWholeScreenPixmap); }