Skip to content

Commit 5fc6943

Browse files
committed
Calibrator: Improve the sprite editor
- Make select/copy tool not to spam the history by junk entries. - Make working hotkeys for the rest of tools and actions (to do: document that!). - Make the status bar instead of the message boxes while saving images.
1 parent 060ee18 commit 5fc6943

File tree

6 files changed

+375
-141
lines changed

6 files changed

+375
-141
lines changed

PlayableCalibrator/image_calibration/image_calibrator.cpp

Lines changed: 110 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
#include <QDir>
33
#include <QSettings>
44
#include <QDialog>
5+
#include <QStatusBar>
56
#include <QFocusEvent>
67

78
#include "image_calibrator.h"
@@ -57,7 +58,7 @@ ImageCalibrator::ImageCalibrator(Calibration *conf, QWidget *parent) :
5758
{
5859
if(ui->preview->mode() == FrameTuneScene::MODE_NONE)
5960
m_matrix->updateScene(generateTarget());
60-
else
61+
else if(!ui->preview->isToolBusy())
6162
frameEdited();
6263
});
6364

@@ -77,15 +78,20 @@ ImageCalibrator::ImageCalibrator(Calibration *conf, QWidget *parent) :
7778
this, &ImageCalibrator::tempFrameUpdated);
7879

7980
ui->toolDrag->setShortcut(Qt::Key_D);
80-
ui->toolPencil->setShortcut(Qt::Key_N);
81-
ui->toolPicker->setShortcut(Qt::Key_O);
82-
ui->toolRubber->setShortcut(Qt::Key_R);
81+
// ui->toolPencil->setShortcut(Qt::Key_N);
82+
// ui->toolPicker->setShortcut(Qt::Key_O);
83+
// ui->toolRubber->setShortcut(Qt::Key_R);
84+
// ui->toolSelect->setShortcut(Qt::Key_S);
85+
// ui->toolSelectCopy->setShortcut(Qt::Key_C);
8386

84-
ui->toolUndo->setShortcut(QKeySequence("Ctrl+Z"));
85-
ui->toolRedo->setShortcut(QKeySequence("Ctrl+Y"));
87+
// ui->toolUndo->setShortcut(QKeySequence("Ctrl+Z"));
88+
// ui->toolRedo->setShortcut(QKeySequence("Ctrl+Y"));
8689

8790
ui->toolDrag->setChecked(true);
8891

92+
m_status = new QStatusBar(this);
93+
ui->calibratorLayout->addWidget(m_status, 4, 0, 1, 4);
94+
8995
QObject::connect(ui->toolDrag, &QToolButton::clicked,
9096
this, &ImageCalibrator::toolChanged);
9197
QObject::connect(ui->toolSelect, &QToolButton::clicked,
@@ -317,6 +323,92 @@ void ImageCalibrator::focusInEvent(QFocusEvent *)
317323
tempFrameUpdatedProceed();
318324
}
319325

