this->ratio = 1;
this->posX = "0";
this->posY = "0";
+ this->ratioList <<
+ 0.25 <<
+ 0.5 <<
+ 0.75 <<
+ 1.0 <<
+ 2.0 <<
+ 3.0 <<
+ 4.0;
setWindowTitle("Screen Shot - " + win->uiInfo->vmName +
" : " + QString::number(get_device_serial_number()));
slider = new QSlider(Qt::Horizontal, this);
slider->setFixedWidth(100);
slider->setTickPosition(QSlider::TicksAbove);
- slider->setRange(0, 5);
+ slider->setRange(0, ratioList.count() - 1);
- slider->setValue(3); /* default */
+ slider->setValue((ratioList.count() - 1) / 2 ); /* default */
updateRatio(getSliderLevel());
connect(slider, SIGNAL(valueChanged(int)), this, SLOT(slotSliderChanged(int)));
return win->uiInfo->getMainFormDisplayType()->getAngle();
}
+float ScreenShotDialog::getRatio()
+{
+ return ratio;
+}
+
QString ScreenShotDialog::getRatioInfo()
{
- return QString::number(ratio * 100).append("%");
+ return QString::number(getRatio() * 100).append("%");
}
QPixmap &ScreenShotDialog::getShotData()
/* draw a screenshot */
updateScreenShot(shotData);
-
- updateStatusBar();
}
void ScreenShotDialog::updateRatio(int level)
{
- // TODO: enum
- switch (level) {
- case 0:
- ratio = 0.125;
- break;
- case 1:
- ratio = 0.25;
- break;
- case 2:
- ratio = 0.50;
- break;
- case 3:
- ratio = 1;
- break;
- case 4:
- ratio = 2;
- break;
- case 5:
- ratio = 4;
- break;
+ ratio = ratioList.at(level);
+ if (ratio <= 0) {
+ qWarning() << "invalid screenshot ratio :" << ratio;
+ return;
}
slider->setToolTip(getRatioInfo());
/* update */
scene->setSceneRect(0, 0, shotImage.width(), shotImage.height());
scene->addPixmap(shotImage);
+
+ updateStatusBar();
}
-void ScreenShotDialog::updateMousePosition(int xx, int yy)
+void ScreenShotDialog::updateMousePosition(const QPoint &pos)
{
- posX = QString::number(xx);
- posY = QString::number(yy);
+ posX = QString::number(pos.x());
+ posY = QString::number(pos.y());
updateStatusBar();
}
{
if (statusBar != NULL) {
statusBar->showMessage("x: " + posX + ", y:" + posY +
- " (" + QString::number(shotData.width()) +
- "x" + QString::number(shotData.height()) +
+ " (" + QString::number(scene->sceneRect().width() / getRatio()) +
+ "x" + QString::number(scene->sceneRect().height() / getRatio()) +
", " + getRatioInfo() + ")");
}
}
{
Q_UNUSED(event)
- updateStatusBar();
-
// TODO:
move(win->geometry().center().x(),
win->geometry().center().y() - (geometry().size().height() / 2));
~ScreenShotDialog();
int getDisplayAngle();
+ float getRatio();
QString getRatioInfo();
QPixmap &getShotData();
- int getSliderLevel();
- void updateMousePosition(int xx, int yy);
- void updateStatusBar();
+ void updateMousePosition(const QPoint &pos);
public slots:
bool slotSave();
private:
void createItems(QGridLayout *layout);
+ int getSliderLevel();
void updateRatio(int level);
void updateScreenShot(QPixmap &shotData);
+ void updateStatusBar();
MainWindow *win;
QGridLayout *dialogLayout;
QGraphicsScene *scene;
QGraphicsView *view;
+ QList<float> ratioList;
+
/* state */
QPixmap shotData; /* framebuffer */
float ratio;
{
ScreenShotDialog *screenshot = (ScreenShotDialog *)parent();
- int max_x;
- int max_y;
-
- // TODO: radian
- QPointF fixedPos = mapToScene(event->pos());
- int sliderLevel = screenshot->getSliderLevel();
-
- switch (screenshot->getDisplayAngle()) {
- case 90:
- case 270:
- max_x = screenshot->getShotData().size().height();
- max_y = screenshot->getShotData().size().width();
- break;
- case 0:
- case 180:
- default:
- max_x = screenshot->getShotData().size().width();
- max_y = screenshot->getShotData().size().height();
- break;
- }
-
- int x;
- int y;
- float expo = 0;
- switch (sliderLevel) {
- case 0:
- expo = 3;
- break;
- case 1:
- expo = 2;
- break;
- case 2:
- expo = 1;
- break;
- case 3:
- expo = 0;
- break;
- case 4:
- expo = -1;
- break;
- case 5:
- expo = -2;
- break;
- default:
- break;
- }
-
- x = (int)(fixedPos.x() * pow(2, expo));
- y = (int)(fixedPos.y() * pow(2, expo));
- if (x > max_x) {
- x = max_x;
- }
- if (y > max_y) {
- y = max_y;
- }
-
- if (scene()->sceneRect().contains(fixedPos)) {
- screenshot->updateMousePosition(x, y);
+ QPointF shotPos = mapToScene(event->pos());
+ if (scene()->sceneRect().contains(shotPos)) {
+ screenshot->updateMousePosition(
+ shotPos.toPoint() / screenshot->getRatio());
}
}