diff options
author | Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com> | 2016-02-02 13:13:05 +0100 |
---|---|---|
committer | Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com> | 2016-02-02 13:13:05 +0100 |
commit | ab47de291a0b0111d0ef956dc4c4599e2066602d (patch) | |
tree | 4a118797c0cc6834624262938125f742d3744137 | |
parent | 0091dac1623e69befb549372c417c5aec97ceae1 (diff) | |
parent | dd1d3429fd5518de13f01d89308f2ee2de42540f (diff) |
Merge 5.6 into 5.6.0
Change-Id: I2e48d2627ada8184716916070c2d3cec200e2cb2
-rw-r--r-- | LICENSE.GPLv3 | 2 | ||||
-rw-r--r-- | LICENSE.LGPLv21 | 2 | ||||
-rw-r--r-- | LICENSE.LGPLv3 | 2 | ||||
-rw-r--r-- | src/assistant/assistant/main.cpp | 1 | ||||
-rw-r--r-- | src/assistant/assistant/mainwindow.cpp | 2 | ||||
-rw-r--r-- | src/assistant/help/doc/src/qthelp-index.qdoc | 2 | ||||
-rw-r--r-- | src/designer/src/components/formeditor/formwindow.cpp | 5 | ||||
-rw-r--r-- | src/designer/src/designer/versiondialog.cpp | 2 | ||||
-rw-r--r-- | src/linguist/linguist/formpreviewview.cpp | 7 | ||||
-rw-r--r-- | src/linguist/linguist/mainwindow.cpp | 2 | ||||
-rw-r--r-- | src/linguist/shared/profileevaluator.cpp | 18 | ||||
-rw-r--r-- | src/pixeltool/main.cpp | 47 | ||||
-rw-r--r-- | src/pixeltool/pixeltool.pro | 2 | ||||
-rw-r--r-- | src/pixeltool/qpixeltool.cpp | 218 | ||||
-rw-r--r-- | src/pixeltool/qpixeltool.h | 27 | ||||
-rw-r--r-- | src/qconfig/main.cpp | 2 | ||||
-rw-r--r-- | src/qdbus/qdbusviewer/mainwindow.cpp | 2 | ||||
-rw-r--r-- | src/qdoc/doc/qdoc-manual-markupcmds.qdoc | 2 | ||||
-rw-r--r-- | src/qdoc/doc/qdoc-manual-qdocconf.qdoc | 2 | ||||
-rw-r--r-- | src/qtdiag/main.cpp | 4 | ||||
-rw-r--r-- | src/qtdiag/qtdiag.cpp | 51 | ||||
-rw-r--r-- | src/qtdiag/qtdiag.h | 3 |
22 files changed, 250 insertions, 155 deletions
diff --git a/LICENSE.GPLv3 b/LICENSE.GPLv3 index 4e49b122a..0c0f8e15f 100644 --- a/LICENSE.GPLv3 +++ b/LICENSE.GPLv3 @@ -1,6 +1,6 @@ GNU GENERAL PUBLIC LICENSE - The Qt Toolkit is Copyright (C) 2015 The Qt Company Ltd. + The Qt Toolkit is Copyright (C) 2016 The Qt Company Ltd. Contact: http://www.qt.io/licensing/ You may use, distribute and copy the Qt GUI Toolkit under the terms of diff --git a/LICENSE.LGPLv21 b/LICENSE.LGPLv21 index 6e1846112..ca5adae7e 100644 --- a/LICENSE.LGPLv21 +++ b/LICENSE.LGPLv21 @@ -1,6 +1,6 @@ GNU LESSER GENERAL PUBLIC LICENSE - The Qt Toolkit is Copyright (C) 2015 The Qt Company Ltd. + The Qt Toolkit is Copyright (C) 2016 The Qt Company Ltd. Contact: http://www.qt.io/licensing/ You may use, distribute and copy the Qt GUI Toolkit under the terms of diff --git a/LICENSE.LGPLv3 b/LICENSE.LGPLv3 index 4d67bac0b..d3268e665 100644 --- a/LICENSE.LGPLv3 +++ b/LICENSE.LGPLv3 @@ -1,6 +1,6 @@ GNU LESSER GENERAL PUBLIC LICENSE - The Qt Toolkit is Copyright (C) 2015 The Qt Company Ltd. + The Qt Toolkit is Copyright (C) 2016 The Qt Company Ltd. Contact: http://www.qt.io/licensing/ You may use, distribute and copy the Qt GUI Toolkit under the terms of diff --git a/src/assistant/assistant/main.cpp b/src/assistant/assistant/main.cpp index 8ae25fc9a..4d097aaf1 100644 --- a/src/assistant/assistant/main.cpp +++ b/src/assistant/assistant/main.cpp @@ -293,6 +293,7 @@ void setupTranslations() int main(int argc, char *argv[]) { + QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling); TRACE_OBJ QScopedPointer<QCoreApplication> a(createApplication(argc, argv)); a->addLibraryPath(a->applicationDirPath() + QLatin1String("/plugins")); diff --git a/src/assistant/assistant/mainwindow.cpp b/src/assistant/assistant/mainwindow.cpp index 0a3c1e27f..48f9d948f 100644 --- a/src/assistant/assistant/mainwindow.cpp +++ b/src/assistant/assistant/mainwindow.cpp @@ -901,7 +901,7 @@ void MainWindow::showAboutDialog() "<p>Version %2</p>" "<p>Browser: %3</p></center>" "<p>Copyright (C) %4 The Qt Company Ltd.</p>") - .arg(tr("Qt Assistant"), QLatin1String(QT_VERSION_STR), browser, QStringLiteral("2015")), + .arg(tr("Qt Assistant"), QLatin1String(QT_VERSION_STR), browser, QStringLiteral("2016")), resources); QLatin1String path(":/qt-project.org/assistant/images/assistant-128.png"); aboutDia.setPixmap(QString(path)); diff --git a/src/assistant/help/doc/src/qthelp-index.qdoc b/src/assistant/help/doc/src/qthelp-index.qdoc index ff84c568b..c992fdac8 100644 --- a/src/assistant/help/doc/src/qthelp-index.qdoc +++ b/src/assistant/help/doc/src/qthelp-index.qdoc @@ -73,7 +73,7 @@ \legalese Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team \BR - Changes are Copyright (C) 2015 The Qt Company Ltd. + Changes are Copyright (C) 2016 The Qt Company Ltd. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public diff --git a/src/designer/src/components/formeditor/formwindow.cpp b/src/designer/src/components/formeditor/formwindow.cpp index fdaed87b4..4d1d0abd9 100644 --- a/src/designer/src/components/formeditor/formwindow.cpp +++ b/src/designer/src/components/formeditor/formwindow.cpp @@ -2188,8 +2188,6 @@ void FormWindow::layoutContainer(QWidget *w, int type) w = core()->widgetFactory()->containerOfWidget(w); const QObjectList l = w->children(); - if (l.isEmpty()) - return; // find managed widget children QWidgetList widgets; const QObjectList::const_iterator ocend = l.constEnd(); @@ -2200,6 +2198,9 @@ void FormWindow::layoutContainer(QWidget *w, int type) widgets.append(widget); } + if (widgets.isEmpty()) // QTBUG-50563, observed when using hand-edited forms. + return; + LayoutCommand *cmd = new LayoutCommand(this); cmd->init(mainContainer(), widgets, static_cast<LayoutInfo::Type>(type), w); clearSelection(false); diff --git a/src/designer/src/designer/versiondialog.cpp b/src/designer/src/designer/versiondialog.cpp index b7564bf58..d91c16cb0 100644 --- a/src/designer/src/designer/versiondialog.cpp +++ b/src/designer/src/designer/versiondialog.cpp @@ -165,7 +165,7 @@ VersionDialog::VersionDialog(QWidget *parent) lbl->setText(tr("%1" "<br/>Copyright (C) %2 The Qt Company Ltd." - ).arg(version, QStringLiteral("2015"))); + ).arg(version, QStringLiteral("2016"))); lbl->setWordWrap(true); lbl->setOpenExternalLinks(true); diff --git a/src/linguist/linguist/formpreviewview.cpp b/src/linguist/linguist/formpreviewview.cpp index 2f5757b04..e21dd0120 100644 --- a/src/linguist/linguist/formpreviewview.cpp +++ b/src/linguist/linguist/formpreviewview.cpp @@ -434,10 +434,12 @@ static void highlightTarget(const TranslatableEntry &target, bool on) #ifndef QT_NO_COMBOBOX case TranslatableComboBoxItem: static_cast<QComboBox *>(target.target.object)->setCurrentIndex(target.prop.index); - // fallthrough + goto frontAndHighlight; #endif #ifndef QT_NO_TABWIDGET case TranslatableTabPageText: + static_cast<QTabWidget *>(target.target.object)->setCurrentIndex(target.prop.index); + goto frontAndHighlight; # ifndef QT_NO_TOOLTIP case TranslatableTabPageToolTip: # endif @@ -451,6 +453,9 @@ static void highlightTarget(const TranslatableEntry &target, bool on) case TranslatableToolItemToolTip: # endif #endif // QT_NO_TOOLBOX +#if !defined(QT_NO_COMBOBOX) || !defined(QT_NO_TABWIDGET) + frontAndHighlight: +#endif bringToFront(static_cast<QWidget *>(target.target.object)); highlightWidget(static_cast<QWidget *>(target.target.object), on); break; diff --git a/src/linguist/linguist/mainwindow.cpp b/src/linguist/linguist/mainwindow.cpp index 2971041e7..20a6a0fdf 100644 --- a/src/linguist/linguist/mainwindow.cpp +++ b/src/linguist/linguist/mainwindow.cpp @@ -1338,7 +1338,7 @@ void MainWindow::about() "<p>Qt Linguist is a tool for adding translations to Qt " "applications.</p>" "<p>Copyright (C) %2 The Qt Company Ltd." - ).arg(version, QStringLiteral("2015"))); + ).arg(version, QStringLiteral("2016"))); box.setWindowTitle(QApplication::translate("AboutDialog", "Qt Linguist")); box.setIcon(QMessageBox::NoIcon); diff --git a/src/linguist/shared/profileevaluator.cpp b/src/linguist/shared/profileevaluator.cpp index 21fc698ed..f850f3c1c 100644 --- a/src/linguist/shared/profileevaluator.cpp +++ b/src/linguist/shared/profileevaluator.cpp @@ -35,6 +35,7 @@ #include "qmakeglobals.h" #include "ioutils.h" +#include "qmakevfs.h" #include <QDir> @@ -130,29 +131,28 @@ QStringList ProFileEvaluator::absoluteFileValues( foreach (const QString &el, pro ? values(variable, pro) : values(variable)) { QString absEl; if (IoUtils::isAbsolutePath(el)) { - const QString elWithSysroot = sysrootify(el, baseDirectory); - if (IoUtils::exists(elWithSysroot)) { - result << QDir::cleanPath(elWithSysroot); + const QString elWithSysroot = QDir::cleanPath(sysrootify(el, baseDirectory)); + if (d->m_vfs->exists(elWithSysroot)) { + result << elWithSysroot; goto next; } absEl = elWithSysroot; } else { foreach (const QString &dir, searchDirs) { - QString fn = dir + QLatin1Char('/') + el; - if (IoUtils::exists(fn)) { - result << QDir::cleanPath(fn); + QString fn = QDir::cleanPath(dir + QLatin1Char('/') + el); + if (d->m_vfs->exists(fn)) { + result << fn; goto next; } } if (baseDirectory.isEmpty()) goto next; - absEl = baseDirectory + QLatin1Char('/') + el; + absEl = QDir::cleanPath(baseDirectory + QLatin1Char('/') + el); } { - absEl = QDir::cleanPath(absEl); int nameOff = absEl.lastIndexOf(QLatin1Char('/')); QString absDir = d->m_tmp1.setRawData(absEl.constData(), nameOff); - if (IoUtils::exists(absDir)) { + if (d->m_vfs->exists(absDir)) { QString wildcard = d->m_tmp2.setRawData(absEl.constData() + nameOff + 1, absEl.length() - nameOff - 1); if (wildcard.contains(QLatin1Char('*')) || wildcard.contains(QLatin1Char('?'))) { diff --git a/src/pixeltool/main.cpp b/src/pixeltool/main.cpp index a9377ad91..810d3a474 100644 --- a/src/pixeltool/main.cpp +++ b/src/pixeltool/main.cpp @@ -34,24 +34,57 @@ #include "qpixeltool.h" #include <qapplication.h> +#include <qcommandlineparser.h> +#include <qcommandlineoption.h> #include <qfileinfo.h> QT_USE_NAMESPACE +static bool isOptionSet(int argc, char *argv[], const char *option) +{ + for (int i = 1; i < argc; ++i) { + if (!qstrcmp(argv[i], option)) + return true; + } + return false; +} + int main(int argc, char **argv) { + if (isOptionSet(argc, argv, "--no-scaling")) + QCoreApplication::setAttribute(Qt::AA_DisableHighDpiScaling); + QApplication app(argc, argv); + QCoreApplication::setApplicationName(QLatin1String("PixelTool")); + QCoreApplication::setApplicationVersion(QLatin1String(QT_VERSION_STR)); + QCoreApplication::setOrganizationName(QLatin1String("QtProject")); + + QCommandLineParser parser; + parser.addHelpOption(); + parser.addVersionOption(); + QCommandLineOption noScalingDummy(QStringLiteral("no-scaling"), + QStringLiteral("Set Qt::AA_DisableHighDpiScaling.")); + parser.addOption(noScalingDummy); + parser.addPositionalArgument(QLatin1String("preview"), + QLatin1String("The preview image to show.")); + + parser.process(app); - QPixelTool pt; + QPixelTool pixelTool; - if (app.arguments().size() > 1 && QFileInfo(app.arguments().at(1)).exists()) { - pt.setPreviewImage(QImage(app.arguments().at(1))); + if (!parser.positionalArguments().isEmpty()) { + const QString previewImageFileName = parser.positionalArguments().first(); + if (QFileInfo(previewImageFileName).exists()) { + QImage previewImage(previewImageFileName); + if (!previewImage.size().isEmpty()) + pixelTool.setPreviewImage(previewImage); + } } - pt.show(); + pixelTool.show(); - QObject::connect(&app, SIGNAL(lastWindowClosed()), &app, SLOT(quit())); + QObject::connect(&app, &QApplication::lastWindowClosed, + &app, &QCoreApplication::quit); - int ret = app.exec(); - return ret; + return app.exec(); } diff --git a/src/pixeltool/pixeltool.pro b/src/pixeltool/pixeltool.pro index 82db6e48f..f3d1bf436 100644 --- a/src/pixeltool/pixeltool.pro +++ b/src/pixeltool/pixeltool.pro @@ -1,4 +1,4 @@ -QT += widgets +QT += core-private gui-private widgets mac { QMAKE_INFO_PLIST=Info_mac.plist diff --git a/src/pixeltool/qpixeltool.cpp b/src/pixeltool/qpixeltool.cpp index eac447c0a..b381c2e9c 100644 --- a/src/pixeltool/qpixeltool.cpp +++ b/src/pixeltool/qpixeltool.cpp @@ -35,6 +35,7 @@ #include <qapplication.h> #include <qdesktopwidget.h> +#include <qdir.h> #include <qapplication.h> #include <qscreen.h> #ifndef QT_NO_CLIPBOARD @@ -43,9 +44,13 @@ #include <qpainter.h> #include <qevent.h> #include <qfiledialog.h> +#include <qmessagebox.h> #include <qsettings.h> #include <qmenu.h> #include <qactiongroup.h> +#include <qimagewriter.h> +#include <qstandardpaths.h> +#include <private/qhighdpiscaling_p.h> #include <qdebug.h> @@ -53,30 +58,21 @@ QT_BEGIN_NAMESPACE QPixelTool::QPixelTool(QWidget *parent) : QWidget(parent) + , m_freeze(false) + , m_displayZoom(false) + , m_displayGridSize(false) + , m_mouseDown(false) + , m_preview_mode(false) + , m_displayZoomId(0) + , m_displayGridSizeId(0) + , m_currentColor(0) { - setWindowTitle(QLatin1String("PixelTool")); + setWindowTitle(QCoreApplication::applicationName()); QSettings settings(QLatin1String("QtProject"), QLatin1String("QPixelTool")); - - m_freeze = false; - m_autoUpdate = settings.value(QLatin1String("autoUpdate"), 0).toBool(); - m_gridSize = settings.value(QLatin1String("gridSize"), 1).toInt(); m_gridActive = settings.value(QLatin1String("gridActive"), 1).toInt(); - m_displayGridSize = false; - m_displayGridSizeId = 0; - m_zoom = settings.value(QLatin1String("zoom"), 4).toInt(); - - m_displayZoom = false; - m_displayZoomId = 0; - - m_preview_mode = false; - - m_currentColor = 0; - - m_mouseDown = false; - m_initialSize = settings.value(QLatin1String("initialSize"), QSize(250, 200)).toSize(); move(settings.value(QLatin1String("position")).toPoint()); @@ -174,13 +170,13 @@ void QPixelTool::paintEvent(QPaintEvent *) if (m_displayZoom) { render_string(&p, w, h, - QString::fromLatin1("Zoom: x%1").arg(m_zoom), + QLatin1String("Zoom: x") + QString::number(m_zoom), Qt::AlignTop | Qt::AlignRight); } if (m_displayGridSize) { render_string(&p, w, h, - QString::fromLatin1("Grid size: %1").arg(m_gridSize), + QLatin1String("Grid size: ") + QString::number(m_gridSize), Qt::AlignBottom | Qt::AlignLeft); } @@ -307,99 +303,88 @@ void QPixelTool::mouseReleaseEvent(QMouseEvent *) m_mouseDown = false; } +static QAction *addCheckableAction(QMenu &menu, const QString &title, + bool value, const QKeySequence &key) +{ + QAction *result = menu.addAction(title); + result->setCheckable(true); + result->setChecked(value); + result->setShortcut(key); + return result; +} + +static QAction *addCheckableAction(QMenu &menu, const QString &title, + bool value, const QKeySequence &key, + QActionGroup *group) +{ + QAction *result = addCheckableAction(menu, title, value, key); + result->setActionGroup(group); + return result; +} + void QPixelTool::contextMenuEvent(QContextMenuEvent *e) { - bool tmpFreeze = m_freeze; + const bool tmpFreeze = m_freeze; m_freeze = true; QMenu menu; - - QAction title(QLatin1String("Qt Pixel Zooming Tool"), &menu); - title.setEnabled(false); + menu.addAction(QLatin1String("Qt Pixel Zooming Tool"))->setEnabled(false); + menu.addSeparator(); // Grid color options... - QActionGroup gridGroup(this); - QAction whiteGrid(QLatin1String("White grid"), &gridGroup); - whiteGrid.setCheckable(true); - whiteGrid.setChecked(m_gridActive == 2); - whiteGrid.setShortcut(QKeySequence(Qt::Key_G)); - QAction blackGrid(QLatin1String("Black grid"), &gridGroup); - blackGrid.setCheckable(true); - blackGrid.setChecked(m_gridActive == 1); - blackGrid.setShortcut(QKeySequence(Qt::Key_G)); - QAction noGrid(QLatin1String("No grid"), &gridGroup); - noGrid.setCheckable(true); - noGrid.setChecked(m_gridActive == 0); - noGrid.setShortcut(QKeySequence(Qt::Key_G)); + QActionGroup *gridGroup = new QActionGroup(&menu); + addCheckableAction(menu, QLatin1String("White grid"), m_gridActive == 2, + Qt::Key_W, gridGroup); + QAction *blackGrid = addCheckableAction(menu, QLatin1String("Black grid"), + m_gridActive == 1, Qt::Key_B, gridGroup); + QAction *noGrid = addCheckableAction(menu, QLatin1String("No grid"), m_gridActive == 0, + Qt::Key_N, gridGroup); + menu.addSeparator(); // Grid size options - QAction incrGrid(QLatin1String("Increase grid size"), &menu); - incrGrid.setShortcut(QKeySequence(Qt::Key_PageUp)); - connect(&incrGrid, SIGNAL(triggered()), this, SLOT(increaseGridSize())); - QAction decrGrid(QLatin1String("Decrease grid size"), &menu); - decrGrid.setShortcut(QKeySequence(Qt::Key_PageDown)); - connect(&decrGrid, SIGNAL(triggered()), this, SLOT(decreaseGridSize())); + menu.addAction(QLatin1String("Increase grid size"), + this, &QPixelTool::increaseGridSize, Qt::Key_PageUp); + menu.addAction(QLatin1String("Decrease grid size"), + this, &QPixelTool::decreaseGridSize, Qt::Key_PageDown); + menu.addSeparator(); // Zoom options - QAction incrZoom(QLatin1String("Zoom in"), &menu); - incrZoom.setShortcut(QKeySequence(Qt::Key_Plus)); - connect(&incrZoom, SIGNAL(triggered()), this, SLOT(increaseZoom())); - QAction decrZoom(QLatin1String("Zoom out"), &menu); - decrZoom.setShortcut(QKeySequence(Qt::Key_Minus)); - connect(&decrZoom, SIGNAL(triggered()), this, SLOT(decreaseZoom())); + menu.addAction(QLatin1String("Zoom in"), + this, &QPixelTool::increaseZoom, Qt::Key_Plus); + menu.addAction(QLatin1String("Zoom out"), + this, &QPixelTool::decreaseZoom, Qt::Key_Minus); + menu.addSeparator(); // Freeze / Autoupdate - QAction freeze(QLatin1String("Frozen"), &menu); - freeze.setCheckable(true); - freeze.setChecked(tmpFreeze); - freeze.setShortcut(QKeySequence(Qt::Key_Space)); - QAction autoUpdate(QLatin1String("Continuous update"), &menu); - autoUpdate.setCheckable(true); - autoUpdate.setChecked(m_autoUpdate); - autoUpdate.setShortcut(QKeySequence(Qt::Key_A)); + QAction *freeze = addCheckableAction(menu, QLatin1String("Frozen"), + tmpFreeze, Qt::Key_Space); + QAction *autoUpdate = addCheckableAction(menu, QLatin1String("Continuous update"), + m_autoUpdate, Qt::Key_A); + menu.addSeparator(); // Copy to clipboard / save - QAction save(QLatin1String("Save as image"), &menu); - save.setShortcut(QKeySequence(QLatin1String("Ctrl+S"))); - connect(&save, SIGNAL(triggered()), this, SLOT(saveToFile())); + menu.addAction(QLatin1String("Save as image..."), + this, &QPixelTool::saveToFile, QKeySequence::SaveAs); #ifndef QT_NO_CLIPBOARD - QAction copy(QLatin1String("Copy to clipboard"), &menu); - copy.setShortcut(QKeySequence(QLatin1String("Ctrl+C"))); - connect(©, SIGNAL(triggered()), this, SLOT(copyToClipboard())); + menu.addAction(QLatin1String("Copy to clipboard"), + this, &QPixelTool::copyToClipboard, QKeySequence::Copy); #endif - menu.addAction(&title); - menu.addSeparator(); - menu.addAction(&whiteGrid); - menu.addAction(&blackGrid); - menu.addAction(&noGrid); - menu.addSeparator(); - menu.addAction(&incrGrid); - menu.addAction(&decrGrid); - menu.addSeparator(); - menu.addAction(&incrZoom); - menu.addAction(&decrZoom); menu.addSeparator(); - menu.addAction(&freeze); - menu.addAction(&autoUpdate); - menu.addSeparator(); - menu.addAction(&save); -#ifndef QT_NO_CLIPBOARD - menu.addAction(©); -#endif + menu.addAction(QLatin1String("About Qt"), qApp, &QApplication::aboutQt); menu.exec(mapToGlobal(e->pos())); // Read out grid settings - if (noGrid.isChecked()) m_gridActive = 0; - else if (blackGrid.isChecked()) m_gridActive = 1; - else m_gridActive = 2; - - m_autoUpdate = autoUpdate.isChecked(); - tmpFreeze = freeze.isChecked(); - + if (noGrid->isChecked()) + m_gridActive = 0; + else if (blackGrid->isChecked()) + m_gridActive = 1; + else + m_gridActive = 2; - m_freeze = tmpFreeze; + m_autoUpdate = autoUpdate->isChecked(); + m_freeze = freeze->isChecked(); } QSize QPixelTool::sizeHint() const @@ -407,6 +392,17 @@ QSize QPixelTool::sizeHint() const return m_initialSize; } +static inline QString pixelToolTitle(QPoint pos) +{ + if (QHighDpiScaling::isActive()) { + const int screenNumber = QApplication::desktop()->screenNumber(pos); + pos = QHighDpi::toNativePixels(pos, QGuiApplication::screens().at(screenNumber)); + } + return QCoreApplication::applicationName() + QLatin1String(" [") + + QString::number(pos.x()) + + QLatin1String(", ") + QString::number(pos.y()) + QLatin1Char(']'); +} + void QPixelTool::grabScreen() { if (m_preview_mode) { @@ -421,10 +417,8 @@ void QPixelTool::grabScreen() if (mousePos == m_lastMousePos && !m_autoUpdate) return; - if (m_lastMousePos != mousePos) { - setWindowTitle(QString::fromLatin1("PixelTool [%1, %2] ") - .arg(mousePos.x()).arg(mousePos.y())); - } + if (m_lastMousePos != mousePos) + setWindowTitle(pixelToolTitle(mousePos)); int w = int(width() / float(m_zoom)); int h = int(height() / float(m_zoom)); @@ -437,13 +431,15 @@ void QPixelTool::grabScreen() int x = mousePos.x() - w/2; int y = mousePos.y() - h/2; - QScreen *screen = qApp->screens().at(qApp->desktop()->screenNumber()); - m_buffer = screen->grabWindow(qApp->desktop()->winId(), x, y, w, h); + const QDesktopWidget *desktopWidget = QApplication::desktop(); + + QScreen *screen = QGuiApplication::screens().at(desktopWidget->screenNumber(this)); + m_buffer = screen->grabWindow(desktopWidget->winId(), x, y, w, h); QRegion geom(x, y, w, h); QRect screenRect; - for (int i=0; i<qApp->desktop()->numScreens(); ++i) - screenRect |= qApp->desktop()->screenGeometry(i); + for (int i = 0; i < desktopWidget->numScreens(); ++i) + screenRect |= desktopWidget->screenGeometry(i); geom -= screenRect; QVector<QRect> rects = geom.rects(); if (rects.size() > 0) { @@ -524,8 +520,7 @@ void QPixelTool::setGridSize(int gridSize) #ifndef QT_NO_CLIPBOARD void QPixelTool::copyToClipboard() { - QClipboard *cb = QApplication::clipboard(); - cb->setPixmap(m_buffer); + QGuiApplication::clipboard()->setPixmap(m_buffer); } #endif @@ -533,11 +528,26 @@ void QPixelTool::saveToFile() { bool oldFreeze = m_freeze; m_freeze = true; - QString name = QFileDialog::getSaveFileName(this, QLatin1String("Save as image"), QString(), QLatin1String("*.png")); - if (!name.isEmpty()) { - if (!name.endsWith(QLatin1String(".png"))) - name.append(QLatin1String(".png")); - m_buffer.save(name, "PNG"); + + QFileDialog fileDialog(this); + fileDialog.setWindowTitle(QLatin1String("Save as image")); + fileDialog.setAcceptMode(QFileDialog::AcceptSave); + fileDialog.setDirectory(QStandardPaths::writableLocation(QStandardPaths::PicturesLocation)); + QStringList mimeTypes; + foreach (const QByteArray &mimeTypeB, QImageWriter::supportedMimeTypes()) + mimeTypes.append(QString::fromLatin1(mimeTypeB)); + fileDialog.setMimeTypeFilters(mimeTypes); + const QString pngType = QLatin1String("image/png"); + if (mimeTypes.contains(pngType)) { + fileDialog.selectMimeTypeFilter(pngType); + fileDialog.setDefaultSuffix(QLatin1String("png")); + } + + while (fileDialog.exec() == QDialog::Accepted + && !m_buffer.save(fileDialog.selectedFiles().first())) { + QMessageBox::warning(this, QLatin1String("Unable to write image"), + QLatin1String("Unable to write ") + + QDir::toNativeSeparators(fileDialog.selectedFiles().first())); } m_freeze = oldFreeze; } diff --git a/src/pixeltool/qpixeltool.h b/src/pixeltool/qpixeltool.h index 71be2ee6d..2b62daa78 100644 --- a/src/pixeltool/qpixeltool.h +++ b/src/pixeltool/qpixeltool.h @@ -43,23 +43,13 @@ class QPixelTool : public QWidget { Q_OBJECT public: - QPixelTool(QWidget *parent = 0); + explicit QPixelTool(QWidget *parent = Q_NULLPTR); ~QPixelTool(); - void timerEvent(QTimerEvent *event); - void paintEvent(QPaintEvent *event); - void keyPressEvent(QKeyEvent *event); - void keyReleaseEvent(QKeyEvent *event); - void resizeEvent(QResizeEvent *event); - void mouseMoveEvent(QMouseEvent *event); - void mousePressEvent(QMouseEvent *event); - void mouseReleaseEvent(QMouseEvent *event); - void contextMenuEvent(QContextMenuEvent *event); - - QSize sizeHint() const; - void setPreviewImage(const QImage &image); + QSize sizeHint() const Q_DECL_OVERRIDE; + public slots: void setZoom(int zoom); void setGridSize(int gridSize); @@ -75,6 +65,17 @@ public slots: void increaseZoom() { setZoom(m_zoom + 1); } void decreaseZoom() { setZoom(m_zoom - 1); } +protected: + void timerEvent(QTimerEvent *event) Q_DECL_OVERRIDE; + void paintEvent(QPaintEvent *event) Q_DECL_OVERRIDE; + void keyPressEvent(QKeyEvent *event) Q_DECL_OVERRIDE; + void keyReleaseEvent(QKeyEvent *event) Q_DECL_OVERRIDE; + void resizeEvent(QResizeEvent *event) Q_DECL_OVERRIDE; + void mouseMoveEvent(QMouseEvent *event) Q_DECL_OVERRIDE; + void mousePressEvent(QMouseEvent *event) Q_DECL_OVERRIDE; + void mouseReleaseEvent(QMouseEvent *event) Q_DECL_OVERRIDE; + void contextMenuEvent(QContextMenuEvent *event) Q_DECL_OVERRIDE; + private: void grabScreen(); void startZoomVisibleTimer(); diff --git a/src/qconfig/main.cpp b/src/qconfig/main.cpp index 2d2668b3a..453cb6060 100644 --- a/src/qconfig/main.cpp +++ b/src/qconfig/main.cpp @@ -511,7 +511,7 @@ void Main::about() "<p><b><font size=\"+2\">Qtopia Core build configuration</font></b></p>" "<p></p>" "<p>Version 2.0</p>" - "<p>Copyright (C) 2015 The Qt Company Ltd.</p>" + "<p>Copyright (C) 2016 The Qt Company Ltd.</p>" "<p></p>" ); } diff --git a/src/qdbus/qdbusviewer/mainwindow.cpp b/src/qdbus/qdbusviewer/mainwindow.cpp index 9c02f6384..d57c61e57 100644 --- a/src/qdbus/qdbusviewer/mainwindow.cpp +++ b/src/qdbus/qdbusviewer/mainwindow.cpp @@ -95,7 +95,7 @@ void MainWindow::about() "<h3>%1</h3>" "<p>Version %2</p></center>" "<p>Copyright (C) %3 The Qt Company Ltd.</p>") - .arg(tr("D-Bus Viewer"), QLatin1String(QT_VERSION_STR), QStringLiteral("2015"))); + .arg(tr("D-Bus Viewer"), QLatin1String(QT_VERSION_STR), QStringLiteral("2016"))); box.setWindowTitle(tr("D-Bus Viewer")); box.exec(); } diff --git a/src/qdoc/doc/qdoc-manual-markupcmds.qdoc b/src/qdoc/doc/qdoc-manual-markupcmds.qdoc index 2e82ad123..8a682affe 100644 --- a/src/qdoc/doc/qdoc-manual-markupcmds.qdoc +++ b/src/qdoc/doc/qdoc-manual-markupcmds.qdoc @@ -3888,7 +3888,7 @@ <author>Qt Development Frameworks</author> <publisher>Qt Project</publisher> <copyright> - <copyryear year="2015"/> + <copyryear year="2016"/> <copyrholder>Qt Project</copyrholder> </copyright> <permissions view="all"/> diff --git a/src/qdoc/doc/qdoc-manual-qdocconf.qdoc b/src/qdoc/doc/qdoc-manual-qdocconf.qdoc index bb4d9af47..57e6a1cb8 100644 --- a/src/qdoc/doc/qdoc-manual-qdocconf.qdoc +++ b/src/qdoc/doc/qdoc-manual-qdocconf.qdoc @@ -1700,7 +1700,7 @@ dita.metadata.default.author = Qt Development Frameworks dita.metadata.default.permissions = all dita.metadata.default.publisher = Qt Project - dita.metadata.default.copyryear = 2015 + dita.metadata.default.copyryear = 2016 dita.metadata.default.copyrholder = Qt Project dita.metadata.default.audience = programmer \endcode diff --git a/src/qtdiag/main.cpp b/src/qtdiag/main.cpp index 6bc42bc2c..7e304d401 100644 --- a/src/qtdiag/main.cpp +++ b/src/qtdiag/main.cpp @@ -53,14 +53,18 @@ int main(int argc, char **argv) QCommandLineParser commandLineParser; const QCommandLineOption noGlOption(QStringLiteral("no-gl"), QStringLiteral("Do not output GL information")); const QCommandLineOption glExtensionOption(QStringLiteral("gl-extensions"), QStringLiteral("List GL extensions")); + const QCommandLineOption fontOption(QStringLiteral("fonts"), QStringLiteral("Output list of fonts")); commandLineParser.setApplicationDescription(QStringLiteral("Prints diagnostic output about the Qt library.")); commandLineParser.addOption(noGlOption); commandLineParser.addOption(glExtensionOption); + commandLineParser.addOption(fontOption); commandLineParser.addHelpOption(); commandLineParser.process(app); unsigned flags = commandLineParser.isSet(noGlOption) ? 0u : unsigned(QtDiagGl); if (commandLineParser.isSet(glExtensionOption)) flags |= QtDiagGlExtensions; + if (commandLineParser.isSet(fontOption)) + flags |= QtDiagFonts; std::wcout << qtDiag(flags).toStdWString(); return 0; diff --git a/src/qtdiag/qtdiag.cpp b/src/qtdiag/qtdiag.cpp index 4e9a25f28..310cbea08 100644 --- a/src/qtdiag/qtdiag.cpp +++ b/src/qtdiag/qtdiag.cpp @@ -113,6 +113,16 @@ QTextStream &operator<<(QTextStream &str, const QFont &f) return str; } +QTextStream &operator<<(QTextStream &str, QPlatformScreen::SubpixelAntialiasingType st) +{ + static const char *enumValues[] = { + "Subpixel_None", "Subpixel_RGB", "Subpixel_BGR", "Subpixel_VRGB", "Subpixel_VBGR" + }; + str << (size_t(st) < sizeof(enumValues) / sizeof(enumValues[0]) + ? enumValues[st] : "<Unknown>"); + return str; +} + #ifndef QT_NO_OPENGL QTextStream &operator<<(QTextStream &str, const QSurfaceFormat &format) @@ -222,6 +232,18 @@ static QString formatQDebug(T t) return result; } +// Helper to format a type via QDebug, stripping the class name. +template <class T> +static QString formatValueQDebug(T t) +{ + QString result = formatQDebug(t).trimmed(); + if (result.endsWith(QLatin1Char(')'))) { + result.chop(1); + result.remove(0, result.indexOf(QLatin1Char('(')) + 1); + } + return result; +} + static inline QByteArrayList qtFeatures() { QByteArrayList result; @@ -445,11 +467,7 @@ QString qtDiag(unsigned flags) << " from " << platformTheme->themeHint(QPlatformTheme::IconThemeSearchPaths).toStringList() << '\n'; } if (const QFont *systemFont = platformTheme->font()) - str << " System font : " << *systemFont<< '\n'; - str << " General font : " << QFontDatabase::systemFont(QFontDatabase::GeneralFont) << '\n' - << " Fixed font : " << QFontDatabase::systemFont(QFontDatabase::FixedFont) << '\n' - << " Title font : " << QFontDatabase::systemFont(QFontDatabase::TitleFont) << '\n' - << " Smallest font: " << QFontDatabase::systemFont(QFontDatabase::SmallestReadableFont) << '\n'; + str << "\n System font : " << *systemFont<< '\n'; if (platformTheme->usePlatformNativeDialog(QPlatformTheme::FileDialog)) str << " Native file dialog\n"; @@ -460,6 +478,27 @@ QString qtDiag(unsigned flags) if (platformTheme->usePlatformNativeDialog(QPlatformTheme::MessageDialog)) str << " Native message dialog\n"; + str << "\nFonts:\n General font : " << QFontDatabase::systemFont(QFontDatabase::GeneralFont) << '\n' + << " Fixed font : " << QFontDatabase::systemFont(QFontDatabase::FixedFont) << '\n' + << " Title font : " << QFontDatabase::systemFont(QFontDatabase::TitleFont) << '\n' + << " Smallest font: " << QFontDatabase::systemFont(QFontDatabase::SmallestReadableFont) << '\n'; + if (flags & QtDiagFonts) { + QFontDatabase fontDatabase; + const QStringList families = fontDatabase.families(); + str << "\n Families (" << families.size() << "):\n"; + for (int i = 0, count = families.size(); i < count; ++i) + str << " " << families.at(i) << '\n'; + + const QList<int> standardSizes = QFontDatabase::standardSizes(); + str << "\n Standard Sizes:"; + for (int i = 0, count = standardSizes.size(); i < count; ++i) + str << ' ' << standardSizes.at(i); + QList<QFontDatabase::WritingSystem> writingSystems = fontDatabase.writingSystems(); + str << "\n\n Writing systems:\n"; + for (int i = 0, count = writingSystems.size(); i < count; ++i) + str << " " << formatValueQDebug(writingSystems.at(i)) << '\n'; + } + const QList<QScreen*> screens = QGuiApplication::screens(); const int screenCount = screens.size(); str << "\nScreens: " << screenCount << ", High DPI scaling: " @@ -490,7 +529,7 @@ QString qtDiag(unsigned flags) << " Logical DPI: " << dpi; if (dpi != nativeDpi) str << " (native: " << nativeDpi << ')'; - str << "\n "; + str << ' ' << platformScreen->subpixelAntialiasingTypeHint() << "\n "; if (QHighDpiScaling::isActive()) str << "High DPI scaling factor: " << QHighDpiScaling::factor(screen) << ' '; str << "DevicePixelRatio: " << screen->devicePixelRatio() diff --git a/src/qtdiag/qtdiag.h b/src/qtdiag/qtdiag.h index 9076c9b7e..3729a53a4 100644 --- a/src/qtdiag/qtdiag.h +++ b/src/qtdiag/qtdiag.h @@ -40,7 +40,8 @@ QT_BEGIN_NAMESPACE enum QtDiagFlags { QtDiagGl = 0x1, - QtDiagGlExtensions = 0x2 + QtDiagGlExtensions = 0x2, + QtDiagFonts = 0x4 }; QString qtDiag(unsigned flags = 0); |