Closing the picker gives open text the keys back; colour edits wait for text editing (12.14d2)
This commit is contained in:
1 parent
27a4fe8428
commit
aa5a44e517
10 files changed
+217
-10
No files matched your search
@@ -0,0 +1,101 @@
|
||||
#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"
|
||||
Reference in new issue
Block a user