Merge remote-tracking branch 'origin/6.0' into qds-2.3

Change-Id: I540441b954a176aabd236cfc7e07e24df7b6592a
This commit is contained in:
Tim Jenssen
2021-12-03 00:59:34 +01:00
33 changed files with 171 additions and 138 deletions

View File

@@ -1,6 +1,6 @@
set(IDE_VERSION "6.0.0") # The IDE version.
set(IDE_VERSION "6.0.1") # The IDE version.
set(IDE_VERSION_COMPAT "6.0.0") # The IDE Compatibility version.
set(IDE_VERSION_DISPLAY "6.0.0") # The IDE display version.
set(IDE_VERSION_DISPLAY "6.0.1") # The IDE display version.
set(IDE_COPYRIGHT_YEAR "2021") # The IDE current copyright year.
set(IDE_SETTINGSVARIANT "QtProject") # The IDE settings variation.

View File

@@ -3,10 +3,10 @@ import qbs.Environment
import qbs.FileInfo
Module {
property string qtcreator_display_version: '6.0.0'
property string qtcreator_display_version: '6.0.1'
property string ide_version_major: '6'
property string ide_version_minor: '0'
property string ide_version_release: '0'
property string ide_version_release: '1'
property string qtcreator_version: ide_version_major + '.' + ide_version_minor + '.'
+ ide_version_release

View File

@@ -1,6 +1,6 @@
QTCREATOR_VERSION = 6.0.0
QTCREATOR_VERSION = 6.0.1
QTCREATOR_COMPAT_VERSION = 6.0.0
QTCREATOR_DISPLAY_VERSION = 6.0.0
QTCREATOR_DISPLAY_VERSION = 6.0.1
QTCREATOR_COPYRIGHT_YEAR = 2021
IDE_DISPLAY_NAME = Qt Creator

View File

@@ -31,8 +31,6 @@ AnimationDriver::AnimationDriver(QObject *parent)
{
setProperty("allowNegativeDelta", true);
install();
connect(this, SIGNAL(started()), this, SLOT(startTimer()));
connect(this, SIGNAL(stopped()), this, SLOT(stopTimer()));
}
AnimationDriver::~AnimationDriver()
@@ -49,10 +47,13 @@ void AnimationDriver::timerEvent(QTimerEvent *e)
// Provide same time for all users
if (m_seekerEnabled) {
m_seekerElapsed += (m_seekerPos * 100) / 30;
if (m_seekerElapsed + m_elapsed < -100) // -100 to allow small negative value
m_seekerElapsed = -m_elapsed - 100;
if (m_seekerElapsed + m_elapsed - m_pauseTime < -100) // -100 to allow small negative value
m_seekerElapsed = -(m_elapsed - m_pauseTime) - 100;
} else {
m_elapsed = QAnimationDriver::elapsed();
if (!m_elapsedTimer.isValid())
m_elapsedTimer.restart();
else
m_elapsed = m_elapsedTimer.elapsed();
}
m_delta = elapsed() - old;
advance();
@@ -75,7 +76,7 @@ void AnimationDriver::setSeekerPosition(int position)
return;
if (!m_timer.isActive())
restart();
startTimer();
m_seekerPos = position;
}

View File

