Merge remote-tracking branch 'origin/5.9' into dev
Conflicts: src/widgets/widgets/qpushbutton.cpp Change-Id: I615de00e6e64540c50f658d4d8ab3e002d701a81
This commit is contained in:
commit
0c034a649f
@ -1,31 +1,37 @@
|
|||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
**
|
**
|
||||||
** Copyright (C) 2016 Intel Corporation.
|
** Copyright (C) 2016 Intel Corporation.
|
||||||
** Contact: http://www.qt.io/licensing/
|
** Contact: https://www.qt.io/licensing/
|
||||||
**
|
**
|
||||||
** This file is part of the FOO module of the Qt Toolkit.
|
** This file is part of the FOO module of the Qt Toolkit.
|
||||||
**
|
**
|
||||||
** $QT_BEGIN_LICENSE:LGPL21$
|
** $QT_BEGIN_LICENSE:LGPL$
|
||||||
** Commercial License Usage
|
** Commercial License Usage
|
||||||
** Licensees holding valid commercial Qt licenses may use this file in
|
** Licensees holding valid commercial Qt licenses may use this file in
|
||||||
** accordance with the commercial license agreement provided with the
|
** accordance with the commercial license agreement provided with the
|
||||||
** Software or, alternatively, in accordance with the terms contained in
|
** Software or, alternatively, in accordance with the terms contained in
|
||||||
** a written agreement between you and The Qt Company. For licensing terms
|
** a written agreement between you and The Qt Company. For licensing terms
|
||||||
** and conditions see http://www.qt.io/terms-conditions. For further
|
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||||
** information use the contact form at http://www.qt.io/contact-us.
|
** information use the contact form at https://www.qt.io/contact-us.
|
||||||
**
|
**
|
||||||
** GNU Lesser General Public License Usage
|
** GNU Lesser General Public License Usage
|
||||||
** Alternatively, this file may be used under the terms of the GNU Lesser
|
** Alternatively, this file may be used under the terms of the GNU Lesser
|
||||||
** General Public License version 2.1 or version 3 as published by the Free
|
** General Public License version 3 as published by the Free Software
|
||||||
** Software Foundation and appearing in the file LICENSE.LGPLv21 and
|
** Foundation and appearing in the file LICENSE.LGPL3 included in the
|
||||||
** LICENSE.LGPLv3 included in the packaging of this file. Please review the
|
** packaging of this file. Please review the following information to
|
||||||
** following information to ensure the GNU Lesser General Public License
|
** ensure the GNU Lesser General Public License version 3 requirements
|
||||||
** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
|
** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
|
||||||
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
|
||||||
**
|
**
|
||||||
** As a special exception, The Qt Company gives you certain additional
|
** GNU General Public License Usage
|
||||||
** rights. These rights are described in The Qt Company LGPL Exception
|
** Alternatively, this file may be used under the terms of the GNU
|
||||||
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
** General Public License version 2.0 or (at your option) the GNU General
|
||||||
|
** Public license version 3 or any later version approved by the KDE Free
|
||||||
|
** Qt Foundation. The licenses are as published by the Free Software
|
||||||
|
** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
|
||||||
|
** 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-2.0.html and
|
||||||
|
** https://www.gnu.org/licenses/gpl-3.0.html.
|
||||||
**
|
**
|
||||||
** $QT_END_LICENSE$
|
** $QT_END_LICENSE$
|
||||||
**
|
**
|
||||||
|
@ -1,31 +1,37 @@
|
|||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
**
|
**
|
||||||
** Copyright (C) 2015 The Qt Company Ltd.
|
** Copyright (C) 2017 The Qt Company Ltd.
|
||||||
** Contact: http://www.qt.io/licensing/
|
** Contact: https://www.qt.io/licensing/
|
||||||
**
|
**
|
||||||
** This file is part of the config.tests of the Qt Toolkit.
|
** This file is part of the config.tests of the Qt Toolkit.
|
||||||
**
|
**
|
||||||
** $QT_BEGIN_LICENSE:LGPL21$
|
** $QT_BEGIN_LICENSE:LGPL$
|
||||||
** Commercial License Usage
|
** Commercial License Usage
|
||||||
** Licensees holding valid commercial Qt licenses may use this file in
|
** Licensees holding valid commercial Qt licenses may use this file in
|
||||||
** accordance with the commercial license agreement provided with the
|
** accordance with the commercial license agreement provided with the
|
||||||
** Software or, alternatively, in accordance with the terms contained in
|
** Software or, alternatively, in accordance with the terms contained in
|
||||||
** a written agreement between you and The Qt Company. For licensing terms
|
** a written agreement between you and The Qt Company. For licensing terms
|
||||||
** and conditions see http://www.qt.io/terms-conditions. For further
|
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||||
** information use the contact form at http://www.qt.io/contact-us.
|
** information use the contact form at https://www.qt.io/contact-us.
|
||||||
**
|
**
|
||||||
** GNU Lesser General Public License Usage
|
** GNU Lesser General Public License Usage
|
||||||
** Alternatively, this file may be used under the terms of the GNU Lesser
|
** Alternatively, this file may be used under the terms of the GNU Lesser
|
||||||
** General Public License version 2.1 or version 3 as published by the Free
|
** General Public License version 3 as published by the Free Software
|
||||||
** Software Foundation and appearing in the file LICENSE.LGPLv21 and
|
** Foundation and appearing in the file LICENSE.LGPL3 included in the
|
||||||
** LICENSE.LGPLv3 included in the packaging of this file. Please review the
|
** packaging of this file. Please review the following information to
|
||||||
** following information to ensure the GNU Lesser General Public License
|
** ensure the GNU Lesser General Public License version 3 requirements
|
||||||
** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
|
** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
|
||||||
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
|
||||||
**
|
**
|
||||||
** As a special exception, The Qt Company gives you certain additional
|
** GNU General Public License Usage
|
||||||
** rights. These rights are described in The Qt Company LGPL Exception
|
** Alternatively, this file may be used under the terms of the GNU
|
||||||
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
** General Public License version 2.0 or (at your option) the GNU General
|
||||||
|
** Public license version 3 or any later version approved by the KDE Free
|
||||||
|
** Qt Foundation. The licenses are as published by the Free Software
|
||||||
|
** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
|
||||||
|
** 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-2.0.html and
|
||||||
|
** https://www.gnu.org/licenses/gpl-3.0.html.
|
||||||
**
|
**
|
||||||
** $QT_END_LICENSE$
|
** $QT_END_LICENSE$
|
||||||
**
|
**
|
||||||
|
@ -196,6 +196,7 @@ Cpp.ignoredirectives += \
|
|||||||
Q_DECLARE_TYPEINFO \
|
Q_DECLARE_TYPEINFO \
|
||||||
Q_DECL_NOEXCEPT_EXPR \
|
Q_DECL_NOEXCEPT_EXPR \
|
||||||
QT_DEPRECATED_X \
|
QT_DEPRECATED_X \
|
||||||
|
QT_SYSINFO_DEPRECATED_X \
|
||||||
Q_DISABLE_COPY \
|
Q_DISABLE_COPY \
|
||||||
Q_DUMMY_COMPARISON_OPERATOR \
|
Q_DUMMY_COMPARISON_OPERATOR \
|
||||||
Q_ENUM \
|
Q_ENUM \
|
||||||
|
@ -1,12 +1,22 @@
|
|||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
**
|
**
|
||||||
** Copyright (C) 2016 The Qt Company Ltd.
|
** Copyright (C) 2017 The Qt Company Ltd.
|
||||||
** Contact: http://www.qt.io/licensing/
|
** Contact: http://www.qt.io/licensing/
|
||||||
**
|
**
|
||||||
** This file is part of the examples of the Qt Toolkit.
|
** This file is part of the examples of the Qt Toolkit.
|
||||||
**
|
**
|
||||||
** $QT_BEGIN_LICENSE:BSD$
|
** $QT_BEGIN_LICENSE:BSD$
|
||||||
** You may use this file under the terms of the BSD license as follows:
|
** 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.
|
||||||
|
**
|
||||||
|
** BSD License Usage
|
||||||
|
** Alternatively, you may use this file under the terms of the BSD license
|
||||||
|
** as follows:
|
||||||
**
|
**
|
||||||
** "Redistribution and use in source and binary forms, with or without
|
** "Redistribution and use in source and binary forms, with or without
|
||||||
** modification, are permitted provided that the following conditions are
|
** modification, are permitted provided that the following conditions are
|
||||||
|
@ -1,12 +1,22 @@
|
|||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
**
|
**
|
||||||
** Copyright (C) 2016 The Qt Company Ltd.
|
** Copyright (C) 2017 The Qt Company Ltd.
|
||||||
** Contact: http://www.qt.io/licensing/
|
** Contact: http://www.qt.io/licensing/
|
||||||
**
|
**
|
||||||
** This file is part of the examples of the Qt Toolkit.
|
** This file is part of the examples of the Qt Toolkit.
|
||||||
**
|
**
|
||||||
** $QT_BEGIN_LICENSE:BSD$
|
** $QT_BEGIN_LICENSE:BSD$
|
||||||
** You may use this file under the terms of the BSD license as follows:
|
** 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.
|
||||||
|
**
|
||||||
|
** BSD License Usage
|
||||||
|
** Alternatively, you may use this file under the terms of the BSD license
|
||||||
|
** as follows:
|
||||||
**
|
**
|
||||||
** "Redistribution and use in source and binary forms, with or without
|
** "Redistribution and use in source and binary forms, with or without
|
||||||
** modification, are permitted provided that the following conditions are
|
** modification, are permitted provided that the following conditions are
|
||||||
|
@ -1,12 +1,22 @@
|
|||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
**
|
**
|
||||||
** Copyright (C) 2016 The Qt Company Ltd.
|
** Copyright (C) 2017 The Qt Company Ltd.
|
||||||
** Contact: http://www.qt.io/licensing/
|
** Contact: http://www.qt.io/licensing/
|
||||||
**
|
**
|
||||||
** This file is part of the examples of the Qt Toolkit.
|
** This file is part of the examples of the Qt Toolkit.
|
||||||
**
|
**
|
||||||
** $QT_BEGIN_LICENSE:BSD$
|
** $QT_BEGIN_LICENSE:BSD$
|
||||||
** You may use this file under the terms of the BSD license as follows:
|
** 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.
|
||||||
|
**
|
||||||
|
** BSD License Usage
|
||||||
|
** Alternatively, you may use this file under the terms of the BSD license
|
||||||
|
** as follows:
|
||||||
**
|
**
|
||||||
** "Redistribution and use in source and binary forms, with or without
|
** "Redistribution and use in source and binary forms, with or without
|
||||||
** modification, are permitted provided that the following conditions are
|
** modification, are permitted provided that the following conditions are
|
||||||
|
@ -1,12 +1,22 @@
|
|||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
**
|
**
|
||||||
** Copyright (C) 2016 The Qt Company Ltd.
|
** Copyright (C) 2017 The Qt Company Ltd.
|
||||||
** Contact: http://www.qt.io/licensing/
|
** Contact: http://www.qt.io/licensing/
|
||||||
**
|
**
|
||||||
** This file is part of the examples of the Qt Toolkit.
|
** This file is part of the examples of the Qt Toolkit.
|
||||||
**
|
**
|
||||||
** $QT_BEGIN_LICENSE:BSD$
|
** $QT_BEGIN_LICENSE:BSD$
|
||||||
** You may use this file under the terms of the BSD license as follows:
|
** 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.
|
||||||
|
**
|
||||||
|
** BSD License Usage
|
||||||
|
** Alternatively, you may use this file under the terms of the BSD license
|
||||||
|
** as follows:
|
||||||
**
|
**
|
||||||
** "Redistribution and use in source and binary forms, with or without
|
** "Redistribution and use in source and binary forms, with or without
|
||||||
** modification, are permitted provided that the following conditions are
|
** modification, are permitted provided that the following conditions are
|
||||||
|
@ -1,12 +1,22 @@
|
|||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
**
|
**
|
||||||
** Copyright (C) 2016 The Qt Company Ltd.
|
** Copyright (C) 2017 The Qt Company Ltd.
|
||||||
** Contact: http://www.qt.io/licensing/
|
** Contact: http://www.qt.io/licensing/
|
||||||
**
|
**
|
||||||
** This file is part of the examples of the Qt Toolkit.
|
** This file is part of the examples of the Qt Toolkit.
|
||||||
**
|
**
|
||||||
** $QT_BEGIN_LICENSE:BSD$
|
** $QT_BEGIN_LICENSE:BSD$
|
||||||
** You may use this file under the terms of the BSD license as follows:
|
** 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.
|
||||||
|
**
|
||||||
|
** BSD License Usage
|
||||||
|
** Alternatively, you may use this file under the terms of the BSD license
|
||||||
|
** as follows:
|
||||||
**
|
**
|
||||||
** "Redistribution and use in source and binary forms, with or without
|
** "Redistribution and use in source and binary forms, with or without
|
||||||
** modification, are permitted provided that the following conditions are
|
** modification, are permitted provided that the following conditions are
|
||||||
|
@ -1,12 +1,22 @@
|
|||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
**
|
**
|
||||||
** Copyright (C) 2016 The Qt Company Ltd.
|
** Copyright (C) 2017 The Qt Company Ltd.
|
||||||
** Contact: http://www.qt.io/licensing/
|
** Contact: http://www.qt.io/licensing/
|
||||||
**
|
**
|
||||||
** This file is part of the examples of the Qt Toolkit.
|
** This file is part of the examples of the Qt Toolkit.
|
||||||
**
|
**
|
||||||
** $QT_BEGIN_LICENSE:BSD$
|
** $QT_BEGIN_LICENSE:BSD$
|
||||||
** You may use this file under the terms of the BSD license as follows:
|
** 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.
|
||||||
|
**
|
||||||
|
** BSD License Usage
|
||||||
|
** Alternatively, you may use this file under the terms of the BSD license
|
||||||
|
** as follows:
|
||||||
**
|
**
|
||||||
** "Redistribution and use in source and binary forms, with or without
|
** "Redistribution and use in source and binary forms, with or without
|
||||||
** modification, are permitted provided that the following conditions are
|
** modification, are permitted provided that the following conditions are
|
||||||
@ -44,7 +54,7 @@
|
|||||||
#include <QOpenGLContext>
|
#include <QOpenGLContext>
|
||||||
#include <QOpenGLFunctions>
|
#include <QOpenGLFunctions>
|
||||||
#include <QOpenGLExtraFunctions>
|
#include <QOpenGLExtraFunctions>
|
||||||
//#include <QtGui/qopenglext.h>
|
#include <QOpenGLVertexArrayObject>
|
||||||
#include <QtGui/qopengl.h>
|
#include <QtGui/qopengl.h>
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
#include <QTimer>
|
#include <QTimer>
|
||||||
@ -70,7 +80,8 @@ GLWindow::GLWindow()
|
|||||||
m_shaderComputeV(0),
|
m_shaderComputeV(0),
|
||||||
m_shaderComputeH(0),
|
m_shaderComputeH(0),
|
||||||
m_blurRadius(0.0f),
|
m_blurRadius(0.0f),
|
||||||
m_animate(true)
|
m_animate(true),
|
||||||
|
m_vao(0)
|
||||||
{
|
{
|
||||||
const float animationStart = 0.0;
|
const float animationStart = 0.0;
|
||||||
const float animationEnd = 10.0;
|
const float animationEnd = 10.0;
|
||||||
@ -106,6 +117,7 @@ GLWindow::~GLWindow()
|
|||||||
delete m_animationGroup;
|
delete m_animationGroup;
|
||||||
delete m_animationForward;
|
delete m_animationForward;
|
||||||
delete m_animationBackward;
|
delete m_animationBackward;
|
||||||
|
delete m_vao;
|
||||||
}
|
}
|
||||||
|
|
||||||
void GLWindow::setBlurRadius(float blurRadius)
|
void GLWindow::setBlurRadius(float blurRadius)
|
||||||
@ -168,19 +180,21 @@ static const char *fsDisplaySource =
|
|||||||
"}\n";
|
"}\n";
|
||||||
|
|
||||||
static const char *csComputeSourceV =
|
static const char *csComputeSourceV =
|
||||||
//"#extension GL_EXT_gpu_shader5 : require \n"
|
|
||||||
"#define COMPUTEPATCHSIZE 32 \n"
|
"#define COMPUTEPATCHSIZE 32 \n"
|
||||||
"#define IMGFMT rgba8 \n"
|
"#define IMGFMT rgba8 \n"
|
||||||
"layout (local_size_x = COMPUTEPATCHSIZE, local_size_y = COMPUTEPATCHSIZE) in;\n"
|
"layout (local_size_x = COMPUTEPATCHSIZE, local_size_y = COMPUTEPATCHSIZE) in;\n"
|
||||||
"layout(binding=0, IMGFMT) uniform highp image2D inputImage; // Use a sampler to improve performance \n"
|
"layout(binding=0, IMGFMT) uniform readonly highp image2D inputImage; // Use a sampler to improve performance \n"
|
||||||
"layout(binding=1, IMGFMT) uniform highp image2D resultImage;\n"
|
"layout(binding=1, IMGFMT) uniform writeonly highp image2D resultImage;\n"
|
||||||
"uniform int radius;\n"
|
"uniform int radius;\n"
|
||||||
"const float cutoff = 2.2;\n"
|
"const float cutoff = 2.2;\n"
|
||||||
"float sigma = clamp(float(radius) / cutoff,0.02,100.0);\n" // Const initialization with dynamically uniform expressions doesn't work in GLES
|
|
||||||
"float expFactor = 1.0 / (2.0 * sigma * sigma);\n" // Same here
|
|
||||||
|
|
||||||
"float gaussian(float distance) {\n"
|
"float expFactor() { // a function, otherwise MESA produces error: initializer of global variable `expFactor' must be a constant expression\n"
|
||||||
" return exp( -(distance * distance) * expFactor);\n"
|
" float sigma = clamp(float(radius) / cutoff,0.02,100.0);\n"
|
||||||
|
" return 1.0 / (2.0 * sigma * sigma);\n"
|
||||||
|
"}\n"
|
||||||
|
|
||||||
|
"float gaussian(float distance, float expfactor) {\n"
|
||||||
|
" return exp( -(distance * distance) * expfactor);\n"
|
||||||
"}\n"
|
"}\n"
|
||||||
|
|
||||||
"void main() {\n"
|
"void main() {\n"
|
||||||
@ -194,31 +208,34 @@ static const char *csComputeSourceV =
|
|||||||
" int right = clamp(x + radius, 0, imgSize.x - 1);\n"
|
" int right = clamp(x + radius, 0, imgSize.x - 1);\n"
|
||||||
" int top = clamp(y - radius, 0, imgSize.y - 1);\n"
|
" int top = clamp(y - radius, 0, imgSize.y - 1);\n"
|
||||||
" int bottom = clamp(y + radius, 0, imgSize.y - 1);\n"
|
" int bottom = clamp(y + radius, 0, imgSize.y - 1);\n"
|
||||||
|
" float expfactor = expFactor();\n"
|
||||||
" for (int iY = top; iY <= bottom; iY++) {\n"
|
" for (int iY = top; iY <= bottom; iY++) {\n"
|
||||||
" float dy = float(abs(iY - y));\n"
|
" float dy = float(abs(iY - y));\n"
|
||||||
" vec4 imgValue = imageLoad(inputImage, ivec2(x,iY));\n"
|
" vec4 imgValue = imageLoad(inputImage, ivec2(x,iY));\n"
|
||||||
" float weight = gaussian(dy);\n"
|
" float weight = gaussian(dy, expfactor);\n"
|
||||||
" sumWeights += weight;\n"
|
" sumWeights += weight;\n"
|
||||||
" sumPixels += (imgValue * weight);\n"
|
" sumPixels += (imgValue * weight);\n"
|
||||||
" }\n"
|
" }\n"
|
||||||
" sumPixels /= sumWeights;\n"
|
" sumPixels /= sumWeights;\n"
|
||||||
" imageStore(resultImage, ivec2(x,y), sumPixels);"
|
" imageStore(resultImage, ivec2(x,y), sumPixels);\n"
|
||||||
"}\n";
|
"}\n";
|
||||||
|
|
||||||
static const char *csComputeSourceH =
|
static const char *csComputeSourceH =
|
||||||
//"#extension GL_EXT_gpu_shader5 : require \n"
|
|
||||||
"#define COMPUTEPATCHSIZE 32 \n"
|
"#define COMPUTEPATCHSIZE 32 \n"
|
||||||
"#define IMGFMT rgba8 \n"
|
"#define IMGFMT rgba8 \n"
|
||||||
"layout (local_size_x = COMPUTEPATCHSIZE, local_size_y = COMPUTEPATCHSIZE) in;\n"
|
"layout (local_size_x = COMPUTEPATCHSIZE, local_size_y = COMPUTEPATCHSIZE) in;\n"
|
||||||
"layout(binding=0, IMGFMT) uniform highp image2D inputImage; // Use a sampler to improve performance \n"
|
"layout(binding=0, IMGFMT) uniform readonly highp image2D inputImage; // Use a sampler to improve performance \n"
|
||||||
"layout(binding=1, IMGFMT) uniform highp image2D resultImage;\n"
|
"layout(binding=1, IMGFMT) uniform writeonly highp image2D resultImage;\n"
|
||||||
"uniform int radius;\n"
|
"uniform int radius;\n"
|
||||||
"const float cutoff = 2.2;\n"
|
"const float cutoff = 2.2;\n"
|
||||||
"float sigma = clamp(float(radius) / cutoff,0.02,100.0);\n"
|
|
||||||
"float expFactor = 1.0 / (2.0 * sigma * sigma);\n"
|
|
||||||
|
|
||||||
"float gaussian(float distance) {\n"
|
"float expFactor() { // a function, otherwise MESA produces error: initializer of global variable `expFactor' must be a constant expression\n"
|
||||||
" return exp( -(distance * distance) * expFactor);\n"
|
" float sigma = clamp(float(radius) / cutoff,0.02,100.0);\n"
|
||||||
|
" return 1.0 / (2.0 * sigma * sigma);\n"
|
||||||
|
"}\n"
|
||||||
|
|
||||||
|
"float gaussian(float distance, float expfactor) {\n"
|
||||||
|
" return exp( -(distance * distance) * expfactor);\n"
|
||||||
"}\n"
|
"}\n"
|
||||||
|
|
||||||
"void main() {\n"
|
"void main() {\n"
|
||||||
@ -232,15 +249,16 @@ static const char *csComputeSourceH =
|
|||||||
" int right = clamp(x + radius, 0, imgSize.x - 1);\n"
|
" int right = clamp(x + radius, 0, imgSize.x - 1);\n"
|
||||||
" int top = clamp(y - radius, 0, imgSize.y - 1);\n"
|
" int top = clamp(y - radius, 0, imgSize.y - 1);\n"
|
||||||
" int bottom = clamp(y + radius, 0, imgSize.y - 1);\n"
|
" int bottom = clamp(y + radius, 0, imgSize.y - 1);\n"
|
||||||
" for (int iX = left; iX <= right; iX++) {\n"
|
" float expfactor = expFactor();\n"
|
||||||
|
" for (int iX = left; iX <= right; iX++) {\n"
|
||||||
" float dx = float(abs(iX - x));\n"
|
" float dx = float(abs(iX - x));\n"
|
||||||
" vec4 imgValue = imageLoad(inputImage, ivec2(iX,y));\n"
|
" vec4 imgValue = imageLoad(inputImage, ivec2(iX,y));\n"
|
||||||
" float weight = gaussian(dx);\n"
|
" float weight = gaussian(dx, expfactor);\n"
|
||||||
" sumWeights += weight;\n"
|
" sumWeights += weight;\n"
|
||||||
" sumPixels += (imgValue * weight);\n"
|
" sumPixels += (imgValue * weight);\n"
|
||||||
" }\n"
|
" }\n"
|
||||||
" sumPixels /= sumWeights;\n"
|
" sumPixels /= sumWeights;\n"
|
||||||
" imageStore(resultImage, ivec2(x,y), sumPixels);"
|
" imageStore(resultImage, ivec2(x,y), sumPixels);\n"
|
||||||
"}\n";
|
"}\n";
|
||||||
|
|
||||||
|
|
||||||
@ -252,7 +270,7 @@ QByteArray versionedShaderCode(const char *src)
|
|||||||
if (QOpenGLContext::currentContext()->isOpenGLES())
|
if (QOpenGLContext::currentContext()->isOpenGLES())
|
||||||
versionedSrc.append(QByteArrayLiteral("#version 310 es\n"));
|
versionedSrc.append(QByteArrayLiteral("#version 310 es\n"));
|
||||||
else
|
else
|
||||||
versionedSrc.append(QByteArrayLiteral("#version 430\n"));
|
versionedSrc.append(QByteArrayLiteral("#version 430 core\n"));
|
||||||
|
|
||||||
versionedSrc.append(src);
|
versionedSrc.append(src);
|
||||||
return versionedSrc;
|
return versionedSrc;
|
||||||
@ -305,7 +323,6 @@ void GLWindow::initializeGL()
|
|||||||
<< ctx->format().minorVersion()
|
<< ctx->format().minorVersion()
|
||||||
<< ((ctx->format().renderableType() == QSurfaceFormat::OpenGLES) ? (" GLES") : (" GL"))
|
<< ((ctx->format().renderableType() == QSurfaceFormat::OpenGLES) ? (" GLES") : (" GL"))
|
||||||
<< " context";
|
<< " context";
|
||||||
//QOpenGLFunctions *f = ctx->functions();
|
|
||||||
|
|
||||||
if (m_texImageInput) {
|
if (m_texImageInput) {
|
||||||
delete m_texImageInput;
|
delete m_texImageInput;
|
||||||
@ -363,6 +380,10 @@ void GLWindow::initializeGL()
|
|||||||
m_shaderComputeH = new QOpenGLShaderProgram;
|
m_shaderComputeH = new QOpenGLShaderProgram;
|
||||||
m_shaderComputeH->addShaderFromSourceCode(QOpenGLShader::Compute, versionedShaderCode(csComputeSourceH));
|
m_shaderComputeH->addShaderFromSourceCode(QOpenGLShader::Compute, versionedShaderCode(csComputeSourceH));
|
||||||
m_shaderComputeH->link();
|
m_shaderComputeH->link();
|
||||||
|
|
||||||
|
// Create a VAO. Not strictly required for ES 3, but it is for plain OpenGL core context.
|
||||||
|
m_vao = new QOpenGLVertexArrayObject;
|
||||||
|
m_vao->create();
|
||||||
}
|
}
|
||||||
|
|
||||||
void GLWindow::resizeGL(int w, int h)
|
void GLWindow::resizeGL(int w, int h)
|
||||||
@ -411,13 +432,15 @@ void GLWindow::paintGL()
|
|||||||
// Display processed image
|
// Display processed image
|
||||||
f->glClearColor(0, 0, 0, 1);
|
f->glClearColor(0, 0, 0, 1);
|
||||||
f->glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
f->glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
||||||
m_texImageProcessed->bind(GL_TEXTURE0);
|
m_texImageProcessed->bind(0);
|
||||||
m_shaderDisplay->bind();
|
m_shaderDisplay->bind();
|
||||||
m_shaderDisplay->setUniformValue("matProjection",m_proj);
|
m_shaderDisplay->setUniformValue("matProjection",m_proj);
|
||||||
m_shaderDisplay->setUniformValue("imageRatio",m_quadSize);
|
m_shaderDisplay->setUniformValue("imageRatio",m_quadSize);
|
||||||
m_shaderDisplay->setUniformValue("samImage",0);
|
m_shaderDisplay->setUniformValue("samImage",0);
|
||||||
|
m_vao->bind();
|
||||||
f->glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
|
f->glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
|
||||||
|
m_vao->release();
|
||||||
m_shaderDisplay->release();
|
m_shaderDisplay->release();
|
||||||
m_texImageProcessed->release(GL_TEXTURE0);
|
m_texImageProcessed->release(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,12 +1,22 @@
|
|||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
**
|
**
|
||||||
** Copyright (C) 2016 The Qt Company Ltd.
|
** Copyright (C) 2017 The Qt Company Ltd.
|
||||||
** Contact: http://www.qt.io/licensing/
|
** Contact: http://www.qt.io/licensing/
|
||||||
**
|
**
|
||||||
** This file is part of the examples of the Qt Toolkit.
|
** This file is part of the examples of the Qt Toolkit.
|
||||||
**
|
**
|
||||||
** $QT_BEGIN_LICENSE:BSD$
|
** $QT_BEGIN_LICENSE:BSD$
|
||||||
** You may use this file under the terms of the BSD license as follows:
|
** 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.
|
||||||
|
**
|
||||||
|
** BSD License Usage
|
||||||
|
** Alternatively, you may use this file under the terms of the BSD license
|
||||||
|
** as follows:
|
||||||
**
|
**
|
||||||
** "Redistribution and use in source and binary forms, with or without
|
** "Redistribution and use in source and binary forms, with or without
|
||||||
** modification, are permitted provided that the following conditions are
|
** modification, are permitted provided that the following conditions are
|
||||||
@ -94,6 +104,7 @@ private:
|
|||||||
|
|
||||||
int m_blurRadius;
|
int m_blurRadius;
|
||||||
bool m_animate;
|
bool m_animate;
|
||||||
|
QOpenGLVertexArrayObject *m_vao;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -1,12 +1,22 @@
|
|||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
**
|
**
|
||||||
** Copyright (C) 2016 The Qt Company Ltd.
|
** Copyright (C) 2017 The Qt Company Ltd.
|
||||||
** Contact: http://www.qt.io/licensing/
|
** Contact: http://www.qt.io/licensing/
|
||||||
**
|
**
|
||||||
** This file is part of the examples of the Qt Toolkit.
|
** This file is part of the examples of the Qt Toolkit.
|
||||||
**
|
**
|
||||||
** $QT_BEGIN_LICENSE:BSD$
|
** $QT_BEGIN_LICENSE:BSD$
|
||||||
** You may use this file under the terms of the BSD license as follows:
|
** 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.
|
||||||
|
**
|
||||||
|
** BSD License Usage
|
||||||
|
** Alternatively, you may use this file under the terms of the BSD license
|
||||||
|
** as follows:
|
||||||
**
|
**
|
||||||
** "Redistribution and use in source and binary forms, with or without
|
** "Redistribution and use in source and binary forms, with or without
|
||||||
** modification, are permitted provided that the following conditions are
|
** modification, are permitted provided that the following conditions are
|
||||||
@ -46,15 +56,17 @@
|
|||||||
#include <QPair>
|
#include <QPair>
|
||||||
#include "glwindow.h"
|
#include "glwindow.h"
|
||||||
|
|
||||||
bool OGLSupports(int major, int minor, bool gles = false)
|
bool OGLSupports(int major, int minor, bool gles = false, QSurfaceFormat::OpenGLContextProfile profile = QSurfaceFormat::NoProfile)
|
||||||
{
|
{
|
||||||
QOpenGLContext ctx;
|
QOpenGLContext ctx;
|
||||||
QSurfaceFormat fmt;
|
QSurfaceFormat fmt;
|
||||||
fmt.setVersion(major, minor);
|
fmt.setVersion(major, minor);
|
||||||
if (gles)
|
if (gles) {
|
||||||
fmt.setRenderableType(QSurfaceFormat::OpenGLES);
|
fmt.setRenderableType(QSurfaceFormat::OpenGLES);
|
||||||
else
|
} else {
|
||||||
fmt.setRenderableType(QSurfaceFormat::OpenGL);
|
fmt.setRenderableType(QSurfaceFormat::OpenGL);
|
||||||
|
fmt.setProfile(profile);
|
||||||
|
}
|
||||||
|
|
||||||
ctx.setFormat(fmt);
|
ctx.setFormat(fmt);
|
||||||
ctx.create();
|
ctx.create();
|
||||||
@ -68,6 +80,8 @@ bool OGLSupports(int major, int minor, bool gles = false)
|
|||||||
if (ctxMajor < major) return false;
|
if (ctxMajor < major) return false;
|
||||||
if (ctxMajor == major && ctxMinor < minor)
|
if (ctxMajor == major && ctxMinor < minor)
|
||||||
return false;
|
return false;
|
||||||
|
if (!gles && ctx.format().profile() != profile)
|
||||||
|
return false;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -75,18 +89,34 @@ int main(int argc, char *argv[])
|
|||||||
{
|
{
|
||||||
QGuiApplication app(argc, argv);
|
QGuiApplication app(argc, argv);
|
||||||
|
|
||||||
qDebug() << "Support for GL 2.0 "<<( OGLSupports(2,0) ? "yes" : "no");
|
qDebug() << "Support for GL 2.0 noprof "<<( OGLSupports(2,0,false) ? "yes" : "no");
|
||||||
qDebug() << "Support for GL 2.1 "<<( OGLSupports(2,1) ? "yes" : "no");
|
qDebug() << "Support for GL 2.0 core "<<( OGLSupports(2,0,false, QSurfaceFormat::CoreProfile) ? "yes" : "no");
|
||||||
qDebug() << "Support for GL 3.0 "<<( OGLSupports(3,0) ? "yes" : "no");
|
qDebug() << "Support for GL 2.0 compat "<<( OGLSupports(2,0,false, QSurfaceFormat::CompatibilityProfile) ? "yes" : "no");
|
||||||
qDebug() << "Support for GL 3.1 "<<( OGLSupports(3,1) ? "yes" : "no");
|
qDebug() << "Support for GL 2.1 noprof "<<( OGLSupports(2,1,false) ? "yes" : "no");
|
||||||
qDebug() << "Support for GL 3.2 "<<( OGLSupports(3,2) ? "yes" : "no");
|
qDebug() << "Support for GL 2.1 core "<<( OGLSupports(2,1,false, QSurfaceFormat::CoreProfile) ? "yes" : "no");
|
||||||
qDebug() << "Support for GL 3.3 "<<( OGLSupports(3,3) ? "yes" : "no");
|
qDebug() << "Support for GL 2.1 compat "<<( OGLSupports(2,1,false, QSurfaceFormat::CompatibilityProfile) ? "yes" : "no");
|
||||||
qDebug() << "Support for GL 4.0 "<<( OGLSupports(4,0) ? "yes" : "no");
|
qDebug() << "Support for GL 3.0 noprof "<<( OGLSupports(3,0,false) ? "yes" : "no");
|
||||||
qDebug() << "Support for GL 4.1 "<<( OGLSupports(4,1) ? "yes" : "no");
|
qDebug() << "Support for GL 3.0 core "<<( OGLSupports(3,0,false, QSurfaceFormat::CoreProfile) ? "yes" : "no");
|
||||||
qDebug() << "Support for GL 4.2 "<<( OGLSupports(4,2) ? "yes" : "no");
|
qDebug() << "Support for GL 3.0 compat "<<( OGLSupports(3,0,false, QSurfaceFormat::CompatibilityProfile) ? "yes" : "no");
|
||||||
qDebug() << "Support for GL 4.3 "<<( OGLSupports(4,3) ? "yes" : "no");
|
qDebug() << "Support for GL 3.1 noprof "<<( OGLSupports(3,1,false) ? "yes" : "no");
|
||||||
qDebug() << "Support for GL 4.4 "<<( OGLSupports(4,4) ? "yes" : "no");
|
qDebug() << "Support for GL 3.1 core "<<( OGLSupports(3,1,false, QSurfaceFormat::CoreProfile) ? "yes" : "no");
|
||||||
qDebug() << "Support for GL 4.5 "<<( OGLSupports(4,5) ? "yes" : "no");
|
qDebug() << "Support for GL 3.1 compat "<<( OGLSupports(3,1,false, QSurfaceFormat::CompatibilityProfile) ? "yes" : "no");
|
||||||
|
qDebug() << "Support for GL 3.2 core "<<( OGLSupports(3,2,false,QSurfaceFormat::CoreProfile) ? "yes" : "no");
|
||||||
|
qDebug() << "Support for GL 3.2 compat "<<( OGLSupports(3,2,false,QSurfaceFormat::CompatibilityProfile) ? "yes" : "no");
|
||||||
|
qDebug() << "Support for GL 3.3 core "<<( OGLSupports(3,3,false,QSurfaceFormat::CoreProfile) ? "yes" : "no");
|
||||||
|
qDebug() << "Support for GL 3.3 compat "<<( OGLSupports(3,3,false,QSurfaceFormat::CompatibilityProfile) ? "yes" : "no");
|
||||||
|
qDebug() << "Support for GL 4.0 core "<<( OGLSupports(4,0,false,QSurfaceFormat::CoreProfile) ? "yes" : "no");
|
||||||
|
qDebug() << "Support for GL 4.0 compat "<<( OGLSupports(4,0,false,QSurfaceFormat::CompatibilityProfile) ? "yes" : "no");
|
||||||
|
qDebug() << "Support for GL 4.1 core "<<( OGLSupports(4,1,false,QSurfaceFormat::CoreProfile) ? "yes" : "no");
|
||||||
|
qDebug() << "Support for GL 4.1 compat "<<( OGLSupports(4,1,false,QSurfaceFormat::CompatibilityProfile) ? "yes" : "no");
|
||||||
|
qDebug() << "Support for GL 4.2 core "<<( OGLSupports(4,2,false,QSurfaceFormat::CoreProfile) ? "yes" : "no");
|
||||||
|
qDebug() << "Support for GL 4.2 compat "<<( OGLSupports(4,2,false,QSurfaceFormat::CompatibilityProfile) ? "yes" : "no");
|
||||||
|
qDebug() << "Support for GL 4.3 core "<<( OGLSupports(4,3,false,QSurfaceFormat::CoreProfile) ? "yes" : "no");
|
||||||
|
qDebug() << "Support for GL 4.3 compat "<<( OGLSupports(4,3,false,QSurfaceFormat::CompatibilityProfile) ? "yes" : "no");
|
||||||
|
qDebug() << "Support for GL 4.4 core "<<( OGLSupports(4,4,false,QSurfaceFormat::CoreProfile) ? "yes" : "no");
|
||||||
|
qDebug() << "Support for GL 4.4 compat "<<( OGLSupports(4,4,false,QSurfaceFormat::CompatibilityProfile) ? "yes" : "no");
|
||||||
|
qDebug() << "Support for GL 4.5 core "<<( OGLSupports(4,5,false,QSurfaceFormat::CoreProfile) ? "yes" : "no");
|
||||||
|
qDebug() << "Support for GL 4.5 compat "<<( OGLSupports(4,5,false,QSurfaceFormat::CompatibilityProfile) ? "yes" : "no");
|
||||||
qDebug() << "Support for GLES 2.0 "<<( OGLSupports(2,0,true) ? "yes" : "no");
|
qDebug() << "Support for GLES 2.0 "<<( OGLSupports(2,0,true) ? "yes" : "no");
|
||||||
qDebug() << "Support for GLES 3.0 "<<( OGLSupports(3,0,true) ? "yes" : "no");
|
qDebug() << "Support for GLES 3.0 "<<( OGLSupports(3,0,true) ? "yes" : "no");
|
||||||
qDebug() << "Support for GLES 3.1 "<<( OGLSupports(3,1,true) ? "yes" : "no");
|
qDebug() << "Support for GLES 3.1 "<<( OGLSupports(3,1,true) ? "yes" : "no");
|
||||||
@ -95,16 +125,16 @@ int main(int argc, char *argv[])
|
|||||||
QSurfaceFormat fmt;
|
QSurfaceFormat fmt;
|
||||||
fmt.setDepthBufferSize(24);
|
fmt.setDepthBufferSize(24);
|
||||||
|
|
||||||
// Request OpenGL 4.3 compatibility or OpenGL ES 3.1.
|
// Request OpenGL ES 3.1 context, as this is a GLES example. If not available, go for OpenGL 4.3 core.
|
||||||
if (OGLSupports(4,3)) {
|
if (OGLSupports(3,1,true)) {
|
||||||
qDebug("Requesting 4.3 compatibility context");
|
|
||||||
fmt.setVersion(4, 3);
|
|
||||||
fmt.setRenderableType(QSurfaceFormat::OpenGL);
|
|
||||||
fmt.setProfile(QSurfaceFormat::CompatibilityProfile);
|
|
||||||
} else if (OGLSupports(3,1,true)) {
|
|
||||||
qDebug("Requesting 3.1 GLES context");
|
qDebug("Requesting 3.1 GLES context");
|
||||||
fmt.setVersion(3, 1);
|
fmt.setVersion(3, 1);
|
||||||
fmt.setRenderableType(QSurfaceFormat::OpenGLES);
|
fmt.setRenderableType(QSurfaceFormat::OpenGLES);
|
||||||
|
} else if (OGLSupports(4,3,false,QSurfaceFormat::CoreProfile)) {
|
||||||
|
qDebug("Requesting 4.3 core context");
|
||||||
|
fmt.setVersion(4, 3);
|
||||||
|
fmt.setRenderableType(QSurfaceFormat::OpenGL);
|
||||||
|
fmt.setProfile(QSurfaceFormat::CoreProfile);
|
||||||
} else {
|
} else {
|
||||||
qWarning("Error: This system does not support OpenGL Compute Shaders! Exiting.");
|
qWarning("Error: This system does not support OpenGL Compute Shaders! Exiting.");
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -1,31 +1,37 @@
|
|||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
**
|
**
|
||||||
** Copyright (C) 2015 The Qt Company Ltd.
|
** Copyright (C) 2017 The Qt Company Ltd.
|
||||||
** Contact: http://www.qt.io/licensing/
|
** Contact: https://www.qt.io/licensing/
|
||||||
**
|
**
|
||||||
** This file is part of the qmake spec of the Qt Toolkit.
|
** This file is part of the qmake spec of the Qt Toolkit.
|
||||||
**
|
**
|
||||||
** $QT_BEGIN_LICENSE:LGPL21$
|
** $QT_BEGIN_LICENSE:LGPL$
|
||||||
** Commercial License Usage
|
** Commercial License Usage
|
||||||
** Licensees holding valid commercial Qt licenses may use this file in
|
** Licensees holding valid commercial Qt licenses may use this file in
|
||||||
** accordance with the commercial license agreement provided with the
|
** accordance with the commercial license agreement provided with the
|
||||||
** Software or, alternatively, in accordance with the terms contained in
|
** Software or, alternatively, in accordance with the terms contained in
|
||||||
** a written agreement between you and The Qt Company. For licensing terms
|
** a written agreement between you and The Qt Company. For licensing terms
|
||||||
** and conditions see http://www.qt.io/terms-conditions. For further
|
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||||
** information use the contact form at http://www.qt.io/contact-us.
|
** information use the contact form at https://www.qt.io/contact-us.
|
||||||
**
|
**
|
||||||
** GNU Lesser General Public License Usage
|
** GNU Lesser General Public License Usage
|
||||||
** Alternatively, this file may be used under the terms of the GNU Lesser
|
** Alternatively, this file may be used under the terms of the GNU Lesser
|
||||||
** General Public License version 2.1 or version 3 as published by the Free
|
** General Public License version 3 as published by the Free Software
|
||||||
** Software Foundation and appearing in the file LICENSE.LGPLv21 and
|
** Foundation and appearing in the file LICENSE.LGPL3 included in the
|
||||||
** LICENSE.LGPLv3 included in the packaging of this file. Please review the
|
** packaging of this file. Please review the following information to
|
||||||
** following information to ensure the GNU Lesser General Public License
|
** ensure the GNU Lesser General Public License version 3 requirements
|
||||||
** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
|
** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
|
||||||
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
|
||||||
**
|
**
|
||||||
** As a special exception, The Qt Company gives you certain additional
|
** GNU General Public License Usage
|
||||||
** rights. These rights are described in The Qt Company LGPL Exception
|
** Alternatively, this file may be used under the terms of the GNU
|
||||||
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
** General Public License version 2.0 or (at your option) the GNU General
|
||||||
|
** Public license version 3 or any later version approved by the KDE Free
|
||||||
|
** Qt Foundation. The licenses are as published by the Free Software
|
||||||
|
** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
|
||||||
|
** 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-2.0.html and
|
||||||
|
** https://www.gnu.org/licenses/gpl-3.0.html.
|
||||||
**
|
**
|
||||||
** $QT_END_LICENSE$
|
** $QT_END_LICENSE$
|
||||||
**
|
**
|
||||||
|
@ -1,31 +1,37 @@
|
|||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
**
|
**
|
||||||
** Copyright (C) 2015 The Qt Company Ltd.
|
** Copyright (C) 2017 The Qt Company Ltd.
|
||||||
** Contact: http://www.qt.io/licensing/
|
** Contact: https://www.qt.io/licensing/
|
||||||
**
|
**
|
||||||
** This file is part of the qmake spec of the Qt Toolkit.
|
** This file is part of the qmake spec of the Qt Toolkit.
|
||||||
**
|
**
|
||||||
** $QT_BEGIN_LICENSE:LGPL21$
|
** $QT_BEGIN_LICENSE:LGPL$
|
||||||
** Commercial License Usage
|
** Commercial License Usage
|
||||||
** Licensees holding valid commercial Qt licenses may use this file in
|
** Licensees holding valid commercial Qt licenses may use this file in
|
||||||
** accordance with the commercial license agreement provided with the
|
** accordance with the commercial license agreement provided with the
|
||||||
** Software or, alternatively, in accordance with the terms contained in
|
** Software or, alternatively, in accordance with the terms contained in
|
||||||
** a written agreement between you and The Qt Company. For licensing terms
|
** a written agreement between you and The Qt Company. For licensing terms
|
||||||
** and conditions see http://www.qt.io/terms-conditions. For further
|
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||||
** information use the contact form at http://www.qt.io/contact-us.
|
** information use the contact form at https://www.qt.io/contact-us.
|
||||||
**
|
**
|
||||||
** GNU Lesser General Public License Usage
|
** GNU Lesser General Public License Usage
|
||||||
** Alternatively, this file may be used under the terms of the GNU Lesser
|
** Alternatively, this file may be used under the terms of the GNU Lesser
|
||||||
** General Public License version 2.1 or version 3 as published by the Free
|
** General Public License version 3 as published by the Free Software
|
||||||
** Software Foundation and appearing in the file LICENSE.LGPLv21 and
|
** Foundation and appearing in the file LICENSE.LGPL3 included in the
|
||||||
** LICENSE.LGPLv3 included in the packaging of this file. Please review the
|
** packaging of this file. Please review the following information to
|
||||||
** following information to ensure the GNU Lesser General Public License
|
** ensure the GNU Lesser General Public License version 3 requirements
|
||||||
** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
|
** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
|
||||||
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
|
||||||
**
|
**
|
||||||
** As a special exception, The Qt Company gives you certain additional
|
** GNU General Public License Usage
|
||||||
** rights. These rights are described in The Qt Company LGPL Exception
|
** Alternatively, this file may be used under the terms of the GNU
|
||||||
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
** General Public License version 2.0 or (at your option) the GNU General
|
||||||
|
** Public license version 3 or any later version approved by the KDE Free
|
||||||
|
** Qt Foundation. The licenses are as published by the Free Software
|
||||||
|
** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
|
||||||
|
** 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-2.0.html and
|
||||||
|
** https://www.gnu.org/licenses/gpl-3.0.html.
|
||||||
**
|
**
|
||||||
** $QT_END_LICENSE$
|
** $QT_END_LICENSE$
|
||||||
**
|
**
|
||||||
|
@ -1,31 +1,37 @@
|
|||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
**
|
**
|
||||||
** Copyright (C) 2015 Green Hills Software. All rights reserved.
|
** Copyright (C) 2015 Green Hills Software. All rights reserved.
|
||||||
** Contact: http://www.qt.io/licensing/
|
** Contact: https://www.qt.io/licensing/
|
||||||
**
|
**
|
||||||
** This file is part of the qmake spec of the Qt Toolkit.
|
** This file is part of the qmake spec of the Qt Toolkit.
|
||||||
**
|
**
|
||||||
** $QT_BEGIN_LICENSE:LGPL21$
|
** $QT_BEGIN_LICENSE:LGPL$
|
||||||
** Commercial License Usage
|
** Commercial License Usage
|
||||||
** Licensees holding valid commercial Qt licenses may use this file in
|
** Licensees holding valid commercial Qt licenses may use this file in
|
||||||
** accordance with the commercial license agreement provided with the
|
** accordance with the commercial license agreement provided with the
|
||||||
** Software or, alternatively, in accordance with the terms contained in
|
** Software or, alternatively, in accordance with the terms contained in
|
||||||
** a written agreement between you and The Qt Company. For licensing terms
|
** a written agreement between you and The Qt Company. For licensing terms
|
||||||
** and conditions see http://www.qt.io/terms-conditions. For further
|
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||||
** information use the contact form at http://www.qt.io/contact-us.
|
** information use the contact form at https://www.qt.io/contact-us.
|
||||||
**
|
**
|
||||||
** GNU Lesser General Public License Usage
|
** GNU Lesser General Public License Usage
|
||||||
** Alternatively, this file may be used under the terms of the GNU Lesser
|
** Alternatively, this file may be used under the terms of the GNU Lesser
|
||||||
** General Public License version 2.1 or version 3 as published by the Free
|
** General Public License version 3 as published by the Free Software
|
||||||
** Software Foundation and appearing in the file LICENSE.LGPLv21 and
|
** Foundation and appearing in the file LICENSE.LGPL3 included in the
|
||||||
** LICENSE.LGPLv3 included in the packaging of this file. Please review the
|
** packaging of this file. Please review the following information to
|
||||||
** following information to ensure the GNU Lesser General Public License
|
** ensure the GNU Lesser General Public License version 3 requirements
|
||||||
** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
|
** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
|
||||||
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
|
||||||
**
|
**
|
||||||
** As a special exception, The Qt Company gives you certain additional
|
** GNU General Public License Usage
|
||||||
** rights. These rights are described in The Qt Company LGPL Exception
|
** Alternatively, this file may be used under the terms of the GNU
|
||||||
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
** General Public License version 2.0 or (at your option) the GNU General
|
||||||
|
** Public license version 3 or any later version approved by the KDE Free
|
||||||
|
** Qt Foundation. The licenses are as published by the Free Software
|
||||||
|
** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
|
||||||
|
** 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-2.0.html and
|
||||||
|
** https://www.gnu.org/licenses/gpl-3.0.html.
|
||||||
**
|
**
|
||||||
** $QT_END_LICENSE$
|
** $QT_END_LICENSE$
|
||||||
**
|
**
|
||||||
|
@ -1,31 +1,37 @@
|
|||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
**
|
**
|
||||||
** Copyright (C) 2015 The Qt Company Ltd.
|
** Copyright (C) 2017 The Qt Company Ltd.
|
||||||
** Contact: http://www.qt.io/licensing/
|
** Contact: https://www.qt.io/licensing/
|
||||||
**
|
**
|
||||||
** This file is part of the qmake spec of the Qt Toolkit.
|
** This file is part of the qmake spec of the Qt Toolkit.
|
||||||
**
|
**
|
||||||
** $QT_BEGIN_LICENSE:LGPL21$
|
** $QT_BEGIN_LICENSE:LGPL$
|
||||||
** Commercial License Usage
|
** Commercial License Usage
|
||||||
** Licensees holding valid commercial Qt licenses may use this file in
|
** Licensees holding valid commercial Qt licenses may use this file in
|
||||||
** accordance with the commercial license agreement provided with the
|
** accordance with the commercial license agreement provided with the
|
||||||
** Software or, alternatively, in accordance with the terms contained in
|
** Software or, alternatively, in accordance with the terms contained in
|
||||||
** a written agreement between you and The Qt Company. For licensing terms
|
** a written agreement between you and The Qt Company. For licensing terms
|
||||||
** and conditions see http://www.qt.io/terms-conditions. For further
|
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||||
** information use the contact form at http://www.qt.io/contact-us.
|
** information use the contact form at https://www.qt.io/contact-us.
|
||||||
**
|
**
|
||||||
** GNU Lesser General Public License Usage
|
** GNU Lesser General Public License Usage
|
||||||
** Alternatively, this file may be used under the terms of the GNU Lesser
|
** Alternatively, this file may be used under the terms of the GNU Lesser
|
||||||
** General Public License version 2.1 or version 3 as published by the Free
|
** General Public License version 3 as published by the Free Software
|
||||||
** Software Foundation and appearing in the file LICENSE.LGPLv21 and
|
** Foundation and appearing in the file LICENSE.LGPL3 included in the
|
||||||
** LICENSE.LGPLv3 included in the packaging of this file. Please review the
|
** packaging of this file. Please review the following information to
|
||||||
** following information to ensure the GNU Lesser General Public License
|
** ensure the GNU Lesser General Public License version 3 requirements
|
||||||
** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
|
** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
|
||||||
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
|
||||||
**
|
**
|
||||||
** As a special exception, The Qt Company gives you certain additional
|
** GNU General Public License Usage
|
||||||
** rights. These rights are described in The Qt Company LGPL Exception
|
** Alternatively, this file may be used under the terms of the GNU
|
||||||
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
** General Public License version 2.0 or (at your option) the GNU General
|
||||||
|
** Public license version 3 or any later version approved by the KDE Free
|
||||||
|
** Qt Foundation. The licenses are as published by the Free Software
|
||||||
|
** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
|
||||||
|
** 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-2.0.html and
|
||||||
|
** https://www.gnu.org/licenses/gpl-3.0.html.
|
||||||
**
|
**
|
||||||
** $QT_END_LICENSE$
|
** $QT_END_LICENSE$
|
||||||
**
|
**
|
||||||
|
@ -1,31 +1,37 @@
|
|||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
**
|
**
|
||||||
** Copyright (C) 2016 The Qt Company Ltd.
|
** Copyright (C) 2017 The Qt Company Ltd.
|
||||||
** Contact: http://www.qt.io/licensing/
|
** Contact: https://www.qt.io/licensing/
|
||||||
**
|
**
|
||||||
** This file is part of the qmake spec of the Qt Toolkit.
|
** This file is part of the qmake spec of the Qt Toolkit.
|
||||||
**
|
**
|
||||||
** $QT_BEGIN_LICENSE:LGPL21$
|
** $QT_BEGIN_LICENSE:LGPL$
|
||||||
** Commercial License Usage
|
** Commercial License Usage
|
||||||
** Licensees holding valid commercial Qt licenses may use this file in
|
** Licensees holding valid commercial Qt licenses may use this file in
|
||||||
** accordance with the commercial license agreement provided with the
|
** accordance with the commercial license agreement provided with the
|
||||||
** Software or, alternatively, in accordance with the terms contained in
|
** Software or, alternatively, in accordance with the terms contained in
|
||||||
** a written agreement between you and The Qt Company. For licensing terms
|
** a written agreement between you and The Qt Company. For licensing terms
|
||||||
** and conditions see http://www.qt.io/terms-conditions. For further
|
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||||
** information use the contact form at http://www.qt.io/contact-us.
|
** information use the contact form at https://www.qt.io/contact-us.
|
||||||
**
|
**
|
||||||
** GNU Lesser General Public License Usage
|
** GNU Lesser General Public License Usage
|
||||||
** Alternatively, this file may be used under the terms of the GNU Lesser
|
** Alternatively, this file may be used under the terms of the GNU Lesser
|
||||||
** General Public License version 2.1 or version 3 as published by the Free
|
** General Public License version 3 as published by the Free Software
|
||||||
** Software Foundation and appearing in the file LICENSE.LGPLv21 and
|
** Foundation and appearing in the file LICENSE.LGPL3 included in the
|
||||||
** LICENSE.LGPLv3 included in the packaging of this file. Please review the
|
** packaging of this file. Please review the following information to
|
||||||
** following information to ensure the GNU Lesser General Public License
|
** ensure the GNU Lesser General Public License version 3 requirements
|
||||||
** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
|
** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
|
||||||
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
|
||||||
**
|
**
|
||||||
** As a special exception, The Qt Company gives you certain additional
|
** GNU General Public License Usage
|
||||||
** rights. These rights are described in The Qt Company LGPL Exception
|
** Alternatively, this file may be used under the terms of the GNU
|
||||||
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
** General Public License version 2.0 or (at your option) the GNU General
|
||||||
|
** Public license version 3 or any later version approved by the KDE Free
|
||||||
|
** Qt Foundation. The licenses are as published by the Free Software
|
||||||
|
** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
|
||||||
|
** 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-2.0.html and
|
||||||
|
** https://www.gnu.org/licenses/gpl-3.0.html.
|
||||||
**
|
**
|
||||||
** $QT_END_LICENSE$
|
** $QT_END_LICENSE$
|
||||||
**
|
**
|
||||||
|
@ -2,32 +2,38 @@
|
|||||||
|
|
||||||
#############################################################################
|
#############################################################################
|
||||||
##
|
##
|
||||||
## Copyright (C) 2015 The Qt Company Ltd.
|
## Copyright (C) 2017 The Qt Company Ltd.
|
||||||
## Contact: http://www.qt.io/licensing/
|
## Contact: https://www.qt.io/licensing/
|
||||||
##
|
##
|
||||||
## This file is the build configuration utility of the Qt Toolkit.
|
## This file is the build configuration utility of the Qt Toolkit.
|
||||||
##
|
##
|
||||||
## $QT_BEGIN_LICENSE:LGPL21$
|
## $QT_BEGIN_LICENSE:LGPL$
|
||||||
## Commercial License Usage
|
## Commercial License Usage
|
||||||
## Licensees holding valid commercial Qt licenses may use this file in
|
## Licensees holding valid commercial Qt licenses may use this file in
|
||||||
## accordance with the commercial license agreement provided with the
|
## accordance with the commercial license agreement provided with the
|
||||||
## Software or, alternatively, in accordance with the terms contained in
|
## Software or, alternatively, in accordance with the terms contained in
|
||||||
## a written agreement between you and The Qt Company. For licensing terms
|
## a written agreement between you and The Qt Company. For licensing terms
|
||||||
## and conditions see http://www.qt.io/terms-conditions. For further
|
## and conditions see https://www.qt.io/terms-conditions. For further
|
||||||
## information use the contact form at http://www.qt.io/contact-us.
|
## information use the contact form at https://www.qt.io/contact-us.
|
||||||
##
|
##
|
||||||
## GNU Lesser General Public License Usage
|
## GNU Lesser General Public License Usage
|
||||||
## Alternatively, this file may be used under the terms of the GNU Lesser
|
## Alternatively, this file may be used under the terms of the GNU Lesser
|
||||||
## General Public License version 2.1 or version 3 as published by the Free
|
## General Public License version 3 as published by the Free Software
|
||||||
## Software Foundation and appearing in the file LICENSE.LGPLv21 and
|
## Foundation and appearing in the file LICENSE.LGPL3 included in the
|
||||||
## LICENSE.LGPLv3 included in the packaging of this file. Please review the
|
## packaging of this file. Please review the following information to
|
||||||
## following information to ensure the GNU Lesser General Public License
|
## ensure the GNU Lesser General Public License version 3 requirements
|
||||||
## requirements will be met: https://www.gnu.org/licenses/lgpl.html and
|
## will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
|
||||||
## http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
|
||||||
##
|
##
|
||||||
## As a special exception, The Qt Company gives you certain additional
|
## GNU General Public License Usage
|
||||||
## rights. These rights are described in The Qt Company LGPL Exception
|
## Alternatively, this file may be used under the terms of the GNU
|
||||||
## version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
## General Public License version 2.0 or (at your option) the GNU General
|
||||||
|
## Public license version 3 or any later version approved by the KDE Free
|
||||||
|
## Qt Foundation. The licenses are as published by the Free Software
|
||||||
|
## Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
|
||||||
|
## 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-2.0.html and
|
||||||
|
## https://www.gnu.org/licenses/gpl-3.0.html.
|
||||||
##
|
##
|
||||||
## $QT_END_LICENSE$
|
## $QT_END_LICENSE$
|
||||||
##
|
##
|
||||||
|
@ -2,32 +2,38 @@
|
|||||||
|
|
||||||
#############################################################################
|
#############################################################################
|
||||||
##
|
##
|
||||||
## Copyright (C) 2016 The Qt Company Ltd.
|
## Copyright (C) 2017 The Qt Company Ltd.
|
||||||
## Contact: http://www.qt.io/licensing/
|
## Contact: https://www.qt.io/licensing/
|
||||||
##
|
##
|
||||||
## This file is the build configuration utility of the Qt Toolkit.
|
## This file is the build configuration utility of the Qt Toolkit.
|
||||||
##
|
##
|
||||||
## $QT_BEGIN_LICENSE:LGPL21$
|
## $QT_BEGIN_LICENSE:LGPL$
|
||||||
## Commercial License Usage
|
## Commercial License Usage
|
||||||
## Licensees holding valid commercial Qt licenses may use this file in
|
## Licensees holding valid commercial Qt licenses may use this file in
|
||||||
## accordance with the commercial license agreement provided with the
|
## accordance with the commercial license agreement provided with the
|
||||||
## Software or, alternatively, in accordance with the terms contained in
|
## Software or, alternatively, in accordance with the terms contained in
|
||||||
## a written agreement between you and The Qt Company. For licensing terms
|
## a written agreement between you and The Qt Company. For licensing terms
|
||||||
## and conditions see http://www.qt.io/terms-conditions. For further
|
## and conditions see https://www.qt.io/terms-conditions. For further
|
||||||
## information use the contact form at http://www.qt.io/contact-us.
|
## information use the contact form at https://www.qt.io/contact-us.
|
||||||
##
|
##
|
||||||
## GNU Lesser General Public License Usage
|
## GNU Lesser General Public License Usage
|
||||||
## Alternatively, this file may be used under the terms of the GNU Lesser
|
## Alternatively, this file may be used under the terms of the GNU Lesser
|
||||||
## General Public License version 2.1 or version 3 as published by the Free
|
## General Public License version 3 as published by the Free Software
|
||||||
## Software Foundation and appearing in the file LICENSE.LGPLv21 and
|
## Foundation and appearing in the file LICENSE.LGPL3 included in the
|
||||||
## LICENSE.LGPLv3 included in the packaging of this file. Please review the
|
## packaging of this file. Please review the following information to
|
||||||
## following information to ensure the GNU Lesser General Public License
|
## ensure the GNU Lesser General Public License version 3 requirements
|
||||||
## requirements will be met: https://www.gnu.org/licenses/lgpl.html and
|
## will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
|
||||||
## http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
|
||||||
##
|
##
|
||||||
## As a special exception, The Qt Company gives you certain additional
|
## GNU General Public License Usage
|
||||||
## rights. These rights are described in The Qt Company LGPL Exception
|
## Alternatively, this file may be used under the terms of the GNU
|
||||||
## version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
## General Public License version 2.0 or (at your option) the GNU General
|
||||||
|
## Public license version 3 or any later version approved by the KDE Free
|
||||||
|
## Qt Foundation. The licenses are as published by the Free Software
|
||||||
|
## Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
|
||||||
|
## 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-2.0.html and
|
||||||
|
## https://www.gnu.org/licenses/gpl-3.0.html.
|
||||||
##
|
##
|
||||||
## $QT_END_LICENSE$
|
## $QT_END_LICENSE$
|
||||||
##
|
##
|
||||||
|
@ -1,31 +1,37 @@
|
|||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
**
|
**
|
||||||
** Copyright (C) 2015 Green Hills Software. All rights reserved.
|
** Copyright (C) 2015 Green Hills Software. All rights reserved.
|
||||||
** Contact: http://www.qt.io/licensing/
|
** Contact: https://www.qt.io/licensing/
|
||||||
**
|
**
|
||||||
** This file is part of the qmake spec of the Qt Toolkit.
|
** This file is part of the qmake spec of the Qt Toolkit.
|
||||||
**
|
**
|
||||||
** $QT_BEGIN_LICENSE:LGPL21$
|
** $QT_BEGIN_LICENSE:LGPL$
|
||||||
** Commercial License Usage
|
** Commercial License Usage
|
||||||
** Licensees holding valid commercial Qt licenses may use this file in
|
** Licensees holding valid commercial Qt licenses may use this file in
|
||||||
** accordance with the commercial license agreement provided with the
|
** accordance with the commercial license agreement provided with the
|
||||||
** Software or, alternatively, in accordance with the terms contained in
|
** Software or, alternatively, in accordance with the terms contained in
|
||||||
** a written agreement between you and The Qt Company. For licensing terms
|
** a written agreement between you and The Qt Company. For licensing terms
|
||||||
** and conditions see http://www.qt.io/terms-conditions. For further
|
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||||
** information use the contact form at http://www.qt.io/contact-us.
|
** information use the contact form at https://www.qt.io/contact-us.
|
||||||
**
|
**
|
||||||
** GNU Lesser General Public License Usage
|
** GNU Lesser General Public License Usage
|
||||||
** Alternatively, this file may be used under the terms of the GNU Lesser
|
** Alternatively, this file may be used under the terms of the GNU Lesser
|
||||||
** General Public License version 2.1 or version 3 as published by the Free
|
** General Public License version 3 as published by the Free Software
|
||||||
** Software Foundation and appearing in the file LICENSE.LGPLv21 and
|
** Foundation and appearing in the file LICENSE.LGPL3 included in the
|
||||||
** LICENSE.LGPLv3 included in the packaging of this file. Please review the
|
** packaging of this file. Please review the following information to
|
||||||
** following information to ensure the GNU Lesser General Public License
|
** ensure the GNU Lesser General Public License version 3 requirements
|
||||||
** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
|
** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
|
||||||
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
|
||||||
**
|
**
|
||||||
** As a special exception, The Qt Company gives you certain additional
|
** GNU General Public License Usage
|
||||||
** rights. These rights are described in The Qt Company LGPL Exception
|
** Alternatively, this file may be used under the terms of the GNU
|
||||||
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
** General Public License version 2.0 or (at your option) the GNU General
|
||||||
|
** Public license version 3 or any later version approved by the KDE Free
|
||||||
|
** Qt Foundation. The licenses are as published by the Free Software
|
||||||
|
** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
|
||||||
|
** 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-2.0.html and
|
||||||
|
** https://www.gnu.org/licenses/gpl-3.0.html.
|
||||||
**
|
**
|
||||||
** $QT_END_LICENSE$
|
** $QT_END_LICENSE$
|
||||||
**
|
**
|
||||||
|
@ -1,31 +1,37 @@
|
|||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
**
|
**
|
||||||
** Copyright (C) 2015 Green Hills Software. All rights reserved.
|
** Copyright (C) 2015 Green Hills Software. All rights reserved.
|
||||||
** Contact: http://www.qt.io/licensing/
|
** Contact: https://www.qt.io/licensing/
|
||||||
**
|
**
|
||||||
** This file is part of the qmake spec of the Qt Toolkit.
|
** This file is part of the qmake spec of the Qt Toolkit.
|
||||||
**
|
**
|
||||||
** $QT_BEGIN_LICENSE:LGPL21$
|
** $QT_BEGIN_LICENSE:LGPL$
|
||||||
** Commercial License Usage
|
** Commercial License Usage
|
||||||
** Licensees holding valid commercial Qt licenses may use this file in
|
** Licensees holding valid commercial Qt licenses may use this file in
|
||||||
** accordance with the commercial license agreement provided with the
|
** accordance with the commercial license agreement provided with the
|
||||||
** Software or, alternatively, in accordance with the terms contained in
|
** Software or, alternatively, in accordance with the terms contained in
|
||||||
** a written agreement between you and The Qt Company. For licensing terms
|
** a written agreement between you and The Qt Company. For licensing terms
|
||||||
** and conditions see http://www.qt.io/terms-conditions. For further
|
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||||
** information use the contact form at http://www.qt.io/contact-us.
|
** information use the contact form at https://www.qt.io/contact-us.
|
||||||
**
|
**
|
||||||
** GNU Lesser General Public License Usage
|
** GNU Lesser General Public License Usage
|
||||||
** Alternatively, this file may be used under the terms of the GNU Lesser
|
** Alternatively, this file may be used under the terms of the GNU Lesser
|
||||||
** General Public License version 2.1 or version 3 as published by the Free
|
** General Public License version 3 as published by the Free Software
|
||||||
** Software Foundation and appearing in the file LICENSE.LGPLv21 and
|
** Foundation and appearing in the file LICENSE.LGPL3 included in the
|
||||||
** LICENSE.LGPLv3 included in the packaging of this file. Please review the
|
** packaging of this file. Please review the following information to
|
||||||
** following information to ensure the GNU Lesser General Public License
|
** ensure the GNU Lesser General Public License version 3 requirements
|
||||||
** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
|
** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
|
||||||
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
|
||||||
**
|
**
|
||||||
** As a special exception, The Qt Company gives you certain additional
|
** GNU General Public License Usage
|
||||||
** rights. These rights are described in The Qt Company LGPL Exception
|
** Alternatively, this file may be used under the terms of the GNU
|
||||||
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
** General Public License version 2.0 or (at your option) the GNU General
|
||||||
|
** Public license version 3 or any later version approved by the KDE Free
|
||||||
|
** Qt Foundation. The licenses are as published by the Free Software
|
||||||
|
** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
|
||||||
|
** 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-2.0.html and
|
||||||
|
** https://www.gnu.org/licenses/gpl-3.0.html.
|
||||||
**
|
**
|
||||||
** $QT_END_LICENSE$
|
** $QT_END_LICENSE$
|
||||||
**
|
**
|
||||||
|
@ -1,31 +1,37 @@
|
|||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
**
|
**
|
||||||
** Copyright (C) 2015 Green Hills Software. All rights reserved.
|
** Copyright (C) 2015 Green Hills Software. All rights reserved.
|
||||||
** Contact: http://www.qt.io/licensing/
|
** Contact: https://www.qt.io/licensing/
|
||||||
**
|
**
|
||||||
** This file is part of the qmake spec of the Qt Toolkit.
|
** This file is part of the qmake spec of the Qt Toolkit.
|
||||||
**
|
**
|
||||||
** $QT_BEGIN_LICENSE:LGPL21$
|
** $QT_BEGIN_LICENSE:LGPL$
|
||||||
** Commercial License Usage
|
** Commercial License Usage
|
||||||
** Licensees holding valid commercial Qt licenses may use this file in
|
** Licensees holding valid commercial Qt licenses may use this file in
|
||||||
** accordance with the commercial license agreement provided with the
|
** accordance with the commercial license agreement provided with the
|
||||||
** Software or, alternatively, in accordance with the terms contained in
|
** Software or, alternatively, in accordance with the terms contained in
|
||||||
** a written agreement between you and The Qt Company. For licensing terms
|
** a written agreement between you and The Qt Company. For licensing terms
|
||||||
** and conditions see http://www.qt.io/terms-conditions. For further
|
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||||
** information use the contact form at http://www.qt.io/contact-us.
|
** information use the contact form at https://www.qt.io/contact-us.
|
||||||
**
|
**
|
||||||
** GNU Lesser General Public License Usage
|
** GNU Lesser General Public License Usage
|
||||||
** Alternatively, this file may be used under the terms of the GNU Lesser
|
** Alternatively, this file may be used under the terms of the GNU Lesser
|
||||||
** General Public License version 2.1 or version 3 as published by the Free
|
** General Public License version 3 as published by the Free Software
|
||||||
** Software Foundation and appearing in the file LICENSE.LGPLv21 and
|
** Foundation and appearing in the file LICENSE.LGPL3 included in the
|
||||||
** LICENSE.LGPLv3 included in the packaging of this file. Please review the
|
** packaging of this file. Please review the following information to
|
||||||
** following information to ensure the GNU Lesser General Public License
|
** ensure the GNU Lesser General Public License version 3 requirements
|
||||||
** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
|
** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
|
||||||
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
|
||||||
**
|
**
|
||||||
** As a special exception, The Qt Company gives you certain additional
|
** GNU General Public License Usage
|
||||||
** rights. These rights are described in The Qt Company LGPL Exception
|
** Alternatively, this file may be used under the terms of the GNU
|
||||||
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
** General Public License version 2.0 or (at your option) the GNU General
|
||||||
|
** Public license version 3 or any later version approved by the KDE Free
|
||||||
|
** Qt Foundation. The licenses are as published by the Free Software
|
||||||
|
** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
|
||||||
|
** 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-2.0.html and
|
||||||
|
** https://www.gnu.org/licenses/gpl-3.0.html.
|
||||||
**
|
**
|
||||||
** $QT_END_LICENSE$
|
** $QT_END_LICENSE$
|
||||||
**
|
**
|
||||||
|
@ -1,31 +1,37 @@
|
|||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
**
|
**
|
||||||
** Copyright (C) 2015 The Qt Company Ltd.
|
** Copyright (C) 2017 The Qt Company Ltd.
|
||||||
** Contact: http://www.qt.io/licensing/
|
** Contact: https://www.qt.io/licensing/
|
||||||
**
|
**
|
||||||
** This file is part of the qmake spec of the Qt Toolkit.
|
** This file is part of the qmake spec of the Qt Toolkit.
|
||||||
**
|
**
|
||||||
** $QT_BEGIN_LICENSE:LGPL21$
|
** $QT_BEGIN_LICENSE:LGPL$
|
||||||
** Commercial License Usage
|
** Commercial License Usage
|
||||||
** Licensees holding valid commercial Qt licenses may use this file in
|
** Licensees holding valid commercial Qt licenses may use this file in
|
||||||
** accordance with the commercial license agreement provided with the
|
** accordance with the commercial license agreement provided with the
|
||||||
** Software or, alternatively, in accordance with the terms contained in
|
** Software or, alternatively, in accordance with the terms contained in
|
||||||
** a written agreement between you and The Qt Company. For licensing terms
|
** a written agreement between you and The Qt Company. For licensing terms
|
||||||
** and conditions see http://www.qt.io/terms-conditions. For further
|
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||||
** information use the contact form at http://www.qt.io/contact-us.
|
** information use the contact form at https://www.qt.io/contact-us.
|
||||||
**
|
**
|
||||||
** GNU Lesser General Public License Usage
|
** GNU Lesser General Public License Usage
|
||||||
** Alternatively, this file may be used under the terms of the GNU Lesser
|
** Alternatively, this file may be used under the terms of the GNU Lesser
|
||||||
** General Public License version 2.1 or version 3 as published by the Free
|
** General Public License version 3 as published by the Free Software
|
||||||
** Software Foundation and appearing in the file LICENSE.LGPLv21 and
|
** Foundation and appearing in the file LICENSE.LGPL3 included in the
|
||||||
** LICENSE.LGPLv3 included in the packaging of this file. Please review the
|
** packaging of this file. Please review the following information to
|
||||||
** following information to ensure the GNU Lesser General Public License
|
** ensure the GNU Lesser General Public License version 3 requirements
|
||||||
** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
|
** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
|
||||||
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
|
||||||
**
|
**
|
||||||
** As a special exception, The Qt Company gives you certain additional
|
** GNU General Public License Usage
|
||||||
** rights. These rights are described in The Qt Company LGPL Exception
|
** Alternatively, this file may be used under the terms of the GNU
|
||||||
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
** General Public License version 2.0 or (at your option) the GNU General
|
||||||
|
** Public license version 3 or any later version approved by the KDE Free
|
||||||
|
** Qt Foundation. The licenses are as published by the Free Software
|
||||||
|
** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
|
||||||
|
** 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-2.0.html and
|
||||||
|
** https://www.gnu.org/licenses/gpl-3.0.html.
|
||||||
**
|
**
|
||||||
** $QT_END_LICENSE$
|
** $QT_END_LICENSE$
|
||||||
**
|
**
|
||||||
|
@ -1,31 +1,37 @@
|
|||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
**
|
**
|
||||||
** Copyright (C) 2016 The Qt Company Ltd.
|
** Copyright (C) 2017 The Qt Company Ltd.
|
||||||
** Contact: http://www.qt.io/licensing/
|
** Contact: https://www.qt.io/licensing/
|
||||||
**
|
**
|
||||||
** This file is part of the qmake spec of the Qt Toolkit.
|
** This file is part of the qmake spec of the Qt Toolkit.
|
||||||
**
|
**
|
||||||
** $QT_BEGIN_LICENSE:LGPL21$
|
** $QT_BEGIN_LICENSE:LGPL$
|
||||||
** Commercial License Usage
|
** Commercial License Usage
|
||||||
** Licensees holding valid commercial Qt licenses may use this file in
|
** Licensees holding valid commercial Qt licenses may use this file in
|
||||||
** accordance with the commercial license agreement provided with the
|
** accordance with the commercial license agreement provided with the
|
||||||
** Software or, alternatively, in accordance with the terms contained in
|
** Software or, alternatively, in accordance with the terms contained in
|
||||||
** a written agreement between you and The Qt Company. For licensing terms
|
** a written agreement between you and The Qt Company. For licensing terms
|
||||||
** and conditions see http://www.qt.io/terms-conditions. For further
|
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||||
** information use the contact form at http://www.qt.io/contact-us.
|
** information use the contact form at https://www.qt.io/contact-us.
|
||||||
**
|
**
|
||||||
** GNU Lesser General Public License Usage
|
** GNU Lesser General Public License Usage
|
||||||
** Alternatively, this file may be used under the terms of the GNU Lesser
|
** Alternatively, this file may be used under the terms of the GNU Lesser
|
||||||
** General Public License version 2.1 or version 3 as published by the Free
|
** General Public License version 3 as published by the Free Software
|
||||||
** Software Foundation and appearing in the file LICENSE.LGPLv21 and
|
** Foundation and appearing in the file LICENSE.LGPL3 included in the
|
||||||
** LICENSE.LGPLv3 included in the packaging of this file. Please review the
|
** packaging of this file. Please review the following information to
|
||||||
** following information to ensure the GNU Lesser General Public License
|
** ensure the GNU Lesser General Public License version 3 requirements
|
||||||
** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
|
** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
|
||||||
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
|
||||||
**
|
**
|
||||||
** As a special exception, The Qt Company gives you certain additional
|
** GNU General Public License Usage
|
||||||
** rights. These rights are described in The Qt Company LGPL Exception
|
** Alternatively, this file may be used under the terms of the GNU
|
||||||
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
** General Public License version 2.0 or (at your option) the GNU General
|
||||||
|
** Public license version 3 or any later version approved by the KDE Free
|
||||||
|
** Qt Foundation. The licenses are as published by the Free Software
|
||||||
|
** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
|
||||||
|
** 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-2.0.html and
|
||||||
|
** https://www.gnu.org/licenses/gpl-3.0.html.
|
||||||
**
|
**
|
||||||
** $QT_END_LICENSE$
|
** $QT_END_LICENSE$
|
||||||
**
|
**
|
||||||
|
@ -1,31 +1,37 @@
|
|||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
**
|
**
|
||||||
** Copyright (C) 2016 QNX Software Systems. All rights reserved.
|
** Copyright (C) 2016 QNX Software Systems. All rights reserved.
|
||||||
** Contact: http://www.qt.io/licensing/
|
** Contact: https://www.qt.io/licensing/
|
||||||
**
|
**
|
||||||
** This file is part of the qmake spec of the Qt Toolkit.
|
** This file is part of the qmake spec of the Qt Toolkit.
|
||||||
**
|
**
|
||||||
** $QT_BEGIN_LICENSE:LGPL21$
|
** $QT_BEGIN_LICENSE:LGPL$
|
||||||
** Commercial License Usage
|
** Commercial License Usage
|
||||||
** Licensees holding valid commercial Qt licenses may use this file in
|
** Licensees holding valid commercial Qt licenses may use this file in
|
||||||
** accordance with the commercial license agreement provided with the
|
** accordance with the commercial license agreement provided with the
|
||||||
** Software or, alternatively, in accordance with the terms contained in
|
** Software or, alternatively, in accordance with the terms contained in
|
||||||
** a written agreement between you and The Qt Company. For licensing terms
|
** a written agreement between you and The Qt Company. For licensing terms
|
||||||
** and conditions see http://www.qt.io/terms-conditions. For further
|
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||||
** information use the contact form at http://www.qt.io/contact-us.
|
** information use the contact form at https://www.qt.io/contact-us.
|
||||||
**
|
**
|
||||||
** GNU Lesser General Public License Usage
|
** GNU Lesser General Public License Usage
|
||||||
** Alternatively, this file may be used under the terms of the GNU Lesser
|
** Alternatively, this file may be used under the terms of the GNU Lesser
|
||||||
** General Public License version 2.1 or version 3 as published by the Free
|
** General Public License version 3 as published by the Free Software
|
||||||
** Software Foundation and appearing in the file LICENSE.LGPLv21 and
|
** Foundation and appearing in the file LICENSE.LGPL3 included in the
|
||||||
** LICENSE.LGPLv3 included in the packaging of this file. Please review the
|
** packaging of this file. Please review the following information to
|
||||||
** following information to ensure the GNU Lesser General Public License
|
** ensure the GNU Lesser General Public License version 3 requirements
|
||||||
** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
|
** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
|
||||||
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
|
||||||
**
|
**
|
||||||
** As a special exception, The Qt Company gives you certain additional
|
** GNU General Public License Usage
|
||||||
** rights. These rights are described in The Qt Company LGPL Exception
|
** Alternatively, this file may be used under the terms of the GNU
|
||||||
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
** General Public License version 2.0 or (at your option) the GNU General
|
||||||
|
** Public license version 3 or any later version approved by the KDE Free
|
||||||
|
** Qt Foundation. The licenses are as published by the Free Software
|
||||||
|
** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
|
||||||
|
** 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-2.0.html and
|
||||||
|
** https://www.gnu.org/licenses/gpl-3.0.html.
|
||||||
**
|
**
|
||||||
** $QT_END_LICENSE$
|
** $QT_END_LICENSE$
|
||||||
**
|
**
|
||||||
|
@ -1,31 +1,37 @@
|
|||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
**
|
**
|
||||||
** Copyright (C) 2016 QNX Software Systems. All rights reserved.
|
** Copyright (C) 2016 QNX Software Systems. All rights reserved.
|
||||||
** Contact: http://www.qt.io/licensing/
|
** Contact: https://www.qt.io/licensing/
|
||||||
**
|
**
|
||||||
** This file is part of the qmake spec of the Qt Toolkit.
|
** This file is part of the qmake spec of the Qt Toolkit.
|
||||||
**
|
**
|
||||||
** $QT_BEGIN_LICENSE:LGPL21$
|
** $QT_BEGIN_LICENSE:LGPL$
|
||||||
** Commercial License Usage
|
** Commercial License Usage
|
||||||
** Licensees holding valid commercial Qt licenses may use this file in
|
** Licensees holding valid commercial Qt licenses may use this file in
|
||||||
** accordance with the commercial license agreement provided with the
|
** accordance with the commercial license agreement provided with the
|
||||||
** Software or, alternatively, in accordance with the terms contained in
|
** Software or, alternatively, in accordance with the terms contained in
|
||||||
** a written agreement between you and The Qt Company. For licensing terms
|
** a written agreement between you and The Qt Company. For licensing terms
|
||||||
** and conditions see http://www.qt.io/terms-conditions. For further
|
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||||
** information use the contact form at http://www.qt.io/contact-us.
|
** information use the contact form at https://www.qt.io/contact-us.
|
||||||
**
|
**
|
||||||
** GNU Lesser General Public License Usage
|
** GNU Lesser General Public License Usage
|
||||||
** Alternatively, this file may be used under the terms of the GNU Lesser
|
** Alternatively, this file may be used under the terms of the GNU Lesser
|
||||||
** General Public License version 2.1 or version 3 as published by the Free
|
** General Public License version 3 as published by the Free Software
|
||||||
** Software Foundation and appearing in the file LICENSE.LGPLv21 and
|
** Foundation and appearing in the file LICENSE.LGPL3 included in the
|
||||||
** LICENSE.LGPLv3 included in the packaging of this file. Please review the
|
** packaging of this file. Please review the following information to
|
||||||
** following information to ensure the GNU Lesser General Public License
|
** ensure the GNU Lesser General Public License version 3 requirements
|
||||||
** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
|
** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
|
||||||
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
|
||||||
**
|
**
|
||||||
** As a special exception, The Qt Company gives you certain additional
|
** GNU General Public License Usage
|
||||||
** rights. These rights are described in The Qt Company LGPL Exception
|
** Alternatively, this file may be used under the terms of the GNU
|
||||||
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
** General Public License version 2.0 or (at your option) the GNU General
|
||||||
|
** Public license version 3 or any later version approved by the KDE Free
|
||||||
|
** Qt Foundation. The licenses are as published by the Free Software
|
||||||
|
** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
|
||||||
|
** 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-2.0.html and
|
||||||
|
** https://www.gnu.org/licenses/gpl-3.0.html.
|
||||||
**
|
**
|
||||||
** $QT_END_LICENSE$
|
** $QT_END_LICENSE$
|
||||||
**
|
**
|
||||||
|
@ -2024,6 +2024,15 @@
|
|||||||
of this variable is typically handled by qmake
|
of this variable is typically handled by qmake
|
||||||
or \l{#QMAKESPEC}{qmake.conf} and rarely needs to be modified.
|
or \l{#QMAKESPEC}{qmake.conf} and rarely needs to be modified.
|
||||||
|
|
||||||
|
\section1 QMAKE_LINK
|
||||||
|
|
||||||
|
Specifies the linker that will be used when building
|
||||||
|
application based projects. Only the file name of the linker
|
||||||
|
executable needs to be specified as long as it is on a path
|
||||||
|
contained in the \c PATH variable when the Makefile is processed.
|
||||||
|
The value of this variable is typically handled by qmake or
|
||||||
|
\l{#QMAKESPEC}{qmake.conf} and rarely needs to be modified.
|
||||||
|
|
||||||
\section1 QMAKE_LINK_SHLIB_CMD
|
\section1 QMAKE_LINK_SHLIB_CMD
|
||||||
|
|
||||||
Specifies the command to execute when creating a shared
|
Specifies the command to execute when creating a shared
|
||||||
|
@ -662,8 +662,6 @@ void NmakeMakefileGenerator::writeLinkCommand(QTextStream &t, const QString &ext
|
|||||||
|
|
||||||
void NmakeMakefileGenerator::writeResponseFileFiles(QTextStream &t, const ProStringList &files)
|
void NmakeMakefileGenerator::writeResponseFileFiles(QTextStream &t, const ProStringList &files)
|
||||||
{
|
{
|
||||||
if (files.isEmpty())
|
|
||||||
return;
|
|
||||||
// Add line breaks in file lists in reponse files to work around LNK1170.
|
// Add line breaks in file lists in reponse files to work around LNK1170.
|
||||||
// The actual line length limit is 131070, but let's use a smaller limit
|
// The actual line length limit is 131070, but let's use a smaller limit
|
||||||
// in case other tools are similarly hampered.
|
// in case other tools are similarly hampered.
|
||||||
|
@ -58,6 +58,7 @@
|
|||||||
#include <time.h>
|
#include <time.h>
|
||||||
#include <utime.h>
|
#include <utime.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
|
#include <fcntl.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <signal.h>
|
#include <signal.h>
|
||||||
#include <sys/wait.h>
|
#include <sys/wait.h>
|
||||||
@ -1818,10 +1819,16 @@ QMakeEvaluator::VisitReturn QMakeEvaluator::evaluateBuiltinConditional(
|
|||||||
evalError(fL1S("Cannot stat() reference file %1: %2.").arg(rfn, fL1S(strerror(errno))));
|
evalError(fL1S("Cannot stat() reference file %1: %2.").arg(rfn, fL1S(strerror(errno))));
|
||||||
return ReturnFalse;
|
return ReturnFalse;
|
||||||
}
|
}
|
||||||
|
#if defined(_POSIX_VERSION) && _POSIX_VERSION >= 200809L
|
||||||
|
const struct timespec times[2] = { { 0, UTIME_NOW }, st.st_mtim };
|
||||||
|
const bool utimeError = utimensat(AT_FDCWD, tfn.toLocal8Bit().constData(), times, 0) < 0;
|
||||||
|
#else
|
||||||
struct utimbuf utb;
|
struct utimbuf utb;
|
||||||
utb.actime = time(0);
|
utb.actime = time(0);
|
||||||
utb.modtime = st.st_mtime;
|
utb.modtime = st.st_mtime;
|
||||||
if (utime(tfn.toLocal8Bit().constData(), &utb)) {
|
const bool utimeError = utime(tfn.toLocal8Bit().constData(), &utb) < 0;
|
||||||
|
#endif
|
||||||
|
if (utimeError) {
|
||||||
evalError(fL1S("Cannot touch %1: %2.").arg(tfn, fL1S(strerror(errno))));
|
evalError(fL1S("Cannot touch %1: %2.").arg(tfn, fL1S(strerror(errno))));
|
||||||
return ReturnFalse;
|
return ReturnFalse;
|
||||||
}
|
}
|
||||||
|
@ -145,19 +145,11 @@ bool QString::contains(const QRegularExpression ®exp) const;
|
|||||||
//! [9]
|
//! [9]
|
||||||
|
|
||||||
|
|
||||||
//! [10]
|
|
||||||
std::bind(&QString::contains, QRegularExpression("^\\S+$")); // matches strings without whitespace
|
|
||||||
//! [10]
|
|
||||||
|
|
||||||
|
|
||||||
//! [11]
|
|
||||||
bool contains(const QString &string)
|
|
||||||
//! [11]
|
|
||||||
|
|
||||||
|
|
||||||
//! [12]
|
//! [12]
|
||||||
QStringList strings = ...;
|
QStringList strings = ...;
|
||||||
std::bind(static_cast<bool(QString::*)(const QRegularExpression&)>( &QString::contains ), QRegularExpression("..."));
|
QFuture<QString> future = QtConcurrent::filtered(list, [](const QString &str) {
|
||||||
|
return str.contains(QRegularExpression("^\\S+$")); // matches strings without whitespace
|
||||||
|
});
|
||||||
//! [12]
|
//! [12]
|
||||||
|
|
||||||
//! [13]
|
//! [13]
|
||||||
|
@ -158,19 +158,11 @@ QImage QImage::scaledToWidth(int width, Qt::TransformationMode) const;
|
|||||||
//! [10]
|
//! [10]
|
||||||
|
|
||||||
|
|
||||||
//! [11]
|
|
||||||
std::bind(&QImage::scaledToWidth, 100, Qt::SmoothTransformation)
|
|
||||||
//! [11]
|
|
||||||
|
|
||||||
|
|
||||||
//! [12]
|
|
||||||
QImage scaledToWith(const QImage &image)
|
|
||||||
//! [12]
|
|
||||||
|
|
||||||
|
|
||||||
//! [13]
|
//! [13]
|
||||||
QList<QImage> images = ...;
|
QList<QImage> images = ...;
|
||||||
QFuture<QImage> thumbnails = QtConcurrent::mapped(images, std::bind(&QImage::scaledToWidth, 100, Qt::SmoothTransformation));
|
QFuture<QImage> thumbnails = QtConcurrent::mapped(images, [](const QImage &img) {
|
||||||
|
return img.scaledToWidth(100, Qt::SmoothTransformation);
|
||||||
|
});
|
||||||
//! [13]
|
//! [13]
|
||||||
|
|
||||||
//! [14]
|
//! [14]
|
||||||
|
@ -109,7 +109,8 @@ future.waitForFinished();
|
|||||||
|
|
||||||
|
|
||||||
//! [6]
|
//! [6]
|
||||||
void someFunction(int arg1, double arg2);
|
QFuture<void> future = QtConcurrent::run([=]() {
|
||||||
QFuture<void> future = QtConcurrent::run(std::bind(someFunction, 1, 2.0));
|
// Code in this block will run in another thread
|
||||||
|
});
|
||||||
...
|
...
|
||||||
//! [6]
|
//! [6]
|
||||||
|
@ -148,13 +148,11 @@
|
|||||||
|
|
||||||
\snippet code/src_concurrent_qtconcurrentfilter.cpp 13
|
\snippet code/src_concurrent_qtconcurrentfilter.cpp 13
|
||||||
|
|
||||||
\section2 Using Bound Function Arguments
|
\section2 Wrapping Functions that Take Multiple Arguments
|
||||||
|
|
||||||
If you want to use a filter function takes more than one argument, you can
|
If you want to use a filter function takes more than one argument, you can
|
||||||
use std::bind() to transform it onto a function that takes one argument. If
|
use a lambda function or \c std::bind() to transform it onto a function that
|
||||||
C++11 support is not available, \l{http://www.boost.org/libs/bind/bind.html}
|
takes one argument.
|
||||||
{boost::bind()} or \l{http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1836.pdf}
|
|
||||||
{std::tr1::bind()} are suitable replacements.
|
|
||||||
|
|
||||||
As an example, we use QString::contains():
|
As an example, we use QString::contains():
|
||||||
|
|
||||||
@ -166,16 +164,6 @@
|
|||||||
use QString::contains() with QtConcurrent::filtered() we have to provide a
|
use QString::contains() with QtConcurrent::filtered() we have to provide a
|
||||||
value for the \e regexp argument:
|
value for the \e regexp argument:
|
||||||
|
|
||||||
\snippet code/src_concurrent_qtconcurrentfilter.cpp 10
|
|
||||||
|
|
||||||
The return value from std::bind() is a function object (functor) with
|
|
||||||
the following signature:
|
|
||||||
|
|
||||||
\snippet code/src_concurrent_qtconcurrentfilter.cpp 11
|
|
||||||
|
|
||||||
This matches what QtConcurrent::filtered() expects, and the complete
|
|
||||||
example becomes:
|
|
||||||
|
|
||||||
\snippet code/src_concurrent_qtconcurrentfilter.cpp 12
|
\snippet code/src_concurrent_qtconcurrentfilter.cpp 12
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -198,13 +198,11 @@
|
|||||||
|
|
||||||
\snippet code/src_concurrent_qtconcurrentmap.cpp 14
|
\snippet code/src_concurrent_qtconcurrentmap.cpp 14
|
||||||
|
|
||||||
\section2 Using Bound Function Arguments
|
\section2 Wrapping Functions that Take Multiple Arguments
|
||||||
|
|
||||||
If you want to use a map function that takes more than one argument you can
|
If you want to use a map function that takes more than one argument you can
|
||||||
use std::bind() to transform it onto a function that takes one argument. If
|
use a lambda function or \c std::bind() to transform it onto a function that
|
||||||
C++11 support is not available, \l{http://www.boost.org/libs/bind/bind.html}
|
takes one argument.
|
||||||
{boost::bind()} or \l{http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1836.pdf}
|
|
||||||
{std::tr1::bind()} are suitable replacements.
|
|
||||||
|
|
||||||
As an example, we'll use QImage::scaledToWidth():
|
As an example, we'll use QImage::scaledToWidth():
|
||||||
|
|
||||||
@ -216,16 +214,6 @@
|
|||||||
QImage::scaledToWidth() with QtConcurrent::mapped() we have to provide a
|
QImage::scaledToWidth() with QtConcurrent::mapped() we have to provide a
|
||||||
value for the \e{width} and the \e{transformation mode}:
|
value for the \e{width} and the \e{transformation mode}:
|
||||||
|
|
||||||
\snippet code/src_concurrent_qtconcurrentmap.cpp 11
|
|
||||||
|
|
||||||
The return value from std::bind() is a function object (functor) with
|
|
||||||
the following signature:
|
|
||||||
|
|
||||||
\snippet code/src_concurrent_qtconcurrentmap.cpp 12
|
|
||||||
|
|
||||||
This matches what QtConcurrent::mapped() expects, and the complete example
|
|
||||||
becomes:
|
|
||||||
|
|
||||||
\snippet code/src_concurrent_qtconcurrentmap.cpp 13
|
\snippet code/src_concurrent_qtconcurrentmap.cpp 13
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -107,25 +107,9 @@
|
|||||||
|
|
||||||
\snippet code/src_concurrent_qtconcurrentrun.cpp 5
|
\snippet code/src_concurrent_qtconcurrentrun.cpp 5
|
||||||
|
|
||||||
\section2 Using Bound Function Arguments
|
\section2 Using Lambda Functions
|
||||||
|
|
||||||
You can use std::bind() to \e bind a number of arguments to a function when
|
Calling a lambda function is done like this:
|
||||||
called. If C++11 support is not available, \l{http://www.boost.org/libs/bind/bind.html}
|
|
||||||
{boost::bind()} or \l{http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1836.pdf}
|
|
||||||
{std::tr1::bind()} are suitable replacements.
|
|
||||||
|
|
||||||
There are number of reasons for binding:
|
|
||||||
|
|
||||||
\list
|
|
||||||
\li To call a function that takes more than 5 arguments.
|
|
||||||
\li To simplify calling a function with constant arguments.
|
|
||||||
\li Changing the order of arguments.
|
|
||||||
\endlist
|
|
||||||
|
|
||||||
See the documentation for the relevant functions for details on how to use
|
|
||||||
the bind API.
|
|
||||||
|
|
||||||
Calling a bound function is done like this:
|
|
||||||
|
|
||||||
\snippet code/src_concurrent_qtconcurrentrun.cpp 6
|
\snippet code/src_concurrent_qtconcurrentrun.cpp 6
|
||||||
*/
|
*/
|
||||||
|
@ -6,7 +6,17 @@
|
|||||||
** This file is part of the documentation of the Qt Toolkit.
|
** This file is part of the documentation of the Qt Toolkit.
|
||||||
**
|
**
|
||||||
** $QT_BEGIN_LICENSE:BSD$
|
** $QT_BEGIN_LICENSE:BSD$
|
||||||
** You may use this file under the terms of the BSD license as follows:
|
** 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.
|
||||||
|
**
|
||||||
|
** BSD License Usage
|
||||||
|
** Alternatively, you may use this file under the terms of the BSD license
|
||||||
|
** as follows:
|
||||||
**
|
**
|
||||||
** "Redistribution and use in source and binary forms, with or without
|
** "Redistribution and use in source and binary forms, with or without
|
||||||
** modification, are permitted provided that the following conditions are
|
** modification, are permitted provided that the following conditions are
|
||||||
|
@ -6,7 +6,17 @@
|
|||||||
** This file is part of the documentation of the Qt Toolkit.
|
** This file is part of the documentation of the Qt Toolkit.
|
||||||
**
|
**
|
||||||
** $QT_BEGIN_LICENSE:BSD$
|
** $QT_BEGIN_LICENSE:BSD$
|
||||||
** You may use this file under the terms of the BSD license as follows:
|
** 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.
|
||||||
|
**
|
||||||
|
** BSD License Usage
|
||||||
|
** Alternatively, you may use this file under the terms of the BSD license
|
||||||
|
** as follows:
|
||||||
**
|
**
|
||||||
** "Redistribution and use in source and binary forms, with or without
|
** "Redistribution and use in source and binary forms, with or without
|
||||||
** modification, are permitted provided that the following conditions are
|
** modification, are permitted provided that the following conditions are
|
||||||
|
@ -364,9 +364,6 @@
|
|||||||
connect(sender, &QObject::destroyed, [=](){ this->m_objects.remove(sender); });
|
connect(sender, &QObject::destroyed, [=](){ this->m_objects.remove(sender); });
|
||||||
\endcode
|
\endcode
|
||||||
|
|
||||||
Note that if your compiler does not support C++11 variadic templates,
|
|
||||||
this syntax only works if the signal and slot have 6 arguments or less.
|
|
||||||
|
|
||||||
The other way to connect a signal to a slot is to use QObject::connect()
|
The other way to connect a signal to a slot is to use QObject::connect()
|
||||||
and the \c{SIGNAL} and \c{SLOT} macros.
|
and the \c{SIGNAL} and \c{SLOT} macros.
|
||||||
The rule about whether to
|
The rule about whether to
|
||||||
|
@ -1938,6 +1938,19 @@ bool qSharedBuild() Q_DECL_NOTHROW
|
|||||||
disable functions deprecated in Qt 5.1 and earlier. In any release, set
|
disable functions deprecated in Qt 5.1 and earlier. In any release, set
|
||||||
QT_DISABLE_DEPRECATED_BEFORE=0x000000 to enable any functions, including the ones
|
QT_DISABLE_DEPRECATED_BEFORE=0x000000 to enable any functions, including the ones
|
||||||
deprecated in Qt 5.0
|
deprecated in Qt 5.0
|
||||||
|
|
||||||
|
\sa QT_DEPRECATED_WARNINGS
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\macro QT_DEPRECATED_WARNINGS
|
||||||
|
\relates <QtGlobal>
|
||||||
|
|
||||||
|
If this macro is defined, the compiler will generate warnings if API declared as
|
||||||
|
deprecated by Qt is used.
|
||||||
|
|
||||||
|
\sa QT_DISABLE_DEPRECATED_BEFORE
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#if defined(QT_BUILD_QMAKE)
|
#if defined(QT_BUILD_QMAKE)
|
||||||
|
@ -825,9 +825,91 @@ void QMetaType::registerStreamOperators(int idx, SaveOperator saveOp,
|
|||||||
}
|
}
|
||||||
#endif // QT_NO_DATASTREAM
|
#endif // QT_NO_DATASTREAM
|
||||||
|
|
||||||
|
#if defined(Q_COMPILER_CONSTEXPR) || (defined(Q_CC_MSVC) && Q_CC_MSVC >= 1900)
|
||||||
|
// We don't officially support constexpr in MSVC 2015, but the limited support it
|
||||||
|
// has is enough for the code below.
|
||||||
|
|
||||||
|
# define STRINGIFY_TYPE_NAME(MetaTypeName, TypeId, RealName) \
|
||||||
|
#RealName "\0"
|
||||||
|
# define CALCULATE_TYPE_LEN(MetaTypeName, TypeId, RealName) \
|
||||||
|
short(sizeof(#RealName)),
|
||||||
|
# define MAP_TYPE_ID_TO_IDX(MetaTypeName, TypeId, RealName) \
|
||||||
|
TypeId,
|
||||||
|
|
||||||
|
namespace {
|
||||||
|
// All type names in one long string.
|
||||||
|
constexpr char metaTypeStrings[] = QT_FOR_EACH_STATIC_TYPE(STRINGIFY_TYPE_NAME);
|
||||||
|
|
||||||
|
// The sizes of the strings in the metaTypeStrings string (including terminating null)
|
||||||
|
constexpr short metaTypeNameSizes[] = {
|
||||||
|
QT_FOR_EACH_STATIC_TYPE(CALCULATE_TYPE_LEN)
|
||||||
|
};
|
||||||
|
|
||||||
|
// The type IDs, in the order of the metaTypeStrings data
|
||||||
|
constexpr short metaTypeIds[] = {
|
||||||
|
QT_FOR_EACH_STATIC_TYPE(MAP_TYPE_ID_TO_IDX)
|
||||||
|
};
|
||||||
|
|
||||||
|
constexpr int MetaTypeNameCount = sizeof(metaTypeNameSizes) / sizeof(metaTypeNameSizes[0]);
|
||||||
|
|
||||||
|
template <typename IntegerSequence> struct MetaTypeOffsets;
|
||||||
|
template <int... TypeIds> struct MetaTypeOffsets<QtPrivate::IndexesList<TypeIds...>>
|
||||||
|
{
|
||||||
|
// This would have been a lot easier if the meta types that the macro
|
||||||
|
// QT_FOR_EACH_STATIC_TYPE declared were in sorted, ascending order, but
|
||||||
|
// they're not (i.e., the first one declared is QMetaType::Void == 43,
|
||||||
|
// followed by QMetaType::Bool == 1)... As a consequence, we need to use
|
||||||
|
// the C++11 constexpr function calculateOffsetForTypeId below in order to
|
||||||
|
// create the offset array.
|
||||||
|
|
||||||
|
static constexpr int findTypeId(int typeId, int i = 0)
|
||||||
|
{
|
||||||
|
return i >= MetaTypeNameCount ? -1 :
|
||||||
|
metaTypeIds[i] == typeId ? i : findTypeId(typeId, i + 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
static constexpr short calculateOffsetForIdx(int i)
|
||||||
|
{
|
||||||
|
return i < 0 ? -1 :
|
||||||
|
i == 0 ? 0 : metaTypeNameSizes[i - 1] + calculateOffsetForIdx(i - 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
static constexpr short calculateOffsetForTypeId(int typeId)
|
||||||
|
{
|
||||||
|
return calculateOffsetForIdx(findTypeId(typeId));
|
||||||
|
#if 0
|
||||||
|
// same as, but this is only valid in C++14:
|
||||||
|
short offset = 0;
|
||||||
|
for (int i = 0; i < MetaTypeNameCount; ++i) {
|
||||||
|
if (metaTypeIds[i] == typeId)
|
||||||
|
return offset;
|
||||||
|
offset += metaTypeNameSizes[i];
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
short offsets[sizeof...(TypeIds)];
|
||||||
|
constexpr MetaTypeOffsets() : offsets{calculateOffsetForTypeId(TypeIds)...} {}
|
||||||
|
|
||||||
|
const char *operator[](int typeId) const Q_DECL_NOTHROW
|
||||||
|
{
|
||||||
|
short o = offsets[typeId];
|
||||||
|
return o < 0 ? nullptr : metaTypeStrings + o;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
} // anonymous namespace
|
||||||
|
|
||||||
|
constexpr MetaTypeOffsets<QtPrivate::Indexes<QMetaType::HighestInternalId + 1>::Value> metaTypeNames {};
|
||||||
|
# undef STRINGIFY_TYPE_NAME
|
||||||
|
# undef CALCULATE_TYPE_LEN
|
||||||
|
# undef MAP_TYPE_ID_TO_IDX
|
||||||
|
#endif
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
Returns the type name associated with the given \a typeId, or 0 if no
|
Returns the type name associated with the given \a typeId, or a null
|
||||||
matching type was found. The returned pointer must not be deleted.
|
pointer if no matching type was found. The returned pointer must not be
|
||||||
|
deleted.
|
||||||
|
|
||||||
\sa type(), isRegistered(), Type
|
\sa type(), isRegistered(), Type
|
||||||
*/
|
*/
|
||||||
@ -837,14 +919,18 @@ const char *QMetaType::typeName(int typeId)
|
|||||||
#define QT_METATYPE_TYPEID_TYPENAME_CONVERTER(MetaTypeName, TypeId, RealName) \
|
#define QT_METATYPE_TYPEID_TYPENAME_CONVERTER(MetaTypeName, TypeId, RealName) \
|
||||||
case QMetaType::MetaTypeName: return #RealName; break;
|
case QMetaType::MetaTypeName: return #RealName; break;
|
||||||
|
|
||||||
switch (QMetaType::Type(type)) {
|
if (Q_LIKELY(type <= QMetaType::HighestInternalId)) {
|
||||||
QT_FOR_EACH_STATIC_TYPE(QT_METATYPE_TYPEID_TYPENAME_CONVERTER)
|
#if defined(Q_COMPILER_CONSTEXPR) || (defined(Q_CC_MSVC) && Q_CC_MSVC >= 1900)
|
||||||
case QMetaType::UnknownType:
|
return metaTypeNames[typeId];
|
||||||
case QMetaType::User:
|
#else
|
||||||
break;
|
switch (QMetaType::Type(type)) {
|
||||||
}
|
QT_FOR_EACH_STATIC_TYPE(QT_METATYPE_TYPEID_TYPENAME_CONVERTER)
|
||||||
|
case QMetaType::UnknownType:
|
||||||
if (Q_UNLIKELY(type < QMetaType::User)) {
|
case QMetaType::User:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
} else if (Q_UNLIKELY(type < QMetaType::User)) {
|
||||||
return nullptr; // It can happen when someone cast int to QVariant::Type, we should not crash...
|
return nullptr; // It can happen when someone cast int to QVariant::Type, we should not crash...
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4655,12 +4655,8 @@ void qDeleteInEventHandler(QObject *o)
|
|||||||
make sure to declare the argument type with Q_DECLARE_METATYPE
|
make sure to declare the argument type with Q_DECLARE_METATYPE
|
||||||
|
|
||||||
Overloaded functions can be resolved with help of \l qOverload.
|
Overloaded functions can be resolved with help of \l qOverload.
|
||||||
|
|
||||||
\note The number of arguments in the signal or slot are limited to 6 if
|
|
||||||
the compiler does not support C++11 variadic templates.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
\fn QMetaObject::Connection QObject::connect(const QObject *sender, PointerToMemberFunction signal, Functor functor)
|
\fn QMetaObject::Connection QObject::connect(const QObject *sender, PointerToMemberFunction signal, Functor functor)
|
||||||
|
|
||||||
@ -4683,7 +4679,7 @@ void qDeleteInEventHandler(QObject *o)
|
|||||||
|
|
||||||
\snippet code/src_corelib_kernel_qobject.cpp 45
|
\snippet code/src_corelib_kernel_qobject.cpp 45
|
||||||
|
|
||||||
If your compiler support C++11 lambda expressions, you can use them:
|
Lambda expressions can also be used:
|
||||||
|
|
||||||
\snippet code/src_corelib_kernel_qobject.cpp 46
|
\snippet code/src_corelib_kernel_qobject.cpp 46
|
||||||
|
|
||||||
@ -4693,9 +4689,6 @@ void qDeleteInEventHandler(QObject *o)
|
|||||||
|
|
||||||
Overloaded functions can be resolved with help of \l qOverload.
|
Overloaded functions can be resolved with help of \l qOverload.
|
||||||
|
|
||||||
\note If the compiler does not support C++11 variadic templates, the number
|
|
||||||
of arguments in the signal or slot are limited to 6, and the functor object
|
|
||||||
must not have an overloaded or templated operator().
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
@ -4726,7 +4719,7 @@ void qDeleteInEventHandler(QObject *o)
|
|||||||
|
|
||||||
\snippet code/src_corelib_kernel_qobject.cpp 50
|
\snippet code/src_corelib_kernel_qobject.cpp 50
|
||||||
|
|
||||||
If your compiler support C++11 lambda expressions, you can use them:
|
Lambda expressions can also be used:
|
||||||
|
|
||||||
\snippet code/src_corelib_kernel_qobject.cpp 51
|
\snippet code/src_corelib_kernel_qobject.cpp 51
|
||||||
|
|
||||||
@ -4736,10 +4729,6 @@ void qDeleteInEventHandler(QObject *o)
|
|||||||
are still alive when the signal is emitted.
|
are still alive when the signal is emitted.
|
||||||
|
|
||||||
Overloaded functions can be resolved with help of \l qOverload.
|
Overloaded functions can be resolved with help of \l qOverload.
|
||||||
|
|
||||||
\note If the compiler does not support C++11 variadic templates, the number
|
|
||||||
of arguments in the signal or slot are limited to 6, and the functor object
|
|
||||||
must not have an overloaded or templated operator().
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
|
@ -207,7 +207,9 @@ QT_BEGIN_INCLUDE_NAMESPACE
|
|||||||
#include <qlabel.h>
|
#include <qlabel.h>
|
||||||
#include <qlayout.h>
|
#include <qlayout.h>
|
||||||
#include <qmessagebox.h>
|
#include <qmessagebox.h>
|
||||||
|
#if QT_CONFIG(pushbutton)
|
||||||
#include <qpushbutton.h>
|
#include <qpushbutton.h>
|
||||||
|
#endif
|
||||||
#include <qtimer.h>
|
#include <qtimer.h>
|
||||||
#include <qapplication.h>
|
#include <qapplication.h>
|
||||||
QT_END_INCLUDE_NAMESPACE
|
QT_END_INCLUDE_NAMESPACE
|
||||||
|
@ -83,7 +83,9 @@ private:
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
class QStaticByteArrayMatcherBase {
|
class QStaticByteArrayMatcherBase
|
||||||
|
{
|
||||||
|
Q_DECL_ALIGN(16)
|
||||||
struct Skiptable {
|
struct Skiptable {
|
||||||
uchar data[256];
|
uchar data[256];
|
||||||
} m_skiptable;
|
} m_skiptable;
|
||||||
|
@ -54,6 +54,8 @@
|
|||||||
#include <QtCore/qatomic.h>
|
#include <QtCore/qatomic.h>
|
||||||
#include <QtCore/qdatastream.h>
|
#include <QtCore/qdatastream.h>
|
||||||
|
|
||||||
|
#define PCRE2_CODE_UNIT_WIDTH 16
|
||||||
|
|
||||||
#include <pcre2.h>
|
#include <pcre2.h>
|
||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
|
@ -348,9 +348,6 @@ public:
|
|||||||
QObject *receiver, const char *signal, int minMIdx,
|
QObject *receiver, const char *signal, int minMIdx,
|
||||||
bool buildSignature);
|
bool buildSignature);
|
||||||
static DBusHandlerResult messageFilter(DBusConnection *, DBusMessage *, void *);
|
static DBusHandlerResult messageFilter(DBusConnection *, DBusMessage *, void *);
|
||||||
static bool checkReplyForDelivery(QDBusConnectionPrivate *target, QObject *object,
|
|
||||||
int idx, const QList<int> &metaTypes,
|
|
||||||
const QDBusMessage &msg);
|
|
||||||
static QDBusCallDeliveryEvent *prepareReply(QDBusConnectionPrivate *target, QObject *object,
|
static QDBusCallDeliveryEvent *prepareReply(QDBusConnectionPrivate *target, QObject *object,
|
||||||
int idx, const QVector<int> &metaTypes,
|
int idx, const QVector<int> &metaTypes,
|
||||||
const QDBusMessage &msg);
|
const QDBusMessage &msg);
|
||||||
|
@ -170,7 +170,7 @@
|
|||||||
"label": "Mir client libraries",
|
"label": "Mir client libraries",
|
||||||
"test": "qpa/mirclient",
|
"test": "qpa/mirclient",
|
||||||
"sources": [
|
"sources": [
|
||||||
{ "type": "pkgConfig", "args": "egl mirclient ubuntu-platform-api libcontent-hub" }
|
{ "type": "pkgConfig", "args": "egl mirclient ubuntu-platform-api libcontent-hub >= 0.2.0" }
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"mtdev": {
|
"mtdev": {
|
||||||
@ -534,12 +534,19 @@
|
|||||||
"linuxfb": {
|
"linuxfb": {
|
||||||
"label": "LinuxFB",
|
"label": "LinuxFB",
|
||||||
"section": "Platform plugins",
|
"section": "Platform plugins",
|
||||||
"condition": "tests.linuxfb",
|
"condition": "tests.linuxfb && features.regularexpression",
|
||||||
|
"output": [ "privateFeature" ]
|
||||||
|
},
|
||||||
|
"vnc": {
|
||||||
|
"label": "VNC",
|
||||||
|
"section": "Platform plugins",
|
||||||
|
"condition": "config.unix && !config.android && !config.darwin && features.regularexpression",
|
||||||
"output": [ "privateFeature" ]
|
"output": [ "privateFeature" ]
|
||||||
},
|
},
|
||||||
"mirclient": {
|
"mirclient": {
|
||||||
"label": "Mir client",
|
"label": "Mir client",
|
||||||
"section": "Platform plugins",
|
"section": "Platform plugins",
|
||||||
|
"autoDetect": false,
|
||||||
"condition": "libs.mirclient",
|
"condition": "libs.mirclient",
|
||||||
"output": [ "privateFeature" ]
|
"output": [ "privateFeature" ]
|
||||||
},
|
},
|
||||||
@ -889,7 +896,6 @@
|
|||||||
"label": "QImageIOPlugin",
|
"label": "QImageIOPlugin",
|
||||||
"purpose": "Provides a base for writing a image format plugins.",
|
"purpose": "Provides a base for writing a image format plugins.",
|
||||||
"section": "Images",
|
"section": "Images",
|
||||||
"condition": "features.library",
|
|
||||||
"output": [ "publicFeature", "feature" ]
|
"output": [ "publicFeature", "feature" ]
|
||||||
},
|
},
|
||||||
"movie": {
|
"movie": {
|
||||||
@ -1114,7 +1120,7 @@ QMAKE_LIBDIR_OPENGL[_ES2] and QMAKE_LIBS_OPENGL[_ES2] in the mkspec for your pla
|
|||||||
"eglfs_viv", "eglfs_viv_wl", "eglfs_egldevice", "eglfs_gbm", "eglfs_mali", "eglfs_brcm", "egl_x11"
|
"eglfs_viv", "eglfs_viv_wl", "eglfs_egldevice", "eglfs_gbm", "eglfs_mali", "eglfs_brcm", "egl_x11"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"linuxfb", "mirclient",
|
"linuxfb", "vnc", "mirclient",
|
||||||
{
|
{
|
||||||
"type": "feature",
|
"type": "feature",
|
||||||
"message": "INTEGRITY framebuffer",
|
"message": "INTEGRITY framebuffer",
|
||||||
|
@ -700,7 +700,7 @@ QIcon::QIcon(const QIcon &other)
|
|||||||
the relevant file must be found relative to the runtime working
|
the relevant file must be found relative to the runtime working
|
||||||
directory.
|
directory.
|
||||||
|
|
||||||
The file name can be either refer to an actual file on disk or to
|
The file name can refer to an actual file on disk or to
|
||||||
one of the application's embedded resources. See the
|
one of the application's embedded resources. See the
|
||||||
\l{resources.html}{Resource System} overview for details on how to
|
\l{resources.html}{Resource System} overview for details on how to
|
||||||
embed images and other resource files in the application's
|
embed images and other resource files in the application's
|
||||||
@ -1049,7 +1049,7 @@ static QIconEngine *iconEngineFromSuffix(const QString &fileName, const QString
|
|||||||
the relevant file must be found relative to the runtime working
|
the relevant file must be found relative to the runtime working
|
||||||
directory.
|
directory.
|
||||||
|
|
||||||
The file name can be either refer to an actual file on disk or to
|
The file name can refer to an actual file on disk or to
|
||||||
one of the application's embedded resources. See the
|
one of the application's embedded resources. See the
|
||||||
\l{resources.html}{Resource System} overview for details on how to
|
\l{resources.html}{Resource System} overview for details on how to
|
||||||
embed images and other resource files in the application's
|
embed images and other resource files in the application's
|
||||||
|
@ -1,31 +1,37 @@
|
|||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
**
|
**
|
||||||
** Copyright (C) 2015 The Qt Company Ltd.
|
** Copyright (C) 2017 The Qt Company Ltd.
|
||||||
** Contact: http://www.qt.io/licensing/
|
** Contact: https://www.qt.io/licensing/
|
||||||
**
|
**
|
||||||
** This file is part of the QtGui module of the Qt Toolkit.
|
** This file is part of the QtGui module of the Qt Toolkit.
|
||||||
**
|
**
|
||||||
** $QT_BEGIN_LICENSE:LGPL21$
|
** $QT_BEGIN_LICENSE:LGPL$
|
||||||
** Commercial License Usage
|
** Commercial License Usage
|
||||||
** Licensees holding valid commercial Qt licenses may use this file in
|
** Licensees holding valid commercial Qt licenses may use this file in
|
||||||
** accordance with the commercial license agreement provided with the
|
** accordance with the commercial license agreement provided with the
|
||||||
** Software or, alternatively, in accordance with the terms contained in
|
** Software or, alternatively, in accordance with the terms contained in
|
||||||
** a written agreement between you and The Qt Company. For licensing terms
|
** a written agreement between you and The Qt Company. For licensing terms
|
||||||
** and conditions see http://www.qt.io/terms-conditions. For further
|
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||||
** information use the contact form at http://www.qt.io/contact-us.
|
** information use the contact form at https://www.qt.io/contact-us.
|
||||||
**
|
**
|
||||||
** GNU Lesser General Public License Usage
|
** GNU Lesser General Public License Usage
|
||||||
** Alternatively, this file may be used under the terms of the GNU Lesser
|
** Alternatively, this file may be used under the terms of the GNU Lesser
|
||||||
** General Public License version 2.1 or version 3 as published by the Free
|
** General Public License version 3 as published by the Free Software
|
||||||
** Software Foundation and appearing in the file LICENSE.LGPLv21 and
|
** Foundation and appearing in the file LICENSE.LGPL3 included in the
|
||||||
** LICENSE.LGPLv3 included in the packaging of this file. Please review the
|
** packaging of this file. Please review the following information to
|
||||||
** following information to ensure the GNU Lesser General Public License
|
** ensure the GNU Lesser General Public License version 3 requirements
|
||||||
** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
|
** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
|
||||||
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
|
||||||
**
|
**
|
||||||
** As a special exception, The Qt Company gives you certain additional
|
** GNU General Public License Usage
|
||||||
** rights. These rights are described in The Qt Company LGPL Exception
|
** Alternatively, this file may be used under the terms of the GNU
|
||||||
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
** General Public License version 2.0 or (at your option) the GNU General
|
||||||
|
** Public license version 3 or any later version approved by the KDE Free
|
||||||
|
** Qt Foundation. The licenses are as published by the Free Software
|
||||||
|
** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
|
||||||
|
** 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-2.0.html and
|
||||||
|
** https://www.gnu.org/licenses/gpl-3.0.html.
|
||||||
**
|
**
|
||||||
** $QT_END_LICENSE$
|
** $QT_END_LICENSE$
|
||||||
**
|
**
|
||||||
|
@ -45,6 +45,7 @@
|
|||||||
#include <qvariant.h>
|
#include <qvariant.h>
|
||||||
#include <qvector.h>
|
#include <qvector.h>
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
|
#include <qrgba64.h>
|
||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
@ -120,6 +121,11 @@ static bool read_pbm_header(QIODevice *device, char& type, int& w, int& h, int&
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline QRgb scale_pbm_color(quint16 mx, quint16 rv, quint16 gv, quint16 bv)
|
||||||
|
{
|
||||||
|
return QRgba64::fromRgba64((rv * 0xffff) / mx, (gv * 0xffff) / mx, (bv * 0xffff) / mx, 0xffff).toArgb32();
|
||||||
|
}
|
||||||
|
|
||||||
static bool read_pbm_body(QIODevice *device, char type, int w, int h, int mcc, QImage *outImage)
|
static bool read_pbm_body(QIODevice *device, char type, int w, int h, int mcc, QImage *outImage)
|
||||||
{
|
{
|
||||||
int nbits, y;
|
int nbits, y;
|
||||||
@ -148,9 +154,6 @@ static bool read_pbm_body(QIODevice *device, char type, int w, int h, int mcc, Q
|
|||||||
}
|
}
|
||||||
raw = type >= '4';
|
raw = type >= '4';
|
||||||
|
|
||||||
int maxc = mcc;
|
|
||||||
if (maxc > 255)
|
|
||||||
maxc = 255;
|
|
||||||
if (outImage->size() != QSize(w, h) || outImage->format() != format) {
|
if (outImage->size() != QSize(w, h) || outImage->format() != format) {
|
||||||
*outImage = QImage(w, h, format);
|
*outImage = QImage(w, h, format);
|
||||||
if (outImage->isNull())
|
if (outImage->isNull())
|
||||||
@ -175,22 +178,50 @@ static bool read_pbm_body(QIODevice *device, char type, int w, int h, int mcc, Q
|
|||||||
b = buf24;
|
b = buf24;
|
||||||
while (p < end) {
|
while (p < end) {
|
||||||
if (mcc < 256) {
|
if (mcc < 256) {
|
||||||
*p++ = qRgb(b[0],b[1],b[2]);
|
if (mcc == 255)
|
||||||
|
*p++ = qRgb(b[0],b[1],b[2]);
|
||||||
|
else
|
||||||
|
*p++ = scale_pbm_color(mcc, b[0], b[1], b[2]);
|
||||||
b += 3;
|
b += 3;
|
||||||
} else {
|
} else {
|
||||||
*p++ = qRgb(((int(b[0]) * 256 + int(b[1]) + 1) * 256) / (mcc + 1) - 1,
|
quint16 rv = b[0] << 8 | b[1];
|
||||||
((int(b[2]) * 256 + int(b[3]) + 1) * 256) / (mcc + 1) - 1,
|
quint16 gv = b[2] << 8 | b[3];
|
||||||
((int(b[4]) * 256 + int(b[5]) + 1) * 256) / (mcc + 1) - 1);
|
quint16 bv = b[4] << 8 | b[5];
|
||||||
|
if (mcc == 0xffff)
|
||||||
|
*p++ = QRgba64::fromRgba64(rv, gv, bv, 0xffff).toArgb32();
|
||||||
|
else
|
||||||
|
*p++ = scale_pbm_color(mcc, rv, gv, bv);
|
||||||
b += 6;
|
b += 6;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
delete[] buf24;
|
delete[] buf24;
|
||||||
|
} else if (nbits == 8 && mcc > 255) { // type 5 16bit
|
||||||
|
pbm_bpl = 2*w;
|
||||||
|
uchar *buf16 = new uchar[pbm_bpl];
|
||||||
|
for (y=0; y<h; y++) {
|
||||||
|
if (device->read((char *)buf16, pbm_bpl) != pbm_bpl) {
|
||||||
|
delete[] buf16;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
uchar *p = outImage->scanLine(y);
|
||||||
|
uchar *end = p + w;
|
||||||
|
uchar *b = buf16;
|
||||||
|
while (p < end) {
|
||||||
|
*p++ = (b[0] << 8 | b[1]) * 255 / mcc;
|
||||||
|
b += 2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
delete[] buf16;
|
||||||
} else { // type 4,5
|
} else { // type 4,5
|
||||||
for (y=0; y<h; y++) {
|
for (y=0; y<h; y++) {
|
||||||
if (device->read((char *)outImage->scanLine(y), pbm_bpl)
|
uchar *p = outImage->scanLine(y);
|
||||||
!= pbm_bpl)
|
if (device->read((char *)p, pbm_bpl) != pbm_bpl)
|
||||||
return false;
|
return false;
|
||||||
|
if (nbits == 8 && mcc < 255) {
|
||||||
|
for (int i = 0; i < pbm_bpl; i++)
|
||||||
|
p[i] = (p[i] * 255) / mcc;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else { // read ascii data
|
} else { // read ascii data
|
||||||
@ -227,7 +258,7 @@ static bool read_pbm_body(QIODevice *device, char type, int w, int h, int mcc, Q
|
|||||||
} else { // 32 bits
|
} else { // 32 bits
|
||||||
n /= 4;
|
n /= 4;
|
||||||
int r, g, b;
|
int r, g, b;
|
||||||
if (mcc == maxc) {
|
if (mcc == 255) {
|
||||||
while (n--) {
|
while (n--) {
|
||||||
r = read_pbm_int(device);
|
r = read_pbm_int(device);
|
||||||
g = read_pbm_int(device);
|
g = read_pbm_int(device);
|
||||||
@ -237,10 +268,10 @@ static bool read_pbm_body(QIODevice *device, char type, int w, int h, int mcc, Q
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
while (n--) {
|
while (n--) {
|
||||||
r = read_pbm_int(device) * maxc / mcc;
|
r = read_pbm_int(device);
|
||||||
g = read_pbm_int(device) * maxc / mcc;
|
g = read_pbm_int(device);
|
||||||
b = read_pbm_int(device) * maxc / mcc;
|
b = read_pbm_int(device);
|
||||||
*((QRgb*)p) = qRgb(r, g, b);
|
*((QRgb*)p) = scale_pbm_color(mcc, r, g, b);
|
||||||
p += 4;
|
p += 4;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3685,7 +3685,7 @@ bool QOpenGLTexture::hasFeature(Feature feature)
|
|||||||
const char *renderer = reinterpret_cast<const char *>(ctx->functions()->glGetString(GL_RENDERER));
|
const char *renderer = reinterpret_cast<const char *>(ctx->functions()->glGetString(GL_RENDERER));
|
||||||
switch (feature) {
|
switch (feature) {
|
||||||
case ImmutableStorage:
|
case ImmutableStorage:
|
||||||
supported = (f.version() >= qMakePair(3, 0) || ctx->hasExtension(QByteArrayLiteral("EXT_texture_storage")))
|
supported = (f.version() >= qMakePair(3, 0) || ctx->hasExtension(QByteArrayLiteral("GL_EXT_texture_storage")))
|
||||||
&& !(renderer && strstr(renderer, "Mali")); // do not use on Mali: QTBUG-45106
|
&& !(renderer && strstr(renderer, "Mali")); // do not use on Mali: QTBUG-45106
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -1,31 +1,37 @@
|
|||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
**
|
**
|
||||||
** Copyright (C) 2016 The Qt Company Ltd.
|
** Copyright (C) 2017 The Qt Company Ltd.
|
||||||
** Contact: http://www.qt.io/licensing/
|
** Contact: https://www.qt.io/licensing/
|
||||||
**
|
**
|
||||||
** This file is part of the QtGui module of the Qt Toolkit.
|
** This file is part of the QtGui module of the Qt Toolkit.
|
||||||
**
|
**
|
||||||
** $QT_BEGIN_LICENSE:LGPL21$
|
** $QT_BEGIN_LICENSE:LGPL$
|
||||||
** Commercial License Usage
|
** Commercial License Usage
|
||||||
** Licensees holding valid commercial Qt licenses may use this file in
|
** Licensees holding valid commercial Qt licenses may use this file in
|
||||||
** accordance with the commercial license agreement provided with the
|
** accordance with the commercial license agreement provided with the
|
||||||
** Software or, alternatively, in accordance with the terms contained in
|
** Software or, alternatively, in accordance with the terms contained in
|
||||||
** a written agreement between you and The Qt Company. For licensing terms
|
** a written agreement between you and The Qt Company. For licensing terms
|
||||||
** and conditions see http://www.qt.io/terms-conditions. For further
|
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||||
** information use the contact form at http://www.qt.io/contact-us.
|
** information use the contact form at https://www.qt.io/contact-us.
|
||||||
**
|
**
|
||||||
** GNU Lesser General Public License Usage
|
** GNU Lesser General Public License Usage
|
||||||
** Alternatively, this file may be used under the terms of the GNU Lesser
|
** Alternatively, this file may be used under the terms of the GNU Lesser
|
||||||
** General Public License version 2.1 or version 3 as published by the Free
|
** General Public License version 3 as published by the Free Software
|
||||||
** Software Foundation and appearing in the file LICENSE.LGPLv21 and
|
** Foundation and appearing in the file LICENSE.LGPL3 included in the
|
||||||
** LICENSE.LGPLv3 included in the packaging of this file. Please review the
|
** packaging of this file. Please review the following information to
|
||||||
** following information to ensure the GNU Lesser General Public License
|
** ensure the GNU Lesser General Public License version 3 requirements
|
||||||
** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
|
** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
|
||||||
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
|
||||||
**
|
**
|
||||||
** As a special exception, The Qt Company gives you certain additional
|
** GNU General Public License Usage
|
||||||
** rights. These rights are described in The Qt Company LGPL Exception
|
** Alternatively, this file may be used under the terms of the GNU
|
||||||
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
** General Public License version 2.0 or (at your option) the GNU General
|
||||||
|
** Public license version 3 or any later version approved by the KDE Free
|
||||||
|
** Qt Foundation. The licenses are as published by the Free Software
|
||||||
|
** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
|
||||||
|
** 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-2.0.html and
|
||||||
|
** https://www.gnu.org/licenses/gpl-3.0.html.
|
||||||
**
|
**
|
||||||
** $QT_END_LICENSE$
|
** $QT_END_LICENSE$
|
||||||
**
|
**
|
||||||
|
@ -1,31 +1,37 @@
|
|||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
**
|
**
|
||||||
** Copyright (C) 2016 The Qt Company Ltd.
|
** Copyright (C) 2017 The Qt Company Ltd.
|
||||||
** Contact: http://www.qt.io/licensing/
|
** Contact: https://www.qt.io/licensing/
|
||||||
**
|
**
|
||||||
** This file is part of the QtGui module of the Qt Toolkit.
|
** This file is part of the QtGui module of the Qt Toolkit.
|
||||||
**
|
**
|
||||||
** $QT_BEGIN_LICENSE:LGPL21$
|
** $QT_BEGIN_LICENSE:LGPL$
|
||||||
** Commercial License Usage
|
** Commercial License Usage
|
||||||
** Licensees holding valid commercial Qt licenses may use this file in
|
** Licensees holding valid commercial Qt licenses may use this file in
|
||||||
** accordance with the commercial license agreement provided with the
|
** accordance with the commercial license agreement provided with the
|
||||||
** Software or, alternatively, in accordance with the terms contained in
|
** Software or, alternatively, in accordance with the terms contained in
|
||||||
** a written agreement between you and The Qt Company. For licensing terms
|
** a written agreement between you and The Qt Company. For licensing terms
|
||||||
** and conditions see http://www.qt.io/terms-conditions. For further
|
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||||
** information use the contact form at http://www.qt.io/contact-us.
|
** information use the contact form at https://www.qt.io/contact-us.
|
||||||
**
|
**
|
||||||
** GNU Lesser General Public License Usage
|
** GNU Lesser General Public License Usage
|
||||||
** Alternatively, this file may be used under the terms of the GNU Lesser
|
** Alternatively, this file may be used under the terms of the GNU Lesser
|
||||||
** General Public License version 2.1 or version 3 as published by the Free
|
** General Public License version 3 as published by the Free Software
|
||||||
** Software Foundation and appearing in the file LICENSE.LGPLv21 and
|
** Foundation and appearing in the file LICENSE.LGPL3 included in the
|
||||||
** LICENSE.LGPLv3 included in the packaging of this file. Please review the
|
** packaging of this file. Please review the following information to
|
||||||
** following information to ensure the GNU Lesser General Public License
|
** ensure the GNU Lesser General Public License version 3 requirements
|
||||||
** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
|
** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
|
||||||
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
|
||||||
**
|
**
|
||||||
** As a special exception, The Qt Company gives you certain additional
|
** GNU General Public License Usage
|
||||||
** rights. These rights are described in The Qt Company LGPL Exception
|
** Alternatively, this file may be used under the terms of the GNU
|
||||||
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
** General Public License version 2.0 or (at your option) the GNU General
|
||||||
|
** Public license version 3 or any later version approved by the KDE Free
|
||||||
|
** Qt Foundation. The licenses are as published by the Free Software
|
||||||
|
** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
|
||||||
|
** 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-2.0.html and
|
||||||
|
** https://www.gnu.org/licenses/gpl-3.0.html.
|
||||||
**
|
**
|
||||||
** $QT_END_LICENSE$
|
** $QT_END_LICENSE$
|
||||||
**
|
**
|
||||||
|
@ -5588,7 +5588,7 @@ static void qt_alphamapblit_generic(QRasterBuffer *rasterBuffer,
|
|||||||
srcColor = colorProfile->toLinear(srcColor.unpremultiplied()).premultiplied();
|
srcColor = colorProfile->toLinear(srcColor.unpremultiplied()).premultiplied();
|
||||||
}
|
}
|
||||||
|
|
||||||
QRgba64 buffer[buffer_size];
|
quint64 buffer[buffer_size];
|
||||||
const DestFetchProc64 destFetch64 = destFetchProc64[rasterBuffer->format];
|
const DestFetchProc64 destFetch64 = destFetchProc64[rasterBuffer->format];
|
||||||
const DestStoreProc64 destStore64 = destStoreProc64[rasterBuffer->format];
|
const DestStoreProc64 destStore64 = destStoreProc64[rasterBuffer->format];
|
||||||
|
|
||||||
@ -5598,12 +5598,12 @@ static void qt_alphamapblit_generic(QRasterBuffer *rasterBuffer,
|
|||||||
int length = mapWidth;
|
int length = mapWidth;
|
||||||
while (length > 0) {
|
while (length > 0) {
|
||||||
int l = qMin(buffer_size, length);
|
int l = qMin(buffer_size, length);
|
||||||
QRgba64 *dest = destFetch64(buffer, rasterBuffer, i, y + ly, l);
|
QRgba64 *dest = destFetch64((QRgba64*)buffer, rasterBuffer, i, y + ly, l);
|
||||||
for (int j=0; j < l; ++j) {
|
for (int j=0; j < l; ++j) {
|
||||||
const int coverage = map[j + (i - x)];
|
const int coverage = map[j + (i - x)];
|
||||||
alphamapblend_generic(coverage, dest, j, srcColor, color, colorProfile);
|
alphamapblend_generic(coverage, dest, j, srcColor, color, colorProfile);
|
||||||
}
|
}
|
||||||
destStore64(rasterBuffer, i, y + ly, buffer, l);
|
destStore64(rasterBuffer, i, y + ly, dest, l);
|
||||||
length -= l;
|
length -= l;
|
||||||
i += l;
|
i += l;
|
||||||
}
|
}
|
||||||
@ -5625,7 +5625,7 @@ static void qt_alphamapblit_generic(QRasterBuffer *rasterBuffer,
|
|||||||
int start = qMax<int>(x, clip.x);
|
int start = qMax<int>(x, clip.x);
|
||||||
int end = qMin<int>(x + mapWidth, clip.x + clip.len);
|
int end = qMin<int>(x + mapWidth, clip.x + clip.len);
|
||||||
Q_ASSERT(clip.len <= buffer_size);
|
Q_ASSERT(clip.len <= buffer_size);
|
||||||
QRgba64 *dest = destFetch64(buffer, rasterBuffer, start, clip.y, clip.len);
|
QRgba64 *dest = destFetch64((QRgba64*)buffer, rasterBuffer, start, clip.y, clip.len);
|
||||||
|
|
||||||
for (int xp=start; xp<end; ++xp) {
|
for (int xp=start; xp<end; ++xp) {
|
||||||
const int coverage = map[xp - x];
|
const int coverage = map[xp - x];
|
||||||
@ -5873,7 +5873,7 @@ static void qt_alphargbblit_generic(QRasterBuffer *rasterBuffer,
|
|||||||
srcColor = colorProfile->toLinear(srcColor.unpremultiplied()).premultiplied();
|
srcColor = colorProfile->toLinear(srcColor.unpremultiplied()).premultiplied();
|
||||||
}
|
}
|
||||||
|
|
||||||
QRgba64 buffer[buffer_size];
|
quint64 buffer[buffer_size];
|
||||||
const DestFetchProc64 destFetch64 = destFetchProc64[rasterBuffer->format];
|
const DestFetchProc64 destFetch64 = destFetchProc64[rasterBuffer->format];
|
||||||
const DestStoreProc64 destStore64 = destStoreProc64[rasterBuffer->format];
|
const DestStoreProc64 destStore64 = destStoreProc64[rasterBuffer->format];
|
||||||
|
|
||||||
@ -5883,12 +5883,12 @@ static void qt_alphargbblit_generic(QRasterBuffer *rasterBuffer,
|
|||||||
int length = mapWidth;
|
int length = mapWidth;
|
||||||
while (length > 0) {
|
while (length > 0) {
|
||||||
int l = qMin(buffer_size, length);
|
int l = qMin(buffer_size, length);
|
||||||
QRgba64 *dest = destFetch64(buffer, rasterBuffer, i, y + ly, l);
|
QRgba64 *dest = destFetch64((QRgba64*)buffer, rasterBuffer, i, y + ly, l);
|
||||||
for (int j=0; j < l; ++j) {
|
for (int j=0; j < l; ++j) {
|
||||||
const uint coverage = src[j + (i - x)];
|
const uint coverage = src[j + (i - x)];
|
||||||
alphargbblend_generic(coverage, dest, j, srcColor, color, colorProfile);
|
alphargbblend_generic(coverage, dest, j, srcColor, color, colorProfile);
|
||||||
}
|
}
|
||||||
destStore64(rasterBuffer, i, y + ly, buffer, l);
|
destStore64(rasterBuffer, i, y + ly, dest, l);
|
||||||
length -= l;
|
length -= l;
|
||||||
i += l;
|
i += l;
|
||||||
}
|
}
|
||||||
@ -5910,7 +5910,7 @@ static void qt_alphargbblit_generic(QRasterBuffer *rasterBuffer,
|
|||||||
int start = qMax<int>(x, clip.x);
|
int start = qMax<int>(x, clip.x);
|
||||||
int end = qMin<int>(x + mapWidth, clip.x + clip.len);
|
int end = qMin<int>(x + mapWidth, clip.x + clip.len);
|
||||||
Q_ASSERT(clip.len <= buffer_size);
|
Q_ASSERT(clip.len <= buffer_size);
|
||||||
QRgba64 *dest = destFetch64(buffer, rasterBuffer, start, clip.y, clip.len);
|
QRgba64 *dest = destFetch64((QRgba64*)buffer, rasterBuffer, start, clip.y, clip.len);
|
||||||
|
|
||||||
for (int xp=start; xp<end; ++xp) {
|
for (int xp=start; xp<end; ++xp) {
|
||||||
const uint coverage = src[xp - x];
|
const uint coverage = src[xp - x];
|
||||||
@ -6495,6 +6495,17 @@ static void qInitDrawhelperFunctions()
|
|||||||
qt_functionForMode_C[QPainter::CompositionMode_SourceOver] = comp_func_SourceOver_avx2;
|
qt_functionForMode_C[QPainter::CompositionMode_SourceOver] = comp_func_SourceOver_avx2;
|
||||||
qt_functionForModeSolid_C[QPainter::CompositionMode_SourceOver] = comp_func_solid_SourceOver_avx2;
|
qt_functionForModeSolid_C[QPainter::CompositionMode_SourceOver] = comp_func_solid_SourceOver_avx2;
|
||||||
qt_functionForMode_C[QPainter::CompositionMode_Source] = comp_func_Source_avx2;
|
qt_functionForMode_C[QPainter::CompositionMode_Source] = comp_func_Source_avx2;
|
||||||
|
|
||||||
|
extern void QT_FASTCALL fetchTransformedBilinearARGB32PM_simple_upscale_helper_avx2(uint *b, uint *end, const QTextureData &image,
|
||||||
|
int &fx, int &fy, int fdx, int /*fdy*/);
|
||||||
|
extern void QT_FASTCALL fetchTransformedBilinearARGB32PM_downscale_helper_avx2(uint *b, uint *end, const QTextureData &image,
|
||||||
|
int &fx, int &fy, int fdx, int /*fdy*/);
|
||||||
|
extern void QT_FASTCALL fetchTransformedBilinearARGB32PM_fast_rotate_helper_avx2(uint *b, uint *end, const QTextureData &image,
|
||||||
|
int &fx, int &fy, int fdx, int fdy);
|
||||||
|
|
||||||
|
bilinearFastTransformHelperARGB32PM[0][SimpleUpscaleTransform] = fetchTransformedBilinearARGB32PM_simple_upscale_helper_avx2;
|
||||||
|
bilinearFastTransformHelperARGB32PM[0][DownscaleTransform] = fetchTransformedBilinearARGB32PM_downscale_helper_avx2;
|
||||||
|
bilinearFastTransformHelperARGB32PM[0][FastRotateTransform] = fetchTransformedBilinearARGB32PM_fast_rotate_helper_avx2;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -44,6 +44,13 @@
|
|||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
|
static Q_CONSTEXPR int BufferSize = 2048;
|
||||||
|
|
||||||
|
enum {
|
||||||
|
FixedScale = 1 << 16,
|
||||||
|
HalfPoint = 1 << 15
|
||||||
|
};
|
||||||
|
|
||||||
// Vectorized blend functions:
|
// Vectorized blend functions:
|
||||||
|
|
||||||
// See BYTE_MUL_SSE2 for details.
|
// See BYTE_MUL_SSE2 for details.
|
||||||
@ -343,6 +350,413 @@ void QT_FASTCALL comp_func_solid_SourceOver_avx2(uint *destPixels, int length, u
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define interpolate_4_pixels_16_avx2(tlr1, tlr2, blr1, blr2, distx, disty, colorMask, v_256, b) \
|
||||||
|
{ \
|
||||||
|
/* Correct for later unpack */ \
|
||||||
|
const __m256i vdistx = _mm256_permute4x64_epi64(distx, _MM_SHUFFLE(3, 1, 2, 0)); \
|
||||||
|
const __m256i vdisty = _mm256_permute4x64_epi64(disty, _MM_SHUFFLE(3, 1, 2, 0)); \
|
||||||
|
\
|
||||||
|
__m256i dxdy = _mm256_mullo_epi16 (vdistx, vdisty); \
|
||||||
|
const __m256i distx_ = _mm256_slli_epi16(vdistx, 4); \
|
||||||
|
const __m256i disty_ = _mm256_slli_epi16(vdisty, 4); \
|
||||||
|
__m256i idxidy = _mm256_add_epi16(dxdy, _mm256_sub_epi16(v_256, _mm256_add_epi16(distx_, disty_))); \
|
||||||
|
__m256i dxidy = _mm256_sub_epi16(distx_, dxdy); \
|
||||||
|
__m256i idxdy = _mm256_sub_epi16(disty_, dxdy); \
|
||||||
|
\
|
||||||
|
__m256i tlr1AG = _mm256_srli_epi16(tlr1, 8); \
|
||||||
|
__m256i tlr1RB = _mm256_and_si256(tlr1, colorMask); \
|
||||||
|
__m256i tlr2AG = _mm256_srli_epi16(tlr2, 8); \
|
||||||
|
__m256i tlr2RB = _mm256_and_si256(tlr2, colorMask); \
|
||||||
|
__m256i blr1AG = _mm256_srli_epi16(blr1, 8); \
|
||||||
|
__m256i blr1RB = _mm256_and_si256(blr1, colorMask); \
|
||||||
|
__m256i blr2AG = _mm256_srli_epi16(blr2, 8); \
|
||||||
|
__m256i blr2RB = _mm256_and_si256(blr2, colorMask); \
|
||||||
|
\
|
||||||
|
__m256i odxidy1 = _mm256_unpacklo_epi32(idxidy, dxidy); \
|
||||||
|
__m256i odxidy2 = _mm256_unpackhi_epi32(idxidy, dxidy); \
|
||||||
|
tlr1AG = _mm256_mullo_epi16(tlr1AG, odxidy1); \
|
||||||
|
tlr1RB = _mm256_mullo_epi16(tlr1RB, odxidy1); \
|
||||||
|
tlr2AG = _mm256_mullo_epi16(tlr2AG, odxidy2); \
|
||||||
|
tlr2RB = _mm256_mullo_epi16(tlr2RB, odxidy2); \
|
||||||
|
__m256i odxdy1 = _mm256_unpacklo_epi32(idxdy, dxdy); \
|
||||||
|
__m256i odxdy2 = _mm256_unpackhi_epi32(idxdy, dxdy); \
|
||||||
|
blr1AG = _mm256_mullo_epi16(blr1AG, odxdy1); \
|
||||||
|
blr1RB = _mm256_mullo_epi16(blr1RB, odxdy1); \
|
||||||
|
blr2AG = _mm256_mullo_epi16(blr2AG, odxdy2); \
|
||||||
|
blr2RB = _mm256_mullo_epi16(blr2RB, odxdy2); \
|
||||||
|
\
|
||||||
|
/* Add the values, and shift to only keep 8 significant bits per colors */ \
|
||||||
|
__m256i topAG = _mm256_hadd_epi32(tlr1AG, tlr2AG); \
|
||||||
|
__m256i topRB = _mm256_hadd_epi32(tlr1RB, tlr2RB); \
|
||||||
|
__m256i botAG = _mm256_hadd_epi32(blr1AG, blr2AG); \
|
||||||
|
__m256i botRB = _mm256_hadd_epi32(blr1RB, blr2RB); \
|
||||||
|
__m256i rAG = _mm256_add_epi16(topAG, botAG); \
|
||||||
|
__m256i rRB = _mm256_add_epi16(topRB, botRB); \
|
||||||
|
rRB = _mm256_srli_epi16(rRB, 8); \
|
||||||
|
/* Correct for hadd */ \
|
||||||
|
rAG = _mm256_permute4x64_epi64(rAG, _MM_SHUFFLE(3, 1, 2, 0)); \
|
||||||
|
rRB = _mm256_permute4x64_epi64(rRB, _MM_SHUFFLE(3, 1, 2, 0)); \
|
||||||
|
_mm256_storeu_si256((__m256i*)(b), _mm256_blendv_epi8(rAG, rRB, colorMask)); \
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void fetchTransformedBilinear_pixelBounds(int, int l1, int l2, int &v1, int &v2)
|
||||||
|
{
|
||||||
|
if (v1 < l1)
|
||||||
|
v2 = v1 = l1;
|
||||||
|
else if (v1 >= l2)
|
||||||
|
v2 = v1 = l2;
|
||||||
|
else
|
||||||
|
v2 = v1 + 1;
|
||||||
|
Q_ASSERT(v1 >= l1 && v1 <= l2);
|
||||||
|
Q_ASSERT(v2 >= l1 && v2 <= l2);
|
||||||
|
}
|
||||||
|
|
||||||
|
void QT_FASTCALL fetchTransformedBilinearARGB32PM_simple_upscale_helper_avx2(uint *b, uint *end, const QTextureData &image,
|
||||||
|
int &fx, int &fy, int fdx, int /*fdy*/)
|
||||||
|
{
|
||||||
|
int y1 = (fy >> 16);
|
||||||
|
int y2;
|
||||||
|
fetchTransformedBilinear_pixelBounds(image.height, image.y1, image.y2 - 1, y1, y2);
|
||||||
|
const uint *s1 = (const uint *)image.scanLine(y1);
|
||||||
|
const uint *s2 = (const uint *)image.scanLine(y2);
|
||||||
|
|
||||||
|
int disty = (fy & 0x0000ffff) >> 8;
|
||||||
|
int idisty = 256 - disty;
|
||||||
|
int x = fx >> 16;
|
||||||
|
int length = end - b;
|
||||||
|
|
||||||
|
// The idea is first to do the interpolation between the row s1 and the row s2
|
||||||
|
// into an intermediate buffer, then we interpolate between two pixel of this buffer.
|
||||||
|
|
||||||
|
// intermediate_buffer[0] is a buffer of red-blue component of the pixel, in the form 0x00RR00BB
|
||||||
|
// intermediate_buffer[1] is the alpha-green component of the pixel, in the form 0x00AA00GG
|
||||||
|
// +1 for the last pixel to interpolate with, and +1 for rounding errors.
|
||||||
|
quint32 intermediate_buffer[2][BufferSize + 2];
|
||||||
|
// count is the size used in the intermediate_buffer.
|
||||||
|
int count = (qint64(length) * fdx + FixedScale - 1) / FixedScale + 2;
|
||||||
|
Q_ASSERT(count <= BufferSize + 2); //length is supposed to be <= buffer_size and data->m11 < 1 in this case
|
||||||
|
int f = 0;
|
||||||
|
int lim = qMin(count, image.x2 - x);
|
||||||
|
if (x < image.x1) {
|
||||||
|
Q_ASSERT(x < image.x2);
|
||||||
|
uint t = s1[image.x1];
|
||||||
|
uint b = s2[image.x1];
|
||||||
|
quint32 rb = (((t & 0xff00ff) * idisty + (b & 0xff00ff) * disty) >> 8) & 0xff00ff;
|
||||||
|
quint32 ag = ((((t>>8) & 0xff00ff) * idisty + ((b>>8) & 0xff00ff) * disty) >> 8) & 0xff00ff;
|
||||||
|
do {
|
||||||
|
intermediate_buffer[0][f] = rb;
|
||||||
|
intermediate_buffer[1][f] = ag;
|
||||||
|
f++;
|
||||||
|
x++;
|
||||||
|
} while (x < image.x1 && f < lim);
|
||||||
|
}
|
||||||
|
|
||||||
|
const __m256i disty_ = _mm256_set1_epi16(disty);
|
||||||
|
const __m256i idisty_ = _mm256_set1_epi16(idisty);
|
||||||
|
const __m256i colorMask = _mm256_set1_epi32(0x00ff00ff);
|
||||||
|
|
||||||
|
lim -= 7;
|
||||||
|
for (; f < lim; x += 8, f += 8) {
|
||||||
|
// Load 8 pixels from s1, and split the alpha-green and red-blue component
|
||||||
|
__m256i top = _mm256_loadu_si256((const __m256i*)((const uint *)(s1)+x));
|
||||||
|
__m256i topAG = _mm256_srli_epi16(top, 8);
|
||||||
|
__m256i topRB = _mm256_and_si256(top, colorMask);
|
||||||
|
// Multiplies each color component by idisty
|
||||||
|
topAG = _mm256_mullo_epi16 (topAG, idisty_);
|
||||||
|
topRB = _mm256_mullo_epi16 (topRB, idisty_);
|
||||||
|
|
||||||
|
// Same for the s2 vector
|
||||||
|
__m256i bottom = _mm256_loadu_si256((const __m256i*)((const uint *)(s2)+x));
|
||||||
|
__m256i bottomAG = _mm256_srli_epi16(bottom, 8);
|
||||||
|
__m256i bottomRB = _mm256_and_si256(bottom, colorMask);
|
||||||
|
bottomAG = _mm256_mullo_epi16 (bottomAG, disty_);
|
||||||
|
bottomRB = _mm256_mullo_epi16 (bottomRB, disty_);
|
||||||
|
|
||||||
|
// Add the values, and shift to only keep 8 significant bits per colors
|
||||||
|
__m256i rAG =_mm256_add_epi16(topAG, bottomAG);
|
||||||
|
rAG = _mm256_srli_epi16(rAG, 8);
|
||||||
|
_mm256_storeu_si256((__m256i*)(&intermediate_buffer[1][f]), rAG);
|
||||||
|
__m256i rRB =_mm256_add_epi16(topRB, bottomRB);
|
||||||
|
rRB = _mm256_srli_epi16(rRB, 8);
|
||||||
|
_mm256_storeu_si256((__m256i*)(&intermediate_buffer[0][f]), rRB);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (; f < count; f++) { // Same as above but without simd
|
||||||
|
x = qMin(x, image.x2 - 1);
|
||||||
|
|
||||||
|
uint t = s1[x];
|
||||||
|
uint b = s2[x];
|
||||||
|
|
||||||
|
intermediate_buffer[0][f] = (((t & 0xff00ff) * idisty + (b & 0xff00ff) * disty) >> 8) & 0xff00ff;
|
||||||
|
intermediate_buffer[1][f] = ((((t>>8) & 0xff00ff) * idisty + ((b>>8) & 0xff00ff) * disty) >> 8) & 0xff00ff;
|
||||||
|
x++;
|
||||||
|
}
|
||||||
|
// Now interpolate the values from the intermediate_buffer to get the final result.
|
||||||
|
fx &= FixedScale - 1;
|
||||||
|
Q_ASSERT((fx >> 16) == 0);
|
||||||
|
|
||||||
|
const __m128i v_fdx = _mm_set1_epi32(fdx * 4);
|
||||||
|
const __m128i v_blend = _mm_set1_epi32(0x00800080);
|
||||||
|
__m128i v_fx = _mm_setr_epi32(fx, fx + fdx, fx + fdx + fdx, fx + fdx + fdx + fdx);
|
||||||
|
|
||||||
|
while (b < end - 3) {
|
||||||
|
const __m128i offset = _mm_srli_epi32(v_fx, 16);
|
||||||
|
__m256i vrb = _mm256_i32gather_epi64((const long long *)intermediate_buffer[0], offset, 4);
|
||||||
|
__m256i vag = _mm256_i32gather_epi64((const long long *)intermediate_buffer[1], offset, 4);
|
||||||
|
|
||||||
|
__m128i vdx = _mm_and_si128(v_fx, _mm_set1_epi32(0x0000ffff));
|
||||||
|
vdx = _mm_srli_epi16(vdx, 8);
|
||||||
|
__m128i vidx = _mm_sub_epi32(_mm_set1_epi32(256), vdx);
|
||||||
|
__m256i vmulx = _mm256_castsi128_si256(_mm_unpacklo_epi32(vidx, vdx));
|
||||||
|
vmulx = _mm256_inserti128_si256(vmulx, _mm_unpackhi_epi32(vidx, vdx), 1);
|
||||||
|
|
||||||
|
vrb = _mm256_mullo_epi32(vrb, vmulx);
|
||||||
|
vag = _mm256_mullo_epi32(vag, vmulx);
|
||||||
|
|
||||||
|
__m256i vrbag = _mm256_hadd_epi32(vrb, vag);
|
||||||
|
vrbag = _mm256_permute4x64_epi64(vrbag, _MM_SHUFFLE(3, 1, 2, 0));
|
||||||
|
|
||||||
|
__m128i rb = _mm256_castsi256_si128(vrbag);
|
||||||
|
__m128i ag = _mm256_extracti128_si256(vrbag, 1);
|
||||||
|
rb = _mm_srli_epi16(rb, 8);
|
||||||
|
|
||||||
|
_mm_storeu_si128((__m128i*)b, _mm_blendv_epi8(ag, rb, v_blend));
|
||||||
|
|
||||||
|
b += 4;
|
||||||
|
fx += 4 * fdx;
|
||||||
|
v_fx = _mm_add_epi32(v_fx, v_fdx);
|
||||||
|
}
|
||||||
|
while (b < end) {
|
||||||
|
int x = (fx >> 16);
|
||||||
|
|
||||||
|
uint distx = (fx & 0x0000ffff) >> 8;
|
||||||
|
uint idistx = 256 - distx;
|
||||||
|
|
||||||
|
uint rb = ((intermediate_buffer[0][x] * idistx + intermediate_buffer[0][x + 1] * distx) >> 8) & 0xff00ff;
|
||||||
|
uint ag = (intermediate_buffer[1][x] * idistx + intermediate_buffer[1][x + 1] * distx) & 0xff00ff00;
|
||||||
|
*b = rb | ag;
|
||||||
|
b++;
|
||||||
|
fx += fdx;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void QT_FASTCALL fetchTransformedBilinearARGB32PM_downscale_helper_avx2(uint *b, uint *end, const QTextureData &image,
|
||||||
|
int &fx, int &fy, int fdx, int /*fdy*/)
|
||||||
|
{
|
||||||
|
int y1 = (fy >> 16);
|
||||||
|
int y2;
|
||||||
|
fetchTransformedBilinear_pixelBounds(image.height, image.y1, image.y2 - 1, y1, y2);
|
||||||
|
const uint *s1 = (const uint *)image.scanLine(y1);
|
||||||
|
const uint *s2 = (const uint *)image.scanLine(y2);
|
||||||
|
const int disty8 = (fy & 0x0000ffff) >> 8;
|
||||||
|
const int disty4 = (disty8 + 0x08) >> 4;
|
||||||
|
|
||||||
|
const qint64 min_fx = qint64(image.x1) * FixedScale;
|
||||||
|
const qint64 max_fx = qint64(image.x2 - 1) * FixedScale;
|
||||||
|
while (b < end) {
|
||||||
|
int x1 = (fx >> 16);
|
||||||
|
int x2;
|
||||||
|
fetchTransformedBilinear_pixelBounds(image.width, image.x1, image.x2 - 1, x1, x2);
|
||||||
|
if (x1 != x2)
|
||||||
|
break;
|
||||||
|
uint top = s1[x1];
|
||||||
|
uint bot = s2[x1];
|
||||||
|
*b = INTERPOLATE_PIXEL_256(top, 256 - disty8, bot, disty8);
|
||||||
|
fx += fdx;
|
||||||
|
++b;
|
||||||
|
}
|
||||||
|
uint *boundedEnd = end;
|
||||||
|
if (fdx > 0)
|
||||||
|
boundedEnd = qMin(boundedEnd, b + (max_fx - fx) / fdx);
|
||||||
|
else if (fdx < 0)
|
||||||
|
boundedEnd = qMin(boundedEnd, b + (min_fx - fx) / fdx);
|
||||||
|
|
||||||
|
// A fast middle part without boundary checks
|
||||||
|
const __m256i vdistShuffle =
|
||||||
|
_mm256_setr_epi8(0, char(0x80), 0, char(0x80), 4, char(0x80), 4, char(0x80), 8, char(0x80), 8, char(0x80), 12, char(0x80), 12, char(0x80),
|
||||||
|
0, char(0x80), 0, char(0x80), 4, char(0x80), 4, char(0x80), 8, char(0x80), 8, char(0x80), 12, char(0x80), 12, char(0x80));
|
||||||
|
const __m256i colorMask = _mm256_set1_epi32(0x00ff00ff);
|
||||||
|
const __m256i v_256 = _mm256_set1_epi16(256);
|
||||||
|
const __m256i v_disty = _mm256_set1_epi16(disty4);
|
||||||
|
const __m256i v_fdx = _mm256_set1_epi32(fdx * 8);
|
||||||
|
const __m256i v_fx_r = _mm256_set1_epi32(0x08);
|
||||||
|
const __m256i v_index = _mm256_setr_epi32(0, 1, 2, 3, 4, 5, 6, 7);
|
||||||
|
__m256i v_fx = _mm256_set1_epi32(fx);
|
||||||
|
v_fx = _mm256_add_epi32(v_fx, _mm256_mullo_epi32(_mm256_set1_epi32(fdx), v_index));
|
||||||
|
|
||||||
|
while (b < boundedEnd - 7) {
|
||||||
|
const __m256i offset = _mm256_srli_epi32(v_fx, 16);
|
||||||
|
const __m128i offsetLo = _mm256_castsi256_si128(offset);
|
||||||
|
const __m128i offsetHi = _mm256_extracti128_si256(offset, 1);
|
||||||
|
const __m256i toplo = _mm256_i32gather_epi64((const long long *)s1, offsetLo, 4);
|
||||||
|
const __m256i tophi = _mm256_i32gather_epi64((const long long *)s1, offsetHi, 4);
|
||||||
|
const __m256i botlo = _mm256_i32gather_epi64((const long long *)s2, offsetLo, 4);
|
||||||
|
const __m256i bothi = _mm256_i32gather_epi64((const long long *)s2, offsetHi, 4);
|
||||||
|
|
||||||
|
__m256i v_distx = _mm256_srli_epi16(v_fx, 8);
|
||||||
|
v_distx = _mm256_srli_epi16(_mm256_add_epi32(v_distx, v_fx_r), 4);
|
||||||
|
v_distx = _mm256_shuffle_epi8(v_distx, vdistShuffle);
|
||||||
|
|
||||||
|
interpolate_4_pixels_16_avx2(toplo, tophi, botlo, bothi, v_distx, v_disty, colorMask, v_256, b);
|
||||||
|
b += 8;
|
||||||
|
v_fx = _mm256_add_epi32(v_fx, v_fdx);
|
||||||
|
}
|
||||||
|
fx = _mm_extract_epi32(_mm256_castsi256_si128(v_fx) , 0);
|
||||||
|
|
||||||
|
while (b < boundedEnd) {
|
||||||
|
int x = (fx >> 16);
|
||||||
|
int distx8 = (fx & 0x0000ffff) >> 8;
|
||||||
|
*b = interpolate_4_pixels(s1 + x, s2 + x, distx8, disty8);
|
||||||
|
fx += fdx;
|
||||||
|
++b;
|
||||||
|
}
|
||||||
|
|
||||||
|
while (b < end) {
|
||||||
|
int x1 = (fx >> 16);
|
||||||
|
int x2;
|
||||||
|
fetchTransformedBilinear_pixelBounds(image.width, image.x1, image.x2 - 1, x1, x2);
|
||||||
|
uint tl = s1[x1];
|
||||||
|
uint tr = s1[x2];
|
||||||
|
uint bl = s2[x1];
|
||||||
|
uint br = s2[x2];
|
||||||
|
int distx8 = (fx & 0x0000ffff) >> 8;
|
||||||
|
*b = interpolate_4_pixels(tl, tr, bl, br, distx8, disty8);
|
||||||
|
fx += fdx;
|
||||||
|
++b;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void QT_FASTCALL fetchTransformedBilinearARGB32PM_fast_rotate_helper_avx2(uint *b, uint *end, const QTextureData &image,
|
||||||
|
int &fx, int &fy, int fdx, int fdy)
|
||||||
|
{
|
||||||
|
const qint64 min_fx = qint64(image.x1) * FixedScale;
|
||||||
|
const qint64 max_fx = qint64(image.x2 - 1) * FixedScale;
|
||||||
|
const qint64 min_fy = qint64(image.y1) * FixedScale;
|
||||||
|
const qint64 max_fy = qint64(image.y2 - 1) * FixedScale;
|
||||||
|
// first handle the possibly bounded part in the beginning
|
||||||
|
while (b < end) {
|
||||||
|
int x1 = (fx >> 16);
|
||||||
|
int x2;
|
||||||
|
int y1 = (fy >> 16);
|
||||||
|
int y2;
|
||||||
|
fetchTransformedBilinear_pixelBounds(image.width, image.x1, image.x2 - 1, x1, x2);
|
||||||
|
fetchTransformedBilinear_pixelBounds(image.height, image.y1, image.y2 - 1, y1, y2);
|
||||||
|
if (x1 != x2 && y1 != y2)
|
||||||
|
break;
|
||||||
|
const uint *s1 = (const uint *)image.scanLine(y1);
|
||||||
|
const uint *s2 = (const uint *)image.scanLine(y2);
|
||||||
|
uint tl = s1[x1];
|
||||||
|
uint tr = s1[x2];
|
||||||
|
uint bl = s2[x1];
|
||||||
|
uint br = s2[x2];
|
||||||
|
int distx = (fx & 0x0000ffff) >> 8;
|
||||||
|
int disty = (fy & 0x0000ffff) >> 8;
|
||||||
|
*b = interpolate_4_pixels(tl, tr, bl, br, distx, disty);
|
||||||
|
fx += fdx;
|
||||||
|
fy += fdy;
|
||||||
|
++b;
|
||||||
|
}
|
||||||
|
uint *boundedEnd = end;
|
||||||
|
if (fdx > 0)
|
||||||
|
boundedEnd = qMin(boundedEnd, b + (max_fx - fx) / fdx);
|
||||||
|
else if (fdx < 0)
|
||||||
|
boundedEnd = qMin(boundedEnd, b + (min_fx - fx) / fdx);
|
||||||
|
if (fdy > 0)
|
||||||
|
boundedEnd = qMin(boundedEnd, b + (max_fy - fy) / fdy);
|
||||||
|
else if (fdy < 0)
|
||||||
|
boundedEnd = qMin(boundedEnd, b + (min_fy - fy) / fdy);
|
||||||
|
|
||||||
|
// until boundedEnd we can now have a fast middle part without boundary checks
|
||||||
|
const __m256i vdistShuffle =
|
||||||
|
_mm256_setr_epi8(0, char(0x80), 0, char(0x80), 4, char(0x80), 4, char(0x80), 8, char(0x80), 8, char(0x80), 12, char(0x80), 12, char(0x80),
|
||||||
|
0, char(0x80), 0, char(0x80), 4, char(0x80), 4, char(0x80), 8, char(0x80), 8, char(0x80), 12, char(0x80), 12, char(0x80));
|
||||||
|
const __m256i colorMask = _mm256_set1_epi32(0x00ff00ff);
|
||||||
|
const __m256i v_256 = _mm256_set1_epi16(256);
|
||||||
|
const __m256i v_fdx = _mm256_set1_epi32(fdx * 8);
|
||||||
|
const __m256i v_fdy = _mm256_set1_epi32(fdy * 8);
|
||||||
|
const __m256i v_fxy_r = _mm256_set1_epi32(0x08);
|
||||||
|
const __m256i v_index = _mm256_setr_epi32(0, 1, 2, 3, 4, 5, 6, 7);
|
||||||
|
__m256i v_fx = _mm256_set1_epi32(fx);
|
||||||
|
__m256i v_fy = _mm256_set1_epi32(fy);
|
||||||
|
v_fx = _mm256_add_epi32(v_fx, _mm256_mullo_epi32(_mm256_set1_epi32(fdx), v_index));
|
||||||
|
v_fy = _mm256_add_epi32(v_fy, _mm256_mullo_epi32(_mm256_set1_epi32(fdy), v_index));
|
||||||
|
|
||||||
|
const uchar *textureData = image.imageData;
|
||||||
|
const int bytesPerLine = image.bytesPerLine;
|
||||||
|
const __m256i vbpl = _mm256_set1_epi16(bytesPerLine/4);
|
||||||
|
|
||||||
|
while (b < boundedEnd - 7) {
|
||||||
|
const __m256i vy = _mm256_packs_epi32(_mm256_srli_epi32(v_fy, 16), _mm256_setzero_si256());
|
||||||
|
// 8x16bit * 8x16bit -> 8x32bit
|
||||||
|
__m256i offset = _mm256_unpacklo_epi16(_mm256_mullo_epi16(vy, vbpl), _mm256_mulhi_epi16(vy, vbpl));
|
||||||
|
offset = _mm256_add_epi32(offset, _mm256_srli_epi32(v_fx, 16));
|
||||||
|
const __m128i offsetLo = _mm256_castsi256_si128(offset);
|
||||||
|
const __m128i offsetHi = _mm256_extracti128_si256(offset, 1);
|
||||||
|
const uint *topData = (const uint *)(textureData);
|
||||||
|
const uint *botData = (const uint *)(textureData + bytesPerLine);
|
||||||
|
const __m256i toplo = _mm256_i32gather_epi64((const long long *)topData, offsetLo, 4);
|
||||||
|
const __m256i tophi = _mm256_i32gather_epi64((const long long *)topData, offsetHi, 4);
|
||||||
|
const __m256i botlo = _mm256_i32gather_epi64((const long long *)botData, offsetLo, 4);
|
||||||
|
const __m256i bothi = _mm256_i32gather_epi64((const long long *)botData, offsetHi, 4);
|
||||||
|
|
||||||
|
__m256i v_distx = _mm256_srli_epi16(v_fx, 8);
|
||||||
|
__m256i v_disty = _mm256_srli_epi16(v_fy, 8);
|
||||||
|
v_distx = _mm256_srli_epi16(_mm256_add_epi32(v_distx, v_fxy_r), 4);
|
||||||
|
v_disty = _mm256_srli_epi16(_mm256_add_epi32(v_disty, v_fxy_r), 4);
|
||||||
|
v_distx = _mm256_shuffle_epi8(v_distx, vdistShuffle);
|
||||||
|
v_disty = _mm256_shuffle_epi8(v_disty, vdistShuffle);
|
||||||
|
|
||||||
|
interpolate_4_pixels_16_avx2(toplo, tophi, botlo, bothi, v_distx, v_disty, colorMask, v_256, b);
|
||||||
|
b += 8;
|
||||||
|
v_fx = _mm256_add_epi32(v_fx, v_fdx);
|
||||||
|
v_fy = _mm256_add_epi32(v_fy, v_fdy);
|
||||||
|
}
|
||||||
|
fx = _mm_extract_epi32(_mm256_castsi256_si128(v_fx) , 0);
|
||||||
|
fy = _mm_extract_epi32(_mm256_castsi256_si128(v_fy) , 0);
|
||||||
|
|
||||||
|
while (b < boundedEnd) {
|
||||||
|
int x = (fx >> 16);
|
||||||
|
int y = (fy >> 16);
|
||||||
|
|
||||||
|
const uint *s1 = (const uint *)image.scanLine(y);
|
||||||
|
const uint *s2 = (const uint *)image.scanLine(y + 1);
|
||||||
|
|
||||||
|
int distx = (fx & 0x0000ffff) >> 8;
|
||||||
|
int disty = (fy & 0x0000ffff) >> 8;
|
||||||
|
*b = interpolate_4_pixels(s1 + x, s2 + x, distx, disty);
|
||||||
|
|
||||||
|
fx += fdx;
|
||||||
|
fy += fdy;
|
||||||
|
++b;
|
||||||
|
}
|
||||||
|
|
||||||
|
while (b < end) {
|
||||||
|
int x1 = (fx >> 16);
|
||||||
|
int x2;
|
||||||
|
int y1 = (fy >> 16);
|
||||||
|
int y2;
|
||||||
|
|
||||||
|
fetchTransformedBilinear_pixelBounds(image.width, image.x1, image.x2 - 1, x1, x2);
|
||||||
|
fetchTransformedBilinear_pixelBounds(image.height, image.y1, image.y2 - 1, y1, y2);
|
||||||
|
|
||||||
|
const uint *s1 = (const uint *)image.scanLine(y1);
|
||||||
|
const uint *s2 = (const uint *)image.scanLine(y2);
|
||||||
|
|
||||||
|
uint tl = s1[x1];
|
||||||
|
uint tr = s1[x2];
|
||||||
|
uint bl = s2[x1];
|
||||||
|
uint br = s2[x2];
|
||||||
|
|
||||||
|
int distx = (fx & 0x0000ffff) >> 8;
|
||||||
|
int disty = (fy & 0x0000ffff) >> 8;
|
||||||
|
*b = interpolate_4_pixels(tl, tr, bl, br, distx, disty);
|
||||||
|
|
||||||
|
fx += fdx;
|
||||||
|
fy += fdy;
|
||||||
|
++b;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
QT_END_NAMESPACE
|
QT_END_NAMESPACE
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -110,7 +110,11 @@ void QHstsCache::updateKnownHost(const QString &host, const QDateTime &expires,
|
|||||||
// IDNA 2003 (RFC3490) for us, as required by HSTS (RFC6797, section 10).
|
// IDNA 2003 (RFC3490) for us, as required by HSTS (RFC6797, section 10).
|
||||||
const HostName hostName(host);
|
const HostName hostName(host);
|
||||||
const auto pos = knownHosts.find(hostName);
|
const auto pos = knownHosts.find(hostName);
|
||||||
const QHstsPolicy newPolicy(expires, includeSubDomains, hostName.name);
|
QHstsPolicy::PolicyFlags flags;
|
||||||
|
if (includeSubDomains)
|
||||||
|
flags = QHstsPolicy::IncludeSubDomains;
|
||||||
|
|
||||||
|
const QHstsPolicy newPolicy(expires, flags, hostName.name);
|
||||||
if (pos == knownHosts.end()) {
|
if (pos == knownHosts.end()) {
|
||||||
// A new, previously unknown host.
|
// A new, previously unknown host.
|
||||||
if (newPolicy.isExpired()) {
|
if (newPolicy.isExpired()) {
|
||||||
|
@ -63,6 +63,14 @@ QT_BEGIN_NAMESPACE
|
|||||||
\sa QNetworkAccessManager::setStrictTransportSecurityEnabled()
|
\sa QNetworkAccessManager::setStrictTransportSecurityEnabled()
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
\enum QHstsPolicy::PolicyFlag
|
||||||
|
|
||||||
|
Specifies attributes that a policy can have.
|
||||||
|
|
||||||
|
\value IncludeSubDomains HSTS policy also applies to subdomains.
|
||||||
|
*/
|
||||||
|
|
||||||
class QHstsPolicyPrivate : public QSharedData
|
class QHstsPolicyPrivate : public QSharedData
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@ -101,13 +109,13 @@ QHstsPolicy::QHstsPolicy() : d(new QHstsPolicyPrivate)
|
|||||||
|
|
||||||
\sa QUrl::setHost(), QUrl::ParsingMode
|
\sa QUrl::setHost(), QUrl::ParsingMode
|
||||||
*/
|
*/
|
||||||
QHstsPolicy::QHstsPolicy(const QDateTime &expiry, bool includeSubDomains, const QString &host,
|
QHstsPolicy::QHstsPolicy(const QDateTime &expiry, PolicyFlags flags,
|
||||||
QUrl::ParsingMode mode)
|
const QString &host, QUrl::ParsingMode mode)
|
||||||
: d(new QHstsPolicyPrivate)
|
: d(new QHstsPolicyPrivate)
|
||||||
{
|
{
|
||||||
d->url.setHost(host, mode);
|
d->url.setHost(host, mode);
|
||||||
d->expiry = expiry;
|
d->expiry = expiry;
|
||||||
d->includeSubDomains = includeSubDomains;
|
d->includeSubDomains = flags.testFlag(IncludeSubDomains);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
|
@ -43,6 +43,7 @@
|
|||||||
#include <QtNetwork/qtnetworkglobal.h>
|
#include <QtNetwork/qtnetworkglobal.h>
|
||||||
|
|
||||||
#include <QtCore/qshareddata.h>
|
#include <QtCore/qshareddata.h>
|
||||||
|
#include <QtCore/qflags.h>
|
||||||
#include <QtCore/qurl.h>
|
#include <QtCore/qurl.h>
|
||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
@ -53,10 +54,15 @@ class QString;
|
|||||||
class Q_NETWORK_EXPORT QHstsPolicy
|
class Q_NETWORK_EXPORT QHstsPolicy
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
enum PolicyFlag
|
||||||
|
{
|
||||||
|
IncludeSubDomains = 1
|
||||||
|
};
|
||||||
|
Q_DECLARE_FLAGS(PolicyFlags, PolicyFlag)
|
||||||
|
|
||||||
QHstsPolicy();
|
QHstsPolicy();
|
||||||
explicit QHstsPolicy(const QDateTime &expiry, bool includeSubDomains, const QString &host,
|
QHstsPolicy(const QDateTime &expiry, PolicyFlags flags, const QString &host,
|
||||||
QUrl::ParsingMode mode = QUrl::DecodedMode);
|
QUrl::ParsingMode mode = QUrl::DecodedMode);
|
||||||
QHstsPolicy(const QHstsPolicy &rhs);
|
QHstsPolicy(const QHstsPolicy &rhs);
|
||||||
QHstsPolicy &operator=(const QHstsPolicy &rhs);
|
QHstsPolicy &operator=(const QHstsPolicy &rhs);
|
||||||
QHstsPolicy &operator=(QHstsPolicy &&other) Q_DECL_NOTHROW { swap(other); return *this; }
|
QHstsPolicy &operator=(QHstsPolicy &&other) Q_DECL_NOTHROW { swap(other); return *this; }
|
||||||
@ -81,6 +87,7 @@ private:
|
|||||||
};
|
};
|
||||||
|
|
||||||
Q_DECLARE_SHARED(QHstsPolicy)
|
Q_DECLARE_SHARED(QHstsPolicy)
|
||||||
|
Q_DECLARE_OPERATORS_FOR_FLAGS(QHstsPolicy::PolicyFlags)
|
||||||
|
|
||||||
Q_NETWORK_EXPORT bool operator==(const QHstsPolicy &lhs, const QHstsPolicy &rhs);
|
Q_NETWORK_EXPORT bool operator==(const QHstsPolicy &lhs, const QHstsPolicy &rhs);
|
||||||
|
|
||||||
|
@ -6,7 +6,17 @@
|
|||||||
** This file is part of the documentation of the Qt Toolkit.
|
** This file is part of the documentation of the Qt Toolkit.
|
||||||
**
|
**
|
||||||
** $QT_BEGIN_LICENSE:BSD$
|
** $QT_BEGIN_LICENSE:BSD$
|
||||||
** You may use this file under the terms of the BSD license as follows:
|
** 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.
|
||||||
|
**
|
||||||
|
** BSD License Usage
|
||||||
|
** Alternatively, you may use this file under the terms of the BSD license
|
||||||
|
** as follows:
|
||||||
**
|
**
|
||||||
** "Redistribution and use in source and binary forms, with or without
|
** "Redistribution and use in source and binary forms, with or without
|
||||||
** modification, are permitted provided that the following conditions are
|
** modification, are permitted provided that the following conditions are
|
||||||
|
@ -3,29 +3,35 @@
|
|||||||
** Copyright (C) 2015-2016 Oleksandr Tymoshenko <gonzo@bluezbox.com>
|
** Copyright (C) 2015-2016 Oleksandr Tymoshenko <gonzo@bluezbox.com>
|
||||||
** Contact: https://www.qt.io/licensing/
|
** Contact: https://www.qt.io/licensing/
|
||||||
**
|
**
|
||||||
** This file is part of the QtGui module of the Qt Toolkit.
|
** This file is part of the plugins of the Qt Toolkit.
|
||||||
**
|
**
|
||||||
** $QT_BEGIN_LICENSE:LGPL21$
|
** $QT_BEGIN_LICENSE:LGPL$
|
||||||
** Commercial License Usage
|
** Commercial License Usage
|
||||||
** Licensees holding valid commercial Qt licenses may use this file in
|
** Licensees holding valid commercial Qt licenses may use this file in
|
||||||
** accordance with the commercial license agreement provided with the
|
** accordance with the commercial license agreement provided with the
|
||||||
** Software or, alternatively, in accordance with the terms contained in
|
** Software or, alternatively, in accordance with the terms contained in
|
||||||
** a written agreement between you and The Qt Company. For licensing terms
|
** a written agreement between you and The Qt Company. For licensing terms
|
||||||
** and conditions see http://www.qt.io/terms-conditions. For further
|
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||||
** information use the contact form at http://www.qt.io/contact-us.
|
** information use the contact form at https://www.qt.io/contact-us.
|
||||||
**
|
**
|
||||||
** GNU Lesser General Public License Usage
|
** GNU Lesser General Public License Usage
|
||||||
** Alternatively, this file may be used under the terms of the GNU Lesser
|
** Alternatively, this file may be used under the terms of the GNU Lesser
|
||||||
** General Public License version 2.1 or version 3 as published by the Free
|
** General Public License version 3 as published by the Free Software
|
||||||
** Software Foundation and appearing in the file LICENSE.LGPLv21 and
|
** Foundation and appearing in the file LICENSE.LGPL3 included in the
|
||||||
** LICENSE.LGPLv3 included in the packaging of this file. Please review the
|
** packaging of this file. Please review the following information to
|
||||||
** following information to ensure the GNU Lesser General Public License
|
** ensure the GNU Lesser General Public License version 3 requirements
|
||||||
** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
|
** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
|
||||||
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
|
||||||
**
|
**
|
||||||
** As a special exception, The Qt Company gives you certain additional
|
** GNU General Public License Usage
|
||||||
** rights. These rights are described in The Qt Company LGPL Exception
|
** Alternatively, this file may be used under the terms of the GNU
|
||||||
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
** General Public License version 2.0 or (at your option) the GNU General
|
||||||
|
** Public license version 3 or any later version approved by the KDE Free
|
||||||
|
** Qt Foundation. The licenses are as published by the Free Software
|
||||||
|
** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
|
||||||
|
** 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-2.0.html and
|
||||||
|
** https://www.gnu.org/licenses/gpl-3.0.html.
|
||||||
**
|
**
|
||||||
** $QT_END_LICENSE$
|
** $QT_END_LICENSE$
|
||||||
**
|
**
|
||||||
|
@ -3,29 +3,35 @@
|
|||||||
** Copyright (C) 2015-2016 Oleksandr Tymoshenko <gonzo@bluezbox.com>
|
** Copyright (C) 2015-2016 Oleksandr Tymoshenko <gonzo@bluezbox.com>
|
||||||
** Contact: https://www.qt.io/licensing/
|
** Contact: https://www.qt.io/licensing/
|
||||||
**
|
**
|
||||||
** This file is part of the QtGui module of the Qt Toolkit.
|
** This file is part of the plugins of the Qt Toolkit.
|
||||||
**
|
**
|
||||||
** $QT_BEGIN_LICENSE:LGPL21$
|
** $QT_BEGIN_LICENSE:LGPL$
|
||||||
** Commercial License Usage
|
** Commercial License Usage
|
||||||
** Licensees holding valid commercial Qt licenses may use this file in
|
** Licensees holding valid commercial Qt licenses may use this file in
|
||||||
** accordance with the commercial license agreement provided with the
|
** accordance with the commercial license agreement provided with the
|
||||||
** Software or, alternatively, in accordance with the terms contained in
|
** Software or, alternatively, in accordance with the terms contained in
|
||||||
** a written agreement between you and The Qt Company. For licensing terms
|
** a written agreement between you and The Qt Company. For licensing terms
|
||||||
** and conditions see http://www.qt.io/terms-conditions. For further
|
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||||
** information use the contact form at http://www.qt.io/contact-us.
|
** information use the contact form at https://www.qt.io/contact-us.
|
||||||
**
|
**
|
||||||
** GNU Lesser General Public License Usage
|
** GNU Lesser General Public License Usage
|
||||||
** Alternatively, this file may be used under the terms of the GNU Lesser
|
** Alternatively, this file may be used under the terms of the GNU Lesser
|
||||||
** General Public License version 2.1 or version 3 as published by the Free
|
** General Public License version 3 as published by the Free Software
|
||||||
** Software Foundation and appearing in the file LICENSE.LGPLv21 and
|
** Foundation and appearing in the file LICENSE.LGPL3 included in the
|
||||||
** LICENSE.LGPLv3 included in the packaging of this file. Please review the
|
** packaging of this file. Please review the following information to
|
||||||
** following information to ensure the GNU Lesser General Public License
|
** ensure the GNU Lesser General Public License version 3 requirements
|
||||||
** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
|
** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
|
||||||
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
|
||||||
**
|
**
|
||||||
** As a special exception, The Qt Company gives you certain additional
|
** GNU General Public License Usage
|
||||||
** rights. These rights are described in The Qt Company LGPL Exception
|
** Alternatively, this file may be used under the terms of the GNU
|
||||||
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
** General Public License version 2.0 or (at your option) the GNU General
|
||||||
|
** Public license version 3 or any later version approved by the KDE Free
|
||||||
|
** Qt Foundation. The licenses are as published by the Free Software
|
||||||
|
** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
|
||||||
|
** 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-2.0.html and
|
||||||
|
** https://www.gnu.org/licenses/gpl-3.0.html.
|
||||||
**
|
**
|
||||||
** $QT_END_LICENSE$
|
** $QT_END_LICENSE$
|
||||||
**
|
**
|
||||||
|
@ -3,29 +3,35 @@
|
|||||||
** Copyright (C) 2015-2016 Oleksandr Tymoshenko <gonzo@bluezbox.com>
|
** Copyright (C) 2015-2016 Oleksandr Tymoshenko <gonzo@bluezbox.com>
|
||||||
** Contact: https://www.qt.io/licensing/
|
** Contact: https://www.qt.io/licensing/
|
||||||
**
|
**
|
||||||
** This file is part of the QtGui module of the Qt Toolkit.
|
** This file is part of the plugins of the Qt Toolkit.
|
||||||
**
|
**
|
||||||
** $QT_BEGIN_LICENSE:LGPL21$
|
** $QT_BEGIN_LICENSE:LGPL$
|
||||||
** Commercial License Usage
|
** Commercial License Usage
|
||||||
** Licensees holding valid commercial Qt licenses may use this file in
|
** Licensees holding valid commercial Qt licenses may use this file in
|
||||||
** accordance with the commercial license agreement provided with the
|
** accordance with the commercial license agreement provided with the
|
||||||
** Software or, alternatively, in accordance with the terms contained in
|
** Software or, alternatively, in accordance with the terms contained in
|
||||||
** a written agreement between you and The Qt Company. For licensing terms
|
** a written agreement between you and The Qt Company. For licensing terms
|
||||||
** and conditions see http://www.qt.io/terms-conditions. For further
|
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||||
** information use the contact form at http://www.qt.io/contact-us.
|
** information use the contact form at https://www.qt.io/contact-us.
|
||||||
**
|
**
|
||||||
** GNU Lesser General Public License Usage
|
** GNU Lesser General Public License Usage
|
||||||
** Alternatively, this file may be used under the terms of the GNU Lesser
|
** Alternatively, this file may be used under the terms of the GNU Lesser
|
||||||
** General Public License version 2.1 or version 3 as published by the Free
|
** General Public License version 3 as published by the Free Software
|
||||||
** Software Foundation and appearing in the file LICENSE.LGPLv21 and
|
** Foundation and appearing in the file LICENSE.LGPL3 included in the
|
||||||
** LICENSE.LGPLv3 included in the packaging of this file. Please review the
|
** packaging of this file. Please review the following information to
|
||||||
** following information to ensure the GNU Lesser General Public License
|
** ensure the GNU Lesser General Public License version 3 requirements
|
||||||
** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
|
** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
|
||||||
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
|
||||||
**
|
**
|
||||||
** As a special exception, The Qt Company gives you certain additional
|
** GNU General Public License Usage
|
||||||
** rights. These rights are described in The Qt Company LGPL Exception
|
** Alternatively, this file may be used under the terms of the GNU
|
||||||
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
** General Public License version 2.0 or (at your option) the GNU General
|
||||||
|
** Public license version 3 or any later version approved by the KDE Free
|
||||||
|
** Qt Foundation. The licenses are as published by the Free Software
|
||||||
|
** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
|
||||||
|
** 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-2.0.html and
|
||||||
|
** https://www.gnu.org/licenses/gpl-3.0.html.
|
||||||
**
|
**
|
||||||
** $QT_END_LICENSE$
|
** $QT_END_LICENSE$
|
||||||
**
|
**
|
||||||
|
@ -1,32 +1,38 @@
|
|||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
**
|
**
|
||||||
** Copyright (C) 2015 The Qt Company Ltd.
|
** Copyright (C) 2017 The Qt Company Ltd.
|
||||||
** Copyright (C) 2015-2016 Oleksandr Tymoshenko <gonzo@bluezbox.com>
|
** Copyright (C) 2015-2016 Oleksandr Tymoshenko <gonzo@bluezbox.com>
|
||||||
** Contact: http://www.qt.io/licensing/
|
** Contact: https://www.qt.io/licensing/
|
||||||
**
|
**
|
||||||
** This file is part of the QtGui module of the Qt Toolkit.
|
** This file is part of the plugins of the Qt Toolkit.
|
||||||
**
|
**
|
||||||
** $QT_BEGIN_LICENSE:LGPL21$
|
** $QT_BEGIN_LICENSE:LGPL$
|
||||||
** Commercial License Usage
|
** Commercial License Usage
|
||||||
** Licensees holding valid commercial Qt licenses may use this file in
|
** Licensees holding valid commercial Qt licenses may use this file in
|
||||||
** accordance with the commercial license agreement provided with the
|
** accordance with the commercial license agreement provided with the
|
||||||
** Software or, alternatively, in accordance with the terms contained in
|
** Software or, alternatively, in accordance with the terms contained in
|
||||||
** a written agreement between you and The Qt Company. For licensing terms
|
** a written agreement between you and The Qt Company. For licensing terms
|
||||||
** and conditions see http://www.qt.io/terms-conditions. For further
|
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||||
** information use the contact form at http://www.qt.io/contact-us.
|
** information use the contact form at https://www.qt.io/contact-us.
|
||||||
**
|
**
|
||||||
** GNU Lesser General Public License Usage
|
** GNU Lesser General Public License Usage
|
||||||
** Alternatively, this file may be used under the terms of the GNU Lesser
|
** Alternatively, this file may be used under the terms of the GNU Lesser
|
||||||
** General Public License version 2.1 or version 3 as published by the Free
|
** General Public License version 3 as published by the Free Software
|
||||||
** Software Foundation and appearing in the file LICENSE.LGPLv21 and
|
** Foundation and appearing in the file LICENSE.LGPL3 included in the
|
||||||
** LICENSE.LGPLv3 included in the packaging of this file. Please review the
|
** packaging of this file. Please review the following information to
|
||||||
** following information to ensure the GNU Lesser General Public License
|
** ensure the GNU Lesser General Public License version 3 requirements
|
||||||
** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
|
** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
|
||||||
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
|
||||||
**
|
**
|
||||||
** As a special exception, The Qt Company gives you certain additional
|
** GNU General Public License Usage
|
||||||
** rights. These rights are described in The Qt Company LGPL Exception
|
** Alternatively, this file may be used under the terms of the GNU
|
||||||
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
** General Public License version 2.0 or (at your option) the GNU General
|
||||||
|
** Public license version 3 or any later version approved by the KDE Free
|
||||||
|
** Qt Foundation. The licenses are as published by the Free Software
|
||||||
|
** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
|
||||||
|
** 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-2.0.html and
|
||||||
|
** https://www.gnu.org/licenses/gpl-3.0.html.
|
||||||
**
|
**
|
||||||
** $QT_END_LICENSE$
|
** $QT_END_LICENSE$
|
||||||
**
|
**
|
||||||
|
@ -1,31 +1,37 @@
|
|||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
**
|
**
|
||||||
** Copyright (C) 2015-2016 Oleksandr Tymoshenko <gonzo@bluezbox.com>
|
** Copyright (C) 2015-2016 Oleksandr Tymoshenko <gonzo@bluezbox.com>
|
||||||
** Contact: http://www.qt.io/licensing/
|
** Contact: https://www.qt.io/licensing/
|
||||||
**
|
**
|
||||||
** This file is part of the QtGui module of the Qt Toolkit.
|
** This file is part of the plugins of the Qt Toolkit.
|
||||||
**
|
**
|
||||||
** $QT_BEGIN_LICENSE:LGPL21$
|
** $QT_BEGIN_LICENSE:LGPL$
|
||||||
** Commercial License Usage
|
** Commercial License Usage
|
||||||
** Licensees holding valid commercial Qt licenses may use this file in
|
** Licensees holding valid commercial Qt licenses may use this file in
|
||||||
** accordance with the commercial license agreement provided with the
|
** accordance with the commercial license agreement provided with the
|
||||||
** Software or, alternatively, in accordance with the terms contained in
|
** Software or, alternatively, in accordance with the terms contained in
|
||||||
** a written agreement between you and The Qt Company. For licensing terms
|
** a written agreement between you and The Qt Company. For licensing terms
|
||||||
** and conditions see http://www.qt.io/terms-conditions. For further
|
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||||
** information use the contact form at http://www.qt.io/contact-us.
|
** information use the contact form at https://www.qt.io/contact-us.
|
||||||
**
|
**
|
||||||
** GNU Lesser General Public License Usage
|
** GNU Lesser General Public License Usage
|
||||||
** Alternatively, this file may be used under the terms of the GNU Lesser
|
** Alternatively, this file may be used under the terms of the GNU Lesser
|
||||||
** General Public License version 2.1 or version 3 as published by the Free
|
** General Public License version 3 as published by the Free Software
|
||||||
** Software Foundation and appearing in the file LICENSE.LGPLv21 and
|
** Foundation and appearing in the file LICENSE.LGPL3 included in the
|
||||||
** LICENSE.LGPLv3 included in the packaging of this file. Please review the
|
** packaging of this file. Please review the following information to
|
||||||
** following information to ensure the GNU Lesser General Public License
|
** ensure the GNU Lesser General Public License version 3 requirements
|
||||||
** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
|
** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
|
||||||
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
|
||||||
**
|
**
|
||||||
** As a special exception, The Qt Company gives you certain additional
|
** GNU General Public License Usage
|
||||||
** rights. These rights are described in The Qt Company LGPL Exception
|
** Alternatively, this file may be used under the terms of the GNU
|
||||||
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
** General Public License version 2.0 or (at your option) the GNU General
|
||||||
|
** Public license version 3 or any later version approved by the KDE Free
|
||||||
|
** Qt Foundation. The licenses are as published by the Free Software
|
||||||
|
** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
|
||||||
|
** 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-2.0.html and
|
||||||
|
** https://www.gnu.org/licenses/gpl-3.0.html.
|
||||||
**
|
**
|
||||||
** $QT_END_LICENSE$
|
** $QT_END_LICENSE$
|
||||||
**
|
**
|
||||||
|
@ -1,31 +1,37 @@
|
|||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
**
|
**
|
||||||
** Copyright (C) 2015-2016 Oleksandr Tymoshenko <gonzo@bluezbox.com>
|
** Copyright (C) 2015-2016 Oleksandr Tymoshenko <gonzo@bluezbox.com>
|
||||||
** Contact: http://www.qt.io/licensing/
|
** Contact: https://www.qt.io/licensing/
|
||||||
**
|
**
|
||||||
** This file is part of the QtGui module of the Qt Toolkit.
|
** This file is part of the plugins of the Qt Toolkit.
|
||||||
**
|
**
|
||||||
** $QT_BEGIN_LICENSE:LGPL21$
|
** $QT_BEGIN_LICENSE:LGPL$
|
||||||
** Commercial License Usage
|
** Commercial License Usage
|
||||||
** Licensees holding valid commercial Qt licenses may use this file in
|
** Licensees holding valid commercial Qt licenses may use this file in
|
||||||
** accordance with the commercial license agreement provided with the
|
** accordance with the commercial license agreement provided with the
|
||||||
** Software or, alternatively, in accordance with the terms contained in
|
** Software or, alternatively, in accordance with the terms contained in
|
||||||
** a written agreement between you and The Qt Company. For licensing terms
|
** a written agreement between you and The Qt Company. For licensing terms
|
||||||
** and conditions see http://www.qt.io/terms-conditions. For further
|
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||||
** information use the contact form at http://www.qt.io/contact-us.
|
** information use the contact form at https://www.qt.io/contact-us.
|
||||||
**
|
**
|
||||||
** GNU Lesser General Public License Usage
|
** GNU Lesser General Public License Usage
|
||||||
** Alternatively, this file may be used under the terms of the GNU Lesser
|
** Alternatively, this file may be used under the terms of the GNU Lesser
|
||||||
** General Public License version 2.1 or version 3 as published by the Free
|
** General Public License version 3 as published by the Free Software
|
||||||
** Software Foundation and appearing in the file LICENSE.LGPLv21 and
|
** Foundation and appearing in the file LICENSE.LGPL3 included in the
|
||||||
** LICENSE.LGPLv3 included in the packaging of this file. Please review the
|
** packaging of this file. Please review the following information to
|
||||||
** following information to ensure the GNU Lesser General Public License
|
** ensure the GNU Lesser General Public License version 3 requirements
|
||||||
** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
|
** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
|
||||||
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
|
||||||
**
|
**
|
||||||
** As a special exception, The Qt Company gives you certain additional
|
** GNU General Public License Usage
|
||||||
** rights. These rights are described in The Qt Company LGPL Exception
|
** Alternatively, this file may be used under the terms of the GNU
|
||||||
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
** General Public License version 2.0 or (at your option) the GNU General
|
||||||
|
** Public license version 3 or any later version approved by the KDE Free
|
||||||
|
** Qt Foundation. The licenses are as published by the Free Software
|
||||||
|
** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
|
||||||
|
** 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-2.0.html and
|
||||||
|
** https://www.gnu.org/licenses/gpl-3.0.html.
|
||||||
**
|
**
|
||||||
** $QT_END_LICENSE$
|
** $QT_END_LICENSE$
|
||||||
**
|
**
|
||||||
|
@ -1,31 +1,37 @@
|
|||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
**
|
**
|
||||||
** Copyright (C) 2015-2016 Oleksandr Tymoshenko <gonzo@bluezbox.com>
|
** Copyright (C) 2015-2016 Oleksandr Tymoshenko <gonzo@bluezbox.com>
|
||||||
** Contact: http://www.qt.io/licensing/
|
** Contact: https://www.qt.io/licensing/
|
||||||
**
|
**
|
||||||
** This file is part of the QtGui module of the Qt Toolkit.
|
** This file is part of the plugins of the Qt Toolkit.
|
||||||
**
|
**
|
||||||
** $QT_BEGIN_LICENSE:LGPL21$
|
** $QT_BEGIN_LICENSE:LGPL$
|
||||||
** Commercial License Usage
|
** Commercial License Usage
|
||||||
** Licensees holding valid commercial Qt licenses may use this file in
|
** Licensees holding valid commercial Qt licenses may use this file in
|
||||||
** accordance with the commercial license agreement provided with the
|
** accordance with the commercial license agreement provided with the
|
||||||
** Software or, alternatively, in accordance with the terms contained in
|
** Software or, alternatively, in accordance with the terms contained in
|
||||||
** a written agreement between you and The Qt Company. For licensing terms
|
** a written agreement between you and The Qt Company. For licensing terms
|
||||||
** and conditions see http://www.qt.io/terms-conditions. For further
|
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||||
** information use the contact form at http://www.qt.io/contact-us.
|
** information use the contact form at https://www.qt.io/contact-us.
|
||||||
**
|
**
|
||||||
** GNU Lesser General Public License Usage
|
** GNU Lesser General Public License Usage
|
||||||
** Alternatively, this file may be used under the terms of the GNU Lesser
|
** Alternatively, this file may be used under the terms of the GNU Lesser
|
||||||
** General Public License version 2.1 or version 3 as published by the Free
|
** General Public License version 3 as published by the Free Software
|
||||||
** Software Foundation and appearing in the file LICENSE.LGPLv21 and
|
** Foundation and appearing in the file LICENSE.LGPL3 included in the
|
||||||
** LICENSE.LGPLv3 included in the packaging of this file. Please review the
|
** packaging of this file. Please review the following information to
|
||||||
** following information to ensure the GNU Lesser General Public License
|
** ensure the GNU Lesser General Public License version 3 requirements
|
||||||
** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
|
** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
|
||||||
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
|
||||||
**
|
**
|
||||||
** As a special exception, The Qt Company gives you certain additional
|
** GNU General Public License Usage
|
||||||
** rights. These rights are described in The Qt Company LGPL Exception
|
** Alternatively, this file may be used under the terms of the GNU
|
||||||
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
** General Public License version 2.0 or (at your option) the GNU General
|
||||||
|
** Public license version 3 or any later version approved by the KDE Free
|
||||||
|
** Qt Foundation. The licenses are as published by the Free Software
|
||||||
|
** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
|
||||||
|
** 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-2.0.html and
|
||||||
|
** https://www.gnu.org/licenses/gpl-3.0.html.
|
||||||
**
|
**
|
||||||
** $QT_END_LICENSE$
|
** $QT_END_LICENSE$
|
||||||
**
|
**
|
||||||
|
@ -2,7 +2,9 @@ TEMPLATE = subdirs
|
|||||||
QT_FOR_CONFIG += gui-private network-private
|
QT_FOR_CONFIG += gui-private network-private
|
||||||
|
|
||||||
qtConfig(evdev) {
|
qtConfig(evdev) {
|
||||||
SUBDIRS += evdevmouse evdevtouch evdevkeyboard evdevtablet
|
SUBDIRS += evdevmouse evdevtouch evdevkeyboard
|
||||||
|
qtConfig(tabletevent): \
|
||||||
|
SUBDIRS += evdevtablet
|
||||||
}
|
}
|
||||||
|
|
||||||
qtConfig(tslib) {
|
qtConfig(tslib) {
|
||||||
|
@ -79,7 +79,10 @@ private:
|
|||||||
QEglFSCursor *m_cursor;
|
QEglFSCursor *m_cursor;
|
||||||
};
|
};
|
||||||
|
|
||||||
class Q_EGLFS_EXPORT QEglFSCursor : public QPlatformCursor, protected QOpenGLFunctions
|
#if QT_CONFIG(opengl)
|
||||||
|
|
||||||
|
class Q_EGLFS_EXPORT QEglFSCursor : public QPlatformCursor
|
||||||
|
, protected QOpenGLFunctions
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
@ -153,6 +156,7 @@ private:
|
|||||||
};
|
};
|
||||||
QHash<QOpenGLContext *, GraphicsContextData> m_gfx;
|
QHash<QOpenGLContext *, GraphicsContextData> m_gfx;
|
||||||
};
|
};
|
||||||
|
#endif // QT_CONFIG(opengl)
|
||||||
|
|
||||||
QT_END_NAMESPACE
|
QT_END_NAMESPACE
|
||||||
|
|
||||||
|
@ -9,7 +9,7 @@ qtConfig(eglfs_mali): SUBDIRS += eglfs_mali
|
|||||||
qtConfig(eglfs_viv): SUBDIRS += eglfs_viv
|
qtConfig(eglfs_viv): SUBDIRS += eglfs_viv
|
||||||
qtConfig(eglfs_viv_wl): SUBDIRS += eglfs_viv_wl
|
qtConfig(eglfs_viv_wl): SUBDIRS += eglfs_viv_wl
|
||||||
|
|
||||||
SUBDIRS += eglfs_emu
|
qtConfig(opengl): SUBDIRS += eglfs_emu
|
||||||
|
|
||||||
eglfs_kms_egldevice.depends = eglfs_kms_support
|
eglfs_kms_egldevice.depends = eglfs_kms_support
|
||||||
eglfs_kms.depends = eglfs_kms_support
|
eglfs_kms.depends = eglfs_kms_support
|
||||||
|
@ -105,12 +105,13 @@ void QEglFSKmsGbmIntegration::destroyNativeWindow(EGLNativeWindowType window)
|
|||||||
|
|
||||||
QPlatformCursor *QEglFSKmsGbmIntegration::createCursor(QPlatformScreen *screen) const
|
QPlatformCursor *QEglFSKmsGbmIntegration::createCursor(QPlatformScreen *screen) const
|
||||||
{
|
{
|
||||||
if (screenConfig()->hwCursor()) {
|
#if QT_CONFIG(opengl)
|
||||||
return nullptr;
|
if (!screenConfig()->hwCursor()) {
|
||||||
} else {
|
|
||||||
qCDebug(qLcEglfsKmsDebug, "Using plain OpenGL mouse cursor");
|
qCDebug(qLcEglfsKmsDebug, "Using plain OpenGL mouse cursor");
|
||||||
return new QEglFSCursor(screen);
|
return new QEglFSCursor(screen);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
void QEglFSKmsGbmIntegration::presentBuffer(QPlatformSurface *surface)
|
void QEglFSKmsGbmIntegration::presentBuffer(QPlatformSurface *surface)
|
||||||
|
@ -85,12 +85,12 @@ EGLNativeDisplayType QEglFSKmsEglDevice::nativeDisplay() const
|
|||||||
QPlatformScreen *QEglFSKmsEglDevice::createScreen(const QKmsOutput &output)
|
QPlatformScreen *QEglFSKmsEglDevice::createScreen(const QKmsOutput &output)
|
||||||
{
|
{
|
||||||
QEglFSKmsScreen *screen = new QEglFSKmsEglDeviceScreen(this, output);
|
QEglFSKmsScreen *screen = new QEglFSKmsEglDeviceScreen(this, output);
|
||||||
|
#if QT_CONFIG(opengl)
|
||||||
if (!m_globalCursor && !screenConfig()->separateScreens()) {
|
if (!m_globalCursor && !screenConfig()->separateScreens()) {
|
||||||
qCDebug(qLcEglfsKmsDebug, "Creating new global mouse cursor");
|
qCDebug(qLcEglfsKmsDebug, "Creating new global mouse cursor");
|
||||||
m_globalCursor = new QEglFSCursor(screen);
|
m_globalCursor = new QEglFSCursor(screen);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
return screen;
|
return screen;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -280,7 +280,11 @@ bool QEglFSKmsEglDeviceIntegration::query_egl_device()
|
|||||||
|
|
||||||
QPlatformCursor *QEglFSKmsEglDeviceIntegration::createCursor(QPlatformScreen *screen) const
|
QPlatformCursor *QEglFSKmsEglDeviceIntegration::createCursor(QPlatformScreen *screen) const
|
||||||
{
|
{
|
||||||
return screenConfig()->separateScreens() ? new QEglFSCursor(screen) : nullptr;
|
#if QT_CONFIG(opengl)
|
||||||
|
if (screenConfig()->separateScreens())
|
||||||
|
return new QEglFSCursor(screen);
|
||||||
|
#endif
|
||||||
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
QT_END_NAMESPACE
|
QT_END_NAMESPACE
|
||||||
|
@ -36,7 +36,7 @@ qtConfig(directfb) {
|
|||||||
|
|
||||||
qtConfig(linuxfb): SUBDIRS += linuxfb
|
qtConfig(linuxfb): SUBDIRS += linuxfb
|
||||||
|
|
||||||
unix:!android:!darwin: SUBDIRS += vnc
|
qtConfig(vnc): SUBDIRS += vnc
|
||||||
|
|
||||||
freebsd {
|
freebsd {
|
||||||
SUBDIRS += bsdfb
|
SUBDIRS += bsdfb
|
||||||
|
@ -531,13 +531,12 @@ void QRfbRawEncoder::write()
|
|||||||
socket->flush();
|
socket->flush();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if QT_CONFIG(cursor)
|
||||||
QVncClientCursor::QVncClientCursor()
|
QVncClientCursor::QVncClientCursor()
|
||||||
{
|
{
|
||||||
#ifndef QT_NO_CURSOR
|
|
||||||
QWindow *w = QGuiApplication::focusWindow();
|
QWindow *w = QGuiApplication::focusWindow();
|
||||||
QCursor c = w ? w->cursor() : QCursor(Qt::ArrowCursor);
|
QCursor c = w ? w->cursor() : QCursor(Qt::ArrowCursor);
|
||||||
changeCursor(&c, 0);
|
changeCursor(&c, 0);
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
QVncClientCursor::~QVncClientCursor()
|
QVncClientCursor::~QVncClientCursor()
|
||||||
@ -587,7 +586,6 @@ void QVncClientCursor::write(QVncClient *client) const
|
|||||||
void QVncClientCursor::changeCursor(QCursor *widgetCursor, QWindow *window)
|
void QVncClientCursor::changeCursor(QCursor *widgetCursor, QWindow *window)
|
||||||
{
|
{
|
||||||
Q_UNUSED(window);
|
Q_UNUSED(window);
|
||||||
#ifndef QT_NO_CURSOR
|
|
||||||
const Qt::CursorShape shape = widgetCursor ? widgetCursor->shape() : Qt::ArrowCursor;
|
const Qt::CursorShape shape = widgetCursor ? widgetCursor->shape() : Qt::ArrowCursor;
|
||||||
|
|
||||||
if (shape == Qt::BitmapCursor) {
|
if (shape == Qt::BitmapCursor) {
|
||||||
@ -601,9 +599,6 @@ void QVncClientCursor::changeCursor(QCursor *widgetCursor, QWindow *window)
|
|||||||
cursor = *platformImage.image();
|
cursor = *platformImage.image();
|
||||||
hotspot = platformImage.hotspot();
|
hotspot = platformImage.hotspot();
|
||||||
}
|
}
|
||||||
#else // !QT_NO_CURSOR
|
|
||||||
Q_UNUSED(widgetCursor);
|
|
||||||
#endif
|
|
||||||
for (auto client : clients)
|
for (auto client : clients)
|
||||||
client->setDirtyCursor();
|
client->setDirtyCursor();
|
||||||
}
|
}
|
||||||
@ -619,6 +614,7 @@ uint QVncClientCursor::removeClient(QVncClient *client)
|
|||||||
clients.removeOne(client);
|
clients.removeOne(client);
|
||||||
return clients.count();
|
return clients.count();
|
||||||
}
|
}
|
||||||
|
#endif // QT_CONFIG(cursor)
|
||||||
|
|
||||||
QVncServer::QVncServer(QVncScreen *screen, quint16 port)
|
QVncServer::QVncServer(QVncScreen *screen, quint16 port)
|
||||||
: qvnc_screen(screen)
|
: qvnc_screen(screen)
|
||||||
|
@ -364,6 +364,7 @@ private:
|
|||||||
friend class QRfbMultiColorHextile<SRC>;
|
friend class QRfbMultiColorHextile<SRC>;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#if QT_CONFIG(cursor)
|
||||||
class QVncClientCursor : public QPlatformCursor
|
class QVncClientCursor : public QPlatformCursor
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@ -381,7 +382,7 @@ public:
|
|||||||
QPoint hotspot;
|
QPoint hotspot;
|
||||||
QVector<QVncClient *> clients;
|
QVector<QVncClient *> clients;
|
||||||
};
|
};
|
||||||
|
#endif // QT_CONFIG(cursor)
|
||||||
|
|
||||||
class QVncServer : public QObject
|
class QVncServer : public QObject
|
||||||
{
|
{
|
||||||
|
@ -425,14 +425,14 @@ void QVncClient::checkUpdate()
|
|||||||
{
|
{
|
||||||
if (!m_wantUpdate)
|
if (!m_wantUpdate)
|
||||||
return;
|
return;
|
||||||
|
#if QT_CONFIG(cursor)
|
||||||
if (m_dirtyCursor) {
|
if (m_dirtyCursor) {
|
||||||
m_server->screen()->clientCursor->write(this);
|
m_server->screen()->clientCursor->write(this);
|
||||||
m_dirtyCursor = false;
|
m_dirtyCursor = false;
|
||||||
m_wantUpdate = false;
|
m_wantUpdate = false;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
if (!m_dirtyRegion.isEmpty()) {
|
if (!m_dirtyRegion.isEmpty()) {
|
||||||
if (m_encoder)
|
if (m_encoder)
|
||||||
m_encoder->write();
|
m_encoder->write();
|
||||||
|
@ -58,8 +58,10 @@ QVncScreen::QVncScreen(const QStringList &args)
|
|||||||
|
|
||||||
QVncScreen::~QVncScreen()
|
QVncScreen::~QVncScreen()
|
||||||
{
|
{
|
||||||
|
#if QT_CONFIG(cursor)
|
||||||
if (clientCursor)
|
if (clientCursor)
|
||||||
delete clientCursor;
|
delete clientCursor;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
bool QVncScreen::initialize()
|
bool QVncScreen::initialize()
|
||||||
@ -120,17 +122,21 @@ QRegion QVncScreen::doRedraw()
|
|||||||
return touched;
|
return touched;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void QVncScreen::enableClientCursor(QVncClient *client)
|
void QVncScreen::enableClientCursor(QVncClient *client)
|
||||||
{
|
{
|
||||||
|
#if QT_CONFIG(cursor)
|
||||||
delete mCursor;
|
delete mCursor;
|
||||||
mCursor = nullptr;
|
mCursor = nullptr;
|
||||||
if (!clientCursor)
|
if (!clientCursor)
|
||||||
clientCursor = new QVncClientCursor();
|
clientCursor = new QVncClientCursor();
|
||||||
clientCursor->addClient(client);
|
clientCursor->addClient(client);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void QVncScreen::disableClientCursor(QVncClient *client)
|
void QVncScreen::disableClientCursor(QVncClient *client)
|
||||||
{
|
{
|
||||||
|
#if QT_CONFIG(cursor)
|
||||||
uint clientCount = clientCursor->removeClient(client);
|
uint clientCount = clientCursor->removeClient(client);
|
||||||
if (clientCount == 0) {
|
if (clientCount == 0) {
|
||||||
delete clientCursor;
|
delete clientCursor;
|
||||||
@ -138,11 +144,16 @@ void QVncScreen::disableClientCursor(QVncClient *client)
|
|||||||
}
|
}
|
||||||
|
|
||||||
mCursor = new QFbCursor(this);
|
mCursor = new QFbCursor(this);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
QPlatformCursor *QVncScreen::cursor() const
|
QPlatformCursor *QVncScreen::cursor() const
|
||||||
{
|
{
|
||||||
|
#if QT_CONFIG(cursor)
|
||||||
return mCursor ? static_cast<QPlatformCursor *>(mCursor) : static_cast<QPlatformCursor *>(clientCursor);
|
return mCursor ? static_cast<QPlatformCursor *>(mCursor) : static_cast<QPlatformCursor *>(clientCursor);
|
||||||
|
#else
|
||||||
|
return nullptr;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
// grabWindow() grabs "from the screen" not from the backingstores.
|
// grabWindow() grabs "from the screen" not from the backingstores.
|
||||||
|
@ -86,7 +86,9 @@ public:
|
|||||||
QRegion dirtyRegion;
|
QRegion dirtyRegion;
|
||||||
int refreshRate = 30;
|
int refreshRate = 30;
|
||||||
QVncServer *vncServer = 0;
|
QVncServer *vncServer = 0;
|
||||||
|
#if QT_CONFIG(cursor)
|
||||||
QVncClientCursor *clientCursor = 0;
|
QVncClientCursor *clientCursor = 0;
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
QT_END_NAMESPACE
|
QT_END_NAMESPACE
|
||||||
|
@ -1767,10 +1767,9 @@ bool QWindowsWindow::isFullScreen_sys() const
|
|||||||
const QWindow *w = window();
|
const QWindow *w = window();
|
||||||
if (!w->isTopLevel())
|
if (!w->isTopLevel())
|
||||||
return false;
|
return false;
|
||||||
const QScreen *screen = w->screen();
|
QRect geometry = geometry_sys();
|
||||||
if (!screen)
|
QPlatformScreen *screen = screenForGeometry(geometry);
|
||||||
screen = QGuiApplication::primaryScreen();
|
return screen && geometry == QHighDpi::toNativePixels(screen->geometry(), screen);
|
||||||
return screen && geometry_sys() == QHighDpi::toNativePixels(screen->geometry(), w);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
@ -1842,6 +1841,13 @@ void QWindowsWindow::setWindowState_sys(Qt::WindowState newState)
|
|||||||
newStyle |= WS_VISIBLE;
|
newStyle |= WS_VISIBLE;
|
||||||
setStyle(newStyle);
|
setStyle(newStyle);
|
||||||
|
|
||||||
|
const QScreen *screen = window()->screen();
|
||||||
|
if (!screen)
|
||||||
|
screen = QGuiApplication::primaryScreen();
|
||||||
|
// That area of the virtual desktop might not be covered by a screen anymore.
|
||||||
|
if (!screen->geometry().intersects(m_savedFrameGeometry))
|
||||||
|
m_savedFrameGeometry.moveTo(screen->geometry().topLeft());
|
||||||
|
|
||||||
UINT swpf = SWP_FRAMECHANGED | SWP_NOZORDER | SWP_NOACTIVATE;
|
UINT swpf = SWP_FRAMECHANGED | SWP_NOZORDER | SWP_NOACTIVATE;
|
||||||
if (!m_savedFrameGeometry.isValid())
|
if (!m_savedFrameGeometry.isValid())
|
||||||
swpf |= SWP_NOSIZE | SWP_NOMOVE;
|
swpf |= SWP_NOSIZE | SWP_NOMOVE;
|
||||||
|
@ -504,6 +504,8 @@ static HRESULT qt_drop(IInspectable *sender, ABI::Windows::UI::Xaml::IDragEventA
|
|||||||
class QtDragEventHandler##name : public IDragEventHandler \
|
class QtDragEventHandler##name : public IDragEventHandler \
|
||||||
{ \
|
{ \
|
||||||
public: \
|
public: \
|
||||||
|
virtual ~QtDragEventHandler##name() {\
|
||||||
|
}\
|
||||||
STDMETHODIMP Invoke(IInspectable *sender, \
|
STDMETHODIMP Invoke(IInspectable *sender, \
|
||||||
ABI::Windows::UI::Xaml::IDragEventArgs *e) \
|
ABI::Windows::UI::Xaml::IDragEventArgs *e) \
|
||||||
{ \
|
{ \
|
||||||
|
@ -58,7 +58,7 @@
|
|||||||
#include <functional>
|
#include <functional>
|
||||||
#include <wrl.h>
|
#include <wrl.h>
|
||||||
#include <windows.system.h>
|
#include <windows.system.h>
|
||||||
#include <Windows.Applicationmodel.h>
|
#include <Windows.ApplicationModel.h>
|
||||||
#include <Windows.ApplicationModel.core.h>
|
#include <Windows.ApplicationModel.core.h>
|
||||||
#include <windows.devices.input.h>
|
#include <windows.devices.input.h>
|
||||||
#include <windows.ui.h>
|
#include <windows.ui.h>
|
||||||
|
@ -42,6 +42,7 @@
|
|||||||
#include "qxcbscreen.h"
|
#include "qxcbscreen.h"
|
||||||
#include "qxcbwindow.h"
|
#include "qxcbwindow.h"
|
||||||
#include "qtouchdevice.h"
|
#include "qtouchdevice.h"
|
||||||
|
#include "QtCore/qmetaobject.h"
|
||||||
#include <qpa/qwindowsysteminterface_p.h>
|
#include <qpa/qwindowsysteminterface_p.h>
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
#include <cmath>
|
#include <cmath>
|
||||||
@ -208,6 +209,8 @@ void QXcbConnection::xi2SetupDevices()
|
|||||||
isTablet = true;
|
isTablet = true;
|
||||||
tabletData.pointerType = QTabletEvent::Cursor;
|
tabletData.pointerType = QTabletEvent::Cursor;
|
||||||
dbgType = QLatin1String("cursor");
|
dbgType = QLatin1String("cursor");
|
||||||
|
} else if (name.contains("wacom") && name.contains("finger touch")) {
|
||||||
|
isTablet = false;
|
||||||
} else if ((name.contains("pen") || name.contains("stylus")) && isTablet) {
|
} else if ((name.contains("pen") || name.contains("stylus")) && isTablet) {
|
||||||
tabletData.pointerType = QTabletEvent::Pen;
|
tabletData.pointerType = QTabletEvent::Pen;
|
||||||
dbgType = QLatin1String("pen");
|
dbgType = QLatin1String("pen");
|
||||||
@ -1107,6 +1110,18 @@ static QTabletEvent::TabletDevice toolIdToTabletDevice(quint32 toolId) {
|
|||||||
return QTabletEvent::Stylus; // Safe default assumption if nonzero
|
return QTabletEvent::Stylus; // Safe default assumption if nonzero
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static const char *toolName(QTabletEvent::TabletDevice tool) {
|
||||||
|
static const QMetaObject *metaObject = qt_getEnumMetaObject(tool);
|
||||||
|
static const QMetaEnum me = metaObject->enumerator(metaObject->indexOfEnumerator(qt_getEnumName(tool)));
|
||||||
|
return me.valueToKey(tool);
|
||||||
|
}
|
||||||
|
|
||||||
|
static const char *pointerTypeName(QTabletEvent::PointerType ptype) {
|
||||||
|
static const QMetaObject *metaObject = qt_getEnumMetaObject(ptype);
|
||||||
|
static const QMetaEnum me = metaObject->enumerator(metaObject->indexOfEnumerator(qt_getEnumName(ptype)));
|
||||||
|
return me.valueToKey(ptype);
|
||||||
|
}
|
||||||
|
|
||||||
bool QXcbConnection::xi2HandleTabletEvent(const void *event, TabletData *tabletData)
|
bool QXcbConnection::xi2HandleTabletEvent(const void *event, TabletData *tabletData)
|
||||||
{
|
{
|
||||||
bool handled = true;
|
bool handled = true;
|
||||||
@ -1180,9 +1195,9 @@ bool QXcbConnection::xi2HandleTabletEvent(const void *event, TabletData *tabletD
|
|||||||
// TODO maybe have a hash of tabletData->deviceId to device data so we can
|
// TODO maybe have a hash of tabletData->deviceId to device data so we can
|
||||||
// look up the tablet name here, and distinguish multiple tablets
|
// look up the tablet name here, and distinguish multiple tablets
|
||||||
if (Q_UNLIKELY(lcQpaXInputEvents().isDebugEnabled()))
|
if (Q_UNLIKELY(lcQpaXInputEvents().isDebugEnabled()))
|
||||||
qCDebug(lcQpaXInputEvents, "XI2 proximity change on tablet %d (USB %x): last tool: %x id %x current tool: %x id %x TabletDevice %d",
|
qCDebug(lcQpaXInputEvents, "XI2 proximity change on tablet %d (USB %x): last tool: %x id %x current tool: %x id %x %s",
|
||||||
tabletData->deviceId, ptr[_WACSER_USB_ID], ptr[_WACSER_LAST_TOOL_SERIAL], ptr[_WACSER_LAST_TOOL_ID],
|
tabletData->deviceId, ptr[_WACSER_USB_ID], ptr[_WACSER_LAST_TOOL_SERIAL], ptr[_WACSER_LAST_TOOL_ID],
|
||||||
ptr[_WACSER_TOOL_SERIAL], ptr[_WACSER_TOOL_ID], tabletData->tool);
|
ptr[_WACSER_TOOL_SERIAL], ptr[_WACSER_TOOL_ID], toolName(tabletData->tool));
|
||||||
}
|
}
|
||||||
XFree(data);
|
XFree(data);
|
||||||
}
|
}
|
||||||
@ -1245,9 +1260,10 @@ void QXcbConnection::xi2ReportTabletEvent(const void *event, TabletData *tabletD
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (Q_UNLIKELY(lcQpaXInputEvents().isDebugEnabled()))
|
if (Q_UNLIKELY(lcQpaXInputEvents().isDebugEnabled()))
|
||||||
qCDebug(lcQpaXInputEvents, "XI2 event on tablet %d with tool %d type %d seq %d detail %d time %d "
|
qCDebug(lcQpaXInputEvents, "XI2 event on tablet %d with tool %s type %s seq %d detail %d time %d "
|
||||||
"pos %6.1f, %6.1f root pos %6.1f, %6.1f buttons 0x%x pressure %4.2lf tilt %d, %d rotation %6.2lf",
|
"pos %6.1f, %6.1f root pos %6.1f, %6.1f buttons 0x%x pressure %4.2lf tilt %d, %d rotation %6.2lf",
|
||||||
tabletData->deviceId, tabletData->tool, ev->evtype, ev->sequenceNumber, ev->detail, ev->time,
|
tabletData->deviceId, toolName(tabletData->tool), pointerTypeName(tabletData->pointerType),
|
||||||
|
ev->sequenceNumber, ev->detail, ev->time,
|
||||||
fixed1616ToReal(ev->event_x), fixed1616ToReal(ev->event_y),
|
fixed1616ToReal(ev->event_x), fixed1616ToReal(ev->event_y),
|
||||||
fixed1616ToReal(ev->root_x), fixed1616ToReal(ev->root_y),
|
fixed1616ToReal(ev->root_x), fixed1616ToReal(ev->root_y),
|
||||||
(int)tabletData->buttons, pressure, xTilt, yTilt, rotation);
|
(int)tabletData->buttons, pressure, xTilt, yTilt, rotation);
|
||||||
|
@ -1,31 +1,37 @@
|
|||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
**
|
**
|
||||||
** Copyright (C) 2016 The Qt Company Ltd.
|
** Copyright (C) 2017 The Qt Company Ltd.
|
||||||
** Contact: http://www.qt.io/licensing/
|
** Contact: https://www.qt.io/licensing/
|
||||||
**
|
**
|
||||||
** This file is part of the plugins of the Qt Toolkit.
|
** This file is part of the QtGui module of the Qt Toolkit.
|
||||||
**
|
**
|
||||||
** $QT_BEGIN_LICENSE:LGPL21$
|
** $QT_BEGIN_LICENSE:LGPL$
|
||||||
** Commercial License Usage
|
** Commercial License Usage
|
||||||
** Licensees holding valid commercial Qt licenses may use this file in
|
** Licensees holding valid commercial Qt licenses may use this file in
|
||||||
** accordance with the commercial license agreement provided with the
|
** accordance with the commercial license agreement provided with the
|
||||||
** Software or, alternatively, in accordance with the terms contained in
|
** Software or, alternatively, in accordance with the terms contained in
|
||||||
** a written agreement between you and The Qt Company. For licensing terms
|
** a written agreement between you and The Qt Company. For licensing terms
|
||||||
** and conditions see http://www.qt.io/terms-conditions. For further
|
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||||
** information use the contact form at http://www.qt.io/contact-us.
|
** information use the contact form at https://www.qt.io/contact-us.
|
||||||
**
|
**
|
||||||
** GNU Lesser General Public License Usage
|
** GNU Lesser General Public License Usage
|
||||||
** Alternatively, this file may be used under the terms of the GNU Lesser
|
** Alternatively, this file may be used under the terms of the GNU Lesser
|
||||||
** General Public License version 2.1 or version 3 as published by the Free
|
** General Public License version 3 as published by the Free Software
|
||||||
** Software Foundation and appearing in the file LICENSE.LGPLv21 and
|
** Foundation and appearing in the file LICENSE.LGPL3 included in the
|
||||||
** LICENSE.LGPLv3 included in the packaging of this file. Please review the
|
** packaging of this file. Please review the following information to
|
||||||
** following information to ensure the GNU Lesser General Public License
|
** ensure the GNU Lesser General Public License version 3 requirements
|
||||||
** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
|
** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
|
||||||
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
|
||||||
**
|
**
|
||||||
** As a special exception, The Qt Company gives you certain additional
|
** GNU General Public License Usage
|
||||||
** rights. These rights are described in The Qt Company LGPL Exception
|
** Alternatively, this file may be used under the terms of the GNU
|
||||||
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
** General Public License version 2.0 or (at your option) the GNU General
|
||||||
|
** Public license version 3 or any later version approved by the KDE Free
|
||||||
|
** Qt Foundation. The licenses are as published by the Free Software
|
||||||
|
** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
|
||||||
|
** 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-2.0.html and
|
||||||
|
** https://www.gnu.org/licenses/gpl-3.0.html.
|
||||||
**
|
**
|
||||||
** $QT_END_LICENSE$
|
** $QT_END_LICENSE$
|
||||||
**
|
**
|
||||||
|
@ -1,31 +1,37 @@
|
|||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
**
|
**
|
||||||
** Copyright (C) 2016 The Qt Company Ltd.
|
** Copyright (C) 2017 The Qt Company Ltd.
|
||||||
** Contact: http://www.qt.io/licensing/
|
** Contact: https://www.qt.io/licensing/
|
||||||
**
|
**
|
||||||
** This file is part of the plugins of the Qt Toolkit.
|
** This file is part of the plugins of the Qt Toolkit.
|
||||||
**
|
**
|
||||||
** $QT_BEGIN_LICENSE:LGPL21$
|
** $QT_BEGIN_LICENSE:LGPL$
|
||||||
** Commercial License Usage
|
** Commercial License Usage
|
||||||
** Licensees holding valid commercial Qt licenses may use this file in
|
** Licensees holding valid commercial Qt licenses may use this file in
|
||||||
** accordance with the commercial license agreement provided with the
|
** accordance with the commercial license agreement provided with the
|
||||||
** Software or, alternatively, in accordance with the terms contained in
|
** Software or, alternatively, in accordance with the terms contained in
|
||||||
** a written agreement between you and The Qt Company. For licensing terms
|
** a written agreement between you and The Qt Company. For licensing terms
|
||||||
** and conditions see http://www.qt.io/terms-conditions. For further
|
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||||
** information use the contact form at http://www.qt.io/contact-us.
|
** information use the contact form at https://www.qt.io/contact-us.
|
||||||
**
|
**
|
||||||
** GNU Lesser General Public License Usage
|
** GNU Lesser General Public License Usage
|
||||||
** Alternatively, this file may be used under the terms of the GNU Lesser
|
** Alternatively, this file may be used under the terms of the GNU Lesser
|
||||||
** General Public License version 2.1 or version 3 as published by the Free
|
** General Public License version 3 as published by the Free Software
|
||||||
** Software Foundation and appearing in the file LICENSE.LGPLv21 and
|
** Foundation and appearing in the file LICENSE.LGPL3 included in the
|
||||||
** LICENSE.LGPLv3 included in the packaging of this file. Please review the
|
** packaging of this file. Please review the following information to
|
||||||
** following information to ensure the GNU Lesser General Public License
|
** ensure the GNU Lesser General Public License version 3 requirements
|
||||||
** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
|
** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
|
||||||
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
|
||||||
**
|
**
|
||||||
** As a special exception, The Qt Company gives you certain additional
|
** GNU General Public License Usage
|
||||||
** rights. These rights are described in The Qt Company LGPL Exception
|
** Alternatively, this file may be used under the terms of the GNU
|
||||||
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
** General Public License version 2.0 or (at your option) the GNU General
|
||||||
|
** Public license version 3 or any later version approved by the KDE Free
|
||||||
|
** Qt Foundation. The licenses are as published by the Free Software
|
||||||
|
** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
|
||||||
|
** 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-2.0.html and
|
||||||
|
** https://www.gnu.org/licenses/gpl-3.0.html.
|
||||||
**
|
**
|
||||||
** $QT_END_LICENSE$
|
** $QT_END_LICENSE$
|
||||||
**
|
**
|
||||||
|
@ -28,13 +28,20 @@
|
|||||||
"label": "CUPS",
|
"label": "CUPS",
|
||||||
"purpose": "Provides support for the Common Unix Printing System.",
|
"purpose": "Provides support for the Common Unix Printing System.",
|
||||||
"section": "Painting",
|
"section": "Painting",
|
||||||
"condition": "libs.cups && features.printer",
|
"condition": "libs.cups && features.printer && features.datestring",
|
||||||
"output": [ "privateFeature", "feature" ]
|
"output": [ "privateFeature", "feature" ]
|
||||||
},
|
},
|
||||||
"cupsjobwidget": {
|
"cupsjobwidget": {
|
||||||
"label": "CUPS job control widget",
|
"label": "CUPS job control widget",
|
||||||
"section": "Widgets",
|
"section": "Widgets",
|
||||||
"condition": "features.cups && features.calendarwidget && features.datetimeedit && features.groupbox && features.combobox",
|
"condition": [
|
||||||
|
"features.calendarwidget",
|
||||||
|
"features.checkbox",
|
||||||
|
"features.combobox",
|
||||||
|
"features.cups",
|
||||||
|
"features.datetimeedit",
|
||||||
|
"features.groupbox"
|
||||||
|
],
|
||||||
"output": [ "privateFeature", "feature" ]
|
"output": [ "privateFeature", "feature" ]
|
||||||
},
|
},
|
||||||
"printer": {
|
"printer": {
|
||||||
@ -55,14 +62,25 @@
|
|||||||
"label": "QPrintDialog",
|
"label": "QPrintDialog",
|
||||||
"purpose": "Provides a dialog widget for specifying printer configuration.",
|
"purpose": "Provides a dialog widget for specifying printer configuration.",
|
||||||
"section": "Dialogs",
|
"section": "Dialogs",
|
||||||
"condition": "features.printer && features.combobox && features.buttongroup && features.spinbox && features.treeview && features.tabwidget && features.datetimeedit",
|
"condition": [
|
||||||
|
"features.buttongroup",
|
||||||
|
"features.checkbox",
|
||||||
|
"features.combobox",
|
||||||
|
"features.datetimeedit",
|
||||||
|
"features.dialogbuttonbox",
|
||||||
|
"features.printer",
|
||||||
|
"features.radiobutton",
|
||||||
|
"features.spinbox",
|
||||||
|
"features.tabwidget",
|
||||||
|
"features.treeview"
|
||||||
|
],
|
||||||
"output": [ "publicFeature", "feature" ]
|
"output": [ "publicFeature", "feature" ]
|
||||||
},
|
},
|
||||||
"printpreviewdialog": {
|
"printpreviewdialog": {
|
||||||
"label": "QPrintPreviewDialog",
|
"label": "QPrintPreviewDialog",
|
||||||
"purpose": "Provides a dialog for previewing and configuring page layouts for printer output.",
|
"purpose": "Provides a dialog for previewing and configuring page layouts for printer output.",
|
||||||
"section": "Dialogs",
|
"section": "Dialogs",
|
||||||
"condition": "features.printpreviewwidget && features.printdialog && features.toolbar",
|
"condition": "features.printpreviewwidget && features.printdialog && features.toolbar && features.formlayout",
|
||||||
"output": [ "publicFeature", "feature" ]
|
"output": [ "publicFeature", "feature" ]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -46,7 +46,6 @@
|
|||||||
#include <QtWidgets/qaction.h>
|
#include <QtWidgets/qaction.h>
|
||||||
#include <QtWidgets/qboxlayout.h>
|
#include <QtWidgets/qboxlayout.h>
|
||||||
#include <QtWidgets/qcombobox.h>
|
#include <QtWidgets/qcombobox.h>
|
||||||
#include <QtWidgets/qlabel.h>
|
|
||||||
#include <QtWidgets/qlineedit.h>
|
#include <QtWidgets/qlineedit.h>
|
||||||
#include <QtPrintSupport/qpagesetupdialog.h>
|
#include <QtPrintSupport/qpagesetupdialog.h>
|
||||||
#include <QtPrintSupport/qprinter.h>
|
#include <QtPrintSupport/qprinter.h>
|
||||||
@ -56,11 +55,13 @@
|
|||||||
#include <QtWidgets/qfiledialog.h>
|
#include <QtWidgets/qfiledialog.h>
|
||||||
#include <QtWidgets/qmainwindow.h>
|
#include <QtWidgets/qmainwindow.h>
|
||||||
#include <QtWidgets/qtoolbar.h>
|
#include <QtWidgets/qtoolbar.h>
|
||||||
#include <QtWidgets/qformlayout.h>
|
|
||||||
#include <QtCore/QCoreApplication>
|
#include <QtCore/QCoreApplication>
|
||||||
|
|
||||||
#ifndef QT_NO_PRINTPREVIEWDIALOG
|
#ifndef QT_NO_PRINTPREVIEWDIALOG
|
||||||
|
|
||||||
|
#include <QtWidgets/qformlayout.h>
|
||||||
|
#include <QtWidgets/qlabel.h>
|
||||||
|
|
||||||
static void initResources()
|
static void initResources()
|
||||||
{
|
{
|
||||||
static bool resourcesInitialized = false;
|
static bool resourcesInitialized = false;
|
||||||
|
@ -153,7 +153,7 @@
|
|||||||
},
|
},
|
||||||
"sql-odbc": {
|
"sql-odbc": {
|
||||||
"label": "ODBC",
|
"label": "ODBC",
|
||||||
"condition": "libs.odbc && features.textdate",
|
"condition": "libs.odbc && features.datestring",
|
||||||
"output": [ "publicFeature" ]
|
"output": [ "publicFeature" ]
|
||||||
},
|
},
|
||||||
"sql-psql": {
|
"sql-psql": {
|
||||||
@ -168,7 +168,7 @@
|
|||||||
},
|
},
|
||||||
"sql-sqlite": {
|
"sql-sqlite": {
|
||||||
"label": "SQLite",
|
"label": "SQLite",
|
||||||
"condition": "features.textdate",
|
"condition": "features.datestring",
|
||||||
"output": [ "publicFeature" ]
|
"output": [ "publicFeature" ]
|
||||||
},
|
},
|
||||||
"system-sqlite": {
|
"system-sqlite": {
|
||||||
@ -179,7 +179,7 @@
|
|||||||
},
|
},
|
||||||
"sql-tds": {
|
"sql-tds": {
|
||||||
"label": "TDS (Sybase)",
|
"label": "TDS (Sybase)",
|
||||||
"condition": "libs.tds && features.textdate",
|
"condition": "libs.tds && features.datestring",
|
||||||
"output": [ "publicFeature" ]
|
"output": [ "publicFeature" ]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -1,31 +1,37 @@
|
|||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
**
|
**
|
||||||
** Copyright (C) 2016 The Qt Company Ltd.
|
** Copyright (C) 2017 The Qt Company Ltd.
|
||||||
** Contact: http://www.qt.io/licensing/
|
** Contact: https://www.qt.io/licensing/
|
||||||
**
|
**
|
||||||
** This file is part of the QtTest module of the Qt Toolkit.
|
** This file is part of the QtTest module of the Qt Toolkit.
|
||||||
**
|
**
|
||||||
** $QT_BEGIN_LICENSE:LGPL21$
|
** $QT_BEGIN_LICENSE:LGPL$
|
||||||
** Commercial License Usage
|
** Commercial License Usage
|
||||||
** Licensees holding valid commercial Qt licenses may use this file in
|
** Licensees holding valid commercial Qt licenses may use this file in
|
||||||
** accordance with the commercial license agreement provided with the
|
** accordance with the commercial license agreement provided with the
|
||||||
** Software or, alternatively, in accordance with the terms contained in
|
** Software or, alternatively, in accordance with the terms contained in
|
||||||
** a written agreement between you and The Qt Company. For licensing terms
|
** a written agreement between you and The Qt Company. For licensing terms
|
||||||
** and conditions see http://www.qt.io/terms-conditions. For further
|
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||||
** information use the contact form at http://www.qt.io/contact-us.
|
** information use the contact form at https://www.qt.io/contact-us.
|
||||||
**
|
**
|
||||||
** GNU Lesser General Public License Usage
|
** GNU Lesser General Public License Usage
|
||||||
** Alternatively, this file may be used under the terms of the GNU Lesser
|
** Alternatively, this file may be used under the terms of the GNU Lesser
|
||||||
** General Public License version 2.1 or version 3 as published by the Free
|
** General Public License version 3 as published by the Free Software
|
||||||
** Software Foundation and appearing in the file LICENSE.LGPLv21 and
|
** Foundation and appearing in the file LICENSE.LGPL3 included in the
|
||||||
** LICENSE.LGPLv3 included in the packaging of this file. Please review the
|
** packaging of this file. Please review the following information to
|
||||||
** following information to ensure the GNU Lesser General Public License
|
** ensure the GNU Lesser General Public License version 3 requirements
|
||||||
** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
|
** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
|
||||||
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
|
||||||
**
|
**
|
||||||
** As a special exception, The Qt Company gives you certain additional
|
** GNU General Public License Usage
|
||||||
** rights. These rights are described in The Qt Company LGPL Exception
|
** Alternatively, this file may be used under the terms of the GNU
|
||||||
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
** General Public License version 2.0 or (at your option) the GNU General
|
||||||
|
** Public license version 3 or any later version approved by the KDE Free
|
||||||
|
** Qt Foundation. The licenses are as published by the Free Software
|
||||||
|
** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
|
||||||
|
** 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-2.0.html and
|
||||||
|
** https://www.gnu.org/licenses/gpl-3.0.html.
|
||||||
**
|
**
|
||||||
** $QT_END_LICENSE$
|
** $QT_END_LICENSE$
|
||||||
**
|
**
|
||||||
|
@ -1,31 +1,37 @@
|
|||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
**
|
**
|
||||||
** Copyright (C) 2016 The Qt Company Ltd.
|
** Copyright (C) 2017 The Qt Company Ltd.
|
||||||
** Contact: http://www.qt.io/licensing/
|
** Contact: https://www.qt.io/licensing/
|
||||||
**
|
**
|
||||||
** This file is part of the QtTest module of the Qt Toolkit.
|
** This file is part of the QtTest module of the Qt Toolkit.
|
||||||
**
|
**
|
||||||
** $QT_BEGIN_LICENSE:LGPL21$
|
** $QT_BEGIN_LICENSE:LGPL$
|
||||||
** Commercial License Usage
|
** Commercial License Usage
|
||||||
** Licensees holding valid commercial Qt licenses may use this file in
|
** Licensees holding valid commercial Qt licenses may use this file in
|
||||||
** accordance with the commercial license agreement provided with the
|
** accordance with the commercial license agreement provided with the
|
||||||
** Software or, alternatively, in accordance with the terms contained in
|
** Software or, alternatively, in accordance with the terms contained in
|
||||||
** a written agreement between you and The Qt Company. For licensing terms
|
** a written agreement between you and The Qt Company. For licensing terms
|
||||||
** and conditions see http://www.qt.io/terms-conditions. For further
|
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||||
** information use the contact form at http://www.qt.io/contact-us.
|
** information use the contact form at https://www.qt.io/contact-us.
|
||||||
**
|
**
|
||||||
** GNU Lesser General Public License Usage
|
** GNU Lesser General Public License Usage
|
||||||
** Alternatively, this file may be used under the terms of the GNU Lesser
|
** Alternatively, this file may be used under the terms of the GNU Lesser
|
||||||
** General Public License version 2.1 or version 3 as published by the Free
|
** General Public License version 3 as published by the Free Software
|
||||||
** Software Foundation and appearing in the file LICENSE.LGPLv21 and
|
** Foundation and appearing in the file LICENSE.LGPL3 included in the
|
||||||
** LICENSE.LGPLv3 included in the packaging of this file. Please review the
|
** packaging of this file. Please review the following information to
|
||||||
** following information to ensure the GNU Lesser General Public License
|
** ensure the GNU Lesser General Public License version 3 requirements
|
||||||
** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
|
** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
|
||||||
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
|
||||||
**
|
**
|
||||||
** As a special exception, The Qt Company gives you certain additional
|
** GNU General Public License Usage
|
||||||
** rights. These rights are described in The Qt Company LGPL Exception
|
** Alternatively, this file may be used under the terms of the GNU
|
||||||
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
** General Public License version 2.0 or (at your option) the GNU General
|
||||||
|
** Public license version 3 or any later version approved by the KDE Free
|
||||||
|
** Qt Foundation. The licenses are as published by the Free Software
|
||||||
|
** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
|
||||||
|
** 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-2.0.html and
|
||||||
|
** https://www.gnu.org/licenses/gpl-3.0.html.
|
||||||
**
|
**
|
||||||
** $QT_END_LICENSE$
|
** $QT_END_LICENSE$
|
||||||
**
|
**
|
||||||
|
@ -549,12 +549,20 @@ void Moc::parse()
|
|||||||
case NAMESPACE: {
|
case NAMESPACE: {
|
||||||
int rewind = index;
|
int rewind = index;
|
||||||
if (test(IDENTIFIER)) {
|
if (test(IDENTIFIER)) {
|
||||||
|
QByteArray nsName = lexem();
|
||||||
|
QByteArrayList nested;
|
||||||
|
while (test(SCOPE)) {
|
||||||
|
next(IDENTIFIER);
|
||||||
|
nested.append(nsName);
|
||||||
|
nsName = lexem();
|
||||||
|
}
|
||||||
if (test(EQ)) {
|
if (test(EQ)) {
|
||||||
// namespace Foo = Bar::Baz;
|
// namespace Foo = Bar::Baz;
|
||||||
until(SEMIC);
|
until(SEMIC);
|
||||||
} else if (!test(SEMIC)) {
|
} else if (!test(SEMIC)) {
|
||||||
NamespaceDef def;
|
NamespaceDef def;
|
||||||
def.classname = lexem();
|
def.classname = nsName;
|
||||||
|
|
||||||
next(LBRACE);
|
next(LBRACE);
|
||||||
def.begin = index - 1;
|
def.begin = index - 1;
|
||||||
until(RBRACE);
|
until(RBRACE);
|
||||||
@ -568,11 +576,23 @@ void Moc::parse()
|
|||||||
def.qualified.prepend(namespaceList.at(i).classname + "::");
|
def.qualified.prepend(namespaceList.at(i).classname + "::");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
for (const QByteArray &ns : nested) {
|
||||||
|
NamespaceDef parentNs;
|
||||||
|
parentNs.classname = ns;
|
||||||
|
parentNs.qualified = def.qualified;
|
||||||
|
def.qualified += ns + "::";
|
||||||
|
parentNs.begin = def.begin;
|
||||||
|
parentNs.end = def.end;
|
||||||
|
namespaceList += parentNs;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
while (parseNamespace && inNamespace(&def) && hasNext()) {
|
while (parseNamespace && inNamespace(&def) && hasNext()) {
|
||||||
switch (next()) {
|
switch (next()) {
|
||||||
case NAMESPACE:
|
case NAMESPACE:
|
||||||
if (test(IDENTIFIER)) {
|
if (test(IDENTIFIER)) {
|
||||||
|
while (test(SCOPE))
|
||||||
|
next(IDENTIFIER);
|
||||||
if (test(EQ)) {
|
if (test(EQ)) {
|
||||||
// namespace Foo = Bar::Baz;
|
// namespace Foo = Bar::Baz;
|
||||||
until(SEMIC);
|
until(SEMIC);
|
||||||
|
@ -1,227 +0,0 @@
|
|||||||
/****************************************************************************
|
|
||||||
**
|
|
||||||
** Copyright (C) 2016 The Qt Company Ltd.
|
|
||||||
** Contact: https://www.qt.io/licensing/
|
|
||||||
**
|
|
||||||
** This file is part of the tools applications of the Qt Toolkit.
|
|
||||||
**
|
|
||||||
** $QT_BEGIN_LICENSE:GPL-EXCEPT$
|
|
||||||
** 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.
|
|
||||||
**
|
|
||||||
** $QT_END_LICENSE$
|
|
||||||
**
|
|
||||||
****************************************************************************/
|
|
||||||
|
|
||||||
#ifdef MOC_MWERKS_PLUGIN
|
|
||||||
|
|
||||||
#include "mwerks_mac.h"
|
|
||||||
#include "qt_mac.h"
|
|
||||||
|
|
||||||
/* compiler headers */
|
|
||||||
#include "DropInCompilerLinker.h"
|
|
||||||
#include "CompilerMapping.h"
|
|
||||||
#include "CWPluginErrors.h"
|
|
||||||
|
|
||||||
/* standard headers */
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <string.h>
|
|
||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
|
||||||
|
|
||||||
//qglobal.cpp
|
|
||||||
const unsigned char * p_str(const char * c);
|
|
||||||
QCString pstring2qstring(const unsigned char *c);
|
|
||||||
|
|
||||||
#if CW_USE_PRAGMA_EXPORT
|
|
||||||
#pragma export on
|
|
||||||
#endif
|
|
||||||
|
|
||||||
CWPLUGIN_ENTRY(CWPlugin_GetDropInFlags)(const DropInFlags** flags, long* flagsSize)
|
|
||||||
{
|
|
||||||
static const DropInFlags sFlags = {
|
|
||||||
kCurrentDropInFlagsVersion,
|
|
||||||
CWDROPINCOMPILERTYPE,
|
|
||||||
DROPINCOMPILERLINKERAPIVERSION_7,
|
|
||||||
kCompAlwaysReload|kCompRequiresProjectBuildStartedMsg,
|
|
||||||
Lang_C_CPP,
|
|
||||||
DROPINCOMPILERLINKERAPIVERSION
|
|
||||||
};
|
|
||||||
*flags = &sFlags;
|
|
||||||
*flagsSize = sizeof(sFlags);
|
|
||||||
return cwNoErr;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
CWPLUGIN_ENTRY(CWPlugin_GetDropInName)(const char** dropinName)
|
|
||||||
{
|
|
||||||
static const char sDropInName[] = "McMoc";
|
|
||||||
*dropinName = sDropInName;
|
|
||||||
return cwNoErr;
|
|
||||||
}
|
|
||||||
|
|
||||||
CWPLUGIN_ENTRY(CWPlugin_GetDisplayName)(const char** displayName)
|
|
||||||
{
|
|
||||||
static const char sDisplayName[] = "McMoc";
|
|
||||||
*displayName = sDisplayName;
|
|
||||||
return cwNoErr;
|
|
||||||
}
|
|
||||||
|
|
||||||
CWPLUGIN_ENTRY(CWPlugin_GetTargetList)(const CWTargetList** targetList)
|
|
||||||
{
|
|
||||||
static CWDataType sCPU = targetCPUAny;
|
|
||||||
static CWDataType sOS = targetOSMacintosh;
|
|
||||||
static CWTargetList sTargetList = {kCurrentCWTargetListVersion, 1, &sCPU, 1, &sOS};
|
|
||||||
*targetList = &sTargetList;
|
|
||||||
return cwNoErr;
|
|
||||||
}
|
|
||||||
|
|
||||||
CWPLUGIN_ENTRY(CWPlugin_GetDefaultMappingList)(const CWExtMapList** defaultMappingList)
|
|
||||||
{
|
|
||||||
static CWExtensionMapping sExtension[] = { {'TEXT', ".mocs", kPrecompile } };
|
|
||||||
static CWExtMapList sExtensionMapList = {kCurrentCWExtMapListVersion, 3, sExtension};
|
|
||||||
*defaultMappingList = &sExtensionMapList;
|
|
||||||
return cwNoErr;
|
|
||||||
}
|
|
||||||
|
|
||||||
#if CW_USE_PRAGMA_EXPORT
|
|
||||||
#pragma export off
|
|
||||||
#endif
|
|
||||||
typedef short CWFileRef;
|
|
||||||
|
|
||||||
static int line_count = 0;
|
|
||||||
moc_status do_moc(CWPluginContext, const QCString &, const QCString &, CWFileSpec *, bool);
|
|
||||||
|
|
||||||
static CWResult mocify(CWPluginContext context, const QCString &source)
|
|
||||||
{
|
|
||||||
CWDisplayLines(context, line_count++);
|
|
||||||
|
|
||||||
source.stripWhiteSpace();
|
|
||||||
|
|
||||||
CWResult err;
|
|
||||||
bool dotmoc=false;
|
|
||||||
QCString stem = source, ext;
|
|
||||||
int dotpos = stem.findRev('.');
|
|
||||||
if(dotpos != -1) {
|
|
||||||
ext = stem.right(stem.length() - (dotpos+1));
|
|
||||||
stem = stem.left(dotpos);
|
|
||||||
if(ext == "cpp")
|
|
||||||
dotmoc = true;
|
|
||||||
} else {
|
|
||||||
//whoa!
|
|
||||||
}
|
|
||||||
QCString dest;
|
|
||||||
if(dotmoc)
|
|
||||||
dest = stem + ".moc";
|
|
||||||
else
|
|
||||||
dest = "moc_" + stem + ".cpp";
|
|
||||||
|
|
||||||
//moc it
|
|
||||||
CWFileSpec destSpec;
|
|
||||||
moc_status mocd = do_moc(context, source, dest, &destSpec, dotmoc);
|
|
||||||
|
|
||||||
#if 0
|
|
||||||
QCString derr = "Weird";
|
|
||||||
switch(mocd) {
|
|
||||||
case moc_success: derr = "Success"; break;
|
|
||||||
case moc_parse_error: derr = "Parser Error"; break;
|
|
||||||
case moc_no_qobject:derr = "No QOBJECT"; break;
|
|
||||||
case moc_not_time: derr = "Not Time"; break;
|
|
||||||
case moc_no_source: derr = "No Source"; break;
|
|
||||||
case moc_general_error: derr = "General Error"; break;
|
|
||||||
}
|
|
||||||
char dmsg[200];
|
|
||||||
sprintf(dmsg, "\"%s\" %s", source.data(), derr.data());
|
|
||||||
CWReportMessage(context, NULL, dmsg, NULL, messagetypeError, 0);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
//handle project
|
|
||||||
if(mocd == moc_no_qobject) {
|
|
||||||
char msg[400];
|
|
||||||
sprintf(msg, "\"%s\" No relevant classes found. No output generated.", source.data());
|
|
||||||
CWReportMessage(context, NULL, msg, NULL, messagetypeWarning, 0);
|
|
||||||
} else if ((mocd == moc_success || mocd == moc_not_time) && !dotmoc)
|
|
||||||
{
|
|
||||||
long whichFile;
|
|
||||||
CWNewProjectEntryInfo ei;
|
|
||||||
memset(&ei, '\0', sizeof(ei));
|
|
||||||
ei.groupPath = "QtGenerated";
|
|
||||||
err = CWAddProjectEntry(context, &destSpec, true, &ei, &whichFile);
|
|
||||||
if (!CWSUCCESS(err))
|
|
||||||
{
|
|
||||||
char msg[200];
|
|
||||||
sprintf(msg, "\"%s\" not added", dest.data());
|
|
||||||
CWReportMessage(context, NULL, msg, NULL, messagetypeWarning, 0);
|
|
||||||
}
|
|
||||||
if(mocd == moc_success)
|
|
||||||
CWSetModDate(context, &destSpec, NULL, true);
|
|
||||||
}
|
|
||||||
return cwNoErr;
|
|
||||||
}
|
|
||||||
|
|
||||||
pascal short main(CWPluginContext context)
|
|
||||||
{
|
|
||||||
short result;
|
|
||||||
long request;
|
|
||||||
|
|
||||||
if (CWGetPluginRequest(context, &request) != cwNoErr)
|
|
||||||
return cwErrRequestFailed;
|
|
||||||
result = cwErrInvalidParameter;
|
|
||||||
|
|
||||||
/* dispatch on compiler request */
|
|
||||||
switch (request)
|
|
||||||
{
|
|
||||||
case reqInitCompiler:
|
|
||||||
case reqTermCompiler:
|
|
||||||
result = cwNoErr;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case reqCompile:
|
|
||||||
{
|
|
||||||
line_count = 0;
|
|
||||||
const char *files = NULL;
|
|
||||||
long filelen;
|
|
||||||
CWGetMainFileText(context, &files, &filelen);
|
|
||||||
const char *beg = files;
|
|
||||||
for(int x = 0; x < filelen; x++) {
|
|
||||||
if(*(files++) == '\r') {
|
|
||||||
char file[1024];
|
|
||||||
memcpy(file, beg, files - beg);
|
|
||||||
file[(files-beg)-1] = '\0';
|
|
||||||
mocify(context, file);
|
|
||||||
beg = files;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if(beg != files) {
|
|
||||||
char file[1024];
|
|
||||||
memcpy(file, beg, files - beg);
|
|
||||||
file[(files-beg)] = '\0';
|
|
||||||
mocify(context, file);
|
|
||||||
}
|
|
||||||
|
|
||||||
result = cwNoErr;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* return result code */
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
QT_END_NAMESPACE
|
|
@ -236,7 +236,7 @@ Symbols Preprocessor::tokenize(const QByteArray& input, int lineNum, Preprocesso
|
|||||||
data -= 2;
|
data -= 2;
|
||||||
break;
|
break;
|
||||||
case DIGIT:
|
case DIGIT:
|
||||||
while (is_digit_char(*data))
|
while (is_digit_char(*data) || *data == '\'')
|
||||||
++data;
|
++data;
|
||||||
if (!*data || *data != '.') {
|
if (!*data || *data != '.') {
|
||||||
token = INTEGER_LITERAL;
|
token = INTEGER_LITERAL;
|
||||||
@ -244,7 +244,7 @@ Symbols Preprocessor::tokenize(const QByteArray& input, int lineNum, Preprocesso
|
|||||||
(*data == 'x' || *data == 'X')
|
(*data == 'x' || *data == 'X')
|
||||||
&& *lexem == '0') {
|
&& *lexem == '0') {
|
||||||
++data;
|
++data;
|
||||||
while (is_hex_char(*data))
|
while (is_hex_char(*data) || *data == '\'')
|
||||||
++data;
|
++data;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -253,13 +253,13 @@ Symbols Preprocessor::tokenize(const QByteArray& input, int lineNum, Preprocesso
|
|||||||
++data;
|
++data;
|
||||||
Q_FALLTHROUGH();
|
Q_FALLTHROUGH();
|
||||||
case FLOATING_LITERAL:
|
case FLOATING_LITERAL:
|
||||||
while (is_digit_char(*data))
|
while (is_digit_char(*data) || *data == '\'')
|
||||||
++data;
|
++data;
|
||||||
if (*data == '+' || *data == '-')
|
if (*data == '+' || *data == '-')
|
||||||
++data;
|
++data;
|
||||||
if (*data == 'e' || *data == 'E') {
|
if (*data == 'e' || *data == 'E') {
|
||||||
++data;
|
++data;
|
||||||
while (is_digit_char(*data))
|
while (is_digit_char(*data) || *data == '\'')
|
||||||
++data;
|
++data;
|
||||||
}
|
}
|
||||||
if (*data == 'f' || *data == 'F'
|
if (*data == 'f' || *data == 'F'
|
||||||
@ -413,7 +413,7 @@ Symbols Preprocessor::tokenize(const QByteArray& input, int lineNum, Preprocesso
|
|||||||
token = PP_CHARACTER_LITERAL;
|
token = PP_CHARACTER_LITERAL;
|
||||||
break;
|
break;
|
||||||
case PP_DIGIT:
|
case PP_DIGIT:
|
||||||
while (is_digit_char(*data))
|
while (is_digit_char(*data) || *data == '\'')
|
||||||
++data;
|
++data;
|
||||||
if (!*data || *data != '.') {
|
if (!*data || *data != '.') {
|
||||||
token = PP_INTEGER_LITERAL;
|
token = PP_INTEGER_LITERAL;
|
||||||
@ -421,7 +421,7 @@ Symbols Preprocessor::tokenize(const QByteArray& input, int lineNum, Preprocesso
|
|||||||
(*data == 'x' || *data == 'X')
|
(*data == 'x' || *data == 'X')
|
||||||
&& *lexem == '0') {
|
&& *lexem == '0') {
|
||||||
++data;
|
++data;
|
||||||
while (is_hex_char(*data))
|
while (is_hex_char(*data) || *data == '\'')
|
||||||
++data;
|
++data;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -430,13 +430,13 @@ Symbols Preprocessor::tokenize(const QByteArray& input, int lineNum, Preprocesso
|
|||||||
++data;
|
++data;
|
||||||
Q_FALLTHROUGH();
|
Q_FALLTHROUGH();
|
||||||
case PP_FLOATING_LITERAL:
|
case PP_FLOATING_LITERAL:
|
||||||
while (is_digit_char(*data))
|
while (is_digit_char(*data) || *data == '\'')
|
||||||
++data;
|
++data;
|
||||||
if (*data == '+' || *data == '-')
|
if (*data == '+' || *data == '-')
|
||||||
++data;
|
++data;
|
||||||
if (*data == 'e' || *data == 'E') {
|
if (*data == 'e' || *data == 'E') {
|
||||||
++data;
|
++data;
|
||||||
while (is_digit_char(*data))
|
while (is_digit_char(*data) || *data == '\'')
|
||||||
++data;
|
++data;
|
||||||
}
|
}
|
||||||
if (*data == 'f' || *data == 'F'
|
if (*data == 'f' || *data == 'F'
|
||||||
|
@ -1484,6 +1484,8 @@ void WriteInitialization::writeProperties(const QString &varName,
|
|||||||
defineC = whatsThisDefineC;
|
defineC = whatsThisDefineC;
|
||||||
else if (propertyName == QLatin1String("statusTip"))
|
else if (propertyName == QLatin1String("statusTip"))
|
||||||
defineC = statusTipDefineC;
|
defineC = statusTipDefineC;
|
||||||
|
else if (propertyName == QLatin1String("shortcut"))
|
||||||
|
defineC = shortcutDefineC;
|
||||||
else if (propertyName == QLatin1String("accessibleName") || propertyName == QLatin1String("accessibleDescription"))
|
else if (propertyName == QLatin1String("accessibleName") || propertyName == QLatin1String("accessibleDescription"))
|
||||||
defineC = accessibilityDefineC;
|
defineC = accessibilityDefineC;
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
option(host_build)
|
option(host_build)
|
||||||
!force_bootstrap:if(!qtConfig(commandlineparser)|!qtConfig(textcodec)): \
|
!force_bootstrap:if(!qtConfig(commandlineparser)|!qtConfig(textcodec)|!qtConfig(xmlstreamreader)|!qtConfig(xmlstreamwriter)): \
|
||||||
CONFIG += force_bootstrap
|
CONFIG += force_bootstrap
|
||||||
|
|
||||||
DEFINES += QT_UIC QT_NO_CAST_FROM_ASCII QT_NO_FOREACH
|
DEFINES += QT_UIC QT_NO_CAST_FROM_ASCII QT_NO_FOREACH
|
||||||
|
@ -44,7 +44,9 @@
|
|||||||
#include "qaction.h"
|
#include "qaction.h"
|
||||||
#include "qapplication.h"
|
#include "qapplication.h"
|
||||||
#include "qgroupbox.h"
|
#include "qgroupbox.h"
|
||||||
|
#if QT_CONFIG(label)
|
||||||
#include "qlabel.h"
|
#include "qlabel.h"
|
||||||
|
#endif
|
||||||
#include "qtooltip.h"
|
#include "qtooltip.h"
|
||||||
#include "qwhatsthis.h"
|
#include "qwhatsthis.h"
|
||||||
#include "qwidget.h"
|
#include "qwidget.h"
|
||||||
@ -81,7 +83,7 @@ static QString buddyString(const QWidget *widget)
|
|||||||
QWidget *parent = widget->parentWidget();
|
QWidget *parent = widget->parentWidget();
|
||||||
if (!parent)
|
if (!parent)
|
||||||
return QString();
|
return QString();
|
||||||
#ifndef QT_NO_SHORTCUT
|
#if QT_CONFIG(shortcut) && QT_CONFIG(label)
|
||||||
for (QObject *o : parent->children()) {
|
for (QObject *o : parent->children()) {
|
||||||
QLabel *label = qobject_cast<QLabel*>(o);
|
QLabel *label = qobject_cast<QLabel*>(o);
|
||||||
if (label && label->buddy() == widget)
|
if (label && label->buddy() == widget)
|
||||||
@ -309,7 +311,7 @@ QAccessibleWidget::relations(QAccessible::Relation match /*= QAccessible::AllRel
|
|||||||
if (match & QAccessible::Label) {
|
if (match & QAccessible::Label) {
|
||||||
const QAccessible::Relation rel = QAccessible::Label;
|
const QAccessible::Relation rel = QAccessible::Label;
|
||||||
if (QWidget *parent = widget()->parentWidget()) {
|
if (QWidget *parent = widget()->parentWidget()) {
|
||||||
#ifndef QT_NO_SHORTCUT
|
#if QT_CONFIG(shortcut) && QT_CONFIG(label)
|
||||||
// first check for all siblings that are labels to us
|
// first check for all siblings that are labels to us
|
||||||
// ideally we would go through all objects and check, but that
|
// ideally we would go through all objects and check, but that
|
||||||
// will be too expensive
|
// will be too expensive
|
||||||
|
@ -45,7 +45,6 @@
|
|||||||
#include "complexwidgets_p.h"
|
#include "complexwidgets_p.h"
|
||||||
#include "itemviews_p.h"
|
#include "itemviews_p.h"
|
||||||
|
|
||||||
#include <qpushbutton.h>
|
|
||||||
#include <qtoolbutton.h>
|
#include <qtoolbutton.h>
|
||||||
#include <qtreeview.h>
|
#include <qtreeview.h>
|
||||||
#include <qvariant.h>
|
#include <qvariant.h>
|
||||||
@ -184,8 +183,10 @@ QAccessibleInterface *qAccessibleFactory(const QString &classname, QObject *obje
|
|||||||
} else if (classname == QLatin1String("QMdiSubWindow")) {
|
} else if (classname == QLatin1String("QMdiSubWindow")) {
|
||||||
iface = new QAccessibleMdiSubWindow(widget);
|
iface = new QAccessibleMdiSubWindow(widget);
|
||||||
#endif
|
#endif
|
||||||
|
#if QT_CONFIG(dialogbuttonbox)
|
||||||
} else if (classname == QLatin1String("QDialogButtonBox")) {
|
} else if (classname == QLatin1String("QDialogButtonBox")) {
|
||||||
iface = new QAccessibleDialogButtonBox(widget);
|
iface = new QAccessibleDialogButtonBox(widget);
|
||||||
|
#endif
|
||||||
#ifndef QT_NO_DIAL
|
#ifndef QT_NO_DIAL
|
||||||
} else if (classname == QLatin1String("QDial")) {
|
} else if (classname == QLatin1String("QDial")) {
|
||||||
iface = new QAccessibleDial(widget);
|
iface = new QAccessibleDial(widget);
|
||||||
|
@ -54,7 +54,9 @@
|
|||||||
#include <QToolBox>
|
#include <QToolBox>
|
||||||
#include <QMdiArea>
|
#include <QMdiArea>
|
||||||
#include <QMdiSubWindow>
|
#include <QMdiSubWindow>
|
||||||
|
#if QT_CONFIG(dialogbuttonbox)
|
||||||
#include <QDialogButtonBox>
|
#include <QDialogButtonBox>
|
||||||
|
#endif
|
||||||
#include <limits.h>
|
#include <limits.h>
|
||||||
#include <QRubberBand>
|
#include <QRubberBand>
|
||||||
#include <QTextBrowser>
|
#include <QTextBrowser>
|
||||||
@ -480,7 +482,7 @@ QMdiSubWindow *QAccessibleMdiSubWindow::mdiSubWindow() const
|
|||||||
}
|
}
|
||||||
#endif // QT_NO_MDIAREA
|
#endif // QT_NO_MDIAREA
|
||||||
|
|
||||||
#ifndef QT_NO_DIALOGBUTTONBOX
|
#if QT_CONFIG(dialogbuttonbox)
|
||||||
// ======================= QAccessibleDialogButtonBox ======================
|
// ======================= QAccessibleDialogButtonBox ======================
|
||||||
QAccessibleDialogButtonBox::QAccessibleDialogButtonBox(QWidget *widget)
|
QAccessibleDialogButtonBox::QAccessibleDialogButtonBox(QWidget *widget)
|
||||||
: QAccessibleWidget(widget, QAccessible::Grouping)
|
: QAccessibleWidget(widget, QAccessible::Grouping)
|
||||||
@ -488,7 +490,7 @@ QAccessibleDialogButtonBox::QAccessibleDialogButtonBox(QWidget *widget)
|
|||||||
Q_ASSERT(qobject_cast<QDialogButtonBox*>(widget));
|
Q_ASSERT(qobject_cast<QDialogButtonBox*>(widget));
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif // QT_NO_DIALOGBUTTONBOX
|
#endif // QT_CONFIG(dialogbuttonbox)
|
||||||
|
|
||||||
#if !defined(QT_NO_TEXTBROWSER) && !defined(QT_NO_CURSOR)
|
#if !defined(QT_NO_TEXTBROWSER) && !defined(QT_NO_CURSOR)
|
||||||
QAccessibleTextBrowser::QAccessibleTextBrowser(QWidget *widget)
|
QAccessibleTextBrowser::QAccessibleTextBrowser(QWidget *widget)
|
||||||
|
@ -248,11 +248,13 @@ protected:
|
|||||||
};
|
};
|
||||||
#endif // QT_NO_MDIAREA
|
#endif // QT_NO_MDIAREA
|
||||||
|
|
||||||
|
#if QT_CONFIG(dialogbuttonbox)
|
||||||
class QAccessibleDialogButtonBox : public QAccessibleWidget
|
class QAccessibleDialogButtonBox : public QAccessibleWidget
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
explicit QAccessibleDialogButtonBox(QWidget *widget);
|
explicit QAccessibleDialogButtonBox(QWidget *widget);
|
||||||
};
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
#if !defined(QT_NO_TEXTBROWSER) && !defined(QT_NO_CURSOR)
|
#if !defined(QT_NO_TEXTBROWSER) && !defined(QT_NO_CURSOR)
|
||||||
class QAccessibleTextBrowser : public QAccessibleTextEdit
|
class QAccessibleTextBrowser : public QAccessibleTextEdit
|
||||||
|
@ -40,14 +40,22 @@
|
|||||||
#include "simplewidgets_p.h"
|
#include "simplewidgets_p.h"
|
||||||
|
|
||||||
#include <qabstractbutton.h>
|
#include <qabstractbutton.h>
|
||||||
|
#if QT_CONFIG(checkbox)
|
||||||
#include <qcheckbox.h>
|
#include <qcheckbox.h>
|
||||||
|
#endif
|
||||||
|
#if QT_CONFIG(pushbutton)
|
||||||
#include <qpushbutton.h>
|
#include <qpushbutton.h>
|
||||||
|
#endif
|
||||||
#include <qprogressbar.h>
|
#include <qprogressbar.h>
|
||||||
#include <qstatusbar.h>
|
#include <qstatusbar.h>
|
||||||
|
#if QT_CONFIG(radiobutton)
|
||||||
#include <qradiobutton.h>
|
#include <qradiobutton.h>
|
||||||
|
#endif
|
||||||
#include <qtoolbutton.h>
|
#include <qtoolbutton.h>
|
||||||
#include <qmenu.h>
|
#include <qmenu.h>
|
||||||
|
#if QT_CONFIG(label)
|
||||||
#include <qlabel.h>
|
#include <qlabel.h>
|
||||||
|
#endif
|
||||||
#include <qgroupbox.h>
|
#include <qgroupbox.h>
|
||||||
#include <qlcdnumber.h>
|
#include <qlcdnumber.h>
|
||||||
#include <qlineedit.h>
|
#include <qlineedit.h>
|
||||||
@ -109,7 +117,7 @@ QString QAccessibleButton::text(QAccessible::Text t) const
|
|||||||
switch (t) {
|
switch (t) {
|
||||||
case QAccessible::Accelerator:
|
case QAccessible::Accelerator:
|
||||||
{
|
{
|
||||||
#ifndef QT_NO_SHORTCUT
|
#if QT_CONFIG(shortcut) && QT_CONFIG(pushbutton)
|
||||||
QPushButton *pb = qobject_cast<QPushButton*>(object());
|
QPushButton *pb = qobject_cast<QPushButton*>(object());
|
||||||
if (pb && pb->isDefault())
|
if (pb && pb->isDefault())
|
||||||
str = QKeySequence(Qt::Key_Enter).toString(QKeySequence::NativeText);
|
str = QKeySequence(Qt::Key_Enter).toString(QKeySequence::NativeText);
|
||||||
@ -136,15 +144,20 @@ QAccessible::State QAccessibleButton::state() const
|
|||||||
QAccessible::State state = QAccessibleWidget::state();
|
QAccessible::State state = QAccessibleWidget::state();
|
||||||
|
|
||||||
QAbstractButton *b = button();
|
QAbstractButton *b = button();
|
||||||
|
#if QT_CONFIG(checkbox)
|
||||||
QCheckBox *cb = qobject_cast<QCheckBox *>(b);
|
QCheckBox *cb = qobject_cast<QCheckBox *>(b);
|
||||||
|
#endif
|
||||||
if (b->isCheckable())
|
if (b->isCheckable())
|
||||||
state.checkable = true;
|
state.checkable = true;
|
||||||
if (b->isChecked())
|
if (b->isChecked())
|
||||||
state.checked = true;
|
state.checked = true;
|
||||||
|
#if QT_CONFIG(checkbox)
|
||||||
else if (cb && cb->checkState() == Qt::PartiallyChecked)
|
else if (cb && cb->checkState() == Qt::PartiallyChecked)
|
||||||
state.checkStateMixed = true;
|
state.checkStateMixed = true;
|
||||||
|
#endif
|
||||||
if (b->isDown())
|
if (b->isDown())
|
||||||
state.pressed = true;
|
state.pressed = true;
|
||||||
|
#if QT_CONFIG(pushbutton)
|
||||||
QPushButton *pb = qobject_cast<QPushButton*>(b);
|
QPushButton *pb = qobject_cast<QPushButton*>(b);
|
||||||
if (pb) {
|
if (pb) {
|
||||||
if (pb->isDefault())
|
if (pb->isDefault())
|
||||||
@ -154,6 +167,7 @@ QAccessible::State QAccessibleButton::state() const
|
|||||||
state.hasPopup = true;
|
state.hasPopup = true;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
return state;
|
return state;
|
||||||
}
|
}
|
||||||
@ -164,17 +178,22 @@ QRect QAccessibleButton::rect() const
|
|||||||
if (!ab->isVisible())
|
if (!ab->isVisible())
|
||||||
return QRect();
|
return QRect();
|
||||||
|
|
||||||
|
#if QT_CONFIG(checkbox)
|
||||||
if (QCheckBox *cb = qobject_cast<QCheckBox *>(ab)) {
|
if (QCheckBox *cb = qobject_cast<QCheckBox *>(ab)) {
|
||||||
QPoint wpos = cb->mapToGlobal(QPoint(0, 0));
|
QPoint wpos = cb->mapToGlobal(QPoint(0, 0));
|
||||||
QStyleOptionButton opt;
|
QStyleOptionButton opt;
|
||||||
cb->initStyleOption(&opt);
|
cb->initStyleOption(&opt);
|
||||||
return cb->style()->subElementRect(QStyle::SE_CheckBoxClickRect, &opt, cb).translated(wpos);
|
return cb->style()->subElementRect(QStyle::SE_CheckBoxClickRect, &opt, cb).translated(wpos);
|
||||||
} else if (QRadioButton *rb = qobject_cast<QRadioButton *>(ab)) {
|
}
|
||||||
|
#endif
|
||||||
|
#if QT_CONFIG(radiobutton)
|
||||||
|
else if (QRadioButton *rb = qobject_cast<QRadioButton *>(ab)) {
|
||||||
QPoint wpos = rb->mapToGlobal(QPoint(0, 0));
|
QPoint wpos = rb->mapToGlobal(QPoint(0, 0));
|
||||||
QStyleOptionButton opt;
|
QStyleOptionButton opt;
|
||||||
rb->initStyleOption(&opt);
|
rb->initStyleOption(&opt);
|
||||||
return rb->style()->subElementRect(QStyle::SE_RadioButtonClickRect, &opt, rb).translated(wpos);
|
return rb->style()->subElementRect(QStyle::SE_RadioButtonClickRect, &opt, rb).translated(wpos);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
return QAccessibleWidget::rect();
|
return QAccessibleWidget::rect();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -390,6 +409,7 @@ QAccessibleDisplay::QAccessibleDisplay(QWidget *w, QAccessible::Role role)
|
|||||||
|
|
||||||
QAccessible::Role QAccessibleDisplay::role() const
|
QAccessible::Role QAccessibleDisplay::role() const
|
||||||
{
|
{
|
||||||
|
#if QT_CONFIG(label)
|
||||||
QLabel *l = qobject_cast<QLabel*>(object());
|
QLabel *l = qobject_cast<QLabel*>(object());
|
||||||
if (l) {
|
if (l) {
|
||||||
if (l->pixmap())
|
if (l->pixmap())
|
||||||
@ -411,6 +431,7 @@ QAccessible::Role QAccessibleDisplay::role() const
|
|||||||
return QAccessible::StatusBar;
|
return QAccessible::StatusBar;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
return QAccessibleWidget::role();
|
return QAccessibleWidget::role();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -421,7 +442,9 @@ QString QAccessibleDisplay::text(QAccessible::Text t) const
|
|||||||
case QAccessible::Name:
|
case QAccessible::Name:
|
||||||
str = widget()->accessibleName();
|
str = widget()->accessibleName();
|
||||||
if (str.isEmpty()) {
|
if (str.isEmpty()) {
|
||||||
if (qobject_cast<QLabel*>(object())) {
|
if (false) {
|
||||||
|
#if QT_CONFIG(label)
|
||||||
|
} else if (qobject_cast<QLabel*>(object())) {
|
||||||
QLabel *label = qobject_cast<QLabel*>(object());
|
QLabel *label = qobject_cast<QLabel*>(object());
|
||||||
str = label->text();
|
str = label->text();
|
||||||
#ifndef QT_NO_TEXTHTMLPARSER
|
#ifndef QT_NO_TEXTHTMLPARSER
|
||||||
@ -436,6 +459,7 @@ QString QAccessibleDisplay::text(QAccessible::Text t) const
|
|||||||
if (label->buddy())
|
if (label->buddy())
|
||||||
str = qt_accStripAmp(str);
|
str = qt_accStripAmp(str);
|
||||||
#endif
|
#endif
|
||||||
|
#endif // QT_CONFIG(label)
|
||||||
#ifndef QT_NO_LCDNUMBER
|
#ifndef QT_NO_LCDNUMBER
|
||||||
} else if (qobject_cast<QLCDNumber*>(object())) {
|
} else if (qobject_cast<QLCDNumber*>(object())) {
|
||||||
QLCDNumber *l = qobject_cast<QLCDNumber*>(object());
|
QLCDNumber *l = qobject_cast<QLCDNumber*>(object());
|
||||||
@ -470,7 +494,7 @@ QVector<QPair<QAccessibleInterface*, QAccessible::Relation> >
|
|||||||
QAccessibleDisplay::relations(QAccessible::Relation match /* = QAccessible::AllRelations */) const
|
QAccessibleDisplay::relations(QAccessible::Relation match /* = QAccessible::AllRelations */) const
|
||||||
{
|
{
|
||||||
QVector<QPair<QAccessibleInterface*, QAccessible::Relation> > rels = QAccessibleWidget::relations(match);
|
QVector<QPair<QAccessibleInterface*, QAccessible::Relation> > rels = QAccessibleWidget::relations(match);
|
||||||
#ifndef QT_NO_SHORTCUT
|
#if QT_CONFIG(shortcut) && QT_CONFIG(label)
|
||||||
if (match & QAccessible::Labelled) {
|
if (match & QAccessible::Labelled) {
|
||||||
if (QLabel *label = qobject_cast<QLabel*>(object())) {
|
if (QLabel *label = qobject_cast<QLabel*>(object())) {
|
||||||
const QAccessible::Relation rel = QAccessible::Labelled;
|
const QAccessible::Relation rel = QAccessible::Labelled;
|
||||||
@ -502,26 +526,34 @@ QString QAccessibleDisplay::imageDescription() const
|
|||||||
/*! \internal */
|
/*! \internal */
|
||||||
QSize QAccessibleDisplay::imageSize() const
|
QSize QAccessibleDisplay::imageSize() const
|
||||||
{
|
{
|
||||||
|
#if QT_CONFIG(label)
|
||||||
QLabel *label = qobject_cast<QLabel *>(widget());
|
QLabel *label = qobject_cast<QLabel *>(widget());
|
||||||
if (!label)
|
if (!label)
|
||||||
|
#endif
|
||||||
return QSize();
|
return QSize();
|
||||||
|
#if QT_CONFIG(label)
|
||||||
const QPixmap *pixmap = label->pixmap();
|
const QPixmap *pixmap = label->pixmap();
|
||||||
if (!pixmap)
|
if (!pixmap)
|
||||||
return QSize();
|
return QSize();
|
||||||
return pixmap->size();
|
return pixmap->size();
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/*! \internal */
|
/*! \internal */
|
||||||
QPoint QAccessibleDisplay::imagePosition() const
|
QPoint QAccessibleDisplay::imagePosition() const
|
||||||
{
|
{
|
||||||
|
#if QT_CONFIG(label)
|
||||||
QLabel *label = qobject_cast<QLabel *>(widget());
|
QLabel *label = qobject_cast<QLabel *>(widget());
|
||||||
if (!label)
|
if (!label)
|
||||||
|
#endif
|
||||||
return QPoint();
|
return QPoint();
|
||||||
|
#if QT_CONFIG(label)
|
||||||
const QPixmap *pixmap = label->pixmap();
|
const QPixmap *pixmap = label->pixmap();
|
||||||
if (!pixmap)
|
if (!pixmap)
|
||||||
return QPoint();
|
return QPoint();
|
||||||
|
|
||||||
return QPoint(label->mapToGlobal(label->pos()));
|
return QPoint(label->mapToGlobal(label->pos()));
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef QT_NO_GROUPBOX
|
#ifndef QT_NO_GROUPBOX
|
||||||
@ -664,11 +696,13 @@ void QAccessibleLineEdit::setText(QAccessible::Text t, const QString &text)
|
|||||||
}
|
}
|
||||||
|
|
||||||
QString newText = text;
|
QString newText = text;
|
||||||
|
#if QT_CONFIG(validator)
|
||||||
if (lineEdit()->validator()) {
|
if (lineEdit()->validator()) {
|
||||||
int pos = 0;
|
int pos = 0;
|
||||||
if (lineEdit()->validator()->validate(newText, pos) != QValidator::Acceptable)
|
if (lineEdit()->validator()->validate(newText, pos) != QValidator::Acceptable)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
lineEdit()->setText(newText);
|
lineEdit()->setText(newText);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -117,6 +117,13 @@
|
|||||||
"condition": "features.tableview",
|
"condition": "features.tableview",
|
||||||
"output": [ "publicFeature", "feature" ]
|
"output": [ "publicFeature", "feature" ]
|
||||||
},
|
},
|
||||||
|
"commandlinkbutton": {
|
||||||
|
"label": "QCommandLinkButton",
|
||||||
|
"purpose": "Provides a Vista style command link button.",
|
||||||
|
"section": "Widgets",
|
||||||
|
"condition": "features.pushbutton",
|
||||||
|
"output": [ "publicFeature" ]
|
||||||
|
},
|
||||||
"datetimeedit": {
|
"datetimeedit": {
|
||||||
"label": "QDateTimeEdit",
|
"label": "QDateTimeEdit",
|
||||||
"purpose": "Supports editing dates and times.",
|
"purpose": "Supports editing dates and times.",
|
||||||
@ -150,6 +157,19 @@
|
|||||||
"condition": "features.rubberband",
|
"condition": "features.rubberband",
|
||||||
"output": [ "publicFeature", "feature" ]
|
"output": [ "publicFeature", "feature" ]
|
||||||
},
|
},
|
||||||
|
"label": {
|
||||||
|
"label": "QLabel",
|
||||||
|
"purpose": "Provides a text or image display.",
|
||||||
|
"section": "Widgets",
|
||||||
|
"output": [ "publicFeature" ]
|
||||||
|
},
|
||||||
|
"formlayout": {
|
||||||
|
"label": "QFormLayout",
|
||||||
|
"purpose": "Manages forms of input widgets and their associated labels.",
|
||||||
|
"section": "Widgets",
|
||||||
|
"condition": "features.label",
|
||||||
|
"output": [ "publicFeature" ]
|
||||||
|
},
|
||||||
"lcdnumber": {
|
"lcdnumber": {
|
||||||
"label": "QLCDNumber",
|
"label": "QLCDNumber",
|
||||||
"purpose": "Provides LCD-like digits.",
|
"purpose": "Provides LCD-like digits.",
|
||||||
@ -160,7 +180,7 @@
|
|||||||
"label": "QMenu",
|
"label": "QMenu",
|
||||||
"purpose": "Provides popup-menus.",
|
"purpose": "Provides popup-menus.",
|
||||||
"section": "Widgets",
|
"section": "Widgets",
|
||||||
"condition": "features.action",
|
"condition": "features.action && features.pushbutton",
|
||||||
"output": [ "publicFeature", "feature" ]
|
"output": [ "publicFeature", "feature" ]
|
||||||
},
|
},
|
||||||
"lineedit": {
|
"lineedit": {
|
||||||
@ -169,6 +189,12 @@
|
|||||||
"section": "Widgets",
|
"section": "Widgets",
|
||||||
"output": [ "publicFeature", "feature" ]
|
"output": [ "publicFeature", "feature" ]
|
||||||
},
|
},
|
||||||
|
"radiobutton": {
|
||||||
|
"label": "QRadioButton",
|
||||||
|
"purpose": "Provides a radio button with a text label.",
|
||||||
|
"section": "Widgets",
|
||||||
|
"output": [ "publicFeature" ]
|
||||||
|
},
|
||||||
"spinbox": {
|
"spinbox": {
|
||||||
"label": "QSpinBox",
|
"label": "QSpinBox",
|
||||||
"purpose": "Provides spin boxes handling integers and discrete sets of values.",
|
"purpose": "Provides spin boxes handling integers and discrete sets of values.",
|
||||||
@ -204,6 +230,19 @@
|
|||||||
"condition": "features.combobox && features.stringlistmodel",
|
"condition": "features.combobox && features.stringlistmodel",
|
||||||
"output": [ "publicFeature", "feature" ]
|
"output": [ "publicFeature", "feature" ]
|
||||||
},
|
},
|
||||||
|
"checkbox": {
|
||||||
|
"label": "QCheckBox(",
|
||||||
|
"purpose": "Provides a checkbox with a text label.",
|
||||||
|
"section": "Widgets",
|
||||||
|
"output": [ "publicFeature" ]
|
||||||
|
},
|
||||||
|
"pushbutton": {
|
||||||
|
"label": "QPushButton",
|
||||||
|
"purpose": "Provides a command button.",
|
||||||
|
"section": "Widgets",
|
||||||
|
"condition": "features.action",
|
||||||
|
"output": [ "publicFeature" ]
|
||||||
|
},
|
||||||
"toolbutton": {
|
"toolbutton": {
|
||||||
"label": "QToolButton",
|
"label": "QToolButton",
|
||||||
"purpose": "Provides quick-access buttons to commands and options.",
|
"purpose": "Provides quick-access buttons to commands and options.",
|
||||||
@ -291,10 +330,17 @@
|
|||||||
"section": "Widgets",
|
"section": "Widgets",
|
||||||
"output": [ "publicFeature", "feature" ]
|
"output": [ "publicFeature", "feature" ]
|
||||||
},
|
},
|
||||||
|
"abstractslider": {
|
||||||
|
"label": "QAbstractSlider",
|
||||||
|
"purpose": "Common super class for widgets like QScrollBar, QSlider and QDial.",
|
||||||
|
"section": "Widgets",
|
||||||
|
"output": [ "publicFeature" ]
|
||||||
|
},
|
||||||
"slider": {
|
"slider": {
|
||||||
"label": "QSlider",
|
"label": "QSlider",
|
||||||
"purpose": "Provides sliders controlling a bounded value.",
|
"purpose": "Provides sliders controlling a bounded value.",
|
||||||
"section": "Widgets",
|
"section": "Widgets",
|
||||||
|
"condition": "features.abstractslider",
|
||||||
"output": [ "publicFeature", "feature" ]
|
"output": [ "publicFeature", "feature" ]
|
||||||
},
|
},
|
||||||
"scrollbar": {
|
"scrollbar": {
|
||||||
@ -318,6 +364,12 @@
|
|||||||
"condition": "features.scrollbar",
|
"condition": "features.scrollbar",
|
||||||
"output": [ "publicFeature", "feature" ]
|
"output": [ "publicFeature", "feature" ]
|
||||||
},
|
},
|
||||||
|
"scroller": {
|
||||||
|
"label": "QScroller",
|
||||||
|
"purpose": "Enables kinetic scrolling for any scrolling widget or graphics item.",
|
||||||
|
"section": "Widgets",
|
||||||
|
"output": [ "publicFeature" ]
|
||||||
|
},
|
||||||
"graphicsview": {
|
"graphicsview": {
|
||||||
"label": "QGraphicsView",
|
"label": "QGraphicsView",
|
||||||
"purpose": "Provides a canvas/sprite framework.",
|
"purpose": "Provides a canvas/sprite framework.",
|
||||||
@ -356,6 +408,7 @@
|
|||||||
"label": "QToolTip",
|
"label": "QToolTip",
|
||||||
"purpose": "Supports presentation of tooltips.",
|
"purpose": "Supports presentation of tooltips.",
|
||||||
"section": "Widgets",
|
"section": "Widgets",
|
||||||
|
"condition": "features.label",
|
||||||
"output": [ "publicFeature", "feature" ]
|
"output": [ "publicFeature", "feature" ]
|
||||||
},
|
},
|
||||||
"statustip": {
|
"statustip": {
|
||||||
@ -381,7 +434,15 @@
|
|||||||
"label": "QCalendarWidget",
|
"label": "QCalendarWidget",
|
||||||
"purpose": "Provides a monthly based calendar widget allowing the user to select a date.",
|
"purpose": "Provides a monthly based calendar widget allowing the user to select a date.",
|
||||||
"section": "Widgets",
|
"section": "Widgets",
|
||||||
"condition": "features.tableview && features.menu && features.textdate && features.spinbox && features.toolbutton",
|
"condition": [
|
||||||
|
"features.label",
|
||||||
|
"features.menu",
|
||||||
|
"features.pushbutton",
|
||||||
|
"features.spinbox",
|
||||||
|
"features.tableview",
|
||||||
|
"features.textdate",
|
||||||
|
"features.toolbutton"
|
||||||
|
],
|
||||||
"output": [ "publicFeature", "feature" ]
|
"output": [ "publicFeature", "feature" ]
|
||||||
},
|
},
|
||||||
"keysequenceedit": {
|
"keysequenceedit": {
|
||||||
@ -391,59 +452,119 @@
|
|||||||
"condition": "features.lineedit && features.shortcut",
|
"condition": "features.lineedit && features.shortcut",
|
||||||
"output": [ "publicFeature", "feature" ]
|
"output": [ "publicFeature", "feature" ]
|
||||||
},
|
},
|
||||||
|
"dialogbuttonbox": {
|
||||||
|
"label": "QDialogButtonBox",
|
||||||
|
"purpose": "Presents buttons in a layout that is appropriate for the current widget style.",
|
||||||
|
"section": "Dialogs",
|
||||||
|
"condition": "features.pushbutton",
|
||||||
|
"output": [ "publicFeature" ]
|
||||||
|
},
|
||||||
"messagebox": {
|
"messagebox": {
|
||||||
"label": "QMessageBox",
|
"label": "QMessageBox",
|
||||||
"purpose": "Provides message boxes displaying informative messages and simple questions.",
|
"purpose": "Provides message boxes displaying informative messages and simple questions.",
|
||||||
"section": "Dialogs",
|
"section": "Dialogs",
|
||||||
|
"condition" : [
|
||||||
|
"features.checkbox",
|
||||||
|
"features.dialogbuttonbox",
|
||||||
|
"features.label",
|
||||||
|
"features.pushbutton"
|
||||||
|
],
|
||||||
"output": [ "publicFeature", "feature" ]
|
"output": [ "publicFeature", "feature" ]
|
||||||
},
|
},
|
||||||
"colordialog": {
|
"colordialog": {
|
||||||
"label": "QColorDialog",
|
"label": "QColorDialog",
|
||||||
"purpose": "Provides a dialog widget for specifying colors.",
|
"purpose": "Provides a dialog widget for specifying colors.",
|
||||||
"section": "Dialogs",
|
"section": "Dialogs",
|
||||||
"condition": "features.spinbox",
|
"condition": [
|
||||||
|
"features.dialogbuttonbox",
|
||||||
|
"features.label",
|
||||||
|
"features.pushbutton",
|
||||||
|
"features.spinbox"
|
||||||
|
],
|
||||||
"output": [ "publicFeature", "feature" ]
|
"output": [ "publicFeature", "feature" ]
|
||||||
},
|
},
|
||||||
"filedialog": {
|
"filedialog": {
|
||||||
"label": "QFileDialog",
|
"label": "QFileDialog",
|
||||||
"purpose": "Provides a dialog widget for selecting files or directories.",
|
"purpose": "Provides a dialog widget for selecting files or directories.",
|
||||||
"section": "Dialogs",
|
"section": "Dialogs",
|
||||||
"condition": "features.dirmodel && features.treeview && features.combobox && features.toolbutton && features.buttongroup && features.tooltip && features.splitter && features.stackedwidget && features.proxymodel",
|
"condition": [
|
||||||
|
"features.buttongroup",
|
||||||
|
"features.combobox",
|
||||||
|
"features.dialogbuttonbox",
|
||||||
|
"features.dirmodel",
|
||||||
|
"features.label",
|
||||||
|
"features.proxymodel",
|
||||||
|
"features.splitter",
|
||||||
|
"features.stackedwidget",
|
||||||
|
"features.treeview",
|
||||||
|
"features.toolbutton"
|
||||||
|
],
|
||||||
"output": [ "publicFeature", "feature" ]
|
"output": [ "publicFeature", "feature" ]
|
||||||
},
|
},
|
||||||
"fontdialog": {
|
"fontdialog": {
|
||||||
"label": "QFontDialog",
|
"label": "QFontDialog",
|
||||||
"purpose": "Provides a dialog widget for selecting fonts.",
|
"purpose": "Provides a dialog widget for selecting fonts.",
|
||||||
"section": "Dialogs",
|
"section": "Dialogs",
|
||||||
"condition": "features.stringlistmodel && features.combobox && features.validator && features.groupbox",
|
"condition": [
|
||||||
|
"features.checkbox",
|
||||||
|
"features.combobox",
|
||||||
|
"features.dialogbuttonbox",
|
||||||
|
"features.groupbox",
|
||||||
|
"features.label",
|
||||||
|
"features.pushbutton",
|
||||||
|
"features.stringlistmodel",
|
||||||
|
"features.validator"
|
||||||
|
],
|
||||||
"output": [ "publicFeature", "feature" ]
|
"output": [ "publicFeature", "feature" ]
|
||||||
},
|
},
|
||||||
"progressdialog": {
|
"progressdialog": {
|
||||||
"label": "QProgressDialog",
|
"label": "QProgressDialog",
|
||||||
"purpose": "Provides feedback on the progress of a slow operation.",
|
"purpose": "Provides feedback on the progress of a slow operation.",
|
||||||
"section": "Dialogs",
|
"section": "Dialogs",
|
||||||
"condition": "features.progressbar",
|
"condition": [
|
||||||
|
"features.label",
|
||||||
|
"features.pushbutton",
|
||||||
|
"features.progressbar"
|
||||||
|
],
|
||||||
"output": [ "publicFeature", "feature" ]
|
"output": [ "publicFeature", "feature" ]
|
||||||
},
|
},
|
||||||
"inputdialog": {
|
"inputdialog": {
|
||||||
"label": "QInputDialog",
|
"label": "QInputDialog",
|
||||||
"purpose": "Provides a simple convenience dialog to get a single value from the user.",
|
"purpose": "Provides a simple convenience dialog to get a single value from the user.",
|
||||||
"section": "Dialogs",
|
"section": "Dialogs",
|
||||||
"condition": "features.combobox && features.spinbox && features.stackedwidget && features.textedit",
|
"condition": [
|
||||||
|
"features.combobox",
|
||||||
|
"features.dialogbuttonbox",
|
||||||
|
"features.label",
|
||||||
|
"features.pushbutton",
|
||||||
|
"features.spinbox",
|
||||||
|
"features.stackedwidget",
|
||||||
|
"features.textedit"
|
||||||
|
],
|
||||||
"output": [ "publicFeature", "feature" ]
|
"output": [ "publicFeature", "feature" ]
|
||||||
},
|
},
|
||||||
"errormessage": {
|
"errormessage": {
|
||||||
"label": "QErrorMessage",
|
"label": "QErrorMessage",
|
||||||
"purpose": "Provides an error message display dialog.",
|
"purpose": "Provides an error message display dialog.",
|
||||||
"section": "Dialogs",
|
"section": "Dialogs",
|
||||||
"condition": "features.textedit",
|
"condition": [
|
||||||
|
"features.checkbox",
|
||||||
|
"features.textedit",
|
||||||
|
"features.label",
|
||||||
|
"features.pushbutton",
|
||||||
|
"features.textedit"
|
||||||
|
],
|
||||||
"output": [ "publicFeature", "feature" ]
|
"output": [ "publicFeature", "feature" ]
|
||||||
},
|
},
|
||||||
"wizard": {
|
"wizard": {
|
||||||
"label": "QWizard",
|
"label": "QWizard",
|
||||||
"purpose": "Provides a framework for multi-page click-through dialogs.",
|
"purpose": "Provides a framework for multi-page click-through dialogs.",
|
||||||
"section": "Dialogs",
|
"section": "Dialogs",
|
||||||
"condition": "features.properties",
|
"condition": [
|
||||||
|
"features.pushbutton",
|
||||||
|
"features.properties",
|
||||||
|
"features.label"
|
||||||
|
],
|
||||||
"output": [ "publicFeature", "feature" ]
|
"output": [ "publicFeature", "feature" ]
|
||||||
},
|
},
|
||||||
"dirmodel": {
|
"dirmodel": {
|
||||||
|
@ -2246,10 +2246,13 @@ bool QColorDialogPrivate::handleColorPickingMouseButtonRelease(QMouseEvent *e)
|
|||||||
bool QColorDialogPrivate::handleColorPickingKeyPress(QKeyEvent *e)
|
bool QColorDialogPrivate::handleColorPickingKeyPress(QKeyEvent *e)
|
||||||
{
|
{
|
||||||
Q_Q(QColorDialog);
|
Q_Q(QColorDialog);
|
||||||
|
#if QT_CONFIG(shortcut)
|
||||||
if (e->matches(QKeySequence::Cancel)) {
|
if (e->matches(QKeySequence::Cancel)) {
|
||||||
releaseColorPicking();
|
releaseColorPicking();
|
||||||
q->setCurrentColor(beforeScreenColorPicking);
|
q->setCurrentColor(beforeScreenColorPicking);
|
||||||
} else if (e->key() == Qt::Key_Return || e->key() == Qt::Key_Enter) {
|
} else
|
||||||
|
#endif
|
||||||
|
if (e->key() == Qt::Key_Return || e->key() == Qt::Key_Enter) {
|
||||||
q->setCurrentColor(grabScreenColor(QCursor::pos()));
|
q->setCurrentColor(grabScreenColor(QCursor::pos()));
|
||||||
releaseColorPicking();
|
releaseColorPicking();
|
||||||
}
|
}
|
||||||
|
@ -43,7 +43,6 @@
|
|||||||
|
|
||||||
#include "qevent.h"
|
#include "qevent.h"
|
||||||
#include "qdesktopwidget.h"
|
#include "qdesktopwidget.h"
|
||||||
#include "qpushbutton.h"
|
|
||||||
#include "qapplication.h"
|
#include "qapplication.h"
|
||||||
#include "qlayout.h"
|
#include "qlayout.h"
|
||||||
#include "qsizegrip.h"
|
#include "qsizegrip.h"
|
||||||
@ -367,6 +366,7 @@ QDialog::~QDialog()
|
|||||||
default default button becomes the default button. This is what a
|
default default button becomes the default button. This is what a
|
||||||
push button calls when it loses focus.
|
push button calls when it loses focus.
|
||||||
*/
|
*/
|
||||||
|
#if QT_CONFIG(pushbutton)
|
||||||
void QDialogPrivate::setDefault(QPushButton *pushButton)
|
void QDialogPrivate::setDefault(QPushButton *pushButton)
|
||||||
{
|
{
|
||||||
Q_Q(QDialog);
|
Q_Q(QDialog);
|
||||||
@ -411,6 +411,7 @@ void QDialogPrivate::hideDefault()
|
|||||||
list.at(i)->setDefault(false);
|
list.at(i)->setDefault(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
void QDialogPrivate::resetModalitySetByOpen()
|
void QDialogPrivate::resetModalitySetByOpen()
|
||||||
{
|
{
|
||||||
@ -644,6 +645,7 @@ void QDialog::keyPressEvent(QKeyEvent *e)
|
|||||||
#endif
|
#endif
|
||||||
if (!e->modifiers() || (e->modifiers() & Qt::KeypadModifier && e->key() == Qt::Key_Enter)) {
|
if (!e->modifiers() || (e->modifiers() & Qt::KeypadModifier && e->key() == Qt::Key_Enter)) {
|
||||||
switch (e->key()) {
|
switch (e->key()) {
|
||||||
|
#if QT_CONFIG(pushbutton)
|
||||||
case Qt::Key_Enter:
|
case Qt::Key_Enter:
|
||||||
case Qt::Key_Return: {
|
case Qt::Key_Return: {
|
||||||
QList<QPushButton*> list = findChildren<QPushButton*>();
|
QList<QPushButton*> list = findChildren<QPushButton*>();
|
||||||
@ -657,6 +659,7 @@ void QDialog::keyPressEvent(QKeyEvent *e)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
#endif
|
||||||
default:
|
default:
|
||||||
e->ignore();
|
e->ignore();
|
||||||
return;
|
return;
|
||||||
@ -716,6 +719,7 @@ void QDialog::setVisible(bool visible)
|
|||||||
and actually catches most cases... If not, then they simply
|
and actually catches most cases... If not, then they simply
|
||||||
have to use [widget*]->setFocus() themselves...
|
have to use [widget*]->setFocus() themselves...
|
||||||
*/
|
*/
|
||||||
|
#if QT_CONFIG(pushbutton)
|
||||||
if (d->mainDef && fw->focusPolicy() == Qt::NoFocus) {
|
if (d->mainDef && fw->focusPolicy() == Qt::NoFocus) {
|
||||||
QWidget *first = fw;
|
QWidget *first = fw;
|
||||||
while ((first = first->nextInFocusChain()) != fw && first->focusPolicy() == Qt::NoFocus)
|
while ((first = first->nextInFocusChain()) != fw && first->focusPolicy() == Qt::NoFocus)
|
||||||
@ -733,6 +737,7 @@ void QDialog::setVisible(bool visible)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
if (fw && !fw->hasFocus()) {
|
if (fw && !fw->hasFocus()) {
|
||||||
QFocusEvent e(QEvent::FocusIn, Qt::TabFocusReason);
|
QFocusEvent e(QEvent::FocusIn, Qt::TabFocusReason);
|
||||||
QApplication::sendEvent(fw, &e);
|
QApplication::sendEvent(fw, &e);
|
||||||
@ -760,10 +765,12 @@ void QDialog::setVisible(bool visible)
|
|||||||
d->eventLoop->exit();
|
d->eventLoop->exit();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if QT_CONFIG(pushbutton)
|
||||||
const QPlatformTheme *theme = QGuiApplicationPrivate::platformTheme();
|
const QPlatformTheme *theme = QGuiApplicationPrivate::platformTheme();
|
||||||
if (d->mainDef && isActiveWindow()
|
if (d->mainDef && isActiveWindow()
|
||||||
&& theme->themeHint(QPlatformTheme::DialogSnapToDefaultButton).toBool())
|
&& theme->themeHint(QPlatformTheme::DialogSnapToDefaultButton).toBool())
|
||||||
QCursor::setPos(d->mainDef->mapToGlobal(d->mainDef->rect().center()));
|
QCursor::setPos(d->mainDef->mapToGlobal(d->mainDef->rect().center()));
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!\reimp */
|
/*!\reimp */
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user