Merge remote-tracking branch 'origin/5.12' into dev
Conflicts: .qmake.conf src/gui/painting/qdrawhelper.cpp src/gui/text/qdistancefield.cpp src/gui/text/qdistancefield_p.h src/network/ssl/qsslsocket_openssl.cpp src/plugins/platforms/android/qandroidinputcontext.cpp src/widgets/styles/qstylesheetstyle.cpp Done-With: Timur Pocheptsov <timur.pocheptsov@qt.io> Change-Id: Ia7daad21f077ea889898f17734ec46303e71fe6b
This commit is contained in:
commit
ef37ab9970
@ -82,7 +82,7 @@
|
||||
"force-pkg-config": { "type": "void", "name": "pkg-config" },
|
||||
"framework": "boolean",
|
||||
"gc-binaries": { "type": "boolean", "name": "gc_binaries" },
|
||||
"gdb-index": { "type": "boolean", "name": "gdb_index" },
|
||||
"gdb-index": { "type": "boolean", "name": "enable_gdb_index" },
|
||||
"gcc-sysroot": "boolean",
|
||||
"gcov": "boolean",
|
||||
"gnumake": { "type": "boolean", "name": "GNUmake" },
|
||||
|
83
dist/changes-5.12.4
vendored
Normal file
83
dist/changes-5.12.4
vendored
Normal file
@ -0,0 +1,83 @@
|
||||
Qt 5.12.4 is a bug-fix release. It maintains both forward and backward
|
||||
compatibility (source and binary) with Qt 5.12.0 through 5.12.3.
|
||||
|
||||
For more details, refer to the online documentation included in this
|
||||
distribution. The documentation is also available online:
|
||||
|
||||
https://doc.qt.io/qt-5/index.html
|
||||
|
||||
The Qt version 5.12 series is binary compatible with the 5.11.x series.
|
||||
Applications compiled for 5.11 will continue to run with 5.12.
|
||||
|
||||
Some of the changes listed in this file include issue tracking numbers
|
||||
corresponding to tasks in the Qt Bug Tracker:
|
||||
|
||||
https://bugreports.qt.io/
|
||||
|
||||
Each of these identifiers can be entered in the bug tracker to obtain more
|
||||
information about a particular change.
|
||||
|
||||
****************************************************************************
|
||||
* Platform Specific Changes *
|
||||
****************************************************************************
|
||||
|
||||
- X11 / XCB:
|
||||
* [QTBUG-45375] QTabletEvent coordinates now come from AbsX/AbsY
|
||||
valuators in the X11 event, in more precise 32.32 fixed-point format,
|
||||
scaled to fit the virtual desktop. It's possible to revert to using
|
||||
the legacy 16.16-format event_x/event_y coordinates as in previous
|
||||
releases by setting the QT_XCB_TABLET_LEGACY_COORDINATES environment
|
||||
variable.
|
||||
|
||||
****************************************************************************
|
||||
* QtCore *
|
||||
****************************************************************************
|
||||
|
||||
- Global:
|
||||
* [QTBUG-72073] Added the QT_NO_FLOAT16_OPERATORS macro in order to work
|
||||
around a Microsoft <= VS2017 compiler bug that is exposed when using
|
||||
std::bitset along with any Qt header that includes <qfloat16.h>.
|
||||
|
||||
- QDeadlineTimer:
|
||||
* [QTBUG-69750] Fixed integer overflows leading to immediate timeouts.
|
||||
|
||||
- QFile:
|
||||
* Made QFile::copy() issue a filesystem-synchronization system call,
|
||||
which would make it less likely to result in incomplete or corrupt
|
||||
files if the system reboots or uncleanly shuts down soon after the
|
||||
function returns. New code is advised to use QSaveFile instead, which
|
||||
also allows to display a progress report while copying.
|
||||
|
||||
- QFileInfo:
|
||||
* [QTBUG-63970][QTBUG-30401][QTBUG-20791] Fixed resolving of symbolic
|
||||
links to UNC shares on NTFS file systems.
|
||||
|
||||
- QMetaObject:
|
||||
* Non-copyable lambdas can now be used with invokeMethod(). For
|
||||
consistency reasons, the functor object is now always moved.
|
||||
|
||||
****************************************************************************
|
||||
* QtGui *
|
||||
****************************************************************************
|
||||
|
||||
- [QTBUG-73231] QWindow::mapToGlobal()/mapFromGlobal() now handle windows
|
||||
spanning screens correctly.
|
||||
|
||||
- [QTBUG-75522] QBezier: Fix possible endless loop when stroking curves
|
||||
|
||||
****************************************************************************
|
||||
* QtWidgets *
|
||||
****************************************************************************
|
||||
|
||||
- QMenu:
|
||||
* Shortcuts are again shown by default in context menus, except on
|
||||
macOS. They can be forced off by setting
|
||||
AA_DontShowShortcutsInContextMenus to true.
|
||||
|
||||
****************************************************************************
|
||||
* Third-Party Code *
|
||||
****************************************************************************
|
||||
|
||||
- libpng was updated to version 1.6.37
|
||||
- Updated QLocale to CLDR v35.1
|
||||
- Updated bundled SQLite to version 3.28.0
|
@ -30,7 +30,7 @@
|
||||
\title Class Wizard Example
|
||||
\ingroup examples-dialogs
|
||||
|
||||
\brief The License Wizard example shows how to implement linear
|
||||
\brief The Class Wizard example shows how to implement linear
|
||||
wizards using QWizard.
|
||||
|
||||
\image classwizard.png Screenshot of the Class Wizard example
|
||||
|
@ -28,7 +28,10 @@ CONFIG(release, debug|release) {
|
||||
}
|
||||
|
||||
load(link_ltcg)
|
||||
QMAKE_CFLAGS *= $$QMAKE_CFLAGS_LTCG
|
||||
QMAKE_CXXFLAGS *= $$QMAKE_CXXFLAGS_LTCG
|
||||
QMAKE_LFLAGS *= $$QMAKE_LFLAGS_LTCG
|
||||
QMAKE_CFLAGS -= $$QMAKE_CFLAGS_LTCG
|
||||
QMAKE_CFLAGS += $$QMAKE_CFLAGS_LTCG
|
||||
QMAKE_CXXFLAGS -= $$QMAKE_CXXFLAGS_LTCG
|
||||
QMAKE_CXXFLAGS += $$QMAKE_CXXFLAGS_LTCG
|
||||
QMAKE_LFLAGS -= $$QMAKE_LFLAGS_LTCG
|
||||
QMAKE_LFLAGS += $$QMAKE_LFLAGS_LTCG
|
||||
}
|
||||
|
@ -272,7 +272,7 @@ headersclean:!internal_module {
|
||||
hcleanFLAGS += -std=c++98
|
||||
}
|
||||
|
||||
hcleanCOMMAND = $$QMAKE_CXX -c $(CXXFLAGS) $$hcleanFLAGS $(INCPATH) $$hcleanDEFS -xc++ ${QMAKE_FILE_IN} -o ${QMAKE_FILE_OUT}
|
||||
hcleanCOMMAND = $(CXX) -c $(CXXFLAGS) $$hcleanFLAGS $(INCPATH) $$hcleanDEFS -xc++ ${QMAKE_FILE_IN} -o ${QMAKE_FILE_OUT}
|
||||
} else: msvc:!intel_icl {
|
||||
# 4180: qualifier applied to function type has no meaning; ignored
|
||||
# 4458: declaration of 'identifier' hides class member
|
||||
@ -284,7 +284,7 @@ headersclean:!internal_module {
|
||||
# 4577: 'noexcept' used with no exception handling mode specified; termination on exception is not guaranteed. Specify /EHsc
|
||||
greaterThan(QMAKE_MSC_VER, 18): hcleanFLAGS += -wd4577
|
||||
|
||||
hcleanCOMMAND = $$QMAKE_CXX -c $(CXXFLAGS) $$hcleanFLAGS $(INCPATH) $$hcleanDEFS -FI${QMAKE_FILE_IN} -Fo${QMAKE_FILE_OUT} \
|
||||
hcleanCOMMAND = $(CXX) -c $(CXXFLAGS) $$hcleanFLAGS $(INCPATH) $$hcleanDEFS -FI${QMAKE_FILE_IN} -Fo${QMAKE_FILE_OUT} \
|
||||
$$[QT_INSTALL_DATA/src]/mkspecs/features/data/dummy.cpp
|
||||
}
|
||||
|
||||
|
142
src/3rdparty/angle/src/libEGL/libEGL_mingw32.def
vendored
142
src/3rdparty/angle/src/libEGL/libEGL_mingw32.def
vendored
@ -1,77 +1,77 @@
|
||||
LIBRARY libEGL
|
||||
EXPORTS
|
||||
eglBindAPI @14
|
||||
eglBindTexImage @20
|
||||
eglChooseConfig @7
|
||||
eglCopyBuffers @33
|
||||
eglCreateContext @23
|
||||
eglCreatePbufferFromClientBuffer @18
|
||||
eglCreatePbufferSurface @10
|
||||
eglCreatePixmapSurface @11
|
||||
eglCreateWindowSurface @9
|
||||
eglDestroyContext @24
|
||||
eglDestroySurface @12
|
||||
eglGetConfigAttrib @8
|
||||
eglGetConfigs @6
|
||||
eglGetCurrentContext @26
|
||||
eglGetCurrentDisplay @28
|
||||
eglGetCurrentSurface @27
|
||||
eglGetDisplay @2
|
||||
eglGetError @1
|
||||
eglGetProcAddress @34
|
||||
eglInitialize @3
|
||||
eglMakeCurrent @25
|
||||
eglQueryAPI @15
|
||||
eglQueryContext @29
|
||||
eglQueryString @5
|
||||
eglQuerySurface @13
|
||||
eglReleaseTexImage @21
|
||||
eglReleaseThread @17
|
||||
eglSurfaceAttrib @19
|
||||
eglSwapBuffers @32
|
||||
eglSwapInterval @22
|
||||
eglTerminate @4
|
||||
eglWaitClient @16
|
||||
eglWaitGL @30
|
||||
eglWaitNative @31
|
||||
eglBindAPI@4 @14
|
||||
eglBindTexImage@12 @20
|
||||
eglChooseConfig@20 @7
|
||||
eglCopyBuffers@12 @33
|
||||
eglCreateContext@16 @23
|
||||
eglCreatePbufferFromClientBuffer@20 @18
|
||||
eglCreatePbufferSurface@12 @10
|
||||
eglCreatePixmapSurface@16 @11
|
||||
eglCreateWindowSurface@16 @9
|
||||
eglDestroyContext@8 @24
|
||||
eglDestroySurface@8 @12
|
||||
eglGetConfigAttrib@16 @8
|
||||
eglGetConfigs@16 @6
|
||||
eglGetCurrentContext@0 @26
|
||||
eglGetCurrentDisplay@0 @28
|
||||
eglGetCurrentSurface@4 @27
|
||||
eglGetDisplay@4 @2
|
||||
eglGetError@0 @1
|
||||
eglGetProcAddress@4 @34
|
||||
eglInitialize@12 @3
|
||||
eglMakeCurrent@16 @25
|
||||
eglQueryAPI@0 @15
|
||||
eglQueryContext@16 @29
|
||||
eglQueryString@8 @5
|
||||
eglQuerySurface@16 @13
|
||||
eglReleaseTexImage@12 @21
|
||||
eglReleaseThread@0 @17
|
||||
eglSurfaceAttrib@16 @19
|
||||
eglSwapBuffers@8 @32
|
||||
eglSwapInterval@8 @22
|
||||
eglTerminate@4 @4
|
||||
eglWaitClient@0 @16
|
||||
eglWaitGL@0 @30
|
||||
eglWaitNative@4 @31
|
||||
|
||||
; Extensions
|
||||
eglGetPlatformDisplayEXT @35
|
||||
eglQuerySurfacePointerANGLE @36
|
||||
eglPostSubBufferNV @37
|
||||
eglQueryDisplayAttribEXT @48
|
||||
eglQueryDeviceAttribEXT @49
|
||||
eglQueryDeviceStringEXT @50
|
||||
eglCreateImageKHR @51
|
||||
eglDestroyImageKHR @52
|
||||
eglCreateDeviceANGLE @53
|
||||
eglReleaseDeviceANGLE @54
|
||||
eglCreateStreamKHR @55
|
||||
eglDestroyStreamKHR @56
|
||||
eglStreamAttribKHR @57
|
||||
eglQueryStreamKHR @58
|
||||
eglQueryStreamu64KHR @59
|
||||
eglStreamConsumerGLTextureExternalKHR @60
|
||||
eglStreamConsumerAcquireKHR @61
|
||||
eglStreamConsumerReleaseKHR @62
|
||||
eglStreamConsumerGLTextureExternalAttribsNV @63
|
||||
eglCreateStreamProducerD3DTextureNV12ANGLE @64
|
||||
eglStreamPostD3DTextureNV12ANGLE @65
|
||||
eglGetSyncValuesCHROMIUM @66
|
||||
eglSwapBuffersWithDamageEXT @67
|
||||
eglProgramCacheGetAttribANGLE @68
|
||||
eglProgramCachePopulateANGLE @69
|
||||
eglProgramCacheQueryANGLE @70
|
||||
eglProgramCacheResizeANGLE @71
|
||||
eglGetPlatformDisplayEXT@12 @35
|
||||
eglQuerySurfacePointerANGLE@16 @36
|
||||
eglPostSubBufferNV@24 @37
|
||||
eglQueryDisplayAttribEXT@12 @48
|
||||
eglQueryDeviceAttribEXT@12 @49
|
||||
eglQueryDeviceStringEXT@8 @50
|
||||
eglCreateImageKHR@20 @51
|
||||
eglDestroyImageKHR@8 @52
|
||||
eglCreateDeviceANGLE@12 @53
|
||||
eglReleaseDeviceANGLE@4 @54
|
||||
eglCreateStreamKHR@8 @55
|
||||
eglDestroyStreamKHR@8 @56
|
||||
eglStreamAttribKHR@16 @57
|
||||
eglQueryStreamKHR@16 @58
|
||||
eglQueryStreamu64KHR@16 @59
|
||||
eglStreamConsumerGLTextureExternalKHR@8 @60
|
||||
eglStreamConsumerAcquireKHR@8 @61
|
||||
eglStreamConsumerReleaseKHR@8 @62
|
||||
eglStreamConsumerGLTextureExternalAttribsNV@12 @63
|
||||
eglCreateStreamProducerD3DTextureNV12ANGLE@12 @64
|
||||
eglStreamPostD3DTextureNV12ANGLE@16 @65
|
||||
eglGetSyncValuesCHROMIUM@20 @66
|
||||
eglSwapBuffersWithDamageEXT@16 @67
|
||||
eglProgramCacheGetAttribANGLE@8 @68
|
||||
eglProgramCachePopulateANGLE@20 @69
|
||||
eglProgramCacheQueryANGLE@24 @70
|
||||
eglProgramCacheResizeANGLE@12 @71
|
||||
|
||||
; 1.5 entry points
|
||||
eglCreateSync @38
|
||||
eglDestroySync @39
|
||||
eglClientWaitSync @40
|
||||
eglGetSyncAttrib @41
|
||||
eglCreateImage @42
|
||||
eglDestroyImage @43
|
||||
eglGetPlatformDisplay @44
|
||||
eglCreatePlatformWindowSurface @45
|
||||
eglCreatePlatformPixmapSurface @46
|
||||
eglWaitSync @47
|
||||
eglCreateSync@12 @38
|
||||
eglDestroySync@8 @39
|
||||
eglClientWaitSync@20 @40
|
||||
eglGetSyncAttrib@16 @41
|
||||
eglCreateImage@20 @42
|
||||
eglDestroyImage@8 @43
|
||||
eglGetPlatformDisplay@12 @44
|
||||
eglCreatePlatformWindowSurface@16 @45
|
||||
eglCreatePlatformPixmapSurface@16 @46
|
||||
eglWaitSync@12 @47
|
||||
|
142
src/3rdparty/angle/src/libEGL/libEGLd_mingw32.def
vendored
142
src/3rdparty/angle/src/libEGL/libEGLd_mingw32.def
vendored
@ -1,77 +1,77 @@
|
||||
LIBRARY libEGL
|
||||
EXPORTS
|
||||
eglBindAPI @14
|
||||
eglBindTexImage @20
|
||||
eglChooseConfig @7
|
||||
eglCopyBuffers @33
|
||||
eglCreateContext @23
|
||||
eglCreatePbufferFromClientBuffer @18
|
||||
eglCreatePbufferSurface @10
|
||||
eglCreatePixmapSurface @11
|
||||
eglCreateWindowSurface @9
|
||||
eglDestroyContext @24
|
||||
eglDestroySurface @12
|
||||
eglGetConfigAttrib @8
|
||||
eglGetConfigs @6
|
||||
eglGetCurrentContext @26
|
||||
eglGetCurrentDisplay @28
|
||||
eglGetCurrentSurface @27
|
||||
eglGetDisplay @2
|
||||
eglGetError @1
|
||||
eglGetProcAddress @34
|
||||
eglInitialize @3
|
||||
eglMakeCurrent @25
|
||||
eglQueryAPI @15
|
||||
eglQueryContext @29
|
||||
eglQueryString @5
|
||||
eglQuerySurface @13
|
||||
eglReleaseTexImage @21
|
||||
eglReleaseThread @17
|
||||
eglSurfaceAttrib @19
|
||||
eglSwapBuffers @32
|
||||
eglSwapInterval @22
|
||||
eglTerminate @4
|
||||
eglWaitClient @16
|
||||
eglWaitGL @30
|
||||
eglWaitNative @31
|
||||
eglBindAPI@4 @14
|
||||
eglBindTexImage@12 @20
|
||||
eglChooseConfig@20 @7
|
||||
eglCopyBuffers@12 @33
|
||||
eglCreateContext@16 @23
|
||||
eglCreatePbufferFromClientBuffer@20 @18
|
||||
eglCreatePbufferSurface@12 @10
|
||||
eglCreatePixmapSurface@16 @11
|
||||
eglCreateWindowSurface@16 @9
|
||||
eglDestroyContext@8 @24
|
||||
eglDestroySurface@8 @12
|
||||
eglGetConfigAttrib@16 @8
|
||||
eglGetConfigs@16 @6
|
||||
eglGetCurrentContext@0 @26
|
||||
eglGetCurrentDisplay@0 @28
|
||||
eglGetCurrentSurface@4 @27
|
||||
eglGetDisplay@4 @2
|
||||
eglGetError@0 @1
|
||||
eglGetProcAddress@4 @34
|
||||
eglInitialize@12 @3
|
||||
eglMakeCurrent@16 @25
|
||||
eglQueryAPI@0 @15
|
||||
eglQueryContext@16 @29
|
||||
eglQueryString@8 @5
|
||||
eglQuerySurface@16 @13
|
||||
eglReleaseTexImage@12 @21
|
||||
eglReleaseThread@0 @17
|
||||
eglSurfaceAttrib@16 @19
|
||||
eglSwapBuffers@8 @32
|
||||
eglSwapInterval@8 @22
|
||||
eglTerminate@4 @4
|
||||
eglWaitClient@0 @16
|
||||
eglWaitGL@0 @30
|
||||
eglWaitNative@4 @31
|
||||
|
||||
; Extensions
|
||||
eglGetPlatformDisplayEXT @35
|
||||
eglQuerySurfacePointerANGLE @36
|
||||
eglPostSubBufferNV @37
|
||||
eglQueryDisplayAttribEXT @48
|
||||
eglQueryDeviceAttribEXT @49
|
||||
eglQueryDeviceStringEXT @50
|
||||
eglCreateImageKHR @51
|
||||
eglDestroyImageKHR @52
|
||||
eglCreateDeviceANGLE @53
|
||||
eglReleaseDeviceANGLE @54
|
||||
eglCreateStreamKHR @55
|
||||
eglDestroyStreamKHR @56
|
||||
eglStreamAttribKHR @57
|
||||
eglQueryStreamKHR @58
|
||||
eglQueryStreamu64KHR @59
|
||||
eglStreamConsumerGLTextureExternalKHR @60
|
||||
eglStreamConsumerAcquireKHR @61
|
||||
eglStreamConsumerReleaseKHR @62
|
||||
eglStreamConsumerGLTextureExternalAttribsNV @63
|
||||
eglCreateStreamProducerD3DTextureNV12ANGLE @64
|
||||
eglStreamPostD3DTextureNV12ANGLE @65
|
||||
eglGetSyncValuesCHROMIUM @66
|
||||
eglSwapBuffersWithDamageEXT @67
|
||||
eglProgramCacheGetAttribANGLE @68
|
||||
eglProgramCachePopulateANGLE @69
|
||||
eglProgramCacheQueryANGLE @70
|
||||
eglProgramCacheResizeANGLE @71
|
||||
eglGetPlatformDisplayEXT@12 @35
|
||||
eglQuerySurfacePointerANGLE@16 @36
|
||||
eglPostSubBufferNV@24 @37
|
||||
eglQueryDisplayAttribEXT@12 @48
|
||||
eglQueryDeviceAttribEXT@12 @49
|
||||
eglQueryDeviceStringEXT@8 @50
|
||||
eglCreateImageKHR@20 @51
|
||||
eglDestroyImageKHR@8 @52
|
||||
eglCreateDeviceANGLE@12 @53
|
||||
eglReleaseDeviceANGLE@4 @54
|
||||
eglCreateStreamKHR@8 @55
|
||||
eglDestroyStreamKHR@8 @56
|
||||
eglStreamAttribKHR@16 @57
|
||||
eglQueryStreamKHR@16 @58
|
||||
eglQueryStreamu64KHR@16 @59
|
||||
eglStreamConsumerGLTextureExternalKHR@8 @60
|
||||
eglStreamConsumerAcquireKHR@8 @61
|
||||
eglStreamConsumerReleaseKHR@8 @62
|
||||
eglStreamConsumerGLTextureExternalAttribsNV@12 @63
|
||||
eglCreateStreamProducerD3DTextureNV12ANGLE@12 @64
|
||||
eglStreamPostD3DTextureNV12ANGLE@16 @65
|
||||
eglGetSyncValuesCHROMIUM@20 @66
|
||||
eglSwapBuffersWithDamageEXT@16 @67
|
||||
eglProgramCacheGetAttribANGLE@8 @68
|
||||
eglProgramCachePopulateANGLE@20 @69
|
||||
eglProgramCacheQueryANGLE@24 @70
|
||||
eglProgramCacheResizeANGLE@12 @71
|
||||
|
||||
; 1.5 entry points
|
||||
eglCreateSync @38
|
||||
eglDestroySync @39
|
||||
eglClientWaitSync @40
|
||||
eglGetSyncAttrib @41
|
||||
eglCreateImage @42
|
||||
eglDestroyImage @43
|
||||
eglGetPlatformDisplay @44
|
||||
eglCreatePlatformWindowSurface @45
|
||||
eglCreatePlatformPixmapSurface @46
|
||||
eglWaitSync @47
|
||||
eglCreateSync@12 @38
|
||||
eglDestroySync@8 @39
|
||||
eglClientWaitSync@20 @40
|
||||
eglGetSyncAttrib@16 @41
|
||||
eglCreateImage@20 @42
|
||||
eglDestroyImage@8 @43
|
||||
eglGetPlatformDisplay@12 @44
|
||||
eglCreatePlatformWindowSurface@16 @45
|
||||
eglCreatePlatformPixmapSurface@16 @46
|
||||
eglWaitSync@12 @47
|
||||
|
@ -1,412 +1,411 @@
|
||||
LIBRARY libGLESv2
|
||||
EXPORTS
|
||||
glActiveTexture @1
|
||||
glAttachShader @2
|
||||
glBindAttribLocation @3
|
||||
glBindBuffer @4
|
||||
glBindFramebuffer @5
|
||||
glBindRenderbuffer @6
|
||||
glBindTexture @7
|
||||
glBlendColor @8
|
||||
glBlendEquation @9
|
||||
glBlendEquationSeparate @10
|
||||
glBlendFunc @11
|
||||
glBlendFuncSeparate @12
|
||||
glBufferData @13
|
||||
glBufferSubData @14
|
||||
glCheckFramebufferStatus @15
|
||||
glClear @16
|
||||
glClearColor @17
|
||||
glClearDepthf @18
|
||||
glClearStencil @19
|
||||
glColorMask @20
|
||||
glCompileShader @21
|
||||
glCompressedTexImage2D @22
|
||||
glCompressedTexSubImage2D @23
|
||||
glCopyTexImage2D @24
|
||||
glCopyTexSubImage2D @25
|
||||
glCreateProgram @26
|
||||
glCreateShader @27
|
||||
glCullFace @28
|
||||
glDeleteBuffers @29
|
||||
glDeleteFramebuffers @30
|
||||
glDeleteProgram @32
|
||||
glDeleteRenderbuffers @33
|
||||
glDeleteShader @34
|
||||
glDeleteTextures @31
|
||||
glDepthFunc @36
|
||||
glDepthMask @37
|
||||
glDepthRangef @38
|
||||
glDetachShader @35
|
||||
glDisable @39
|
||||
glDisableVertexAttribArray @40
|
||||
glDrawArrays @41
|
||||
glDrawElements @42
|
||||
glEnable @43
|
||||
glEnableVertexAttribArray @44
|
||||
glFinish @45
|
||||
glFlush @46
|
||||
glFramebufferRenderbuffer @47
|
||||
glFramebufferTexture2D @48
|
||||
glFrontFace @49
|
||||
glGenBuffers @50
|
||||
glGenFramebuffers @52
|
||||
glGenRenderbuffers @53
|
||||
glGenTextures @54
|
||||
glGenerateMipmap @51
|
||||
glGetActiveAttrib @55
|
||||
glGetActiveUniform @56
|
||||
glGetAttachedShaders @57
|
||||
glGetAttribLocation @58
|
||||
glGetBooleanv @59
|
||||
glGetBufferParameteriv @60
|
||||
glGetError @61
|
||||
glGetFloatv @62
|
||||
glGetFramebufferAttachmentParameteriv @63
|
||||
glGetIntegerv @64
|
||||
glGetProgramInfoLog @66
|
||||
glGetProgramiv @65
|
||||
glGetRenderbufferParameteriv @67
|
||||
glGetShaderInfoLog @69
|
||||
glGetShaderPrecisionFormat @70
|
||||
glGetShaderSource @71
|
||||
glGetShaderiv @68
|
||||
glGetString @72
|
||||
glGetTexParameterfv @73
|
||||
glGetTexParameteriv @74
|
||||
glGetUniformLocation @77
|
||||
glGetUniformfv @75
|
||||
glGetUniformiv @76
|
||||
glGetVertexAttribPointerv @80
|
||||
glGetVertexAttribfv @78
|
||||
glGetVertexAttribiv @79
|
||||
glHint @81
|
||||
glIsBuffer @82
|
||||
glIsEnabled @83
|
||||
glIsFramebuffer @84
|
||||
glIsProgram @85
|
||||
glIsRenderbuffer @86
|
||||
glIsShader @87
|
||||
glIsTexture @88
|
||||
glLineWidth @89
|
||||
glLinkProgram @90
|
||||
glPixelStorei @91
|
||||
glPolygonOffset @92
|
||||
glReadPixels @93
|
||||
glReleaseShaderCompiler @94
|
||||
glRenderbufferStorage @95
|
||||
glSampleCoverage @96
|
||||
glScissor @97
|
||||
glShaderBinary @98
|
||||
glShaderSource @99
|
||||
glStencilFunc @100
|
||||
glStencilFuncSeparate @101
|
||||
glStencilMask @102
|
||||
glStencilMaskSeparate @103
|
||||
glStencilOp @104
|
||||
glStencilOpSeparate @105
|
||||
glTexImage2D @106
|
||||
glTexParameterf @107
|
||||
glTexParameterfv @108
|
||||
glTexParameteri @109
|
||||
glTexParameteriv @110
|
||||
glTexSubImage2D @111
|
||||
glUniform1f @112
|
||||
glUniform1fv @113
|
||||
glUniform1i @114
|
||||
glUniform1iv @115
|
||||
glUniform2f @116
|
||||
glUniform2fv @117
|
||||
glUniform2i @118
|
||||
glUniform2iv @119
|
||||
glUniform3f @120
|
||||
glUniform3fv @121
|
||||
glUniform3i @122
|
||||
glUniform3iv @123
|
||||
glUniform4f @124
|
||||
glUniform4fv @125
|
||||
glUniform4i @126
|
||||
glUniform4iv @127
|
||||
glUniformMatrix2fv @128
|
||||
glUniformMatrix3fv @129
|
||||
glUniformMatrix4fv @130
|
||||
glUseProgram @131
|
||||
glValidateProgram @132
|
||||
glVertexAttrib1f @133
|
||||
glVertexAttrib1fv @134
|
||||
glVertexAttrib2f @135
|
||||
glVertexAttrib2fv @136
|
||||
glVertexAttrib3f @137
|
||||
glVertexAttrib3fv @138
|
||||
glVertexAttrib4f @139
|
||||
glVertexAttrib4fv @140
|
||||
glVertexAttribPointer @141
|
||||
glViewport @142
|
||||
glActiveTexture@4 @1
|
||||
glAttachShader@8 @2
|
||||
glBindAttribLocation@12 @3
|
||||
glBindBuffer@8 @4
|
||||
glBindFramebuffer@8 @5
|
||||
glBindRenderbuffer@8 @6
|
||||
glBindTexture@8 @7
|
||||
glBlendColor@16 @8
|
||||
glBlendEquation@4 @9
|
||||
glBlendEquationSeparate@8 @10
|
||||
glBlendFunc@8 @11
|
||||
glBlendFuncSeparate@16 @12
|
||||
glBufferData@16 @13
|
||||
glBufferSubData@16 @14
|
||||
glCheckFramebufferStatus@4 @15
|
||||
glClear@4 @16
|
||||
glClearColor@16 @17
|
||||
glClearDepthf@4 @18
|
||||
glClearStencil@4 @19
|
||||
glColorMask@16 @20
|
||||
glCompileShader@4 @21
|
||||
glCompressedTexImage2D@32 @22
|
||||
glCompressedTexSubImage2D@36 @23
|
||||
glCopyTexImage2D@32 @24
|
||||
glCopyTexSubImage2D@32 @25
|
||||
glCreateProgram@0 @26
|
||||
glCreateShader@4 @27
|
||||
glCullFace@4 @28
|
||||
glDeleteBuffers@8 @29
|
||||
glDeleteFramebuffers@8 @30
|
||||
glDeleteProgram@4 @32
|
||||
glDeleteRenderbuffers@8 @33
|
||||
glDeleteShader@4 @34
|
||||
glDeleteTextures@8 @31
|
||||
glDepthFunc@4 @36
|
||||
glDepthMask@4 @37
|
||||
glDepthRangef@8 @38
|
||||
glDetachShader@8 @35
|
||||
glDisable@4 @39
|
||||
glDisableVertexAttribArray@4 @40
|
||||
glDrawArrays@12 @41
|
||||
glDrawElements@16 @42
|
||||
glEnable@4 @43
|
||||
glEnableVertexAttribArray@4 @44
|
||||
glFinish@0 @45
|
||||
glFlush@0 @46
|
||||
glFramebufferRenderbuffer@16 @47
|
||||
glFramebufferTexture2D@20 @48
|
||||
glFrontFace@4 @49
|
||||
glGenBuffers@8 @50
|
||||
glGenFramebuffers@8 @52
|
||||
glGenRenderbuffers@8 @53
|
||||
glGenTextures@8 @54
|
||||
glGenerateMipmap@4 @51
|
||||
glGetActiveAttrib@28 @55
|
||||
glGetActiveUniform@28 @56
|
||||
glGetAttachedShaders@16 @57
|
||||
glGetAttribLocation@8 @58
|
||||
glGetBooleanv@8 @59
|
||||
glGetBufferParameteriv@12 @60
|
||||
glGetError@0 @61
|
||||
glGetFloatv@8 @62
|
||||
glGetFramebufferAttachmentParameteriv@16 @63
|
||||
glGetIntegerv@8 @64
|
||||
glGetProgramInfoLog@16 @66
|
||||
glGetProgramiv@12 @65
|
||||
glGetRenderbufferParameteriv@12 @67
|
||||
glGetShaderInfoLog@16 @69
|
||||
glGetShaderPrecisionFormat@16 @70
|
||||
glGetShaderSource@16 @71
|
||||
glGetShaderiv@12 @68
|
||||
glGetString@4 @72
|
||||
glGetTexParameterfv@12 @73
|
||||
glGetTexParameteriv@12 @74
|
||||
glGetUniformLocation@8 @77
|
||||
glGetUniformfv@12 @75
|
||||
glGetUniformiv@12 @76
|
||||
glGetVertexAttribPointerv@12 @80
|
||||
glGetVertexAttribfv@12 @78
|
||||
glGetVertexAttribiv@12 @79
|
||||
glHint@8 @81
|
||||
glIsBuffer@4 @82
|
||||
glIsEnabled@4 @83
|
||||
glIsFramebuffer@4 @84
|
||||
glIsProgram@4 @85
|
||||
glIsRenderbuffer@4 @86
|
||||
glIsShader@4 @87
|
||||
glIsTexture@4 @88
|
||||
glLineWidth@4 @89
|
||||
glLinkProgram@4 @90
|
||||
glPixelStorei@8 @91
|
||||
glPolygonOffset@8 @92
|
||||
glReadPixels@28 @93
|
||||
glReleaseShaderCompiler@0 @94
|
||||
glRenderbufferStorage@16 @95
|
||||
glSampleCoverage@8 @96
|
||||
glScissor@16 @97
|
||||
glShaderBinary@20 @98
|
||||
glShaderSource@16 @99
|
||||
glStencilFunc@12 @100
|
||||
glStencilFuncSeparate@16 @101
|
||||
glStencilMask@4 @102
|
||||
glStencilMaskSeparate@8 @103
|
||||
glStencilOp@12 @104
|
||||
glStencilOpSeparate@16 @105
|
||||
glTexImage2D@36 @106
|
||||
glTexParameterf@12 @107
|
||||
glTexParameterfv@12 @108
|
||||
glTexParameteri@12 @109
|
||||
glTexParameteriv@12 @110
|
||||
glTexSubImage2D@36 @111
|
||||
glUniform1f@8 @112
|
||||
glUniform1fv@12 @113
|
||||
glUniform1i@8 @114
|
||||
glUniform1iv@12 @115
|
||||
glUniform2f@12 @116
|
||||
glUniform2fv@12 @117
|
||||
glUniform2i@12 @118
|
||||
glUniform2iv@12 @119
|
||||
glUniform3f@16 @120
|
||||
glUniform3fv@12 @121
|
||||
glUniform3i@16 @122
|
||||
glUniform3iv@12 @123
|
||||
glUniform4f@20 @124
|
||||
glUniform4fv@12 @125
|
||||
glUniform4i@20 @126
|
||||
glUniform4iv@12 @127
|
||||
glUniformMatrix2fv@16 @128
|
||||
glUniformMatrix3fv@16 @129
|
||||
glUniformMatrix4fv@16 @130
|
||||
glUseProgram@4 @131
|
||||
glValidateProgram@4 @132
|
||||
glVertexAttrib1f@8 @133
|
||||
glVertexAttrib1fv@8 @134
|
||||
glVertexAttrib2f@12 @135
|
||||
glVertexAttrib2fv@8 @136
|
||||
glVertexAttrib3f@16 @137
|
||||
glVertexAttrib3fv@8 @138
|
||||
glVertexAttrib4f@20 @139
|
||||
glVertexAttrib4fv@8 @140
|
||||
glVertexAttribPointer@24 @141
|
||||
glViewport@16 @142
|
||||
|
||||
; Extensions
|
||||
glBlitFramebufferANGLE @149
|
||||
glRenderbufferStorageMultisampleANGLE @150
|
||||
glDeleteFencesNV @151
|
||||
glFinishFenceNV @152
|
||||
glGenFencesNV @153
|
||||
glGetFenceivNV @154
|
||||
glIsFenceNV @155
|
||||
glSetFenceNV @156
|
||||
glTestFenceNV @157
|
||||
glGetTranslatedShaderSourceANGLE @159
|
||||
glTexStorage2DEXT @160
|
||||
glGetGraphicsResetStatusEXT @161
|
||||
glReadnPixelsEXT @162
|
||||
glGetnUniformfvEXT @163
|
||||
glGetnUniformivEXT @164
|
||||
glGenQueriesEXT @165
|
||||
glDeleteQueriesEXT @166
|
||||
glIsQueryEXT @167
|
||||
glBeginQueryEXT @168
|
||||
glEndQueryEXT @169
|
||||
glGetQueryivEXT @170
|
||||
glGetQueryObjectuivEXT @171
|
||||
glVertexAttribDivisorANGLE @172
|
||||
glDrawArraysInstancedANGLE @173
|
||||
glDrawElementsInstancedANGLE @174
|
||||
glProgramBinaryOES @175
|
||||
glGetProgramBinaryOES @176
|
||||
glDrawBuffersEXT @179
|
||||
glMapBufferOES @285
|
||||
glUnmapBufferOES @286
|
||||
glGetBufferPointervOES @287
|
||||
glMapBufferRangeEXT @288
|
||||
glFlushMappedBufferRangeEXT @289
|
||||
glDiscardFramebufferEXT @293
|
||||
glInsertEventMarkerEXT @294
|
||||
glPushGroupMarkerEXT @295
|
||||
glPopGroupMarkerEXT @296
|
||||
glEGLImageTargetTexture2DOES @297
|
||||
glEGLImageTargetRenderbufferStorageOES @298
|
||||
glBindVertexArrayOES @299
|
||||
glDeleteVertexArraysOES @300
|
||||
glGenVertexArraysOES @301
|
||||
glIsVertexArrayOES @302
|
||||
glDebugMessageControlKHR @303
|
||||
glDebugMessageInsertKHR @304
|
||||
glDebugMessageCallbackKHR @305
|
||||
glGetDebugMessageLogKHR @306
|
||||
glPushDebugGroupKHR @307
|
||||
glPopDebugGroupKHR @308
|
||||
glObjectLabelKHR @309
|
||||
glGetObjectLabelKHR @310
|
||||
glObjectPtrLabelKHR @311
|
||||
glGetObjectPtrLabelKHR @312
|
||||
glGetPointervKHR @313
|
||||
glQueryCounterEXT @314
|
||||
glGetQueryObjectivEXT @315
|
||||
glGetQueryObjecti64vEXT @316
|
||||
glGetQueryObjectui64vEXT @317
|
||||
glBindUniformLocationCHROMIUM @318
|
||||
glCoverageModulationCHROMIUM @319
|
||||
glBlitFramebufferANGLE@40 @149
|
||||
glRenderbufferStorageMultisampleANGLE@20 @150
|
||||
glDeleteFencesNV@8 @151
|
||||
glFinishFenceNV@4 @152
|
||||
glGenFencesNV@8 @153
|
||||
glGetFenceivNV@12 @154
|
||||
glIsFenceNV@4 @155
|
||||
glSetFenceNV@8 @156
|
||||
glTestFenceNV@4 @157
|
||||
glGetTranslatedShaderSourceANGLE@16 @159
|
||||
glTexStorage2DEXT@20 @160
|
||||
glGetGraphicsResetStatusEXT@0 @161
|
||||
glReadnPixelsEXT@32 @162
|
||||
glGetnUniformfvEXT@16 @163
|
||||
glGetnUniformivEXT@16 @164
|
||||
glGenQueriesEXT@8 @165
|
||||
glDeleteQueriesEXT@8 @166
|
||||
glIsQueryEXT@4 @167
|
||||
glBeginQueryEXT@8 @168
|
||||
glEndQueryEXT@4 @169
|
||||
glGetQueryivEXT@12 @170
|
||||
glGetQueryObjectuivEXT@12 @171
|
||||
glVertexAttribDivisorANGLE@8 @172
|
||||
glDrawArraysInstancedANGLE@16 @173
|
||||
glDrawElementsInstancedANGLE@20 @174
|
||||
glProgramBinaryOES@16 @175
|
||||
glGetProgramBinaryOES@20 @176
|
||||
glDrawBuffersEXT@8 @179
|
||||
glMapBufferOES@8 @285
|
||||
glUnmapBufferOES@4 @286
|
||||
glGetBufferPointervOES@12 @287
|
||||
glMapBufferRangeEXT@16 @288
|
||||
glFlushMappedBufferRangeEXT@12 @289
|
||||
glDiscardFramebufferEXT@12 @293
|
||||
glInsertEventMarkerEXT@8 @294
|
||||
glPushGroupMarkerEXT@8 @295
|
||||
glPopGroupMarkerEXT@0 @296
|
||||
glEGLImageTargetTexture2DOES@8 @297
|
||||
glEGLImageTargetRenderbufferStorageOES@8 @298
|
||||
glBindVertexArrayOES@4 @299
|
||||
glDeleteVertexArraysOES@8 @300
|
||||
glGenVertexArraysOES@8 @301
|
||||
glIsVertexArrayOES@4 @302
|
||||
glDebugMessageControlKHR@24 @303
|
||||
glDebugMessageInsertKHR@24 @304
|
||||
glDebugMessageCallbackKHR@8 @305
|
||||
glGetDebugMessageLogKHR@32 @306
|
||||
glPushDebugGroupKHR@16 @307
|
||||
glPopDebugGroupKHR@0 @308
|
||||
glObjectLabelKHR@16 @309
|
||||
glGetObjectLabelKHR@20 @310
|
||||
glObjectPtrLabelKHR@12 @311
|
||||
glGetObjectPtrLabelKHR@16 @312
|
||||
glGetPointervKHR@8 @313
|
||||
glQueryCounterEXT@8 @314
|
||||
glGetQueryObjectivEXT@12 @315
|
||||
glGetQueryObjecti64vEXT@12 @316
|
||||
glGetQueryObjectui64vEXT@12 @317
|
||||
glBindUniformLocationCHROMIUM@12 @318
|
||||
glCoverageModulationCHROMIUM@4 @319
|
||||
glMatrixLoadfCHROMIUM@8 @320
|
||||
glMatrixLoadIdentityCHROMIUM@4 @321
|
||||
glGenPathsCHROMIUM@4 @322
|
||||
glDeletePathsCHROMIUM@8 @323
|
||||
glIsPathCHROMIUM@4 @324
|
||||
glPathCommandsCHROMIUM@24 @325
|
||||
glPathParameterfCHROMIUM@12 @326
|
||||
glPathParameteriCHROMIUM@12 @327
|
||||
glGetPathParameterfvCHROMIUM@12 @328
|
||||
glGetPathParameterivCHROMIUM@12 @329
|
||||
glPathStencilFuncCHROMIUM@12 @330
|
||||
glStencilFillPathCHROMIUM@12 @331
|
||||
glStencilStrokePathCHROMIUM@12 @332
|
||||
glCoverFillPathCHROMIUM@8 @333
|
||||
glCoverStrokePathCHROMIUM@8 @334
|
||||
glStencilThenCoverFillPathCHROMIUM@16 @335
|
||||
glStencilThenCoverStrokePathCHROMIUM@16 @336
|
||||
glCoverFillPathInstancedCHROMIUM@28 @337
|
||||
glCoverStrokePathInstancedCHROMIUM@28 @338
|
||||
glStencilStrokePathInstancedCHROMIUM@32 @339
|
||||
glStencilFillPathInstancedCHROMIUM@32 @340
|
||||
glStencilThenCoverFillPathInstancedCHROMIUM@36 @341
|
||||
glStencilThenCoverStrokePathInstancedCHROMIUM@36 @342
|
||||
glBindFragmentInputLocationCHROMIUM@12 @343
|
||||
glProgramPathFragmentInputGenCHROMIUM@20 @344
|
||||
|
||||
glMatrixLoadfCHROMIUM @320
|
||||
glMatrixLoadIdentityCHROMIUM @321
|
||||
glGenPathsCHROMIUM @322
|
||||
glDeletePathsCHROMIUM @323
|
||||
glIsPathCHROMIUM @324
|
||||
glPathCommandsCHROMIUM @325
|
||||
glPathParameterfCHROMIUM @326
|
||||
glPathParameteriCHROMIUM @327
|
||||
glGetPathParameterfvCHROMIUM @328
|
||||
glGetPathParameterivCHROMIUM @329
|
||||
glPathStencilFuncCHROMIUM @330
|
||||
glStencilFillPathCHROMIUM @331
|
||||
glStencilStrokePathCHROMIUM @332
|
||||
glCoverFillPathCHROMIUM @333
|
||||
glCoverStrokePathCHROMIUM @334
|
||||
glStencilThenCoverFillPathCHROMIUM @335
|
||||
glStencilThenCoverStrokePathCHROMIUM @336
|
||||
glCoverFillPathInstancedCHROMIUM @337
|
||||
glCoverStrokePathInstancedCHROMIUM @338
|
||||
glStencilStrokePathInstancedCHROMIUM @339
|
||||
glStencilFillPathInstancedCHROMIUM @340
|
||||
glStencilThenCoverFillPathInstancedCHROMIUM @341
|
||||
glStencilThenCoverStrokePathInstancedCHROMIUM @342
|
||||
glBindFragmentInputLocationCHROMIUM @343
|
||||
glProgramPathFragmentInputGenCHROMIUM @344
|
||||
|
||||
glFramebufferTextureMultiviewLayeredANGLE @413
|
||||
glFramebufferTextureMultiviewSideBySideANGLE @414
|
||||
glRequestExtensionANGLE @415
|
||||
glFramebufferTextureMultiviewLayeredANGLE@24 @413
|
||||
glFramebufferTextureMultiviewSideBySideANGLE@24 @414
|
||||
glRequestExtensionANGLE@4 @415
|
||||
|
||||
; GLES 3.0 Functions
|
||||
glReadBuffer @180
|
||||
glDrawRangeElements @181
|
||||
glTexImage3D @182
|
||||
glTexSubImage3D @183
|
||||
glCopyTexSubImage3D @184
|
||||
glCompressedTexImage3D @185
|
||||
glCompressedTexSubImage3D @186
|
||||
glGenQueries @187
|
||||
glDeleteQueries @188
|
||||
glIsQuery @189
|
||||
glBeginQuery @190
|
||||
glEndQuery @191
|
||||
glGetQueryiv @192
|
||||
glGetQueryObjectuiv @193
|
||||
glUnmapBuffer @194
|
||||
glGetBufferPointerv @195
|
||||
glDrawBuffers @196
|
||||
glUniformMatrix2x3fv @197
|
||||
glUniformMatrix3x2fv @198
|
||||
glUniformMatrix2x4fv @199
|
||||
glUniformMatrix4x2fv @200
|
||||
glUniformMatrix3x4fv @201
|
||||
glUniformMatrix4x3fv @202
|
||||
glBlitFramebuffer @203
|
||||
glRenderbufferStorageMultisample @204
|
||||
glFramebufferTextureLayer @205
|
||||
glMapBufferRange @206
|
||||
glFlushMappedBufferRange @207
|
||||
glBindVertexArray @208
|
||||
glDeleteVertexArrays @209
|
||||
glGenVertexArrays @210
|
||||
glIsVertexArray @211
|
||||
glGetIntegeri_v @212
|
||||
glBeginTransformFeedback @213
|
||||
glEndTransformFeedback @214
|
||||
glBindBufferRange @215
|
||||
glBindBufferBase @216
|
||||
glTransformFeedbackVaryings @217
|
||||
glGetTransformFeedbackVarying @218
|
||||
glVertexAttribIPointer @219
|
||||
glGetVertexAttribIiv @220
|
||||
glGetVertexAttribIuiv @221
|
||||
glVertexAttribI4i @222
|
||||
glVertexAttribI4ui @223
|
||||
glVertexAttribI4iv @224
|
||||
glVertexAttribI4uiv @225
|
||||
glGetUniformuiv @226
|
||||
glGetFragDataLocation @227
|
||||
glUniform1ui @228
|
||||
glUniform2ui @229
|
||||
glUniform3ui @230
|
||||
glUniform4ui @231
|
||||
glUniform1uiv @232
|
||||
glUniform2uiv @233
|
||||
glUniform3uiv @234
|
||||
glUniform4uiv @235
|
||||
glClearBufferiv @236
|
||||
glClearBufferuiv @237
|
||||
glClearBufferfv @238
|
||||
glClearBufferfi @239
|
||||
glGetStringi @240
|
||||
glCopyBufferSubData @241
|
||||
glGetUniformIndices @242
|
||||
glGetActiveUniformsiv @243
|
||||
glGetUniformBlockIndex @244
|
||||
glGetActiveUniformBlockiv @245
|
||||
glGetActiveUniformBlockName @246
|
||||
glUniformBlockBinding @247
|
||||
glDrawArraysInstanced @248
|
||||
glDrawElementsInstanced @249
|
||||
glFenceSync @250
|
||||
glIsSync @251
|
||||
glDeleteSync @252
|
||||
glClientWaitSync @253
|
||||
glWaitSync @254
|
||||
glGetInteger64v @255
|
||||
glGetSynciv @256
|
||||
glGetInteger64i_v @257
|
||||
glGetBufferParameteri64v @258
|
||||
glGenSamplers @259
|
||||
glDeleteSamplers @260
|
||||
glIsSampler @261
|
||||
glBindSampler @262
|
||||
glSamplerParameteri @263
|
||||
glSamplerParameteriv @264
|
||||
glSamplerParameterf @265
|
||||
glSamplerParameterfv @266
|
||||
glGetSamplerParameteriv @267
|
||||
glGetSamplerParameterfv @268
|
||||
glVertexAttribDivisor @269
|
||||
glBindTransformFeedback @270
|
||||
glDeleteTransformFeedbacks @271
|
||||
glGenTransformFeedbacks @272
|
||||
glIsTransformFeedback @273
|
||||
glPauseTransformFeedback @274
|
||||
glResumeTransformFeedback @275
|
||||
glGetProgramBinary @276
|
||||
glProgramBinary @277
|
||||
glProgramParameteri @278
|
||||
glInvalidateFramebuffer @279
|
||||
glInvalidateSubFramebuffer @280
|
||||
glTexStorage2D @281
|
||||
glTexStorage3D @282
|
||||
glGetInternalformativ @283
|
||||
glReadBuffer@4 @180
|
||||
glDrawRangeElements@24 @181
|
||||
glTexImage3D@40 @182
|
||||
glTexSubImage3D@44 @183
|
||||
glCopyTexSubImage3D@36 @184
|
||||
glCompressedTexImage3D@36 @185
|
||||
glCompressedTexSubImage3D@44 @186
|
||||
glGenQueries@8 @187
|
||||
glDeleteQueries@8 @188
|
||||
glIsQuery@4 @189
|
||||
glBeginQuery@8 @190
|
||||
glEndQuery@4 @191
|
||||
glGetQueryiv@12 @192
|
||||
glGetQueryObjectuiv@12 @193
|
||||
glUnmapBuffer@4 @194
|
||||
glGetBufferPointerv@12 @195
|
||||
glDrawBuffers@8 @196
|
||||
glUniformMatrix2x3fv@16 @197
|
||||
glUniformMatrix3x2fv@16 @198
|
||||
glUniformMatrix2x4fv@16 @199
|
||||
glUniformMatrix4x2fv@16 @200
|
||||
glUniformMatrix3x4fv@16 @201
|
||||
glUniformMatrix4x3fv@16 @202
|
||||
glBlitFramebuffer@40 @203
|
||||
glRenderbufferStorageMultisample@20 @204
|
||||
glFramebufferTextureLayer@20 @205
|
||||
glMapBufferRange@16 @206
|
||||
glFlushMappedBufferRange@12 @207
|
||||
glBindVertexArray@4 @208
|
||||
glDeleteVertexArrays@8 @209
|
||||
glGenVertexArrays@8 @210
|
||||
glIsVertexArray@4 @211
|
||||
glGetIntegeri_v@12 @212
|
||||
glBeginTransformFeedback@4 @213
|
||||
glEndTransformFeedback@0 @214
|
||||
glBindBufferRange@20 @215
|
||||
glBindBufferBase@12 @216
|
||||
glTransformFeedbackVaryings@16 @217
|
||||
glGetTransformFeedbackVarying@28 @218
|
||||
glVertexAttribIPointer@20 @219
|
||||
glGetVertexAttribIiv@12 @220
|
||||
glGetVertexAttribIuiv@12 @221
|
||||
glVertexAttribI4i@20 @222
|
||||
glVertexAttribI4ui@20 @223
|
||||
glVertexAttribI4iv@8 @224
|
||||
glVertexAttribI4uiv@8 @225
|
||||
glGetUniformuiv@12 @226
|
||||
glGetFragDataLocation@8 @227
|
||||
glUniform1ui@8 @228
|
||||
glUniform2ui@12 @229
|
||||
glUniform3ui@16 @230
|
||||
glUniform4ui@20 @231
|
||||
glUniform1uiv@12 @232
|
||||
glUniform2uiv@12 @233
|
||||
glUniform3uiv@12 @234
|
||||
glUniform4uiv@12 @235
|
||||
glClearBufferiv@12 @236
|
||||
glClearBufferuiv@12 @237
|
||||
glClearBufferfv@12 @238
|
||||
glClearBufferfi@16 @239
|
||||
glGetStringi@8 @240
|
||||
glCopyBufferSubData@20 @241
|
||||
glGetUniformIndices@16 @242
|
||||
glGetActiveUniformsiv@20 @243
|
||||
glGetUniformBlockIndex@8 @244
|
||||
glGetActiveUniformBlockiv@16 @245
|
||||
glGetActiveUniformBlockName@20 @246
|
||||
glUniformBlockBinding@12 @247
|
||||
glDrawArraysInstanced@16 @248
|
||||
glDrawElementsInstanced@20 @249
|
||||
glFenceSync@8 @250
|
||||
glIsSync@4 @251
|
||||
glDeleteSync@4 @252
|
||||
glClientWaitSync@16 @253
|
||||
glWaitSync@16 @254
|
||||
glGetInteger64v@8 @255
|
||||
glGetSynciv@20 @256
|
||||
glGetInteger64i_v@12 @257
|
||||
glGetBufferParameteri64v@12 @258
|
||||
glGenSamplers@8 @259
|
||||
glDeleteSamplers@8 @260
|
||||
glIsSampler@4 @261
|
||||
glBindSampler@8 @262
|
||||
glSamplerParameteri@12 @263
|
||||
glSamplerParameteriv@12 @264
|
||||
glSamplerParameterf@12 @265
|
||||
glSamplerParameterfv@12 @266
|
||||
glGetSamplerParameteriv@12 @267
|
||||
glGetSamplerParameterfv@12 @268
|
||||
glVertexAttribDivisor@8 @269
|
||||
glBindTransformFeedback@8 @270
|
||||
glDeleteTransformFeedbacks@8 @271
|
||||
glGenTransformFeedbacks@8 @272
|
||||
glIsTransformFeedback@4 @273
|
||||
glPauseTransformFeedback@0 @274
|
||||
glResumeTransformFeedback@0 @275
|
||||
glGetProgramBinary@20 @276
|
||||
glProgramBinary@16 @277
|
||||
glProgramParameteri@12 @278
|
||||
glInvalidateFramebuffer@12 @279
|
||||
glInvalidateSubFramebuffer@28 @280
|
||||
glTexStorage2D@20 @281
|
||||
glTexStorage3D@24 @282
|
||||
glGetInternalformativ@20 @283
|
||||
|
||||
; GLES 3.1 Functions
|
||||
glDispatchCompute @345
|
||||
glDispatchComputeIndirect @346
|
||||
glDrawArraysIndirect @347
|
||||
glDrawElementsIndirect @348
|
||||
glFramebufferParameteri @349
|
||||
glGetFramebufferParameteriv @350
|
||||
glGetProgramInterfaceiv @351
|
||||
glGetProgramResourceIndex @352
|
||||
glGetProgramResourceName @353
|
||||
glGetProgramResourceiv @354
|
||||
glGetProgramResourceLocation @355
|
||||
glUseProgramStages @356
|
||||
glActiveShaderProgram @357
|
||||
glCreateShaderProgramv @358
|
||||
glBindProgramPipeline @359
|
||||
glDeleteProgramPipelines @360
|
||||
glGenProgramPipelines @361
|
||||
glIsProgramPipeline @362
|
||||
glGetProgramPipelineiv @363
|
||||
glProgramUniform1i @364
|
||||
glProgramUniform2i @365
|
||||
glProgramUniform3i @366
|
||||
glProgramUniform4i @367
|
||||
glProgramUniform1ui @368
|
||||
glProgramUniform2ui @369
|
||||
glProgramUniform3ui @370
|
||||
glProgramUniform4ui @371
|
||||
glProgramUniform1f @372
|
||||
glProgramUniform2f @373
|
||||
glProgramUniform3f @374
|
||||
glProgramUniform4f @375
|
||||
glProgramUniform1iv @376
|
||||
glProgramUniform2iv @377
|
||||
glProgramUniform3iv @378
|
||||
glProgramUniform4iv @379
|
||||
glProgramUniform1uiv @380
|
||||
glProgramUniform2uiv @381
|
||||
glProgramUniform3uiv @382
|
||||
glProgramUniform4uiv @383
|
||||
glProgramUniform1fv @384
|
||||
glProgramUniform2fv @385
|
||||
glProgramUniform3fv @386
|
||||
glProgramUniform4fv @387
|
||||
glProgramUniformMatrix2fv @388
|
||||
glProgramUniformMatrix3fv @389
|
||||
glProgramUniformMatrix4fv @390
|
||||
glProgramUniformMatrix2x3fv @391
|
||||
glProgramUniformMatrix3x2fv @392
|
||||
glProgramUniformMatrix2x4fv @393
|
||||
glProgramUniformMatrix4x2fv @394
|
||||
glProgramUniformMatrix3x4fv @395
|
||||
glProgramUniformMatrix4x3fv @396
|
||||
glValidateProgramPipeline @397
|
||||
glGetProgramPipelineInfoLog @398
|
||||
glBindImageTexture @399
|
||||
glGetBooleani_v @400
|
||||
glMemoryBarrier @401
|
||||
glMemoryBarrierByRegion @402
|
||||
glTexStorage2DMultisample @403
|
||||
glGetMultisamplefv @404
|
||||
glSampleMaski @405
|
||||
glGetTexLevelParameteriv @406
|
||||
glGetTexLevelParameterfv @407
|
||||
glBindVertexBuffer @408
|
||||
glVertexAttribFormat @409
|
||||
glVertexAttribIFormat @410
|
||||
glVertexAttribBinding @411
|
||||
glVertexBindingDivisor @412
|
||||
glDispatchCompute@12 @345
|
||||
glDispatchComputeIndirect@4 @346
|
||||
glDrawArraysIndirect@8 @347
|
||||
glDrawElementsIndirect@12 @348
|
||||
glFramebufferParameteri@12 @349
|
||||
glGetFramebufferParameteriv@12 @350
|
||||
glGetProgramInterfaceiv@16 @351
|
||||
glGetProgramResourceIndex@12 @352
|
||||
glGetProgramResourceName@24 @353
|
||||
glGetProgramResourceiv@32 @354
|
||||
glGetProgramResourceLocation@12 @355
|
||||
glUseProgramStages@12 @356
|
||||
glActiveShaderProgram@8 @357
|
||||
glCreateShaderProgramv@12 @358
|
||||
glBindProgramPipeline@4 @359
|
||||
glDeleteProgramPipelines@8 @360
|
||||
glGenProgramPipelines@8 @361
|
||||
glIsProgramPipeline@4 @362
|
||||
glGetProgramPipelineiv@12 @363
|
||||
glProgramUniform1i@12 @364
|
||||
glProgramUniform2i@16 @365
|
||||
glProgramUniform3i@20 @366
|
||||
glProgramUniform4i@24 @367
|
||||
glProgramUniform1ui@12 @368
|
||||
glProgramUniform2ui@16 @369
|
||||
glProgramUniform3ui@20 @370
|
||||
glProgramUniform4ui@24 @371
|
||||
glProgramUniform1f@12 @372
|
||||
glProgramUniform2f@16 @373
|
||||
glProgramUniform3f@20 @374
|
||||
glProgramUniform4f@24 @375
|
||||
glProgramUniform1iv@16 @376
|
||||
glProgramUniform2iv@16 @377
|
||||
glProgramUniform3iv@16 @378
|
||||
glProgramUniform4iv@16 @379
|
||||
glProgramUniform1uiv@16 @380
|
||||
glProgramUniform2uiv@16 @381
|
||||
glProgramUniform3uiv@16 @382
|
||||
glProgramUniform4uiv@16 @383
|
||||
glProgramUniform1fv@16 @384
|
||||
glProgramUniform2fv@16 @385
|
||||
glProgramUniform3fv@16 @386
|
||||
glProgramUniform4fv@16 @387
|
||||
glProgramUniformMatrix2fv@20 @388
|
||||
glProgramUniformMatrix3fv@20 @389
|
||||
glProgramUniformMatrix4fv@20 @390
|
||||
glProgramUniformMatrix2x3fv@20 @391
|
||||
glProgramUniformMatrix3x2fv@20 @392
|
||||
glProgramUniformMatrix2x4fv@20 @393
|
||||
glProgramUniformMatrix4x2fv@20 @394
|
||||
glProgramUniformMatrix3x4fv@20 @395
|
||||
glProgramUniformMatrix4x3fv@20 @396
|
||||
glValidateProgramPipeline@4 @397
|
||||
glGetProgramPipelineInfoLog@16 @398
|
||||
glBindImageTexture@28 @399
|
||||
glGetBooleani_v@12 @400
|
||||
glMemoryBarrier@4 @401
|
||||
glMemoryBarrierByRegion@4 @402
|
||||
glTexStorage2DMultisample@24 @403
|
||||
glGetMultisamplefv@12 @404
|
||||
glSampleMaski@8 @405
|
||||
glGetTexLevelParameteriv@16 @406
|
||||
glGetTexLevelParameterfv@16 @407
|
||||
glBindVertexBuffer@16 @408
|
||||
glVertexAttribFormat@20 @409
|
||||
glVertexAttribIFormat@16 @410
|
||||
glVertexAttribBinding@8 @411
|
||||
glVertexBindingDivisor@8 @412
|
||||
|
@ -1,412 +1,411 @@
|
||||
LIBRARY libGLESv2
|
||||
EXPORTS
|
||||
glActiveTexture @1
|
||||
glAttachShader @2
|
||||
glBindAttribLocation @3
|
||||
glBindBuffer @4
|
||||
glBindFramebuffer @5
|
||||
glBindRenderbuffer @6
|
||||
glBindTexture @7
|
||||
glBlendColor @8
|
||||
glBlendEquation @9
|
||||
glBlendEquationSeparate @10
|
||||
glBlendFunc @11
|
||||
glBlendFuncSeparate @12
|
||||
glBufferData @13
|
||||
glBufferSubData @14
|
||||
glCheckFramebufferStatus @15
|
||||
glClear @16
|
||||
glClearColor @17
|
||||
glClearDepthf @18
|
||||
glClearStencil @19
|
||||
glColorMask @20
|
||||
glCompileShader @21
|
||||
glCompressedTexImage2D @22
|
||||
glCompressedTexSubImage2D @23
|
||||
glCopyTexImage2D @24
|
||||
glCopyTexSubImage2D @25
|
||||
glCreateProgram @26
|
||||
glCreateShader @27
|
||||
glCullFace @28
|
||||
glDeleteBuffers @29
|
||||
glDeleteFramebuffers @30
|
||||
glDeleteProgram @32
|
||||
glDeleteRenderbuffers @33
|
||||
glDeleteShader @34
|
||||
glDeleteTextures @31
|
||||
glDepthFunc @36
|
||||
glDepthMask @37
|
||||
glDepthRangef @38
|
||||
glDetachShader @35
|
||||
glDisable @39
|
||||
glDisableVertexAttribArray @40
|
||||
glDrawArrays @41
|
||||
glDrawElements @42
|
||||
glEnable @43
|
||||
glEnableVertexAttribArray @44
|
||||
glFinish @45
|
||||
glFlush @46
|
||||
glFramebufferRenderbuffer @47
|
||||
glFramebufferTexture2D @48
|
||||
glFrontFace @49
|
||||
glGenBuffers @50
|
||||
glGenFramebuffers @52
|
||||
glGenRenderbuffers @53
|
||||
glGenTextures @54
|
||||
glGenerateMipmap @51
|
||||
glGetActiveAttrib @55
|
||||
glGetActiveUniform @56
|
||||
glGetAttachedShaders @57
|
||||
glGetAttribLocation @58
|
||||
glGetBooleanv @59
|
||||
glGetBufferParameteriv @60
|
||||
glGetError @61
|
||||
glGetFloatv @62
|
||||
glGetFramebufferAttachmentParameteriv @63
|
||||
glGetIntegerv @64
|
||||
glGetProgramInfoLog @66
|
||||
glGetProgramiv @65
|
||||
glGetRenderbufferParameteriv @67
|
||||
glGetShaderInfoLog @69
|
||||
glGetShaderPrecisionFormat @70
|
||||
glGetShaderSource @71
|
||||
glGetShaderiv @68
|
||||
glGetString @72
|
||||
glGetTexParameterfv @73
|
||||
glGetTexParameteriv @74
|
||||
glGetUniformLocation @77
|
||||
glGetUniformfv @75
|
||||
glGetUniformiv @76
|
||||
glGetVertexAttribPointerv @80
|
||||
glGetVertexAttribfv @78
|
||||
glGetVertexAttribiv @79
|
||||
glHint @81
|
||||
glIsBuffer @82
|
||||
glIsEnabled @83
|
||||
glIsFramebuffer @84
|
||||
glIsProgram @85
|
||||
glIsRenderbuffer @86
|
||||
glIsShader @87
|
||||
glIsTexture @88
|
||||
glLineWidth @89
|
||||
glLinkProgram @90
|
||||
glPixelStorei @91
|
||||
glPolygonOffset @92
|
||||
glReadPixels @93
|
||||
glReleaseShaderCompiler @94
|
||||
glRenderbufferStorage @95
|
||||
glSampleCoverage @96
|
||||
glScissor @97
|
||||
glShaderBinary @98
|
||||
glShaderSource @99
|
||||
glStencilFunc @100
|
||||
glStencilFuncSeparate @101
|
||||
glStencilMask @102
|
||||
glStencilMaskSeparate @103
|
||||
glStencilOp @104
|
||||
glStencilOpSeparate @105
|
||||
glTexImage2D @106
|
||||
glTexParameterf @107
|
||||
glTexParameterfv @108
|
||||
glTexParameteri @109
|
||||
glTexParameteriv @110
|
||||
glTexSubImage2D @111
|
||||
glUniform1f @112
|
||||
glUniform1fv @113
|
||||
glUniform1i @114
|
||||
glUniform1iv @115
|
||||
glUniform2f @116
|
||||
glUniform2fv @117
|
||||
glUniform2i @118
|
||||
glUniform2iv @119
|
||||
glUniform3f @120
|
||||
glUniform3fv @121
|
||||
glUniform3i @122
|
||||
glUniform3iv @123
|
||||
glUniform4f @124
|
||||
glUniform4fv @125
|
||||
glUniform4i @126
|
||||
glUniform4iv @127
|
||||
glUniformMatrix2fv @128
|
||||
glUniformMatrix3fv @129
|
||||
glUniformMatrix4fv @130
|
||||
glUseProgram @131
|
||||
glValidateProgram @132
|
||||
glVertexAttrib1f @133
|
||||
glVertexAttrib1fv @134
|
||||
glVertexAttrib2f @135
|
||||
glVertexAttrib2fv @136
|
||||
glVertexAttrib3f @137
|
||||
glVertexAttrib3fv @138
|
||||
glVertexAttrib4f @139
|
||||
glVertexAttrib4fv @140
|
||||
glVertexAttribPointer @141
|
||||
glViewport @142
|
||||
glActiveTexture@4 @1
|
||||
glAttachShader@8 @2
|
||||
glBindAttribLocation@12 @3
|
||||
glBindBuffer@8 @4
|
||||
glBindFramebuffer@8 @5
|
||||
glBindRenderbuffer@8 @6
|
||||
glBindTexture@8 @7
|
||||
glBlendColor@16 @8
|
||||
glBlendEquation@4 @9
|
||||
glBlendEquationSeparate@8 @10
|
||||
glBlendFunc@8 @11
|
||||
glBlendFuncSeparate@16 @12
|
||||
glBufferData@16 @13
|
||||
glBufferSubData@16 @14
|
||||
glCheckFramebufferStatus@4 @15
|
||||
glClear@4 @16
|
||||
glClearColor@16 @17
|
||||
glClearDepthf@4 @18
|
||||
glClearStencil@4 @19
|
||||
glColorMask@16 @20
|
||||
glCompileShader@4 @21
|
||||
glCompressedTexImage2D@32 @22
|
||||
glCompressedTexSubImage2D@36 @23
|
||||
glCopyTexImage2D@32 @24
|
||||
glCopyTexSubImage2D@32 @25
|
||||
glCreateProgram@0 @26
|
||||
glCreateShader@4 @27
|
||||
glCullFace@4 @28
|
||||
glDeleteBuffers@8 @29
|
||||
glDeleteFramebuffers@8 @30
|
||||
glDeleteProgram@4 @32
|
||||
glDeleteRenderbuffers@8 @33
|
||||
glDeleteShader@4 @34
|
||||
glDeleteTextures@8 @31
|
||||
glDepthFunc@4 @36
|
||||
glDepthMask@4 @37
|
||||
glDepthRangef@8 @38
|
||||
glDetachShader@8 @35
|
||||
glDisable@4 @39
|
||||
glDisableVertexAttribArray@4 @40
|
||||
glDrawArrays@12 @41
|
||||
glDrawElements@16 @42
|
||||
glEnable@4 @43
|
||||
glEnableVertexAttribArray@4 @44
|
||||
glFinish@0 @45
|
||||
glFlush@0 @46
|
||||
glFramebufferRenderbuffer@16 @47
|
||||
glFramebufferTexture2D@20 @48
|
||||
glFrontFace@4 @49
|
||||
glGenBuffers@8 @50
|
||||
glGenFramebuffers@8 @52
|
||||
glGenRenderbuffers@8 @53
|
||||
glGenTextures@8 @54
|
||||
glGenerateMipmap@4 @51
|
||||
glGetActiveAttrib@28 @55
|
||||
glGetActiveUniform@28 @56
|
||||
glGetAttachedShaders@16 @57
|
||||
glGetAttribLocation@8 @58
|
||||
glGetBooleanv@8 @59
|
||||
glGetBufferParameteriv@12 @60
|
||||
glGetError@0 @61
|
||||
glGetFloatv@8 @62
|
||||
glGetFramebufferAttachmentParameteriv@16 @63
|
||||
glGetIntegerv@8 @64
|
||||
glGetProgramInfoLog@16 @66
|
||||
glGetProgramiv@12 @65
|
||||
glGetRenderbufferParameteriv@12 @67
|
||||
glGetShaderInfoLog@16 @69
|
||||
glGetShaderPrecisionFormat@16 @70
|
||||
glGetShaderSource@16 @71
|
||||
glGetShaderiv@12 @68
|
||||
glGetString@4 @72
|
||||
glGetTexParameterfv@12 @73
|
||||
glGetTexParameteriv@12 @74
|
||||
glGetUniformLocation@8 @77
|
||||
glGetUniformfv@12 @75
|
||||
glGetUniformiv@12 @76
|
||||
glGetVertexAttribPointerv@12 @80
|
||||
glGetVertexAttribfv@12 @78
|
||||
glGetVertexAttribiv@12 @79
|
||||
glHint@8 @81
|
||||
glIsBuffer@4 @82
|
||||
glIsEnabled@4 @83
|
||||
glIsFramebuffer@4 @84
|
||||
glIsProgram@4 @85
|
||||
glIsRenderbuffer@4 @86
|
||||
glIsShader@4 @87
|
||||
glIsTexture@4 @88
|
||||
glLineWidth@4 @89
|
||||
glLinkProgram@4 @90
|
||||
glPixelStorei@8 @91
|
||||
glPolygonOffset@8 @92
|
||||
glReadPixels@28 @93
|
||||
glReleaseShaderCompiler@0 @94
|
||||
glRenderbufferStorage@16 @95
|
||||
glSampleCoverage@8 @96
|
||||
glScissor@16 @97
|
||||
glShaderBinary@20 @98
|
||||
glShaderSource@16 @99
|
||||
glStencilFunc@12 @100
|
||||
glStencilFuncSeparate@16 @101
|
||||
glStencilMask@4 @102
|
||||
glStencilMaskSeparate@8 @103
|
||||
glStencilOp@12 @104
|
||||
glStencilOpSeparate@16 @105
|
||||
glTexImage2D@36 @106
|
||||
glTexParameterf@12 @107
|
||||
glTexParameterfv@12 @108
|
||||
glTexParameteri@12 @109
|
||||
glTexParameteriv@12 @110
|
||||
glTexSubImage2D@36 @111
|
||||
glUniform1f@8 @112
|
||||
glUniform1fv@12 @113
|
||||
glUniform1i@8 @114
|
||||
glUniform1iv@12 @115
|
||||
glUniform2f@12 @116
|
||||
glUniform2fv@12 @117
|
||||
glUniform2i@12 @118
|
||||
glUniform2iv@12 @119
|
||||
glUniform3f@16 @120
|
||||
glUniform3fv@12 @121
|
||||
glUniform3i@16 @122
|
||||
glUniform3iv@12 @123
|
||||
glUniform4f@20 @124
|
||||
glUniform4fv@12 @125
|
||||
glUniform4i@20 @126
|
||||
glUniform4iv@12 @127
|
||||
glUniformMatrix2fv@16 @128
|
||||
glUniformMatrix3fv@16 @129
|
||||
glUniformMatrix4fv@16 @130
|
||||
glUseProgram@4 @131
|
||||
glValidateProgram@4 @132
|
||||
glVertexAttrib1f@8 @133
|
||||
glVertexAttrib1fv@8 @134
|
||||
glVertexAttrib2f@12 @135
|
||||
glVertexAttrib2fv@8 @136
|
||||
glVertexAttrib3f@16 @137
|
||||
glVertexAttrib3fv@8 @138
|
||||
glVertexAttrib4f@20 @139
|
||||
glVertexAttrib4fv@8 @140
|
||||
glVertexAttribPointer@24 @141
|
||||
glViewport@16 @142
|
||||
|
||||
; Extensions
|
||||
glBlitFramebufferANGLE @149
|
||||
glRenderbufferStorageMultisampleANGLE @150
|
||||
glDeleteFencesNV @151
|
||||
glFinishFenceNV @152
|
||||
glGenFencesNV @153
|
||||
glGetFenceivNV @154
|
||||
glIsFenceNV @155
|
||||
glSetFenceNV @156
|
||||
glTestFenceNV @157
|
||||
glGetTranslatedShaderSourceANGLE @159
|
||||
glTexStorage2DEXT @160
|
||||
glGetGraphicsResetStatusEXT @161
|
||||
glReadnPixelsEXT @162
|
||||
glGetnUniformfvEXT @163
|
||||
glGetnUniformivEXT @164
|
||||
glGenQueriesEXT @165
|
||||
glDeleteQueriesEXT @166
|
||||
glIsQueryEXT @167
|
||||
glBeginQueryEXT @168
|
||||
glEndQueryEXT @169
|
||||
glGetQueryivEXT @170
|
||||
glGetQueryObjectuivEXT @171
|
||||
glVertexAttribDivisorANGLE @172
|
||||
glDrawArraysInstancedANGLE @173
|
||||
glDrawElementsInstancedANGLE @174
|
||||
glProgramBinaryOES @175
|
||||
glGetProgramBinaryOES @176
|
||||
glDrawBuffersEXT @179
|
||||
glMapBufferOES @285
|
||||
glUnmapBufferOES @286
|
||||
glGetBufferPointervOES @287
|
||||
glMapBufferRangeEXT @288
|
||||
glFlushMappedBufferRangeEXT @289
|
||||
glDiscardFramebufferEXT @293
|
||||
glInsertEventMarkerEXT @294
|
||||
glPushGroupMarkerEXT @295
|
||||
glPopGroupMarkerEXT @296
|
||||
glEGLImageTargetTexture2DOES @297
|
||||
glEGLImageTargetRenderbufferStorageOES @298
|
||||
glBindVertexArrayOES @299
|
||||
glDeleteVertexArraysOES @300
|
||||
glGenVertexArraysOES @301
|
||||
glIsVertexArrayOES @302
|
||||
glDebugMessageControlKHR @303
|
||||
glDebugMessageInsertKHR @304
|
||||
glDebugMessageCallbackKHR @305
|
||||
glGetDebugMessageLogKHR @306
|
||||
glPushDebugGroupKHR @307
|
||||
glPopDebugGroupKHR @308
|
||||
glObjectLabelKHR @309
|
||||
glGetObjectLabelKHR @310
|
||||
glObjectPtrLabelKHR @311
|
||||
glGetObjectPtrLabelKHR @312
|
||||
glGetPointervKHR @313
|
||||
glQueryCounterEXT @314
|
||||
glGetQueryObjectivEXT @315
|
||||
glGetQueryObjecti64vEXT @316
|
||||
glGetQueryObjectui64vEXT @317
|
||||
glBindUniformLocationCHROMIUM @318
|
||||
glCoverageModulationCHROMIUM @319
|
||||
glBlitFramebufferANGLE@40 @149
|
||||
glRenderbufferStorageMultisampleANGLE@20 @150
|
||||
glDeleteFencesNV@8 @151
|
||||
glFinishFenceNV@4 @152
|
||||
glGenFencesNV@8 @153
|
||||
glGetFenceivNV@12 @154
|
||||
glIsFenceNV@4 @155
|
||||
glSetFenceNV@8 @156
|
||||
glTestFenceNV@4 @157
|
||||
glGetTranslatedShaderSourceANGLE@16 @159
|
||||
glTexStorage2DEXT@20 @160
|
||||
glGetGraphicsResetStatusEXT@0 @161
|
||||
glReadnPixelsEXT@32 @162
|
||||
glGetnUniformfvEXT@16 @163
|
||||
glGetnUniformivEXT@16 @164
|
||||
glGenQueriesEXT@8 @165
|
||||
glDeleteQueriesEXT@8 @166
|
||||
glIsQueryEXT@4 @167
|
||||
glBeginQueryEXT@8 @168
|
||||
glEndQueryEXT@4 @169
|
||||
glGetQueryivEXT@12 @170
|
||||
glGetQueryObjectuivEXT@12 @171
|
||||
glVertexAttribDivisorANGLE@8 @172
|
||||
glDrawArraysInstancedANGLE@16 @173
|
||||
glDrawElementsInstancedANGLE@20 @174
|
||||
glProgramBinaryOES@16 @175
|
||||
glGetProgramBinaryOES@20 @176
|
||||
glDrawBuffersEXT@8 @179
|
||||
glMapBufferOES@8 @285
|
||||
glUnmapBufferOES@4 @286
|
||||
glGetBufferPointervOES@12 @287
|
||||
glMapBufferRangeEXT@16 @288
|
||||
glFlushMappedBufferRangeEXT@12 @289
|
||||
glDiscardFramebufferEXT@12 @293
|
||||
glInsertEventMarkerEXT@8 @294
|
||||
glPushGroupMarkerEXT@8 @295
|
||||
glPopGroupMarkerEXT@0 @296
|
||||
glEGLImageTargetTexture2DOES@8 @297
|
||||
glEGLImageTargetRenderbufferStorageOES@8 @298
|
||||
glBindVertexArrayOES@4 @299
|
||||
glDeleteVertexArraysOES@8 @300
|
||||
glGenVertexArraysOES@8 @301
|
||||
glIsVertexArrayOES@4 @302
|
||||
glDebugMessageControlKHR@24 @303
|
||||
glDebugMessageInsertKHR@24 @304
|
||||
glDebugMessageCallbackKHR@8 @305
|
||||
glGetDebugMessageLogKHR@32 @306
|
||||
glPushDebugGroupKHR@16 @307
|
||||
glPopDebugGroupKHR@0 @308
|
||||
glObjectLabelKHR@16 @309
|
||||
glGetObjectLabelKHR@20 @310
|
||||
glObjectPtrLabelKHR@12 @311
|
||||
glGetObjectPtrLabelKHR@16 @312
|
||||
glGetPointervKHR@8 @313
|
||||
glQueryCounterEXT@8 @314
|
||||
glGetQueryObjectivEXT@12 @315
|
||||
glGetQueryObjecti64vEXT@12 @316
|
||||
glGetQueryObjectui64vEXT@12 @317
|
||||
glBindUniformLocationCHROMIUM@12 @318
|
||||
glCoverageModulationCHROMIUM@4 @319
|
||||
glMatrixLoadfCHROMIUM@8 @320
|
||||
glMatrixLoadIdentityCHROMIUM@4 @321
|
||||
glGenPathsCHROMIUM@4 @322
|
||||
glDeletePathsCHROMIUM@8 @323
|
||||
glIsPathCHROMIUM@4 @324
|
||||
glPathCommandsCHROMIUM@24 @325
|
||||
glPathParameterfCHROMIUM@12 @326
|
||||
glPathParameteriCHROMIUM@12 @327
|
||||
glGetPathParameterfvCHROMIUM@12 @328
|
||||
glGetPathParameterivCHROMIUM@12 @329
|
||||
glPathStencilFuncCHROMIUM@12 @330
|
||||
glStencilFillPathCHROMIUM@12 @331
|
||||
glStencilStrokePathCHROMIUM@12 @332
|
||||
glCoverFillPathCHROMIUM@8 @333
|
||||
glCoverStrokePathCHROMIUM@8 @334
|
||||
glStencilThenCoverFillPathCHROMIUM@16 @335
|
||||
glStencilThenCoverStrokePathCHROMIUM@16 @336
|
||||
glCoverFillPathInstancedCHROMIUM@28 @337
|
||||
glCoverStrokePathInstancedCHROMIUM@28 @338
|
||||
glStencilStrokePathInstancedCHROMIUM@32 @339
|
||||
glStencilFillPathInstancedCHROMIUM@32 @340
|
||||
glStencilThenCoverFillPathInstancedCHROMIUM@36 @341
|
||||
glStencilThenCoverStrokePathInstancedCHROMIUM@36 @342
|
||||
glBindFragmentInputLocationCHROMIUM@12 @343
|
||||
glProgramPathFragmentInputGenCHROMIUM@20 @344
|
||||
|
||||
glMatrixLoadfCHROMIUM @320
|
||||
glMatrixLoadIdentityCHROMIUM @321
|
||||
glGenPathsCHROMIUM @322
|
||||
glDeletePathsCHROMIUM @323
|
||||
glIsPathCHROMIUM @324
|
||||
glPathCommandsCHROMIUM @325
|
||||
glPathParameterfCHROMIUM @326
|
||||
glPathParameteriCHROMIUM @327
|
||||
glGetPathParameterfvCHROMIUM @328
|
||||
glGetPathParameterivCHROMIUM @329
|
||||
glPathStencilFuncCHROMIUM @330
|
||||
glStencilFillPathCHROMIUM @331
|
||||
glStencilStrokePathCHROMIUM @332
|
||||
glCoverFillPathCHROMIUM @333
|
||||
glCoverStrokePathCHROMIUM @334
|
||||
glStencilThenCoverFillPathCHROMIUM @335
|
||||
glStencilThenCoverStrokePathCHROMIUM @336
|
||||
glCoverFillPathInstancedCHROMIUM @337
|
||||
glCoverStrokePathInstancedCHROMIUM @338
|
||||
glStencilStrokePathInstancedCHROMIUM @339
|
||||
glStencilFillPathInstancedCHROMIUM @340
|
||||
glStencilThenCoverFillPathInstancedCHROMIUM @341
|
||||
glStencilThenCoverStrokePathInstancedCHROMIUM @342
|
||||
glBindFragmentInputLocationCHROMIUM @343
|
||||
glProgramPathFragmentInputGenCHROMIUM @344
|
||||
|
||||
glFramebufferTextureMultiviewLayeredANGLE @413
|
||||
glFramebufferTextureMultiviewSideBySideANGLE @414
|
||||
glRequestExtensionANGLE @415
|
||||
glFramebufferTextureMultiviewLayeredANGLE@24 @413
|
||||
glFramebufferTextureMultiviewSideBySideANGLE@24 @414
|
||||
glRequestExtensionANGLE@4 @415
|
||||
|
||||
; GLES 3.0 Functions
|
||||
glReadBuffer @180
|
||||
glDrawRangeElements @181
|
||||
glTexImage3D @182
|
||||
glTexSubImage3D @183
|
||||
glCopyTexSubImage3D @184
|
||||
glCompressedTexImage3D @185
|
||||
glCompressedTexSubImage3D @186
|
||||
glGenQueries @187
|
||||
glDeleteQueries @188
|
||||
glIsQuery @189
|
||||
glBeginQuery @190
|
||||
glEndQuery @191
|
||||
glGetQueryiv @192
|
||||
glGetQueryObjectuiv @193
|
||||
glUnmapBuffer @194
|
||||
glGetBufferPointerv @195
|
||||
glDrawBuffers @196
|
||||
glUniformMatrix2x3fv @197
|
||||
glUniformMatrix3x2fv @198
|
||||
glUniformMatrix2x4fv @199
|
||||
glUniformMatrix4x2fv @200
|
||||
glUniformMatrix3x4fv @201
|
||||
glUniformMatrix4x3fv @202
|
||||
glBlitFramebuffer @203
|
||||
glRenderbufferStorageMultisample @204
|
||||
glFramebufferTextureLayer @205
|
||||
glMapBufferRange @206
|
||||
glFlushMappedBufferRange @207
|
||||
glBindVertexArray @208
|
||||
glDeleteVertexArrays @209
|
||||
glGenVertexArrays @210
|
||||
glIsVertexArray @211
|
||||
glGetIntegeri_v @212
|
||||
glBeginTransformFeedback @213
|
||||
glEndTransformFeedback @214
|
||||
glBindBufferRange @215
|
||||
glBindBufferBase @216
|
||||
glTransformFeedbackVaryings @217
|
||||
glGetTransformFeedbackVarying @218
|
||||
glVertexAttribIPointer @219
|
||||
glGetVertexAttribIiv @220
|
||||
glGetVertexAttribIuiv @221
|
||||
glVertexAttribI4i @222
|
||||
glVertexAttribI4ui @223
|
||||
glVertexAttribI4iv @224
|
||||
glVertexAttribI4uiv @225
|
||||
glGetUniformuiv @226
|
||||
glGetFragDataLocation @227
|
||||
glUniform1ui @228
|
||||
glUniform2ui @229
|
||||
glUniform3ui @230
|
||||
glUniform4ui @231
|
||||
glUniform1uiv @232
|
||||
glUniform2uiv @233
|
||||
glUniform3uiv @234
|
||||
glUniform4uiv @235
|
||||
glClearBufferiv @236
|
||||
glClearBufferuiv @237
|
||||
glClearBufferfv @238
|
||||
glClearBufferfi @239
|
||||
glGetStringi @240
|
||||
glCopyBufferSubData @241
|
||||
glGetUniformIndices @242
|
||||
glGetActiveUniformsiv @243
|
||||
glGetUniformBlockIndex @244
|
||||
glGetActiveUniformBlockiv @245
|
||||
glGetActiveUniformBlockName @246
|
||||
glUniformBlockBinding @247
|
||||
glDrawArraysInstanced @248
|
||||
glDrawElementsInstanced @249
|
||||
glFenceSync @250
|
||||
glIsSync @251
|
||||
glDeleteSync @252
|
||||
glClientWaitSync @253
|
||||
glWaitSync @254
|
||||
glGetInteger64v @255
|
||||
glGetSynciv @256
|
||||
glGetInteger64i_v @257
|
||||
glGetBufferParameteri64v @258
|
||||
glGenSamplers @259
|
||||
glDeleteSamplers @260
|
||||
glIsSampler @261
|
||||
glBindSampler @262
|
||||
glSamplerParameteri @263
|
||||
glSamplerParameteriv @264
|
||||
glSamplerParameterf @265
|
||||
glSamplerParameterfv @266
|
||||
glGetSamplerParameteriv @267
|
||||
glGetSamplerParameterfv @268
|
||||
glVertexAttribDivisor @269
|
||||
glBindTransformFeedback @270
|
||||
glDeleteTransformFeedbacks @271
|
||||
glGenTransformFeedbacks @272
|
||||
glIsTransformFeedback @273
|
||||
glPauseTransformFeedback @274
|
||||
glResumeTransformFeedback @275
|
||||
glGetProgramBinary @276
|
||||
glProgramBinary @277
|
||||
glProgramParameteri @278
|
||||
glInvalidateFramebuffer @279
|
||||
glInvalidateSubFramebuffer @280
|
||||
glTexStorage2D @281
|
||||
glTexStorage3D @282
|
||||
glGetInternalformativ @283
|
||||
glReadBuffer@4 @180
|
||||
glDrawRangeElements@24 @181
|
||||
glTexImage3D@40 @182
|
||||
glTexSubImage3D@44 @183
|
||||
glCopyTexSubImage3D@36 @184
|
||||
glCompressedTexImage3D@36 @185
|
||||
glCompressedTexSubImage3D@44 @186
|
||||
glGenQueries@8 @187
|
||||
glDeleteQueries@8 @188
|
||||
glIsQuery@4 @189
|
||||
glBeginQuery@8 @190
|
||||
glEndQuery@4 @191
|
||||
glGetQueryiv@12 @192
|
||||
glGetQueryObjectuiv@12 @193
|
||||
glUnmapBuffer@4 @194
|
||||
glGetBufferPointerv@12 @195
|
||||
glDrawBuffers@8 @196
|
||||
glUniformMatrix2x3fv@16 @197
|
||||
glUniformMatrix3x2fv@16 @198
|
||||
glUniformMatrix2x4fv@16 @199
|
||||
glUniformMatrix4x2fv@16 @200
|
||||
glUniformMatrix3x4fv@16 @201
|
||||
glUniformMatrix4x3fv@16 @202
|
||||
glBlitFramebuffer@40 @203
|
||||
glRenderbufferStorageMultisample@20 @204
|
||||
glFramebufferTextureLayer@20 @205
|
||||
glMapBufferRange@16 @206
|
||||
glFlushMappedBufferRange@12 @207
|
||||
glBindVertexArray@4 @208
|
||||
glDeleteVertexArrays@8 @209
|
||||
glGenVertexArrays@8 @210
|
||||
glIsVertexArray@4 @211
|
||||
glGetIntegeri_v@12 @212
|
||||
glBeginTransformFeedback@4 @213
|
||||
glEndTransformFeedback@0 @214
|
||||
glBindBufferRange@20 @215
|
||||
glBindBufferBase@12 @216
|
||||
glTransformFeedbackVaryings@16 @217
|
||||
glGetTransformFeedbackVarying@28 @218
|
||||
glVertexAttribIPointer@20 @219
|
||||
glGetVertexAttribIiv@12 @220
|
||||
glGetVertexAttribIuiv@12 @221
|
||||
glVertexAttribI4i@20 @222
|
||||
glVertexAttribI4ui@20 @223
|
||||
glVertexAttribI4iv@8 @224
|
||||
glVertexAttribI4uiv@8 @225
|
||||
glGetUniformuiv@12 @226
|
||||
glGetFragDataLocation@8 @227
|
||||
glUniform1ui@8 @228
|
||||
glUniform2ui@12 @229
|
||||
glUniform3ui@16 @230
|
||||
glUniform4ui@20 @231
|
||||
glUniform1uiv@12 @232
|
||||
glUniform2uiv@12 @233
|
||||
glUniform3uiv@12 @234
|
||||
glUniform4uiv@12 @235
|
||||
glClearBufferiv@12 @236
|
||||
glClearBufferuiv@12 @237
|
||||
glClearBufferfv@12 @238
|
||||
glClearBufferfi@16 @239
|
||||
glGetStringi@8 @240
|
||||
glCopyBufferSubData@20 @241
|
||||
glGetUniformIndices@16 @242
|
||||
glGetActiveUniformsiv@20 @243
|
||||
glGetUniformBlockIndex@8 @244
|
||||
glGetActiveUniformBlockiv@16 @245
|
||||
glGetActiveUniformBlockName@20 @246
|
||||
glUniformBlockBinding@12 @247
|
||||
glDrawArraysInstanced@16 @248
|
||||
glDrawElementsInstanced@20 @249
|
||||
glFenceSync@8 @250
|
||||
glIsSync@4 @251
|
||||
glDeleteSync@4 @252
|
||||
glClientWaitSync@16 @253
|
||||
glWaitSync@16 @254
|
||||
glGetInteger64v@8 @255
|
||||
glGetSynciv@20 @256
|
||||
glGetInteger64i_v@12 @257
|
||||
glGetBufferParameteri64v@12 @258
|
||||
glGenSamplers@8 @259
|
||||
glDeleteSamplers@8 @260
|
||||
glIsSampler@4 @261
|
||||
glBindSampler@8 @262
|
||||
glSamplerParameteri@12 @263
|
||||
glSamplerParameteriv@12 @264
|
||||
glSamplerParameterf@12 @265
|
||||
glSamplerParameterfv@12 @266
|
||||
glGetSamplerParameteriv@12 @267
|
||||
glGetSamplerParameterfv@12 @268
|
||||
glVertexAttribDivisor@8 @269
|
||||
glBindTransformFeedback@8 @270
|
||||
glDeleteTransformFeedbacks@8 @271
|
||||
glGenTransformFeedbacks@8 @272
|
||||
glIsTransformFeedback@4 @273
|
||||
glPauseTransformFeedback@0 @274
|
||||
glResumeTransformFeedback@0 @275
|
||||
glGetProgramBinary@20 @276
|
||||
glProgramBinary@16 @277
|
||||
glProgramParameteri@12 @278
|
||||
glInvalidateFramebuffer@12 @279
|
||||
glInvalidateSubFramebuffer@28 @280
|
||||
glTexStorage2D@20 @281
|
||||
glTexStorage3D@24 @282
|
||||
glGetInternalformativ@20 @283
|
||||
|
||||
; GLES 3.1 Functions
|
||||
glDispatchCompute @345
|
||||
glDispatchComputeIndirect @346
|
||||
glDrawArraysIndirect @347
|
||||
glDrawElementsIndirect @348
|
||||
glFramebufferParameteri @349
|
||||
glGetFramebufferParameteriv @350
|
||||
glGetProgramInterfaceiv @351
|
||||
glGetProgramResourceIndex @352
|
||||
glGetProgramResourceName @353
|
||||
glGetProgramResourceiv @354
|
||||
glGetProgramResourceLocation @355
|
||||
glUseProgramStages @356
|
||||
glActiveShaderProgram @357
|
||||
glCreateShaderProgramv @358
|
||||
glBindProgramPipeline @359
|
||||
glDeleteProgramPipelines @360
|
||||
glGenProgramPipelines @361
|
||||
glIsProgramPipeline @362
|
||||
glGetProgramPipelineiv @363
|
||||
glProgramUniform1i @364
|
||||
glProgramUniform2i @365
|
||||
glProgramUniform3i @366
|
||||
glProgramUniform4i @367
|
||||
glProgramUniform1ui @368
|
||||
glProgramUniform2ui @369
|
||||
glProgramUniform3ui @370
|
||||
glProgramUniform4ui @371
|
||||
glProgramUniform1f @372
|
||||
glProgramUniform2f @373
|
||||
glProgramUniform3f @374
|
||||
glProgramUniform4f @375
|
||||
glProgramUniform1iv @376
|
||||
glProgramUniform2iv @377
|
||||
glProgramUniform3iv @378
|
||||
glProgramUniform4iv @379
|
||||
glProgramUniform1uiv @380
|
||||
glProgramUniform2uiv @381
|
||||
glProgramUniform3uiv @382
|
||||
glProgramUniform4uiv @383
|
||||
glProgramUniform1fv @384
|
||||
glProgramUniform2fv @385
|
||||
glProgramUniform3fv @386
|
||||
glProgramUniform4fv @387
|
||||
glProgramUniformMatrix2fv @388
|
||||
glProgramUniformMatrix3fv @389
|
||||
glProgramUniformMatrix4fv @390
|
||||
glProgramUniformMatrix2x3fv @391
|
||||
glProgramUniformMatrix3x2fv @392
|
||||
glProgramUniformMatrix2x4fv @393
|
||||
glProgramUniformMatrix4x2fv @394
|
||||
glProgramUniformMatrix3x4fv @395
|
||||
glProgramUniformMatrix4x3fv @396
|
||||
glValidateProgramPipeline @397
|
||||
glGetProgramPipelineInfoLog @398
|
||||
glBindImageTexture @399
|
||||
glGetBooleani_v @400
|
||||
glMemoryBarrier @401
|
||||
glMemoryBarrierByRegion @402
|
||||
glTexStorage2DMultisample @403
|
||||
glGetMultisamplefv @404
|
||||
glSampleMaski @405
|
||||
glGetTexLevelParameteriv @406
|
||||
glGetTexLevelParameterfv @407
|
||||
glBindVertexBuffer @408
|
||||
glVertexAttribFormat @409
|
||||
glVertexAttribIFormat @410
|
||||
glVertexAttribBinding @411
|
||||
glVertexBindingDivisor @412
|
||||
glDispatchCompute@12 @345
|
||||
glDispatchComputeIndirect@4 @346
|
||||
glDrawArraysIndirect@8 @347
|
||||
glDrawElementsIndirect@12 @348
|
||||
glFramebufferParameteri@12 @349
|
||||
glGetFramebufferParameteriv@12 @350
|
||||
glGetProgramInterfaceiv@16 @351
|
||||
glGetProgramResourceIndex@12 @352
|
||||
glGetProgramResourceName@24 @353
|
||||
glGetProgramResourceiv@32 @354
|
||||
glGetProgramResourceLocation@12 @355
|
||||
glUseProgramStages@12 @356
|
||||
glActiveShaderProgram@8 @357
|
||||
glCreateShaderProgramv@12 @358
|
||||
glBindProgramPipeline@4 @359
|
||||
glDeleteProgramPipelines@8 @360
|
||||
glGenProgramPipelines@8 @361
|
||||
glIsProgramPipeline@4 @362
|
||||
glGetProgramPipelineiv@12 @363
|
||||
glProgramUniform1i@12 @364
|
||||
glProgramUniform2i@16 @365
|
||||
glProgramUniform3i@20 @366
|
||||
glProgramUniform4i@24 @367
|
||||
glProgramUniform1ui@12 @368
|
||||
glProgramUniform2ui@16 @369
|
||||
glProgramUniform3ui@20 @370
|
||||
glProgramUniform4ui@24 @371
|
||||
glProgramUniform1f@12 @372
|
||||
glProgramUniform2f@16 @373
|
||||
glProgramUniform3f@20 @374
|
||||
glProgramUniform4f@24 @375
|
||||
glProgramUniform1iv@16 @376
|
||||
glProgramUniform2iv@16 @377
|
||||
glProgramUniform3iv@16 @378
|
||||
glProgramUniform4iv@16 @379
|
||||
glProgramUniform1uiv@16 @380
|
||||
glProgramUniform2uiv@16 @381
|
||||
glProgramUniform3uiv@16 @382
|
||||
glProgramUniform4uiv@16 @383
|
||||
glProgramUniform1fv@16 @384
|
||||
glProgramUniform2fv@16 @385
|
||||
glProgramUniform3fv@16 @386
|
||||
glProgramUniform4fv@16 @387
|
||||
glProgramUniformMatrix2fv@20 @388
|
||||
glProgramUniformMatrix3fv@20 @389
|
||||
glProgramUniformMatrix4fv@20 @390
|
||||
glProgramUniformMatrix2x3fv@20 @391
|
||||
glProgramUniformMatrix3x2fv@20 @392
|
||||
glProgramUniformMatrix2x4fv@20 @393
|
||||
glProgramUniformMatrix4x2fv@20 @394
|
||||
glProgramUniformMatrix3x4fv@20 @395
|
||||
glProgramUniformMatrix4x3fv@20 @396
|
||||
glValidateProgramPipeline@4 @397
|
||||
glGetProgramPipelineInfoLog@16 @398
|
||||
glBindImageTexture@28 @399
|
||||
glGetBooleani_v@12 @400
|
||||
glMemoryBarrier@4 @401
|
||||
glMemoryBarrierByRegion@4 @402
|
||||
glTexStorage2DMultisample@24 @403
|
||||
glGetMultisamplefv@12 @404
|
||||
glSampleMaski@8 @405
|
||||
glGetTexLevelParameteriv@16 @406
|
||||
glGetTexLevelParameterfv@16 @407
|
||||
glBindVertexBuffer@16 @408
|
||||
glVertexAttribFormat@20 @409
|
||||
glVertexAttribIFormat@16 @410
|
||||
glVertexAttribBinding@8 @411
|
||||
glVertexBindingDivisor@8 @412
|
||||
|
@ -138,10 +138,10 @@
|
||||
T is the same type as the return value of \a function. Non-void return
|
||||
values can be accessed via the QFuture::result() function.
|
||||
|
||||
Note that the QFuture returned by QtConcurrent::run() does not support
|
||||
canceling, pausing, or progress reporting. The QFuture returned can only
|
||||
be used to query for the running/finished status and the return value of
|
||||
the function.
|
||||
\note The QFuture returned can only be used to query for the
|
||||
running/finished status and the return value of the function. In particular,
|
||||
canceling or pausing can be issued only if the computations behind the future
|
||||
has not been started.
|
||||
|
||||
\sa {Concurrent Run}
|
||||
*/
|
||||
@ -157,10 +157,10 @@
|
||||
T is the same type as the return value of \a function. Non-void return
|
||||
values can be accessed via the QFuture::result() function.
|
||||
|
||||
Note that the QFuture returned by QtConcurrent::run() does not support
|
||||
canceling, pausing, or progress reporting. The QFuture returned can only
|
||||
be used to query for the running/finished status and the return value of
|
||||
the function.
|
||||
\note The QFuture returned can only be used to query for the
|
||||
running/finished status and the return value of the function. In particular,
|
||||
canceling or pausing can be issued only if the computations behind the future
|
||||
has not been started.
|
||||
|
||||
\sa {Concurrent Run}
|
||||
*/
|
||||
|
@ -1063,7 +1063,7 @@ QAbstractAnimation::~QAbstractAnimation()
|
||||
if (d->state != Stopped) {
|
||||
QAbstractAnimation::State oldState = d->state;
|
||||
d->state = Stopped;
|
||||
emit stateChanged(oldState, d->state);
|
||||
emit stateChanged(d->state, oldState);
|
||||
if (oldState == QAbstractAnimation::Running)
|
||||
QAnimationTimer::unregisterAnimation(this);
|
||||
}
|
||||
|
@ -846,6 +846,9 @@ QList<QStorageInfo> QStorageInfoPrivate::mountedVolumes()
|
||||
|
||||
const QString mountDir = it.rootPath();
|
||||
QStorageInfo info(mountDir);
|
||||
info.d->device = it.device();
|
||||
info.d->fileSystemType = it.fileSystemType();
|
||||
info.d->subvolume = it.subvolume();
|
||||
if (info.bytesTotal() == 0)
|
||||
continue;
|
||||
volumes.append(info);
|
||||
|
@ -977,7 +977,11 @@ void QCoreApplication::setAttribute(Qt::ApplicationAttribute attribute, bool on)
|
||||
QCoreApplicationPrivate::attribs |= 1 << attribute;
|
||||
else
|
||||
QCoreApplicationPrivate::attribs &= ~(1 << attribute);
|
||||
#if defined(QT_NO_QOBJECT)
|
||||
if (Q_UNLIKELY(qApp)) {
|
||||
#else
|
||||
if (Q_UNLIKELY(QCoreApplicationPrivate::is_app_running)) {
|
||||
#endif
|
||||
switch (attribute) {
|
||||
case Qt::AA_EnableHighDpiScaling:
|
||||
case Qt::AA_DisableHighDpiScaling:
|
||||
|
@ -688,6 +688,12 @@ static const char *winPosInsertAfter(quintptr h)
|
||||
|
||||
static const char *sessionMgrLogOffOption(uint p)
|
||||
{
|
||||
#ifndef ENDSESSION_CLOSEAPP
|
||||
#define ENDSESSION_CLOSEAPP 0x00000001
|
||||
#endif
|
||||
#ifndef ENDSESSION_CRITICAL
|
||||
#define ENDSESSION_CRITICAL 0x40000000
|
||||
#endif
|
||||
static const QWinMessageMapping<uint> values[] = {
|
||||
{ENDSESSION_CLOSEAPP, "Close application"},
|
||||
{ENDSESSION_CRITICAL, "Force application end"},
|
||||
@ -881,12 +887,6 @@ QString decodeMSG(const MSG& msg)
|
||||
parameters += QLatin1Char(')');
|
||||
}
|
||||
break;
|
||||
#ifndef ENDSESSION_CLOSEAPP
|
||||
#define ENDSESSION_CLOSEAPP 0x00000001
|
||||
#endif
|
||||
#ifndef ENDSESSION_CRITICAL
|
||||
#define ENDSESSION_CRITICAL 0x40000000
|
||||
#endif
|
||||
case WM_QUERYENDSESSION:
|
||||
parameters = QLatin1String("End session: ");
|
||||
if (const char *logoffOption = sessionMgrLogOffOption(uint(wParam)))
|
||||
|
@ -1,6 +1,6 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2018 Intel Corporation.
|
||||
** Copyright (C) 2019 Intel Corporation.
|
||||
** Contact: https://www.qt.io/licensing/
|
||||
**
|
||||
** This file is part of the QtCore module of the Qt Toolkit.
|
||||
@ -598,10 +598,12 @@ QCborValue QCborValue::fromJsonValue(const QJsonValue &v)
|
||||
switch (v.type()) {
|
||||
case QJsonValue::Bool:
|
||||
return v.b;
|
||||
case QJsonValue::Double:
|
||||
if (v.dbl == qint64(v.dbl))
|
||||
return qint64(v.dbl);
|
||||
case QJsonValue::Double: {
|
||||
qint64 i;
|
||||
if (convertDoubleTo(v.dbl, &i))
|
||||
return i;
|
||||
return v.dbl;
|
||||
}
|
||||
case QJsonValue::String:
|
||||
return v.toString();
|
||||
case QJsonValue::Array:
|
||||
|
@ -55,8 +55,8 @@
|
||||
instance, the computation can be canceled with the cancel() function. To
|
||||
pause the computation, use the setPaused() function or one of the pause(),
|
||||
resume(), or togglePaused() convenience functions. Be aware that not all
|
||||
asynchronous computations can be canceled or paused. For example, the
|
||||
future returned by QtConcurrent::run() cannot be canceled; but the
|
||||
running asynchronous computations can be canceled or paused. For example,
|
||||
the future returned by QtConcurrent::run() cannot be canceled; but the
|
||||
future returned by QtConcurrent::mappedReduced() can.
|
||||
|
||||
Progress information is provided by the progressValue(),
|
||||
@ -133,8 +133,8 @@
|
||||
Any QFutureWatcher object that is watching this future will not deliver
|
||||
progress and result ready signals on a canceled future.
|
||||
|
||||
Be aware that not all asynchronous computations can be canceled. For
|
||||
example, the future returned by QtConcurrent::run() cannot be canceled;
|
||||
Be aware that not all running asynchronous computations can be canceled.
|
||||
For example, the future returned by QtConcurrent::run() cannot be canceled;
|
||||
but the future returned by QtConcurrent::mappedReduced() can.
|
||||
*/
|
||||
|
||||
|
@ -84,8 +84,8 @@ QT_BEGIN_NAMESPACE
|
||||
|
||||
\snippet code/src_corelib_thread_qfuturewatcher.cpp 0
|
||||
|
||||
Be aware that not all asynchronous computations can be canceled or paused.
|
||||
For example, the future returned by QtConcurrent::run() cannot be
|
||||
Be aware that not all running asynchronous computations can be canceled or
|
||||
paused. For example, the future returned by QtConcurrent::run() cannot be
|
||||
canceled; but the future returned by QtConcurrent::mappedReduced() can.
|
||||
|
||||
QFutureWatcher<void> is specialized to not contain any of the result
|
||||
@ -124,9 +124,9 @@ QFutureWatcherBase::QFutureWatcherBase(QObject *parent)
|
||||
progressRangeChanged(), progressTextChanged(), resultReadyAt(), and
|
||||
resultsReadyAt() signals.
|
||||
|
||||
Be aware that not all asynchronous computations can be canceled. For
|
||||
example, the QFuture returned by QtConcurrent::run() cannot be canceled;
|
||||
but the QFuture returned by QtConcurrent::mappedReduced() can.
|
||||
Be aware that not all running asynchronous computations can be canceled.
|
||||
For example, the QFuture returned by QtConcurrent::run() cannot be
|
||||
canceled; but the QFuture returned by QtConcurrent::mappedReduced() can.
|
||||
*/
|
||||
void QFutureWatcherBase::cancel()
|
||||
{
|
||||
|
@ -727,6 +727,12 @@ void QThread::start(Priority priority)
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef Q_OS_INTEGRITY
|
||||
if (Q_LIKELY(objectName().isEmpty()))
|
||||
pthread_attr_setthreadname(&attr, metaObject()->className());
|
||||
else
|
||||
pthread_attr_setthreadname(&attr, objectName().toLocal8Bit());
|
||||
#endif
|
||||
pthread_t threadId;
|
||||
int code = pthread_create(&threadId, &attr, QThreadPrivate::start, this);
|
||||
if (code == EPERM) {
|
||||
|
3
src/dbus/doc/snippets/cmake/examples.cmake
Normal file
3
src/dbus/doc/snippets/cmake/examples.cmake
Normal file
@ -0,0 +1,3 @@
|
||||
#! [qt5_add_dbus_adaptor]
|
||||
qt5_add_dbus_adaptor(GENERATED_SOURCES org.example.chat.xml chat.h ChatMainWindow)
|
||||
#! [qt5_add_dbus_adaptor]
|
224
src/dbus/doc/src/qtdbus-cmake.qdoc
Normal file
224
src/dbus/doc/src/qtdbus-cmake.qdoc
Normal file
@ -0,0 +1,224 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2019 The Qt Company Ltd.
|
||||
** Contact: https://www.qt.io/licensing/
|
||||
**
|
||||
** This file is part of the documentation of the Qt Toolkit.
|
||||
**
|
||||
** $QT_BEGIN_LICENSE:FDL$
|
||||
** 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 Free Documentation License Usage
|
||||
** Alternatively, this file may be used under the terms of the GNU Free
|
||||
** Documentation License version 1.3 as published by the Free Software
|
||||
** Foundation and appearing in the file included in the packaging of
|
||||
** this file. Please review the following information to ensure
|
||||
** the GNU Free Documentation License version 1.3 requirements
|
||||
** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
|
||||
** $QT_END_LICENSE$
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
/*!
|
||||
\page qtdbus-cmake-qt5-add-dbus-interface.html
|
||||
\ingroup cmake-commands-qtdbus
|
||||
|
||||
\title qt5_add_dbus_interface
|
||||
|
||||
\brief Generates C++ sources implementing an interface for a D-Bus interface
|
||||
description file.
|
||||
|
||||
\section1 Synopsis
|
||||
|
||||
\badcode
|
||||
qt5_add_dbus_interface(<VAR> dbus_spec basename)
|
||||
\endcode
|
||||
|
||||
\section1 Description
|
||||
|
||||
Generates C++ sources implementing an interface for a D-Bus interface description
|
||||
file defined in \c{dbus_spec}. The generated files are named after \c{basename}:
|
||||
\c{basename.h}, \c{basename.cpp}, \c{basename.moc}. The paths of the files
|
||||
are added to \c{<VAR>}.
|
||||
|
||||
The function sets up a call to the \l{Qt D-Bus XML compiler (qdbusxml2cpp)}
|
||||
in interface (proxy) mode. By default, \c{qdbusxml2cpp} generates a C++
|
||||
class named after the interface name, with a namespaced alias:
|
||||
|
||||
\table
|
||||
\header
|
||||
\li D-Bus Interface Name
|
||||
\li Class name
|
||||
\li Namespaced name
|
||||
\row
|
||||
\li \c{org.example.chat}
|
||||
\li \c{OrgExampleChatInterface}
|
||||
\li \c{org.example.chat}
|
||||
\endtable
|
||||
|
||||
\section1 Options
|
||||
|
||||
Options can be set using \c set_source_file_property on the \c dbus_spec:
|
||||
|
||||
\table
|
||||
\header
|
||||
\li Option
|
||||
\li Value
|
||||
\li Description
|
||||
\row
|
||||
\li \c CLASSNAME
|
||||
\li \c class_name
|
||||
\li Override the default interface class name with \c{class_name}.
|
||||
\row
|
||||
\li \c NO_NAMESPACE
|
||||
\li boolean
|
||||
\li Do not generate the namespaced name if set to \c{ON}.
|
||||
\row
|
||||
\li \c INCLUDE
|
||||
\li \c path
|
||||
\li Add an \c{#include "path"} in the generated code.
|
||||
\endtable
|
||||
*/
|
||||
|
||||
/*!
|
||||
\page qtdbus-cmake-qt5-add-dbus-interfaces.html
|
||||
\ingroup cmake-commands-qtdbus
|
||||
|
||||
\title qt5_add_dbus_interfaces
|
||||
|
||||
\brief Generates C++ sources implementing interfaces for D-Bus interface
|
||||
description files.
|
||||
|
||||
\section1 Synopsis
|
||||
|
||||
\badcode
|
||||
qt5_add_dbus_interfaces(<VAR> dbus_spec1 [dbus_spec2 ...])
|
||||
\endcode
|
||||
|
||||
\section1 Description
|
||||
|
||||
Generates C++ sources implementing D-Bus interfaces defined in \c{dbus_spec1},
|
||||
\c{dbus_spec2}, where each argument needs to be the path to a valid D-Bus
|
||||
interface description file. The paths of the generated files are added to
|
||||
\c{<VAR>}.
|
||||
|
||||
For each argument, a call to the \l{Qt D-Bus XML compiler (qdbusxml2cpp)}
|
||||
in interface (proxy) mode is set up.
|
||||
|
||||
The generated C++ source files are named after the XML file: For the file
|
||||
\c{org.example.chat.xml} the generated header will be named
|
||||
\c{orgexamplechatinterface.h}.
|
||||
|
||||
\section1 Options
|
||||
|
||||
Options can be set using \c set_source_file_property on each of the file
|
||||
arguments:
|
||||
|
||||
\table
|
||||
\header
|
||||
\li Option
|
||||
\li Value
|
||||
\li Description
|
||||
\row
|
||||
\li \c CLASSNAME
|
||||
\li \c class_name
|
||||
\li Override the default interface class name with \c{class_name}.
|
||||
\row
|
||||
\li \c NO_NAMESPACE
|
||||
\li boolean
|
||||
\li Do not generate the namespaced name if set to \c{ON}.
|
||||
\row
|
||||
\li \c INCLUDE
|
||||
\li \c path
|
||||
\li Add an \c{#include "path"} in the generated code.
|
||||
\endtable
|
||||
*/
|
||||
|
||||
/*!
|
||||
\page qtdbus-cmake-qt5-generate-dbus-interface.html
|
||||
\ingroup cmake-commands-qtdbus
|
||||
|
||||
\title qt5_generate_dbus_interface
|
||||
|
||||
\brief Generates a D-Bus interface from a header file.
|
||||
|
||||
\section1 Synopsis
|
||||
|
||||
\badcode
|
||||
qt5_generate_dbus_interface(header
|
||||
[customName]
|
||||
[OPTIONS options]
|
||||
)
|
||||
\endcode
|
||||
|
||||
\section1 Description
|
||||
|
||||
Parses the C++ source or header file containing a QObject-derived class
|
||||
declaration and generates a file containing the D-BUS Introspection XML.
|
||||
|
||||
By default, the generated XML file is stored in the current binary directory,
|
||||
and has the same base name as the header. You can specify a different name or
|
||||
path by adding \c{customName} as an optional second argument.
|
||||
|
||||
\section1 Options
|
||||
|
||||
The function sets up a call to the \c{qdbuscpp2xml} command line tool. Further
|
||||
arguments to the tool can be set after \c{OPTIONS}.
|
||||
*/
|
||||
|
||||
/*!
|
||||
\page qtdbus-cmake-qt5-add-dbus-adaptor.html
|
||||
\ingroup cmake-commands-qtdbus
|
||||
|
||||
\title qt5_add_dbus_adaptor
|
||||
|
||||
\brief Generates an adaptor class for a D-Bus interface.
|
||||
|
||||
\section1 Synopsis
|
||||
|
||||
\badcode
|
||||
qt5_add_dbus_adaptor(<VAR> dbus_spec header parent_class
|
||||
[basename]
|
||||
[classname])
|
||||
\endcode
|
||||
|
||||
\section1 Description
|
||||
|
||||
Generates a C++ header file implementing an adaptor for a D-Bus interface
|
||||
description file defined in \c{dbus_spec}. The path of the generated file is
|
||||
added to \c{<VAR>}. The generated adaptor class takes a pointer to
|
||||
\c{parent_class} as QObject parent. \c{parent_class} should be declared in
|
||||
\c{header}, which is included in the generated code as \c{#include "header"}.
|
||||
|
||||
The function sets up a call to the \l{Qt D-Bus XML compiler (qdbusxml2cpp)}
|
||||
in adaptor mode. The default file and class name are generated from the last
|
||||
segment in the \c{dbus_spec} base name:
|
||||
|
||||
\table
|
||||
\header
|
||||
\li XML file
|
||||
\li Header file
|
||||
\li Class name
|
||||
\row
|
||||
\li \c{org.example.chat}
|
||||
\li \c{chatadaptor.h}
|
||||
\li \c{ChatAdaptor}
|
||||
\endtable
|
||||
|
||||
|
||||
You can change the name of the header file to be generated by passing
|
||||
\c{basename} as the fifth argument. The \c{.h} suffix is always added.
|
||||
|
||||
You can change the default class name by passing \c{classname} as the sixth
|
||||
argument.
|
||||
|
||||
\section1 Examples
|
||||
|
||||
\snippet cmake/examples.cmake qt5_add_dbus_adaptor
|
||||
*/
|
@ -350,6 +350,7 @@ Q_LOGGING_CATEGORY(lcAccessibilityCore, "qt.accessibility.core");
|
||||
\value MenuItem An item in a menu or menu bar.
|
||||
\value NoRole The object has no role. This usually indicates an invalid object.
|
||||
\value Note A section whose content is parenthetic or ancillary to the main content of the resource.
|
||||
\value Notification An object that represents a notification (e.g. in the system tray). This role only has an effect on Linux.
|
||||
\value PageTab A page tab that the user can select to switch to a different page in a dialog.
|
||||
\value PageTabList A list of page tabs.
|
||||
\value Paragraph A paragraph of text (usually found in documents).
|
||||
|
@ -299,6 +299,7 @@ public:
|
||||
Paragraph = 0x00000083,
|
||||
WebDocument = 0x00000084,
|
||||
Section = 0x00000085,
|
||||
Notification = 0x00000086,
|
||||
|
||||
// IAccessible2 roles
|
||||
// IA2_ROLE_CANVAS = 0x401, ### Qt 6 use this one instead of Canvas above
|
||||
|
@ -1321,10 +1321,12 @@ bool QImageReader::read(QImage *image)
|
||||
}
|
||||
}
|
||||
|
||||
// successful read; check for "@2x" file name suffix and set device pixel ratio.
|
||||
static bool disable2xImageLoading = !qEnvironmentVariableIsEmpty("QT_HIGHDPI_DISABLE_2X_IMAGE_LOADING");
|
||||
if (!disable2xImageLoading && QFileInfo(fileName()).baseName().endsWith(QLatin1String("@2x"))) {
|
||||
image->setDevicePixelRatio(2.0);
|
||||
// successful read; check for "@Nx" file name suffix and set device pixel ratio.
|
||||
static bool disableNxImageLoading = !qEnvironmentVariableIsEmpty("QT_HIGHDPI_DISABLE_2X_IMAGE_LOADING");
|
||||
if (!disableNxImageLoading) {
|
||||
const QByteArray suffix = QFileInfo(fileName()).baseName().right(3).toLatin1();
|
||||
if (suffix.length() == 3 && suffix[0] == '@' && suffix[1] >= '2' && suffix[1] <= '9' && suffix[2] == 'x')
|
||||
image->setDevicePixelRatio(suffix[1] - '0');
|
||||
}
|
||||
if (autoTransform())
|
||||
qt_imageTransform(*image, transformation());
|
||||
|
@ -400,7 +400,7 @@ QPoint QHighDpiScaling::mapPositionToGlobal(const QPoint &pos, const QPoint &win
|
||||
QPoint QHighDpiScaling::mapPositionFromGlobal(const QPoint &pos, const QPoint &windowGlobalPosition, const QWindow *window)
|
||||
{
|
||||
QPoint windowPosCandidate = pos - windowGlobalPosition;
|
||||
if (QGuiApplicationPrivate::screen_list.size() <= 1)
|
||||
if (QGuiApplicationPrivate::screen_list.size() <= 1 || window->handle() == nullptr)
|
||||
return windowPosCandidate;
|
||||
|
||||
// Device independent global (screen) space may discontiguous when high-dpi scaling
|
||||
|
@ -108,208 +108,114 @@ private:
|
||||
|
||||
namespace QHighDpi {
|
||||
|
||||
inline QPointF fromNative(const QPointF &pos, qreal scaleFactor, const QPointF &origin)
|
||||
template <typename T>
|
||||
inline T scale(const T &value, qreal scaleFactor, QPoint origin = QPoint(0, 0))
|
||||
{
|
||||
return (pos - origin) / scaleFactor + origin;
|
||||
Q_UNUSED(origin)
|
||||
return value * scaleFactor;
|
||||
}
|
||||
|
||||
inline QPointF toNative(const QPointF &pos, qreal scaleFactor, const QPointF &origin)
|
||||
inline QPointF scale(const QPointF &pos, qreal scaleFactor, QPointF origin = QPointF(0, 0))
|
||||
{
|
||||
return (pos - origin) * scaleFactor + origin;
|
||||
}
|
||||
|
||||
inline QPoint fromNative(const QPoint &pos, qreal scaleFactor, const QPoint &origin)
|
||||
{
|
||||
return (pos - origin) / scaleFactor + origin;
|
||||
}
|
||||
|
||||
inline QPoint toNative(const QPoint &pos, qreal scaleFactor, const QPoint &origin)
|
||||
inline QPoint scale(const QPoint &pos, qreal scaleFactor, QPoint origin = QPoint(0, 0))
|
||||
{
|
||||
return (pos - origin) * scaleFactor + origin;
|
||||
}
|
||||
|
||||
inline QPoint fromNative(const QPoint &pos, qreal scaleFactor)
|
||||
inline QRect scale(const QRect &rect, qreal scaleFactor, QPoint origin = QPoint(0, 0))
|
||||
{
|
||||
return pos / scaleFactor;
|
||||
return QRect(scale(rect.topLeft(), scaleFactor, origin), scale(rect.size(), scaleFactor));
|
||||
}
|
||||
|
||||
inline QPoint toNative(const QPoint &pos, qreal scaleFactor)
|
||||
inline QRectF scale(const QRectF &rect, qreal scaleFactor, QPoint origin = QPoint(0, 0))
|
||||
{
|
||||
return pos * scaleFactor;
|
||||
return QRectF(scale(rect.topLeft(), scaleFactor, origin), scale(rect.size(), scaleFactor));
|
||||
}
|
||||
|
||||
inline QSize fromNative(const QSize &size, qreal scaleFactor)
|
||||
inline QMargins scale(const QMargins &margins, qreal scaleFactor, QPoint origin = QPoint(0, 0))
|
||||
{
|
||||
return size / scaleFactor; // TODO: should we round up?
|
||||
Q_UNUSED(origin)
|
||||
return QMargins(qRound(qreal(margins.left()) * scaleFactor), qRound(qreal(margins.top()) * scaleFactor),
|
||||
qRound(qreal(margins.right()) * scaleFactor), qRound(qreal(margins.bottom()) * scaleFactor));
|
||||
}
|
||||
|
||||
inline QSize toNative(const QSize &size, qreal scaleFactor)
|
||||
template <typename T>
|
||||
QVector<T> scale(const QVector<T> &vector, qreal scaleFactor, QPoint origin = QPoint(0, 0))
|
||||
{
|
||||
return size * scaleFactor;
|
||||
if (!QHighDpiScaling::isActive())
|
||||
return vector;
|
||||
|
||||
QVector<T> scaled;
|
||||
scaled.reserve(vector.size());
|
||||
for (const T &item : vector)
|
||||
scaled.append(scale(item, scaleFactor, origin));
|
||||
return scaled;
|
||||
}
|
||||
|
||||
inline QSizeF fromNative(const QSizeF &size, qreal scaleFactor)
|
||||
inline QRegion scale(const QRegion ®ion, qreal scaleFactor, QPoint origin = QPoint(0, 0))
|
||||
{
|
||||
return size / scaleFactor;
|
||||
if (!QHighDpiScaling::isActive())
|
||||
return region;
|
||||
|
||||
QRegion scaled;
|
||||
for (const QRect &rect : region)
|
||||
scaled += scale(rect, scaleFactor, origin);
|
||||
return scaled;
|
||||
}
|
||||
|
||||
inline QSizeF toNative(const QSizeF &size, qreal scaleFactor)
|
||||
template <typename T, typename C>
|
||||
T fromNativePixels(const T &value, const C *context)
|
||||
{
|
||||
return size * scaleFactor;
|
||||
return scale(value, qreal(1) / QHighDpiScaling::factor(context), QHighDpiScaling::origin(context));
|
||||
}
|
||||
|
||||
inline QRect fromNative(const QRect &rect, qreal scaleFactor, const QPoint &origin)
|
||||
template <typename T, typename C>
|
||||
T toNativePixels(const T &value, const C *context)
|
||||
{
|
||||
return QRect(fromNative(rect.topLeft(), scaleFactor, origin), fromNative(rect.size(), scaleFactor));
|
||||
return scale(value, QHighDpiScaling::factor(context), QHighDpiScaling::origin(context));
|
||||
}
|
||||
|
||||
inline QRect toNative(const QRect &rect, qreal scaleFactor, const QPoint &origin)
|
||||
template <typename T, typename C>
|
||||
T fromNativeLocalPosition(const T &value, const C *context)
|
||||
{
|
||||
return QRect(toNative(rect.topLeft(), scaleFactor, origin), toNative(rect.size(), scaleFactor));
|
||||
return scale(value, qreal(1) / QHighDpiScaling::factor(context));
|
||||
}
|
||||
|
||||
template <typename T, typename C>
|
||||
T toNativeLocalPosition(const T &value, const C *context)
|
||||
{
|
||||
return scale(value, QHighDpiScaling::factor(context));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline T fromNative(const T &value, qreal scaleFactor, QPoint origin = QPoint(0, 0))
|
||||
{
|
||||
return scale(value, qreal(1) / scaleFactor, origin);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline T toNative(const T &value, qreal scaleFactor, QPoint origin = QPoint(0, 0))
|
||||
{
|
||||
return scale(value, scaleFactor, origin);
|
||||
}
|
||||
|
||||
inline QRect fromNative(const QRect &rect, const QScreen *screen, const QPoint &screenOrigin)
|
||||
{
|
||||
return fromNative(rect, QHighDpiScaling::factor(screen), screenOrigin);
|
||||
return scale(rect, qreal(1) / QHighDpiScaling::factor(screen), screenOrigin);
|
||||
}
|
||||
|
||||
inline QRect fromNativeScreenGeometry(const QRect &nativeScreenGeometry, const QScreen *screen)
|
||||
{
|
||||
return QRect(nativeScreenGeometry.topLeft(),
|
||||
fromNative(nativeScreenGeometry.size(), QHighDpiScaling::factor(screen)));
|
||||
}
|
||||
|
||||
inline QPoint fromNativeLocalPosition(const QPoint &pos, const QWindow *window)
|
||||
{
|
||||
const qreal scaleFactor = QHighDpiScaling::factor(window);
|
||||
return pos / scaleFactor;
|
||||
}
|
||||
|
||||
inline QPoint toNativeLocalPosition(const QPoint &pos, const QWindow *window)
|
||||
{
|
||||
const qreal scaleFactor = QHighDpiScaling::factor(window);
|
||||
return pos * scaleFactor;
|
||||
}
|
||||
|
||||
inline QPointF fromNativeLocalPosition(const QPointF &pos, const QWindow *window)
|
||||
{
|
||||
const qreal scaleFactor = QHighDpiScaling::factor(window);
|
||||
return pos / scaleFactor;
|
||||
}
|
||||
|
||||
inline QPointF toNativeLocalPosition(const QPointF &pos, const QWindow *window)
|
||||
{
|
||||
const qreal scaleFactor = QHighDpiScaling::factor(window);
|
||||
return pos * scaleFactor;
|
||||
}
|
||||
|
||||
template <typename C>
|
||||
inline QRect fromNativePixels(const QRect &pixelRect, const C *context)
|
||||
{
|
||||
const qreal scaleFactor = QHighDpiScaling::factor(context);
|
||||
const QPoint origin = QHighDpiScaling::origin(context);
|
||||
return QRect(fromNative(pixelRect.topLeft(), scaleFactor, origin),
|
||||
fromNative(pixelRect.size(), scaleFactor));
|
||||
}
|
||||
|
||||
template <typename C>
|
||||
inline QRect toNativePixels(const QRect &pointRect, const C *context)
|
||||
{
|
||||
const qreal scaleFactor = QHighDpiScaling::factor(context);
|
||||
const QPoint origin = QHighDpiScaling::origin(context);
|
||||
return QRect(toNative(pointRect.topLeft(), scaleFactor, origin),
|
||||
toNative(pointRect.size(), scaleFactor));
|
||||
}
|
||||
|
||||
template <typename C>
|
||||
inline QRectF toNativePixels(const QRectF &pointRect, const C *context)
|
||||
{
|
||||
const qreal scaleFactor = QHighDpiScaling::factor(context);
|
||||
const QPoint origin = QHighDpiScaling::origin(context);
|
||||
return QRectF(toNative(pointRect.topLeft(), scaleFactor, origin),
|
||||
toNative(pointRect.size(), scaleFactor));
|
||||
}
|
||||
|
||||
template <typename C>
|
||||
inline QRectF fromNativePixels(const QRectF &pixelRect, const C *context)
|
||||
{
|
||||
const qreal scaleFactor = QHighDpiScaling::factor(context);
|
||||
const QPoint origin = QHighDpiScaling::origin(context);
|
||||
return QRectF(fromNative(pixelRect.topLeft(), scaleFactor, origin),
|
||||
fromNative(pixelRect.size(), scaleFactor));
|
||||
}
|
||||
|
||||
inline QSize fromNativePixels(const QSize &pixelSize, const QWindow *window)
|
||||
{
|
||||
return pixelSize / QHighDpiScaling::factor(window);
|
||||
}
|
||||
|
||||
inline QSize toNativePixels(const QSize &pointSize, const QWindow *window)
|
||||
{
|
||||
return pointSize * QHighDpiScaling::factor(window);
|
||||
}
|
||||
|
||||
inline QSizeF fromNativePixels(const QSizeF &pixelSize, const QWindow *window)
|
||||
{
|
||||
return pixelSize / QHighDpiScaling::factor(window);
|
||||
}
|
||||
|
||||
inline QSizeF toNativePixels(const QSizeF &pointSize, const QWindow *window)
|
||||
{
|
||||
return pointSize * QHighDpiScaling::factor(window);
|
||||
}
|
||||
|
||||
template <typename C>
|
||||
inline QPoint fromNativePixels(const QPoint &pixelPoint, const C *context)
|
||||
{
|
||||
return fromNative(pixelPoint, QHighDpiScaling::factor(context), QHighDpiScaling::origin(context));
|
||||
}
|
||||
|
||||
template <typename C>
|
||||
inline QPoint toNativePixels(const QPoint &pointPoint, const C *context)
|
||||
{
|
||||
return toNative(pointPoint, QHighDpiScaling::factor(context), QHighDpiScaling::origin(context));
|
||||
}
|
||||
|
||||
template <typename C>
|
||||
inline QPointF fromNativePixels(const QPointF &pixelPoint, const C *context)
|
||||
{
|
||||
return fromNative(pixelPoint, QHighDpiScaling::factor(context), QHighDpiScaling::origin(context));
|
||||
}
|
||||
|
||||
template <typename C>
|
||||
inline QPointF toNativePixels(const QPointF &pointPoint, const C *context)
|
||||
{
|
||||
return toNative(pointPoint, QHighDpiScaling::factor(context), QHighDpiScaling::origin(context));
|
||||
}
|
||||
|
||||
inline QMargins fromNativePixels(const QMargins &pixelMargins, const QWindow *window)
|
||||
{
|
||||
const qreal scaleFactor = QHighDpiScaling::factor(window);
|
||||
return QMargins(pixelMargins.left() / scaleFactor, pixelMargins.top() / scaleFactor,
|
||||
pixelMargins.right() / scaleFactor, pixelMargins.bottom() / scaleFactor);
|
||||
}
|
||||
|
||||
inline QMargins toNativePixels(const QMargins &pointMargins, const QWindow *window)
|
||||
{
|
||||
const qreal scaleFactor = QHighDpiScaling::factor(window);
|
||||
return QMargins(pointMargins.left() * scaleFactor, pointMargins.top() * scaleFactor,
|
||||
pointMargins.right() * scaleFactor, pointMargins.bottom() * scaleFactor);
|
||||
scale(nativeScreenGeometry.size(), qreal(1) / QHighDpiScaling::factor(screen)));
|
||||
}
|
||||
|
||||
inline QRegion fromNativeLocalRegion(const QRegion &pixelRegion, const QWindow *window)
|
||||
{
|
||||
if (!QHighDpiScaling::isActive())
|
||||
return pixelRegion;
|
||||
|
||||
qreal scaleFactor = QHighDpiScaling::factor(window);
|
||||
QRegion pointRegion;
|
||||
for (const QRect &rect : pixelRegion) {
|
||||
pointRegion += QRect(fromNative(rect.topLeft(), scaleFactor),
|
||||
fromNative(rect.size(), scaleFactor));
|
||||
}
|
||||
return pointRegion;
|
||||
return scale(pixelRegion, qreal(1) / QHighDpiScaling::factor(window));
|
||||
}
|
||||
|
||||
// When mapping expose events to Qt rects: round top/left towards the origin and
|
||||
@ -333,67 +239,7 @@ inline QRegion fromNativeLocalExposedRegion(const QRegion &pixelRegion, const QW
|
||||
|
||||
inline QRegion toNativeLocalRegion(const QRegion &pointRegion, const QWindow *window)
|
||||
{
|
||||
if (!QHighDpiScaling::isActive())
|
||||
return pointRegion;
|
||||
|
||||
qreal scaleFactor = QHighDpiScaling::factor(window);
|
||||
QRegion pixelRegon;
|
||||
for (const QRect &rect : pointRegion) {
|
||||
pixelRegon += QRect(toNative(rect.topLeft(), scaleFactor),
|
||||
toNative(rect.size(), scaleFactor));
|
||||
}
|
||||
return pixelRegon;
|
||||
}
|
||||
|
||||
// Any T that has operator/()
|
||||
template <typename T, typename C>
|
||||
T fromNativePixels(const T &pixelValue, const C *context)
|
||||
{
|
||||
if (!QHighDpiScaling::isActive())
|
||||
return pixelValue;
|
||||
|
||||
return pixelValue / QHighDpiScaling::factor(context);
|
||||
|
||||
}
|
||||
|
||||
// Any T that has operator*()
|
||||
template <typename T, typename C>
|
||||
T toNativePixels(const T &pointValue, const C *context)
|
||||
{
|
||||
if (!QHighDpiScaling::isActive())
|
||||
return pointValue;
|
||||
|
||||
return pointValue * QHighDpiScaling::factor(context);
|
||||
}
|
||||
|
||||
// Any QVector<T> where T has operator/()
|
||||
template <typename T>
|
||||
QVector<T> fromNativePixels(const QVector<T> &pixelValues, const QWindow *window)
|
||||
{
|
||||
if (!QHighDpiScaling::isActive())
|
||||
return pixelValues;
|
||||
|
||||
QVector<T> pointValues;
|
||||
pointValues.reserve(pixelValues.size());
|
||||
const auto factor = QHighDpiScaling::factor(window);
|
||||
for (const T &pixelValue : pixelValues)
|
||||
pointValues.append(pixelValue / factor);
|
||||
return pointValues;
|
||||
}
|
||||
|
||||
// Any QVector<T> where T has operator*()
|
||||
template <typename T>
|
||||
QVector<T> toNativePixels(const QVector<T> &pointValues, const QWindow *window)
|
||||
{
|
||||
if (!QHighDpiScaling::isActive())
|
||||
return pointValues;
|
||||
|
||||
QVector<T> pixelValues;
|
||||
pixelValues.reserve(pointValues.size());
|
||||
const auto factor = QHighDpiScaling::factor(window);
|
||||
for (const T &pointValue : pointValues)
|
||||
pixelValues.append(pointValue * factor);
|
||||
return pixelValues;
|
||||
return scale(pointRegion, QHighDpiScaling::factor(window));
|
||||
}
|
||||
|
||||
} // namespace QHighDpi
|
||||
|
@ -514,7 +514,7 @@ float QVector3D::distanceToPlane
|
||||
/*!
|
||||
\overload
|
||||
|
||||
Returns the distance from this vertex a plane defined by
|
||||
Returns the distance from this vertex to a plane defined by
|
||||
the vertices \a plane1, \a plane2 and \a plane3.
|
||||
|
||||
The return value will be negative if the vertex is below the plane,
|
||||
|
@ -349,6 +349,9 @@ bool QOpenGLTextureBlitterPrivate::buildProgram(ProgramIndex idx, const char *vs
|
||||
|
||||
p->glProgram->setUniformValue(p->swizzleUniformPos, false);
|
||||
|
||||
// minmize state left set after a create()
|
||||
p->glProgram->release();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -4566,7 +4566,9 @@ static void blend_color_rgb16(int count, const QSpan *spans, void *userData)
|
||||
if (mode == QPainter::CompositionMode_Source) {
|
||||
// inline for performance
|
||||
ushort c = data->solidColor.toRgb16();
|
||||
while (count--) {
|
||||
for (; count--; spans++) {
|
||||
if (!spans->len)
|
||||
continue;
|
||||
ushort *target = ((ushort *)data->rasterBuffer->scanLine(spans->y)) + spans->x;
|
||||
if (spans->coverage == 255) {
|
||||
qt_memfill(target, c, spans->len);
|
||||
@ -4579,13 +4581,14 @@ static void blend_color_rgb16(int count, const QSpan *spans, void *userData)
|
||||
++target;
|
||||
}
|
||||
}
|
||||
++spans;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
if (mode == QPainter::CompositionMode_SourceOver) {
|
||||
while (count--) {
|
||||
for (; count--; spans++) {
|
||||
if (!spans->len)
|
||||
continue;
|
||||
uint color = BYTE_MUL(data->solidColor.toArgb32(), spans->coverage);
|
||||
int ialpha = qAlpha(~color);
|
||||
ushort c = qConvertRgb32To16(color);
|
||||
@ -4617,7 +4620,6 @@ static void blend_color_rgb16(int count, const QSpan *spans, void *userData)
|
||||
// one last pixel beyond a full word
|
||||
*target = c + BYTE_MUL_RGB16(*target, ialpha);
|
||||
}
|
||||
++spans;
|
||||
}
|
||||
return;
|
||||
}
|
||||
@ -4634,6 +4636,11 @@ void handleSpans(int count, const QSpan *spans, const QSpanData *data, T &handle
|
||||
|
||||
int coverage = 0;
|
||||
while (count) {
|
||||
if (!spans->len) {
|
||||
++spans;
|
||||
--count;
|
||||
continue;
|
||||
}
|
||||
int x = spans->x;
|
||||
const int y = spans->y;
|
||||
int right = x + spans->len;
|
||||
@ -4790,7 +4797,9 @@ static void blend_untransformed_generic(int count, const QSpan *spans, void *use
|
||||
int xoff = -qRound(-data->dx);
|
||||
int yoff = -qRound(-data->dy);
|
||||
|
||||
while (count--) {
|
||||
for (; count--; spans++) {
|
||||
if (!spans->len)
|
||||
continue;
|
||||
int x = spans->x;
|
||||
int length = spans->len;
|
||||
int sx = xoff + x;
|
||||
@ -4818,7 +4827,6 @@ static void blend_untransformed_generic(int count, const QSpan *spans, void *use
|
||||
}
|
||||
}
|
||||
}
|
||||
++spans;
|
||||
}
|
||||
}
|
||||
|
||||
@ -4840,7 +4848,9 @@ static void blend_untransformed_generic_rgb64(int count, const QSpan *spans, voi
|
||||
int xoff = -qRound(-data->dx);
|
||||
int yoff = -qRound(-data->dy);
|
||||
|
||||
while (count--) {
|
||||
for (; count--; spans++) {
|
||||
if (!spans->len)
|
||||
continue;
|
||||
int x = spans->x;
|
||||
int length = spans->len;
|
||||
int sx = xoff + x;
|
||||
@ -4868,7 +4878,6 @@ static void blend_untransformed_generic_rgb64(int count, const QSpan *spans, voi
|
||||
}
|
||||
}
|
||||
}
|
||||
++spans;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
@ -4889,7 +4898,9 @@ static void blend_untransformed_argb(int count, const QSpan *spans, void *userDa
|
||||
int xoff = -qRound(-data->dx);
|
||||
int yoff = -qRound(-data->dy);
|
||||
|
||||
while (count--) {
|
||||
for (; count--; spans++) {
|
||||
if (!spans->len)
|
||||
continue;
|
||||
int x = spans->x;
|
||||
int length = spans->len;
|
||||
int sx = xoff + x;
|
||||
@ -4909,7 +4920,6 @@ static void blend_untransformed_argb(int count, const QSpan *spans, void *userDa
|
||||
op.func(dest, src, length, coverage);
|
||||
}
|
||||
}
|
||||
++spans;
|
||||
}
|
||||
}
|
||||
|
||||
@ -4982,7 +4992,12 @@ static void blend_untransformed_rgb565(int count, const QSpan *spans, void *user
|
||||
int xoff = -qRound(-data->dx);
|
||||
int yoff = -qRound(-data->dy);
|
||||
|
||||
while (count--) {
|
||||
const QSpan *end = spans + count;
|
||||
while (spans < end) {
|
||||
if (!spans->len) {
|
||||
++spans;
|
||||
continue;
|
||||
}
|
||||
const quint8 coverage = (data->texture.const_alpha * spans->coverage) >> 8;
|
||||
if (coverage == 0) {
|
||||
++spans;
|
||||
|
@ -4149,7 +4149,7 @@ static void qt_span_fill_clipped(int spanCount, const QSpan *spans, void *userDa
|
||||
Clip spans to \a{clip}-rectangle.
|
||||
Returns number of unclipped spans
|
||||
*/
|
||||
static int qt_intersect_spans(QT_FT_Span *spans, int numSpans,
|
||||
static int qt_intersect_spans(QT_FT_Span *&spans, int numSpans,
|
||||
const QRect &clip)
|
||||
{
|
||||
const short minx = clip.left();
|
||||
@ -4157,29 +4157,32 @@ static int qt_intersect_spans(QT_FT_Span *spans, int numSpans,
|
||||
const short maxx = clip.right();
|
||||
const short maxy = clip.bottom();
|
||||
|
||||
int n = 0;
|
||||
for (int i = 0; i < numSpans; ++i) {
|
||||
if (spans[i].y > maxy)
|
||||
QT_FT_Span *end = spans + numSpans;
|
||||
while (spans < end) {
|
||||
if (spans->y >= miny)
|
||||
break;
|
||||
if (spans[i].y < miny
|
||||
|| spans[i].x > maxx
|
||||
|| spans[i].x + spans[i].len <= minx) {
|
||||
continue;
|
||||
}
|
||||
if (spans[i].x < minx) {
|
||||
spans[n].len = qMin(spans[i].len - (minx - spans[i].x), maxx - minx + 1);
|
||||
spans[n].x = minx;
|
||||
} else {
|
||||
spans[n].x = spans[i].x;
|
||||
spans[n].len = qMin(spans[i].len, ushort(maxx - spans[n].x + 1));
|
||||
}
|
||||
if (spans[n].len == 0)
|
||||
continue;
|
||||
spans[n].y = spans[i].y;
|
||||
spans[n].coverage = spans[i].coverage;
|
||||
++n;
|
||||
++spans;
|
||||
}
|
||||
return n;
|
||||
|
||||
QT_FT_Span *s = spans;
|
||||
while (s < end) {
|
||||
if (s->y > maxy)
|
||||
break;
|
||||
if (s->x > maxx || s->x + s->len <= minx) {
|
||||
s->len = 0;
|
||||
++s;
|
||||
continue;
|
||||
}
|
||||
if (s->x < minx) {
|
||||
s->len = qMin(s->len - (minx - s->x), maxx - minx + 1);
|
||||
s->x = minx;
|
||||
} else {
|
||||
s->len = qMin(s->len, ushort(maxx - s->x + 1));
|
||||
}
|
||||
++s;
|
||||
}
|
||||
|
||||
return s - spans;
|
||||
}
|
||||
|
||||
|
||||
@ -4192,11 +4195,12 @@ static void qt_span_fill_clipRect(int count, const QSpan *spans,
|
||||
Q_ASSERT(fillData->clip);
|
||||
Q_ASSERT(!fillData->clip->clipRect.isEmpty());
|
||||
|
||||
QSpan *s = const_cast<QSpan *>(spans);
|
||||
// hw: check if this const_cast<> is safe!!!
|
||||
count = qt_intersect_spans(const_cast<QSpan*>(spans), count,
|
||||
count = qt_intersect_spans(s, count,
|
||||
fillData->clip->clipRect);
|
||||
if (count > 0)
|
||||
fillData->unclipped_blend(count, spans, fillData);
|
||||
fillData->unclipped_blend(count, s, fillData);
|
||||
}
|
||||
|
||||
static void qt_span_clip(int count, const QSpan *spans, void *userData)
|
||||
@ -4773,7 +4777,8 @@ static inline void drawEllipsePoints(int x, int y, int length,
|
||||
if (length == 0)
|
||||
return;
|
||||
|
||||
QT_FT_Span outline[4];
|
||||
QT_FT_Span _outline[4];
|
||||
QT_FT_Span *outline = _outline;
|
||||
const int midx = rect.x() + (rect.width() + 1) / 2;
|
||||
const int midy = rect.y() + (rect.height() + 1) / 2;
|
||||
|
||||
@ -4805,7 +4810,8 @@ static inline void drawEllipsePoints(int x, int y, int length,
|
||||
outline[3].coverage = 255;
|
||||
|
||||
if (brush_func && outline[0].x + outline[0].len < outline[1].x) {
|
||||
QT_FT_Span fill[2];
|
||||
QT_FT_Span _fill[2];
|
||||
QT_FT_Span *fill = _fill;
|
||||
|
||||
// top fill
|
||||
fill[0].x = outline[0].x + outline[0].len - 1;
|
||||
|
@ -522,7 +522,7 @@ void QStroker::joinPoints(qfixed focal_x, qfixed focal_y, const QLineF &nextLine
|
||||
|
||||
QLineF shortCut(prevLine.p2(), nextLine.p1());
|
||||
qreal angle = shortCut.angleTo(prevLine);
|
||||
if (type == QLineF::BoundedIntersection || (angle > 90 && !qFuzzyCompare(angle, (qreal)90))) {
|
||||
if ((type == QLineF::BoundedIntersection || (angle > qreal(90.01))) && nextLine.length() > offset) {
|
||||
emitLineTo(focal_x, focal_y);
|
||||
emitLineTo(qt_real_to_fixed(nextLine.x1()), qt_real_to_fixed(nextLine.y1()));
|
||||
return;
|
||||
|
@ -899,11 +899,6 @@ QDistanceField::QDistanceField(int width, int height)
|
||||
{
|
||||
}
|
||||
|
||||
QDistanceField::QDistanceField(const QDistanceField &other)
|
||||
{
|
||||
d = other.d;
|
||||
}
|
||||
|
||||
QDistanceField &QDistanceField::operator=(const QDistanceField &)
|
||||
= default;
|
||||
|
||||
|
@ -94,7 +94,6 @@ public:
|
||||
QDistanceField(const QRawFont &font, glyph_t glyph, bool doubleResolution = false);
|
||||
QDistanceField(QFontEngine *fontEngine, glyph_t glyph, bool doubleResolution = false);
|
||||
QDistanceField(const QPainterPath &path, glyph_t glyph, bool doubleResolution = false);
|
||||
QDistanceField(const QDistanceField &other);
|
||||
QDistanceField &operator=(const QDistanceField &other);
|
||||
|
||||
bool isNull() const;
|
||||
|
@ -233,19 +233,20 @@ QNetworkConfigurationManager::QNetworkConfigurationManager(QObject *parent)
|
||||
: QObject(parent)
|
||||
{
|
||||
QNetworkConfigurationManagerPrivate *priv = qNetworkConfigurationManagerPrivate();
|
||||
if (priv) {
|
||||
connect(priv, SIGNAL(configurationAdded(QNetworkConfiguration)),
|
||||
this, SIGNAL(configurationAdded(QNetworkConfiguration)));
|
||||
connect(priv, SIGNAL(configurationRemoved(QNetworkConfiguration)),
|
||||
this, SIGNAL(configurationRemoved(QNetworkConfiguration)));
|
||||
connect(priv, SIGNAL(configurationChanged(QNetworkConfiguration)),
|
||||
this, SIGNAL(configurationChanged(QNetworkConfiguration)));
|
||||
connect(priv, SIGNAL(onlineStateChanged(bool)),
|
||||
this, SIGNAL(onlineStateChanged(bool)));
|
||||
connect(priv, SIGNAL(configurationUpdateComplete()),
|
||||
this, SIGNAL(updateCompleted()));
|
||||
|
||||
connect(priv, SIGNAL(configurationAdded(QNetworkConfiguration)),
|
||||
this, SIGNAL(configurationAdded(QNetworkConfiguration)));
|
||||
connect(priv, SIGNAL(configurationRemoved(QNetworkConfiguration)),
|
||||
this, SIGNAL(configurationRemoved(QNetworkConfiguration)));
|
||||
connect(priv, SIGNAL(configurationChanged(QNetworkConfiguration)),
|
||||
this, SIGNAL(configurationChanged(QNetworkConfiguration)));
|
||||
connect(priv, SIGNAL(onlineStateChanged(bool)),
|
||||
this, SIGNAL(onlineStateChanged(bool)));
|
||||
connect(priv, SIGNAL(configurationUpdateComplete()),
|
||||
this, SIGNAL(updateCompleted()));
|
||||
|
||||
priv->enablePolling();
|
||||
priv->enablePolling();
|
||||
}
|
||||
}
|
||||
|
||||
/*!
|
||||
|
@ -258,7 +258,8 @@ QNetworkSession::QNetworkSession(const QNetworkConfiguration &connectionConfig,
|
||||
|
||||
// invalid configuration
|
||||
if (!connectionConfig.identifier().isEmpty()) {
|
||||
const auto engines = qNetworkConfigurationManagerPrivate()->engines();
|
||||
auto priv = qNetworkConfigurationManagerPrivate();
|
||||
const auto engines = priv ? priv->engines() : QList<QBearerEngine *>();
|
||||
for (QBearerEngine *engine : engines) {
|
||||
if (engine->hasIdentifier(connectionConfig.identifier())) {
|
||||
d = engine->createSessionBackend();
|
||||
|
@ -71,6 +71,10 @@
|
||||
#include "qwindowscarootfetcher_p.h"
|
||||
#endif
|
||||
|
||||
#if !QT_CONFIG(opensslv11)
|
||||
#include <openssl/x509_vfy.h>
|
||||
#endif
|
||||
|
||||
#include <QtCore/qdatetime.h>
|
||||
#include <QtCore/qdebug.h>
|
||||
#include <QtCore/qdir.h>
|
||||
@ -137,6 +141,55 @@ static unsigned int q_ssl_psk_server_callback(SSL *ssl,
|
||||
Q_ASSERT(d);
|
||||
return d->tlsPskServerCallback(identity, psk, max_psk_len);
|
||||
}
|
||||
|
||||
#ifdef TLS1_3_VERSION
|
||||
#ifndef OPENSSL_NO_PSK
|
||||
static unsigned int q_ssl_psk_restore_client(SSL *ssl,
|
||||
const char *hint,
|
||||
char *identity, unsigned int max_identity_len,
|
||||
unsigned char *psk, unsigned int max_psk_len)
|
||||
{
|
||||
Q_UNUSED(hint);
|
||||
Q_UNUSED(identity);
|
||||
Q_UNUSED(max_identity_len);
|
||||
Q_UNUSED(psk);
|
||||
Q_UNUSED(max_psk_len);
|
||||
|
||||
#ifdef QT_DEBUG
|
||||
QSslSocketBackendPrivate *d = reinterpret_cast<QSslSocketBackendPrivate *>(q_SSL_get_ex_data(ssl, QSslSocketBackendPrivate::s_indexForSSLExtraData));
|
||||
Q_ASSERT(d);
|
||||
Q_ASSERT(d->mode == QSslSocket::SslClientMode);
|
||||
#endif
|
||||
q_SSL_set_psk_client_callback(ssl, &q_ssl_psk_client_callback);
|
||||
|
||||
return 0;
|
||||
}
|
||||
#endif // !OPENSSL_NO_PSK
|
||||
|
||||
static int q_ssl_psk_use_session_callback(SSL *ssl, const EVP_MD *md, const unsigned char **id,
|
||||
size_t *idlen, SSL_SESSION **sess)
|
||||
{
|
||||
Q_UNUSED(ssl);
|
||||
Q_UNUSED(md);
|
||||
Q_UNUSED(id);
|
||||
Q_UNUSED(idlen);
|
||||
Q_UNUSED(sess);
|
||||
|
||||
#ifndef OPENSSL_NO_PSK
|
||||
#ifdef QT_DEBUG
|
||||
QSslSocketBackendPrivate *d = reinterpret_cast<QSslSocketBackendPrivate *>(q_SSL_get_ex_data(ssl, QSslSocketBackendPrivate::s_indexForSSLExtraData));
|
||||
Q_ASSERT(d);
|
||||
Q_ASSERT(d->mode == QSslSocket::SslClientMode);
|
||||
#endif
|
||||
|
||||
// Temporarily rebind the psk because it will be called next. The function will restore it.
|
||||
q_SSL_set_psk_client_callback(ssl, &q_ssl_psk_restore_client);
|
||||
#endif
|
||||
|
||||
return 1; // need to return 1 or else "the connection setup fails."
|
||||
}
|
||||
#endif // TLS1_3_VERSION
|
||||
|
||||
#endif
|
||||
|
||||
#if QT_CONFIG(ocsp)
|
||||
@ -345,47 +398,41 @@ bool qt_OCSP_certificate_match(OCSP_SINGLERESP *singleResponse, X509 *peerCert,
|
||||
|
||||
#endif // ocsp
|
||||
|
||||
// ### This list is shared between all threads, and protected by a
|
||||
// mutex. Investigate using thread local storage instead. Or better properly
|
||||
// use OpenSSL's ability to attach application data to an SSL/SSL_CTX
|
||||
// and extract it in a callback. See how it's done, for example, in PSK
|
||||
// callback or in DTLS verification callback.
|
||||
struct QSslErrorList
|
||||
{
|
||||
QMutex mutex;
|
||||
QVector<QSslErrorEntry> errors;
|
||||
};
|
||||
|
||||
Q_GLOBAL_STATIC(QSslErrorList, _q_sslErrorList)
|
||||
|
||||
int q_X509Callback(int ok, X509_STORE_CTX *ctx)
|
||||
{
|
||||
if (!ok) {
|
||||
// Store the error and at which depth the error was detected.
|
||||
_q_sslErrorList()->errors << QSslErrorEntry::fromStoreContext(ctx);
|
||||
#if !QT_CONFIG(opensslv11)
|
||||
#ifdef QSSLSOCKET_DEBUG
|
||||
qCDebug(lcSsl) << "verification error: dumping bad certificate";
|
||||
qCDebug(lcSsl) << QSslCertificatePrivate::QSslCertificate_from_X509(q_X509_STORE_CTX_get_current_cert(ctx)).toPem();
|
||||
qCDebug(lcSsl) << "dumping chain";
|
||||
const auto certs = QSslSocketBackendPrivate::STACKOFX509_to_QSslCertificates(q_X509_STORE_CTX_get_chain(ctx));
|
||||
for (const QSslCertificate &cert : certs) {
|
||||
qCDebug(lcSsl) << "Issuer:" << "O=" << cert.issuerInfo(QSslCertificate::Organization)
|
||||
<< "CN=" << cert.issuerInfo(QSslCertificate::CommonName)
|
||||
<< "L=" << cert.issuerInfo(QSslCertificate::LocalityName)
|
||||
<< "OU=" << cert.issuerInfo(QSslCertificate::OrganizationalUnitName)
|
||||
<< "C=" << cert.issuerInfo(QSslCertificate::CountryName)
|
||||
<< "ST=" << cert.issuerInfo(QSslCertificate::StateOrProvinceName);
|
||||
qCDebug(lcSsl) << "Subject:" << "O=" << cert.subjectInfo(QSslCertificate::Organization)
|
||||
<< "CN=" << cert.subjectInfo(QSslCertificate::CommonName)
|
||||
<< "L=" << cert.subjectInfo(QSslCertificate::LocalityName)
|
||||
<< "OU=" << cert.subjectInfo(QSslCertificate::OrganizationalUnitName)
|
||||
<< "C=" << cert.subjectInfo(QSslCertificate::CountryName)
|
||||
<< "ST=" << cert.subjectInfo(QSslCertificate::StateOrProvinceName);
|
||||
qCDebug(lcSsl) << "Valid:" << cert.effectiveDate() << '-' << cert.expiryDate();
|
||||
|
||||
using ErrorListPtr = QVector<QSslErrorEntry>*;
|
||||
ErrorListPtr errors = nullptr;
|
||||
|
||||
// Error list is attached to either 'SSL' or 'X509_STORE'.
|
||||
if (X509_STORE *store = q_X509_STORE_CTX_get0_store(ctx)) { // We try store first:
|
||||
#if QT_CONFIG(opensslv11)
|
||||
errors = ErrorListPtr(q_X509_STORE_get_ex_data(store, 0));
|
||||
#else
|
||||
errors = ErrorListPtr(q_CRYPTO_get_ex_data(&store->ex_data, 0));
|
||||
#endif // opensslv11
|
||||
}
|
||||
#endif // QSSLSOCKET_DEBUG
|
||||
#endif // !QT_CONFIG(opensslv11)
|
||||
|
||||
if (!errors) {
|
||||
// Not found on store? Try SSL and its external data then. According to the OpenSSL's
|
||||
// documentation:
|
||||
//
|
||||
// "Whenever a X509_STORE_CTX object is created for the verification of the peers certificate
|
||||
// during a handshake, a pointer to the SSL object is stored into the X509_STORE_CTX object
|
||||
// to identify the connection affected. To retrieve this pointer the X509_STORE_CTX_get_ex_data()
|
||||
// function can be used with the correct index."
|
||||
if (SSL *ssl = static_cast<SSL *>(q_X509_STORE_CTX_get_ex_data(ctx, q_SSL_get_ex_data_X509_STORE_CTX_idx())))
|
||||
errors = ErrorListPtr(q_SSL_get_ex_data(ssl, QSslSocketBackendPrivate::s_indexForSSLExtraData + 1));
|
||||
}
|
||||
|
||||
if (!errors) {
|
||||
qCWarning(lcSsl, "Neither X509_STORE, nor SSL contains error list, handshake failure");
|
||||
return 0;
|
||||
}
|
||||
|
||||
errors->append(QSslErrorEntry::fromStoreContext(ctx));
|
||||
}
|
||||
// Always return OK to allow verification to continue. We handle the
|
||||
// errors gracefully after collecting all errors, after verification has
|
||||
@ -541,11 +588,7 @@ bool QSslSocketBackendPrivate::initSslContext()
|
||||
else
|
||||
q_SSL_set_accept_state(ssl);
|
||||
|
||||
#if OPENSSL_VERSION_NUMBER >= 0x10001000L
|
||||
// Save a pointer to this object into the SSL structure.
|
||||
if (QSslSocket::sslLibraryVersionNumber() >= 0x10001000L)
|
||||
q_SSL_set_ex_data(ssl, s_indexForSSLExtraData, this);
|
||||
#endif
|
||||
q_SSL_set_ex_data(ssl, s_indexForSSLExtraData, this);
|
||||
|
||||
#if OPENSSL_VERSION_NUMBER >= 0x10001000L && !defined(OPENSSL_NO_PSK)
|
||||
// Set the client callback for PSK
|
||||
@ -556,6 +599,13 @@ bool QSslSocketBackendPrivate::initSslContext()
|
||||
q_SSL_set_psk_server_callback(ssl, &q_ssl_psk_server_callback);
|
||||
}
|
||||
#endif
|
||||
#if OPENSSL_VERSION_NUMBER >= 0x10101006L
|
||||
// Set the client callback for TLSv1.3 PSK
|
||||
if (mode == QSslSocket::SslClientMode
|
||||
&& QSslSocket::sslLibraryBuildVersionNumber() >= 0x10101006L) {
|
||||
q_SSL_set_psk_use_session_callback(ssl, &q_ssl_psk_use_session_callback);
|
||||
}
|
||||
#endif // openssl version >= 0x10101006L
|
||||
|
||||
#if QT_CONFIG(ocsp)
|
||||
if (configuration.ocspStaplingEnabled) {
|
||||
@ -1123,14 +1173,14 @@ bool QSslSocketBackendPrivate::startHandshake()
|
||||
if (inSetAndEmitError)
|
||||
return false;
|
||||
|
||||
QMutexLocker locker(&_q_sslErrorList()->mutex);
|
||||
_q_sslErrorList()->errors.clear();
|
||||
QVector<QSslErrorEntry> lastErrors;
|
||||
q_SSL_set_ex_data(ssl, s_indexForSSLExtraData + 1, &lastErrors);
|
||||
int result = (mode == QSslSocket::SslClientMode) ? q_SSL_connect(ssl) : q_SSL_accept(ssl);
|
||||
q_SSL_set_ex_data(ssl, s_indexForSSLExtraData + 1, nullptr);
|
||||
|
||||
const auto &lastErrors = _q_sslErrorList()->errors;
|
||||
if (!lastErrors.isEmpty())
|
||||
storePeerCertificates();
|
||||
for (const auto ¤tError : lastErrors) {
|
||||
for (const auto ¤tError : qAsConst(lastErrors)) {
|
||||
emit q->peerVerifyError(_q_OpenSSL_to_QSslError(currentError.code,
|
||||
configuration.peerCertificateChain.value(currentError.depth)));
|
||||
if (q->state() != QAbstractSocket::ConnectedState)
|
||||
@ -1138,7 +1188,6 @@ bool QSslSocketBackendPrivate::startHandshake()
|
||||
}
|
||||
|
||||
errorList << lastErrors;
|
||||
locker.unlock();
|
||||
|
||||
// Connection aborted during handshake phase.
|
||||
if (q->state() != QAbstractSocket::ConnectedState)
|
||||
@ -1520,28 +1569,14 @@ bool QSslSocketBackendPrivate::checkOcspStatus()
|
||||
// 3) It checks CertID in response.
|
||||
// 4) Ensures the responder is authorized to sign the status respond.
|
||||
//
|
||||
// Here it's important to notice that it calls X509_cert_verify and
|
||||
// as a result, possibly, our verification callback. Given this callback
|
||||
// at the moment uses a global variable, we have to lock. This will change
|
||||
// as soon as we fix our verification procedure.
|
||||
// Also note, OpenSSL prior to 1.0.2b would only use bs->certs to
|
||||
// Note, OpenSSL prior to 1.0.2b would only use bs->certs to
|
||||
// verify the responder's chain (see their commit 4ba9a4265bd).
|
||||
// Working this around - is too much fuss for ancient versions we
|
||||
// are dropping quite soon anyway.
|
||||
{
|
||||
const unsigned long verificationFlags = 0;
|
||||
const QMutexLocker locker(&_q_sslErrorList()->mutex);
|
||||
// Before unlocking the mutex, startHandshake() stores errors (found in SSL_connect()
|
||||
// or SSL_accept()) into the local variable, so it's safe to clear it here - as soon
|
||||
// as we managed to lock, whoever had the lock before, already stored their own copy
|
||||
// of errors.
|
||||
_q_sslErrorList()->errors.clear();
|
||||
const int success = q_OCSP_basic_verify(basicResponse, peerChain, store, verificationFlags);
|
||||
if (success <= 0 || _q_sslErrorList()->errors.size()) {
|
||||
_q_sslErrorList()->errors.clear();
|
||||
ocspErrors.push_back(QSslError::OcspResponseCannotBeTrusted);
|
||||
}
|
||||
}
|
||||
const unsigned long verificationFlags = 0;
|
||||
const int success = q_OCSP_basic_verify(basicResponse, peerChain, store, verificationFlags);
|
||||
if (success <= 0)
|
||||
ocspErrors.push_back(QSslError::OcspResponseCannotBeTrusted);
|
||||
|
||||
if (q_OCSP_resp_count(basicResponse) != 1) {
|
||||
ocspErrors.push_back(QSslError::OcspMalformedResponse);
|
||||
@ -1752,7 +1787,20 @@ QList<QSslError> QSslSocketBackendPrivate::verify(const QList<QSslCertificate> &
|
||||
}
|
||||
}
|
||||
|
||||
QMutexLocker sslErrorListMutexLocker(&_q_sslErrorList()->mutex);
|
||||
QVector<QSslErrorEntry> lastErrors;
|
||||
#if QT_CONFIG(opensslv11)
|
||||
if (!q_X509_STORE_set_ex_data(certStore, 0, &lastErrors)) {
|
||||
qCWarning(lcSsl) << "Unable to attach external data (error list) to a store";
|
||||
errors << QSslError(QSslError::UnspecifiedError);
|
||||
return errors;
|
||||
}
|
||||
#else
|
||||
if (!q_CRYPTO_set_ex_data(&certStore->ex_data, 0, &lastErrors)) {
|
||||
qCWarning(lcSsl) << "Unable to attach external data (error list) to a store";
|
||||
errors << QSslError(QSslError::UnspecifiedError);
|
||||
return errors;
|
||||
}
|
||||
#endif // opensslv11
|
||||
|
||||
// Register a custom callback to get all verification errors.
|
||||
q_X509_STORE_set_verify_cb(certStore, q_X509Callback);
|
||||
@ -1802,12 +1850,7 @@ QList<QSslError> QSslSocketBackendPrivate::verify(const QList<QSslCertificate> &
|
||||
q_OPENSSL_sk_free((OPENSSL_STACK *)intermediates);
|
||||
|
||||
// Now process the errors
|
||||
const auto errorList = std::move(_q_sslErrorList()->errors);
|
||||
_q_sslErrorList()->errors.clear();
|
||||
|
||||
sslErrorListMutexLocker.unlock();
|
||||
|
||||
// Translate the errors
|
||||
if (QSslCertificatePrivate::isBlacklisted(certificateChain[0])) {
|
||||
QSslError error(QSslError::CertificateBlacklisted, certificateChain[0]);
|
||||
errors << error;
|
||||
@ -1821,8 +1864,8 @@ QList<QSslError> QSslSocketBackendPrivate::verify(const QList<QSslCertificate> &
|
||||
}
|
||||
|
||||
// Translate errors from the error list into QSslErrors.
|
||||
errors.reserve(errors.size() + errorList.size());
|
||||
for (const auto &error : qAsConst(errorList))
|
||||
errors.reserve(errors.size() + lastErrors.size());
|
||||
for (const auto &error : qAsConst(lastErrors))
|
||||
errors << _q_OpenSSL_to_QSslError(error.code, certificateChain.value(error.depth));
|
||||
|
||||
q_X509_STORE_free(certStore);
|
||||
|
@ -107,6 +107,8 @@ Q_AUTOTEST_EXPORT void q_X509_up_ref(X509 *a);
|
||||
long q_X509_get_version(X509 *a);
|
||||
EVP_PKEY *q_X509_get_pubkey(X509 *a);
|
||||
void q_X509_STORE_set_verify_cb(X509_STORE *ctx, X509_STORE_CTX_verify_cb verify_cb);
|
||||
int q_X509_STORE_set_ex_data(X509_STORE *ctx, int idx, void *data);
|
||||
void *q_X509_STORE_get_ex_data(X509_STORE *r, int idx);
|
||||
STACK_OF(X509) *q_X509_STORE_CTX_get0_chain(X509_STORE_CTX *ctx);
|
||||
void q_DH_get0_pqg(const DH *dh, const BIGNUM **p, const BIGNUM **q, const BIGNUM **g);
|
||||
int q_DH_bits(DH *dh);
|
||||
@ -184,4 +186,10 @@ const OCSP_CERTID *q_OCSP_SINGLERESP_get0_id(const OCSP_SINGLERESP *x);
|
||||
#define q_SSL_CTX_set_max_proto_version(ctx, version) \
|
||||
q_SSL_CTX_ctrl(ctx, SSL_CTRL_SET_MAX_PROTO_VERSION, version, nullptr)
|
||||
|
||||
extern "C" {
|
||||
typedef int (*q_SSL_psk_use_session_cb_func_t)(SSL *, const EVP_MD *, const unsigned char **, size_t *,
|
||||
SSL_SESSION **);
|
||||
}
|
||||
void q_SSL_set_psk_use_session_callback(SSL *s, q_SSL_psk_use_session_cb_func_t);
|
||||
|
||||
#endif
|
||||
|
@ -164,6 +164,7 @@ DEFINEFUNC(int, SSL_session_reused, SSL *a, a, return 0, return)
|
||||
DEFINEFUNC2(unsigned long, SSL_CTX_set_options, SSL_CTX *ctx, ctx, unsigned long op, op, return 0, return)
|
||||
#ifdef TLS1_3_VERSION
|
||||
DEFINEFUNC2(int, SSL_CTX_set_ciphersuites, SSL_CTX *ctx, ctx, const char *str, str, return 0, return)
|
||||
DEFINEFUNC2(void, SSL_set_psk_use_session_callback, SSL *ssl, ssl, q_SSL_psk_use_session_cb_func_t callback, callback, return, DUMMYARG)
|
||||
#endif
|
||||
DEFINEFUNC3(size_t, SSL_get_client_random, SSL *a, a, unsigned char *out, out, size_t outlen, outlen, return 0, return)
|
||||
DEFINEFUNC3(size_t, SSL_SESSION_get_master_key, const SSL_SESSION *ses, ses, unsigned char *out, out, size_t outlen, outlen, return 0, return)
|
||||
@ -179,6 +180,8 @@ DEFINEFUNC(ASN1_TIME *, X509_getm_notAfter, X509 *a, a, return nullptr, return)
|
||||
DEFINEFUNC(long, X509_get_version, X509 *a, a, return -1, return)
|
||||
DEFINEFUNC(EVP_PKEY *, X509_get_pubkey, X509 *a, a, return nullptr, return)
|
||||
DEFINEFUNC2(void, X509_STORE_set_verify_cb, X509_STORE *a, a, X509_STORE_CTX_verify_cb verify_cb, verify_cb, return, DUMMYARG)
|
||||
DEFINEFUNC3(int, X509_STORE_set_ex_data, X509_STORE *a, a, int idx, idx, void *data, data, return 0, return)
|
||||
DEFINEFUNC2(void *, X509_STORE_get_ex_data, X509_STORE *r, r, int idx, idx, return nullptr, return)
|
||||
DEFINEFUNC(STACK_OF(X509) *, X509_STORE_CTX_get0_chain, X509_STORE_CTX *a, a, return nullptr, return)
|
||||
DEFINEFUNC3(void, CRYPTO_free, void *str, str, const char *file, file, int line, line, return, DUMMYARG)
|
||||
DEFINEFUNC(long, OpenSSL_version_num, void, DUMMYARG, return 0, return)
|
||||
@ -253,6 +256,8 @@ DEFINEFUNC(int, CRYPTO_num_locks, DUMMYARG, DUMMYARG, return 0, return)
|
||||
DEFINEFUNC(void, CRYPTO_set_locking_callback, void (*a)(int, int, const char *, int), a, return, DUMMYARG)
|
||||
DEFINEFUNC(void, CRYPTO_set_id_callback, unsigned long (*a)(), a, return, DUMMYARG)
|
||||
DEFINEFUNC(void, CRYPTO_free, void *a, a, return, DUMMYARG)
|
||||
DEFINEFUNC3(int, CRYPTO_set_ex_data, CRYPTO_EX_DATA *ad, ad, int idx, idx, void *val, val, return 0, return)
|
||||
DEFINEFUNC2(void *, CRYPTO_get_ex_data, const CRYPTO_EX_DATA *ad, ad, int idx, idx, return nullptr, return)
|
||||
DEFINEFUNC(unsigned long, ERR_peek_last_error, DUMMYARG, DUMMYARG, return 0, return)
|
||||
DEFINEFUNC(void, ERR_free_strings, void, DUMMYARG, return, DUMMYARG)
|
||||
DEFINEFUNC(void, EVP_CIPHER_CTX_cleanup, EVP_CIPHER_CTX *a, a, return, DUMMYARG)
|
||||
@ -525,6 +530,7 @@ DEFINEFUNC2(int, X509_STORE_CTX_set_purpose, X509_STORE_CTX *a, a, int b, b, ret
|
||||
DEFINEFUNC(int, X509_STORE_CTX_get_error, X509_STORE_CTX *a, a, return -1, return)
|
||||
DEFINEFUNC(int, X509_STORE_CTX_get_error_depth, X509_STORE_CTX *a, a, return -1, return)
|
||||
DEFINEFUNC(X509 *, X509_STORE_CTX_get_current_cert, X509_STORE_CTX *a, a, return nullptr, return)
|
||||
DEFINEFUNC(X509_STORE *, X509_STORE_CTX_get0_store, X509_STORE_CTX *ctx, ctx, return nullptr, return)
|
||||
DEFINEFUNC(X509_STORE_CTX *, X509_STORE_CTX_new, DUMMYARG, DUMMYARG, return nullptr, return)
|
||||
DEFINEFUNC2(void *, X509_STORE_CTX_get_ex_data, X509_STORE_CTX *ctx, ctx, int idx, idx, return nullptr, return)
|
||||
DEFINEFUNC(int, SSL_get_ex_data_X509_STORE_CTX_idx, DUMMYARG, DUMMYARG, return -1, return)
|
||||
@ -975,6 +981,7 @@ bool q_resolveOpenSslSymbols()
|
||||
RESOLVEFUNC(SSL_CTX_set_options)
|
||||
#ifdef TLS1_3_VERSION
|
||||
RESOLVEFUNC(SSL_CTX_set_ciphersuites)
|
||||
RESOLVEFUNC(SSL_set_psk_use_session_callback)
|
||||
#endif // TLS 1.3 or OpenSSL > 1.1.1
|
||||
RESOLVEFUNC(SSL_get_client_random)
|
||||
RESOLVEFUNC(SSL_SESSION_get_master_key)
|
||||
@ -992,6 +999,8 @@ bool q_resolveOpenSslSymbols()
|
||||
RESOLVEFUNC(X509_get_version)
|
||||
RESOLVEFUNC(X509_get_pubkey)
|
||||
RESOLVEFUNC(X509_STORE_set_verify_cb)
|
||||
RESOLVEFUNC(X509_STORE_set_ex_data)
|
||||
RESOLVEFUNC(X509_STORE_get_ex_data)
|
||||
RESOLVEFUNC(CRYPTO_free)
|
||||
RESOLVEFUNC(OpenSSL_version_num)
|
||||
RESOLVEFUNC(OpenSSL_version)
|
||||
@ -1063,6 +1072,8 @@ bool q_resolveOpenSslSymbols()
|
||||
RESOLVEFUNC(CRYPTO_num_locks)
|
||||
RESOLVEFUNC(CRYPTO_set_id_callback)
|
||||
RESOLVEFUNC(CRYPTO_set_locking_callback)
|
||||
RESOLVEFUNC(CRYPTO_set_ex_data)
|
||||
RESOLVEFUNC(CRYPTO_get_ex_data)
|
||||
RESOLVEFUNC(ERR_peek_last_error)
|
||||
RESOLVEFUNC(ERR_free_strings)
|
||||
RESOLVEFUNC(EVP_CIPHER_CTX_cleanup)
|
||||
@ -1324,6 +1335,7 @@ bool q_resolveOpenSslSymbols()
|
||||
RESOLVEFUNC(X509_STORE_CTX_get_error)
|
||||
RESOLVEFUNC(X509_STORE_CTX_get_error_depth)
|
||||
RESOLVEFUNC(X509_STORE_CTX_get_current_cert)
|
||||
RESOLVEFUNC(X509_STORE_CTX_get0_store)
|
||||
RESOLVEFUNC(X509_cmp)
|
||||
RESOLVEFUNC(X509_STORE_CTX_get_ex_data)
|
||||
|
||||
|
@ -464,6 +464,7 @@ int q_X509_STORE_CTX_set_purpose(X509_STORE_CTX *ctx, int purpose);
|
||||
int q_X509_STORE_CTX_get_error(X509_STORE_CTX *ctx);
|
||||
int q_X509_STORE_CTX_get_error_depth(X509_STORE_CTX *ctx);
|
||||
X509 *q_X509_STORE_CTX_get_current_cert(X509_STORE_CTX *ctx);
|
||||
X509_STORE *q_X509_STORE_CTX_get0_store(X509_STORE_CTX *ctx);
|
||||
|
||||
// Diffie-Hellman support
|
||||
DH *q_DH_new();
|
||||
|
@ -84,6 +84,8 @@ int q_CRYPTO_num_locks();
|
||||
void q_CRYPTO_set_locking_callback(void (*a)(int, int, const char *, int));
|
||||
void q_CRYPTO_set_id_callback(unsigned long (*a)());
|
||||
void q_CRYPTO_free(void *a);
|
||||
int q_CRYPTO_set_ex_data(CRYPTO_EX_DATA *ad, int idx, void *val);
|
||||
void *q_CRYPTO_get_ex_data(const CRYPTO_EX_DATA *ad, int idx);
|
||||
unsigned long q_ERR_peek_last_error();
|
||||
void q_ERR_free_strings();
|
||||
void q_EVP_CIPHER_CTX_cleanup(EVP_CIPHER_CTX *a);
|
||||
|
@ -265,6 +265,8 @@ static RoleMapping map[] = {
|
||||
//: Role of an accessible object
|
||||
{ QAccessible::Desktop, ATSPI_ROLE_DESKTOP_FRAME, QT_TRANSLATE_NOOP("QSpiAccessibleBridge", "desktop") },
|
||||
//: Role of an accessible object
|
||||
{ QAccessible::Notification, ATSPI_ROLE_NOTIFICATION, QT_TRANSLATE_NOOP("QSpiAccessibleBridge", "notification") },
|
||||
//: Role of an accessible object
|
||||
{ QAccessible::UserRole, ATSPI_ROLE_UNKNOWN, QT_TRANSLATE_NOOP("QSpiAccessibleBridge", "unknown") }
|
||||
};
|
||||
|
||||
|
@ -56,12 +56,13 @@ QT_BEGIN_NAMESPACE
|
||||
static QBearerEngineImpl *getEngineFromId(const QString &id)
|
||||
{
|
||||
QNetworkConfigurationManagerPrivate *priv = qNetworkConfigurationManagerPrivate();
|
||||
|
||||
const auto engines = priv->engines();
|
||||
for (QBearerEngine *engine : engines) {
|
||||
QBearerEngineImpl *engineImpl = qobject_cast<QBearerEngineImpl *>(engine);
|
||||
if (engineImpl && engineImpl->hasIdentifier(id))
|
||||
return engineImpl;
|
||||
if (priv) {
|
||||
const auto engines = priv->engines();
|
||||
for (QBearerEngine *engine : engines) {
|
||||
QBearerEngineImpl *engineImpl = qobject_cast<QBearerEngineImpl *>(engine);
|
||||
if (engineImpl && engineImpl->hasIdentifier(id))
|
||||
return engineImpl;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -151,6 +151,9 @@ private slots:
|
||||
private:
|
||||
void sendInputMethodEvent(QInputMethodEvent *event);
|
||||
QSharedPointer<QInputMethodQueryEvent> focusObjectInputMethodQuery(Qt::InputMethodQueries queries = Qt::ImQueryAll);
|
||||
bool focusObjectIsComposing() const;
|
||||
void focusObjectStartComposing();
|
||||
bool focusObjectStopComposing();
|
||||
|
||||
private:
|
||||
ExtractedText m_extractedText;
|
||||
@ -158,9 +161,8 @@ private:
|
||||
int m_composingTextStart;
|
||||
int m_composingCursor;
|
||||
QMetaObject::Connection m_updateCursorPosConnection;
|
||||
bool m_blockUpdateSelection;
|
||||
HandleModes m_handleMode;
|
||||
QAtomicInt m_batchEditNestingLevel;
|
||||
int m_batchEditNestingLevel;
|
||||
QObject *m_focusObject;
|
||||
QTimer m_hideCursorHandleTimer;
|
||||
};
|
||||
|
@ -55,6 +55,7 @@ public:
|
||||
QNSWindowBackingStore(QWindow *window);
|
||||
~QNSWindowBackingStore();
|
||||
|
||||
void resize(const QSize &size, const QRegion &staticContents) override;
|
||||
void flush(QWindow *, const QRegion &, const QPoint &) override;
|
||||
|
||||
private:
|
||||
|
@ -71,6 +71,24 @@ QImage::Format QNSWindowBackingStore::format() const
|
||||
return QRasterBackingStore::format();
|
||||
}
|
||||
|
||||
void QNSWindowBackingStore::resize(const QSize &size, const QRegion &staticContents)
|
||||
{
|
||||
qCDebug(lcQpaBackingStore) << "Resize requested to" << size;
|
||||
QRasterBackingStore::resize(size, staticContents);
|
||||
|
||||
// The window shadow rendered by AppKit is based on the shape/content of the
|
||||
// NSWindow surface. Technically any flush of the backingstore can result in
|
||||
// a potentially new shape of the window, and would need a shadow invalidation,
|
||||
// but this is likely too expensive to do at every flush for the few cases where
|
||||
// clients change the shape dynamically. One case where we do know that the shadow
|
||||
// likely needs invalidation, if the window has partially transparent content,
|
||||
// is after a resize, where AppKit's default shadow may be based on the previous
|
||||
// window content.
|
||||
QCocoaWindow *cocoaWindow = static_cast<QCocoaWindow *>(window()->handle());
|
||||
if (cocoaWindow->isContentView() && !cocoaWindow->isOpaque())
|
||||
cocoaWindow->m_needsInvalidateShadow = true;
|
||||
}
|
||||
|
||||
/*!
|
||||
Flushes the given \a region from the specified \a window onto the
|
||||
screen.
|
||||
@ -217,6 +235,7 @@ void QNSWindowBackingStore::flush(QWindow *window, const QRegion ®ion, const
|
||||
|
||||
QCocoaWindow *topLevelCocoaWindow = static_cast<QCocoaWindow *>(topLevelWindow->handle());
|
||||
if (Q_UNLIKELY(topLevelCocoaWindow->m_needsInvalidateShadow)) {
|
||||
qCDebug(lcQpaBackingStore) << "Invalidating window shadow for" << topLevelCocoaWindow;
|
||||
[topLevelView.window invalidateShadow];
|
||||
topLevelCocoaWindow->m_needsInvalidateShadow = false;
|
||||
}
|
||||
@ -382,10 +401,11 @@ void QCALayerBackingStore::ensureBackBuffer()
|
||||
|
||||
bool QCALayerBackingStore::recreateBackBufferIfNeeded()
|
||||
{
|
||||
const qreal devicePixelRatio = window()->devicePixelRatio();
|
||||
const QCocoaWindow *platformWindow = static_cast<QCocoaWindow *>(window()->handle());
|
||||
const qreal devicePixelRatio = platformWindow->devicePixelRatio();
|
||||
QSize requestedBufferSize = m_requestedSize * devicePixelRatio;
|
||||
|
||||
const NSView *backingStoreView = static_cast<QCocoaWindow *>(window()->handle())->view();
|
||||
const NSView *backingStoreView = platformWindow->view();
|
||||
Q_UNUSED(backingStoreView);
|
||||
|
||||
auto bufferSizeMismatch = [&](const QSize requested, const QSize actual) {
|
||||
|
@ -191,6 +191,7 @@ public:
|
||||
static void waitingObserverCallback(CFRunLoopObserverRef observer,
|
||||
CFRunLoopActivity activity, void *info);
|
||||
static void firstLoopEntry(CFRunLoopObserverRef ref, CFRunLoopActivity activity, void *info);
|
||||
bool sendQueuedUserInputEvents();
|
||||
void processPostedEvents();
|
||||
};
|
||||
|
||||
|
@ -377,16 +377,9 @@ bool QCocoaEventDispatcher::processEvents(QEventLoop::ProcessEventsFlags flags)
|
||||
NSEvent* event = nil;
|
||||
|
||||
// First, send all previously excluded input events, if any:
|
||||
if (!excludeUserEvents) {
|
||||
while (!d->queuedUserInputEvents.isEmpty()) {
|
||||
event = static_cast<NSEvent *>(d->queuedUserInputEvents.takeFirst());
|
||||
if (!filterNativeEvent("NSEvent", event, nullptr)) {
|
||||
[NSApp sendEvent:event];
|
||||
retVal = true;
|
||||
}
|
||||
[event release];
|
||||
}
|
||||
}
|
||||
if (d->sendQueuedUserInputEvents())
|
||||
retVal = true;
|
||||
|
||||
|
||||
// If Qt is used as a plugin, or as an extension in a native cocoa
|
||||
// application, we should not run or stop NSApplication; This will be
|
||||
@ -843,6 +836,23 @@ void QCocoaEventDispatcherPrivate::waitingObserverCallback(CFRunLoopObserverRef,
|
||||
emit static_cast<QCocoaEventDispatcher*>(info)->awake();
|
||||
}
|
||||
|
||||
bool QCocoaEventDispatcherPrivate::sendQueuedUserInputEvents()
|
||||
{
|
||||
Q_Q(QCocoaEventDispatcher);
|
||||
if (processEventsFlags & QEventLoop::ExcludeUserInputEvents)
|
||||
return false;
|
||||
bool didSendEvent = false;
|
||||
while (!queuedUserInputEvents.isEmpty()) {
|
||||
NSEvent *event = static_cast<NSEvent *>(queuedUserInputEvents.takeFirst());
|
||||
if (!q->filterNativeEvent("NSEvent", event, nullptr)) {
|
||||
[NSApp sendEvent:event];
|
||||
didSendEvent = true;
|
||||
}
|
||||
[event release];
|
||||
}
|
||||
return didSendEvent;
|
||||
}
|
||||
|
||||
void QCocoaEventDispatcherPrivate::processPostedEvents()
|
||||
{
|
||||
if (blockSendPostedEvents) {
|
||||
@ -896,6 +906,7 @@ void QCocoaEventDispatcherPrivate::postedEventsSourceCallback(void *info)
|
||||
d->maybeCancelWaitForMoreEvents();
|
||||
return;
|
||||
}
|
||||
d->sendQueuedUserInputEvents();
|
||||
d->processPostedEvents();
|
||||
d->maybeCancelWaitForMoreEvents();
|
||||
}
|
||||
|
@ -92,6 +92,9 @@ public:
|
||||
bool isOpen() const;
|
||||
void setIsOpen(bool isOpen);
|
||||
|
||||
bool isAboutToShow() const;
|
||||
void setIsAboutToShow(bool isAbout);
|
||||
|
||||
void timerEvent(QTimerEvent *e) override;
|
||||
|
||||
void syncMenuItem_helper(QPlatformMenuItem *menuItem, bool menubarUpdate);
|
||||
@ -111,6 +114,7 @@ private:
|
||||
bool m_parentEnabled:1;
|
||||
bool m_visible:1;
|
||||
bool m_isOpen:1;
|
||||
bool m_isAboutToShow:1;
|
||||
};
|
||||
|
||||
QT_END_NAMESPACE
|
||||
|
@ -178,6 +178,16 @@ void QCocoaMenu::setIsOpen(bool isOpen)
|
||||
m_isOpen = isOpen;
|
||||
}
|
||||
|
||||
bool QCocoaMenu::isAboutToShow() const
|
||||
{
|
||||
return m_isAboutToShow;
|
||||
}
|
||||
|
||||
void QCocoaMenu::setIsAboutToShow(bool isAbout)
|
||||
{
|
||||
m_isAboutToShow = isAbout;
|
||||
}
|
||||
|
||||
void QCocoaMenu::removeMenuItem(QPlatformMenuItem *menuItem)
|
||||
{
|
||||
QMacAutoReleasePool pool;
|
||||
|
@ -141,6 +141,12 @@ void QCocoaMenuItem::setMenu(QPlatformMenu *menu)
|
||||
if (menu == m_menu)
|
||||
return;
|
||||
|
||||
bool setAttached = false;
|
||||
if ([m_native.menu isKindOfClass:[QCocoaNSMenu class]]) {
|
||||
auto parentMenu = static_cast<QCocoaNSMenu *>(m_native.menu);
|
||||
setAttached = parentMenu.platformMenu && parentMenu.platformMenu->isAboutToShow();
|
||||
}
|
||||
|
||||
if (m_menu && m_menu->menuParent() == this) {
|
||||
m_menu->setMenuParent(nullptr);
|
||||
// Free the menu from its parent's influence
|
||||
@ -154,6 +160,8 @@ void QCocoaMenuItem::setMenu(QPlatformMenu *menu)
|
||||
if (m_menu) {
|
||||
m_menu->setMenuParent(this);
|
||||
m_menu->propagateEnabledState(isEnabled());
|
||||
if (setAttached)
|
||||
m_menu->setAttachedItem(m_native);
|
||||
} else {
|
||||
// we previously had a menu, but no longer
|
||||
// clear out our item so the nexy sync() call builds a new one
|
||||
|
@ -195,7 +195,9 @@ static NSString *qt_mac_removePrivateUnicode(NSString *string)
|
||||
return;
|
||||
|
||||
platformMenu->setIsOpen(true);
|
||||
platformMenu->setIsAboutToShow(true);
|
||||
emit platformMenu->aboutToShow();
|
||||
platformMenu->setIsAboutToShow(false);
|
||||
}
|
||||
|
||||
- (void)menuDidClose:(NSMenu *)menu
|
||||
|
@ -1011,16 +1011,16 @@ void QCocoaWindow::setMask(const QRegion ®ion)
|
||||
} else {
|
||||
m_view.layer.mask = nil;
|
||||
}
|
||||
}
|
||||
|
||||
if (isContentView()) {
|
||||
// Setting the mask requires invalidating the NSWindow shadow, but that needs
|
||||
// to happen after the backingstore has been redrawn, so that AppKit can pick
|
||||
// up the new window shape based on the backingstore content. Doing a display
|
||||
// directly here is not an option, as the window might not be exposed at this
|
||||
// time, and so would not result in an updated backingstore.
|
||||
m_needsInvalidateShadow = true;
|
||||
[m_view setNeedsDisplay:YES];
|
||||
} else {
|
||||
if (isContentView()) {
|
||||
// Setting the mask requires invalidating the NSWindow shadow, but that needs
|
||||
// to happen after the backingstore has been redrawn, so that AppKit can pick
|
||||
// up the new window shape based on the backingstore content. Doing a display
|
||||
// directly here is not an option, as the window might not be exposed at this
|
||||
// time, and so would not result in an updated backingstore.
|
||||
m_needsInvalidateShadow = true;
|
||||
[m_view setNeedsDisplay:YES];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -101,6 +101,8 @@
|
||||
- (id)accessibilityElementAtIndex:(NSInteger)index
|
||||
{
|
||||
[self initAccessibility];
|
||||
if (index >= [m_accessibleElements count])
|
||||
return nil;
|
||||
return m_accessibleElements[index];
|
||||
}
|
||||
|
||||
@ -110,4 +112,10 @@
|
||||
return [m_accessibleElements indexOfObject:element];
|
||||
}
|
||||
|
||||
- (NSArray *)accessibilityElements
|
||||
{
|
||||
[self initAccessibility];
|
||||
return m_accessibleElements;
|
||||
}
|
||||
|
||||
@end
|
||||
|
@ -77,6 +77,7 @@
|
||||
#include <QtCore/qoperatingsystemversion.h>
|
||||
#include <QtCore/qsysinfo.h>
|
||||
#include <QtCore/qscopedpointer.h>
|
||||
#include <QtCore/quuid.h>
|
||||
#include <QtCore/private/qsystemlibrary_p.h>
|
||||
|
||||
#include <QtEventDispatcherSupport/private/qwindowsguieventdispatcher_p.h>
|
||||
@ -544,7 +545,7 @@ QString QWindowsContext::registerWindowClass(QString cname,
|
||||
// each one has to have window class names with a unique name
|
||||
// The first instance gets the unmodified name; if the class
|
||||
// has already been registered by another instance of Qt then
|
||||
// add an instance-specific ID, the address of the window proc.
|
||||
// add a UUID.
|
||||
static int classExists = -1;
|
||||
|
||||
const auto appInstance = static_cast<HINSTANCE>(GetModuleHandle(nullptr));
|
||||
@ -555,7 +556,7 @@ QString QWindowsContext::registerWindowClass(QString cname,
|
||||
}
|
||||
|
||||
if (classExists)
|
||||
cname += QString::number(reinterpret_cast<quintptr>(proc));
|
||||
cname += QUuid::createUuid().toString();
|
||||
|
||||
if (d->m_registeredWindowClassNames.contains(cname)) // already registered in our list
|
||||
return cname;
|
||||
|
@ -204,7 +204,6 @@ QGLXContext::QGLXContext(QXcbScreen *screen, const QSurfaceFormat &format, QPlat
|
||||
, m_shareContext(0)
|
||||
, m_format(format)
|
||||
, m_isPBufferCurrent(false)
|
||||
, m_swapInterval(-1)
|
||||
, m_ownsContext(nativeHandle.isNull())
|
||||
, m_getGraphicsResetStatus(0)
|
||||
, m_lost(false)
|
||||
@ -567,9 +566,9 @@ bool QGLXContext::makeCurrent(QPlatformSurface *surface)
|
||||
|
||||
if (success && surfaceClass == QSurface::Window) {
|
||||
int interval = surface->format().swapInterval();
|
||||
QXcbWindow *window = static_cast<QXcbWindow *>(surface);
|
||||
QXcbScreen *screen = screenForPlatformSurface(surface);
|
||||
if (interval >= 0 && m_swapInterval != interval && screen) {
|
||||
m_swapInterval = interval;
|
||||
if (interval >= 0 && interval != window->swapInterval() && screen) {
|
||||
typedef void (*qt_glXSwapIntervalEXT)(Display *, GLXDrawable, int);
|
||||
typedef void (*qt_glXSwapIntervalMESA)(unsigned int);
|
||||
static qt_glXSwapIntervalEXT glXSwapIntervalEXT = 0;
|
||||
@ -588,6 +587,7 @@ bool QGLXContext::makeCurrent(QPlatformSurface *surface)
|
||||
glXSwapIntervalEXT(m_display, glxDrawable, interval);
|
||||
else if (glXSwapIntervalMESA)
|
||||
glXSwapIntervalMESA(interval);
|
||||
window->setSwapInterval(interval);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -87,7 +87,6 @@ private:
|
||||
GLXContext m_shareContext;
|
||||
QSurfaceFormat m_format;
|
||||
bool m_isPBufferCurrent;
|
||||
int m_swapInterval;
|
||||
bool m_ownsContext;
|
||||
GLenum (APIENTRY * m_getGraphicsResetStatus)();
|
||||
bool m_lost;
|
||||
|
@ -658,16 +658,24 @@ QImage::Format QXcbScreen::format() const
|
||||
return format;
|
||||
}
|
||||
|
||||
QDpi QXcbScreen::logicalDpi() const
|
||||
int QXcbScreen::forcedDpi() const
|
||||
{
|
||||
static const int overrideDpi = qEnvironmentVariableIntValue("QT_FONT_DPI");
|
||||
if (overrideDpi)
|
||||
return QDpi(overrideDpi, overrideDpi);
|
||||
return overrideDpi;
|
||||
|
||||
const int forcedDpi = m_virtualDesktop->forcedDpi();
|
||||
if (forcedDpi > 0) {
|
||||
if (forcedDpi > 0)
|
||||
return forcedDpi;
|
||||
return 0;
|
||||
}
|
||||
|
||||
QDpi QXcbScreen::logicalDpi() const
|
||||
{
|
||||
const int forcedDpi = this->forcedDpi();
|
||||
if (forcedDpi > 0)
|
||||
return QDpi(forcedDpi, forcedDpi);
|
||||
}
|
||||
|
||||
return m_virtualDesktop->dpi();
|
||||
}
|
||||
|
||||
@ -739,7 +747,9 @@ void QXcbScreen::updateGeometry(const QRect &geometry, uint8_t rotation)
|
||||
if (m_sizeMillimeters.isEmpty())
|
||||
m_sizeMillimeters = sizeInMillimeters(geometry.size(), m_virtualDesktop->dpi());
|
||||
|
||||
qreal dpi = geometry.width() / physicalSize().width() * qreal(25.4);
|
||||
qreal dpi = forcedDpi();
|
||||
if (dpi <= 0)
|
||||
dpi = geometry.width() / physicalSize().width() * qreal(25.4);
|
||||
|
||||
// Use 128 as a reference DPI on small screens. This favors "small UI" over "large UI".
|
||||
qreal referenceDpi = physicalSize().width() <= 320 ? 128 : 96;
|
||||
|
@ -208,6 +208,7 @@ public:
|
||||
|
||||
private:
|
||||
void sendStartupMessage(const QByteArray &message) const;
|
||||
int forcedDpi() const;
|
||||
|
||||
QByteArray getOutputProperty(xcb_atom_t atom) const;
|
||||
QByteArray getEdid() const;
|
||||
|
@ -184,6 +184,9 @@ public:
|
||||
static void setWindowTitle(const QXcbConnection *conn, xcb_window_t window, const QString &title);
|
||||
static QString windowTitle(const QXcbConnection *conn, xcb_window_t window);
|
||||
|
||||
int swapInterval() const { return m_swapInterval; }
|
||||
void setSwapInterval(int swapInterval) { m_swapInterval = swapInterval; }
|
||||
|
||||
public Q_SLOTS:
|
||||
void updateSyncRequestCounter();
|
||||
|
||||
@ -276,6 +279,7 @@ protected:
|
||||
SyncState m_syncState = NoSyncNeeded;
|
||||
|
||||
QXcbSyncWindowRequest *m_pendingSyncRequest = nullptr;
|
||||
int m_swapInterval = -1;
|
||||
};
|
||||
|
||||
class QXcbForeignWindow : public QXcbWindow
|
||||
|
@ -2001,7 +2001,8 @@ QMacStyle::QMacStyle()
|
||||
Q_D(QMacStyle);
|
||||
// FIXME: Tie this logic into theme change, or even polish/unpolish
|
||||
if (QOperatingSystemVersion::current() >= QOperatingSystemVersion::MacOSMojave) {
|
||||
d->appearanceObserver = QMacKeyValueObserver(NSApp, @"effectiveAppearance", [&d] {
|
||||
d->appearanceObserver = QMacKeyValueObserver(NSApp, @"effectiveAppearance", [this] {
|
||||
Q_D(QMacStyle);
|
||||
for (NSView *b : d->cocoaControls)
|
||||
[b release];
|
||||
d->cocoaControls.clear();
|
||||
@ -2495,11 +2496,12 @@ int QMacStyle::pixelMetric(PixelMetric metric, const QStyleOption *opt, const QW
|
||||
|
||||
QPalette QMacStyle::standardPalette() const
|
||||
{
|
||||
QPalette pal = QCommonStyle::standardPalette();
|
||||
pal.setColor(QPalette::Disabled, QPalette::Dark, QColor(191, 191, 191));
|
||||
pal.setColor(QPalette::Active, QPalette::Dark, QColor(191, 191, 191));
|
||||
pal.setColor(QPalette::Inactive, QPalette::Dark, QColor(191, 191, 191));
|
||||
return pal;
|
||||
auto platformTheme = QGuiApplicationPrivate::platformTheme();
|
||||
auto styleNames = platformTheme->themeHint(QPlatformTheme::StyleNames);
|
||||
if (styleNames.toStringList().contains("macintosh"))
|
||||
return *platformTheme->palette();
|
||||
else
|
||||
return QStyle::standardPalette();
|
||||
}
|
||||
|
||||
int QMacStyle::styleHint(StyleHint sh, const QStyleOption *opt, const QWidget *w,
|
||||
|
@ -381,8 +381,6 @@ QWidget *QApplication::topLevelAt(const QPoint &pos)
|
||||
0 if there is no such widget.
|
||||
*/
|
||||
|
||||
void qt_init(QApplicationPrivate *priv, int type
|
||||
);
|
||||
void qt_init_tooltip_palette();
|
||||
void qt_cleanup();
|
||||
|
||||
@ -428,16 +426,10 @@ bool Q_WIDGETS_EXPORT qt_tab_all_widgets()
|
||||
// ######## move to QApplicationPrivate
|
||||
// Default application palettes and fonts (per widget type)
|
||||
Q_GLOBAL_STATIC(PaletteHash, app_palettes)
|
||||
PaletteHash *qt_app_palettes_hash()
|
||||
{
|
||||
return app_palettes();
|
||||
}
|
||||
|
||||
Q_GLOBAL_STATIC(FontHash, app_fonts)
|
||||
FontHash *qt_app_fonts_hash()
|
||||
{
|
||||
return app_fonts();
|
||||
}
|
||||
// Exported accessors for use outside of this file
|
||||
PaletteHash *qt_app_palettes_hash() { return app_palettes(); }
|
||||
FontHash *qt_app_fonts_hash() { return app_fonts(); }
|
||||
|
||||
QWidgetList *QApplicationPrivate::popupWidgets = 0; // has keyboard input focus
|
||||
|
||||
@ -571,7 +563,10 @@ void QApplicationPrivate::init()
|
||||
process_cmdline();
|
||||
|
||||
// Must be called before initialize()
|
||||
qt_init(this, application_type);
|
||||
QColormap::initialize();
|
||||
qt_init_tooltip_palette();
|
||||
QApplicationPrivate::initializeWidgetFontHash();
|
||||
|
||||
initialize();
|
||||
eventDispatcher->startingUp();
|
||||
|
||||
@ -582,18 +577,6 @@ void QApplicationPrivate::init()
|
||||
|
||||
}
|
||||
|
||||
void qt_init(QApplicationPrivate *priv, int type)
|
||||
{
|
||||
Q_UNUSED(priv);
|
||||
Q_UNUSED(type);
|
||||
|
||||
QColormap::initialize();
|
||||
|
||||
qt_init_tooltip_palette();
|
||||
|
||||
QApplicationPrivate::initializeWidgetFontHash();
|
||||
}
|
||||
|
||||
void qt_init_tooltip_palette()
|
||||
{
|
||||
#ifndef QT_NO_TOOLTIP
|
||||
@ -659,7 +642,7 @@ void QApplicationPrivate::initializeWidgetPaletteHash()
|
||||
QPlatformTheme *platformTheme = QGuiApplicationPrivate::platformTheme();
|
||||
if (!platformTheme)
|
||||
return;
|
||||
qt_app_palettes_hash()->clear();
|
||||
app_palettes()->clear();
|
||||
|
||||
setPossiblePalette(platformTheme->palette(QPlatformTheme::ToolButtonPalette), "QToolButton");
|
||||
setPossiblePalette(platformTheme->palette(QPlatformTheme::ButtonPalette), "QAbstractButton");
|
||||
@ -683,7 +666,7 @@ void QApplicationPrivate::initializeWidgetFontHash()
|
||||
const QPlatformTheme *theme = QGuiApplicationPrivate::platformTheme();
|
||||
if (!theme)
|
||||
return;
|
||||
FontHash *fontHash = qt_app_fonts_hash();
|
||||
FontHash *fontHash = app_fonts();
|
||||
fontHash->clear();
|
||||
|
||||
if (const QFont *font = theme->font(QPlatformTheme::MenuFont))
|
||||
@ -1162,9 +1145,7 @@ void QApplication::setStyle(QStyle *style)
|
||||
} else if (QApplicationPrivate::sys_pal) {
|
||||
clearSystemPalette();
|
||||
initSystemPalette();
|
||||
QApplicationPrivate::initializeWidgetPaletteHash();
|
||||
QApplicationPrivate::initializeWidgetFontHash();
|
||||
QApplicationPrivate::setPalette_helper(*QApplicationPrivate::sys_pal, /*className=*/0, /*clearWidgetPaletteHash=*/false);
|
||||
} else if (!QApplicationPrivate::sys_pal) {
|
||||
// Initialize the sys_pal if it hasn't happened yet...
|
||||
QApplicationPrivate::setSystemPalette(QApplicationPrivate::app_style->standardPalette());
|
||||
@ -1462,28 +1443,10 @@ void QApplication::setPalette(const QPalette &palette, const char* className)
|
||||
|
||||
void QApplicationPrivate::setSystemPalette(const QPalette &pal)
|
||||
{
|
||||
QPalette adjusted;
|
||||
|
||||
#if 0
|
||||
// adjust the system palette to avoid dithering
|
||||
QColormap cmap = QColormap::instance();
|
||||
if (cmap.depths() > 4 && cmap.depths() < 24) {
|
||||
for (int g = 0; g < QPalette::NColorGroups; g++)
|
||||
for (int i = 0; i < QPalette::NColorRoles; i++) {
|
||||
QColor color = pal.color((QPalette::ColorGroup)g, (QPalette::ColorRole)i);
|
||||
color = cmap.colorAt(cmap.pixel(color));
|
||||
adjusted.setColor((QPalette::ColorGroup)g, (QPalette::ColorRole) i, color);
|
||||
}
|
||||
}
|
||||
#else
|
||||
adjusted = pal;
|
||||
#endif
|
||||
|
||||
if (!sys_pal)
|
||||
sys_pal = new QPalette(adjusted);
|
||||
sys_pal = new QPalette(pal);
|
||||
else
|
||||
*sys_pal = adjusted;
|
||||
|
||||
*sys_pal = pal;
|
||||
|
||||
if (!QApplicationPrivate::set_pal)
|
||||
QApplication::setPalette(*sys_pal);
|
||||
|
@ -1,4 +1,4 @@
|
||||
/****************************************************************************
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2017 The Qt Company Ltd.
|
||||
** Copyright (C) 2016 Intel Corporation.
|
||||
@ -2617,14 +2617,27 @@ bool QWidgetPrivate::setScreenForPoint(const QPoint &pos)
|
||||
Q_Q(QWidget);
|
||||
if (!q->isWindow())
|
||||
return false;
|
||||
// Find the screen for pos and make the widget undertand it is on that screen.
|
||||
// Find the screen for pos and make the widget understand it is on that screen.
|
||||
return setScreen(QGuiApplication::screenAt(pos));
|
||||
}
|
||||
|
||||
/*!
|
||||
\internal
|
||||
Ensures that the widget's QWindow is set to be on the given \a screen.
|
||||
Returns true if the screen was changed.
|
||||
*/
|
||||
|
||||
bool QWidgetPrivate::setScreen(QScreen *screen)
|
||||
{
|
||||
Q_Q(QWidget);
|
||||
if (!screen || !q->isWindow())
|
||||
return false;
|
||||
const QScreen *currentScreen = windowHandle() ? windowHandle()->screen() : nullptr;
|
||||
QScreen *actualScreen = QGuiApplication::screenAt(pos);
|
||||
if (actualScreen && currentScreen != actualScreen) {
|
||||
if (currentScreen != screen) {
|
||||
if (!windowHandle()) // Try to create a window handle if not created.
|
||||
createWinId();
|
||||
if (windowHandle())
|
||||
windowHandle()->setScreen(actualScreen);
|
||||
windowHandle()->setScreen(screen);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
@ -7025,37 +7038,41 @@ void QWidget::setTabOrder(QWidget* first, QWidget *second)
|
||||
lastFocusChild = focusNext;
|
||||
}
|
||||
};
|
||||
auto setPrev = [](QWidget *w, QWidget *prev)
|
||||
{
|
||||
w->d_func()->focus_prev = prev;
|
||||
};
|
||||
auto setNext = [](QWidget *w, QWidget *next)
|
||||
{
|
||||
w->d_func()->focus_next = next;
|
||||
};
|
||||
|
||||
QWidget *lastFocusChildOfFirst, *lastFocusChildOfSecond;
|
||||
determineLastFocusChild(first, lastFocusChildOfFirst);
|
||||
// remove the second widget from the chain
|
||||
QWidget *lastFocusChildOfSecond;
|
||||
determineLastFocusChild(second, lastFocusChildOfSecond);
|
||||
|
||||
// If the tab order is already correct, exit early
|
||||
if (lastFocusChildOfFirst == second ||
|
||||
lastFocusChildOfFirst->d_func()->focus_next == second) {
|
||||
return;
|
||||
{
|
||||
QWidget *oldPrev = second->d_func()->focus_prev;
|
||||
QWidget *prevWithFocus = oldPrev;
|
||||
while (prevWithFocus->focusPolicy() == Qt::NoFocus)
|
||||
prevWithFocus = prevWithFocus->d_func()->focus_prev;
|
||||
// only widgets between first and second -> all is fine
|
||||
if (prevWithFocus == first)
|
||||
return;
|
||||
QWidget *oldNext = lastFocusChildOfSecond->d_func()->focus_next;
|
||||
setPrev(oldNext, oldPrev);
|
||||
setNext(oldPrev, oldNext);
|
||||
}
|
||||
|
||||
// Note that we need to handle two different sections in the tab chain; The section
|
||||
// that 'first' belongs to (firstSection), where we are about to insert 'second', and
|
||||
// the section that 'second' used be a part of (secondSection). When we pull 'second'
|
||||
// out of the second section and insert it into the first, we also need to ensure
|
||||
// that we leave the second section in a connected state.
|
||||
QWidget *firstChainOldSecond = lastFocusChildOfFirst->d_func()->focus_next;
|
||||
QWidget *secondChainNewFirst = second->d_func()->focus_prev;
|
||||
QWidget *secondChainNewSecond = lastFocusChildOfSecond->d_func()->focus_next;
|
||||
|
||||
// Insert 'second' after 'first'
|
||||
lastFocusChildOfFirst->d_func()->focus_next = second;
|
||||
second->d_func()->focus_prev = lastFocusChildOfFirst;
|
||||
|
||||
// The widget that used to be 'second' in the first section, should now become 'third'
|
||||
lastFocusChildOfSecond->d_func()->focus_next = firstChainOldSecond;
|
||||
firstChainOldSecond->d_func()->focus_prev = lastFocusChildOfSecond;
|
||||
|
||||
// Repair the second section after we pulled 'second' out of it
|
||||
secondChainNewFirst->d_func()->focus_next = secondChainNewSecond;
|
||||
secondChainNewSecond->d_func()->focus_prev = secondChainNewFirst;
|
||||
// insert the second widget into the chain
|
||||
QWidget *lastFocusChildOfFirst;
|
||||
determineLastFocusChild(first, lastFocusChildOfFirst);
|
||||
{
|
||||
QWidget *oldNext = lastFocusChildOfFirst->d_func()->focus_next;
|
||||
setPrev(second, lastFocusChildOfFirst);
|
||||
setNext(lastFocusChildOfFirst, second);
|
||||
setPrev(oldNext, lastFocusChildOfSecond);
|
||||
setNext(lastFocusChildOfSecond, oldNext);
|
||||
}
|
||||
}
|
||||
|
||||
/*!\internal
|
||||
|
@ -181,6 +181,7 @@ struct QTLWExtra {
|
||||
QRect frameStrut;
|
||||
QRect normalGeometry; // used by showMin/maximized/FullScreen
|
||||
Qt::WindowFlags savedFlags; // Save widget flags while showing fullscreen
|
||||
// ### TODO replace initialScreenIndex with QScreen *, in case the screens change at runtime
|
||||
int initialScreenIndex; // Screen number when passing a QDesktop[Screen]Widget as parent.
|
||||
|
||||
QVector<QPlatformTextureList *> widgetTextures;
|
||||
@ -364,6 +365,7 @@ public:
|
||||
void createWinId();
|
||||
|
||||
bool setScreenForPoint(const QPoint &pos);
|
||||
bool setScreen(QScreen *screen);
|
||||
|
||||
void createTLExtra();
|
||||
void createExtra();
|
||||
|
@ -3706,17 +3706,6 @@ void QStyleSheetStyle::drawControl(ControlElement ce, const QStyleOption *opt, Q
|
||||
bool dis = !(opt->state & QStyle::State_Enabled),
|
||||
act = opt->state & QStyle::State_Selected;
|
||||
|
||||
int checkableOffset = 0;
|
||||
if (checkable) {
|
||||
QRenderRule subSubRule = renderRule(w, opt, PseudoElement_MenuCheckMark);
|
||||
QStyleOptionMenuItem newMi = mi;
|
||||
newMi.rect = positionRect(w, subRule, subSubRule, PseudoElement_MenuCheckMark, opt->rect, opt->direction);
|
||||
// align with icons if there are some
|
||||
checkableOffset = std::max(m->maxIconWidth, newMi.rect.width());
|
||||
if (subSubRule.hasDrawable() || checked)
|
||||
drawPrimitive(PE_IndicatorMenuCheckMark, &newMi, p, w);
|
||||
}
|
||||
|
||||
if (!mi.icon.isNull()) {
|
||||
QIcon::Mode mode = dis ? QIcon::Disabled : QIcon::Normal;
|
||||
if (act && !dis)
|
||||
@ -3733,24 +3722,28 @@ void QStyleSheetStyle::drawControl(ControlElement ce, const QStyleOption *opt, Q
|
||||
}
|
||||
QRect iconRect = positionRect(w, subRule, iconRule, PseudoElement_MenuIcon, opt->rect, opt->direction);
|
||||
if (opt->direction == Qt::LeftToRight)
|
||||
iconRect.moveLeft(iconRect.left() + checkableOffset);
|
||||
iconRect.moveLeft(iconRect.left());
|
||||
else
|
||||
iconRect.moveRight(iconRect.right() - checkableOffset);
|
||||
iconRect.moveRight(iconRect.right());
|
||||
iconRule.drawRule(p, iconRect);
|
||||
QRect pmr(0, 0, pixw, pixh);
|
||||
pmr.moveCenter(iconRect.center());
|
||||
p->drawPixmap(pmr.topLeft(), pixmap);
|
||||
} else if (checkable) {
|
||||
QRenderRule subSubRule = renderRule(w, opt, PseudoElement_MenuCheckMark);
|
||||
if (subSubRule.hasDrawable() || checked) {
|
||||
QStyleOptionMenuItem newMi = mi;
|
||||
if (!dis)
|
||||
newMi.state |= State_Enabled;
|
||||
if (act)
|
||||
newMi.state |= State_On;
|
||||
newMi.rect = positionRect(w, subRule, subSubRule, PseudoElement_MenuCheckMark, opt->rect, opt->direction);
|
||||
drawPrimitive(PE_IndicatorMenuCheckMark, &newMi, p, w);
|
||||
}
|
||||
}
|
||||
|
||||
int textOffset = 0;
|
||||
// padding overrules it all
|
||||
if (!subRule.hasBox() || subRule.box()->paddings[LeftEdge] == 0) {
|
||||
textOffset = checkableOffset;
|
||||
if (!m->icon.isNull() || !checkable)
|
||||
textOffset += m->maxIconWidth;
|
||||
}
|
||||
QRect textRect = subRule.contentsRect(opt->rect);
|
||||
textRect.setLeft(textRect.left() + textOffset);
|
||||
textRect.setLeft(textRect.left() + m->maxIconWidth);
|
||||
textRect.setWidth(textRect.width() - mi.tabWidth);
|
||||
const QRect vTextRect = visualRect(opt->direction, m->rect, textRect);
|
||||
|
||||
@ -5106,27 +5099,20 @@ QSize QStyleSheetStyle::sizeFromContents(ContentsType ct, const QStyleOption *op
|
||||
if (mi->text.contains(QLatin1Char('\t')))
|
||||
sz.rwidth() += 12; //as in QCommonStyle
|
||||
bool checkable = mi->checkType != QStyleOptionMenuItem::NotCheckable;
|
||||
int checkableWidth = 0;
|
||||
if (checkable) {
|
||||
if (!mi->icon.isNull()) {
|
||||
const int pmSmall = pixelMetric(PM_SmallIconSize);
|
||||
const QSize pmSize = mi->icon.actualSize(QSize(pmSmall, pmSmall));
|
||||
sz.rwidth() += pmSize.width() + 4;
|
||||
} else if (checkable) {
|
||||
QRenderRule subSubRule = renderRule(w, opt, PseudoElement_MenuCheckMark);
|
||||
QRect checkmarkRect = positionRect(w, subRule, subSubRule, PseudoElement_MenuCheckMark, opt->rect, opt->direction);
|
||||
checkableWidth = std::max(mi->maxIconWidth, checkmarkRect.width());
|
||||
}
|
||||
if (!mi->icon.isNull()) {
|
||||
QPixmap pixmap = mi->icon.pixmap(pixelMetric(PM_SmallIconSize));
|
||||
sz.rwidth() += pixmap.width();
|
||||
sz.rwidth() += std::max(mi->maxIconWidth, checkmarkRect.width()) + 4;
|
||||
}
|
||||
if (subRule.hasFont) {
|
||||
QFontMetrics fm(subRule.font);
|
||||
const QRect r = fm.boundingRect(QRect(), Qt::TextSingleLine | Qt::TextShowMnemonic, mi->text);
|
||||
sz = sz.expandedTo(r.size());
|
||||
}
|
||||
// padding overrules it all
|
||||
if (!subRule.hasBox() || subRule.box()->paddings[LeftEdge] == 0) {
|
||||
sz.rwidth() += checkableWidth;
|
||||
if (!mi->icon.isNull() || !checkable)
|
||||
sz.rwidth() += mi->maxIconWidth;
|
||||
}
|
||||
return subRule.boxSize(subRule.adjustSize(sz));
|
||||
}
|
||||
}
|
||||
|
@ -3141,8 +3141,6 @@ void QMdiSubWindow::paintEvent(QPaintEvent *paintEvent)
|
||||
}
|
||||
|
||||
Q_D(QMdiSubWindow);
|
||||
if (isMaximized() && !d->drawTitleBarWhenMaximized())
|
||||
return;
|
||||
|
||||
if (d->resizeTimerId != -1) {
|
||||
// Only update the style option rect and the window title.
|
||||
@ -3162,6 +3160,17 @@ void QMdiSubWindow::paintEvent(QPaintEvent *paintEvent)
|
||||
}
|
||||
|
||||
QStylePainter painter(this);
|
||||
QStyleOptionFrame frameOptions;
|
||||
frameOptions.initFrom(this);
|
||||
frameOptions.state.setFlag(QStyle::State_Active, d->isActive);
|
||||
if (isMaximized() && !d->drawTitleBarWhenMaximized()) {
|
||||
if (!autoFillBackground() && (!widget() || !qt_widget_private(widget())->isOpaque)) {
|
||||
// make sure we paint all pixels of a maximized QMdiSubWindow if no-one else does
|
||||
painter.drawPrimitive(QStyle::PE_FrameWindow, frameOptions);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
if (!d->windowTitle.isEmpty())
|
||||
painter.setFont(d->font);
|
||||
painter.drawComplexControl(QStyle::CC_TitleBar, d->cachedStyleOptions);
|
||||
@ -3169,10 +3178,7 @@ void QMdiSubWindow::paintEvent(QPaintEvent *paintEvent)
|
||||
if (isMinimized() && !d->hasBorder(d->cachedStyleOptions))
|
||||
return;
|
||||
|
||||
QStyleOptionFrame frameOptions;
|
||||
frameOptions.initFrom(this);
|
||||
frameOptions.lineWidth = style()->pixelMetric(QStyle::PM_MdiSubWindowFrameWidth, 0, this);
|
||||
frameOptions.state.setFlag(QStyle::State_Active, d->isActive);
|
||||
|
||||
// ### Ensure that we do not require setting the cliprect for 4.4
|
||||
if (!isMinimized() && !d->hasBorder(d->cachedStyleOptions))
|
||||
|
@ -2331,8 +2331,18 @@ void QMenu::popup(const QPoint &p, QAction *atAction)
|
||||
d->updateLayoutDirection();
|
||||
|
||||
// Ensure that we get correct sizeHints by placing this window on the correct screen.
|
||||
if (d->setScreenForPoint(p))
|
||||
// However if the QMenu was constructed with a QDesktopScreenWidget as its parent,
|
||||
// then initialScreenIndex was set, so we should respect that for the lifetime of this menu.
|
||||
// Use d->popupScreen to remember, because initialScreenIndex will be reset after the first showing.
|
||||
const int screenIndex = d->topData()->initialScreenIndex;
|
||||
if (screenIndex >= 0)
|
||||
d->popupScreen = screenIndex;
|
||||
if (auto s = QGuiApplication::screens().value(d->popupScreen)) {
|
||||
if (d->setScreen(s))
|
||||
d->itemsDirty = true;
|
||||
} else if (d->setScreenForPoint(p)) {
|
||||
d->itemsDirty = true;
|
||||
}
|
||||
|
||||
const bool contextMenu = d->isContextMenu();
|
||||
if (d->lastContextMenu != contextMenu) {
|
||||
|
@ -515,6 +515,8 @@ public:
|
||||
bool tearoffHighlighted : 1;
|
||||
//menu fading/scrolling effects
|
||||
bool doChildEffects : 1;
|
||||
|
||||
int popupScreen = -1;
|
||||
};
|
||||
|
||||
QT_END_NAMESPACE
|
||||
|
@ -68,6 +68,7 @@
|
||||
|
||||
#include "qmenu_p.h"
|
||||
#include "qmenubar_p.h"
|
||||
#include <private/qscreen_p.h>
|
||||
#include "qdebug.h"
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
@ -322,11 +323,18 @@ void QMenuBarPrivate::popupAction(QAction *action, bool activateFirst)
|
||||
QRect adjustedActionRect = actionRect(action);
|
||||
QPoint pos(q->mapToGlobal(QPoint(adjustedActionRect.left(), adjustedActionRect.bottom() + 1)));
|
||||
QSize popup_size = activeMenu->sizeHint();
|
||||
|
||||
//we put the popup menu on the screen containing the bottom-center of the action rect
|
||||
QRect screenRect = QDesktopWidgetPrivate::screenGeometry(pos + QPoint(adjustedActionRect.width() / 2, 0));
|
||||
QScreen *popupScreen = q->window()->windowHandle()->screen();
|
||||
QPoint bottomMiddlePos = pos + QPoint(adjustedActionRect.width() / 2, 0);
|
||||
const auto &siblings = popupScreen->virtualSiblings();
|
||||
for (QScreen *sibling : siblings) {
|
||||
if (sibling->geometry().contains(bottomMiddlePos)) {
|
||||
popupScreen = sibling;
|
||||
break;
|
||||
}
|
||||
}
|
||||
QRect screenRect = popupScreen->geometry();
|
||||
pos = QPoint(qMax(pos.x(), screenRect.x()), qMax(pos.y(), screenRect.y()));
|
||||
|
||||
const bool fitUp = (pos.y() - popup_size.height() >= screenRect.top());
|
||||
const bool fitDown = (pos.y() + popup_size.height() <= screenRect.bottom());
|
||||
const bool rtl = q->isRightToLeft();
|
||||
@ -352,6 +360,7 @@ void QMenuBarPrivate::popupAction(QAction *action, bool activateFirst)
|
||||
|
||||
if(!defaultPopDown || (fitUp && !fitDown))
|
||||
pos.setY(qMax(screenRect.y(), q->mapToGlobal(QPoint(0, adjustedActionRect.top()-popup_size.height())).y()));
|
||||
QMenuPrivate::get(activeMenu)->topData()->initialScreenIndex = QGuiApplication::screens().indexOf(popupScreen);
|
||||
activeMenu->popup(pos);
|
||||
if(activateFirst)
|
||||
activeMenu->d_func()->setFirstActionActive();
|
||||
|
@ -83,6 +83,21 @@ void tst_QAbstractAnimation::destruction()
|
||||
{
|
||||
TestableQAbstractAnimation *anim = new TestableQAbstractAnimation;
|
||||
delete anim;
|
||||
|
||||
// Animations should stop when deleted
|
||||
auto *stopWhenDeleted = new TestableQAbstractAnimation;
|
||||
QAbstractAnimation::State lastOldState, lastNewState;
|
||||
QObject::connect(stopWhenDeleted, &QAbstractAnimation::stateChanged,
|
||||
[&](QAbstractAnimation::State newState, QAbstractAnimation::State oldState) {
|
||||
lastNewState = newState;
|
||||
lastOldState = oldState;
|
||||
});
|
||||
stopWhenDeleted->start();
|
||||
QCOMPARE(lastOldState, QAbstractAnimation::Stopped);
|
||||
QCOMPARE(lastNewState, QAbstractAnimation::Running);
|
||||
delete stopWhenDeleted;
|
||||
QCOMPARE(lastOldState, QAbstractAnimation::Running);
|
||||
QCOMPARE(lastNewState, QAbstractAnimation::Stopped);
|
||||
}
|
||||
|
||||
void tst_QAbstractAnimation::currentLoop()
|
||||
|
BIN
tests/auto/gui/image/qimagereader/images/qticon16.png
Normal file
BIN
tests/auto/gui/image/qimagereader/images/qticon16.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.8 KiB |
BIN
tests/auto/gui/image/qimagereader/images/qticon16@2x.png
Normal file
BIN
tests/auto/gui/image/qimagereader/images/qticon16@2x.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 3.1 KiB |
BIN
tests/auto/gui/image/qimagereader/images/qticon16@3x.png
Normal file
BIN
tests/auto/gui/image/qimagereader/images/qticon16@3x.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 5.2 KiB |
@ -164,6 +164,9 @@ private slots:
|
||||
void preserveTexts_data();
|
||||
void preserveTexts();
|
||||
|
||||
void devicePixelRatio_data();
|
||||
void devicePixelRatio();
|
||||
|
||||
private:
|
||||
QString prefix;
|
||||
QTemporaryDir m_temporaryDir;
|
||||
@ -1976,6 +1979,28 @@ void tst_QImageReader::preserveTexts()
|
||||
QCOMPARE(r.text(key3), text3.simplified());
|
||||
}
|
||||
|
||||
void tst_QImageReader::devicePixelRatio_data()
|
||||
{
|
||||
QTest::addColumn<QString>("fileName");
|
||||
QTest::addColumn<QSize>("size");
|
||||
QTest::addColumn<qreal>("dpr");
|
||||
|
||||
QTest::newRow("1x") << "qticon16.png" << QSize(16, 16) << 1.0;
|
||||
QTest::newRow("2x") << "qticon16@2x.png" << QSize(32, 32) << 2.0;
|
||||
QTest::newRow("3x") << "qticon16@3x.png" << QSize(48, 48) << 3.0;
|
||||
}
|
||||
|
||||
void tst_QImageReader::devicePixelRatio()
|
||||
{
|
||||
QFETCH(QString, fileName);
|
||||
QFETCH(QSize, size);
|
||||
QFETCH(qreal, dpr);
|
||||
|
||||
QImageReader r(":/images/" + fileName);
|
||||
QImage img = r.read();
|
||||
QCOMPARE(img.size(), size);
|
||||
QCOMPARE(img.devicePixelRatio(), dpr);
|
||||
}
|
||||
|
||||
QTEST_MAIN(tst_QImageReader)
|
||||
#include "tst_qimagereader.moc"
|
||||
|
@ -340,7 +340,7 @@ void tst_Http2::flowControlServerSide()
|
||||
clearHTTP2State();
|
||||
|
||||
serverPort = 0;
|
||||
nRequests = 30;
|
||||
nRequests = 10;
|
||||
|
||||
const Http2::RawSettings serverSettings = {{Settings::MAX_CONCURRENT_STREAMS_ID, 7}};
|
||||
|
||||
|
@ -2366,7 +2366,7 @@ void tst_QFtp::loginURL()
|
||||
|
||||
ftp = newFtp();
|
||||
addCommand(QFtp::ConnectToHost,
|
||||
ftp->connectToHost(QHostInfo::localHostName(), port));
|
||||
ftp->connectToHost("127.0.0.1", port));
|
||||
addCommand(QFtp::Login, ftp->login(user, password));
|
||||
|
||||
QTestEventLoop::instance().enterLoop(5);
|
||||
@ -2374,7 +2374,7 @@ void tst_QFtp::loginURL()
|
||||
ftp = nullptr;
|
||||
server.stopServer();
|
||||
if (QTestEventLoop::instance().timeout())
|
||||
QFAIL(msgTimedOut(QHostInfo::localHostName(), port));
|
||||
QFAIL(msgTimedOut("127.0.0.1", port));
|
||||
|
||||
QCOMPARE(server.getRawUser(), rawUser);
|
||||
QCOMPARE(server.getRawPassword(), rawPass);
|
||||
|
@ -1,17 +1,17 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIICrTCCAhYCCQCdDn5rci6VDjANBgkqhkiG9w0BAQQFADCBmjEOMAwGA1UEChMF
|
||||
Tm9raWExFDASBgNVBAsTC1F0IFNvZnR3YXJlMSIwIAYJKoZIhvcNAQkBFhNub2Jv
|
||||
ZHlAbm9kb21haW4ub3JnMQ0wCwYDVQQHEwRPc2xvMQ0wCwYDVQQIEwRPc2xvMQsw
|
||||
CQYDVQQGEwJOTzEjMCEGA1UEAxMacXQtdGVzdC1zZXJ2ZXIucXQtdGVzdC1uZXQw
|
||||
HhcNMDkwNzEwMDc0MTIzWhcNMTkwNzA4MDc0MTIzWjCBmjEOMAwGA1UEChMFTm9r
|
||||
aWExFDASBgNVBAsTC1F0IFNvZnR3YXJlMSIwIAYJKoZIhvcNAQkBFhNub2JvZHlA
|
||||
bm9kb21haW4ub3JnMQ0wCwYDVQQHEwRPc2xvMQ0wCwYDVQQIEwRPc2xvMQswCQYD
|
||||
VQQGEwJOTzEjMCEGA1UEAxMacXQtdGVzdC1zZXJ2ZXIucXQtdGVzdC1uZXQwgZ8w
|
||||
DQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAM2q22/WNMmn8cC+5EEYGeICySLmp9W6
|
||||
Ay6eKHr0Xxp3X3epETuPfvAuxp7rOtkS18EMUegkUj8jw0IMEcbyHKFC/rTCaYOt
|
||||
93CxGBXMIChiMPAsFeYzGa/D6xzAkfcRaJRQ+Ek3CDLXPnXfo7xpABXezYcPXAJr
|
||||
gsgBfWrwHdxzAgMBAAEwDQYJKoZIhvcNAQEEBQADgYEAy7YOLCZABQy2Ygkchq1I
|
||||
+TUpvMn+gLwAyW8TNErM1V4lNY2+K78RawzKx3SqM97ymCy4TD45EA3A2gmi32NI
|
||||
xSKBNjFyzngUqsXBdcSasALiowlZCiJrGwlGX5qCkBlxXvJeUEbuJLPYVl5FBjXZ
|
||||
6o00K4cSPCqtqUez7WSmDZU=
|
||||
MIICpzCCAhACCQCzAF1hyRVzAjANBgkqhkiG9w0BAQUFADCBlzELMAkGA1UEBhMC
|
||||
Tk8xDTALBgNVBAgTBE9zbG8xDTALBgNVBAcTBE9zbG8xDjAMBgNVBAoTBU5va2lh
|
||||
MTUwMwYDVQQLFCxRdCBTb2Z0d2FyZS9lbWFpbEFkZHJlc3M9bm9ib2R5QG5vZG9t
|
||||
YWluLm9yZzEjMCEGA1UEAxMacXQtdGVzdC1zZXJ2ZXIucXQtdGVzdC1uZXQwHhcN
|
||||
MTkwNjI0MTI0OTIxWhcNMjIwNjIzMTI0OTIxWjCBlzELMAkGA1UEBhMCTk8xDTAL
|
||||
BgNVBAgTBE9zbG8xDTALBgNVBAcTBE9zbG8xDjAMBgNVBAoTBU5va2lhMTUwMwYD
|
||||
VQQLFCxRdCBTb2Z0d2FyZS9lbWFpbEFkZHJlc3M9bm9ib2R5QG5vZG9tYWluLm9y
|
||||
ZzEjMCEGA1UEAxMacXQtdGVzdC1zZXJ2ZXIucXQtdGVzdC1uZXQwgZ8wDQYJKoZI
|
||||
hvcNAQEBBQADgY0AMIGJAoGBAM2q22/WNMmn8cC+5EEYGeICySLmp9W6Ay6eKHr0
|
||||
Xxp3X3epETuPfvAuxp7rOtkS18EMUegkUj8jw0IMEcbyHKFC/rTCaYOt93CxGBXM
|
||||
IChiMPAsFeYzGa/D6xzAkfcRaJRQ+Ek3CDLXPnXfo7xpABXezYcPXAJrgsgBfWrw
|
||||
HdxzAgMBAAEwDQYJKoZIhvcNAQEFBQADgYEASCKbqEX5ysC549mq90ydk4jyDW3m
|
||||
PUyet01fKpcRqVs+OJxdExFBTra3gho6WzzpTSPsuX2ZKOLF5k6KkCvdCGvhC1Kv
|
||||
HHPIExurfzvdlSRzj6HbKyPuSfxyOloH0bBp7/Gg5RIuBPKlbmfbnTLtwEjhhbMU
|
||||
SoYI8HZd3HfY87c=
|
||||
-----END CERTIFICATE-----
|
||||
|
@ -1,17 +1,17 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIICrTCCAhYCCQCdDn5rci6VDjANBgkqhkiG9w0BAQQFADCBmjEOMAwGA1UEChMF
|
||||
Tm9raWExFDASBgNVBAsTC1F0IFNvZnR3YXJlMSIwIAYJKoZIhvcNAQkBFhNub2Jv
|
||||
ZHlAbm9kb21haW4ub3JnMQ0wCwYDVQQHEwRPc2xvMQ0wCwYDVQQIEwRPc2xvMQsw
|
||||
CQYDVQQGEwJOTzEjMCEGA1UEAxMacXQtdGVzdC1zZXJ2ZXIucXQtdGVzdC1uZXQw
|
||||
HhcNMDkwNzEwMDc0MTIzWhcNMTkwNzA4MDc0MTIzWjCBmjEOMAwGA1UEChMFTm9r
|
||||
aWExFDASBgNVBAsTC1F0IFNvZnR3YXJlMSIwIAYJKoZIhvcNAQkBFhNub2JvZHlA
|
||||
bm9kb21haW4ub3JnMQ0wCwYDVQQHEwRPc2xvMQ0wCwYDVQQIEwRPc2xvMQswCQYD
|
||||
VQQGEwJOTzEjMCEGA1UEAxMacXQtdGVzdC1zZXJ2ZXIucXQtdGVzdC1uZXQwgZ8w
|
||||
DQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAM2q22/WNMmn8cC+5EEYGeICySLmp9W6
|
||||
Ay6eKHr0Xxp3X3epETuPfvAuxp7rOtkS18EMUegkUj8jw0IMEcbyHKFC/rTCaYOt
|
||||
93CxGBXMIChiMPAsFeYzGa/D6xzAkfcRaJRQ+Ek3CDLXPnXfo7xpABXezYcPXAJr
|
||||
gsgBfWrwHdxzAgMBAAEwDQYJKoZIhvcNAQEEBQADgYEAy7YOLCZABQy2Ygkchq1I
|
||||
+TUpvMn+gLwAyW8TNErM1V4lNY2+K78RawzKx3SqM97ymCy4TD45EA3A2gmi32NI
|
||||
xSKBNjFyzngUqsXBdcSasALiowlZCiJrGwlGX5qCkBlxXvJeUEbuJLPYVl5FBjXZ
|
||||
6o00K4cSPCqtqUez7WSmDZU=
|
||||
MIICpzCCAhACCQCzAF1hyRVzAjANBgkqhkiG9w0BAQUFADCBlzELMAkGA1UEBhMC
|
||||
Tk8xDTALBgNVBAgTBE9zbG8xDTALBgNVBAcTBE9zbG8xDjAMBgNVBAoTBU5va2lh
|
||||
MTUwMwYDVQQLFCxRdCBTb2Z0d2FyZS9lbWFpbEFkZHJlc3M9bm9ib2R5QG5vZG9t
|
||||
YWluLm9yZzEjMCEGA1UEAxMacXQtdGVzdC1zZXJ2ZXIucXQtdGVzdC1uZXQwHhcN
|
||||
MTkwNjI0MTI0OTIxWhcNMjIwNjIzMTI0OTIxWjCBlzELMAkGA1UEBhMCTk8xDTAL
|
||||
BgNVBAgTBE9zbG8xDTALBgNVBAcTBE9zbG8xDjAMBgNVBAoTBU5va2lhMTUwMwYD
|
||||
VQQLFCxRdCBTb2Z0d2FyZS9lbWFpbEFkZHJlc3M9bm9ib2R5QG5vZG9tYWluLm9y
|
||||
ZzEjMCEGA1UEAxMacXQtdGVzdC1zZXJ2ZXIucXQtdGVzdC1uZXQwgZ8wDQYJKoZI
|
||||
hvcNAQEBBQADgY0AMIGJAoGBAM2q22/WNMmn8cC+5EEYGeICySLmp9W6Ay6eKHr0
|
||||
Xxp3X3epETuPfvAuxp7rOtkS18EMUegkUj8jw0IMEcbyHKFC/rTCaYOt93CxGBXM
|
||||
IChiMPAsFeYzGa/D6xzAkfcRaJRQ+Ek3CDLXPnXfo7xpABXezYcPXAJrgsgBfWrw
|
||||
HdxzAgMBAAEwDQYJKoZIhvcNAQEFBQADgYEASCKbqEX5ysC549mq90ydk4jyDW3m
|
||||
PUyet01fKpcRqVs+OJxdExFBTra3gho6WzzpTSPsuX2ZKOLF5k6KkCvdCGvhC1Kv
|
||||
HHPIExurfzvdlSRzj6HbKyPuSfxyOloH0bBp7/Gg5RIuBPKlbmfbnTLtwEjhhbMU
|
||||
SoYI8HZd3HfY87c=
|
||||
-----END CERTIFICATE-----
|
||||
|
@ -2755,6 +2755,7 @@ void tst_QSslSocket::encryptWithoutConnecting()
|
||||
|
||||
void tst_QSslSocket::resume_data()
|
||||
{
|
||||
QSKIP("Temporary skip while updating certificates");
|
||||
QTest::addColumn<bool>("ignoreErrorsAfterPause");
|
||||
QTest::addColumn<QList<QSslError> >("errorsToIgnore");
|
||||
QTest::addColumn<bool>("expectSuccess");
|
||||
@ -3592,12 +3593,7 @@ protected:
|
||||
socket = new QSslSocket(this);
|
||||
socket->setSslConfiguration(config);
|
||||
socket->setPeerVerifyMode(peerVerifyMode);
|
||||
if (QSslSocket::sslLibraryVersionNumber() > 0x10101000L) {
|
||||
// FIXME. With OpenSSL 1.1.1 and TLS 1.3 PSK auto-test is broken.
|
||||
socket->setProtocol(QSsl::TlsV1_2);
|
||||
} else {
|
||||
socket->setProtocol(protocol);
|
||||
}
|
||||
socket->setProtocol(protocol);
|
||||
if (ignoreSslErrors)
|
||||
connect(socket, SIGNAL(sslErrors(QList<QSslError>)), this, SLOT(ignoreErrorSlot()));
|
||||
|
||||
@ -3941,11 +3937,6 @@ void tst_QSslSocket::pskServer()
|
||||
return;
|
||||
|
||||
QSslSocket socket;
|
||||
#ifdef TLS1_3_VERSION
|
||||
// FIXME: with OpenSSL 1.1.1 (thus TLS 1.3) test is known to fail
|
||||
// due to the different PSK mechanism (?) - to be investigated ASAP.
|
||||
socket.setProtocol(QSsl::TlsV1_2);
|
||||
#endif
|
||||
this->socket = &socket;
|
||||
|
||||
QSignalSpy connectedSpy(&socket, SIGNAL(connected()));
|
||||
|
@ -34,3 +34,14 @@ setPen blue 40 solidline roundcap
|
||||
drawPath revbez
|
||||
setPen red 0
|
||||
drawPath revbez
|
||||
|
||||
resetMatrix
|
||||
path_lineTo tightJoin 60 10
|
||||
path_cubicTo tightJoin 50 0 100 0 100 50
|
||||
|
||||
translate 50 500
|
||||
|
||||
setPen green 40 solidline roundcap roundjoin
|
||||
drawPath tightJoin
|
||||
setPen red 0
|
||||
drawPath tightJoin
|
||||
|
@ -180,6 +180,7 @@ private slots:
|
||||
void tabOrderWithProxy();
|
||||
void tabOrderWithCompoundWidgets();
|
||||
void tabOrderNoChange();
|
||||
void tabOrderNoChange2();
|
||||
#if defined(Q_OS_WIN) && !defined(Q_OS_WINRT)
|
||||
void activation();
|
||||
#endif
|
||||
@ -1942,6 +1943,24 @@ static QVector<QWidget*> getFocusChain(QWidget *start, bool bForward)
|
||||
return ret;
|
||||
}
|
||||
|
||||
//#define DEBUG_FOCUS_CHAIN
|
||||
static void dumpFocusChain(QWidget *start, bool bForward, const char *desc = nullptr)
|
||||
{
|
||||
#ifdef DEBUG_FOCUS_CHAIN
|
||||
qDebug() << "Dump focus chain, start:" << start << "isForward:" << bForward << desc;
|
||||
QWidget *cur = start;
|
||||
do {
|
||||
qDebug() << cur;
|
||||
auto widgetPrivate = static_cast<QWidgetPrivate *>(qt_widget_private(cur));
|
||||
cur = bForward ? widgetPrivate->focus_next : widgetPrivate->focus_prev;
|
||||
} while (cur != start);
|
||||
#else
|
||||
Q_UNUSED(start)
|
||||
Q_UNUSED(bForward)
|
||||
Q_UNUSED(desc)
|
||||
#endif
|
||||
}
|
||||
|
||||
void tst_QWidget::tabOrderNoChange()
|
||||
{
|
||||
QWidget w;
|
||||
@ -1953,7 +1972,61 @@ void tst_QWidget::tabOrderNoChange()
|
||||
|
||||
const auto focusChainForward = getFocusChain(&w, true);
|
||||
const auto focusChainBackward = getFocusChain(&w, false);
|
||||
dumpFocusChain(&w, true);
|
||||
QWidget::setTabOrder(tabWidget, tv);
|
||||
dumpFocusChain(&w, true);
|
||||
QCOMPARE(focusChainForward, getFocusChain(&w, true));
|
||||
QCOMPARE(focusChainBackward, getFocusChain(&w, false));
|
||||
}
|
||||
|
||||
void tst_QWidget::tabOrderNoChange2()
|
||||
{
|
||||
QWidget w;
|
||||
auto *verticalLayout = new QVBoxLayout(&w);
|
||||
auto *tabWidget = new QTabWidget(&w);
|
||||
tabWidget->setObjectName("tabWidget");
|
||||
verticalLayout->addWidget(tabWidget);
|
||||
|
||||
auto *tab1 = new QWidget(tabWidget);
|
||||
tab1->setObjectName("tab1");
|
||||
auto *vLay1 = new QVBoxLayout(tab1);
|
||||
auto *le1 = new QLineEdit(tab1);
|
||||
le1->setObjectName("le1");
|
||||
auto *le2 = new QLineEdit(tab1);
|
||||
le2->setObjectName("le2");
|
||||
vLay1->addWidget(le1);
|
||||
vLay1->addWidget(le2);
|
||||
tabWidget->addTab(tab1, QStringLiteral("Tab 1"));
|
||||
|
||||
auto *tab2 = new QWidget(tabWidget);
|
||||
tab2->setObjectName("tab2");
|
||||
auto *vLay2 = new QVBoxLayout(tab2);
|
||||
auto *le3 = new QLineEdit(tab2);
|
||||
le3->setObjectName("le3");
|
||||
auto *le4 = new QLineEdit(tab2);
|
||||
le4->setObjectName("le4");
|
||||
vLay2->addWidget(le3);
|
||||
vLay2->addWidget(le4);
|
||||
tabWidget->addTab(tab2, QStringLiteral("Tab 2"));
|
||||
|
||||
const auto focusChainForward = getFocusChain(&w, true);
|
||||
const auto focusChainBackward = getFocusChain(&w, false);
|
||||
dumpFocusChain(&w, true);
|
||||
dumpFocusChain(&w, false);
|
||||
// this will screw up the focus chain order without visible changes,
|
||||
// so don't call it here for the simplicity of the test
|
||||
//QWidget::setTabOrder(tabWidget, le1);
|
||||
|
||||
QWidget::setTabOrder(le1, le2);
|
||||
dumpFocusChain(&w, true, "QWidget::setTabOrder(le1, le2)");
|
||||
QWidget::setTabOrder(le2, le3);
|
||||
dumpFocusChain(&w, true, "QWidget::setTabOrder(le2, le3)");
|
||||
QWidget::setTabOrder(le3, le4);
|
||||
dumpFocusChain(&w, true, "QWidget::setTabOrder(le3, le4)");
|
||||
QWidget::setTabOrder(le4, tabWidget);
|
||||
dumpFocusChain(&w, true, "QWidget::setTabOrder(le4, tabWidget)");
|
||||
dumpFocusChain(&w, false);
|
||||
|
||||
QCOMPARE(focusChainForward, getFocusChain(&w, true));
|
||||
QCOMPARE(focusChainBackward, getFocusChain(&w, false));
|
||||
}
|
||||
|
@ -735,6 +735,7 @@ void tst_QSplitter::replaceWidget()
|
||||
|
||||
// Configure splitter
|
||||
QWidget *oldWidget = sp.widget(index);
|
||||
QTest::qWait(100); // Make sure we record the right original size (after the window manager adds the frame)
|
||||
const QRect oldGeom = oldWidget ? oldWidget->geometry() : QRect();
|
||||
if (oldWidget) {
|
||||
// Collapse first, then hide, if necessary
|
||||
|
Loading…
Reference in New Issue
Block a user