@@ -27,6 +27,7 @@
#include <qabstractanimation.h>
#include <QtCore/qbasictimer.h>
#include <QtCore/qelapsedtimer.h>
#include <QtCore/qmath.h>
class AnimationDriver : public QAnimationDriver
@@ -46,17 +47,34 @@ public:
}
void reset()
{
stop();
m_elapsedTimer.invalidate();
m_pauseBegin = 0;
m_pauseTime = 0;
m_elapsed = 0;
m_seekerElapsed = 0;
stopTimer();
}
void restart()
{
start();
m_pauseTime = 0;
m_elapsed = 0;
m_seekerElapsed = 0;
startTimer();
}
void pause()
{
m_pauseBegin = m_elapsedTimer.elapsed();
stopTimer();
}
void play()
{
if (m_elapsedTimer.isValid())
m_pauseTime += m_elapsedTimer.elapsed() - m_pauseBegin;
startTimer();
}
qint64 elapsed() const override
{
return m_elapsed + m_seekerElapsed;
return m_elapsed + m_seekerElapsed - m_pauseTime;
}
void setSeekerPosition(int position);
void setSeekerEnabled(bool enable)
@@ -79,10 +97,13 @@ private:
Q_SLOT void stopTimer();
QBasicTimer m_timer;
QElapsedTimer m_elapsedTimer;
int m_interval = 16;
int m_seekerPos = 0;
bool m_seekerEnabled = false;
qint64 m_elapsed = 0;
qint64 m_seekerElapsed = 0;
qint64 m_delta = 0;
qint64 m_pauseTime = 0;
qint64 m_pauseBegin = 0;
};

View File