326+
void ImageCalibrator::keyPressEvent(QKeyEvent *e)
327+
{
328+
if(e->key() == Qt::Key_Escape)
329+
{
330+
if(ui->preview->isToolBusy())
331+
ui->preview->cancelTool();
332+
return;
333+
}
334+
335+
switch(e->key())
336+
{
337+
case Qt::Key_O:
338+
ui->toolPicker->click();
339+
break;
340+
341+
case Qt::Key_N:
342+
ui->toolPencil->click();
343+
break;
344+
345+
case Qt::Key_L:
346+
ui->toolLine->click();
347+
break;
348+
349+
case Qt::Key_R:
350+
ui->toolRects->click();
351+
break;
352+
353+
case Qt::Key_F:
354+
if(e->modifiers() == (Qt::ControlModifier | Qt::ShiftModifier))
355+
ui->preview->runAction(FrameTuneScene::ACTION_VFLIP_CUR_FRAME);
356+
if(e->modifiers() == Qt::ControlModifier)
357+
ui->preview->runAction(FrameTuneScene::ACTION_HFLIP_CUR_FRAME);
358+
break;
359+
360+
case Qt::Key_E:
361+
if(e->modifiers() == Qt::ControlModifier)
362+
ui->preview->runAction(FrameTuneScene::ACTION_ERASE_FRAME);
363+
break;
364+
365+
case Qt::Key_C:
366+
if(e->modifiers() == (Qt::ControlModifier | Qt::ShiftModifier))
367+
ui->preview->runAction(FrameTuneScene::ACTION_COPY_FRAME_2X_SHRINK);
368+
if(e->modifiers() == Qt::ControlModifier)
369+
ui->preview->runAction(FrameTuneScene::ACTION_COPY_FRAME);
370+
else
371+
ui->toolSelectCopy->click();
372+
break;
373+
374+
case Qt::Key_V:
375+
if(e->modifiers() == (Qt::ControlModifier | Qt::ShiftModifier))
376+
ui->preview->runAction(FrameTuneScene::ACTION_PASTE_FRAME_2X_GROW);
377+
if(e->modifiers() == Qt::ControlModifier)
378+
ui->preview->runAction(FrameTuneScene::ACTION_PASTE_FRAME);
379+
break;
380+
381+
case Qt::Key_Z:
382+
if(e->modifiers() == (Qt::ControlModifier | Qt::ShiftModifier))
383+
ui->toolRedo->click();
384+
if(e->modifiers() == Qt::ControlModifier)
385+
ui->toolUndo->click();
386+
break;
387+
388+
case Qt::Key_Y:
389+
if(e->modifiers() == Qt::ControlModifier)
390+
ui->toolUndo->click();
391+
break;
392+
393+
case Qt::Key_S:
394+
if(e->modifiers() == Qt::ControlModifier)
395+
ui->WritePNG->click();
396+
else
397+
ui->toolSelect->click();
398+
break;
399+
}
400+
401+
QDialog::keyPressEvent(e);
402+
}
403+
404+
void ImageCalibrator::keyReleaseEvent(QKeyEvent *e)
405+
{
406+
if(e->key() == Qt::Key_Escape)
407+
return;
408+
409+
QDialog::keyPressEvent(e);
410+
}
411+
320412

321413
void ImageCalibrator::on_FrameX_valueChanged(int arg1)
322414
{
@@ -822,9 +914,7 @@ void ImageCalibrator::on_WritePNG_GIF_clicked()
822914
QImage targetGif = target.toImage();
823915
Graphics::toMaskedGif(targetGif, m_gifPath);
824916
saveCalibrates();
825-
QMessageBox::information(this,
826-
"Image was overwritten",
827-
"Calibrated sprite was saved in:\n" + m_pngPath + "\n" + m_gifPath, QMessageBox::Ok);
917+
m_status->showMessage("Calibrated sprite was saved in: " + m_pngPath + " - " + m_gifPath, 5000);
828918
}
829919

830920
void ImageCalibrator::on_WritePNG_clicked()
@@ -833,9 +923,7 @@ void ImageCalibrator::on_WritePNG_clicked()
833923
QPixmap target = generateTarget();
834924
target.save(m_pngPath, "PNG");
835925
saveCalibrates();
836-
QMessageBox::information(this,
837-
"Image was overwritten",
838-
"Calibrated sprite was saved in:\n" + m_pngPath, QMessageBox::Ok);
926+
m_status->showMessage("Calibrated sprite was saved in: " + m_pngPath, 5000);
839927
}
840928

841929
void ImageCalibrator::on_WriteGIF_clicked()
@@ -844,9 +932,7 @@ void ImageCalibrator::on_WriteGIF_clicked()
844932
QImage target = generateTarget().toImage();
845933
Graphics::toMaskedGif(target, m_gifPath);
846934
saveCalibrates();
847-
QMessageBox::information(this,
848-
"Image was overwritten",
849-
"Calibrated sprite was saved in:\n" + m_gifPath, QMessageBox::Ok);
935+
m_status->showMessage("Calibrated sprite was saved in:\n" + m_gifPath, 5000);
850936
}
851937

