Merge remote-tracking branch 'origin/5.13' into dev
Change-Id: I1c9449ab064deed1367a7e5dbedfcb489f28140e
This commit is contained in:
commit
03f7d0a005
@ -62,28 +62,27 @@
|
||||
*/
|
||||
|
||||
/*!
|
||||
\externalpage http://www.cmake.org/cmake/help/v2.8.11/cmake.html#command:find_package
|
||||
\externalpage https://cmake.org/cmake/help/latest/command/find_package.html
|
||||
\title CMake find_package Documentation
|
||||
*/
|
||||
|
||||
/*!
|
||||
\externalpage http://www.cmake.org/cmake/help/v2.8.11/cmake.html#prop_tgt:AUTOMOC
|
||||
\externalpage https://cmake.org/cmake/help/latest/manual/cmake-qt.7.html#automoc
|
||||
\title CMake AUTOMOC Documentation
|
||||
*/
|
||||
|
||||
|
||||
/*!
|
||||
\externalpage http://www.cmake.org/cmake/help/v2.8.11/cmake.html#prop_tgt:LOCATION
|
||||
\externalpage https://cmake.org/cmake/help/latest/prop_tgt/LOCATION.html
|
||||
\title CMake LOCATION Documentation
|
||||
*/
|
||||
|
||||
/*!
|
||||
\externalpage http://www.cmake.org/cmake/help/v2.8.11/cmake.html#prop_tgt:POSITION_INDEPENDENT_CODE
|
||||
\externalpage https://cmake.org/cmake/help/latest/prop_tgt/POSITION_INDEPENDENT_CODE.html
|
||||
\title CMake POSITION_INDEPENDENT_CODE Documentation
|
||||
*/
|
||||
|
||||
/*!
|
||||
\externalpage http://www.cmake.org/cmake/help/v2.8.11/cmake.html#command:target_link_libraries
|
||||
\externalpage https://cmake.org/cmake/help/latest/command/target_link_libraries.html
|
||||
\title CMake target_link_libraries Documentation
|
||||
*/
|
||||
|
||||
|
@ -267,9 +267,13 @@ isEmpty($${target_prefix}.INCDIRS) {
|
||||
for (line, output) {
|
||||
contains(line, "^libraries: .*") {
|
||||
line ~= s,^libraries: ,,
|
||||
# clang (7.x) on Windows uses the wrong path list separator ...
|
||||
equals(QMAKE_HOST.os, Windows): line ~= s,:(?![/\\\\]),;,
|
||||
paths = $$split(line, $$QMAKE_DIRLIST_SEP)
|
||||
equals(QMAKE_HOST.os, Windows) {
|
||||
# clang (7.x) on Windows uses the wrong path list separator ...
|
||||
line ~= s,:(?![/\\\\]),;,
|
||||
paths = $$split(line, ;)
|
||||
} else {
|
||||
paths = $$split(line, $$QMAKE_DIRLIST_SEP)
|
||||
}
|
||||
for (path, paths): \
|
||||
QMAKE_DEFAULT_LIBDIRS += $$clean_path($$replace(path, ^=, $$[SYSROOT]))
|
||||
}
|
||||
|
@ -1105,6 +1105,8 @@
|
||||
\header \li Option \li Description
|
||||
\row \li app_bundle \li Puts the executable into a bundle (this is the default).
|
||||
\row \li lib_bundle \li Puts the library into a library bundle.
|
||||
\row \li plugin_bundle \li Puts the plugin into a plugin bundle. This value
|
||||
is not supported by the Xcode project generator.
|
||||
\endtable
|
||||
|
||||
The build process for bundles is also influenced by
|
||||
|
9
src/3rdparty/tinycbor/src/cborparser.c
vendored
9
src/3rdparty/tinycbor/src/cborparser.c
vendored
@ -203,10 +203,13 @@ static CborError preparse_value(CborValue *it)
|
||||
it->extra = 0;
|
||||
|
||||
/* read up to 16 bits into it->extra */
|
||||
if (bytesNeeded <= 2) {
|
||||
if (bytesNeeded == 1) {
|
||||
uint8_t extra;
|
||||
read_bytes_unchecked(it, &extra, 1, bytesNeeded);
|
||||
it->extra = extra;
|
||||
} else if (bytesNeeded == 2) {
|
||||
read_bytes_unchecked(it, &it->extra, 1, bytesNeeded);
|
||||
if (bytesNeeded == 2)
|
||||
it->extra = cbor_ntohs(it->extra);
|
||||
it->extra = cbor_ntohs(it->extra);
|
||||
} else {
|
||||
cbor_static_assert(CborIteratorFlag_IntegerValueTooLarge == (Value32Bit & 3));
|
||||
cbor_static_assert((CborIteratorFlag_IntegerValueIs64Bit |
|
||||
|
@ -45,6 +45,7 @@
|
||||
#include "qsharedpointer.h"
|
||||
#include "qvector.h"
|
||||
#include "qthread.h"
|
||||
#include "qcoreapplication.h"
|
||||
#include <QtCore/qrunnable.h>
|
||||
|
||||
#include <deque>
|
||||
@ -474,6 +475,17 @@ void QtAndroidPrivate::runOnAndroidThread(const QtAndroidPrivate::Runnable &runn
|
||||
env->CallStaticVoidMethod(g_jNativeClass, g_runPendingCppRunnablesMethodID);
|
||||
}
|
||||
|
||||
static bool waitForSemaphore(int timeoutMs, QSharedPointer<QSemaphore> sem)
|
||||
{
|
||||
while (timeoutMs > 0) {
|
||||
if (sem->tryAcquire(1, 10))
|
||||
return true;
|
||||
timeoutMs -= 10;
|
||||
QCoreApplication::processEvents();
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void QtAndroidPrivate::runOnAndroidThreadSync(const QtAndroidPrivate::Runnable &runnable, JNIEnv *env, int timeoutMs)
|
||||
{
|
||||
QSharedPointer<QSemaphore> sem(new QSemaphore);
|
||||
@ -481,7 +493,7 @@ void QtAndroidPrivate::runOnAndroidThreadSync(const QtAndroidPrivate::Runnable &
|
||||
runnable();
|
||||
sem->release();
|
||||
}, env);
|
||||
sem->tryAcquire(1, timeoutMs);
|
||||
waitForSemaphore(timeoutMs, sem);
|
||||
}
|
||||
|
||||
void QtAndroidPrivate::requestPermissions(JNIEnv *env, const QStringList &permissions, const QtAndroidPrivate::PermissionsResultFunc &callbackFunc, bool directCall)
|
||||
@ -524,7 +536,7 @@ QtAndroidPrivate::PermissionsHash QtAndroidPrivate::requestPermissionsSync(JNIEn
|
||||
*res = result;
|
||||
sem->release();
|
||||
}, true);
|
||||
if (sem->tryAcquire(1, timeoutMs))
|
||||
if (waitForSemaphore(timeoutMs, sem))
|
||||
return std::move(*res);
|
||||
else // mustn't touch *res
|
||||
return QHash<QString, QtAndroidPrivate::PermissionsResult>();
|
||||
|
@ -767,7 +767,7 @@ void QRasterPaintEngine::updatePen(const QPen &pen)
|
||||
s->flags.fast_pen = pen_style > Qt::NoPen
|
||||
&& s->penData.blend
|
||||
&& ((cosmetic && penWidth <= 1)
|
||||
|| (!cosmetic && s->flags.tx_noshear && penWidth * s->txscale <= 1));
|
||||
|| (!cosmetic && (s->flags.tx_noshear || !s->flags.antialiased) && penWidth * s->txscale <= 1));
|
||||
|
||||
s->flags.non_complex_pen = qpen_capStyle(s->lastPen) <= Qt::SquareCap && s->flags.tx_noshear;
|
||||
|
||||
|
@ -1148,6 +1148,8 @@ void QDashStroker::processCurrentSubpath()
|
||||
|
||||
QSubpathFlatIterator it(&m_elements, m_dashThreshold);
|
||||
qfixed2d prev = it.next();
|
||||
if (!prev.isFinite())
|
||||
return;
|
||||
|
||||
bool clipping = !m_clip_rect.isEmpty();
|
||||
qfixed2d move_to_pos = prev;
|
||||
@ -1163,6 +1165,8 @@ void QDashStroker::processCurrentSubpath()
|
||||
bool hasMoveTo = false;
|
||||
while (it.hasNext()) {
|
||||
QStrokerOps::Element e = it.next();
|
||||
if (!qfixed2d(e).isFinite())
|
||||
continue;
|
||||
|
||||
Q_ASSERT(e.isLineTo());
|
||||
cline = QLineF(qt_fixed_to_real(prev.x),
|
||||
|
@ -104,6 +104,7 @@ struct qfixed2d
|
||||
qfixed x;
|
||||
qfixed y;
|
||||
|
||||
bool isFinite() { return qIsFinite(x) && qIsFinite(y); }
|
||||
bool operator==(const qfixed2d &other) const { return qFuzzyCompare(x, other.x)
|
||||
&& qFuzzyCompare(y, other.y); }
|
||||
};
|
||||
|
@ -261,6 +261,10 @@ static RoleMapping map[] = {
|
||||
//: Role of an accessible object
|
||||
{ QAccessible::ComplementaryContent, ATSPI_ROLE_SECTION, QT_TRANSLATE_NOOP("QSpiAccessibleBridge", "complementary content") },
|
||||
//: Role of an accessible object
|
||||
{ QAccessible::Terminal, ATSPI_ROLE_TERMINAL, QT_TRANSLATE_NOOP("QSpiAccessibleBridge", "terminal") },
|
||||
//: Role of an accessible object
|
||||
{ QAccessible::Desktop, ATSPI_ROLE_DESKTOP_FRAME, QT_TRANSLATE_NOOP("QSpiAccessibleBridge", "desktop") },
|
||||
//: Role of an accessible object
|
||||
{ QAccessible::UserRole, ATSPI_ROLE_UNKNOWN, QT_TRANSLATE_NOOP("QSpiAccessibleBridge", "unknown") }
|
||||
};
|
||||
|
||||
@ -268,6 +272,12 @@ void QSpiAccessibleBridge::initializeConstantMappings()
|
||||
{
|
||||
for (uint i = 0; i < sizeof(map) / sizeof(RoleMapping); ++i)
|
||||
qSpiRoleMapping.insert(map[i].role, RoleNames(map[i].spiRole, QLatin1String(map[i].name), tr(map[i].name)));
|
||||
|
||||
// -1 because we have button duplicated, as PushButton and Button.
|
||||
Q_ASSERT_X(qSpiRoleMapping.size() ==
|
||||
QAccessible::staticMetaObject.enumerator(
|
||||
QAccessible::staticMetaObject.indexOfEnumerator("Role")).keyCount() - 1,
|
||||
"", "Handle all QAccessible::Role members in qSpiRoleMapping");
|
||||
}
|
||||
|
||||
QT_END_NAMESPACE
|
||||
|
@ -523,17 +523,21 @@ QImage ICOReader::iconAt(int index)
|
||||
if (!image.isNull()) {
|
||||
readBMP(image);
|
||||
if (!image.isNull()) {
|
||||
QImage mask(image.width(), image.height(), QImage::Format_Mono);
|
||||
if (!mask.isNull()) {
|
||||
mask.setColorCount(2);
|
||||
mask.setColor(0, qRgba(255,255,255,0xff));
|
||||
mask.setColor(1, qRgba(0 ,0 ,0 ,0xff));
|
||||
read1BitBMP(mask);
|
||||
if (icoAttrib.depth == 32) {
|
||||
img = std::move(image).convertToFormat(QImage::Format_ARGB32_Premultiplied);
|
||||
} else {
|
||||
QImage mask(image.width(), image.height(), QImage::Format_Mono);
|
||||
if (!mask.isNull()) {
|
||||
img = image;
|
||||
img.setAlphaChannel(mask);
|
||||
// (Luckily, it seems that setAlphaChannel() does not ruin the alpha values
|
||||
// of partially transparent pixels in those icons that have that)
|
||||
mask.setColorCount(2);
|
||||
mask.setColor(0, qRgba(255,255,255,0xff));
|
||||
mask.setColor(1, qRgba(0 ,0 ,0 ,0xff));
|
||||
read1BitBMP(mask);
|
||||
if (!mask.isNull()) {
|
||||
img = image;
|
||||
img.setAlphaChannel(mask);
|
||||
// (Luckily, it seems that setAlphaChannel() does not ruin the alpha values
|
||||
// of partially transparent pixels in those icons that have that)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -40,6 +40,7 @@
|
||||
|
||||
#include <QtCore/QCoreApplication>
|
||||
#include <QtGui/QKeyEvent>
|
||||
#include <QtGui/QGuiApplication>
|
||||
|
||||
#include <locale.h>
|
||||
|
||||
@ -121,7 +122,14 @@ bool QComposeInputContext::filterEvent(const QEvent *event)
|
||||
|
||||
QInputMethodEvent event;
|
||||
event.setCommitString(composedText);
|
||||
QCoreApplication::sendEvent(m_focusObject, &event);
|
||||
|
||||
if (!m_focusObject && qApp)
|
||||
m_focusObject = qApp->focusObject();
|
||||
|
||||
if (m_focusObject)
|
||||
QCoreApplication::sendEvent(m_focusObject, &event);
|
||||
else
|
||||
qCWarning(lcXkbCompose, "no focus object");
|
||||
|
||||
reset();
|
||||
return true;
|
||||
|
@ -776,7 +776,7 @@ int QWasmEventTranslator::handleTouch(int eventType, const EmscriptenTouchEvent
|
||||
QWindowSystemInterface::handleTouchCancelEvent(window2, getTimestamp(), touchDevice, keyModifier);
|
||||
|
||||
QWasmEventDispatcher::maintainTimers();
|
||||
return 0;
|
||||
return 1;
|
||||
}
|
||||
|
||||
quint64 QWasmEventTranslator::getTimestamp()
|
||||
|
@ -447,6 +447,42 @@ static const int toolButtonArrowMargin = 2;
|
||||
|
||||
static const qreal focusRingWidth = 3.5;
|
||||
|
||||
// An application can force 'Aqua' theme while the system theme is one of
|
||||
// the 'Dark' variants. Since in Qt we sometimes use NSControls and even
|
||||
// NSCells directly without attaching them to any view hierarchy, we have
|
||||
// to set NSAppearance.currentAppearance to 'Aqua' manually, to make sure
|
||||
// the correct rendering path is triggered. Apple recommends us to un-set
|
||||
// the current appearance back after we finished with drawing. This is what
|
||||
// AppearanceSync is for.
|
||||
|
||||
class AppearanceSync {
|
||||
public:
|
||||
AppearanceSync()
|
||||
{
|
||||
#if QT_MACOS_PLATFORM_SDK_EQUAL_OR_ABOVE(__MAC_10_14)
|
||||
if (QOperatingSystemVersion::current() >= QOperatingSystemVersion::MacOSMojave
|
||||
&& !qt_mac_applicationIsInDarkMode()) {
|
||||
auto requiredAppearanceName = NSApplication.sharedApplication.effectiveAppearance.name;
|
||||
if (![NSAppearance.currentAppearance.name isEqualToString:requiredAppearanceName]) {
|
||||
previous = NSAppearance.currentAppearance;
|
||||
NSAppearance.currentAppearance = [NSAppearance appearanceNamed:requiredAppearanceName];
|
||||
}
|
||||
}
|
||||
#endif // QT_MACOS_PLATFORM_SDK_EQUAL_OR_ABOVE(__MAC_10_14)
|
||||
}
|
||||
|
||||
~AppearanceSync()
|
||||
{
|
||||
if (previous)
|
||||
NSAppearance.currentAppearance = previous;
|
||||
}
|
||||
|
||||
private:
|
||||
NSAppearance *previous = nil;
|
||||
|
||||
Q_DISABLE_COPY(AppearanceSync)
|
||||
};
|
||||
|
||||
static bool setupScroller(NSScroller *scroller, const QStyleOptionSlider *sb)
|
||||
{
|
||||
const qreal length = sb->maximum - sb->minimum + sb->pageStep;
|
||||
@ -2918,6 +2954,7 @@ void QMacStyle::drawPrimitive(PrimitiveElement pe, const QStyleOption *opt, QPai
|
||||
const QWidget *w) const
|
||||
{
|
||||
Q_D(const QMacStyle);
|
||||
const AppearanceSync appSync;
|
||||
QMacCGContext cg(p);
|
||||
QWindow *window = w && w->window() ? w->window()->windowHandle() : nullptr;
|
||||
d->resolveCurrentNSView(window);
|
||||
@ -3443,6 +3480,7 @@ void QMacStyle::drawControl(ControlElement ce, const QStyleOption *opt, QPainter
|
||||
const QWidget *w) const
|
||||
{
|
||||
Q_D(const QMacStyle);
|
||||
const AppearanceSync sync;
|
||||
QMacCGContext cg(p);
|
||||
QWindow *window = w && w->window() ? w->window()->windowHandle() : nullptr;
|
||||
d->resolveCurrentNSView(window);
|
||||
@ -5033,6 +5071,7 @@ void QMacStyle::drawComplexControl(ComplexControl cc, const QStyleOptionComplex
|
||||
const QWidget *widget) const
|
||||
{
|
||||
Q_D(const QMacStyle);
|
||||
const AppearanceSync sync;
|
||||
QMacCGContext cg(p);
|
||||
QWindow *window = widget && widget->window() ? widget->window()->windowHandle() : nullptr;
|
||||
d->resolveCurrentNSView(window);
|
||||
|
@ -900,7 +900,7 @@ bool readInputFile(Options *options)
|
||||
options->extraPlugins = extraPlugins.toString().split(QLatin1Char(','));
|
||||
}
|
||||
|
||||
if (!options->auxMode) {
|
||||
{
|
||||
const QJsonValue stdcppPath = jsonObject.value(QStringLiteral("stdcpp-path"));
|
||||
if (stdcppPath.isUndefined()) {
|
||||
fprintf(stderr, "No stdcpp-path defined in json file.\n");
|
||||
|
@ -1200,7 +1200,10 @@ void PaintCommands::command_drawRoundRect(QRegularExpressionMatch re)
|
||||
if (m_verboseMode)
|
||||
printf(" -(lance) drawRoundRect(%d, %d, %d, %d, [%d, %d])\n", x, y, w, h, xs, ys);
|
||||
|
||||
QT_WARNING_PUSH
|
||||
QT_WARNING_DISABLE_DEPRECATED
|
||||
m_painter->drawRoundRect(x, y, w, h, xs, ys);
|
||||
QT_WARNING_POP
|
||||
}
|
||||
|
||||
/***************************************************************************************************/
|
||||
|
79
tests/auto/other/lancelot/scripts/thinlines.qps
Normal file
79
tests/auto/other/lancelot/scripts/thinlines.qps
Normal file
@ -0,0 +1,79 @@
|
||||
# Version: 1
|
||||
# CheckVsReference: 5%
|
||||
|
||||
drawRect 0 0 800 800
|
||||
|
||||
path_addRect p 0 0 75 75
|
||||
path_addEllipse p 25 25 75 75
|
||||
|
||||
translate -500 -500
|
||||
|
||||
begin_block drawing
|
||||
save
|
||||
drawLine 0 0 100 100
|
||||
|
||||
translate 0 100
|
||||
drawPath p
|
||||
|
||||
translate 0 110
|
||||
drawRect 0 0 100 100
|
||||
|
||||
translate 0 110
|
||||
drawPolyline [0 0 100 0 50 50]
|
||||
|
||||
drawPoint 40 40
|
||||
drawPoint 41 40
|
||||
drawPoint 42 40
|
||||
drawPoint 43 40
|
||||
drawPoint 44 40
|
||||
drawPoint 45 40
|
||||
drawPoint 46 40
|
||||
drawPoint 47 40
|
||||
drawPoint 48 40
|
||||
drawPoint 49 40
|
||||
drawPoint 50 40
|
||||
|
||||
restore
|
||||
end_block
|
||||
|
||||
begin_block univsnonuni
|
||||
save
|
||||
|
||||
save
|
||||
scale 0.7 0.7
|
||||
repeat_block drawing
|
||||
restore
|
||||
|
||||
translate 100 0
|
||||
save
|
||||
scale 0.7 0.8
|
||||
repeat_block drawing
|
||||
restore
|
||||
|
||||
restore
|
||||
end_block
|
||||
|
||||
resetMatrix
|
||||
translate 20.5 20.5
|
||||
|
||||
begin_block row
|
||||
save
|
||||
repeat_block univsnonuni
|
||||
|
||||
translate 240 0
|
||||
save
|
||||
rotate 10
|
||||
repeat_block univsnonuni
|
||||
restore
|
||||
|
||||
translate 220 0
|
||||
save
|
||||
rotate_y 30
|
||||
repeat_block univsnonuni
|
||||
restore
|
||||
restore
|
||||
end_block
|
||||
|
||||
translate 0 320
|
||||
setRenderHint AntiAliasing
|
||||
repeat_block row
|
@ -9,3 +9,5 @@ b2qt
|
||||
ubuntu
|
||||
b2qt
|
||||
windows
|
||||
rhel
|
||||
suse-leap
|
||||
|
@ -45,7 +45,7 @@ InteractiveWidget::InteractiveWidget()
|
||||
|
||||
// create and populate the command toolbox
|
||||
m_commandsToolBox = new QToolBox();
|
||||
QListWidget *currentListWidget = 0;
|
||||
QListWidget *currentListWidget = nullptr;
|
||||
foreach (PaintCommands::PaintCommandInfos paintCommandInfo, PaintCommands::s_commandInfoTable) {
|
||||
if (paintCommandInfo.isSectionHeader()) {
|
||||
currentListWidget = new QListWidget();
|
||||
|
@ -185,7 +185,7 @@ static void displayCommands()
|
||||
" pixmap_load filename name_in_script\n"
|
||||
" image_load filename name_in_script\n");
|
||||
}
|
||||
static InteractiveWidget *interactive_widget = 0;
|
||||
static InteractiveWidget *interactive_widget = nullptr;
|
||||
|
||||
static void runInteractive()
|
||||
{
|
||||
@ -350,15 +350,15 @@ int main(int argc, char **argv)
|
||||
#endif
|
||||
}
|
||||
}
|
||||
scaledWidth = width * scalefactor;
|
||||
scaledHeight = height * scalefactor;
|
||||
scaledWidth = int(width * scalefactor);
|
||||
scaledHeight = int(height * scalefactor);
|
||||
|
||||
PaintCommands pcmd(QStringList(), 800, 800, imageFormat);
|
||||
pcmd.setVerboseMode(verboseMode);
|
||||
pcmd.setType(type);
|
||||
pcmd.setCheckersBackground(checkers_background);
|
||||
|
||||
QWidget *activeWidget = 0;
|
||||
QWidget *activeWidget = nullptr;
|
||||
|
||||
if (interactive) {
|
||||
runInteractive();
|
||||
@ -610,7 +610,7 @@ int main(int argc, char **argv)
|
||||
|
||||
QPrinter p(highres ? QPrinter::HighResolution : QPrinter::ScreenResolution);
|
||||
if (printdlg) {
|
||||
QPrintDialog printDialog(&p, 0);
|
||||
QPrintDialog printDialog(&p, nullptr);
|
||||
if (printDialog.exec() != QDialog::Accepted)
|
||||
break;
|
||||
} else {
|
||||
|
@ -45,31 +45,12 @@
|
||||
#include <QPaintEngine>
|
||||
#include <QSignalMapper>
|
||||
#include <QAction>
|
||||
#include <QDebug>
|
||||
|
||||
#include <qmath.h>
|
||||
|
||||
const int CP_RADIUS = 10;
|
||||
|
||||
class StupidWorkaround : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
StupidWorkaround(QWidget *widget, int *value)
|
||||
: QObject(widget), w(widget), mode(value)
|
||||
{
|
||||
}
|
||||
|
||||
public slots:
|
||||
void setViewMode(int m) {
|
||||
*mode = m;
|
||||
w->update();
|
||||
}
|
||||
|
||||
private:
|
||||
QWidget *w;
|
||||
int *mode;
|
||||
};
|
||||
|
||||
template <class T>
|
||||
class OnScreenWidget : public T
|
||||
{
|
||||
@ -81,7 +62,7 @@ public:
|
||||
DifferenceView
|
||||
};
|
||||
|
||||
OnScreenWidget(const QString &file, QWidget *parent = 0)
|
||||
OnScreenWidget(const QString &file, QWidget *parent = nullptr)
|
||||
: T(parent),
|
||||
m_filename(file),
|
||||
m_view_mode(RenderView)
|
||||
@ -108,33 +89,20 @@ public:
|
||||
} else {
|
||||
T::setWindowTitle("Rendering: '" + file + "'. Shortcuts: 1=render, 2=baseline, 3=difference");
|
||||
|
||||
StupidWorkaround *workaround = new StupidWorkaround(this, &m_view_mode);
|
||||
|
||||
QSignalMapper *mapper = new QSignalMapper(this);
|
||||
T::connect(mapper, SIGNAL(mapped(int)), workaround, SLOT(setViewMode(int)));
|
||||
T::connect(mapper, SIGNAL(mapped(QString)), this, SLOT(setWindowTitle(QString)));
|
||||
|
||||
QAction *renderViewAction = new QAction("Render View", this);
|
||||
renderViewAction->setShortcut(Qt::Key_1);
|
||||
T::connect(renderViewAction, SIGNAL(triggered()), mapper, SLOT(map()));
|
||||
mapper->setMapping(renderViewAction, RenderView);
|
||||
mapper->setMapping(renderViewAction, "Render View: " + file);
|
||||
T::connect(renderViewAction, &QAction::triggered, [&] { setMode(RenderView); });
|
||||
T::addAction(renderViewAction);
|
||||
|
||||
QAction *baselineAction = new QAction("Baseline", this);
|
||||
baselineAction->setShortcut(Qt::Key_2);
|
||||
T::connect(baselineAction, SIGNAL(triggered()), mapper, SLOT(map()));
|
||||
mapper->setMapping(baselineAction, BaselineView);
|
||||
mapper->setMapping(baselineAction, "Baseline View: " + file);
|
||||
T::connect(baselineAction, &QAction::triggered, [&] { setMode(BaselineView); });
|
||||
T::addAction(baselineAction);
|
||||
|
||||
QAction *differenceAction = new QAction("Differenfe View", this);
|
||||
QAction *differenceAction = new QAction("Difference View", this);
|
||||
differenceAction->setShortcut(Qt::Key_3);
|
||||
T::connect(differenceAction, SIGNAL(triggered()), mapper, SLOT(map()));
|
||||
mapper->setMapping(differenceAction, DifferenceView);
|
||||
mapper->setMapping(differenceAction, "Difference View" + file);
|
||||
T::connect(differenceAction, &QAction::triggered, [&] { setMode(DifferenceView); });
|
||||
T::addAction(differenceAction);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@ -148,6 +116,18 @@ public:
|
||||
settings.sync();
|
||||
}
|
||||
|
||||
void setMode(ViewMode mode) {
|
||||
m_view_mode = mode;
|
||||
QString title;
|
||||
switch (m_view_mode) {
|
||||
case RenderView: title = "Render"; break;
|
||||
case BaselineView: title = "Baseline"; break;
|
||||
case DifferenceView: title = "Difference"; break;
|
||||
}
|
||||
T::setWindowTitle(title + " View: " + m_filename);
|
||||
T::update();
|
||||
}
|
||||
|
||||
void setVerboseMode(bool v) { m_verboseMode = v; }
|
||||
void setCheckersBackground(bool b) { m_checkersBackground = b; }
|
||||
void setType(DeviceType t) { m_deviceType = t; }
|
||||
@ -205,7 +185,7 @@ public:
|
||||
pt.begin(this);
|
||||
pt.setRenderHint(QPainter::Antialiasing);
|
||||
pt.setFont(this->font());
|
||||
pt.resetMatrix();
|
||||
pt.resetTransform();
|
||||
pt.setPen(QColor(127, 127, 127, 191));
|
||||
pt.setBrush(QColor(191, 191, 255, 63));
|
||||
for (int i=0; i<m_controlPoints.size(); ++i) {
|
||||
@ -239,7 +219,7 @@ public:
|
||||
|
||||
p.drawPixmap(0, 0, m_baseline);
|
||||
|
||||
p.setPen(QColor::fromRgb(0, 0, 0, 0.1));
|
||||
p.setPen(QColor::fromRgbF(0, 0, 0, 0.1));
|
||||
p.setFont(QFont("Arial", 128));
|
||||
p.rotate(45);
|
||||
p.drawText(100, 0, "BASELINE");
|
||||
@ -251,7 +231,7 @@ public:
|
||||
img.fill(0);
|
||||
|
||||
QPainter p(&img);
|
||||
p.drawPixmap(0, 0, m_render_view);
|
||||
p.drawImage(0, 0, m_image);
|
||||
|
||||
p.setCompositionMode(QPainter::RasterOp_SourceXorDestination);
|
||||
p.drawPixmap(0, 0, m_baseline);
|
||||
|
@ -108,6 +108,7 @@ void ShortcutTester::setupLayout()
|
||||
Qt::ControlModifier + Qt::Key_5, Qt::AltModifier + Qt::Key_5,
|
||||
Qt::ControlModifier + Qt::Key_Plus,
|
||||
Qt::ControlModifier + Qt::ShiftModifier + Qt::Key_Plus,
|
||||
Qt::ControlModifier + Qt::ShiftModifier + Qt::Key_Equal,
|
||||
Qt::ControlModifier + Qt::Key_Y, Qt::ShiftModifier + Qt::Key_Comma,
|
||||
Qt::ControlModifier + Qt::Key_Comma, Qt::ControlModifier + Qt::Key_Slash,
|
||||
Qt::ControlModifier + Qt::Key_Backslash
|
||||
@ -121,6 +122,8 @@ void ShortcutTester::setupLayout()
|
||||
|
||||
const int keys3[] = {
|
||||
Qt::MetaModifier + Qt::ShiftModifier + Qt::Key_A,
|
||||
Qt::MetaModifier + Qt::Key_A,
|
||||
Qt::MetaModifier + Qt::Key_Q,
|
||||
Qt::MetaModifier + Qt::ShiftModifier + Qt::Key_5,
|
||||
Qt::ControlModifier + Qt::Key_BracketRight,
|
||||
Qt::ShiftModifier + Qt::Key_F3,
|
||||
|
Loading…
x
Reference in New Issue
Block a user