Merge remote-tracking branch 'origin/5.9' into 5.10
Conflicts: src/plugins/platforms/cocoa/qcocoamenu.mm Change-Id: I11c5f8466c5b51e13e5ef6a8fc6e3f2dd79122a7
This commit is contained in:
commit
3061730c2a
303
src/3rdparty/angle/src/libANGLE/Debug2.cpp
vendored
303
src/3rdparty/angle/src/libANGLE/Debug2.cpp
vendored
@ -1,303 +0,0 @@
|
|||||||
//
|
|
||||||
// Copyright (c) 2015 The ANGLE Project Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style license that can be
|
|
||||||
// found in the LICENSE file.
|
|
||||||
//
|
|
||||||
|
|
||||||
// Debug.cpp: Defines debug state used for GL_KHR_debug
|
|
||||||
|
|
||||||
#include "libANGLE/Debug.h"
|
|
||||||
|
|
||||||
#include "common/debug.h"
|
|
||||||
|
|
||||||
#include <algorithm>
|
|
||||||
#include <tuple>
|
|
||||||
|
|
||||||
namespace gl
|
|
||||||
{
|
|
||||||
|
|
||||||
Debug::Debug()
|
|
||||||
: mOutputEnabled(false),
|
|
||||||
mCallbackFunction(nullptr),
|
|
||||||
mCallbackUserParam(nullptr),
|
|
||||||
mMessages(),
|
|
||||||
mMaxLoggedMessages(0),
|
|
||||||
mOutputSynchronous(false),
|
|
||||||
mGroups()
|
|
||||||
{
|
|
||||||
pushDefaultGroup();
|
|
||||||
}
|
|
||||||
|
|
||||||
void Debug::setMaxLoggedMessages(GLuint maxLoggedMessages)
|
|
||||||
{
|
|
||||||
mMaxLoggedMessages = maxLoggedMessages;
|
|
||||||
}
|
|
||||||
|
|
||||||
void Debug::setOutputEnabled(bool enabled)
|
|
||||||
{
|
|
||||||
mOutputEnabled = enabled;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool Debug::isOutputEnabled() const
|
|
||||||
{
|
|
||||||
return mOutputEnabled;
|
|
||||||
}
|
|
||||||
|
|
||||||
void Debug::setOutputSynchronous(bool synchronous)
|
|
||||||
{
|
|
||||||
mOutputSynchronous = synchronous;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool Debug::isOutputSynchronous() const
|
|
||||||
{
|
|
||||||
return mOutputSynchronous;
|
|
||||||
}
|
|
||||||
|
|
||||||
void Debug::setCallback(GLDEBUGPROCKHR callback, const void *userParam)
|
|
||||||
{
|
|
||||||
mCallbackFunction = callback;
|
|
||||||
mCallbackUserParam = userParam;
|
|
||||||
}
|
|
||||||
|
|
||||||
GLDEBUGPROCKHR Debug::getCallback() const
|
|
||||||
{
|
|
||||||
return mCallbackFunction;
|
|
||||||
}
|
|
||||||
|
|
||||||
const void *Debug::getUserParam() const
|
|
||||||
{
|
|
||||||
return mCallbackUserParam;
|
|
||||||
}
|
|
||||||
|
|
||||||
void Debug::insertMessage(GLenum source,
|
|
||||||
GLenum type,
|
|
||||||
GLuint id,
|
|
||||||
GLenum severity,
|
|
||||||
const std::string &message)
|
|
||||||
{
|
|
||||||
std::string messageCopy(message);
|
|
||||||
insertMessage(source, type, id, severity, std::move(messageCopy));
|
|
||||||
}
|
|
||||||
|
|
||||||
void Debug::insertMessage(GLenum source,
|
|
||||||
GLenum type,
|
|
||||||
GLuint id,
|
|
||||||
GLenum severity,
|
|
||||||
std::string &&message)
|
|
||||||
{
|
|
||||||
if (!isMessageEnabled(source, type, id, severity))
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (mCallbackFunction != nullptr)
|
|
||||||
{
|
|
||||||
// TODO(geofflang) Check the synchronous flag and potentially flush messages from another
|
|
||||||
// thread.
|
|
||||||
mCallbackFunction(source, type, id, severity, static_cast<GLsizei>(message.length()),
|
|
||||||
message.c_str(), mCallbackUserParam);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (mMessages.size() >= mMaxLoggedMessages)
|
|
||||||
{
|
|
||||||
// Drop messages over the limit
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
Message m;
|
|
||||||
m.source = source;
|
|
||||||
m.type = type;
|
|
||||||
m.id = id;
|
|
||||||
m.severity = severity;
|
|
||||||
m.message = std::move(message);
|
|
||||||
|
|
||||||
mMessages.push_back(std::move(m));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
size_t Debug::getMessages(GLuint count,
|
|
||||||
GLsizei bufSize,
|
|
||||||
GLenum *sources,
|
|
||||||
GLenum *types,
|
|
||||||
GLuint *ids,
|
|
||||||
GLenum *severities,
|
|
||||||
GLsizei *lengths,
|
|
||||||
GLchar *messageLog)
|
|
||||||
{
|
|
||||||
size_t messageCount = 0;
|
|
||||||
size_t messageStringIndex = 0;
|
|
||||||
while (messageCount <= count && !mMessages.empty())
|
|
||||||
{
|
|
||||||
const Message &m = mMessages.front();
|
|
||||||
|
|
||||||
if (messageLog != nullptr)
|
|
||||||
{
|
|
||||||
// Check that this message can fit in the message buffer
|
|
||||||
if (messageStringIndex + m.message.length() + 1 > static_cast<size_t>(bufSize))
|
|
||||||
{
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
std::copy(m.message.begin(), m.message.end(), messageLog + messageStringIndex);
|
|
||||||
messageStringIndex += m.message.length();
|
|
||||||
|
|
||||||
messageLog[messageStringIndex] = '\0';
|
|
||||||
messageStringIndex += 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (sources != nullptr)
|
|
||||||
{
|
|
||||||
sources[messageCount] = m.source;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (types != nullptr)
|
|
||||||
{
|
|
||||||
types[messageCount] = m.type;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ids != nullptr)
|
|
||||||
{
|
|
||||||
ids[messageCount] = m.id;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (severities != nullptr)
|
|
||||||
{
|
|
||||||
severities[messageCount] = m.severity;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (lengths != nullptr)
|
|
||||||
{
|
|
||||||
lengths[messageCount] = static_cast<GLsizei>(m.message.length());
|
|
||||||
}
|
|
||||||
|
|
||||||
mMessages.pop_front();
|
|
||||||
|
|
||||||
messageCount++;
|
|
||||||
}
|
|
||||||
|
|
||||||
return messageCount;
|
|
||||||
}
|
|
||||||
|
|
||||||
size_t Debug::getNextMessageLength() const
|
|
||||||
{
|
|
||||||
return mMessages.empty() ? 0 : mMessages.front().message.length();
|
|
||||||
}
|
|
||||||
|
|
||||||
size_t Debug::getMessageCount() const
|
|
||||||
{
|
|
||||||
return mMessages.size();
|
|
||||||
}
|
|
||||||
|
|
||||||
void Debug::setMessageControl(GLenum source,
|
|
||||||
GLenum type,
|
|
||||||
GLenum severity,
|
|
||||||
std::vector<GLuint> &&ids,
|
|
||||||
bool enabled)
|
|
||||||
{
|
|
||||||
Control c;
|
|
||||||
c.source = source;
|
|
||||||
c.type = type;
|
|
||||||
c.severity = severity;
|
|
||||||
c.ids = std::move(ids);
|
|
||||||
c.enabled = enabled;
|
|
||||||
|
|
||||||
auto &controls = mGroups.back().controls;
|
|
||||||
controls.push_back(std::move(c));
|
|
||||||
}
|
|
||||||
|
|
||||||
void Debug::pushGroup(GLenum source, GLuint id, std::string &&message)
|
|
||||||
{
|
|
||||||
insertMessage(source, GL_DEBUG_TYPE_PUSH_GROUP, id, GL_DEBUG_SEVERITY_NOTIFICATION,
|
|
||||||
std::string(message));
|
|
||||||
|
|
||||||
Group g;
|
|
||||||
g.source = source;
|
|
||||||
g.id = id;
|
|
||||||
g.message = std::move(message);
|
|
||||||
mGroups.push_back(std::move(g));
|
|
||||||
}
|
|
||||||
|
|
||||||
void Debug::popGroup()
|
|
||||||
{
|
|
||||||
// Make sure the default group is not about to be popped
|
|
||||||
ASSERT(mGroups.size() > 1);
|
|
||||||
|
|
||||||
Group g = mGroups.back();
|
|
||||||
mGroups.pop_back();
|
|
||||||
|
|
||||||
insertMessage(g.source, GL_DEBUG_TYPE_POP_GROUP, g.id, GL_DEBUG_SEVERITY_NOTIFICATION,
|
|
||||||
g.message);
|
|
||||||
}
|
|
||||||
|
|
||||||
size_t Debug::getGroupStackDepth() const
|
|
||||||
{
|
|
||||||
return mGroups.size();
|
|
||||||
}
|
|
||||||
|
|
||||||
bool Debug::isMessageEnabled(GLenum source, GLenum type, GLuint id, GLenum severity) const
|
|
||||||
{
|
|
||||||
if (!mOutputEnabled)
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (auto groupIter = mGroups.rbegin(); groupIter != mGroups.rend(); groupIter++)
|
|
||||||
{
|
|
||||||
const auto &controls = groupIter->controls;
|
|
||||||
for (auto controlIter = controls.rbegin(); controlIter != controls.rend(); controlIter++)
|
|
||||||
{
|
|
||||||
const auto &control = *controlIter;
|
|
||||||
|
|
||||||
if (control.source != GL_DONT_CARE && control.source != source)
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (control.type != GL_DONT_CARE && control.type != type)
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (control.severity != GL_DONT_CARE && control.severity != severity)
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!control.ids.empty() &&
|
|
||||||
std::find(control.ids.begin(), control.ids.end(), id) == control.ids.end())
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
return control.enabled;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
void Debug::pushDefaultGroup()
|
|
||||||
{
|
|
||||||
Group g;
|
|
||||||
g.source = GL_NONE;
|
|
||||||
g.id = 0;
|
|
||||||
g.message = "";
|
|
||||||
|
|
||||||
Control c0;
|
|
||||||
c0.source = GL_DONT_CARE;
|
|
||||||
c0.type = GL_DONT_CARE;
|
|
||||||
c0.severity = GL_DONT_CARE;
|
|
||||||
c0.enabled = true;
|
|
||||||
g.controls.push_back(std::move(c0));
|
|
||||||
|
|
||||||
Control c1;
|
|
||||||
c1.source = GL_DONT_CARE;
|
|
||||||
c1.type = GL_DONT_CARE;
|
|
||||||
c1.severity = GL_DEBUG_SEVERITY_LOW;
|
|
||||||
c1.enabled = false;
|
|
||||||
g.controls.push_back(std::move(c1));
|
|
||||||
|
|
||||||
mGroups.push_back(std::move(g));
|
|
||||||
}
|
|
||||||
} // namespace gl
|
|
120
src/3rdparty/angle/src/libANGLE/Debug2.h
vendored
120
src/3rdparty/angle/src/libANGLE/Debug2.h
vendored
@ -1,120 +0,0 @@
|
|||||||
//
|
|
||||||
// Copyright (c) 2015 The ANGLE Project Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style license that can be
|
|
||||||
// found in the LICENSE file.
|
|
||||||
//
|
|
||||||
|
|
||||||
// Debug.h: Defines debug state used for GL_KHR_debug
|
|
||||||
|
|
||||||
#ifndef LIBANGLE_DEBUG_H_
|
|
||||||
#define LIBANGLE_DEBUG_H_
|
|
||||||
|
|
||||||
#include "angle_gl.h"
|
|
||||||
#include "common/angleutils.h"
|
|
||||||
|
|
||||||
#include <deque>
|
|
||||||
#include <string>
|
|
||||||
#include <vector>
|
|
||||||
|
|
||||||
namespace gl
|
|
||||||
{
|
|
||||||
|
|
||||||
class LabeledObject
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
virtual ~LabeledObject() {}
|
|
||||||
virtual void setLabel(const std::string &label) = 0;
|
|
||||||
virtual const std::string &getLabel() const = 0;
|
|
||||||
};
|
|
||||||
|
|
||||||
class Debug : angle::NonCopyable
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
Debug();
|
|
||||||
|
|
||||||
void setMaxLoggedMessages(GLuint maxLoggedMessages);
|
|
||||||
|
|
||||||
void setOutputEnabled(bool enabled);
|
|
||||||
bool isOutputEnabled() const;
|
|
||||||
|
|
||||||
void setOutputSynchronous(bool synchronous);
|
|
||||||
bool isOutputSynchronous() const;
|
|
||||||
|
|
||||||
void setCallback(GLDEBUGPROCKHR callback, const void *userParam);
|
|
||||||
GLDEBUGPROCKHR getCallback() const;
|
|
||||||
const void *getUserParam() const;
|
|
||||||
|
|
||||||
void insertMessage(GLenum source,
|
|
||||||
GLenum type,
|
|
||||||
GLuint id,
|
|
||||||
GLenum severity,
|
|
||||||
const std::string &message);
|
|
||||||
void insertMessage(GLenum source,
|
|
||||||
GLenum type,
|
|
||||||
GLuint id,
|
|
||||||
GLenum severity,
|
|
||||||
std::string &&message);
|
|
||||||
|
|
||||||
void setMessageControl(GLenum source,
|
|
||||||
GLenum type,
|
|
||||||
GLenum severity,
|
|
||||||
std::vector<GLuint> &&ids,
|
|
||||||
bool enabled);
|
|
||||||
size_t getMessages(GLuint count,
|
|
||||||
GLsizei bufSize,
|
|
||||||
GLenum *sources,
|
|
||||||
GLenum *types,
|
|
||||||
GLuint *ids,
|
|
||||||
GLenum *severities,
|
|
||||||
GLsizei *lengths,
|
|
||||||
GLchar *messageLog);
|
|
||||||
size_t getNextMessageLength() const;
|
|
||||||
size_t getMessageCount() const;
|
|
||||||
|
|
||||||
void pushGroup(GLenum source, GLuint id, std::string &&message);
|
|
||||||
void popGroup();
|
|
||||||
size_t getGroupStackDepth() const;
|
|
||||||
|
|
||||||
private:
|
|
||||||
bool isMessageEnabled(GLenum source, GLenum type, GLuint id, GLenum severity) const;
|
|
||||||
|
|
||||||
void pushDefaultGroup();
|
|
||||||
|
|
||||||
struct Message
|
|
||||||
{
|
|
||||||
GLenum source;
|
|
||||||
GLenum type;
|
|
||||||
GLuint id;
|
|
||||||
GLenum severity;
|
|
||||||
std::string message;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct Control
|
|
||||||
{
|
|
||||||
GLenum source;
|
|
||||||
GLenum type;
|
|
||||||
GLenum severity;
|
|
||||||
std::vector<GLuint> ids;
|
|
||||||
bool enabled;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct Group
|
|
||||||
{
|
|
||||||
GLenum source;
|
|
||||||
GLuint id;
|
|
||||||
std::string message;
|
|
||||||
|
|
||||||
std::vector<Control> controls;
|
|
||||||
};
|
|
||||||
|
|
||||||
bool mOutputEnabled;
|
|
||||||
GLDEBUGPROCKHR mCallbackFunction;
|
|
||||||
const void *mCallbackUserParam;
|
|
||||||
std::deque<Message> mMessages;
|
|
||||||
GLuint mMaxLoggedMessages;
|
|
||||||
bool mOutputSynchronous;
|
|
||||||
std::vector<Group> mGroups;
|
|
||||||
};
|
|
||||||
} // namespace gl
|
|
||||||
|
|
||||||
#endif // LIBANGLE_DEBUG_H_
|
|
@ -1,4 +1,4 @@
|
|||||||
CONFIG += simd no_batch
|
CONFIG += simd no_batch object_parallel_to_source
|
||||||
include(common.pri)
|
include(common.pri)
|
||||||
|
|
||||||
INCLUDEPATH += $$OUT_PWD/.. $$ANGLE_DIR/src/libANGLE
|
INCLUDEPATH += $$OUT_PWD/.. $$ANGLE_DIR/src/libANGLE
|
||||||
@ -48,6 +48,7 @@ HEADERS += \
|
|||||||
$$ANGLE_DIR/src/libANGLE/Constants.h \
|
$$ANGLE_DIR/src/libANGLE/Constants.h \
|
||||||
$$ANGLE_DIR/src/libANGLE/Context.h \
|
$$ANGLE_DIR/src/libANGLE/Context.h \
|
||||||
$$ANGLE_DIR/src/libANGLE/Data.h \
|
$$ANGLE_DIR/src/libANGLE/Data.h \
|
||||||
|
$$ANGLE_DIR/src/libANGLE/Debug.h \
|
||||||
$$ANGLE_DIR/src/libANGLE/Device.h \
|
$$ANGLE_DIR/src/libANGLE/Device.h \
|
||||||
$$ANGLE_DIR/src/libANGLE/Display.h \
|
$$ANGLE_DIR/src/libANGLE/Display.h \
|
||||||
$$ANGLE_DIR/src/libANGLE/Error.h \
|
$$ANGLE_DIR/src/libANGLE/Error.h \
|
||||||
@ -169,6 +170,7 @@ SOURCES += \
|
|||||||
$$ANGLE_DIR/src/libANGLE/Config.cpp \
|
$$ANGLE_DIR/src/libANGLE/Config.cpp \
|
||||||
$$ANGLE_DIR/src/libANGLE/Context.cpp \
|
$$ANGLE_DIR/src/libANGLE/Context.cpp \
|
||||||
$$ANGLE_DIR/src/libANGLE/Data.cpp \
|
$$ANGLE_DIR/src/libANGLE/Data.cpp \
|
||||||
|
$$ANGLE_DIR/src/libANGLE/Debug.cpp \
|
||||||
$$ANGLE_DIR/src/libANGLE/Device.cpp \
|
$$ANGLE_DIR/src/libANGLE/Device.cpp \
|
||||||
$$ANGLE_DIR/src/libANGLE/Display.cpp \
|
$$ANGLE_DIR/src/libANGLE/Display.cpp \
|
||||||
$$ANGLE_DIR/src/libANGLE/Error.cpp \
|
$$ANGLE_DIR/src/libANGLE/Error.cpp \
|
||||||
@ -241,14 +243,6 @@ SOURCES += \
|
|||||||
|
|
||||||
SSE2_SOURCES += $$ANGLE_DIR/src/libANGLE/renderer/d3d/loadimageSSE2.cpp
|
SSE2_SOURCES += $$ANGLE_DIR/src/libANGLE/renderer/d3d/loadimageSSE2.cpp
|
||||||
|
|
||||||
DEBUG_SOURCE = $$ANGLE_DIR/src/libANGLE/Debug.cpp
|
|
||||||
debug_copy.input = DEBUG_SOURCE
|
|
||||||
debug_copy.output = $$ANGLE_DIR/src/libANGLE/Debug2.cpp
|
|
||||||
debug_copy.commands = $$QMAKE_COPY ${QMAKE_FILE_IN} ${QMAKE_FILE_OUT}
|
|
||||||
debug_copy.variable_out = GENERATED_SOURCES
|
|
||||||
debug_copy.CONFIG = target_predeps
|
|
||||||
QMAKE_EXTRA_COMPILERS += debug_copy
|
|
||||||
|
|
||||||
angle_d3d11 {
|
angle_d3d11 {
|
||||||
HEADERS += \
|
HEADERS += \
|
||||||
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d11/Blit11.h \
|
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d11/Blit11.h \
|
||||||
|
@ -318,7 +318,8 @@ QJsonArray QJsonArray::fromVariantList(const QVariantList &list)
|
|||||||
array.a->tableOffset = currentOffset;
|
array.a->tableOffset = currentOffset;
|
||||||
if (!array.detach2(sizeof(QJsonPrivate::offset)*values.size()))
|
if (!array.detach2(sizeof(QJsonPrivate::offset)*values.size()))
|
||||||
return QJsonArray();
|
return QJsonArray();
|
||||||
memcpy(array.a->table(), values.constData(), values.size()*sizeof(uint));
|
memcpy(static_cast<void *>(array.a->table()),
|
||||||
|
static_cast<const void *>(values.constData()), values.size()*sizeof(uint));
|
||||||
array.a->length = values.size();
|
array.a->length = values.size();
|
||||||
array.a->size = currentOffset + sizeof(QJsonPrivate::offset)*values.size();
|
array.a->size = currentOffset + sizeof(QJsonPrivate::offset)*values.size();
|
||||||
|
|
||||||
|
@ -76,7 +76,8 @@ struct QPodArrayOps
|
|||||||
Q_ASSERT(b < e);
|
Q_ASSERT(b < e);
|
||||||
Q_ASSERT(size_t(e - b) <= this->alloc - uint(this->size));
|
Q_ASSERT(size_t(e - b) <= this->alloc - uint(this->size));
|
||||||
|
|
||||||
::memcpy(this->end(), b, (e - b) * sizeof(T));
|
::memcpy(static_cast<void *>(this->end()), static_cast<const void *>(b),
|
||||||
|
(e - b) * sizeof(T));
|
||||||
this->size += e - b;
|
this->size += e - b;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -341,7 +341,7 @@ Q_OUTOFLINE_TEMPLATE void QVarLengthArray<T, Prealloc>::append(const T *abuf, in
|
|||||||
while (s < asize)
|
while (s < asize)
|
||||||
new (ptr+(s++)) T(*abuf++);
|
new (ptr+(s++)) T(*abuf++);
|
||||||
} else {
|
} else {
|
||||||
memcpy(&ptr[s], abuf, increment * sizeof(T));
|
memcpy(static_cast<void *>(&ptr[s]), static_cast<const void *>(abuf), increment * sizeof(T));
|
||||||
s = asize;
|
s = asize;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -389,7 +389,7 @@ Q_OUTOFLINE_TEMPLATE void QVarLengthArray<T, Prealloc>::realloc(int asize, int a
|
|||||||
QT_RETHROW;
|
QT_RETHROW;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
memcpy(ptr, oldPtr, copySize * sizeof(T));
|
memcpy(static_cast<void *>(ptr), static_cast<const void *>(oldPtr), copySize * sizeof(T));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
s = copySize;
|
s = copySize;
|
||||||
|
@ -651,7 +651,8 @@ public:
|
|||||||
inline void reserve(int extraCapacity) {
|
inline void reserve(int extraCapacity) {
|
||||||
if (tos + extraCapacity + 1 > cap) {
|
if (tos + extraCapacity + 1 > cap) {
|
||||||
cap = qMax(tos + extraCapacity + 1, cap << 1 );
|
cap = qMax(tos + extraCapacity + 1, cap << 1 );
|
||||||
data = reinterpret_cast<T *>(realloc(data, cap * sizeof(T)));
|
void *ptr = realloc(static_cast<void *>(data), cap * sizeof(T));
|
||||||
|
data = reinterpret_cast<T *>(ptr);
|
||||||
Q_CHECK_PTR(data);
|
Q_CHECK_PTR(data);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -993,9 +993,7 @@ int QFontEngineFT::loadFlags(QGlyphSet *set, GlyphFormat format, int flags,
|
|||||||
static inline bool areMetricsTooLarge(const QFontEngineFT::GlyphInfo &info)
|
static inline bool areMetricsTooLarge(const QFontEngineFT::GlyphInfo &info)
|
||||||
{
|
{
|
||||||
// false if exceeds QFontEngineFT::Glyph metrics
|
// false if exceeds QFontEngineFT::Glyph metrics
|
||||||
return (short)(info.linearAdvance) != info.linearAdvance
|
return info.width > 0xFF || info.height > 0xFF;
|
||||||
|| (uchar)(info.width) != info.width
|
|
||||||
|| (uchar)(info.height) != info.height;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void transformBoundingBox(int *left, int *top, int *right, int *bottom, FT_Matrix *matrix)
|
static inline void transformBoundingBox(int *left, int *top, int *right, int *bottom, FT_Matrix *matrix)
|
||||||
|
@ -133,7 +133,7 @@ public:
|
|||||||
/* we don't cache glyphs that are too large anyway, so we can make this struct rather small */
|
/* we don't cache glyphs that are too large anyway, so we can make this struct rather small */
|
||||||
struct Glyph {
|
struct Glyph {
|
||||||
~Glyph();
|
~Glyph();
|
||||||
short linearAdvance;
|
int linearAdvance : 22;
|
||||||
unsigned char width;
|
unsigned char width;
|
||||||
unsigned char height;
|
unsigned char height;
|
||||||
short x;
|
short x;
|
||||||
|
@ -46,9 +46,11 @@
|
|||||||
#include <QtCore/private/qthread_p.h>
|
#include <QtCore/private/qthread_p.h>
|
||||||
#include <QtGui/private/qguiapplication_p.h>
|
#include <QtGui/private/qguiapplication_p.h>
|
||||||
#include "qcocoaapplication.h"
|
#include "qcocoaapplication.h"
|
||||||
|
#include "qcocoaintegration.h"
|
||||||
#include "qcocoamenuloader.h"
|
#include "qcocoamenuloader.h"
|
||||||
#include "qcocoamenubar.h"
|
#include "qcocoamenubar.h"
|
||||||
#include "qcocoawindow.h"
|
#include "qcocoawindow.h"
|
||||||
|
#include "qcocoascreen.h"
|
||||||
#import "qnsview.h"
|
#import "qnsview.h"
|
||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
@ -584,8 +586,9 @@ void QCocoaMenu::showPopup(const QWindow *parentWindow, const QRect &targetRect,
|
|||||||
[popupCell setMenu:m_nativeMenu];
|
[popupCell setMenu:m_nativeMenu];
|
||||||
[popupCell selectItem:nsItem];
|
[popupCell selectItem:nsItem];
|
||||||
|
|
||||||
int availableHeight = screen->availableSize().height();
|
QCocoaScreen *cocoaScreen = static_cast<QCocoaScreen *>(screen->handle());
|
||||||
const QPoint &globalPos = parentWindow->mapToGlobal(pos);
|
int availableHeight = cocoaScreen->availableGeometry().height();
|
||||||
|
const QPoint &globalPos = cocoaWindow->mapToGlobal(pos);
|
||||||
int menuHeight = m_nativeMenu.size.height;
|
int menuHeight = m_nativeMenu.size.height;
|
||||||
if (globalPos.y() + menuHeight > availableHeight) {
|
if (globalPos.y() + menuHeight > availableHeight) {
|
||||||
// Maybe we need to fix the vertical popup position but we don't know the
|
// Maybe we need to fix the vertical popup position but we don't know the
|
||||||
|
@ -2535,7 +2535,7 @@ void QWindowsWindow::setCustomMargins(const QMargins &newCustomMargins)
|
|||||||
newFrame.moveTo(topLeft);
|
newFrame.moveTo(topLeft);
|
||||||
qCDebug(lcQpaWindows) << __FUNCTION__ << oldCustomMargins << "->" << newCustomMargins
|
qCDebug(lcQpaWindows) << __FUNCTION__ << oldCustomMargins << "->" << newCustomMargins
|
||||||
<< currentFrameGeometry << "->" << newFrame;
|
<< currentFrameGeometry << "->" << newFrame;
|
||||||
SetWindowPos(m_data.hwnd, 0, newFrame.x(), newFrame.y(), newFrame.width(), newFrame.height(), SWP_NOZORDER | SWP_FRAMECHANGED);
|
SetWindowPos(m_data.hwnd, 0, newFrame.x(), newFrame.y(), newFrame.width(), newFrame.height(), SWP_NOZORDER | SWP_FRAMECHANGED | SWP_NOACTIVATE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2114,7 +2114,7 @@ bool QXcbWindow::isEmbedded() const
|
|||||||
QPoint QXcbWindow::mapToGlobal(const QPoint &pos) const
|
QPoint QXcbWindow::mapToGlobal(const QPoint &pos) const
|
||||||
{
|
{
|
||||||
if (!m_embedded)
|
if (!m_embedded)
|
||||||
return pos;
|
return QPlatformWindow::mapToGlobal(pos);
|
||||||
|
|
||||||
QPoint ret;
|
QPoint ret;
|
||||||
auto reply = Q_XCB_REPLY(xcb_translate_coordinates, xcb_connection(),
|
auto reply = Q_XCB_REPLY(xcb_translate_coordinates, xcb_connection(),
|
||||||
@ -2131,7 +2131,7 @@ QPoint QXcbWindow::mapToGlobal(const QPoint &pos) const
|
|||||||
QPoint QXcbWindow::mapFromGlobal(const QPoint &pos) const
|
QPoint QXcbWindow::mapFromGlobal(const QPoint &pos) const
|
||||||
{
|
{
|
||||||
if (!m_embedded)
|
if (!m_embedded)
|
||||||
return pos;
|
return QPlatformWindow::mapFromGlobal(pos);
|
||||||
|
|
||||||
QPoint ret;
|
QPoint ret;
|
||||||
auto reply = Q_XCB_REPLY(xcb_translate_coordinates, xcb_connection(),
|
auto reply = Q_XCB_REPLY(xcb_translate_coordinates, xcb_connection(),
|
||||||
|
@ -41,6 +41,7 @@
|
|||||||
|
|
||||||
#include <QtGui/qwindow.h>
|
#include <QtGui/qwindow.h>
|
||||||
#include <QtGui/qpa/qplatformtheme.h>
|
#include <QtGui/qpa/qplatformtheme.h>
|
||||||
|
#include <QtGui/qpa/qplatformwindow.h>
|
||||||
|
|
||||||
#undef signals
|
#undef signals
|
||||||
#include <gtk/gtk.h>
|
#include <gtk/gtk.h>
|
||||||
@ -426,9 +427,11 @@ void QGtk3Menu::showPopup(const QWindow *parentWindow, const QRect &targetRect,
|
|||||||
if (index != -1)
|
if (index != -1)
|
||||||
gtk_menu_set_active(GTK_MENU(m_menu), index);
|
gtk_menu_set_active(GTK_MENU(m_menu), index);
|
||||||
|
|
||||||
m_targetPos = targetRect.bottomLeft();
|
m_targetPos = QPoint(targetRect.x(), targetRect.y() + targetRect.height());
|
||||||
if (parentWindow)
|
|
||||||
m_targetPos = parentWindow->mapToGlobal(m_targetPos);
|
QPlatformWindow *pw = parentWindow ? parentWindow->handle() : nullptr;
|
||||||
|
if (pw)
|
||||||
|
m_targetPos = pw->mapToGlobal(m_targetPos);
|
||||||
|
|
||||||
gtk_menu_popup(GTK_MENU(m_menu), NULL, NULL, qt_gtk_menu_position_func, this, 0, gtk_get_current_event_time());
|
gtk_menu_popup(GTK_MENU(m_menu), NULL, NULL, qt_gtk_menu_position_func, this, 0, gtk_get_current_event_time());
|
||||||
}
|
}
|
||||||
|
@ -67,6 +67,7 @@
|
|||||||
#include <qabstractproxymodel.h>
|
#include <qabstractproxymodel.h>
|
||||||
#include <qstylehints.h>
|
#include <qstylehints.h>
|
||||||
#include <private/qguiapplication_p.h>
|
#include <private/qguiapplication_p.h>
|
||||||
|
#include <private/qhighdpiscaling_p.h>
|
||||||
#include <private/qapplication_p.h>
|
#include <private/qapplication_p.h>
|
||||||
#include <private/qcombobox_p.h>
|
#include <private/qcombobox_p.h>
|
||||||
#include <private/qabstractitemmodel_p.h>
|
#include <private/qabstractitemmodel_p.h>
|
||||||
@ -2582,7 +2583,8 @@ bool QComboBoxPrivate::showNativePopup()
|
|||||||
else if (q->testAttribute(Qt::WA_MacMiniSize))
|
else if (q->testAttribute(Qt::WA_MacMiniSize))
|
||||||
offset = QPoint(-2, 6);
|
offset = QPoint(-2, 6);
|
||||||
|
|
||||||
m_platformMenu->showPopup(tlw, QRect(tlw->mapFromGlobal(q->mapToGlobal(offset)), QSize()), currentItem);
|
const QRect targetRect = QRect(tlw->mapFromGlobal(q->mapToGlobal(offset)), QSize());
|
||||||
|
m_platformMenu->showPopup(tlw, QHighDpi::toNativePixels(targetRect, tlw), currentItem);
|
||||||
|
|
||||||
#ifdef Q_OS_OSX
|
#ifdef Q_OS_OSX
|
||||||
// The Cocoa popup will swallow any mouse release event.
|
// The Cocoa popup will swallow any mouse release event.
|
||||||
|
Loading…
Reference in New Issue
Block a user