Feathercoin  0.5.0
P2P Digital Currency
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros
snapwidget.cpp
Go to the documentation of this file.
1 
2 #include "snapwidget.h"
3 #if (QT_VERSION >= QT_VERSION_CHECK(5, 0, 0))
4 #include <QtWidgets>
5 #include <QDialog>
6 #else
7 #include <QDesktopWidget>
8 #endif
9 #include <zxing/common/GlobalHistogramBinarizer.h>
10 #include <zxing/Binarizer.h>
11 #include <zxing/BinaryBitmap.h>
12 #include <zxing/MultiFormatReader.h>
13 #include "qimagesource.h"
14 
15 
17 SnapWidget::SnapWidget(QWidget* _parent)
18 #ifdef Q_OS_MAC
19  : QDialog( _parent, Qt::Widget | Qt::WindowStaysOnTopHint| Qt::WindowCloseButtonHint ){
20 #else
21  : QDialog(_parent, Qt::Widget | Qt::WindowCloseButtonHint | Qt::CustomizeWindowHint | Qt::WindowTitleHint | Qt::WindowStaysOnTopHint) {
22 #endif
23 
24  setupUi(this);
25  this->setMinimumWidth(50);
26  prepareMask();
27  show();
28 }
29 
31 {
32 
33 }
34 
36 {
37  int _x, _y, _w, _h;
38  _x = geometry().x();
39  _y = geometry().y() + cancelButton->height();
40  _w = geometry().width();
41  _h = geometry().height() - cancelButton->height();
42  QPixmap p;
43 #if (QT_VERSION >= QT_VERSION_CHECK(5, 0, 0))
44  QScreen *screen = QGuiApplication::primaryScreen();
45  if (screen) {
46  p = screen->grabWindow(0, _x, _y, _w, _h);
47  }
48 #else
49  p = QPixmap::grabWindow(QApplication::desktop()->winId(), _x, _y, _w, _h);
50 #endif
51 
52  if (!p.isNull()) {
53  QImage image = p.toImage();
54  Ref<Result> r;
55  MultiFormatReader* qrDecoder = new MultiFormatReader();
56  QImageLuminanceSource* lumImage = new QImageLuminanceSource(image);
57  Ref<LuminanceSource> imageRef(lumImage);
58  GlobalHistogramBinarizer* binarizer = new GlobalHistogramBinarizer(imageRef);
59  Ref<Binarizer> binarizerRef(binarizer);
60  BinaryBitmap* binaryBitmap = new BinaryBitmap(binarizerRef);
61  Ref<BinaryBitmap> binaryBitmapRef(binaryBitmap);
62  try {
63  r = qrDecoder->decode(binaryBitmapRef, DecodeHints::QR_CODE_HINT);
64  }
65  catch (Exception e) {
66  delete qrDecoder;
67  close();
68  return;
69  }
70  decodedString = QString(r->getText()->getText().c_str());
71  delete qrDecoder;
72  }
73  this->close();
74 }
75 
77 {
78  this->close();
79 }
80 
81 void SnapWidget::closeEvent(QCloseEvent *event)
82 {
83  emit finished(decodedString);
84 }
85 
87 {
88  int fh = frameSize().height();
89  int fw = frameSize().width();
90  QStyleOptionTitleBar option;
91  option.initFrom(this);
92 
93  QRegion r;
94 #ifdef Q_OS_MAC
95  //this looks acceptable on Mac
96  QRegion rgn(0, 0, fw, fh);
97  QRegion rgn2(15, cancelButton->height() + 10, fw - 30, fh - 80);
98 #else
99  //this looks ok on windows and ubuntu
100  int captionHeight = style()->pixelMetric(QStyle::PM_TitleBarHeight, &option, this);
101  QRegion rgn(-7, -captionHeight, fw, fh);
102  QRegion rgn2(5, cancelButton->height() + 3, fw - 28, fh - 75);
103 #endif
104  r = rgn.subtracted(rgn2);
105  setMask(r);
106  update();
107 }
108 
109 
110 void SnapWidget::resizeEvent(QResizeEvent*)
111 {
112  this->prepareMask();
113 }
void prepareMask()
Definition: snapwidget.cpp:86
SnapWidget(QWidget *_parent)
Definition: snapwidget.cpp:17
virtual void closeEvent(QCloseEvent *event)
Definition: snapwidget.cpp:81
void on_cancelButton_clicked()
Definition: snapwidget.cpp:76
void on_snapButton_clicked()
Definition: snapwidget.cpp:35
void resizeEvent(QResizeEvent *)
Definition: snapwidget.cpp:110