88#include " ../tools.h"
99
1010
11+
1112ScreenshotWidget::ScreenshotWidget (QWidget *parent)
1213 : QWidget(parent), selecting(false ) {
1314 setWindowFlags (Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint);
@@ -18,6 +19,8 @@ ScreenshotWidget::ScreenshotWidget(QWidget *parent)
1819
1920void ScreenshotWidget::mousePressEvent (QMouseEvent *event) {
2021 startPos = event->pos ();
22+ endPos = event->pos ();
23+ update ();
2124}
2225
2326void ScreenshotWidget::mouseMoveEvent (QMouseEvent *event) {
@@ -26,8 +29,15 @@ void ScreenshotWidget::mouseMoveEvent(QMouseEvent *event) {
2629}
2730
2831void ScreenshotWidget::mouseReleaseEvent (QMouseEvent *event) {
32+
2933 endPos = event->pos ();
30- cropScreenshot ();
34+ QPoint pos1 = startPos;
35+ QPoint pos2 = endPos;
36+ hide ();
37+ QTimer::singleShot (50 , this , [=]() {
38+ this ->cropScreenshot (pos1, pos2);
39+ });
40+ // reset surface
3141 startPos = QPoint (-1 , -1 );
3242 endPos = QPoint (-1 , -1 );
3343 update ();
@@ -36,24 +46,26 @@ void ScreenshotWidget::mouseReleaseEvent(QMouseEvent *event) {
3646void ScreenshotWidget::paintEvent (QPaintEvent *) {
3747 QPainter painter (this );
3848 painter.setPen (Qt::NoPen);
49+
3950 // background
40- painter.setBrush (QBrush (QColor (255 , 255 , 255 , 13 )));
41- painter.drawRect (QRect (0 ,0 ,geometry ().width (), geometry ().height ()));
42- // selection
4351 QColor color = drawing->penColor ;
44- color.setAlpha (127 );
52+ color.setAlpha (69 );
4553 painter.setBrush (QBrush (color));
54+ painter.setCompositionMode (QPainter::CompositionMode_Source);
55+
56+
57+ painter.drawRect (QRect (0 ,0 ,geometry ().width (), geometry ().height ()));
58+ // selection
4659 QRect rect (startPos, endPos);
60+ painter.setBrush (QBrush (QColor (0 ,0 ,0 ,0 )));
4761 painter.drawRect (rect.normalized ());
4862}
4963
50- void ScreenshotWidget::cropScreenshot () {
64+ void ScreenshotWidget::cropScreenshot (QPoint startPos, QPoint endPos ) {
5165 QScreen *screen = QGuiApplication::primaryScreen ();
5266 QPixmap originalPixmap = screen->grabWindow (0 );
53-
5467 QRect cropRect (startPos, endPos);
5568 QPixmap croppedPixmap = originalPixmap.copy (cropRect.normalized ());
5669 crop_signal (croppedPixmap);
57- hide ();
5870}
5971
0 commit comments