@@ -2078,21 +2078,21 @@ void Qt5InformationNodeInstanceServer::view3DAction(const View3DActionCommand &c
m_particleAnimationPlaying = command.isEnabled();
updatedState.insert("particlePlay", command.isEnabled());
if (m_particleAnimationPlaying) {
m_particleAnimationDriver->reset();
m_particleAnimationDriver->restart();
m_particleAnimationDriver->play();
m_particleAnimationDriver->setSeekerEnabled(false);
m_particleAnimationDriver->setSeekerPosition(0);
} else {
m_particleAnimationDriver->reset();
m_particleAnimationDriver->pause();
m_particleAnimationDriver->setSeekerEnabled(true);
}
break;
case View3DActionCommand::ParticlesRestart:
resetParticleSystem();
m_particleAnimationPlaying = true;
m_particleAnimationDriver->restart();
m_particleAnimationDriver->setSeekerEnabled(false);
m_particleAnimationDriver->setSeekerPosition(0);
if (m_particleAnimationPlaying) {
m_particleAnimationDriver->restart();
m_particleAnimationDriver->setSeekerEnabled(false);
m_particleAnimationDriver->setSeekerPosition(0);
}
break;
case View3DActionCommand::ParticlesSeek:
m_particleAnimationDriver->setSeekerPosition(static_cast<const View3DSeekActionCommand &>(command).position());

View File

@@ -61,6 +61,10 @@
#include <private/qqmlmetatype_p.h>
#include <private/qqmltimer_p.h>
#ifdef QUICK3D_MODULE
#include <private/qquick3dobject_p.h>
#endif
namespace QmlDesigner {
namespace Internal {
@@ -374,6 +378,11 @@ void doComponentCompleteRecursive(QObject *object, NodeInstanceServer *nodeInsta
if (item && DesignerSupport::isComponentComplete(item))
return;
#ifdef QUICK3D_MODULE
auto obj3d = qobject_cast<QQuick3DObject *>(object);
if (obj3d && QQuick3DObjectPrivate::get(obj3d)->componentComplete)
return;
#endif
if (!nodeInstanceServer->hasInstanceForObject(item))
emitComponentComplete(object);

View File

@@ -1,67 +0,0 @@
/****************************************************************************
**
** Copyright (C) 2021 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of Qt Creator.
**
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 as published by the Free Software
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
****************************************************************************/
import QtQuick 2.15
import QtQuick.Layouts 1.15
import HelperWidgets 2.0
import StudioControls 1.0 as StudioControls
import StudioTheme 1.0 as StudioTheme
Section {
caption: qsTr("Audio")
anchors.left: parent.left
anchors.right: parent.right
SectionLayout {
PropertyLabel { text: qsTr("Volume") }
SecondColumnLayout {
SpinBox {
implicitWidth: StudioTheme.Values.twoControlColumnWidth
+ StudioTheme.Values.actionIndicatorWidth
backendValue: backendValues.volume
decimals: 1
minimumValue: 0.0
maximumValue: 1.0
}
ExpandingSpacer {}
}
PropertyLabel { text: qsTr("Muted") }
SecondColumnLayout {
CheckBox {
implicitWidth: StudioTheme.Values.twoControlColumnWidth
+ StudioTheme.Values.actionIndicatorWidth
backendValue: backendValues.muted
text: backendValues.muted.valueToString
}
ExpandingSpacer {}
}
}
}

View File

@@ -52,5 +52,41 @@ Section {
ExpandingSpacer {}
}
PropertyLabel {
text: qsTr("Audio Output")
tooltip: qsTr("Holds the target audio output.")
}
SecondColumnLayout {
ItemFilterComboBox {
implicitWidth: StudioTheme.Values.singleControlColumnWidth
+ StudioTheme.Values.actionIndicatorWidth
width: implicitWidth
typeFilter: "QtQuick.AudioOutput"
validator: RegExpValidator { regExp: /(^$|^[a-z_]\w*)/ }
backendValue: backendValues.audioOutput
}
ExpandingSpacer {}
}
PropertyLabel {
text: qsTr("Video Output")
tooltip: qsTr("Holds the target video output.")
}
SecondColumnLayout {
ItemFilterComboBox {
implicitWidth: StudioTheme.Values.singleControlColumnWidth
+ StudioTheme.Values.actionIndicatorWidth
width: implicitWidth
typeFilter: "QtQuick.VideoOutput"
validator: RegExpValidator { regExp: /(^$|^[a-z_]\w*)/ }
backendValue: backendValues.videoOutput
}
ExpandingSpacer {}
}
}
}

View File

@@ -23,13 +23,15 @@
**
****************************************************************************/
import QtQuick 2.0
import QtMultimedia 6.0
import QtQuick 2.15
import QtQuick.Layouts 1.15
import HelperWidgets 2.0
import StudioControls 1.0 as StudioControls
import StudioTheme 1.0 as StudioTheme
MediaPlayer {
audioOutput: output
Column {
anchors.left: parent.left
anchors.right: parent.right
AudioOutput {
id: output
}
VideoSection {}
}

View File

@@ -31,7 +31,7 @@ if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/qlitehtml/src/CMakeLists.txt)
set(QLITEHTML_DEVEL_EXCLUDE_FROM_ALL ON)
set(QLITEHTML_HEADER_PATH "${IDE_HEADER_INSTALL_PATH}/src/lib/qlitehtml")
set(QT_VERSION_MAJOR ${Qt5_VERSION_MAJOR})
set(BUILD_TESTING OFF) # otherwise litehtml downloads googletest
option(BUILD_TESTING "Build litehtml tests" OFF) # otherwise litehtml downloads googletest
add_subdirectory(qlitehtml/src)
endif()
if(TARGET qlitehtml)

View File

@@ -1236,7 +1236,11 @@ bool Check::visit(FunctionExpression *ast)
}
}
addMessage(ErrFunctionsNotSupportedInQmlUi, locationFromRange(locfunc, loclparen));
const bool isDirectInConnectionsScope =
(!m_typeStack.isEmpty() && m_typeStack.last() == "Connections");
if (!isDirectInConnectionsScope)
addMessage(ErrFunctionsNotSupportedInQmlUi, locationFromRange(locfunc, loclparen));
DeclarationsCheck bodyCheck;
addMessages(bodyCheck(ast));

View File

