2 #include "simpleimageview.h"
7 #include <QContextMenuEvent>
8 #include <QResizeEvent>
12 SimpleImageView::SimpleImageView(QWidget *parent) :
13 QGraphicsView(parent),
26 QPalette pal = palette();
27 pal.setColor(QPalette::Base, settings.value(IniKey_ViewColorBgNormal).value<QColor>());
28 setBackgroundRole(QPalette::Base);
31 setContextMenuPolicy(Qt::DefaultContextMenu);
33 QList<QKeySequence> shortcuts;
35 m_back = new QAction(tr("戻る"), this);
36 m_back->setObjectName("back");
38 shortcuts << QKeySequence("Return");
39 shortcuts << QKeySequence("Backspace");
40 m_back->setShortcuts(shortcuts);
42 //>>>>> 「ウィンドウにフィット」メニュー
43 m_fitToWindow = new QAction(tr("ウィンドウにフィット"), this);
44 m_fitToWindow->setObjectName("fitToWindow");
45 m_fitToWindow->setCheckable(true);
46 m_fitToWindow->setChecked(true);
47 m_fitToWindow->setShortcut(QKeySequence("Space"));
50 m_scaleUp = new QAction(tr("拡大"), this);
51 m_scaleUp->setObjectName("scaleUp");
53 shortcuts << QKeySequence("+");
54 shortcuts << QKeySequence("Shift++");
55 m_scaleUp->setShortcuts(shortcuts);
58 m_scaleDown = new QAction(tr("縮小"), this);
59 m_scaleDown->setObjectName("scaleDown");
60 m_scaleDown->setShortcut(QKeySequence("-"));
63 m_scaleNormal = new QAction(tr("等倍"), this);
64 m_scaleNormal->setObjectName("scaleUp");
66 shortcuts << QKeySequence("=");
67 shortcuts << QKeySequence("Shift+=");
68 m_scaleNormal->setShortcuts(shortcuts);
71 m_rot90 = new QAction(tr("右に90度回転"), this);
72 m_rot90->setObjectName("rot90");
73 m_rot90->setShortcut(QKeySequence("9"));
75 //>>>>> 「右に180度回転」メニュー
76 m_rot180 = new QAction(tr("右に180度回転"), this);
77 m_rot180->setObjectName("rot180");
78 m_rot180->setShortcut(QKeySequence("0"));
80 connect(m_back, SIGNAL(triggered()), this, SIGNAL(viewFinished()));
81 connect(m_fitToWindow, SIGNAL(toggled(bool)), this, SLOT(fitToWindow(bool)));
82 connect(m_scaleDown, SIGNAL(triggered()), this, SLOT(scaleDown()));
83 connect(m_scaleNormal, SIGNAL(triggered()), this, SLOT(scaleNormal()));
84 connect(m_scaleUp, SIGNAL(triggered()), this, SLOT(scaleUp()));
85 connect(m_rot90, SIGNAL(triggered()), this, SLOT(rotate90()));
86 connect(m_rot180, SIGNAL(triggered()), this, SLOT(rotate180()));
88 setDragMode(ScrollHandDrag);
91 bool SimpleImageView::setSource(const QString &path)
94 if (pixmap.isNull()) {
101 m_fitToWindow->blockSignals(true);
102 m_fitToWindow->setChecked(true);
103 m_fitToWindow->blockSignals(false);
105 QGraphicsScene *scene = new QGraphicsScene(this);
106 scene->addPixmap(pixmap);
113 double SimpleImageView::scaleFactor(const QSize &size)
116 if (m_scaleFactor == 0) {
117 double scaleX, scaleY;
118 if (m_rotateDeg == 90 || m_rotateDeg == 270) {
119 scaleX = 1.0 * size.width() / m_imgSrc.height();
120 scaleY = 1.0 * size.height() / m_imgSrc.width();
123 scaleX = 1.0 * size.width() / m_imgSrc.width();
124 scaleY = 1.0 * size.height() / m_imgSrc.height();
126 scaleFactor = (scaleX > scaleY) ? scaleY : scaleX;
129 scaleFactor = m_scaleFactor;
135 void SimpleImageView::sizeChanged()
138 str = tr("%1 x %2 x %3(%4%)")
139 .arg(m_imgSrc.width())
140 .arg(m_imgSrc.height())
141 .arg(m_imgSrc.depth())
142 .arg(int(scaleFactor(viewport()->size()) * 100));
146 double SimpleImageView::resizeImage()
148 double scaleFactor = this->scaleFactor(viewport()->size());
151 this->setTransform(QTransform());
152 this->translate(width() / 2, height() / 2);
153 this->rotate(m_rotateDeg);
154 this->scale(scaleFactor, scaleFactor);
160 void SimpleImageView::fitToWindow(bool checked)
166 double scaleFactor = resizeImage();
169 m_scaleFactor = scaleFactor;
175 void SimpleImageView::scaleNormal()
180 m_fitToWindow->blockSignals(true);
181 m_fitToWindow->setChecked(false);
182 m_fitToWindow->blockSignals(false);
185 void SimpleImageView::scaleUp()
187 m_scaleFactor = scaleFactor(viewport()->size()) * 1.25;
190 m_fitToWindow->blockSignals(true);
191 m_fitToWindow->setChecked(false);
192 m_fitToWindow->blockSignals(false);
195 void SimpleImageView::scaleDown()
197 m_scaleFactor = scaleFactor(viewport()->size()) * 0.8;
200 m_fitToWindow->blockSignals(true);
201 m_fitToWindow->setChecked(false);
202 m_fitToWindow->blockSignals(false);
205 void SimpleImageView::rotate90()
211 void SimpleImageView::rotate180()
217 void SimpleImageView::keyPressEvent(QKeyEvent *event)
219 qDebug() << "SimpleImageView::keyPressEvent();";
221 QString ksq = KeyEventToSequence(event);
223 if (ProcessShortcut(ksq, this)) {
228 QGraphicsView::keyReleaseEvent(event);
234 void SimpleImageView::contextMenuEvent(QContextMenuEvent *event)
236 qDebug() << "SimpleImageView::contextMenuEvent();";
239 menu.addAction(m_fitToWindow);
240 menu.addAction(m_scaleUp);
241 menu.addAction(m_scaleDown);
242 menu.addAction(m_scaleNormal);
244 menu.addAction(m_rot90);
245 menu.addAction(m_rot180);
247 menu.addAction(m_back);
248 menu.exec(event->globalPos());
251 void SimpleImageView::resizeEvent(QResizeEvent *event)
253 if (!m_imgSrc.isNull()) {
256 QGraphicsView::resizeEvent(event);