Skip to content

Commit 64d6512

Browse files
committed
Calibrator: Added colour select button
Not yet with a list of existing frame colours and pallete yet.
1 parent 3e00f51 commit 64d6512

File tree

8 files changed

+173
-16
lines changed

8 files changed

+173
-16
lines changed

PlayableCalibrator/CMakeLists.txt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -181,6 +181,14 @@ if(QT_PTHREAD)
181181
target_link_libraries(PGE_Calibrator_QtLibs INTERFACE ${QT_PTHREAD})
182182
endif()
183183

184+
string(TOLOWER "${CMAKE_BUILD_TYPE}" CMAKE_BUILD_TYPE_LOWER)
185+
if(${CMAKE_BUILD_TYPE_LOWER} STREQUAL "debug")
186+
target_compile_definitions(pge_calibrator
187+
PRIVATE
188+
-DDEBUG_BUILD
189+
)
190+
endif()
191+
184192
add_dependencies(pge_calibrator
185193
FreeImage_Local
186194
libpng_Local
4.2 KB
Loading

PlayableCalibrator/_resources/images.qrc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,5 +43,6 @@
4343
<file>edit/zoom_out.png</file>
4444
<file>images/picture.png</file>
4545
<file>edit/quick_actions.png</file>
46+
<file>edit/edit_colour.png</file>
4647
</qresource>
4748
</RCC>

PlayableCalibrator/image_calibration/image_calibrator.cpp

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
#include <QDialog>
55
#include <QStatusBar>
66
#include <QFocusEvent>
7+
#include <QColorDialog>
78

89
#include "image_calibrator.h"
910
#include <ui_image_calibrator.h>
@@ -94,6 +95,8 @@ ImageCalibrator::ImageCalibrator(Calibration *conf, QWidget *parent) :
9495

9596
QObject::connect(ui->toolDrag, &QToolButton::clicked,
9697
this, &ImageCalibrator::toolChanged);
98+
QObject::connect(ui->toolColour, &QToolButton::clicked,
99+
this, &ImageCalibrator::pickColour);
97100
QObject::connect(ui->toolSelect, &QToolButton::clicked,
98101
this, &ImageCalibrator::toolChanged);
99102
QObject::connect(ui->toolSelectCopy, &QToolButton::clicked,
@@ -206,6 +209,8 @@ ImageCalibrator::ImageCalibrator(Calibration *conf, QWidget *parent) :
206209
this, &ImageCalibrator::toolFlipFrameH);
207210
QObject::connect(ui->preview, &FrameTuneScene::actionFrameFlipedV,
208211
this, &ImageCalibrator::toolFlipFrameV);
212+
QObject::connect(ui->preview, &FrameTuneScene::drawColourChanged,
213+
this, &ImageCalibrator::refreshColours);
209214
}
210215

211216
ImageCalibrator::~ImageCalibrator()
@@ -953,6 +958,7 @@ void ImageCalibrator::updateScene()
953958
auto &his = m_history[m_frmX][m_frmY];
954959
ui->toolUndo->setEnabled(his.canUndo());
955960
ui->toolRedo->setEnabled(his.canRedo());
961+
refreshColours();
956962
}
957963

958964
void ImageCalibrator::saveCalibrates()
@@ -1177,6 +1183,54 @@ void ImageCalibrator::toolChanged(bool)
11771183
}
11781184
}
11791185

1186+
void ImageCalibrator::pickColour()
1187+
{
1188+
QColorDialog d(this);
1189+
d.setOptions(QColorDialog::DontUseNativeDialog);
1190+
1191+
int idx = 0;
1192+
for(auto &c : m_recent_colours)
1193+
d.setCustomColor(idx, c);
1194+
1195+
d.setCurrentColor(ui->preview->getDrawColour());
1196+
1197+
if(d.exec() == QDialog::Accepted)
1198+
{
1199+
int num = d.customCount();
1200+
m_recent_colours.clear();
1201+
1202+
for(int i = 0; i < num; ++i)
1203+
m_recent_colours.insert(d.customColor(i));
1204+
1205+
ui->preview->setDrawColour(d.currentColor());
1206+
}
1207+
}
1208+
1209+
void ImageCalibrator::refreshColours()
1210+
{
1211+
if(m_imgOffsets.empty())
1212+
return; // Otherwise will fail
1213+
1214+
m_frame_colours.clear();
1215+
1216+
QImage f = getCurrentFrame().toImage();
1217+
1218+
for(int y = 0; y < f.height(); ++y)
1219+
{
1220+
for(int x = 0; x < f.width(); ++x)
1221+
{
1222+
QColor pix = f.pixelColor(x, y);
1223+
1224+
if(!m_frame_colours.contains(pix))
1225+
m_frame_colours.insert(pix);
1226+
}
1227+
}
1228+
1229+
QImage c = QImage(16, 16, QImage::Format_ARGB32);
1230+
c.fill(ui->preview->getDrawColour());
1231+
ui->toolColour->setIcon(QIcon(QPixmap::fromImage(c)));
1232+
}
1233+
11801234
void ImageCalibrator::tempFrameUpdated(const QString &path)
11811235
{
11821236
if(!m_pendingFileToUpdate.isEmpty())

PlayableCalibrator/image_calibration/image_calibrator.h

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
#include <QDialog>
66
#include <QPixmap>
77
#include <QImage>
8+
#include <QSet>
89
#include <QList>
910
#include <QMenu>
1011
#include <QFileSystemWatcher>
@@ -21,6 +22,11 @@ class CalibrationMain;
2122
class Matrix;
2223
class QStatusBar;
2324

25+
inline uint qHash(const QColor &key, uint seed)
26+
{
27+
return qHash(key.rgba(), seed);
28+
}
29+
2430
class ImageCalibrator : public QDialog
2531
{
2632
Q_OBJECT
@@ -31,6 +37,9 @@ class ImageCalibrator : public QDialog
3137
CalibrationMain *m_mw = nullptr;
3238
QStatusBar *m_status = nullptr;
3339

40+
QSet<QColor> m_recent_colours;
41+
QSet<QColor> m_frame_colours;
42+
3443
struct FrameHistory
3544
{
3645
int state = -1;
@@ -159,6 +168,8 @@ private slots:
159168
void on_openFrameInEditor_clicked();
160169

161170
void toolChanged(bool);
171+
void pickColour();
172+
void refreshColours();
162173

163174

164175
private:

PlayableCalibrator/image_calibration/image_calibrator.ui

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,23 @@
8282
</property>
8383
</widget>
8484
</item>
85+
<item>
86+
<widget class="QToolButton" name="toolColour">
87+
<property name="toolTip">
88+
<string>Changes current draw colour (affects pencil, line, and rectangle tools).</string>
89+
</property>
90+
<property name="text">
91+
<string>Draw colour</string>
92+
</property>
93+
<property name="icon">
94+
<iconset resource="../_resources/images.qrc">
95+
<normaloff>:/edit/edit_colour.png</normaloff>:/edit/edit_colour.png</iconset>
96+
</property>
97+
<property name="checkable">
98+
<bool>false</bool>
99+
</property>
100+
</widget>
101+
</item>
85102
<item>
86103
<widget class="QToolButton" name="toolSelect">
87104
<property name="toolTip">

0 commit comments

Comments
 (0)