@@ -325,6 +325,13 @@ int main(int argc, char *argv[])
kill(chldPid, SIGKILL);
}
break;
case 'i':
if (chldPid > 0) {
int res = kill(chldPid, SIGINT);
if (res)
perror("Stub could not interrupt inferior");
}
break;
case 'c': {
int res = write(blockingPipe[1], &c, 1);
if (res < 0)

View File

@@ -590,7 +590,7 @@ FilePath AndroidConfig::openJDKBinPath() const
FilePath AndroidConfig::keytoolPath() const
{
return openJDKBinPath().pathAppended(keytoolName);
return openJDKBinPath().pathAppended(keytoolName).withExecutableSuffix();
}
QVector<AndroidDeviceInfo> AndroidConfig::connectedDevices(QString *error) const

View File

@@ -805,6 +805,13 @@ static bool isDocker(const Kit *k)
return DeviceTypeKitAspect::deviceTypeId(k) == Docker::Constants::DOCKER_DEVICE_TYPE;
}
static bool isWindowsARM64(const Kit *k)
{
const auto targetAbi = ToolChainKitAspect::cxxToolChain(k)->targetAbi();
return targetAbi.os() == Abi::WindowsOS && targetAbi.architecture() == Abi::ArmArchitecture
&& targetAbi.wordWidth() == 64;
}
static QStringList defaultInitialCMakeArguments(const Kit *k, const QString buildType)
{
// Generator:
@@ -991,7 +998,7 @@ CMakeBuildConfiguration::CMakeBuildConfiguration(Target *target, Id id)
initialArgs.append("%{" + QLatin1String(CMAKE_OSX_ARCHITECTURES_FLAG) + "}");
}
if (isWebAssembly(k) || isQnx(k)) {
if (isWebAssembly(k) || isQnx(k) || isWindowsARM64(k)) {
const QtSupport::BaseQtVersion *qt = QtSupport::QtKitAspect::qtVersion(k);
if (qt && qt->qtVersion().majorVersion >= 6)
initialArgs.append(CMAKE_QT6_TOOLCHAIN_FILE_ARG);

View File

@@ -221,6 +221,7 @@ const int priorityLast = 60;
const char addImagesDisplayString[] = QT_TRANSLATE_NOOP("QmlDesignerAddResources", "Image Files");
const char addFontsDisplayString[] = QT_TRANSLATE_NOOP("QmlDesignerAddResources", "Font Files");
const char addSoundsDisplayString[] = QT_TRANSLATE_NOOP("QmlDesignerAddResources", "Sound Files");
const char addVideosDisplayString[] = QT_TRANSLATE_NOOP("QmlDesignerAddResources", "Video Files");
const char addShadersDisplayString[] = QT_TRANSLATE_NOOP("QmlDesignerAddResources", "Shader Files");
const char add3DAssetsDisplayString[] = QT_TRANSLATE_NOOP("QmlDesignerAddResources", "3D Assets");
const char addQt3DSPresentationsDisplayString[] = QT_TRANSLATE_NOOP("QmlDesignerAddResources",

View File

@@ -1557,12 +1557,15 @@ void DesignerActionManager::createDefaultAddResourceHandler()
registerHandlers({"*.otf", "*.ttf"},
ModelNodeOperations::addFontToProject,
ComponentCoreConstants::addFontsDisplayString);
registerHandlers({"*.wav"},
registerHandlers({"*.wav", "*.mp3"},
ModelNodeOperations::addSoundToProject,
ComponentCoreConstants::addSoundsDisplayString);
registerHandlers({"*.glsl", "*.glslv", "*.glslf", "*.vsh", "*.fsh", "*.vert", "*.frag"},
ModelNodeOperations::addShaderToProject,
ComponentCoreConstants::addShadersDisplayString);
registerHandlers({"*.mp4"},
ModelNodeOperations::addVideoToProject,
ComponentCoreConstants::addVideosDisplayString);
}
void DesignerActionManager::createDefaultModelNodePreviewImageHandlers()

View File

@@ -1077,6 +1077,11 @@ AddFilesResult addImageToProject(const QStringList &fileNames, const QString &de
return addFilesToProject(fileNames, getAssetDefaultDirectory("images", defaultDirectory));
}
AddFilesResult addVideoToProject(const QStringList &fileNames, const QString &defaultDirectory)
{
return addFilesToProject(fileNames, getAssetDefaultDirectory("videos", defaultDirectory));
}
void createFlowActionArea(const SelectionContext &selectionContext)
{
AbstractView *view = selectionContext.view();

View File

@@ -80,6 +80,7 @@ AddFilesResult addImageToProject(const QStringList &fileNames, const QString &di
AddFilesResult addFontToProject(const QStringList &fileNames, const QString &directory);
AddFilesResult addSoundToProject(const QStringList &fileNames, const QString &directory);
AddFilesResult addShaderToProject(const QStringList &fileNames, const QString &directory);
AddFilesResult addVideoToProject(const QStringList &fileNames, const QString &directory);
void createFlowActionArea(const SelectionContext &selectionContext);
void addTransition(const SelectionContext &selectionState);
void addFlowEffect(const SelectionContext &selectionState, const TypeName &typeName);

View File

@@ -305,12 +305,6 @@ void Edit3DView::createEdit3DActions()
resetPuppet();
};
SelectionContextOperation particlesRestartTrigger = [this](const SelectionContext &) {
m_particlesPlayAction->action()->setChecked(true);
if (m_seeker)
m_seeker->setEnabled(false);
};
SelectionContextOperation particlesPlayTrigger = [this](const SelectionContext &) {
if (m_seeker)
m_seeker->setEnabled(!m_particlesPlayAction->action()->isChecked());
@@ -334,7 +328,7 @@ void Edit3DView::createEdit3DActions()
QmlDesigner::Constants::EDIT3D_PARTICLES_RESTART, View3DActionCommand::ParticlesRestart,
QCoreApplication::translate("ParticlesRestartAction", "Restart Particles"),
QKeySequence(Qt::Key_E), false, false, Icons::EDIT3D_PARTICLE_RESTART.icon(),
Icons::EDIT3D_PARTICLE_RESTART.icon(), particlesRestartTrigger);
Icons::EDIT3D_PARTICLE_RESTART.icon());
m_particlesPlayAction->action()->setEnabled(particlemode);
m_particlesRestartAction->action()->setEnabled(particlemode);
m_resetAction

Binary file not shown.

After

Width:  |  Height:  |  Size: 286 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 399 B

View File

@@ -33,5 +33,7 @@
<file>images/x@2x.png</file>
<file>images/browse.png</file>
<file>images/browse@2x.png</file>
<file>images/item-video-icon.png</file>
<file>images/item-video-icon@2x.png</file>
</qresource>
</RCC>

View File

@@ -54,6 +54,8 @@ QPixmap ItemLibraryAssetsIconProvider::requestPixmap(const QString &id, QSize *s
pixmap = Utils::StyleHelper::dpiSpecificImageFile(":/ItemLibrary/images/asset_shader_48.png");
else if (ItemLibraryAssetsModel::supportedAudioSuffixes().contains(suffix))
pixmap = Utils::StyleHelper::dpiSpecificImageFile(":/ItemLibrary/images/asset_sound_48.png");
else if (ItemLibraryAssetsModel::supportedVideoSuffixes().contains(suffix))
pixmap = Utils::StyleHelper::dpiSpecificImageFile(":/ItemLibrary/images/item-video-icon.png");
if (size) {
size->setWidth(pixmap.width());

View File

@@ -167,7 +167,13 @@ const QStringList &ItemLibraryAssetsModel::supportedFontSuffixes()
const QStringList &ItemLibraryAssetsModel::supportedAudioSuffixes()
{
static const QStringList retList {"*.wav"};
static const QStringList retList {"*.wav", "*.mp3"};
return retList;
}
const QStringList &ItemLibraryAssetsModel::supportedVideoSuffixes()
{
static const QStringList retList {"*.mp4"};
return retList;
}
@@ -300,6 +306,7 @@ const QSet<QString> &ItemLibraryAssetsModel::supportedSuffixes() const
insertSuffixes(supportedShaderSuffixes());
insertSuffixes(supportedFontSuffixes());
insertSuffixes(supportedAudioSuffixes());
insertSuffixes(supportedVideoSuffixes());
insertSuffixes(supportedTexture3DSuffixes());
}
return allSuffixes;

View File

@@ -66,6 +66,7 @@ public:
static const QStringList &supportedShaderSuffixes();
static const QStringList &supportedFontSuffixes();
static const QStringList &supportedAudioSuffixes();
static const QStringList &supportedVideoSuffixes();
static const QStringList &supportedTexture3DSuffixes();
const QSet<QString> &previewableSuffixes() const;

View File

@@ -552,6 +552,9 @@ QPair<QString, QByteArray> ItemLibraryWidget::getAssetTypeAndData(const QString
} else if (ItemLibraryAssetsModel::supportedAudioSuffixes().contains(suffix)) {
// No extra data for sounds
return {"application/vnd.bauhaus.libraryresource.sound", {}};
} else if (ItemLibraryAssetsModel::supportedVideoSuffixes().contains(suffix)) {
// No extra data for videos
return {"application/vnd.bauhaus.libraryresource.video", {}};
} else if (ItemLibraryAssetsModel::supportedTexture3DSuffixes().contains(suffix)) {
// Data: Image format (suffix)
return {"application/vnd.bauhaus.libraryresource.texture3d", suffix.toUtf8()};

Binary file not shown.

Before

Width:  |  Height:  |  Size: 267 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 521 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.0 KiB

View File

@@ -31,7 +31,6 @@
<file>images/text-edit-icon16.png</file>
<file>images/text-input-icon16.png</file>
<file>images/webview-icon16.png</file>
<file>source/audio.qml</file>
<file>source/listview.qml</file>
<file>source/listviewv2.qml</file>
<file>source/gridview.qml</file>
@@ -84,9 +83,6 @@
<file>images/loader-icon.png</file>
<file>images/loader-icon@2x.png</file>
<file>images/loader-icon16.png</file>
<file>images/audio-16px.png</file>
<file>images/audio-24px.png</file>
<file>images/audio-24px@2x.png</file>
<file>images/audio-output-16px.png</file>
<file>images/audio-output-24px.png</file>
<file>images/audio-output-24px@2x.png</file>

View File

@@ -522,28 +522,6 @@ MetaInfo {
}
}
Type {
name: "QtMultimedia.MediaPlayer"
icon: ":/qtquickplugin/images/audio-16px.png"
Hints {
visibleInNavigator: true
canBeDroppedInNavigator: true
canBeDroppedInFormEditor: false
canBeContainer: false
}
ItemLibraryEntry {
name: "Audio"
category: "f.Qt Quick - Multimedia"
libraryIcon: ":/qtquickplugin/images/audio-24px.png"
version: "6.0"
requiredImport: "QtMultimedia"
QmlSource { source: ":/qtquickplugin/source/audio.qml" }
}
}
Type {
name: "QtMultimedia.AudioOutput"
icon: ":/qtquickplugin/images/audio-output-16px.png"
@@ -564,6 +542,26 @@ MetaInfo {
}
}
Type {
name: "QtMultimedia.VideoOutput"
icon: ":/qtquickplugin/images/video-output-16px.png"
Hints {
visibleInNavigator: true
canBeDroppedInNavigator: true
canBeDroppedInFormEditor: false
canBeContainer: false
}
ItemLibraryEntry {
name: "Video Output"
category: "f.Qt Quick - Multimedia"
libraryIcon: ":/qtquickplugin/images/video-output-24px.png"
version: "6.0"
requiredImport: "QtMultimedia"
}
}
Type {
name: "QtMultimedia.Video"
icon: ":/qtquickplugin/images/video-16px.png"

View File

@@ -6257,10 +6257,10 @@ MultiTextCursor TextEditorWidget::multiTextCursor() const
void TextEditorWidget::setMultiTextCursor(const Utils::MultiTextCursor &cursor)
{
if (d->m_cursors == cursor)
return;
MultiTextCursor oldCursor = d->m_cursors;
const MultiTextCursor oldCursor = d->m_cursors;
const_cast<MultiTextCursor &>(d->m_cursors) = cursor;
if (oldCursor == d->m_cursors)
return;
doSetTextCursor(d->m_cursors.mainCursor(), /*keepMultiSelection*/ true);
QRect updateRect = d->cursorUpdateRect(oldCursor);
if (d->m_highlightCurrentLine)