102 lines
4.2 KiB
C++
102 lines
4.2 KiB
C++
#include "MenuFixtures.h"
|
|
#include "Document/BrushStroke.h"
|
|
#include "SelectionFixtures.h"
|
|
|
|
// Swift's d448625: filters, adjustments and Invert wait for open text.
|
|
class TextEditingGatesTests : public QObject {
|
|
Q_OBJECT
|
|
private slots:
|
|
void colourEditsWaitForOpenText();
|
|
void existingTextAndAnEmptyLayerWaitToo();
|
|
};
|
|
|
|
void TextEditingGatesTests::colourEditsWaitForOpenText()
|
|
{
|
|
Bar bar;
|
|
EditorSession &session = bar.session();
|
|
session.createDocument(40, 30);
|
|
QImage image = BrushRaster::context(40, 30, false);
|
|
image.fill(QColor(120, 160, 200));
|
|
session.insert(ImportedImage(image, image, QStringLiteral("Colour")));
|
|
const QStringList entries{"levels", "curves", "hueSaturation", "invert", "gaussianBlur", "vignette", "exposure"};
|
|
const auto enabled = [&] {
|
|
QStringList on;
|
|
for (const QString &name : entries) {
|
|
if (bar.action(qPrintable(name)).isEnabled())
|
|
on << name;
|
|
}
|
|
return on;
|
|
};
|
|
QVERIFY(session.canAdjustColors() && session.canInvert() && session.canVignette());
|
|
QCOMPARE(enabled(), entries);
|
|
// Open text is drawn by its editor: colour edits wait.
|
|
session.selectTool(NavigationTool::type);
|
|
session.beginText(QPointF(5, 5));
|
|
QVERIFY(session.textDraft());
|
|
QVERIFY(!session.canAdjustColors() && !session.canInvert() && !session.canVignette());
|
|
QCOMPARE(enabled(), QStringList());
|
|
session.beginLevels();
|
|
session.beginFilter(FilterKind::gaussianBlur);
|
|
session.invertPixels();
|
|
QVERIFY(!session.levels() && !session.filterEdit());
|
|
// Closed, the text lets them go on.
|
|
session.cancelText();
|
|
QVERIFY(session.canAdjustColors() && session.canInvert() && session.canVignette());
|
|
QCOMPARE(enabled(), entries);
|
|
}
|
|
|
|
void TextEditingGatesTests::existingTextAndAnEmptyLayerWaitToo()
|
|
{
|
|
Bar bar;
|
|
EditorSession &session = bar.session();
|
|
session.createDocument(200, 100);
|
|
session.selectTool(NavigationTool::type);
|
|
session.beginText(QPointF(10, 10));
|
|
TextDraft draft = session.textDraft().value();
|
|
draft.style.content = QStringLiteral("Words");
|
|
session.setTextDraft(draft);
|
|
QVERIFY(session.finishText());
|
|
session.applySelection(rectPath(QRectF(0, 0, 50, 50)), SelectionMode::replace, "Select");
|
|
const QStringList entries{"levels", "hueSaturation", "invert", "gaussianBlur", "cameraRawFilter", "contentAwareFill"};
|
|
const auto enabled = [&] {
|
|
QStringList on;
|
|
for (const QString &name : entries) {
|
|
if (bar.action(qPrintable(name)).isEnabled())
|
|
on << name;
|
|
}
|
|
return on;
|
|
};
|
|
QCOMPARE(enabled(), entries);
|
|
QVERIFY(session.canContentAwareFill());
|
|
// Reopened, the layer's text is its editor's: every edit waits.
|
|
session.editActiveText();
|
|
QVERIFY(session.textDraft().value().layerID.has_value());
|
|
QVERIFY(!session.canAdjustColors() && !session.canInvert() && !session.canContentAwareFill());
|
|
QCOMPARE(enabled(), QStringList());
|
|
const QImage pixels = session.activeLayer().value().asset.value().image();
|
|
const int steps = session.history.undoCount();
|
|
session.beginHueSaturation();
|
|
session.beginFilter(FilterKind::cameraRaw);
|
|
bool inverted = false;
|
|
session.invertPixels([&inverted] { inverted = true; });
|
|
QTRY_VERIFY(inverted);
|
|
QVERIFY(!session.hueSaturation() && !session.filterEdit());
|
|
QCOMPARE(session.history.undoCount(), steps);
|
|
QCOMPARE(session.activeLayer().value().asset.value().image(), pixels);
|
|
QCOMPARE(session.textDraft().value().style.content, QString("Words"));
|
|
QVERIFY(session.finishText());
|
|
QCOMPARE(enabled(), entries);
|
|
// Vignette paints an empty layer, but not under new text.
|
|
session.deselect();
|
|
session.addBlankLayer();
|
|
QVERIFY(!session.activeLayer().value().asset && session.canVignette());
|
|
session.beginText(QPointF(120, 60), true);
|
|
QVERIFY(!session.textDraft().value().layerID && !session.activeLayer().value().asset);
|
|
QVERIFY(!session.canVignette() && !bar.action("vignette").isEnabled());
|
|
session.cancelText();
|
|
QVERIFY(session.canVignette() && bar.action("vignette").isEnabled());
|
|
}
|
|
|
|
QTEST_MAIN(TextEditingGatesTests)
|
|
#include "TextEditingGatesTests.moc"
|