852938
void ImageCalibrator::updateControls()
@@ -1181,6 +1267,12 @@ void ImageCalibrator::historyUndo(bool)
11811267
if(!his.canUndo())
11821268
return;
11831269

1270+
if(ui->preview->isToolBusy())
1271+
{
1272+
ui->preview->cancelTool();
1273+
return;
1274+
}
1275+
11841276
updateCurrentFrame(his.undo(setup));
11851277
updateScene();
11861278
m_matrix->updateScene(generateTarget());
@@ -1195,6 +1287,9 @@ void ImageCalibrator::historyRedo(bool)
11951287
if(!his.canRedo())
11961288
return;
11971289

1290+
if(ui->preview->isToolBusy())
1291+
return; // Can't redo while current tool is busy
1292+
11981293
updateCurrentFrame(his.redo(setup));
11991294
updateScene();
12001295
m_matrix->updateScene(generateTarget());

PlayableCalibrator/image_calibration/image_calibrator.h

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ namespace Ui
1919

2020
class CalibrationMain;
2121
class Matrix;
22+
class QStatusBar;
2223

2324
class ImageCalibrator : public QDialog
2425
{
@@ -28,6 +29,7 @@ class ImageCalibrator : public QDialog
2829
Calibration *m_conf = nullptr;
2930
CalibrationFrame m_setupBuffer;
3031
CalibrationMain *m_mw = nullptr;
32+
QStatusBar *m_status = nullptr;
3133

3234
struct FrameHistory
3335
{
@@ -108,7 +110,9 @@ class ImageCalibrator : public QDialog
108110

109111
protected:
110112
void closeEvent(QCloseEvent *e);
111-
virtual void focusInEvent(QFocusEvent *event);
113+
void focusInEvent(QFocusEvent *event);
114+
void keyPressEvent(QKeyEvent *e);
115+
void keyReleaseEvent(QKeyEvent *e);
112116

113117
private slots:
114118
void on_FrameX_valueChanged(int arg1);

PlayableCalibrator/image_calibration/image_calibrator.ui

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@
66
<rect>
77
<x>0</x>
88
<y>0</y>
9-
<width>626</width>
10-
<height>600</height>
9+
<width>816</width>
10+
<height>611</height>
1111
</rect>
1212
</property>
1313
<property name="minimumSize">
@@ -26,7 +26,19 @@
2626
<iconset resource="../_resources/images.qrc">
2727
<normaloff>:/images/Icon16.png</normaloff>:/images/Icon16.png</iconset>
2828
</property>
29-
<layout class="QGridLayout" name="gridLayout_3" columnstretch="0,0,0,1000">
29+
<layout class="QGridLayout" name="calibratorLayout" columnstretch="0,0,0,1000">
30+
<property name="leftMargin">
31+
<number>0</number>
32+
</property>
33+
<property name="topMargin">
34+
<number>0</number>
35+
</property>
36+
<property name="rightMargin">
37+
<number>0</number>
38+
</property>
39+
<property name="bottomMargin">
40+
<number>0</number>
41+
</property>
3042
<item row="0" column="3">
3143
<widget class="FrameTuneScene" name="preview">
3244
<property name="frameShape">
@@ -45,7 +57,7 @@
4557
<property name="frameShadow">
4658
<enum>QFrame::Plain</enum>
4759
</property>
48-
<layout class="QVBoxLayout" name="verticalLayout">
60+
<layout class="QVBoxLayout" name="toolboxLayout">
4961
<item>
5062
<widget class="QToolButton" name="toolDrag">
5163
<property name="toolTip">
@@ -274,7 +286,7 @@
274286
<property name="frameShadow">
275287
<enum>QFrame::Raised</enum>
276288
</property>
277-
<layout class="QGridLayout" name="gridLayout_2">
289+
<layout class="QGridLayout" name="frameSetupLayout">
278290
<item row="7" column="1">
279291
<widget class="QSpinBox" name="CropW">
280292
<property name="enabled">

0 commit comments

Comments
 (0)