Merge remote branch 'origin/master' into refactor

Conflicts:
	src/gui/gui.pro
	src/gui/painting/painting.pri
	src/opengl/opengl.pro
	src/openvg/openvg.pro
This commit is contained in:
Lars Knoll 2011-05-12 11:02:01 +02:00
commit 6697f2a899
78 changed files with 3261 additions and 1611 deletions

10
.gitignore vendored
View File

@ -119,6 +119,16 @@ translations/*.qm
translations/*_untranslated.ts
qrc_*.cpp
src/corelib/qtcoreversion.h
src/dbus/qtdbusversion.h
src/gui/qtguiversion.h
src/network/qtnetworkversion.h
src/opengl/qtopenglversion.h
src/openvg/qtopenvgversion.h
src/sql/qtsqlversion.h
src/testlib/qttestversion.h
src/xml/qtxmlversion.h
# Test generated files
QObject.log
tst_*

View File

@ -47,6 +47,7 @@ my $copy_headers = 0;
my $create_uic_class_map = 0;
my $create_private_headers = 1;
my $no_module_fwd = 0;
my $no_module_version_header = 0;
my @modules_to_sync ;
$force_relative = 1 if ( -d "/System/Library/Frameworks" );
@ -77,6 +78,8 @@ sub showUsage
print " Create headers for <NAME> with original headers in <HEADERDIR> relative to <PROFILEDIR> \n";
print " -private Force copy private headers (default: " . ($create_private_headers ? "yes" : "no") . ")\n";
print " -no-module-fwd Don't create fwd includes for module pri files\n";
print " -no-module-version-header\n";
print " Don't create module version header file\n";
print " -help This help\n";
exit 0;
}
@ -619,6 +622,9 @@ while ( @ARGV ) {
} elsif($arg eq "-no-module-fwd") {
$var = "no_module_fwd";
$val = "yes";
} elsif($arg eq "-no-module-version-header") {
$var = "no_module_version_header";
$val = "yes";
} elsif($arg =~/^-/) {
print "Unknown option: $arg\n\n" if(!$var);
showUsage();
@ -696,6 +702,8 @@ while ( @ARGV ) {
}
} elsif ($var eq "no_module_fwd") {
$no_module_fwd = 1;
} elsif ($var eq "no_module_version_header") {
$no_module_version_header = 1;
} elsif ($var eq "output") {
my $outdir = $val;
if(checkRelative($outdir)) {
@ -748,6 +756,9 @@ foreach my $lib (@modules_to_sync) {
#iteration info
my $dir = $modules{$lib};
my $module_version = "";
my $module_major_version = "";
my $module_minor_version = "";
my $module_patch_version = "";
if (-e "$modulepris{$lib}") {
my $content = fileContents($modulepris{$lib});
@ -758,6 +769,13 @@ foreach my $lib (@modules_to_sync) {
chomp $module_version;
$module_version =~ s/^\s*QT\..*\.VERSION\s*=\s*([^#]+).*$/$1/;
$module_version =~ s/\s+$//;
my @versions = split(/\./, $module_version);
$module_major_version = $versions[0];
chomp $module_major_version;
$module_minor_version = $versions[1];
chomp $module_minor_version;
$module_patch_version = $versions[2];
chomp $module_patch_version;
}
}
print "WARNING: Module $lib\'s pri missing QT.<module>.VERSION variable! Private headers not versioned!\n" if (!$module_version);
@ -829,6 +847,28 @@ foreach my $lib (@modules_to_sync) {
}
}
# create the version header files for each module
unless ($no_module_version_header) {
my $modulepri = $modulepris{$lib};
if (-e $modulepri) {
my $modulepriname = basename($modulepri);
my $moduleversionheader = "$modules{$lib}/" . lc($lib) . "version.h";
my $modulehexstring = sprintf("0x%02X%02X%02X", int($module_major_version), int($module_minor_version), int($module_patch_version));
open MODULE_VERSION_HEADER_FILE, ">$moduleversionheader";
print MODULE_VERSION_HEADER_FILE "/* This file was generated by syncqt with the info from sync.profile. */\n";
print MODULE_VERSION_HEADER_FILE "#ifndef QT_". uc($lib) . "_VERSION_H\n";
print MODULE_VERSION_HEADER_FILE "#define QT_". uc($lib) . "_VERSION_H\n";
print MODULE_VERSION_HEADER_FILE "\n";
print MODULE_VERSION_HEADER_FILE "#define " .uc($lib) . "_VERSION_STR \"" . $module_version . "\"\n";
print MODULE_VERSION_HEADER_FILE "\n";
print MODULE_VERSION_HEADER_FILE "#define " .uc($lib) . "_VERSION $modulehexstring\n", ;
print MODULE_VERSION_HEADER_FILE "\n";
print MODULE_VERSION_HEADER_FILE "#endif // QT_". uc($lib) . "_VERSION_H\n";
} elsif ($modulepri) {
print "WARNING: Module $lib\'s pri file '$modulepri' not found.\nSkipped creating module version header for $lib.\n";
}
}
#create the new ones
foreach my $current_dir (split(/;/, $dir)) {
my $headers_dir = $current_dir;

4
configure vendored
View File

@ -5774,7 +5774,7 @@ if [ "$PLATFORM_X11" = "yes" -o "$PLATFORM_QWS" = "yes" -o "$PLATFORM_QPA" = "ye
fi # X11/QWS/Lighthouse
# X11
if [ "$PLATFORM_X11" = "yes" ]; then
if [ "$PLATFORM_X11" = "yes" -a "$CFG_GUI" != "no" ]; then
x11tests="$relpath/config.tests/x11"
X11TESTS_FLAGS=
@ -8438,7 +8438,7 @@ if [ -n "$QT_CFLAGS_FPU" ]; then
fi
if [ -n "$QMAKE_INCDIR_OPENGL_ES2" ]; then
echo "\n#Qt opengl include path" >> "$QTCONFIG.tmp"
echo "#Qt opengl include path" >> "$QTCONFIG.tmp"
echo "QMAKE_INCDIR_OPENGL_ES2 = \"$QMAKE_INCDIR_OPENGL_ES2\"" >> "$QTCONFIG.tmp"
fi

View File

@ -0,0 +1,66 @@
/****************************************************************************
**
** Copyright (C) 2011 Klarälvdalens Datakonsult AB,
** a KDAB Group company, info@kdab.com,
** author Stephen Kelly <stephen.kelly@kdab.com>
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
** This file is part of the QtGui module of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:BSD$
** You may use this file under the terms of the BSD license as follows:
**
** "Redistribution and use in source and binary forms, with or without
** modification, are permitted provided that the following conditions are
** met:
** * Redistributions of source code must retain the above copyright
** notice, this list of conditions and the following disclaimer.
** * Redistributions in binary form must reproduce the above copyright
** notice, this list of conditions and the following disclaimer in
** the documentation and/or other materials provided with the
** distribution.
** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
** the names of its contributors may be used to endorse or promote
** products derived from this software without specific prior written
** permission.
**
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
** $QT_END_LICENSE$
**
****************************************************************************/
//! [0]
class DateFormatProxyModel : public QIdentityProxyModel
{
// ...
void setDateFormatString(const QString &formatString)
{
m_formatString = formatString;
}
QVariant data(const QModelIndex &index, int role)
{
if (role != Qt::DisplayRole)
return QIdentityProxyModel::data(index, role);
const QDateTime dateTime = sourceModel()->data(SourceClass::DateRole).toDateTime();
return dateTime.toString(m_formatString);
}
private:
QString m_formatString;
};
//! [0]

View File

@ -1109,7 +1109,7 @@ MakefileGenerator::writePrlFile()
&& project->isActiveConfig("create_prl")
&& (project->first("TEMPLATE") == "lib"
|| project->first("TEMPLATE") == "vclib")
&& !project->isActiveConfig("plugin")) { //write prl file
&& (!project->isActiveConfig("plugin") || project->isActiveConfig("static"))) { //write prl file
QString local_prl = prlFileName();
QString prl = fileFixify(local_prl);
mkdir(fileInfo(local_prl).path());

View File

@ -11,6 +11,9 @@ win32-msvc*|win32-icc:QMAKE_LFLAGS += /BASE:0x67000000
irix-cc*:QMAKE_CXXFLAGS += -no_prelink -ptused
include(../qbase.pri)
HEADERS += $$QT_SOURCE_TREE/src/corelib/qtcoreversion.h
include(animation/animation.pri)
include(arch/arch.pri)
include(concurrent/concurrent.pri)

View File

@ -450,10 +450,11 @@ QLibraryInfo::location(LibraryLocation loc)
}
if (QDir::isRelativePath(ret)) {
QString baseDir;
if (loc == PrefixPath) {
// we make the prefix path absolute to the executable's directory
#ifdef BOOTSTRAPPING
return QFileInfo(qmake_libraryInfoFile()).absolutePath();
baseDir = QFileInfo(qmake_libraryInfoFile()).absolutePath();
#else
if (QCoreApplication::instance()) {
#ifdef Q_OS_MAC
@ -466,15 +467,16 @@ QLibraryInfo::location(LibraryLocation loc)
}
}
#endif
return QDir(QCoreApplication::applicationDirPath()).absoluteFilePath(ret);
baseDir = QCoreApplication::applicationDirPath();
} else {
return QDir::current().absoluteFilePath(ret);
baseDir = QDir::currentPath();
}
#endif
} else {
// we make any other path absolute to the prefix directory
return QDir(location(PrefixPath)).absoluteFilePath(ret);
baseDir = location(PrefixPath);
}
ret = QDir::cleanPath(baseDir + QLatin1Char('/') + ret);
}
return ret;
}

View File

@ -94,6 +94,7 @@ Qt {
Q_ENUMS(GestureState)
Q_ENUMS(GestureType)
#endif
Q_ENUMS(CursorMoveStyle)
#endif // (defined(Q_MOC_RUN) || defined(QT_JAMBI_RUN))
#if defined(Q_MOC_RUN)
@ -1728,6 +1729,11 @@ public:
NavigationModeCursorAuto,
NavigationModeCursorForceVisible
};
enum CursorMoveStyle {
LogicalMoveStyle,
VisualMoveStyle
};
}
#ifdef Q_MOC_RUN
;

View File

@ -162,6 +162,7 @@ class Q_CORE_EXPORT QAbstractItemModel : public QObject
friend class QPersistentModelIndexData;
friend class QAbstractItemViewPrivate;
friend class QIdentityProxyModel;
public:
explicit QAbstractItemModel(QObject *parent = 0);

View File

@ -1111,6 +1111,12 @@ bool QEventDispatcherSymbian::hasPendingEvents()
void QEventDispatcherSymbian::registerSocketNotifier ( QSocketNotifier * notifier )
{
//check socket descriptor is usable
if (notifier->socket() >= FD_SETSIZE || notifier->socket() < 0) {
//same warning message as the unix event dispatcher for easy testing
qWarning("QSocketNotifier: Internal error");
return;
}
//note - this is only for "open C" file descriptors
//for native sockets, an active object in the symbian socket engine handles this
QSocketActiveObject *socketAO = new QSocketActiveObject(this, notifier);

View File

@ -32,6 +32,9 @@ win32 {
else:LIBS_PRIVATE += -ldbus-1
}
include(../qbase.pri)
HEADERS += $$QT_SOURCE_TREE/src/dub/qtdbusversion.h
PUB_HEADERS = qdbusargument.h \
qdbusconnectioninterface.h \
qdbusmacros.h \

View File

@ -11,6 +11,8 @@ unix|win32-g++*:QMAKE_PKGCONFIG_REQUIRES = QtCore
include(../qbase.pri)
HEADERS += $$QT_SOURCE_TREE/src/gui/qtguiversion.h
include(kernel/kernel.pri)
include(image/image.pri)
include(text/text.pri)

View File

@ -3974,6 +3974,8 @@ QImage QImage::scaled(const QSize& s, Qt::AspectRatioMode aspectMode, Qt::Transf
QSize newSize = size();
newSize.scale(s, aspectMode);
newSize.rwidth() = qMax(newSize.width(), 1);
newSize.rheight() = qMax(newSize.height(), 1);
if (newSize == size())
return *this;

View File

@ -1320,6 +1320,8 @@ QPixmap QPixmap::scaled(const QSize& s, Qt::AspectRatioMode aspectMode, Qt::Tran
QSize newSize = size();
newSize.scale(s, aspectMode);
newSize.rwidth() = qMax(newSize.width(), 1);
newSize.rheight() = qMax(newSize.height(), 1);
if (newSize == size())
return *this;

View File

@ -6,13 +6,14 @@ HEADERS += \
painting/qcolor.h \
painting/qcolor_p.h \
painting/qcolormap.h \
painting/qcosmeticstroker_p.h \
painting/qemulationpaintengine_p.h \
painting/qmatrix.h \
painting/qmemrotate_p.h \
painting/qoutlinemapper_p.h \
painting/qpaintdevice.h \
painting/qpaintengine.h \
painting/qpaintengine_p.h \
painting/qpaintengine_p.h \
painting/qpaintengine_alpha_p.h \
painting/qpaintengine_preview_p.h \
painting/qpaintengineex_p.h \
@ -47,6 +48,7 @@ SOURCES += \
painting/qbrush.cpp \
painting/qcolor.cpp \
painting/qcolor_p.cpp \
painting/qcosmeticstroker.cpp \
painting/qcssutil.cpp \
painting/qemulationpaintengine.cpp \
painting/qmatrix.cpp \

View File

@ -0,0 +1,954 @@
#include "qcosmeticstroker_p.h"
#include "private/qpainterpath_p.h"
#include <qdebug.h>
#include <math.h>
#if 0
inline QString capString(int caps)
{
QString str;
if (caps & QCosmeticStroker::CapBegin) {
str += "CapBegin ";
}
if (caps & QCosmeticStroker::CapEnd) {
str += "CapEnd ";
}
return str;
}
#endif
#define toF26Dot6(x) ((int)((x)*64.))
static inline uint sourceOver(uint d, uint color)
{
return color + BYTE_MUL(d, qAlpha(~color));
}
inline static int F16Dot16FixedDiv(int x, int y)
{
if (qAbs(x) > 0x7fff)
return (((qlonglong)x) << 16) / y;
return (x << 16) / y;
}
typedef void (*DrawPixel)(QCosmeticStroker *stroker, int x, int y, int coverage);
namespace {
struct Dasher {
QCosmeticStroker *stroker;
int *pattern;
int offset;
int dashIndex;
int dashOn;
Dasher(QCosmeticStroker *s, bool reverse, int start, int stop)
: stroker(s)
{
int delta = stop - start;
if (reverse) {
pattern = stroker->reversePattern;
offset = stroker->patternLength - stroker->patternOffset - delta - ((start & 63) - 32);
dashOn = 0;
} else {
pattern = stroker->pattern;
offset = stroker->patternOffset - ((start & 63) - 32);
dashOn = 1;
}
offset %= stroker->patternLength;
if (offset < 0)
offset += stroker->patternLength;
dashIndex = 0;
while (offset>= pattern[dashIndex])
++dashIndex;
// qDebug() << " dasher" << offset/64. << reverse << dashIndex;
stroker->patternOffset += delta;
stroker->patternOffset %= stroker->patternLength;
}
bool on() const {
return (dashIndex + dashOn) & 1;
}
void adjust() {
offset += 64;
if (offset >= pattern[dashIndex]) {
++dashIndex;
dashIndex %= stroker->patternSize;
}
offset %= stroker->patternLength;
// qDebug() << "dasher.adjust" << offset/64. << dashIndex;
}
};
struct NoDasher {
NoDasher(QCosmeticStroker *, bool, int, int) {}
bool on() const { return true; }
void adjust(int = 0) {}
};
};
template<DrawPixel drawPixel, class Dasher>
static void drawLine(QCosmeticStroker *stroker, qreal x1, qreal y1, qreal x2, qreal y2, int caps);
template<DrawPixel drawPixel, class Dasher>
static void drawLineAA(QCosmeticStroker *stroker, qreal x1, qreal y1, qreal x2, qreal y2, int caps);
inline void drawPixel(QCosmeticStroker *stroker, int x, int y, int coverage)
{
int lastx = stroker->spans[stroker->current_span-1].x + stroker->spans[stroker->current_span-1].len ;
int lasty = stroker->spans[stroker->current_span-1].y;
if (stroker->current_span == QCosmeticStroker::NSPANS || y < lasty || (y == lasty && x < lastx)) {
stroker->blend(stroker->current_span, stroker->spans, &stroker->state->penData);
stroker->current_span = 0;
}
stroker->spans[stroker->current_span].x = ushort(x);
stroker->spans[stroker->current_span].len = 1;
stroker->spans[stroker->current_span].y = y;
stroker->spans[stroker->current_span].coverage = coverage*stroker->opacity >> 8;
++stroker->current_span;
}
inline void drawPixelARGB32(QCosmeticStroker *stroker, int x, int y, int coverage)
{
const QRect &cl = stroker->clip;
if (x < cl.x() || x > cl.right() || y < cl.y() || y > cl.bottom())
return;
int offset = x + stroker->ppl*y;
uint c = BYTE_MUL(stroker->color, coverage);
stroker->pixels[offset] = sourceOver(stroker->pixels[offset], c);
}
inline void drawPixelARGB32Opaque(QCosmeticStroker *stroker, int x, int y, int)
{
const QRect &cl = stroker->clip;
if (x < cl.x() || x > cl.right() || y < cl.y() || y > cl.bottom())
return;
int offset = x + stroker->ppl*y;
stroker->pixels[offset] = sourceOver(stroker->pixels[offset], stroker->color);
}
enum StrokeSelection {
Aliased = 0,
AntiAliased = 1,
Solid = 0,
Dashed = 2,
RegularDraw = 0,
FastDraw = 4
};
static StrokeLine strokeLine(int strokeSelection)
{
StrokeLine stroke;
switch (strokeSelection) {
case Aliased|Solid|RegularDraw:
stroke = &::drawLine<drawPixel, NoDasher>;
break;
case Aliased|Solid|FastDraw:
stroke = &::drawLine<drawPixelARGB32Opaque, NoDasher>;
break;
case Aliased|Dashed|RegularDraw:
stroke = &::drawLine<drawPixel, Dasher>;
break;
case Aliased|Dashed|FastDraw:
stroke = &::drawLine<drawPixelARGB32Opaque, Dasher>;
break;
case AntiAliased|Solid|RegularDraw:
stroke = &drawLineAA<drawPixel, NoDasher>;
break;
case AntiAliased|Solid|FastDraw:
stroke = &drawLineAA<drawPixelARGB32, NoDasher>;
break;
case AntiAliased|Dashed|RegularDraw:
stroke = &drawLineAA<drawPixel, Dasher>;
break;
case AntiAliased|Dashed|FastDraw:
stroke = &drawLineAA<drawPixelARGB32, Dasher>;
break;
default:
Q_ASSERT(false);
stroke = 0;
}
return stroke;
}
void QCosmeticStroker::setup()
{
blend = state->penData.blend;
if (state->clip && state->clip->enabled && state->clip->hasRectClip && !state->clip->clipRect.isEmpty()) {
clip &= state->clip->clipRect;
blend = state->penData.unclipped_blend;
}
int strokeSelection = 0;
if (blend == state->penData.unclipped_blend
&& state->penData.type == QSpanData::Solid
&& (state->penData.rasterBuffer->format == QImage::Format_ARGB32_Premultiplied
|| state->penData.rasterBuffer->format == QImage::Format_RGB32)
&& state->compositionMode() == QPainter::CompositionMode_SourceOver)
strokeSelection |= FastDraw;
if (state->renderHints & QPainter::Antialiasing)
strokeSelection |= AntiAliased;
const QVector<qreal> &penPattern = state->lastPen.dashPattern();
if (penPattern.isEmpty()) {
Q_ASSERT(!pattern && !reversePattern);
pattern = 0;
reversePattern = 0;
patternLength = 0;
patternSize = 0;
} else {
pattern = (int *)malloc(penPattern.size()*sizeof(int));
reversePattern = (int *)malloc(penPattern.size()*sizeof(int));
patternSize = penPattern.size();
patternLength = 0;
for (int i = 0; i < patternSize; ++i) {
patternLength += (int) qMax(1. , penPattern.at(i)*64.);
pattern[i] = patternLength;
}
patternLength = 0;
for (int i = 0; i < patternSize; ++i) {
patternLength += (int) qMax(1., penPattern.at(patternSize - 1 - i)*64.);
reversePattern[i] = patternLength;
}
strokeSelection |= Dashed;
// qDebug() << "setup: size=" << patternSize << "length=" << patternLength/64.;
}
stroke = strokeLine(strokeSelection);
qreal width = state->lastPen.widthF();
if (width == 0)
opacity = 256;
else if (state->lastPen.isCosmetic())
opacity = (int) 256*width;
else
opacity = (int) 256*width*state->txscale;
opacity = qBound(0, opacity, 256);
drawCaps = state->lastPen.capStyle() != Qt::FlatCap;
if (strokeSelection & FastDraw) {
color = INTERPOLATE_PIXEL_256(state->penData.solid.color, opacity, 0, 0);
QRasterBuffer *buffer = state->penData.rasterBuffer;
pixels = (uint *)buffer->buffer();
ppl = buffer->bytesPerLine()>>2;
}
// setup FP clip bounds
xmin = clip.left() - 1;
xmax = clip.right() + 2;
ymin = clip.top() - 1;
ymax = clip.bottom() + 2;
lastPixel.x = -1;
}
// returns true if the whole line gets clipped away
bool QCosmeticStroker::clipLine(qreal &x1, qreal &y1, qreal &x2, qreal &y2)
{
// basic/rough clipping is done in floating point coordinates to avoid
// integer overflow problems.
if (x1 < xmin) {
if (x2 <= xmin)
goto clipped;
y1 += (y2 - y1)/(x2 - x1) * (xmin - x1);
x1 = xmin;
} else if (x1 > xmax) {
if (x2 >= xmax)
goto clipped;
y1 += (y2 - y1)/(x2 - x1) * (xmax - x1);
x1 = xmax;
}
if (x2 < xmin) {
lastPixel.x = -1;
y2 += (y2 - y1)/(x2 - x1) * (xmin - x2);
x2 = xmin;
} else if (x2 > xmax) {
lastPixel.x = -1;
y2 += (y2 - y1)/(x2 - x1) * (xmax - x2);
x2 = xmax;
}
if (y1 < ymin) {
if (y2 <= ymin)
goto clipped;
x1 += (x2 - x1)/(y2 - y1) * (ymin - y1);
y1 = ymin;
} else if (y1 > ymax) {
if (y2 >= ymax)
goto clipped;
x1 += (x2 - x1)/(y2 - y1) * (ymax - y1);
y1 = ymax;
}
if (y2 < ymin) {
lastPixel.x = -1;
x2 += (x2 - x1)/(y2 - y1) * (ymin - y2);
y2 = ymin;
} else if (y2 > ymax) {
lastPixel.x = -1;
x2 += (x2 - x1)/(y2 - y1) * (ymax - y2);
y2 = ymax;
}
return false;
clipped:
lastPixel.x = -1;
return true;
}
void QCosmeticStroker::drawLine(const QPointF &p1, const QPointF &p2)
{
QPointF start = p1 * state->matrix;
QPointF end = p2 * state->matrix;
patternOffset = state->lastPen.dashOffset()*64;
lastPixel.x = -1;
stroke(this, start.x(), start.y(), end.x(), end.y(), drawCaps ? CapBegin|CapEnd : 0);
blend(current_span, spans, &state->penData);
current_span = 0;
}
void QCosmeticStroker::drawPoints(const QPoint *points, int num)
{
const QPoint *end = points + num;
while (points < end) {
QPointF p = QPointF(*points) * state->matrix;
drawPixel(this, qRound(p.x()), qRound(p.y()), 255);
++points;
}
blend(current_span, spans, &state->penData);
current_span = 0;
}
void QCosmeticStroker::drawPoints(const QPointF *points, int num)
{
const QPointF *end = points + num;
while (points < end) {
QPointF p = (*points) * state->matrix;
drawPixel(this, qRound(p.x()), qRound(p.y()), 255);
++points;
}
blend(current_span, spans, &state->penData);
current_span = 0;
}
void QCosmeticStroker::calculateLastPoint(qreal rx1, qreal ry1, qreal rx2, qreal ry2)
{
// this is basically the same code as used in the aliased stroke method,
// but it only determines the direction and last point of a line
//
// This is being used to have proper dropout control for closed contours
// by calculating the direction and last pixel of the last segment in the contour.
// the info is then used to perform dropout control when drawing the first line segment
// of the contour
lastPixel.x = -1;
lastPixel.y = -1;
if (clipLine(rx1, ry1, rx2, ry2))
return;
int x1 = toF26Dot6(rx1);
int y1 = toF26Dot6(ry1);
int x2 = toF26Dot6(rx2);
int y2 = toF26Dot6(ry2);
int dx = qAbs(x2 - x1);
int dy = qAbs(y2 - y1);
if (dx < dy) {
// vertical
bool swapped = false;
if (y1 > y2) {
swapped = true;
qSwap(y1, y2);
qSwap(x1, x2);
}
int xinc = F16Dot16FixedDiv(x2 - x1, y2 - y1);
int x = x1 << 10;
int y = (y1+32) >> 6;
int ys = (y2+32) >> 6;
if (y != ys) {
x += ( ((((y << 6) + 32 - y1))) * xinc ) >> 6;
if (swapped) {
lastPixel.x = x >> 16;
lastPixel.y = y;
lastDir = QCosmeticStroker::BottomToTop;
} else {
lastPixel.x = (x + (ys - y - 1)*xinc) >> 16;
lastPixel.y = ys - 1;
lastDir = QCosmeticStroker::TopToBottom;
}
lastAxisAligned = qAbs(xinc) < (1 << 14);
}
} else {
// horizontal
if (!dx)
return;
bool swapped = false;
if (x1 > x2) {
swapped = true;
qSwap(x1, x2);
qSwap(y1, y2);
}
int yinc = F16Dot16FixedDiv(y2 - y1, x2 - x1);
int y = y1 << 10;
int x = (x1+32) >> 6;
int xs = (x2+32) >> 6;
if (x != xs) {
y += ( ((((x << 6) + 32 - x1))) * yinc ) >> 6;
if (swapped) {
lastPixel.x = x;
lastPixel.y = y >> 16;
lastDir = QCosmeticStroker::RightToLeft;
} else {
lastPixel.x = xs - 1;
lastPixel.y = (y + (xs - x - 1)*yinc) >> 16;
lastDir = QCosmeticStroker::LeftToRight;
}
lastAxisAligned = qAbs(yinc) < (1 << 14);
}
}
// qDebug() << " moveTo: setting last pixel to x/y dir" << lastPixel.x << lastPixel.y << lastDir;
}
static inline const QPainterPath::ElementType *subPath(const QPainterPath::ElementType *t, const QPainterPath::ElementType *end,
const qreal *points, bool *closed)
{
const QPainterPath::ElementType *start = t;
++t;
// find out if the subpath is closed
while (t < end) {
if (*t == QPainterPath::MoveToElement)
break;
++t;
}
int offset = t - start - 1;
// qDebug() << "subpath" << offset << points[0] << points[1] << points[2*offset] << points[2*offset+1];
*closed = (points[0] == points[2*offset] && points[1] == points[2*offset + 1]);
return t;
}
void QCosmeticStroker::drawPath(const QVectorPath &path)
{
// qDebug() << ">>>> drawpath" << path.convertToPainterPath()
// << "antialiasing:" << (bool)(state->renderHints & QPainter::Antialiasing) << " implicit close:" << path.hasImplicitClose();
if (path.isEmpty())
return;
const qreal *points = path.points();
const QPainterPath::ElementType *type = path.elements();
if (type) {
const QPainterPath::ElementType *end = type + path.elementCount();
while (type < end) {
Q_ASSERT(type == path.elements() || *type == QPainterPath::MoveToElement);
QPointF p = QPointF(points[0], points[1]) * state->matrix;
QPointF movedTo = p;
patternOffset = state->lastPen.dashOffset()*64;
lastPixel.x = -1;
bool closed;
const QPainterPath::ElementType *e = subPath(type, end, points, &closed);
if (closed) {
const qreal *p = points + 2*(e-type);
calculateLastPoint(p[-4], p[-3], p[-2], p[-1]);
}
int caps = (!closed & drawCaps) ? CapBegin : NoCaps;
// qDebug() << "closed =" << closed << capString(caps);
points += 2;
++type;
while (type < e) {
QPointF p2 = QPointF(points[0], points[1]) * state->matrix;
switch (*type) {
case QPainterPath::MoveToElement:
Q_ASSERT(!"Logic error");
break;
case QPainterPath::LineToElement:
if (!closed && drawCaps && type == e - 1)
caps |= CapEnd;
stroke(this, p.x(), p.y(), p2.x(), p2.y(), caps);
p = p2;
points += 2;
++type;
break;
case QPainterPath::CurveToElement: {
if (!closed && drawCaps && type == e - 3)
caps |= CapEnd;
QPointF p3 = QPointF(points[2], points[3]) * state->matrix;
QPointF p4 = QPointF(points[4], points[5]) * state->matrix;
renderCubic(p, p2, p3, p4, caps);
p = p4;
type += 3;
points += 6;
break;
}
case QPainterPath::CurveToDataElement:
Q_ASSERT(!"QPainterPath::toSubpathPolygons(), bad element type");
break;
}
caps = NoCaps;
}
}
} else { // !type, simple polygon
QPointF p = QPointF(points[0], points[1]) * state->matrix;
QPointF movedTo = p;
patternOffset = state->lastPen.dashOffset()*64;
lastPixel.x = -1;
const qreal *end = points + 2*path.elementCount();
// handle closed path case
bool closed = path.hasImplicitClose() || (points[0] == end[-2] && points[1] == end[-1]);
int caps = (!closed & drawCaps) ? CapBegin : NoCaps;
if (closed)
calculateLastPoint(end[-2], end[-1], points[0], points[1]);
points += 2;
while (points < end) {
QPointF p2 = QPointF(points[0], points[1]) * state->matrix;
if (!closed && drawCaps && points == end - 2)
caps |= CapEnd;
stroke(this, p.x(), p.y(), p2.x(), p2.y(), caps);
p = p2;
points += 2;
caps = NoCaps;
}
if (path.hasImplicitClose())
stroke(this, p.x(), p.y(), movedTo.x(), movedTo.y(), NoCaps);
}
blend(current_span, spans, &state->penData);
current_span = 0;
}
void QCosmeticStroker::renderCubic(const QPointF &p1, const QPointF &p2, const QPointF &p3, const QPointF &p4, int caps)
{
// qDebug() << ">>>> renderCubic" << p1 << p2 << p3 << p4 << capString(caps);
const int maxSubDivisions = 6;
PointF points[3*maxSubDivisions + 4];
points[3].x = p1.x();
points[3].y = p1.y();
points[2].x = p2.x();
points[2].y = p2.y();
points[1].x = p3.x();
points[1].y = p3.y();
points[0].x = p4.x();
points[0].y = p4.y();
PointF *p = points;
int level = maxSubDivisions;
renderCubicSubdivision(p, level, caps);
}
static void splitCubic(QCosmeticStroker::PointF *points)
{
const qreal half = .5;
qreal a, b, c, d;
points[6].x = points[3].x;
c = points[1].x;
d = points[2].x;
points[1].x = a = ( points[0].x + c ) * half;
points[5].x = b = ( points[3].x + d ) * half;
c = ( c + d ) * half;
points[2].x = a = ( a + c ) * half;
points[4].x = b = ( b + c ) * half;
points[3].x = ( a + b ) * half;
points[6].y = points[3].y;
c = points[1].y;
d = points[2].y;
points[1].y = a = ( points[0].y + c ) * half;
points[5].y = b = ( points[3].y + d ) * half;
c = ( c + d ) * half;
points[2].y = a = ( a + c ) * half;
points[4].y = b = ( b + c ) * half;
points[3].y = ( a + b ) * half;
}
void QCosmeticStroker::renderCubicSubdivision(QCosmeticStroker::PointF *points, int level, int caps)
{
if (level) {
qreal dx = points[3].x - points[0].x;
qreal dy = points[3].y - points[0].y;
qreal len = ((qreal).25) * (qAbs(dx) + qAbs(dy));
if (qAbs(dx * (points[0].y - points[2].y) - dy * (points[0].x - points[2].x)) > len ||
qAbs(dx * (points[0].y - points[1].y) - dy * (points[0].x - points[1].x)) > len) {
splitCubic(points);
--level;
renderCubicSubdivision(points + 3, level, caps & CapBegin);
renderCubicSubdivision(points, level, caps & CapEnd);
return;
}
}
stroke(this, points[3].x, points[3].y, points[0].x, points[0].y, caps);
}
static inline int swapCaps(int caps)
{
return ((caps & QCosmeticStroker::CapBegin) << 1) |
((caps & QCosmeticStroker::CapEnd) >> 1);
}
// adjust line by half a pixel
static inline void capAdjust(int caps, int &x1, int &x2, int &y, int yinc)
{
if (caps & QCosmeticStroker::CapBegin) {
x1 -= 32;
y -= yinc >> 1;
}
if (caps & QCosmeticStroker::CapEnd) {
x2 += 32;
}
}
/*
The hard part about this is dropout control and avoiding douple drawing of points when
the drawing shifts from horizontal to vertical or back.
*/
template<DrawPixel drawPixel, class Dasher>
static void drawLine(QCosmeticStroker *stroker, qreal rx1, qreal ry1, qreal rx2, qreal ry2, int caps)
{
if (stroker->clipLine(rx1, ry1, rx2, ry2))
return;
static const int half = 32;
int x1 = toF26Dot6(rx1) + half;
int y1 = toF26Dot6(ry1) + half;
int x2 = toF26Dot6(rx2) + half;
int y2 = toF26Dot6(ry2) + half;
int dx = qAbs(x2 - x1);
int dy = qAbs(y2 - y1);
QCosmeticStroker::Point last = stroker->lastPixel;
// qDebug() << "stroke" << x1/64. << y1/64. << x2/64. << y2/64. << capString(caps);
if (dx < dy) {
// vertical
bool swapped = false;
if (y1 > y2) {
swapped = true;
qSwap(y1, y2);
qSwap(x1, x2);
caps = swapCaps(caps);
--x1; --x2; --y1; --y2;
}
int xinc = F16Dot16FixedDiv(x2 - x1, y2 - y1);
int x = x1 << 10;
capAdjust(caps, y1, y2, x, xinc);
int y = (y1+32) >> 6;
int ys = (y2+32) >> 6;
if (y != ys) {
x += ( ((((y << 6) + 32 - y1))) * xinc ) >> 6;
// calculate first and last pixel and perform dropout control
QCosmeticStroker::Direction dir = QCosmeticStroker::TopToBottom;
QCosmeticStroker::Point first;
first.x = x >> 16;
first.y = y;
last.x = (x + (ys - y - 1)*xinc) >> 16;
last.y = ys - 1;
if (swapped) {
qSwap(first, last);
dir = QCosmeticStroker::BottomToTop;
}
bool axisAligned = qAbs(xinc) < (1 << 14);
if (stroker->lastPixel.x >= 0) {
if (first.x == stroker->lastPixel.x &&
first.y == stroker->lastPixel.y) {
// remove duplicated pixel
if (swapped) {
--ys;
} else {
++y;
x += xinc;
}
} else if (stroker->lastDir != dir &&
(((axisAligned && stroker->lastAxisAligned) &&
stroker->lastPixel.x != first.x && stroker->lastPixel.y != first.y) ||
(qAbs(stroker->lastPixel.x - first.x) > 1 &&
qAbs(stroker->lastPixel.y - first.y) > 1))) {
// have a missing pixel, insert it
if (swapped) {
++ys;
} else {
--y;
x -= xinc;
}
}
}
stroker->lastDir = dir;
stroker->lastAxisAligned = axisAligned;
Dasher dasher(stroker, swapped, y << 6, ys << 6);
do {
if (dasher.on())
drawPixel(stroker, x >> 16, y, 255);
dasher.adjust();
x += xinc;
} while (++y < ys);
}
} else {
// horizontal
if (!dx)
return;
bool swapped = false;
if (x1 > x2) {
swapped = true;
qSwap(x1, x2);
qSwap(y1, y2);
caps = swapCaps(caps);
--x1; --x2; --y1; --y2;
}
int yinc = F16Dot16FixedDiv(y2 - y1, x2 - x1);
int y = y1 << 10;
capAdjust(caps, x1, x2, y, yinc);
int x = (x1+32) >> 6;
int xs = (x2+32) >> 6;
if (x != xs) {
y += ( ((((x << 6) + 32 - x1))) * yinc ) >> 6;
// calculate first and last pixel to perform dropout control
QCosmeticStroker::Direction dir = QCosmeticStroker::LeftToRight;
QCosmeticStroker::Point first;
first.x = x;
first.y = y >> 16;
last.x = xs - 1;
last.y = (y + (xs - x - 1)*yinc) >> 16;
if (swapped) {
qSwap(first, last);
dir = QCosmeticStroker::RightToLeft;
}
bool axisAligned = qAbs(yinc) < (1 << 14);
if (stroker->lastPixel.x >= 0) {
if (first.x == stroker->lastPixel.x && first.y == stroker->lastPixel.y) {
// remove duplicated pixel
if (swapped) {
--xs;
} else {
++x;
y += yinc;
}
} else if (stroker->lastDir != dir &&
(((axisAligned && stroker->lastAxisAligned) &&
stroker->lastPixel.x != first.x && stroker->lastPixel.y != first.y) ||
(qAbs(stroker->lastPixel.x - first.x) > 1 &&
qAbs(stroker->lastPixel.y - first.y) > 1))) {
// have a missing pixel, insert it
if (swapped) {
++xs;
} else {
--x;
y -= yinc;
}
}
}
stroker->lastDir = dir;
stroker->lastAxisAligned = axisAligned;
Dasher dasher(stroker, swapped, x << 6, xs << 6);
do {
if (dasher.on())
drawPixel(stroker, x, y >> 16, 255);
dasher.adjust();
y += yinc;
} while (++x < xs);
}
}
stroker->lastPixel = last;
}
template<DrawPixel drawPixel, class Dasher>
static void drawLineAA(QCosmeticStroker *stroker, qreal rx1, qreal ry1, qreal rx2, qreal ry2, int caps)
{
if (stroker->clipLine(rx1, ry1, rx2, ry2))
return;
int x1 = toF26Dot6(rx1);
int y1 = toF26Dot6(ry1);
int x2 = toF26Dot6(rx2);
int y2 = toF26Dot6(ry2);
int dx = x2 - x1;
int dy = y2 - y1;
if (qAbs(dx) < qAbs(dy)) {
// vertical
int xinc = F16Dot16FixedDiv(dx, dy);
bool swapped = false;
if (y1 > y2) {
qSwap(y1, y2);
qSwap(x1, x2);
swapped = true;
caps = swapCaps(caps);
}
int x = (x1 - 32) << 10;
x -= ( ((y1 & 63) - 32) * xinc ) >> 6;
capAdjust(caps, y1, y2, x, xinc);
Dasher dasher(stroker, swapped, y1, y2);
int y = y1 >> 6;
int ys = y2 >> 6;
int alphaStart, alphaEnd;
if (y == ys) {
alphaStart = y2 - y1;
Q_ASSERT(alphaStart >= 0 && alphaStart < 64);
alphaEnd = 0;
} else {
alphaStart = 64 - (y1 & 63);
alphaEnd = (y2 & 63);
}
// qDebug() << "vertical" << x1/64. << y1/64. << x2/64. << y2/64.;
// qDebug() << " x=" << x << "dx=" << dx << "xi=" << (x>>16) << "xsi=" << ((x+(ys-y)*dx)>>16) << "y=" << y << "ys=" << ys;
// draw first pixel
if (dasher.on()) {
uint alpha = (quint8)(x >> 8);
drawPixel(stroker, x>>16, y, (255-alpha) * alphaStart >> 6);
drawPixel(stroker, (x>>16) + 1, y, alpha * alphaStart >> 6);
}
dasher.adjust();
x += xinc;
++y;
if (y < ys) {
do {
if (dasher.on()) {
uint alpha = (quint8)(x >> 8);
drawPixel(stroker, x>>16, y, (255-alpha));
drawPixel(stroker, (x>>16) + 1, y, alpha);
}
dasher.adjust();
x += xinc;
} while (++y < ys);
}
// draw last pixel
if (alphaEnd && dasher.on()) {
uint alpha = (quint8)(x >> 8);
drawPixel(stroker, x>>16, y, (255-alpha) * alphaEnd >> 6);
drawPixel(stroker, (x>>16) + 1, y, alpha * alphaEnd >> 6);
}
} else {
// horizontal
if (!dx)
return;
int yinc = F16Dot16FixedDiv(dy, dx);
bool swapped = false;
if (x1 > x2) {
qSwap(x1, x2);
qSwap(y1, y2);
swapped = true;
caps = swapCaps(caps);
}
int y = (y1 - 32) << 10;
y -= ( ((x1 & 63) - 32) * yinc ) >> 6;
capAdjust(caps, x1, x2, y, yinc);
Dasher dasher(stroker, swapped, x1, x2);
int x = x1 >> 6;
int xs = x2 >> 6;
// qDebug() << "horizontal" << x1/64. << y1/64. << x2/64. << y2/64.;
// qDebug() << " y=" << y << "dy=" << dy << "x=" << x << "xs=" << xs << "yi=" << (y>>16) << "ysi=" << ((y+(xs-x)*dy)>>16);
int alphaStart, alphaEnd;
if (x == xs) {
alphaStart = x2 - x1;
Q_ASSERT(alphaStart >= 0 && alphaStart < 64);
alphaEnd = 0;
} else {
alphaStart = 64 - (x1 & 63);
alphaEnd = (x2 & 63);
}
// draw first pixel
if (dasher.on()) {
uint alpha = (quint8)(y >> 8);
drawPixel(stroker, x, y>>16, (255-alpha) * alphaStart >> 6);
drawPixel(stroker, x, (y>>16) + 1, alpha * alphaStart >> 6);
}
dasher.adjust();
y += yinc;
++x;
// draw line
if (x < xs) {
do {
if (dasher.on()) {
uint alpha = (quint8)(y >> 8);
drawPixel(stroker, x, y>>16, (255-alpha));
drawPixel(stroker, x, (y>>16) + 1, alpha);
}
dasher.adjust();
y += yinc;
} while (++x < xs);
}
// draw last pixel
if (alphaEnd && dasher.on()) {
uint alpha = (quint8)(y >> 8);
drawPixel(stroker, x, y>>16, (255-alpha) * alphaEnd >> 6);
drawPixel(stroker, x, (y>>16) + 1, alpha * alphaEnd >> 6);
}
}
}

View File

@ -0,0 +1,101 @@
#ifndef QCOSMETICSTROKER_P_H
#define QCOSMETICSTROKER_P_H
#include <private/qdrawhelper_p.h>
#include <private/qvectorpath_p.h>
#include <private/qpaintengine_raster_p.h>
#include <qpen.h>
class QCosmeticStroker;
typedef void (*StrokeLine)(QCosmeticStroker *stroker, qreal x1, qreal y1, qreal x2, qreal y2, int caps);
class QCosmeticStroker
{
public:
struct Point {
int x;
int y;
};
struct PointF {
qreal x;
qreal y;
};
enum Caps {
NoCaps = 0,
CapBegin = 0x1,
CapEnd = 0x2,
};
// used to avoid drop outs or duplicated points
enum Direction {
TopToBottom,
BottomToTop,
LeftToRight,
RightToLeft
};
QCosmeticStroker(QRasterPaintEngineState *s, const QRect &dr)
: state(s),
clip(dr),
pattern(0),
reversePattern(0),
patternSize(0),
patternLength(0),
patternOffset(0),
current_span(0),
lastDir(LeftToRight),
lastAxisAligned(false)
{ setup(); }
~QCosmeticStroker() { free(pattern); free(reversePattern); }
void drawLine(const QPointF &p1, const QPointF &p2);
void drawPath(const QVectorPath &path);
void drawPoints(const QPoint *points, int num);
void drawPoints(const QPointF *points, int num);
QRasterPaintEngineState *state;
QRect clip;
// clip bounds in real
qreal xmin, xmax;
qreal ymin, ymax;
StrokeLine stroke;
bool drawCaps;
int *pattern;
int *reversePattern;
int patternSize;
int patternLength;
int patternOffset;
enum { NSPANS = 255 };
QT_FT_Span spans[NSPANS];
int current_span;
ProcessSpans blend;
int opacity;
uint color;
uint *pixels;
int ppl;
Direction lastDir;
Point lastPixel;
bool lastAxisAligned;
private:
void setup();
void renderCubic(const QPointF &p1, const QPointF &p2, const QPointF &p3, const QPointF &p4, int caps);
void renderCubicSubdivision(PointF *points, int level, int caps);
// used for closed subpaths
void calculateLastPoint(qreal rx1, qreal ry1, qreal rx2, qreal ry2);
public:
bool clipLine(qreal &x1, qreal &y1, qreal &x2, qreal &y2);
};
#endif // QCOSMETICLINE_H

File diff suppressed because it is too large Load Diff

View File

@ -191,9 +191,6 @@ public:
void stroke(const QVectorPath &path, const QPen &pen);
void fill(const QVectorPath &path, const QBrush &brush);
void strokePolygonCosmetic(const QPoint *pts, int pointCount, PolygonDrawMode mode);
void strokePolygonCosmetic(const QPointF *pt, int pointCount, PolygonDrawMode mode);
void clip(const QVectorPath &path, Qt::ClipOperation op);
void clip(const QRect &rect, Qt::ClipOperation op);
void clip(const QRegion &region, Qt::ClipOperation op);
@ -313,8 +310,6 @@ public:
bool isUnclipped_normalized(const QRect &rect) const;
bool isUnclipped(const QRect &rect, int penWidth) const;
bool isUnclipped(const QRectF &rect, int penWidth) const;
ProcessSpans getPenFunc(const QRect &rect, const QSpanData *data) const;
ProcessSpans getPenFunc(const QRectF &rect, const QSpanData *data) const;
ProcessSpans getBrushFunc(const QRect &rect, const QSpanData *data) const;
ProcessSpans getBrushFunc(const QRectF &rect, const QSpanData *data) const;

View File

@ -831,7 +831,7 @@ void QPaintEngineEx::drawEllipse(const QRectF &r)
int point_count = 0;
x.points[0] = qt_curves_for_arc(r, 0, -360, x.points + 1, &point_count);
QVectorPath vp((qreal *) pts, point_count, qpaintengineex_ellipse_types, QVectorPath::EllipseHint);
QVectorPath vp((qreal *) pts, point_count + 1, qpaintengineex_ellipse_types, QVectorPath::EllipseHint);
draw(vp);
}

View File

@ -428,7 +428,7 @@ int QRawFont::weight() const
of the text. To get the correctly shaped text, you can use QTextLayout to lay out and shape the
text, and then call QTextLayout::glyphRuns() to get the set of glyph index list and QRawFont pairs.
\sa advancesForGlyphIndexes(), QGlyphRun, QTextLayout::glyphRuns(), QTextFragment::glyphRuns()
\sa advancesForGlyphIndexes(), glyphIndexesForChars(), QGlyphRun, QTextLayout::glyphRuns(), QTextFragment::glyphRuns()
*/
QVector<quint32> QRawFont::glyphIndexesForString(const QString &text) const
{
@ -437,11 +437,9 @@ QVector<quint32> QRawFont::glyphIndexesForString(const QString &text) const
int nglyphs = text.size();
QVarLengthGlyphLayoutArray glyphs(nglyphs);
if (!d->fontEngine->stringToCMap(text.data(), text.size(), &glyphs, &nglyphs,
QTextEngine::GlyphIndicesOnly)) {
if (!glyphIndexesForChars(text.data(), text.size(), glyphs.glyphs, &nglyphs)) {
glyphs.resize(nglyphs);
if (!d->fontEngine->stringToCMap(text.data(), text.size(), &glyphs, &nglyphs,
QTextEngine::GlyphIndicesOnly)) {
if (!glyphIndexesForChars(text.data(), text.size(), glyphs.glyphs, &nglyphs)) {
Q_ASSERT_X(false, Q_FUNC_INFO, "stringToCMap shouldn't fail twice");
return QVector<quint32>();
}
@ -454,6 +452,26 @@ QVector<quint32> QRawFont::glyphIndexesForString(const QString &text) const
return glyphIndexes;
}
/*!
Converts a string of unicode points to glyph indexes using the CMAP table in the
underlying font. The function works like glyphIndexesForString() except it take
an array (\a chars), the results will be returned though \a glyphIndexes array
and number of glyphs will be set in \a numGlyphs. The size of \a glyphIndexes array
must be at least \a numChars, if that's still not enough, this function will return
false, then you can resize \a glyphIndexes from the size returned in \a numGlyphs.
\sa glyphIndexesForString(), advancesForGlyphIndexes(), QGlyphs, QTextLayout::glyphs(), QTextFragment::glyphs()
*/
bool QRawFont::glyphIndexesForChars(const QChar *chars, int numChars, quint32 *glyphIndexes, int *numGlyphs) const
{
if (!isValid())
return false;
QGlyphLayout glyphs;
glyphs.glyphs = glyphIndexes;
return d->fontEngine->stringToCMap(chars, numChars, &glyphs, numGlyphs, QTextEngine::GlyphIndicesOnly);
}
/*!
Returns the QRawFont's advances for each of the \a glyphIndexes in pixel units. The advances
give the distance from the position of a given glyph to where the next glyph should be drawn
@ -479,6 +497,36 @@ QVector<QPointF> QRawFont::advancesForGlyphIndexes(const QVector<quint32> &glyph
return advances;
}
/*!
Returns the QRawFont's advances for each of the \a glyphIndexes in pixel units. The advances
give the distance from the position of a given glyph to where the next glyph should be drawn
to make it appear as if the two glyphs are unspaced. The glyph indexes are given with the
array \a glyphIndexes while the results are returned through \a advances, both of them must
have \a numGlyphs elements.
\sa QTextLine::horizontalAdvance(), QFontMetricsF::width()
*/
bool QRawFont::advancesForGlyphIndexes(const quint32 *glyphIndexes, QPointF *advances, int numGlyphs) const
{
if (!isValid())
return false;
QGlyphLayout glyphs;
glyphs.glyphs = const_cast<HB_Glyph *>(glyphIndexes);
glyphs.numGlyphs = numGlyphs;
QVarLengthArray<QFixed> advances_x(numGlyphs);
QVarLengthArray<QFixed> advances_y(numGlyphs);
glyphs.advances_x = advances_x.data();
glyphs.advances_y = advances_y.data();
d->fontEngine->recalcAdvances(&glyphs, 0);
for (int i=0; i<numGlyphs; ++i)
advances[i] = QPointF(glyphs.advances_x[i].toReal(), glyphs.advances_y[i].toReal());
return true;
}
/*!
Returns the hinting preference used to construct this QRawFont.

View File

@ -90,6 +90,8 @@ public:
QVector<quint32> glyphIndexesForString(const QString &text) const;
QVector<QPointF> advancesForGlyphIndexes(const QVector<quint32> &glyphIndexes) const;
bool glyphIndexesForChars(const QChar *chars, int numChars, quint32 *glyphIndexes, int *numGlyphs) const;
bool advancesForGlyphIndexes(const quint32 *glyphIndexes, QPointF *advances, int numGlyphs) const;
QImage alphaMapForGlyph(quint32 glyphIndex,
AntialiasingType antialiasingType = SubPixelAntialiasing,

View File

@ -362,7 +362,7 @@ bool QTextCursorPrivate::movePosition(QTextCursor::MoveOperation op, QTextCursor
currentCharFormat = -1;
bool adjustX = true;
QTextBlock blockIt = block();
bool visualMovement = priv->defaultCursorMoveStyle == QTextCursor::Visual;
bool visualMovement = priv->defaultCursorMoveStyle == Qt::VisualMoveStyle;
if (!blockIt.isValid())
return false;
@ -2568,18 +2568,18 @@ QTextDocument *QTextCursor::document() const
}
/*!
\enum QTextCursor::MoveStyle
\enum Qt::CursorMoveStyle
This enum describes the movement style available to QTextCursor. The options
This enum describes the movement style available to text cursors. The options
are:
\value Logical Within a left-to-right text block, increase cursor position
when pressing left arrow key, decrease cursor position when pressing the
right arrow key. If the text block is right-to-left, the opposite behavior
\value LogicalMoveStyle Within a left-to-right text block, decrease cursor
position when pressing left arrow key, increase cursor position when pressing
the right arrow key. If the text block is right-to-left, the opposite behavior
applies.
\value Visual Pressing the left arrow key will always cause the cursor to move
left, regardless of the text's writing direction. The same behavior applies to
right arrow key.
\value VisualMoveStyle Pressing the left arrow key will always cause the cursor
to move left, regardless of the text's writing direction. Pressing the right
arrow key will always cause the cursor to move right.
*/
QT_END_NAMESPACE

View File

@ -86,10 +86,6 @@ public:
MoveAnchor,
KeepAnchor
};
enum MoveStyle {
Logical,
Visual
};
void setPosition(int pos, MoveMode mode = MoveAnchor);
int position() const;

View File

@ -585,9 +585,9 @@ void QTextDocument::setDefaultTextOption(const QTextOption &option)
\since 4.8
The default cursor movement style is used by all QTextCursor objects
created from the document. The default is QTextCursor::Logical.
created from the document. The default is Qt::LogicalMoveStyle.
*/
QTextCursor::MoveStyle QTextDocument::defaultCursorMoveStyle() const
Qt::CursorMoveStyle QTextDocument::defaultCursorMoveStyle() const
{
Q_D(const QTextDocument);
return d->defaultCursorMoveStyle;
@ -598,7 +598,7 @@ QTextCursor::MoveStyle QTextDocument::defaultCursorMoveStyle() const
Set the default cursor movement style.
*/
void QTextDocument::setDefaultCursorMoveStyle(QTextCursor::MoveStyle style)
void QTextDocument::setDefaultCursorMoveStyle(Qt::CursorMoveStyle style)
{
Q_D(QTextDocument);
d->defaultCursorMoveStyle = style;

View File

@ -46,7 +46,6 @@
#include <QtCore/qsize.h>
#include <QtCore/qrect.h>
#include <QtGui/qfont.h>
#include <QtGui/qtextcursor.h>
QT_BEGIN_HEADER
@ -70,6 +69,7 @@ class QUrl;
class QVariant;
class QRectF;
class QTextOption;
class QTextCursor;
template<typename T> class QVector;
@ -269,8 +269,8 @@ public:
QTextOption defaultTextOption() const;
void setDefaultTextOption(const QTextOption &option);
QTextCursor::MoveStyle defaultCursorMoveStyle() const;
void setDefaultCursorMoveStyle(QTextCursor::MoveStyle style);
Qt::CursorMoveStyle defaultCursorMoveStyle() const;
void setDefaultCursorMoveStyle(Qt::CursorMoveStyle style);
Q_SIGNALS:
void contentsChange(int from, int charsRemoves, int charsAdded);

View File

@ -209,7 +209,7 @@ QTextDocumentPrivate::QTextDocumentPrivate()
defaultTextOption.setTabStop(80); // same as in qtextengine.cpp
defaultTextOption.setWrapMode(QTextOption::WrapAtWordBoundaryOrAnywhere);
defaultCursorMoveStyle = QTextCursor::Logical;
defaultCursorMoveStyle = Qt::LogicalMoveStyle;
indentWidth = 40;
documentMargin = 4;

View File

@ -342,7 +342,7 @@ private:
public:
QTextOption defaultTextOption;
QTextCursor::MoveStyle defaultCursorMoveStyle;
Qt::CursorMoveStyle defaultCursorMoveStyle;
#ifndef QT_NO_CSSPARSER
QCss::StyleSheet parsedDefaultStyleSheet;
#endif

View File

@ -598,7 +598,7 @@ public:
inline bool visualCursorMovement() const
{
return (visualMovement ||
(block.docHandle() ? block.docHandle()->defaultCursorMoveStyle == QTextCursor::Visual : false));
(block.docHandle() ? block.docHandle()->defaultCursorMoveStyle == Qt::VisualMoveStyle : false));
}
struct SpecialData {

View File

@ -577,27 +577,27 @@ bool QTextLayout::cacheEnabled() const
}
/*!
Set the visual cursor movement style. If the QTextLayout is backed by
Set the cursor movement style. If the QTextLayout is backed by
a document, you can ignore this and use the option in QTextDocument,
this option is for widgets like QLineEdit or custom widgets without
a QTextDocument. Default value is QTextCursor::Logical.
a QTextDocument. Default value is Qt::LogicalMoveStyle.
\sa setCursorMoveStyle()
*/
void QTextLayout::setCursorMoveStyle(QTextCursor::MoveStyle style)
void QTextLayout::setCursorMoveStyle(Qt::CursorMoveStyle style)
{
d->visualMovement = style == QTextCursor::Visual ? true : false;
d->visualMovement = style == Qt::VisualMoveStyle ? true : false;
}
/*!
The cursor movement style of this QTextLayout. The default is
QTextCursor::Logical.
Qt::LogicalMoveStyle.
\sa setCursorMoveStyle()
*/
QTextCursor::MoveStyle QTextLayout::cursorMoveStyle() const
Qt::CursorMoveStyle QTextLayout::cursorMoveStyle() const
{
return d->visualMovement ? QTextCursor::Visual : QTextCursor::Logical;
return d->visualMovement ? Qt::VisualMoveStyle : Qt::LogicalMoveStyle;
}
/*!

View File

@ -137,8 +137,8 @@ public:
void setCacheEnabled(bool enable);
bool cacheEnabled() const;
void setCursorMoveStyle(QTextCursor::MoveStyle style);
QTextCursor::MoveStyle cursorMoveStyle() const;
void setCursorMoveStyle(Qt::CursorMoveStyle style);
Qt::CursorMoveStyle cursorMoveStyle() const;
void beginLayout();
void endLayout();

View File

@ -859,6 +859,8 @@ void QNetworkReplyImpl::abort()
if (d->state != QNetworkReplyImplPrivate::Finished) {
// call finished which will emit signals
d->error(OperationCanceledError, tr("Operation canceled"));
if (d->state == QNetworkReplyImplPrivate::WaitingForSession)
d->state = QNetworkReplyImplPrivate::Working;
d->finished();
}
d->state = QNetworkReplyImplPrivate::Aborted;
@ -1018,10 +1020,6 @@ bool QNetworkReplyImplPrivate::migrateBackend()
if (state == Finished || state == Aborted)
return true;
// Backend does not support resuming download.
if (!backend->canResume())
return false;
// Request has outgoing data, not migrating.
if (outgoingData)
return false;
@ -1030,6 +1028,10 @@ bool QNetworkReplyImplPrivate::migrateBackend()
if (copyDevice)
return true;
// Backend does not support resuming download.
if (!backend->canResume())
return false;
state = QNetworkReplyImplPrivate::Reconnecting;
if (backend) {

View File

@ -19,6 +19,9 @@ win32-msvc*|win32-icc:QMAKE_LFLAGS += /BASE:0x64000000
unix|win32-g++*:QMAKE_PKGCONFIG_REQUIRES = QtCore
include(../qbase.pri)
HEADERS += $$QT_SOURCE_TREE/src/network/qtnetworkversion.h
include(access/access.pri)
include(bearer/bearer.pri)
include(kernel/kernel.pri)

View File

@ -547,15 +547,15 @@ bool QAbstractSocketPrivate::initSocketLayer(QAbstractSocket::NetworkLayerProtoc
resetSocketLayer();
socketEngine = QAbstractSocketEngine::createSocketEngine(q->socketType(), proxyInUse, q);
#ifndef QT_NO_BEARERMANAGEMENT
//copy network session down to the socket engine (if it has been set)
socketEngine->setProperty("_q_networksession", q->property("_q_networksession"));
#endif
if (!socketEngine) {
socketError = QAbstractSocket::UnsupportedSocketOperationError;
q->setErrorString(QAbstractSocket::tr("Operation on socket is not supported"));
return false;
}
#ifndef QT_NO_BEARERMANAGEMENT
//copy network session down to the socket engine (if it has been set)
socketEngine->setProperty("_q_networksession", q->property("_q_networksession"));
#endif
#ifndef QT_NO_NETWORKPROXY
//copy user agent to socket engine (if it has been set)
socketEngine->setProperty("_q_user-agent", q->property("_q_user-agent"));
@ -1609,15 +1609,15 @@ bool QAbstractSocket::setSocketDescriptor(int socketDescriptor, SocketState sock
d->resetSocketLayer();
d->socketEngine = QAbstractSocketEngine::createSocketEngine(socketDescriptor, this);
#ifndef QT_NO_BEARERMANAGEMENT
//copy network session down to the socket engine (if it has been set)
d->socketEngine->setProperty("_q_networksession", property("_q_networksession"));
#endif
if (!d->socketEngine) {
d->socketError = UnsupportedSocketOperationError;
setErrorString(tr("Operation on socket is not supported"));
return false;
}
#ifndef QT_NO_BEARERMANAGEMENT
//copy network session down to the socket engine (if it has been set)
d->socketEngine->setProperty("_q_networksession", property("_q_networksession"));
#endif
bool result = d->socketEngine->initialize(socketDescriptor, socketState);
if (!result) {
d->socketError = d->socketEngine->error();

View File

@ -251,7 +251,8 @@ QSymbianSocketEnginePrivate::QSymbianSocketEnginePrivate() :
readNotificationsEnabled(false),
writeNotificationsEnabled(false),
exceptNotificationsEnabled(false),
asyncSelect(0)
asyncSelect(0),
hasReceivedBufferedDatagram(false)
{
}
@ -781,21 +782,34 @@ qint64 QSymbianSocketEngine::pendingDatagramSize() const
Q_D(const QSymbianSocketEngine);
Q_CHECK_VALID_SOCKETLAYER(QSymbianSocketEngine::pendingDatagramSize(), false);
Q_CHECK_TYPE(QSymbianSocketEngine::hasPendingDatagrams(), QAbstractSocket::UdpSocket, false);
int nbytes;
//can only buffer one datagram at a time
if (d->hasReceivedBufferedDatagram)
return d->receivedDataBuffer.size();
int nbytes = 0;
TInt err = d->nativeSocket.GetOpt(KSOReadBytesPending,KSOLSocket, nbytes);
if (nbytes > 0) {
//nbytes includes IP header, which is of variable length (IPv4 with or without options, IPv6...)
QByteArray next(nbytes,0);
TPtr8 buffer((TUint8*)next.data(), next.size());
//therefore read the datagram into a buffer to find its true size
d->receivedDataBuffer.resize(nbytes);
TPtr8 buffer((TUint8*)d->receivedDataBuffer.data(), nbytes);
//nbytes = size including IP header, buffer is a pointer descriptor backed by the receivedDataBuffer
TInetAddr addr;
TRequestStatus status;
//TODO: rather than peek, should we save this for next call to readDatagram?
//what if calls don't match though?
d->nativeSocket.RecvFrom(buffer, addr, KSockReadPeek, status);
//RecvFrom copies only the payload (we don't want the header so don't specify the option to retrieve it)
d->nativeSocket.RecvFrom(buffer, addr, 0, status);
User::WaitForRequest(status);
if (status.Int())
if (status != KErrNone) {
d->receivedDataBuffer.clear();
return 0;
return buffer.Length();
}
nbytes = buffer.Length();
//nbytes = size of payload, resize the receivedDataBuffer to the final size
d->receivedDataBuffer.resize(nbytes);
d->hasReceivedBufferedDatagram = true;
//now receivedDataBuffer contains one datagram, which has been removed from the socket's internal buffer
#if defined (QNATIVESOCKETENGINE_DEBUG)
qDebug() << "QSymbianSocketEngine::pendingDatagramSize buffering" << nbytes << "bytes";
#endif
}
return qint64(nbytes);
}
@ -807,6 +821,19 @@ qint64 QSymbianSocketEngine::readDatagram(char *data, qint64 maxSize,
Q_D(QSymbianSocketEngine);
Q_CHECK_VALID_SOCKETLAYER(QSymbianSocketEngine::readDatagram(), -1);
Q_CHECK_TYPE(QSymbianSocketEngine::readDatagram(), QAbstractSocket::UdpSocket, false);
// if a datagram was buffered in pendingDatagramSize(), return it now
if (d->hasReceivedBufferedDatagram) {
qint64 size = qMin(maxSize, (qint64)d->receivedDataBuffer.size());
memcpy(data, d->receivedDataBuffer.constData(), size);
d->receivedDataBuffer.clear();
d->hasReceivedBufferedDatagram = false;
#if defined (QNATIVESOCKETENGINE_DEBUG)
qDebug() << "QSymbianSocketEngine::readDatagram returning" << size << "bytes from buffer";
#endif
return size;
}
TPtr8 buffer((TUint8*)data, (int)maxSize);
TInetAddr addr;
TRequestStatus status;
@ -985,6 +1012,9 @@ void QSymbianSocketEngine::close()
d->localAddress.clear();
d->peerPort = 0;
d->peerAddress.clear();
d->hasReceivedBufferedDatagram = false;
d->receivedDataBuffer.clear();
}
qint64 QSymbianSocketEngine::write(const char *data, qint64 len)
@ -1036,6 +1066,18 @@ qint64 QSymbianSocketEngine::read(char *data, qint64 maxSize)
Q_CHECK_VALID_SOCKETLAYER(QSymbianSocketEngine::read(), -1);
Q_CHECK_STATES(QSymbianSocketEngine::read(), QAbstractSocket::ConnectedState, QAbstractSocket::BoundState, -1);
// if a datagram was buffered in pendingDatagramSize(), return it now
if (d->hasReceivedBufferedDatagram) {
qint64 size = qMin(maxSize, (qint64)d->receivedDataBuffer.size());
memcpy(data, d->receivedDataBuffer.constData(), size);
d->receivedDataBuffer.clear();
d->hasReceivedBufferedDatagram = false;
#if defined (QNATIVESOCKETENGINE_DEBUG)
qDebug() << "QSymbianSocketEngine::read returning" << size << "bytes from buffer";
#endif
return size;
}
TPtr8 buffer((TUint8*)data, (int)maxSize);
TSockXfrLength received = 0;
TRequestStatus status;
@ -1440,6 +1482,7 @@ void QSymbianSocketEngine::startNotifications()
qDebug() << "QSymbianSocketEngine::startNotifications" << d->readNotificationsEnabled << d->writeNotificationsEnabled << d->exceptNotificationsEnabled;
#endif
if (!d->asyncSelect && (d->readNotificationsEnabled || d->writeNotificationsEnabled || d->exceptNotificationsEnabled)) {
Q_CHECK_VALID_SOCKETLAYER(QSymbianSocketEngine::startNotifications(), Q_VOID);
if (d->threadData->eventDispatcher) {
d->asyncSelect = q_check_ptr(new QAsyncSelect(
static_cast<QEventDispatcherSymbian*> (d->threadData->eventDispatcher), d->nativeSocket,
@ -1456,14 +1499,12 @@ void QSymbianSocketEngine::startNotifications()
bool QSymbianSocketEngine::isReadNotificationEnabled() const
{
Q_D(const QSymbianSocketEngine);
Q_CHECK_VALID_SOCKETLAYER(QSymbianSocketEngine::isReadNotificationEnabled(), false);
return d->readNotificationsEnabled;
}
void QSymbianSocketEngine::setReadNotificationEnabled(bool enable)
{
Q_D(QSymbianSocketEngine);
Q_CHECK_VALID_SOCKETLAYER(QSymbianSocketEngine::setReadNotificationEnabled(), Q_VOID);
#ifdef QNATIVESOCKETENGINE_DEBUG
qDebug() << "QSymbianSocketEngine::setReadNotificationEnabled" << enable << "socket" << d->socketDescriptor;
#endif
@ -1474,14 +1515,12 @@ void QSymbianSocketEngine::setReadNotificationEnabled(bool enable)
bool QSymbianSocketEngine::isWriteNotificationEnabled() const
{
Q_D(const QSymbianSocketEngine);
Q_CHECK_VALID_SOCKETLAYER(QSymbianSocketEngine::isWriteNotificationEnabled(), false);
return d->writeNotificationsEnabled;
}
void QSymbianSocketEngine::setWriteNotificationEnabled(bool enable)
{
Q_D(QSymbianSocketEngine);
Q_CHECK_VALID_SOCKETLAYER(QSymbianSocketEngine::setWriteNotificationEnabled(), Q_VOID);
#ifdef QNATIVESOCKETENGINE_DEBUG
qDebug() << "QSymbianSocketEngine::setWriteNotificationEnabled" << enable << "socket" << d->socketDescriptor;
#endif
@ -1492,7 +1531,6 @@ void QSymbianSocketEngine::setWriteNotificationEnabled(bool enable)
bool QSymbianSocketEngine::isExceptionNotificationEnabled() const
{
Q_D(const QSymbianSocketEngine);
Q_CHECK_VALID_SOCKETLAYER(QSymbianSocketEngine::isExceptionNotificationEnabled(), false);
return d->exceptNotificationsEnabled;
return false;
}
@ -1500,7 +1538,6 @@ bool QSymbianSocketEngine::isExceptionNotificationEnabled() const
void QSymbianSocketEngine::setExceptionNotificationEnabled(bool enable)
{
Q_D(QSymbianSocketEngine);
Q_CHECK_VALID_SOCKETLAYER(QSymbianSocketEngine::setExceptionNotificationEnabled(), Q_VOID);
#ifdef QNATIVESOCKETENGINE_DEBUG
qDebug() << "QSymbianSocketEngine::setExceptionNotificationEnabled" << enable << "socket" << d->socketDescriptor;
#endif
@ -1660,6 +1697,9 @@ void QAsyncSelect::run()
//when event loop disabled socket events, defer until later
if (maybeDeferSocketEvent())
return;
#if defined (QNATIVESOCKETENGINE_DEBUG)
qDebug() << "QAsyncSelect::run" << m_selectBuf() << m_selectFlags;
#endif
m_inSocketEvent = true;
m_selectBuf() &= m_selectFlags; //the select ioctl reports everything, so mask to only what we requested
//KSockSelectReadContinuation is for reading datagrams in a mode that doesn't discard when the

View File

@ -196,6 +196,8 @@ public:
bool exceptNotificationsEnabled;
QAsyncSelect* asyncSelect;
mutable QByteArray receivedDataBuffer;
mutable bool hasReceivedBufferedDatagram;
// FIXME this is duplicated from qnativesocketengine_p.h
enum ErrorString {
NonBlockingInitFailedErrorString,

View File

@ -416,6 +416,11 @@ bool QTcpServer::setSocketDescriptor(int socketDescriptor)
if (d->socketEngine)
delete d->socketEngine;
d->socketEngine = QAbstractSocketEngine::createSocketEngine(socketDescriptor, this);
if (!d->socketEngine) {
d->serverSocketError = QAbstractSocket::UnsupportedSocketOperationError;
d->serverSocketErrorString = tr("Operation on socket is not supported");
return false;
}
#ifndef QT_NO_BEARERMANAGEMENT
//copy network session down to the socket engine (if it has been set)
d->socketEngine->setProperty("_q_networksession", property("_q_networksession"));

View File

@ -15,7 +15,9 @@ unix|win32-g++*:QMAKE_PKGCONFIG_REQUIRES = QtCore QtGui
include(../qbase.pri)
!win32:!mac:!symbian:!qpa:CONFIG += x11
HEADERS += $$QT_SOURCE_TREE/src/opengl/qtopenglversion.h
!win32:!embedded:!mac:!symbian:!qpa:CONFIG += x11
contains(QT_CONFIG, opengl):CONFIG += opengl
contains(QT_CONFIG, opengles1):CONFIG += opengles1
contains(QT_CONFIG, opengles2):CONFIG += opengles2

View File

@ -211,19 +211,24 @@ QGLFunctions::QGLFunctions(const QGLContext *context)
static int qt_gl_resolve_features()
{
#if defined(QT_OPENGL_ES_2)
return QGLFunctions::Multitexture |
QGLFunctions::Shaders |
QGLFunctions::Buffers |
QGLFunctions::Framebuffers |
QGLFunctions::BlendColor |
QGLFunctions::BlendEquation |
QGLFunctions::BlendEquationSeparate |
QGLFunctions::BlendFuncSeparate |
QGLFunctions::BlendSubtract |
QGLFunctions::CompressedTextures |
QGLFunctions::Multisample |
QGLFunctions::StencilSeparate |
QGLFunctions::NPOTTextures;
int features = QGLFunctions::Multitexture |
QGLFunctions::Shaders |
QGLFunctions::Buffers |
QGLFunctions::Framebuffers |
QGLFunctions::BlendColor |
QGLFunctions::BlendEquation |
QGLFunctions::BlendEquationSeparate |
QGLFunctions::BlendFuncSeparate |
QGLFunctions::BlendSubtract |
QGLFunctions::CompressedTextures |
QGLFunctions::Multisample |
QGLFunctions::StencilSeparate;
QGLExtensionMatcher extensions;
if (extensions.match("GL_OES_texture_npot"))
features |= QGLFunctions::NPOTTextures;
if (extensions.match("GL_IMG_texture_npot"))
features |= QGLFunctions::NPOTTextures;
return features;
#elif defined(QT_OPENGL_ES)
int features = QGLFunctions::Multitexture |
QGLFunctions::Buffers |
@ -240,6 +245,8 @@ static int qt_gl_resolve_features()
features |= QGLFunctions::BlendSubtract;
if (extensions.match("GL_OES_texture_npot"))
features |= QGLFunctions::NPOTTextures;
if (extensions.match("GL_IMG_texture_npot"))
features |= QGLFunctions::NPOTTextures;
return features;
#else
int features = 0;

View File

@ -4844,4 +4844,172 @@ EXPORTS
?staticMetaObjectExtraData@QEventTransition@@0UQMetaObjectExtraData@@B @ 4843 NONAME ; struct QMetaObjectExtraData const QEventTransition::staticMetaObjectExtraData
?qt_static_metacall@QEventLoop@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 4844 NONAME ; void QEventLoop::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *)
?keys@QProcessEnvironment@@QBE?AVQStringList@@XZ @ 4845 NONAME ; class QStringList QProcessEnvironment::keys(void) const
?progressTextChanged@QFutureWatcherBase@@IAEXABVQString@@@Z @ 4846 NONAME ; void QFutureWatcherBase::progressTextChanged(class QString const &)
?timeAfterUser@BlockSizeManager@QtConcurrent@@QAEXXZ @ 4847 NONAME ; void QtConcurrent::BlockSizeManager::timeAfterUser(void)
?hasThrown@ExceptionStore@internal@QtConcurrent@@QBE_NXZ @ 4848 NONAME ; bool QtConcurrent::internal::ExceptionStore::hasThrown(void) const
??1ExceptionStore@internal@QtConcurrent@@QAE@XZ @ 4849 NONAME ; QtConcurrent::internal::ExceptionStore::~ExceptionStore(void)
?isVector@ResultIteratorBase@QtConcurrent@@QBE_NXZ @ 4850 NONAME ; bool QtConcurrent::ResultIteratorBase::isVector(void) const
?queryState@QFutureInterfaceBase@@QBE_NW4State@1@@Z @ 4851 NONAME ; bool QFutureInterfaceBase::queryState(enum QFutureInterfaceBase::State) const
?end@ResultStoreBase@QtConcurrent@@QBE?AVResultIteratorBase@2@XZ @ 4852 NONAME ; class QtConcurrent::ResultIteratorBase QtConcurrent::ResultStoreBase::end(void) const
?run@ThreadEngineBase@QtConcurrent@@EAEXXZ @ 4853 NONAME ; void QtConcurrent::ThreadEngineBase::run(void)
?exception@ExceptionStore@internal@QtConcurrent@@QAE?AVExceptionHolder@23@XZ @ 4854 NONAME ; class QtConcurrent::internal::ExceptionHolder QtConcurrent::internal::ExceptionStore::exception(void)
?isStarted@QFutureWatcherBase@@QBE_NXZ @ 4855 NONAME ; bool QFutureWatcherBase::isStarted(void) const
?resultIndex@ResultIteratorBase@QtConcurrent@@QBEHXZ @ 4856 NONAME ; int QtConcurrent::ResultIteratorBase::resultIndex(void) const
?qt_metacast@QFutureWatcherBase@@UAEPAXPBD@Z @ 4857 NONAME ; void * QFutureWatcherBase::qt_metacast(char const *)
??9QFutureInterfaceBase@@QBE_NABV0@@Z @ 4858 NONAME ; bool QFutureInterfaceBase::operator!=(class QFutureInterfaceBase const &) const
??0QFutureInterfaceBase@@QAE@W4State@0@@Z @ 4859 NONAME ; QFutureInterfaceBase::QFutureInterfaceBase(enum QFutureInterfaceBase::State)
?staticMetaObjectExtraData@QFutureWatcherBase@@0UQMetaObjectExtraData@@B @ 4860 NONAME ; struct QMetaObjectExtraData const QFutureWatcherBase::staticMetaObjectExtraData
??0QFutureWatcherBase@@QAE@PAVQObject@@@Z @ 4861 NONAME ; QFutureWatcherBase::QFutureWatcherBase(class QObject *)
??1QFutureInterfaceBase@@UAE@XZ @ 4862 NONAME ; QFutureInterfaceBase::~QFutureInterfaceBase(void)
?resume@QFutureWatcherBase@@QAEXXZ @ 4863 NONAME ; void QFutureWatcherBase::resume(void)
?startSingleThreaded@ThreadEngineBase@QtConcurrent@@QAEXXZ @ 4864 NONAME ; void QtConcurrent::ThreadEngineBase::startSingleThreaded(void)
?setPaused@QFutureWatcherBase@@QAEX_N@Z @ 4865 NONAME ; void QFutureWatcherBase::setPaused(bool)
?waitForResume@QFutureInterfaceBase@@QAEXXZ @ 4866 NONAME ; void QFutureInterfaceBase::waitForResume(void)
?progressMinimum@QFutureInterfaceBase@@QBEHXZ @ 4867 NONAME ; int QFutureInterfaceBase::progressMinimum(void) const
?hasException@ExceptionStore@internal@QtConcurrent@@QBE_NXZ @ 4868 NONAME ; bool QtConcurrent::internal::ExceptionStore::hasException(void) const
?tr@QFutureWatcherBase@@SA?AVQString@@PBD0H@Z @ 4869 NONAME ; class QString QFutureWatcherBase::tr(char const *, char const *, int)
?resultAt@ResultStoreBase@QtConcurrent@@QBE?AVResultIteratorBase@2@H@Z @ 4870 NONAME ; class QtConcurrent::ResultIteratorBase QtConcurrent::ResultStoreBase::resultAt(int) const
?connectOutputInterface@QFutureWatcherBase@@IAEXXZ @ 4871 NONAME ; void QFutureWatcherBase::connectOutputInterface(void)
?insertResultItem@ResultStoreBase@QtConcurrent@@IAEHHAAVResultItem@2@@Z @ 4872 NONAME ; int QtConcurrent::ResultStoreBase::insertResultItem(int, class QtConcurrent::ResultItem &)
?syncResultCount@ResultStoreBase@QtConcurrent@@IAEXXZ @ 4873 NONAME ; void QtConcurrent::ResultStoreBase::syncResultCount(void)
?setProgressRange@ThreadEngineBase@QtConcurrent@@QAEXHH@Z @ 4874 NONAME ; void QtConcurrent::ThreadEngineBase::setProgressRange(int, int)
??_EQFutureWatcherBase@@UAE@I@Z @ 4875 NONAME ; QFutureWatcherBase::~QFutureWatcherBase(unsigned int)
?progressValueChanged@QFutureWatcherBase@@IAEXH@Z @ 4876 NONAME ; void QFutureWatcherBase::progressValueChanged(int)
?threadExit@ThreadEngineBase@QtConcurrent@@AAEXXZ @ 4877 NONAME ; void QtConcurrent::ThreadEngineBase::threadExit(void)
?mutex@QFutureInterfaceBase@@QBEPAVQMutex@@XZ @ 4878 NONAME ; class QMutex * QFutureInterfaceBase::mutex(void) const
?staticMetaObject@QFutureWatcherBase@@2UQMetaObject@@B @ 4879 NONAME ; struct QMetaObject const QFutureWatcherBase::staticMetaObject
?setException@ExceptionStore@internal@QtConcurrent@@QAEXABVException@3@@Z @ 4880 NONAME ; void QtConcurrent::internal::ExceptionStore::setException(class QtConcurrent::Exception const &)
??0ResultIteratorBase@QtConcurrent@@QAE@XZ @ 4881 NONAME ; QtConcurrent::ResultIteratorBase::ResultIteratorBase(void)
?hasNextResult@ResultStoreBase@QtConcurrent@@QBE_NXZ @ 4882 NONAME ; bool QtConcurrent::ResultStoreBase::hasNextResult(void) const
??_EResultStoreBase@QtConcurrent@@UAE@I@Z @ 4883 NONAME ; QtConcurrent::ResultStoreBase::~ResultStoreBase(unsigned int)
?contains@ResultStoreBase@QtConcurrent@@QBE_NH@Z @ 4884 NONAME ; bool QtConcurrent::ResultStoreBase::contains(int) const
?updateInsertIndex@ResultStoreBase@QtConcurrent@@IAEHHH@Z @ 4885 NONAME ; int QtConcurrent::ResultStoreBase::updateInsertIndex(int, int)
??_EException@QtConcurrent@@UAE@I@Z @ 4886 NONAME ; QtConcurrent::Exception::~Exception(unsigned int)
?qt_metacall@QFutureWatcherBase@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 4887 NONAME ; int QFutureWatcherBase::qt_metacall(enum QMetaObject::Call, int, void * *)
?isStarted@QFutureInterfaceBase@@QBE_NXZ @ 4888 NONAME ; bool QFutureInterfaceBase::isStarted(void) const
??0QFutureInterfaceBase@@QAE@ABV0@@Z @ 4889 NONAME ; QFutureInterfaceBase::QFutureInterfaceBase(class QFutureInterfaceBase const &)
??_EUnhandledException@QtConcurrent@@UAE@I@Z @ 4890 NONAME ; QtConcurrent::UnhandledException::~UnhandledException(unsigned int)
?progressValue@QFutureWatcherBase@@QBEHXZ @ 4891 NONAME ; int QFutureWatcherBase::progressValue(void) const
??8ResultIteratorBase@QtConcurrent@@QBE_NABV01@@Z @ 4892 NONAME ; bool QtConcurrent::ResultIteratorBase::operator==(class QtConcurrent::ResultIteratorBase const &) const
?tr@QFutureWatcherBase@@SA?AVQString@@PBD0@Z @ 4893 NONAME ; class QString QFutureWatcherBase::tr(char const *, char const *)
?startBlocking@ThreadEngineBase@QtConcurrent@@QAEXXZ @ 4894 NONAME ; void QtConcurrent::ThreadEngineBase::startBlocking(void)
?threadThrottleExit@ThreadEngineBase@QtConcurrent@@AAE_NXZ @ 4895 NONAME ; bool QtConcurrent::ThreadEngineBase::threadThrottleExit(void)
?isFinished@QFutureWatcherBase@@QBE_NXZ @ 4896 NONAME ; bool QFutureWatcherBase::isFinished(void) const
?resultsReadyAt@QFutureWatcherBase@@IAEXHH@Z @ 4897 NONAME ; void QFutureWatcherBase::resultsReadyAt(int, int)
?start@ThreadEngineBase@QtConcurrent@@MAEXXZ @ 4898 NONAME ; void QtConcurrent::ThreadEngineBase::start(void)
?runningAnimationCount@QUnifiedTimer@@QAEHXZ @ 4899 NONAME ; int QUnifiedTimer::runningAnimationCount(void)
??9ResultIteratorBase@QtConcurrent@@QBE_NABV01@@Z @ 4900 NONAME ; bool QtConcurrent::ResultIteratorBase::operator!=(class QtConcurrent::ResultIteratorBase const &) const
??1UnhandledException@QtConcurrent@@UAE@XZ @ 4901 NONAME ; QtConcurrent::UnhandledException::~UnhandledException(void)
?shouldStartThread@ThreadEngineBase@QtConcurrent@@MAE_NXZ @ 4902 NONAME ; bool QtConcurrent::ThreadEngineBase::shouldStartThread(void)
?d_func@QFutureWatcherBase@@AAEPAVQFutureWatcherBasePrivate@@XZ @ 4903 NONAME ; class QFutureWatcherBasePrivate * QFutureWatcherBase::d_func(void)
?startThread@ThreadEngineBase@QtConcurrent@@QAEXXZ @ 4904 NONAME ; void QtConcurrent::ThreadEngineBase::startThread(void)
?threadFunction@ThreadEngineBase@QtConcurrent@@MAE?AW4ThreadFunctionResult@2@XZ @ 4905 NONAME ; enum QtConcurrent::ThreadFunctionResult QtConcurrent::ThreadEngineBase::threadFunction(void)
?count@ResultStoreBase@QtConcurrent@@QBEHXZ @ 4906 NONAME ; int QtConcurrent::ResultStoreBase::count(void) const
?isThrottled@QFutureInterfaceBase@@QBE_NXZ @ 4907 NONAME ; bool QFutureInterfaceBase::isThrottled(void) const
?waitForResume@ThreadEngineBase@QtConcurrent@@QAEXXZ @ 4908 NONAME ; void QtConcurrent::ThreadEngineBase::waitForResume(void)
?progressMinimum@QFutureWatcherBase@@QBEHXZ @ 4909 NONAME ; int QFutureWatcherBase::progressMinimum(void) const
??1ThreadEngineBase@QtConcurrent@@UAE@XZ @ 4910 NONAME ; QtConcurrent::ThreadEngineBase::~ThreadEngineBase(void)
?finished@QFutureWatcherBase@@IAEXXZ @ 4911 NONAME ; void QFutureWatcherBase::finished(void)
?progressMaximum@QFutureInterfaceBase@@QBEHXZ @ 4912 NONAME ; int QFutureInterfaceBase::progressMaximum(void) const
?pause@QFutureWatcherBase@@QAEXXZ @ 4913 NONAME ; void QFutureWatcherBase::pause(void)
?isProgressReportingEnabled@ThreadEngineBase@QtConcurrent@@QAE_NXZ @ 4914 NONAME ; bool QtConcurrent::ThreadEngineBase::isProgressReportingEnabled(void)
?blockSizeMaxed@BlockSizeManager@QtConcurrent@@AAE_NXZ @ 4915 NONAME ; bool QtConcurrent::BlockSizeManager::blockSizeMaxed(void)
?isCanceled@QFutureInterfaceBase@@QBE_NXZ @ 4916 NONAME ; bool QFutureInterfaceBase::isCanceled(void) const
?cancel@QFutureInterfaceBase@@QAEXXZ @ 4917 NONAME ; void QFutureInterfaceBase::cancel(void)
?setFilterMode@QFutureInterfaceBase@@QAEX_N@Z @ 4918 NONAME ; void QFutureInterfaceBase::setFilterMode(bool)
?setProgressValueAndText@QFutureInterfaceBase@@QAEXHABVQString@@@Z @ 4919 NONAME ; void QFutureInterfaceBase::setProgressValueAndText(int, class QString const &)
?setRunnable@QFutureInterfaceBase@@QAEXPAVQRunnable@@@Z @ 4920 NONAME ; void QFutureInterfaceBase::setRunnable(class QRunnable *)
?trUtf8@QFutureWatcherBase@@SA?AVQString@@PBD0H@Z @ 4921 NONAME ; class QString QFutureWatcherBase::trUtf8(char const *, char const *, int)
?paused@QFutureWatcherBase@@IAEXXZ @ 4922 NONAME ; void QFutureWatcherBase::paused(void)
?disconnectOutputInterface@QFutureWatcherBase@@IAEX_N@Z @ 4923 NONAME ; void QFutureWatcherBase::disconnectOutputInterface(bool)
?isCanceled@QFutureWatcherBase@@QBE_NXZ @ 4924 NONAME ; bool QFutureWatcherBase::isCanceled(void) const
?expectedResultCount@QFutureInterfaceBase@@QAEHXZ @ 4925 NONAME ; int QFutureInterfaceBase::expectedResultCount(void)
??_EQFutureInterfaceBase@@UAE@I@Z @ 4926 NONAME ; QFutureInterfaceBase::~QFutureInterfaceBase(unsigned int)
?waitForResult@QFutureInterfaceBase@@QAEXH@Z @ 4927 NONAME ; void QFutureInterfaceBase::waitForResult(int)
?d_func@QFutureWatcherBase@@ABEPBVQFutureWatcherBasePrivate@@XZ @ 4928 NONAME ; class QFutureWatcherBasePrivate const * QFutureWatcherBase::d_func(void) const
?setPaused@QFutureInterfaceBase@@QAEX_N@Z @ 4929 NONAME ; void QFutureInterfaceBase::setPaused(bool)
??_EThreadEngineBase@QtConcurrent@@UAE@I@Z @ 4930 NONAME ; QtConcurrent::ThreadEngineBase::~ThreadEngineBase(unsigned int)
??0Exception@QtConcurrent@@QAE@ABV01@@Z @ 4931 NONAME ; QtConcurrent::Exception::Exception(class QtConcurrent::Exception const &)
?referenceCountIsOne@QFutureInterfaceBase@@IBE_NXZ @ 4932 NONAME ; bool QFutureInterfaceBase::referenceCountIsOne(void) const
?progressText@QFutureInterfaceBase@@QBE?AVQString@@XZ @ 4933 NONAME ; class QString QFutureInterfaceBase::progressText(void) const
?startThreadInternal@ThreadEngineBase@QtConcurrent@@AAE_NXZ @ 4934 NONAME ; bool QtConcurrent::ThreadEngineBase::startThreadInternal(void)
?addResult@ResultStoreBase@QtConcurrent@@QAEHHPBX@Z @ 4935 NONAME ; int QtConcurrent::ResultStoreBase::addResult(int, void const *)
?waitForFinished@QFutureWatcherBase@@QAEXXZ @ 4936 NONAME ; void QFutureWatcherBase::waitForFinished(void)
?togglePaused@QFutureInterfaceBase@@QAEXXZ @ 4937 NONAME ; void QFutureInterfaceBase::togglePaused(void)
?isProgressUpdateNeeded@QFutureInterfaceBase@@QBE_NXZ @ 4938 NONAME ; bool QFutureInterfaceBase::isProgressUpdateNeeded(void) const
?resultReadyAt@QFutureWatcherBase@@IAEXH@Z @ 4939 NONAME ; void QFutureWatcherBase::resultReadyAt(int)
?waitForNextResult@QFutureInterfaceBase@@QAE_NXZ @ 4940 NONAME ; bool QFutureInterfaceBase::waitForNextResult(void)
?raise@UnhandledException@QtConcurrent@@UBEXXZ @ 4941 NONAME ; void QtConcurrent::UnhandledException::raise(void) const
?setProgressValue@QFutureInterfaceBase@@QAEXH@Z @ 4942 NONAME ; void QFutureInterfaceBase::setProgressValue(int)
?startThreads@ThreadEngineBase@QtConcurrent@@AAEXXZ @ 4943 NONAME ; void QtConcurrent::ThreadEngineBase::startThreads(void)
?isPaused@QFutureInterfaceBase@@QBE_NXZ @ 4944 NONAME ; bool QFutureInterfaceBase::isPaused(void) const
?resultStoreBase@QFutureInterfaceBase@@QAEAAVResultStoreBase@QtConcurrent@@XZ @ 4945 NONAME ; class QtConcurrent::ResultStoreBase & QFutureInterfaceBase::resultStoreBase(void)
?isRunning@QFutureInterfaceBase@@QBE_NXZ @ 4946 NONAME ; bool QFutureInterfaceBase::isRunning(void) const
?begin@ResultStoreBase@QtConcurrent@@QBE?AVResultIteratorBase@2@XZ @ 4947 NONAME ; class QtConcurrent::ResultIteratorBase QtConcurrent::ResultStoreBase::begin(void) const
?resultStoreBase@QFutureInterfaceBase@@QBEABVResultStoreBase@QtConcurrent@@XZ @ 4948 NONAME ; class QtConcurrent::ResultStoreBase const & QFutureInterfaceBase::resultStoreBase(void) const
?setExpectedResultCount@QFutureInterfaceBase@@QAEXH@Z @ 4949 NONAME ; void QFutureInterfaceBase::setExpectedResultCount(int)
?progressMaximum@QFutureWatcherBase@@QBEHXZ @ 4950 NONAME ; int QFutureWatcherBase::progressMaximum(void) const
??0ResultStoreBase@QtConcurrent@@QAE@XZ @ 4951 NONAME ; QtConcurrent::ResultStoreBase::ResultStoreBase(void)
?setProgressRange@QFutureInterfaceBase@@QAEXHH@Z @ 4952 NONAME ; void QFutureInterfaceBase::setProgressRange(int, int)
?canIncrementVectorIndex@ResultIteratorBase@QtConcurrent@@QBE_NXZ @ 4953 NONAME ; bool QtConcurrent::ResultIteratorBase::canIncrementVectorIndex(void) const
?progressValue@QFutureInterfaceBase@@QBEHXZ @ 4954 NONAME ; int QFutureInterfaceBase::progressValue(void) const
?cancel@QFutureWatcherBase@@QAEXXZ @ 4955 NONAME ; void QFutureWatcherBase::cancel(void)
?trolltechConf@QCoreApplicationPrivate@@SAPAVQSettings@@XZ @ 4956 NONAME ; class QSettings * QCoreApplicationPrivate::trolltechConf(void)
?trUtf8@QFutureWatcherBase@@SA?AVQString@@PBD0@Z @ 4957 NONAME ; class QString QFutureWatcherBase::trUtf8(char const *, char const *)
?getStaticMetaObject@QFutureWatcherBase@@SAABUQMetaObject@@XZ @ 4958 NONAME ; struct QMetaObject const & QFutureWatcherBase::getStaticMetaObject(void)
?vectorIndex@ResultIteratorBase@QtConcurrent@@QBEHXZ @ 4959 NONAME ; int QtConcurrent::ResultIteratorBase::vectorIndex(void) const
?syncPendingResults@ResultStoreBase@QtConcurrent@@IAEXXZ @ 4960 NONAME ; void QtConcurrent::ResultStoreBase::syncPendingResults(void)
?progressText@QFutureWatcherBase@@QBE?AVQString@@XZ @ 4961 NONAME ; class QString QFutureWatcherBase::progressText(void) const
??1QFutureWatcherBase@@UAE@XZ @ 4962 NONAME ; QFutureWatcherBase::~QFutureWatcherBase(void)
?togglePaused@QFutureWatcherBase@@QAEXXZ @ 4963 NONAME ; void QFutureWatcherBase::togglePaused(void)
?acquireBarrierSemaphore@ThreadEngineBase@QtConcurrent@@QAEXXZ @ 4964 NONAME ; void QtConcurrent::ThreadEngineBase::acquireBarrierSemaphore(void)
?setFilterMode@ResultStoreBase@QtConcurrent@@QAEX_N@Z @ 4965 NONAME ; void QtConcurrent::ResultStoreBase::setFilterMode(bool)
?disconnectNotify@QFutureWatcherBase@@MAEXPBD@Z @ 4966 NONAME ; void QFutureWatcherBase::disconnectNotify(char const *)
?handleException@ThreadEngineBase@QtConcurrent@@AAEXABVException@2@@Z @ 4967 NONAME ; void QtConcurrent::ThreadEngineBase::handleException(class QtConcurrent::Exception const &)
?setThrottled@QFutureInterfaceBase@@QAEX_N@Z @ 4968 NONAME ; void QFutureInterfaceBase::setThrottled(bool)
?setProgressValue@ThreadEngineBase@QtConcurrent@@QAEXH@Z @ 4969 NONAME ; void QtConcurrent::ThreadEngineBase::setProgressValue(int)
??4QFutureInterfaceBase@@QAEAAV0@ABV0@@Z @ 4970 NONAME ; class QFutureInterfaceBase & QFutureInterfaceBase::operator=(class QFutureInterfaceBase const &)
?isFinished@QFutureInterfaceBase@@QBE_NXZ @ 4971 NONAME ; bool QFutureInterfaceBase::isFinished(void) const
?progressRangeChanged@QFutureWatcherBase@@IAEXHH@Z @ 4972 NONAME ; void QFutureWatcherBase::progressRangeChanged(int, int)
?finish@ThreadEngineBase@QtConcurrent@@MAEXXZ @ 4973 NONAME ; void QtConcurrent::ThreadEngineBase::finish(void)
?isRunning@QFutureWatcherBase@@QBE_NXZ @ 4974 NONAME ; bool QFutureWatcherBase::isRunning(void) const
?reportResultsReady@QFutureInterfaceBase@@QAEXHH@Z @ 4975 NONAME ; void QFutureInterfaceBase::reportResultsReady(int, int)
?qt_static_metacall@QFutureWatcherBase@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 4976 NONAME ; void QFutureWatcherBase::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *)
?blockSize@BlockSizeManager@QtConcurrent@@QAEHXZ @ 4977 NONAME ; int QtConcurrent::BlockSizeManager::blockSize(void)
??0BlockSizeManager@QtConcurrent@@QAE@H@Z @ 4978 NONAME ; QtConcurrent::BlockSizeManager::BlockSizeManager(int)
?batchSize@ResultIteratorBase@QtConcurrent@@QBEHXZ @ 4979 NONAME ; int QtConcurrent::ResultIteratorBase::batchSize(void) const
?started@QFutureWatcherBase@@IAEXXZ @ 4980 NONAME ; void QFutureWatcherBase::started(void)
?metaObject@QFutureWatcherBase@@UBEPBUQMetaObject@@XZ @ 4981 NONAME ; struct QMetaObject const * QFutureWatcherBase::metaObject(void) const
?resumed@QFutureWatcherBase@@IAEXXZ @ 4982 NONAME ; void QFutureWatcherBase::resumed(void)
??0UnhandledException@QtConcurrent@@QAE@ABV01@@Z @ 4983 NONAME ; QtConcurrent::UnhandledException::UnhandledException(class QtConcurrent::UnhandledException const &)
?timeBeforeUser@BlockSizeManager@QtConcurrent@@QAEXXZ @ 4984 NONAME ; void QtConcurrent::BlockSizeManager::timeBeforeUser(void)
??EResultIteratorBase@QtConcurrent@@QAE?AV01@XZ @ 4985 NONAME ; class QtConcurrent::ResultIteratorBase QtConcurrent::ResultIteratorBase::operator++(void)
?isResultReadyAt@QFutureInterfaceBase@@QBE_NH@Z @ 4986 NONAME ; bool QFutureInterfaceBase::isResultReadyAt(int) const
?throwPossibleException@ExceptionStore@internal@QtConcurrent@@QAEXXZ @ 4987 NONAME ; void QtConcurrent::internal::ExceptionStore::throwPossibleException(void)
?setPendingResultsLimit@QFutureWatcherBase@@QAEXH@Z @ 4988 NONAME ; void QFutureWatcherBase::setPendingResultsLimit(int)
?resultCount@QFutureInterfaceBase@@QBEHXZ @ 4989 NONAME ; int QFutureInterfaceBase::resultCount(void) const
?event@QFutureWatcherBase@@UAE_NPAVQEvent@@@Z @ 4990 NONAME ; bool QFutureWatcherBase::event(class QEvent *)
?isPaused@QFutureWatcherBase@@QBE_NXZ @ 4991 NONAME ; bool QFutureWatcherBase::isPaused(void) const
?clone@Exception@QtConcurrent@@UBEPAV12@XZ @ 4992 NONAME ; class QtConcurrent::Exception * QtConcurrent::Exception::clone(void) const
?insertResultItemIfValid@ResultStoreBase@QtConcurrent@@IAEXHAAVResultItem@2@@Z @ 4993 NONAME ; void QtConcurrent::ResultStoreBase::insertResultItemIfValid(int, class QtConcurrent::ResultItem &)
?reportException@QFutureInterfaceBase@@QAEXABVException@QtConcurrent@@@Z @ 4994 NONAME ; void QFutureInterfaceBase::reportException(class QtConcurrent::Exception const &)
?waitForFinished@QFutureInterfaceBase@@QAEXXZ @ 4995 NONAME ; void QFutureInterfaceBase::waitForFinished(void)
??0ResultIteratorBase@QtConcurrent@@QAE@Vconst_iterator@?$QMap@HVResultItem@QtConcurrent@@@@H@Z @ 4996 NONAME ; QtConcurrent::ResultIteratorBase::ResultIteratorBase(class QMap<int, class QtConcurrent::ResultItem>::const_iterator, int)
?reportStarted@QFutureInterfaceBase@@QAEXXZ @ 4997 NONAME ; void QFutureInterfaceBase::reportStarted(void)
??8QFutureInterfaceBase@@QBE_NABV0@@Z @ 4998 NONAME ; bool QFutureInterfaceBase::operator==(class QFutureInterfaceBase const &) const
?addResults@ResultStoreBase@QtConcurrent@@QAEHHPBXHH@Z @ 4999 NONAME ; int QtConcurrent::ResultStoreBase::addResults(int, void const *, int, int)
?shouldThrottleThread@ThreadEngineBase@QtConcurrent@@MAE_NXZ @ 5000 NONAME ; bool QtConcurrent::ThreadEngineBase::shouldThrottleThread(void)
?reportFinished@QFutureInterfaceBase@@QAEXXZ @ 5001 NONAME ; void QFutureInterfaceBase::reportFinished(void)
??0ThreadEngineBase@QtConcurrent@@QAE@XZ @ 5002 NONAME ; QtConcurrent::ThreadEngineBase::ThreadEngineBase(void)
??1Exception@QtConcurrent@@UAE@XZ @ 5003 NONAME ; QtConcurrent::Exception::~Exception(void)
?filterMode@ResultStoreBase@QtConcurrent@@QBE_NXZ @ 5004 NONAME ; bool QtConcurrent::ResultStoreBase::filterMode(void) const
?raise@Exception@QtConcurrent@@UBEXXZ @ 5005 NONAME ; void QtConcurrent::Exception::raise(void) const
?batchedAdvance@ResultIteratorBase@QtConcurrent@@QAEXXZ @ 5006 NONAME ; void QtConcurrent::ResultIteratorBase::batchedAdvance(void)
?exceptionStore@QFutureInterfaceBase@@QAEAAVExceptionStore@internal@QtConcurrent@@XZ @ 5007 NONAME ; class QtConcurrent::internal::ExceptionStore & QFutureInterfaceBase::exceptionStore(void)
?reportCanceled@QFutureInterfaceBase@@QAEXXZ @ 5008 NONAME ; void QFutureInterfaceBase::reportCanceled(void)
?connectNotify@QFutureWatcherBase@@MAEXPBD@Z @ 5009 NONAME ; void QFutureWatcherBase::connectNotify(char const *)
??1ResultStoreBase@QtConcurrent@@UAE@XZ @ 5010 NONAME ; QtConcurrent::ResultStoreBase::~ResultStoreBase(void)
?isCanceled@ThreadEngineBase@QtConcurrent@@QAE_NXZ @ 5011 NONAME ; bool QtConcurrent::ThreadEngineBase::isCanceled(void)
?canceled@QFutureWatcherBase@@IAEXXZ @ 5012 NONAME ; void QFutureWatcherBase::canceled(void)
?clone@UnhandledException@QtConcurrent@@UBEPAVException@2@XZ @ 5013 NONAME ; class QtConcurrent::Exception * QtConcurrent::UnhandledException::clone(void) const

View File

@ -12855,7 +12855,7 @@ EXPORTS
?populate@QTextureGlyphCache@@QAEXPAVQFontEngine@@HPBIPBUQFixedPoint@@@Z @ 12854 NONAME ABSENT ; void QTextureGlyphCache::populate(class QFontEngine *, int, unsigned int const *, struct QFixedPoint const *)
?hasPartialUpdateSupport@QWindowSurface@@UBE_NXZ @ 12855 NONAME ABSENT ; bool QWindowSurface::hasPartialUpdateSupport(void) const
?scroll@QRuntimePixmapData@@UAE_NHHABVQRect@@@Z @ 12856 NONAME ; bool QRuntimePixmapData::scroll(int, int, class QRect const &)
?qt_draw_glyphs@@YAXPAVQPainter@@PBIPBVQPointF@@H@Z @ 12857 NONAME ; void qt_draw_glyphs(class QPainter *, unsigned int const *, class QPointF const *, int)
?qt_draw_glyphs@@YAXPAVQPainter@@PBIPBVQPointF@@H@Z @ 12857 NONAME ABSENT ; void qt_draw_glyphs(class QPainter *, unsigned int const *, class QPointF const *, int)
?nativeDisplay@QEgl@@YAHXZ @ 12858 NONAME ; int QEgl::nativeDisplay(void)
?PreDocConstructL@QS60MainApplication@@UAEXXZ @ 12859 NONAME ; void QS60MainApplication::PreDocConstructL(void)
?detach@QStaticText@@AAEXXZ @ 12860 NONAME ; void QStaticText::detach(void)
@ -13213,7 +13213,7 @@ EXPORTS
??0QRasterWindowSurface@@QAE@PAVQWidget@@_N@Z @ 13212 NONAME ; QRasterWindowSurface::QRasterWindowSurface(class QWidget *, bool)
?brushChanged@QBlitterPaintEngine@@UAEXXZ @ 13213 NONAME ; void QBlitterPaintEngine::brushChanged(void)
?clip@QBlitterPaintEngine@@UAEXABVQRect@@W4ClipOperation@Qt@@@Z @ 13214 NONAME ; void QBlitterPaintEngine::clip(class QRect const &, enum Qt::ClipOperation)
?detach@QGlyphs@@AAEXXZ @ 13215 NONAME ; void QGlyphs::detach(void)
?detach@QGlyphs@@AAEXXZ @ 13215 NONAME ABSENT ; void QGlyphs::detach(void)
?trUtf8@QInternalMimeData@@SA?AVQString@@PBD0@Z @ 13216 NONAME ; class QString QInternalMimeData::trUtf8(char const *, char const *)
??0QShowEvent@@QAE@ABV0@@Z @ 13217 NONAME ABSENT ; QShowEvent::QShowEvent(class QShowEvent const &)
??0QMouseEvent@@QAE@ABV0@@Z @ 13218 NONAME ABSENT ; QMouseEvent::QMouseEvent(class QMouseEvent const &)
@ -13260,7 +13260,7 @@ EXPORTS
?trUtf8@QFlickGesture@@SA?AVQString@@PBD0@Z @ 13259 NONAME ; class QString QFlickGesture::trUtf8(char const *, char const *)
?stop@QScroller@@QAEXXZ @ 13260 NONAME ; void QScroller::stop(void)
?retrieveData@QInternalMimeData@@MBE?AVQVariant@@ABVQString@@W4Type@2@@Z @ 13261 NONAME ; class QVariant QInternalMimeData::retrieveData(class QString const &, enum QVariant::Type) const
??8QGlyphs@@QBE_NABV0@@Z @ 13262 NONAME ; bool QGlyphs::operator==(class QGlyphs const &) const
??8QGlyphs@@QBE_NABV0@@Z @ 13262 NONAME ABSENT ; bool QGlyphs::operator==(class QGlyphs const &) const
?drawImage@QBlitterPaintEngine@@UAEXABVQRectF@@ABVQImage@@0V?$QFlags@W4ImageConversionFlag@Qt@@@@@Z @ 13263 NONAME ; void QBlitterPaintEngine::drawImage(class QRectF const &, class QImage const &, class QRectF const &, class QFlags<enum Qt::ImageConversionFlag>)
?contentPos@QScrollEvent@@QBE?AVQPointF@@XZ @ 13264 NONAME ; class QPointF QScrollEvent::contentPos(void) const
?mimeTypes@QAbstractProxyModel@@UBE?AVQStringList@@XZ @ 13265 NONAME ; class QStringList QAbstractProxyModel::mimeTypes(void) const
@ -13286,7 +13286,7 @@ EXPORTS
?canFetchMore@QAbstractProxyModel@@UBE_NABVQModelIndex@@@Z @ 13285 NONAME ; bool QAbstractProxyModel::canFetchMore(class QModelIndex const &) const
??4QStyleOptionProgressBarV2@@QAEAAV0@ABV0@@Z @ 13286 NONAME ABSENT ; class QStyleOptionProgressBarV2 & QStyleOptionProgressBarV2::operator=(class QStyleOptionProgressBarV2 const &)
??1QScroller@@EAE@XZ @ 13287 NONAME ; QScroller::~QScroller(void)
?setFont@QGlyphs@@QAEXABVQFont@@@Z @ 13288 NONAME ; void QGlyphs::setFont(class QFont const &)
?setFont@QGlyphs@@QAEXABVQFont@@@Z @ 13288 NONAME ABSENT ; void QGlyphs::setFont(class QFont const &)
?startPos@QScrollPrepareEvent@@QBE?AVQPointF@@XZ @ 13289 NONAME ; class QPointF QScrollPrepareEvent::startPos(void) const
?resize@QBlittablePixmapData@@UAEXHH@Z @ 13290 NONAME ; void QBlittablePixmapData::resize(int, int)
?setTabsClosable@QMdiArea@@QAEX_N@Z @ 13291 NONAME ; void QMdiArea::setTabsClosable(bool)
@ -13304,14 +13304,14 @@ EXPORTS
?opacityChanged@QBlitterPaintEngine@@UAEXXZ @ 13303 NONAME ; void QBlitterPaintEngine::opacityChanged(void)
?tr@QFlickGesture@@SA?AVQString@@PBD0H@Z @ 13304 NONAME ; class QString QFlickGesture::tr(char const *, char const *, int)
??_EQTextCursor@@QAE@I@Z @ 13305 NONAME ABSENT ; QTextCursor::~QTextCursor(unsigned int)
?createExplicitFontWithName@QFontEngine@@IBE?AVQFont@@ABVQString@@@Z @ 13306 NONAME ; class QFont QFontEngine::createExplicitFontWithName(class QString const &) const
?createExplicitFontWithName@QFontEngine@@IBE?AVQFont@@ABVQString@@@Z @ 13306 NONAME ABSENT ; class QFont QFontEngine::createExplicitFontWithName(class QString const &) const
?setState@QBlitterPaintEngine@@UAEXPAVQPainterState@@@Z @ 13307 NONAME ; void QBlitterPaintEngine::setState(class QPainterState *)
?clip@QBlitterPaintEngine@@UAEXABVQRegion@@W4ClipOperation@Qt@@@Z @ 13308 NONAME ; void QBlitterPaintEngine::clip(class QRegion const &, enum Qt::ClipOperation)
?subPixelPositionForX@QTextureGlyphCache@@QBE?AUQFixed@@U2@@Z @ 13309 NONAME ; struct QFixed QTextureGlyphCache::subPixelPositionForX(struct QFixed) const
?hasAlphaChannel@QBlittablePixmapData@@UBE_NXZ @ 13310 NONAME ; bool QBlittablePixmapData::hasAlphaChannel(void) const
?setSnapPositionsX@QScroller@@QAEXABV?$QList@M@@@Z @ 13311 NONAME ; void QScroller::setSnapPositionsX(class QList<float> const &)
?numberSuffix@QTextListFormat@@QBE?AVQString@@XZ @ 13312 NONAME ; class QString QTextListFormat::numberSuffix(void) const
??HQGlyphs@@ABE?AV0@ABV0@@Z @ 13313 NONAME ; class QGlyphs QGlyphs::operator+(class QGlyphs const &) const
??HQGlyphs@@ABE?AV0@ABV0@@Z @ 13313 NONAME ABSENT ; class QGlyphs QGlyphs::operator+(class QGlyphs const &) const
??0QGradient@@QAE@ABV0@@Z @ 13314 NONAME ABSENT ; QGradient::QGradient(class QGradient const &)
?tabsMovable@QMdiArea@@QBE_NXZ @ 13315 NONAME ; bool QMdiArea::tabsMovable(void) const
??4QInputMethodEvent@@QAEAAV0@ABV0@@Z @ 13316 NONAME ABSENT ; class QInputMethodEvent & QInputMethodEvent::operator=(class QInputMethodEvent const &)
@ -13329,7 +13329,7 @@ EXPORTS
??_EQKeySequence@@QAE@I@Z @ 13328 NONAME ABSENT ; QKeySequence::~QKeySequence(unsigned int)
?tr@QInternalMimeData@@SA?AVQString@@PBD0H@Z @ 13329 NONAME ; class QString QInternalMimeData::tr(char const *, char const *, int)
?velocity@QScroller@@QBE?AVQPointF@@XZ @ 13330 NONAME ; class QPointF QScroller::velocity(void) const
?glyphIndexes@QGlyphs@@QBE?AV?$QVector@I@@XZ @ 13331 NONAME ; class QVector<unsigned int> QGlyphs::glyphIndexes(void) const
?glyphIndexes@QGlyphs@@QBE?AV?$QVector@I@@XZ @ 13331 NONAME ABSENT ; class QVector<unsigned int> QGlyphs::glyphIndexes(void) const
?get@QFontPrivate@@SAPAV1@ABVQFont@@@Z @ 13332 NONAME ; class QFontPrivate * QFontPrivate::get(class QFont const &)
?setScrollMetric@QScrollerProperties@@QAEXW4ScrollMetric@1@ABVQVariant@@@Z @ 13333 NONAME ; void QScrollerProperties::setScrollMetric(enum QScrollerProperties::ScrollMetric, class QVariant const &)
??4QGradient@@QAEAAV0@ABV0@@Z @ 13334 NONAME ABSENT ; class QGradient & QGradient::operator=(class QGradient const &)
@ -13339,7 +13339,7 @@ EXPORTS
??0QTextTableFormat@@QAE@ABV0@@Z @ 13338 NONAME ABSENT ; QTextTableFormat::QTextTableFormat(class QTextTableFormat const &)
??_EQImagePixmapCleanupHooks@@QAE@I@Z @ 13339 NONAME ABSENT ; QImagePixmapCleanupHooks::~QImagePixmapCleanupHooks(unsigned int)
?fetchMore@QAbstractProxyModel@@UAEXABVQModelIndex@@@Z @ 13340 NONAME ; void QAbstractProxyModel::fetchMore(class QModelIndex const &)
?glyphs@QTextLine@@ABE?AV?$QList@VQGlyphs@@@@HH@Z @ 13341 NONAME ; class QList<class QGlyphs> QTextLine::glyphs(int, int) const
?glyphs@QTextLine@@ABE?AV?$QList@VQGlyphs@@@@HH@Z @ 13341 NONAME ABSENT ; class QList<class QGlyphs> QTextLine::glyphs(int, int) const
?getStaticMetaObject@QFlickGesture@@SAABUQMetaObject@@XZ @ 13342 NONAME ; struct QMetaObject const & QFlickGesture::getStaticMetaObject(void)
?setViewportSize@QScrollPrepareEvent@@QAEXABVQSizeF@@@Z @ 13343 NONAME ; void QScrollPrepareEvent::setViewportSize(class QSizeF const &)
??0QStatusTipEvent@@QAE@ABV0@@Z @ 13344 NONAME ABSENT ; QStatusTipEvent::QStatusTipEvent(class QStatusTipEvent const &)
@ -13374,7 +13374,7 @@ EXPORTS
??4QStyleOptionQ3DockWindow@@QAEAAV0@ABV0@@Z @ 13373 NONAME ABSENT ; class QStyleOptionQ3DockWindow & QStyleOptionQ3DockWindow::operator=(class QStyleOptionQ3DockWindow const &)
?qt_metacast@QFlickGesture@@UAEPAXPBD@Z @ 13374 NONAME ; void * QFlickGesture::qt_metacast(char const *)
??_EQFont@@QAE@I@Z @ 13375 NONAME ABSENT ; QFont::~QFont(unsigned int)
?setPositions@QGlyphs@@QAEXABV?$QVector@VQPointF@@@@@Z @ 13376 NONAME ; void QGlyphs::setPositions(class QVector<class QPointF> const &)
?setPositions@QGlyphs@@QAEXABV?$QVector@VQPointF@@@@@Z @ 13376 NONAME ABSENT ; void QGlyphs::setPositions(class QVector<class QPointF> const &)
??4QStyleOptionDockWidget@@QAEAAV0@ABV0@@Z @ 13377 NONAME ABSENT ; class QStyleOptionDockWidget & QStyleOptionDockWidget::operator=(class QStyleOptionDockWidget const &)
??0QPainterState@@QAE@ABV0@@Z @ 13378 NONAME ABSENT ; QPainterState::QPainterState(class QPainterState const &)
??4QStyleOptionFrame@@QAEAAV0@ABV0@@Z @ 13379 NONAME ABSENT ; class QStyleOptionFrame & QStyleOptionFrame::operator=(class QStyleOptionFrame const &)
@ -13384,7 +13384,7 @@ EXPORTS
?renderHintsChanged@QBlitterPaintEngine@@UAEXXZ @ 13383 NONAME ; void QBlitterPaintEngine::renderHintsChanged(void)
?supportedDropActions@QAbstractProxyModel@@UBE?AV?$QFlags@W4DropAction@Qt@@@@XZ @ 13384 NONAME ; class QFlags<enum Qt::DropAction> QAbstractProxyModel::supportedDropActions(void) const
?fillRect@QBlitterPaintEngine@@UAEXABVQRectF@@ABVQBrush@@@Z @ 13385 NONAME ; void QBlitterPaintEngine::fillRect(class QRectF const &, class QBrush const &)
?setGlyphIndexes@QGlyphs@@QAEXABV?$QVector@I@@@Z @ 13386 NONAME ; void QGlyphs::setGlyphIndexes(class QVector<unsigned int> const &)
?setGlyphIndexes@QGlyphs@@QAEXABV?$QVector@I@@@Z @ 13386 NONAME ABSENT ; void QGlyphs::setGlyphIndexes(class QVector<unsigned int> const &)
?alphaMapBoundingBox@QFontEngine@@UAE?AUglyph_metrics_t@@IABVQTransform@@W4GlyphFormat@1@@Z @ 13387 NONAME ABSENT ; struct glyph_metrics_t QFontEngine::alphaMapBoundingBox(unsigned int, class QTransform const &, enum QFontEngine::GlyphFormat)
?resendPrepareEvent@QScroller@@QAEXXZ @ 13388 NONAME ; void QScroller::resendPrepareEvent(void)
??4QTextLength@@QAEAAV0@ABV0@@Z @ 13389 NONAME ABSENT ; class QTextLength & QTextLength::operator=(class QTextLength const &)
@ -13399,12 +13399,12 @@ EXPORTS
?scrollTo@QScroller@@QAEXABVQPointF@@H@Z @ 13398 NONAME ; void QScroller::scrollTo(class QPointF const &, int)
?ungrabGesture@QScroller@@SAXPAVQObject@@@Z @ 13399 NONAME ; void QScroller::ungrabGesture(class QObject *)
??4QItemSelectionRange@@QAEAAV0@ABV0@@Z @ 13400 NONAME ABSENT ; class QItemSelectionRange & QItemSelectionRange::operator=(class QItemSelectionRange const &)
?clear@QGlyphs@@QAEXXZ @ 13401 NONAME ; void QGlyphs::clear(void)
?clear@QGlyphs@@QAEXXZ @ 13401 NONAME ABSENT ; void QGlyphs::clear(void)
??_EQStyleOptionViewItemV4@@QAE@I@Z @ 13402 NONAME ABSENT ; QStyleOptionViewItemV4::~QStyleOptionViewItemV4(unsigned int)
??1QBlittablePixmapData@@UAE@XZ @ 13403 NONAME ; QBlittablePixmapData::~QBlittablePixmapData(void)
?formatsHelper@QInternalMimeData@@SA?AVQStringList@@PBVQMimeData@@@Z @ 13404 NONAME ; class QStringList QInternalMimeData::formatsHelper(class QMimeData const *)
?qt_metacast@QInternalMimeData@@UAEPAXPBD@Z @ 13405 NONAME ; void * QInternalMimeData::qt_metacast(char const *)
?font@QGlyphs@@QBE?AVQFont@@XZ @ 13406 NONAME ; class QFont QGlyphs::font(void) const
?font@QGlyphs@@QBE?AVQFont@@XZ @ 13406 NONAME ABSENT ; class QFont QGlyphs::font(void) const
?paintEngine@QBlittablePixmapData@@UBEPAVQPaintEngine@@XZ @ 13407 NONAME ; class QPaintEngine * QBlittablePixmapData::paintEngine(void) const
?unsetDefaultScrollerProperties@QScrollerProperties@@SAXXZ @ 13408 NONAME ; void QScrollerProperties::unsetDefaultScrollerProperties(void)
?hasChildren@QAbstractProxyModel@@UBE_NABVQModelIndex@@@Z @ 13409 NONAME ; bool QAbstractProxyModel::hasChildren(class QModelIndex const &) const
@ -13422,7 +13422,7 @@ EXPORTS
?qt_metacall@QInternalMimeData@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 13421 NONAME ; int QInternalMimeData::qt_metacall(enum QMetaObject::Call, int, void * *)
?lineHeightType@QTextBlockFormat@@QBEHXZ @ 13422 NONAME ; int QTextBlockFormat::lineHeightType(void) const
?hintingPreference@QFont@@QBE?AW4HintingPreference@1@XZ @ 13423 NONAME ; enum QFont::HintingPreference QFont::hintingPreference(void) const
??0QGlyphs@@QAE@XZ @ 13424 NONAME ; QGlyphs::QGlyphs(void)
??0QGlyphs@@QAE@XZ @ 13424 NONAME ABSENT ; QGlyphs::QGlyphs(void)
?trUtf8@QInternalMimeData@@SA?AVQString@@PBD0H@Z @ 13425 NONAME ; class QString QInternalMimeData::trUtf8(char const *, char const *, int)
??0QImageIOHandlerFactoryInterface@@QAE@XZ @ 13426 NONAME ABSENT ; QImageIOHandlerFactoryInterface::QImageIOHandlerFactoryInterface(void)
??_EQRegion@@QAE@I@Z @ 13427 NONAME ABSENT ; QRegion::~QRegion(unsigned int)
@ -13442,10 +13442,10 @@ EXPORTS
?clip@QBlitterPaintEngine@@UAEXABVQVectorPath@@W4ClipOperation@Qt@@@Z @ 13441 NONAME ; void QBlitterPaintEngine::clip(class QVectorPath const &, enum Qt::ClipOperation)
??1QScrollEvent@@UAE@XZ @ 13442 NONAME ; QScrollEvent::~QScrollEvent(void)
?state@QScroller@@QBE?AW4State@1@XZ @ 13443 NONAME ; enum QScroller::State QScroller::state(void) const
?positions@QGlyphs@@QBE?AV?$QVector@VQPointF@@@@XZ @ 13444 NONAME ; class QVector<class QPointF> QGlyphs::positions(void) const
?positions@QGlyphs@@QBE?AV?$QVector@VQPointF@@@@XZ @ 13444 NONAME ABSENT ; class QVector<class QPointF> QGlyphs::positions(void) const
?tr@QScroller@@SA?AVQString@@PBD0@Z @ 13445 NONAME ; class QString QScroller::tr(char const *, char const *)
?canReadData@QInternalMimeData@@SA_NABVQString@@@Z @ 13446 NONAME ; bool QInternalMimeData::canReadData(class QString const &)
?glyphs@QTextLayout@@QBE?AV?$QList@VQGlyphs@@@@XZ @ 13447 NONAME ; class QList<class QGlyphs> QTextLayout::glyphs(void) const
?glyphs@QTextLayout@@QBE?AV?$QList@VQGlyphs@@@@XZ @ 13447 NONAME ABSENT ; class QList<class QGlyphs> QTextLayout::glyphs(void) const
?leadingSpaceWidth@QTextEngine@@QAE?AUQFixed@@ABUQScriptLine@@@Z @ 13448 NONAME ; struct QFixed QTextEngine::leadingSpaceWidth(struct QScriptLine const &)
??_EQTextFormat@@QAE@I@Z @ 13449 NONAME ABSENT ; QTextFormat::~QTextFormat(unsigned int)
??4QStyleOptionTabWidgetFrame@@QAEAAV0@ABV0@@Z @ 13450 NONAME ABSENT ; class QStyleOptionTabWidgetFrame & QStyleOptionTabWidgetFrame::operator=(class QStyleOptionTabWidgetFrame const &)
@ -13463,7 +13463,7 @@ EXPORTS
??0QInternalMimeData@@QAE@XZ @ 13462 NONAME ; QInternalMimeData::QInternalMimeData(void)
??_EQScrollEvent@@UAE@I@Z @ 13463 NONAME ; QScrollEvent::~QScrollEvent(unsigned int)
?features@QRasterWindowSurface@@UBE?AV?$QFlags@W4WindowSurfaceFeature@QWindowSurface@@@@XZ @ 13464 NONAME ; class QFlags<enum QWindowSurface::WindowSurfaceFeature> QRasterWindowSurface::features(void) const
??4QGlyphs@@QAEAAV0@ABV0@@Z @ 13465 NONAME ; class QGlyphs & QGlyphs::operator=(class QGlyphs const &)
??4QGlyphs@@QAEAAV0@ABV0@@Z @ 13465 NONAME ABSENT ; class QGlyphs & QGlyphs::operator=(class QGlyphs const &)
??4QQuaternion@@QAEAAV0@ABV0@@Z @ 13466 NONAME ABSENT ; class QQuaternion & QQuaternion::operator=(class QQuaternion const &)
??4Symbol@QCss@@QAEAAU01@ABU01@@Z @ 13467 NONAME ABSENT ; struct QCss::Symbol & QCss::Symbol::operator=(struct QCss::Symbol const &)
??0QBlittable@@QAE@ABVQSize@@V?$QFlags@W4Capability@QBlittable@@@@@Z @ 13468 NONAME ; QBlittable::QBlittable(class QSize const &, class QFlags<enum QBlittable::Capability>)
@ -13480,10 +13480,10 @@ EXPORTS
?calculateSubPixelPositionCount@QTextureGlyphCache@@IBEHI@Z @ 13479 NONAME ; int QTextureGlyphCache::calculateSubPixelPositionCount(unsigned int) const
??0QTextImageFormat@@QAE@ABV0@@Z @ 13480 NONAME ABSENT ; QTextImageFormat::QTextImageFormat(class QTextImageFormat const &)
??0QMoveEvent@@QAE@ABV0@@Z @ 13481 NONAME ABSENT ; QMoveEvent::QMoveEvent(class QMoveEvent const &)
?glyphs@QTextFragment@@QBE?AV?$QList@VQGlyphs@@@@XZ @ 13482 NONAME ; class QList<class QGlyphs> QTextFragment::glyphs(void) const
?glyphs@QTextFragment@@QBE?AV?$QList@VQGlyphs@@@@XZ @ 13482 NONAME ABSENT ; class QList<class QGlyphs> QTextFragment::glyphs(void) const
??0QInputContextFactoryInterface@@QAE@XZ @ 13483 NONAME ABSENT ; QInputContextFactoryInterface::QInputContextFactoryInterface(void)
??0QTextFrameFormat@@QAE@ABV0@@Z @ 13484 NONAME ABSENT ; QTextFrameFormat::QTextFrameFormat(class QTextFrameFormat const &)
?resetInternalData@QAbstractProxyModel@@IAEXXZ @ 13485 NONAME ; void QAbstractProxyModel::resetInternalData(void)
?resetInternalData@QAbstractProxyModel@@IAEXXZ @ 13485 NONAME ABSENT ; void QAbstractProxyModel::resetInternalData(void)
??0Symbol@QCss@@QAE@ABU01@@Z @ 13486 NONAME ABSENT ; QCss::Symbol::Symbol(struct QCss::Symbol const &)
?features@QWindowSurface@@UBE?AV?$QFlags@W4WindowSurfaceFeature@QWindowSurface@@@@XZ @ 13487 NONAME ; class QFlags<enum QWindowSurface::WindowSurfaceFeature> QWindowSurface::features(void) const
?markRasterOverlay@QBlittablePixmapData@@QAEXABVQVectorPath@@@Z @ 13488 NONAME ; void QBlittablePixmapData::markRasterOverlay(class QVectorPath const &)
@ -13499,7 +13499,7 @@ EXPORTS
?swap@QPainterPath@@QAEXAAV1@@Z @ 13498 NONAME ; void QPainterPath::swap(class QPainterPath &)
??4QStyleOptionRubberBand@@QAEAAV0@ABV0@@Z @ 13499 NONAME ABSENT ; class QStyleOptionRubberBand & QStyleOptionRubberBand::operator=(class QStyleOptionRubberBand const &)
?minimumSizeHint@QCheckBox@@UBE?AVQSize@@XZ @ 13500 NONAME ; class QSize QCheckBox::minimumSizeHint(void) const
?createExplicitFont@QFontEngine@@UBE?AVQFont@@XZ @ 13501 NONAME ; class QFont QFontEngine::createExplicitFont(void) const
?createExplicitFont@QFontEngine@@UBE?AVQFont@@XZ @ 13501 NONAME ABSENT ; class QFont QFontEngine::createExplicitFont(void) const
?alphaMapForGlyph@QFontEngine@@UAE?AVQImage@@IUQFixed@@@Z @ 13502 NONAME ; class QImage QFontEngine::alphaMapForGlyph(unsigned int, struct QFixed)
?fillTexture@QImageTextureGlyphCache@@UAEXABUCoord@QTextureGlyphCache@@IUQFixed@@@Z @ 13503 NONAME ; void QImageTextureGlyphCache::fillTexture(struct QTextureGlyphCache::Coord const &, unsigned int, struct QFixed)
?swap@QIcon@@QAEXAAV1@@Z @ 13504 NONAME ; void QIcon::swap(class QIcon &)
@ -13532,11 +13532,11 @@ EXPORTS
?pixelPerMeter@QScroller@@QBE?AVQPointF@@XZ @ 13531 NONAME ; class QPointF QScroller::pixelPerMeter(void) const
?target@QScroller@@QBEPAVQObject@@XZ @ 13532 NONAME ; class QObject * QScroller::target(void) const
?swap@QKeySequence@@QAEXAAV1@@Z @ 13533 NONAME ; void QKeySequence::swap(class QKeySequence &)
??1QGlyphs@@QAE@XZ @ 13534 NONAME ; QGlyphs::~QGlyphs(void)
??1QGlyphs@@QAE@XZ @ 13534 NONAME ABSENT ; QGlyphs::~QGlyphs(void)
?lineHeight@QTextBlockFormat@@QBEMXZ @ 13535 NONAME ; float QTextBlockFormat::lineHeight(void) const
?stroke@QBlitterPaintEngine@@UAEXABVQVectorPath@@ABVQPen@@@Z @ 13536 NONAME ; void QBlitterPaintEngine::stroke(class QVectorPath const &, class QPen const &)
?tr@QInternalMimeData@@SA?AVQString@@PBD0@Z @ 13537 NONAME ; class QString QInternalMimeData::tr(char const *, char const *)
??9QGlyphs@@QBE_NABV0@@Z @ 13538 NONAME ; bool QGlyphs::operator!=(class QGlyphs const &) const
??9QGlyphs@@QBE_NABV0@@Z @ 13538 NONAME ABSENT ; bool QGlyphs::operator!=(class QGlyphs const &) const
??1QBlittable@@UAE@XZ @ 13539 NONAME ; QBlittable::~QBlittable(void)
??_EQBlitterPaintEngine@@UAE@I@Z @ 13540 NONAME ; QBlitterPaintEngine::~QBlitterPaintEngine(unsigned int)
??0QCloseEvent@@QAE@ABV0@@Z @ 13541 NONAME ABSENT ; QCloseEvent::QCloseEvent(class QCloseEvent const &)
@ -13547,7 +13547,7 @@ EXPORTS
?finalPosition@QScroller@@QBE?AVQPointF@@XZ @ 13546 NONAME ; class QPointF QScroller::finalPosition(void) const
??4QStyleOptionTabWidgetFrameV2@@QAEAAV0@ABV0@@Z @ 13547 NONAME ABSENT ; class QStyleOptionTabWidgetFrameV2 & QStyleOptionTabWidgetFrameV2::operator=(class QStyleOptionTabWidgetFrameV2 const &)
?drawStaticTextItem@QBlitterPaintEngine@@UAEXPAVQStaticTextItem@@@Z @ 13548 NONAME ; void QBlitterPaintEngine::drawStaticTextItem(class QStaticTextItem *)
??0QGlyphs@@QAE@ABV0@@Z @ 13549 NONAME ; QGlyphs::QGlyphs(class QGlyphs const &)
??0QGlyphs@@QAE@ABV0@@Z @ 13549 NONAME ABSENT ; QGlyphs::QGlyphs(class QGlyphs const &)
?lock@QBlittable@@QAEPAVQImage@@XZ @ 13550 NONAME ; class QImage * QBlittable::lock(void)
?setFontHintingPreference@QTextCharFormat@@QAEXW4HintingPreference@QFont@@@Z @ 13551 NONAME ; void QTextCharFormat::setFontHintingPreference(enum QFont::HintingPreference)
??4QStyleOptionTabV2@@QAEAAV0@ABV0@@Z @ 13552 NONAME ABSENT ; class QStyleOptionTabV2 & QStyleOptionTabV2::operator=(class QStyleOptionTabV2 const &)
@ -13559,7 +13559,7 @@ EXPORTS
?markRasterOverlay@QBlittablePixmapData@@QAEXABVQPointF@@ABVQTextItem@@@Z @ 13558 NONAME ; void QBlittablePixmapData::markRasterOverlay(class QPointF const &, class QTextItem const &)
?trUtf8@QScroller@@SA?AVQString@@PBD0@Z @ 13559 NONAME ; class QString QScroller::trUtf8(char const *, char const *)
??_EQIcon@@QAE@I@Z @ 13560 NONAME ABSENT ; QIcon::~QIcon(unsigned int)
??YQGlyphs@@AAEAAV0@ABV0@@Z @ 13561 NONAME ; class QGlyphs & QGlyphs::operator+=(class QGlyphs const &)
??YQGlyphs@@AAEAAV0@ABV0@@Z @ 13561 NONAME ABSENT ; class QGlyphs & QGlyphs::operator+=(class QGlyphs const &)
??9QScrollerProperties@@QBE_NABV0@@Z @ 13562 NONAME ; bool QScrollerProperties::operator!=(class QScrollerProperties const &) const
??0QTextListFormat@@QAE@ABV0@@Z @ 13563 NONAME ABSENT ; QTextListFormat::QTextListFormat(class QTextListFormat const &)
?drawEllipse@QBlitterPaintEngine@@UAEXABVQRectF@@@Z @ 13564 NONAME ; void QBlitterPaintEngine::drawEllipse(class QRectF const &)
@ -13590,7 +13590,7 @@ EXPORTS
?qt_addBitmapToPath@@YAXMMPBEHHHPAVQPainterPath@@@Z @ 13589 NONAME ; void qt_addBitmapToPath(float, float, unsigned char const *, int, int, int, class QPainterPath *)
?staticMetaObject@QInternalMimeData@@2UQMetaObject@@B @ 13590 NONAME ; struct QMetaObject const QInternalMimeData::staticMetaObject
?activeScrollers@QScroller@@SA?AV?$QList@PAVQScroller@@@@XZ @ 13591 NONAME ; class QList<class QScroller *> QScroller::activeScrollers(void)
?drawGlyphs@QPainter@@QAEXABVQPointF@@ABVQGlyphs@@@Z @ 13592 NONAME ; void QPainter::drawGlyphs(class QPointF const &, class QGlyphs const &)
?drawGlyphs@QPainter@@QAEXABVQPointF@@ABVQGlyphs@@@Z @ 13592 NONAME ABSENT ; void QPainter::drawGlyphs(class QPointF const &, class QGlyphs const &)
??4QTextFrameFormat@@QAEAAV0@ABV0@@Z @ 13593 NONAME ABSENT ; class QTextFrameFormat & QTextFrameFormat::operator=(class QTextFrameFormat const &)
?staticMetaObjectExtraData@QStylePlugin@@0UQMetaObjectExtraData@@B @ 13594 NONAME ; struct QMetaObjectExtraData const QStylePlugin::staticMetaObjectExtraData
?staticMetaObjectExtraData@QToolBar@@0UQMetaObjectExtraData@@B @ 13595 NONAME ; struct QMetaObjectExtraData const QToolBar::staticMetaObjectExtraData
@ -13953,4 +13953,71 @@ EXPORTS
?staticMetaObjectExtraData@QWorkspace@@0UQMetaObjectExtraData@@B @ 13952 NONAME ; struct QMetaObjectExtraData const QWorkspace::staticMetaObjectExtraData
?staticMetaObjectExtraData@QSessionManager@@0UQMetaObjectExtraData@@B @ 13953 NONAME ; struct QMetaObjectExtraData const QSessionManager::staticMetaObjectExtraData
?qt_static_metacall@QGraphicsItemAnimation@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13954 NONAME ; void QGraphicsItemAnimation::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *)
?cursorMoveStyle@QLineEdit@@QBE?AW4MoveStyle@QTextCursor@@XZ @ 13955 NONAME ; enum QTextCursor::MoveStyle QLineEdit::cursorMoveStyle(void) const
?focalRadius@QRadialGradient@@QBEMXZ @ 13956 NONAME ; float QRadialGradient::focalRadius(void) const
?alignLine@QTextEngine@@QAE?AUQFixed@@ABUQScriptLine@@@Z @ 13957 NONAME ; struct QFixed QTextEngine::alignLine(struct QScriptLine const &)
?match@QIdentityProxyModel@@UBE?AV?$QList@VQModelIndex@@@@ABVQModelIndex@@HABVQVariant@@HV?$QFlags@W4MatchFlag@Qt@@@@@Z @ 13958 NONAME ; class QList<class QModelIndex> QIdentityProxyModel::match(class QModelIndex const &, int, class QVariant const &, int, class QFlags<enum Qt::MatchFlag>) const
?positionAfterVisualMovement@QTextEngine@@QAEHHW4MoveOperation@QTextCursor@@@Z @ 13959 NONAME ; int QTextEngine::positionAfterVisualMovement(int, enum QTextCursor::MoveOperation)
?qt_painterPathFromVectorPath@@YA?AVQPainterPath@@ABVQVectorPath@@@Z @ 13960 NONAME ; class QPainterPath qt_painterPathFromVectorPath(class QVectorPath const &)
?metaObject@QIdentityProxyModel@@UBEPBUQMetaObject@@XZ @ 13961 NONAME ; struct QMetaObject const * QIdentityProxyModel::metaObject(void) const
?qt_static_metacall@QIdentityProxyModel@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13962 NONAME ; void QIdentityProxyModel::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *)
?setCursorMoveStyle@QLineControl@@QAEXW4MoveStyle@QTextCursor@@@Z @ 13963 NONAME ; void QLineControl::setCursorMoveStyle(enum QTextCursor::MoveStyle)
?visualCursorMovement@QTextEngine@@QBE_NXZ @ 13964 NONAME ; bool QTextEngine::visualCursorMovement(void) const
?setFocalRadius@QRadialGradient@@QAEXM@Z @ 13965 NONAME ; void QRadialGradient::setFocalRadius(float)
??_EQIdentityProxyModel@@UAE@I@Z @ 13966 NONAME ; QIdentityProxyModel::~QIdentityProxyModel(unsigned int)
??1QIdentityProxyModel@@UAE@XZ @ 13967 NONAME ; QIdentityProxyModel::~QIdentityProxyModel(void)
?d_func@QIdentityProxyModel@@AAEPAVQIdentityProxyModelPrivate@@XZ @ 13968 NONAME ; class QIdentityProxyModelPrivate * QIdentityProxyModel::d_func(void)
?rowCount@QIdentityProxyModel@@UBEHABVQModelIndex@@@Z @ 13969 NONAME ; int QIdentityProxyModel::rowCount(class QModelIndex const &) const
?previousLogicalPosition@QTextEngine@@QBEHH@Z @ 13970 NONAME ; int QTextEngine::previousLogicalPosition(int) const
?endOfLine@QTextEngine@@AAEHH@Z @ 13971 NONAME ; int QTextEngine::endOfLine(int)
?lineNumberForTextPosition@QTextEngine@@QAEHH@Z @ 13972 NONAME ; int QTextEngine::lineNumberForTextPosition(int)
?mapToSource@QIdentityProxyModel@@UBE?AVQModelIndex@@ABV2@@Z @ 13973 NONAME ; class QModelIndex QIdentityProxyModel::mapToSource(class QModelIndex const &) const
?setCursorMoveStyle@QTextLayout@@QAEXW4MoveStyle@QTextCursor@@@Z @ 13974 NONAME ; void QTextLayout::setCursorMoveStyle(enum QTextCursor::MoveStyle)
?dropMimeData@QIdentityProxyModel@@UAE_NPBVQMimeData@@W4DropAction@Qt@@HHABVQModelIndex@@@Z @ 13975 NONAME ; bool QIdentityProxyModel::dropMimeData(class QMimeData const *, enum Qt::DropAction, int, int, class QModelIndex const &)
?mapSelectionFromSource@QIdentityProxyModel@@UBE?AVQItemSelection@@ABV2@@Z @ 13976 NONAME ; class QItemSelection QIdentityProxyModel::mapSelectionFromSource(class QItemSelection const &) const
?setInstantInvalidatePropagation@QGraphicsLayout@@SAX_N@Z @ 13977 NONAME ; void QGraphicsLayout::setInstantInvalidatePropagation(bool)
?mapFromSource@QIdentityProxyModel@@UBE?AVQModelIndex@@ABV2@@Z @ 13978 NONAME ; class QModelIndex QIdentityProxyModel::mapFromSource(class QModelIndex const &) const
?centerRadius@QRadialGradient@@QBEMXZ @ 13979 NONAME ; float QRadialGradient::centerRadius(void) const
?mapSelectionToSource@QIdentityProxyModel@@UBE?AVQItemSelection@@ABV2@@Z @ 13980 NONAME ; class QItemSelection QIdentityProxyModel::mapSelectionToSource(class QItemSelection const &) const
?tr@QIdentityProxyModel@@SA?AVQString@@PBD0H@Z @ 13981 NONAME ; class QString QIdentityProxyModel::tr(char const *, char const *, int)
?cursorMoveStyle@QTextLayout@@QBE?AW4MoveStyle@QTextCursor@@XZ @ 13982 NONAME ; enum QTextCursor::MoveStyle QTextLayout::cursorMoveStyle(void) const
?index@QIdentityProxyModel@@UBE?AVQModelIndex@@HHABV2@@Z @ 13983 NONAME ; class QModelIndex QIdentityProxyModel::index(int, int, class QModelIndex const &) const
?qt_draw_decoration_for_glyphs@@YAXPAVQPainter@@PBIPBUQFixedPoint@@HPAVQFontEngine@@ABVQFont@@ABVQTextCharFormat@@@Z @ 13984 NONAME ; void qt_draw_decoration_for_glyphs(class QPainter *, unsigned int const *, struct QFixedPoint const *, int, class QFontEngine *, class QFont const &, class QTextCharFormat const &)
?defaultCursorMoveStyle@QTextDocument@@QBE?AW4MoveStyle@QTextCursor@@XZ @ 13985 NONAME ; enum QTextCursor::MoveStyle QTextDocument::defaultCursorMoveStyle(void) const
?insertRows@QIdentityProxyModel@@UAE_NHHABVQModelIndex@@@Z @ 13986 NONAME ; bool QIdentityProxyModel::insertRows(int, int, class QModelIndex const &)
?qt_isExtendedRadialGradient@@YA_NABVQBrush@@@Z @ 13987 NONAME ; bool qt_isExtendedRadialGradient(class QBrush const &)
?trUtf8@QIdentityProxyModel@@SA?AVQString@@PBD0H@Z @ 13988 NONAME ; class QString QIdentityProxyModel::trUtf8(char const *, char const *, int)
?instantInvalidatePropagation@QGraphicsLayout@@SA_NXZ @ 13989 NONAME ; bool QGraphicsLayout::instantInvalidatePropagation(void)
?trUtf8@QIdentityProxyModel@@SA?AVQString@@PBD0@Z @ 13990 NONAME ; class QString QIdentityProxyModel::trUtf8(char const *, char const *)
??0QIdentityProxyModel@@QAE@PAVQObject@@@Z @ 13991 NONAME ; QIdentityProxyModel::QIdentityProxyModel(class QObject *)
?removeColumns@QIdentityProxyModel@@UAE_NHHABVQModelIndex@@@Z @ 13992 NONAME ; bool QIdentityProxyModel::removeColumns(int, int, class QModelIndex const &)
??0QIdentityProxyModel@@IAE@AAVQIdentityProxyModelPrivate@@PAVQObject@@@Z @ 13993 NONAME ; QIdentityProxyModel::QIdentityProxyModel(class QIdentityProxyModelPrivate &, class QObject *)
?tr@QIdentityProxyModel@@SA?AVQString@@PBD0@Z @ 13994 NONAME ; class QString QIdentityProxyModel::tr(char const *, char const *)
?columnCount@QIdentityProxyModel@@UBEHABVQModelIndex@@@Z @ 13995 NONAME ; int QIdentityProxyModel::columnCount(class QModelIndex const &) const
??0QRadialGradient@@QAE@MMMMMM@Z @ 13996 NONAME ; QRadialGradient::QRadialGradient(float, float, float, float, float, float)
?offsetInLigature@QTextEngine@@QAE?AUQFixed@@PBUQScriptItem@@HHH@Z @ 13997 NONAME ; struct QFixed QTextEngine::offsetInLigature(struct QScriptItem const *, int, int, int)
?cursorMoveStyle@QLineControl@@QBE?AW4MoveStyle@QTextCursor@@XZ @ 13998 NONAME ; enum QTextCursor::MoveStyle QLineControl::cursorMoveStyle(void) const
?beginningOfLine@QTextEngine@@AAEHH@Z @ 13999 NONAME ; int QTextEngine::beginningOfLine(int)
?setCenterRadius@QRadialGradient@@QAEXM@Z @ 14000 NONAME ; void QRadialGradient::setCenterRadius(float)
?setCursorMoveStyle@QLineEdit@@QAEXW4MoveStyle@QTextCursor@@@Z @ 14001 NONAME ; void QLineEdit::setCursorMoveStyle(enum QTextCursor::MoveStyle)
??0QRadialGradient@@QAE@ABVQPointF@@M0M@Z @ 14002 NONAME ; QRadialGradient::QRadialGradient(class QPointF const &, float, class QPointF const &, float)
?actionText@QUndoCommand@@QBE?AVQString@@XZ @ 14003 NONAME ; class QString QUndoCommand::actionText(void) const
?insertionPointsForLine@QTextEngine@@QAEXHAAV?$QVector@H@@@Z @ 14004 NONAME ; void QTextEngine::insertionPointsForLine(int, class QVector<int> &)
?rightCursorPosition@QTextLayout@@QBEHH@Z @ 14005 NONAME ; int QTextLayout::rightCursorPosition(int) const
?insertColumns@QIdentityProxyModel@@UAE_NHHABVQModelIndex@@@Z @ 14006 NONAME ; bool QIdentityProxyModel::insertColumns(int, int, class QModelIndex const &)
?setDefaultCursorMoveStyle@QTextDocument@@QAEXW4MoveStyle@QTextCursor@@@Z @ 14007 NONAME ; void QTextDocument::setDefaultCursorMoveStyle(enum QTextCursor::MoveStyle)
?doItemsLayout@QTableView@@UAEXXZ @ 14008 NONAME ; void QTableView::doItemsLayout(void)
?qt_metacast@QIdentityProxyModel@@UAEPAXPBD@Z @ 14009 NONAME ; void * QIdentityProxyModel::qt_metacast(char const *)
?setSourceModel@QIdentityProxyModel@@UAEXPAVQAbstractItemModel@@@Z @ 14010 NONAME ; void QIdentityProxyModel::setSourceModel(class QAbstractItemModel *)
?d_func@QIdentityProxyModel@@ABEPBVQIdentityProxyModelPrivate@@XZ @ 14011 NONAME ; class QIdentityProxyModelPrivate const * QIdentityProxyModel::d_func(void) const
?cloneWithSize@QFontEngine@@UBEPAV1@M@Z @ 14012 NONAME ; class QFontEngine * QFontEngine::cloneWithSize(float) const
?leftCursorPosition@QTextLayout@@QBEHH@Z @ 14013 NONAME ; int QTextLayout::leftCursorPosition(int) const
?paintingActive@QVolatileImage@@QBE_NXZ @ 14014 NONAME ; bool QVolatileImage::paintingActive(void) const
?parent@QIdentityProxyModel@@UBE?AVQModelIndex@@ABV2@@Z @ 14015 NONAME ; class QModelIndex QIdentityProxyModel::parent(class QModelIndex const &) const
?nextLogicalPosition@QTextEngine@@QBEHH@Z @ 14016 NONAME ; int QTextEngine::nextLogicalPosition(int) const
?qt_metacall@QIdentityProxyModel@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 14017 NONAME ; int QIdentityProxyModel::qt_metacall(enum QMetaObject::Call, int, void * *)
?staticMetaObject@QIdentityProxyModel@@2UQMetaObject@@B @ 14018 NONAME ; struct QMetaObject const QIdentityProxyModel::staticMetaObject
?staticMetaObjectExtraData@QIdentityProxyModel@@0UQMetaObjectExtraData@@B @ 14019 NONAME ; struct QMetaObjectExtraData const QIdentityProxyModel::staticMetaObjectExtraData
?getStaticMetaObject@QIdentityProxyModel@@SAABUQMetaObject@@XZ @ 14020 NONAME ; struct QMetaObject const & QIdentityProxyModel::getStaticMetaObject(void)
?removeRows@QIdentityProxyModel@@UAE_NHHABVQModelIndex@@@Z @ 14021 NONAME ; bool QIdentityProxyModel::removeRows(int, int, class QModelIndex const &)

View File

@ -1237,4 +1237,9 @@ EXPORTS
?qt_static_metacall@QBearerEnginePlugin@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 1236 NONAME ; void QBearerEnginePlugin::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *)
?staticMetaObjectExtraData@QNetworkConfigurationManager@@0UQMetaObjectExtraData@@B @ 1237 NONAME ; struct QMetaObjectExtraData const QNetworkConfigurationManager::staticMetaObjectExtraData
?qt_static_metacall@QTcpSocket@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 1238 NONAME ; void QTcpSocket::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *)
??0QNetworkProxyQuery@@QAE@ABVQNetworkConfiguration@@GABVQString@@W4QueryType@0@@Z @ 1239 NONAME ; QNetworkProxyQuery::QNetworkProxyQuery(class QNetworkConfiguration const &, unsigned short, class QString const &, enum QNetworkProxyQuery::QueryType)
??0QNetworkProxyQuery@@QAE@ABVQNetworkConfiguration@@ABVQString@@H1W4QueryType@0@@Z @ 1240 NONAME ; QNetworkProxyQuery::QNetworkProxyQuery(class QNetworkConfiguration const &, class QString const &, int, class QString const &, enum QNetworkProxyQuery::QueryType)
?networkConfiguration@QNetworkProxyQuery@@QBE?AVQNetworkConfiguration@@XZ @ 1241 NONAME ; class QNetworkConfiguration QNetworkProxyQuery::networkConfiguration(void) const
?setNetworkConfiguration@QNetworkProxyQuery@@QAEXABVQNetworkConfiguration@@@Z @ 1242 NONAME ; void QNetworkProxyQuery::setNetworkConfiguration(class QNetworkConfiguration const &)
??0QNetworkProxyQuery@@QAE@ABVQNetworkConfiguration@@ABVQUrl@@W4QueryType@0@@Z @ 1243 NONAME ; QNetworkProxyQuery::QNetworkProxyQuery(class QNetworkConfiguration const &, class QUrl const &, enum QNetworkProxyQuery::QueryType)

View File

@ -3992,4 +3992,166 @@ EXPORTS
_ZNK7QLocale9bcp47NameEv @ 3991 NONAME
_ZTI13QActiveObject @ 3992 NONAME
_ZTV13QActiveObject @ 3993 NONAME
_ZN23QCoreApplicationPrivate13trolltechConfEv @ 3994 NONAME
_ZN12QtConcurrent15ResultStoreBase10addResultsEiPKvii @ 3995 NONAME
_ZN12QtConcurrent15ResultStoreBase13setFilterModeEb @ 3996 NONAME
_ZN12QtConcurrent15ResultStoreBase15syncResultCountEv @ 3997 NONAME
_ZN12QtConcurrent15ResultStoreBase16insertResultItemEiRNS_10ResultItemE @ 3998 NONAME
_ZN12QtConcurrent15ResultStoreBase17updateInsertIndexEii @ 3999 NONAME
_ZN12QtConcurrent15ResultStoreBase18syncPendingResultsEv @ 4000 NONAME
_ZN12QtConcurrent15ResultStoreBase23insertResultItemIfValidEiRNS_10ResultItemE @ 4001 NONAME
_ZN12QtConcurrent15ResultStoreBase9addResultEiPKv @ 4002 NONAME
_ZN12QtConcurrent15ResultStoreBaseC1Ev @ 4003 NONAME
_ZN12QtConcurrent15ResultStoreBaseC2Ev @ 4004 NONAME
_ZN12QtConcurrent16BlockSizeManager13timeAfterUserEv @ 4005 NONAME
_ZN12QtConcurrent16BlockSizeManager14timeBeforeUserEv @ 4006 NONAME
_ZN12QtConcurrent16BlockSizeManager9blockSizeEv @ 4007 NONAME
_ZN12QtConcurrent16BlockSizeManagerC1Ei @ 4008 NONAME
_ZN12QtConcurrent16BlockSizeManagerC2Ei @ 4009 NONAME
_ZN12QtConcurrent16ThreadEngineBase10isCanceledEv @ 4010 NONAME
_ZN12QtConcurrent16ThreadEngineBase10threadExitEv @ 4011 NONAME
_ZN12QtConcurrent16ThreadEngineBase11startThreadEv @ 4012 NONAME
_ZN12QtConcurrent16ThreadEngineBase12startThreadsEv @ 4013 NONAME
_ZN12QtConcurrent16ThreadEngineBase13startBlockingEv @ 4014 NONAME
_ZN12QtConcurrent16ThreadEngineBase13waitForResumeEv @ 4015 NONAME
_ZN12QtConcurrent16ThreadEngineBase15handleExceptionERKNS_9ExceptionE @ 4016 NONAME
_ZN12QtConcurrent16ThreadEngineBase16setProgressRangeEii @ 4017 NONAME
_ZN12QtConcurrent16ThreadEngineBase16setProgressValueEi @ 4018 NONAME
_ZN12QtConcurrent16ThreadEngineBase18threadThrottleExitEv @ 4019 NONAME
_ZN12QtConcurrent16ThreadEngineBase19startSingleThreadedEv @ 4020 NONAME
_ZN12QtConcurrent16ThreadEngineBase19startThreadInternalEv @ 4021 NONAME
_ZN12QtConcurrent16ThreadEngineBase23acquireBarrierSemaphoreEv @ 4022 NONAME
_ZN12QtConcurrent16ThreadEngineBase26isProgressReportingEnabledEv @ 4023 NONAME
_ZN12QtConcurrent16ThreadEngineBase3runEv @ 4024 NONAME
_ZN12QtConcurrent16ThreadEngineBaseC2Ev @ 4025 NONAME
_ZN12QtConcurrent16ThreadEngineBaseD0Ev @ 4026 NONAME
_ZN12QtConcurrent16ThreadEngineBaseD1Ev @ 4027 NONAME
_ZN12QtConcurrent16ThreadEngineBaseD2Ev @ 4028 NONAME
_ZN12QtConcurrent18ResultIteratorBase14batchedAdvanceEv @ 4029 NONAME
_ZN12QtConcurrent18ResultIteratorBaseC1EN4QMapIiNS_10ResultItemEE14const_iteratorEi @ 4030 NONAME
_ZN12QtConcurrent18ResultIteratorBaseC1Ev @ 4031 NONAME
_ZN12QtConcurrent18ResultIteratorBaseC2EN4QMapIiNS_10ResultItemEE14const_iteratorEi @ 4032 NONAME
_ZN12QtConcurrent18ResultIteratorBaseC2Ev @ 4033 NONAME
_ZN12QtConcurrent18ResultIteratorBaseppEv @ 4034 NONAME
_ZN12QtConcurrent8internal14ExceptionStore12setExceptionERKNS_9ExceptionE @ 4035 NONAME
_ZN12QtConcurrent8internal14ExceptionStore22throwPossibleExceptionEv @ 4036 NONAME
_ZN12QtConcurrent8internal14ExceptionStore9exceptionEv @ 4037 NONAME
_ZN18QFutureWatcherBase11qt_metacallEN11QMetaObject4CallEiPPv @ 4038 NONAME
_ZN18QFutureWatcherBase11qt_metacastEPKc @ 4039 NONAME
_ZN18QFutureWatcherBase12togglePausedEv @ 4040 NONAME
_ZN18QFutureWatcherBase13connectNotifyEPKc @ 4041 NONAME
_ZN18QFutureWatcherBase13resultReadyAtEi @ 4042 NONAME
_ZN18QFutureWatcherBase14resultsReadyAtEii @ 4043 NONAME
_ZN18QFutureWatcherBase15waitForFinishedEv @ 4044 NONAME
_ZN18QFutureWatcherBase16disconnectNotifyEPKc @ 4045 NONAME
_ZN18QFutureWatcherBase16staticMetaObjectE @ 4046 NONAME DATA 16
_ZN18QFutureWatcherBase18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 4047 NONAME
_ZN18QFutureWatcherBase19getStaticMetaObjectEv @ 4048 NONAME
_ZN18QFutureWatcherBase19progressTextChangedERK7QString @ 4049 NONAME
_ZN18QFutureWatcherBase20progressRangeChangedEii @ 4050 NONAME
_ZN18QFutureWatcherBase20progressValueChangedEi @ 4051 NONAME
_ZN18QFutureWatcherBase22connectOutputInterfaceEv @ 4052 NONAME
_ZN18QFutureWatcherBase22setPendingResultsLimitEi @ 4053 NONAME
_ZN18QFutureWatcherBase25disconnectOutputInterfaceEb @ 4054 NONAME
_ZN18QFutureWatcherBase25staticMetaObjectExtraDataE @ 4055 NONAME DATA 8
_ZN18QFutureWatcherBase5eventEP6QEvent @ 4056 NONAME
_ZN18QFutureWatcherBase5pauseEv @ 4057 NONAME
_ZN18QFutureWatcherBase6cancelEv @ 4058 NONAME
_ZN18QFutureWatcherBase6pausedEv @ 4059 NONAME
_ZN18QFutureWatcherBase6resumeEv @ 4060 NONAME
_ZN18QFutureWatcherBase7resumedEv @ 4061 NONAME
_ZN18QFutureWatcherBase7startedEv @ 4062 NONAME
_ZN18QFutureWatcherBase8canceledEv @ 4063 NONAME
_ZN18QFutureWatcherBase8finishedEv @ 4064 NONAME
_ZN18QFutureWatcherBase9setPausedEb @ 4065 NONAME
_ZN18QFutureWatcherBaseC2EP7QObject @ 4066 NONAME
_ZN20QFutureInterfaceBase11setRunnableEP9QRunnable @ 4067 NONAME
_ZN20QFutureInterfaceBase12setThrottledEb @ 4068 NONAME
_ZN20QFutureInterfaceBase12togglePausedEv @ 4069 NONAME
_ZN20QFutureInterfaceBase13reportStartedEv @ 4070 NONAME
_ZN20QFutureInterfaceBase13setFilterModeEb @ 4071 NONAME
_ZN20QFutureInterfaceBase13waitForResultEi @ 4072 NONAME
_ZN20QFutureInterfaceBase13waitForResumeEv @ 4073 NONAME
_ZN20QFutureInterfaceBase14exceptionStoreEv @ 4074 NONAME
_ZN20QFutureInterfaceBase14reportCanceledEv @ 4075 NONAME
_ZN20QFutureInterfaceBase14reportFinishedEv @ 4076 NONAME
_ZN20QFutureInterfaceBase15reportExceptionERKN12QtConcurrent9ExceptionE @ 4077 NONAME
_ZN20QFutureInterfaceBase15resultStoreBaseEv @ 4078 NONAME
_ZN20QFutureInterfaceBase15waitForFinishedEv @ 4079 NONAME
_ZN20QFutureInterfaceBase16setProgressRangeEii @ 4080 NONAME
_ZN20QFutureInterfaceBase16setProgressValueEi @ 4081 NONAME
_ZN20QFutureInterfaceBase17waitForNextResultEv @ 4082 NONAME
_ZN20QFutureInterfaceBase18reportResultsReadyEii @ 4083 NONAME
_ZN20QFutureInterfaceBase19expectedResultCountEv @ 4084 NONAME
_ZN20QFutureInterfaceBase22setExpectedResultCountEi @ 4085 NONAME
_ZN20QFutureInterfaceBase23setProgressValueAndTextEiRK7QString @ 4086 NONAME
_ZN20QFutureInterfaceBase6cancelEv @ 4087 NONAME
_ZN20QFutureInterfaceBase9setPausedEb @ 4088 NONAME
_ZN20QFutureInterfaceBaseC1ENS_5StateE @ 4089 NONAME
_ZN20QFutureInterfaceBaseC1ERKS_ @ 4090 NONAME
_ZN20QFutureInterfaceBaseC2ENS_5StateE @ 4091 NONAME
_ZN20QFutureInterfaceBaseC2ERKS_ @ 4092 NONAME
_ZN20QFutureInterfaceBaseD0Ev @ 4093 NONAME
_ZN20QFutureInterfaceBaseD1Ev @ 4094 NONAME
_ZN20QFutureInterfaceBaseD2Ev @ 4095 NONAME
_ZN20QFutureInterfaceBaseaSERKS_ @ 4096 NONAME
_ZNK12QtConcurrent15ResultStoreBase10filterModeEv @ 4097 NONAME
_ZNK12QtConcurrent15ResultStoreBase13hasNextResultEv @ 4098 NONAME
_ZNK12QtConcurrent15ResultStoreBase3endEv @ 4099 NONAME
_ZNK12QtConcurrent15ResultStoreBase5beginEv @ 4100 NONAME
_ZNK12QtConcurrent15ResultStoreBase5countEv @ 4101 NONAME
_ZNK12QtConcurrent15ResultStoreBase8containsEi @ 4102 NONAME
_ZNK12QtConcurrent15ResultStoreBase8resultAtEi @ 4103 NONAME
_ZNK12QtConcurrent18ResultIteratorBase11resultIndexEv @ 4104 NONAME
_ZNK12QtConcurrent18ResultIteratorBase11vectorIndexEv @ 4105 NONAME
_ZNK12QtConcurrent18ResultIteratorBase23canIncrementVectorIndexEv @ 4106 NONAME
_ZNK12QtConcurrent18ResultIteratorBase8isVectorEv @ 4107 NONAME
_ZNK12QtConcurrent18ResultIteratorBase9batchSizeEv @ 4108 NONAME
_ZNK12QtConcurrent18ResultIteratorBaseeqERKS0_ @ 4109 NONAME
_ZNK12QtConcurrent18ResultIteratorBaseneERKS0_ @ 4110 NONAME
_ZNK12QtConcurrent18UnhandledException5cloneEv @ 4111 NONAME
_ZNK12QtConcurrent18UnhandledException5raiseEv @ 4112 NONAME
_ZNK12QtConcurrent8internal14ExceptionStore12hasExceptionEv @ 4113 NONAME
_ZNK12QtConcurrent8internal14ExceptionStore9hasThrownEv @ 4114 NONAME
_ZNK12QtConcurrent9Exception5cloneEv @ 4115 NONAME
_ZNK12QtConcurrent9Exception5raiseEv @ 4116 NONAME
_ZNK18QFutureWatcherBase10isCanceledEv @ 4117 NONAME
_ZNK18QFutureWatcherBase10isFinishedEv @ 4118 NONAME
_ZNK18QFutureWatcherBase10metaObjectEv @ 4119 NONAME
_ZNK18QFutureWatcherBase12progressTextEv @ 4120 NONAME
_ZNK18QFutureWatcherBase13progressValueEv @ 4121 NONAME
_ZNK18QFutureWatcherBase15progressMaximumEv @ 4122 NONAME
_ZNK18QFutureWatcherBase15progressMinimumEv @ 4123 NONAME
_ZNK18QFutureWatcherBase8isPausedEv @ 4124 NONAME
_ZNK18QFutureWatcherBase9isRunningEv @ 4125 NONAME
_ZNK18QFutureWatcherBase9isStartedEv @ 4126 NONAME
_ZNK20QFutureInterfaceBase10isCanceledEv @ 4127 NONAME
_ZNK20QFutureInterfaceBase10isFinishedEv @ 4128 NONAME
_ZNK20QFutureInterfaceBase10queryStateENS_5StateE @ 4129 NONAME
_ZNK20QFutureInterfaceBase11isThrottledEv @ 4130 NONAME
_ZNK20QFutureInterfaceBase11resultCountEv @ 4131 NONAME
_ZNK20QFutureInterfaceBase12progressTextEv @ 4132 NONAME
_ZNK20QFutureInterfaceBase13progressValueEv @ 4133 NONAME
_ZNK20QFutureInterfaceBase15isResultReadyAtEi @ 4134 NONAME
_ZNK20QFutureInterfaceBase15progressMaximumEv @ 4135 NONAME
_ZNK20QFutureInterfaceBase15progressMinimumEv @ 4136 NONAME
_ZNK20QFutureInterfaceBase15resultStoreBaseEv @ 4137 NONAME
_ZNK20QFutureInterfaceBase19referenceCountIsOneEv @ 4138 NONAME
_ZNK20QFutureInterfaceBase22isProgressUpdateNeededEv @ 4139 NONAME
_ZNK20QFutureInterfaceBase5mutexEv @ 4140 NONAME
_ZNK20QFutureInterfaceBase8isPausedEv @ 4141 NONAME
_ZNK20QFutureInterfaceBase9isRunningEv @ 4142 NONAME
_ZNK20QFutureInterfaceBase9isStartedEv @ 4143 NONAME
_ZTI18QFutureWatcherBase @ 4144 NONAME
_ZTI20QFutureInterfaceBase @ 4145 NONAME
_ZTIN12QtConcurrent15ResultStoreBaseE @ 4146 NONAME
_ZTIN12QtConcurrent16ThreadEngineBaseE @ 4147 NONAME
_ZTIN12QtConcurrent18UnhandledExceptionE @ 4148 NONAME
_ZTIN12QtConcurrent9ExceptionE @ 4149 NONAME
_ZTV18QFutureWatcherBase @ 4150 NONAME
_ZTV20QFutureInterfaceBase @ 4151 NONAME
_ZTVN12QtConcurrent15ResultStoreBaseE @ 4152 NONAME
_ZTVN12QtConcurrent16ThreadEngineBaseE @ 4153 NONAME
_ZTVN12QtConcurrent18UnhandledExceptionE @ 4154 NONAME
_ZTVN12QtConcurrent9ExceptionE @ 4155 NONAME

View File

@ -11820,7 +11820,7 @@ EXPORTS
_ZN20QGraphicsItemPrivate16clearFocusHelperEb @ 11819 NONAME
_ZN24QImagePixmapCleanupHooks13isImageCachedERK6QImage @ 11820 NONAME
_ZN24QImagePixmapCleanupHooks14isPixmapCachedERK7QPixmap @ 11821 NONAME
_Z14qt_draw_glyphsP8QPainterPKjPK7QPointFi @ 11822 NONAME
_Z14qt_draw_glyphsP8QPainterPKjPK7QPointFi @ 11822 NONAME ABSENT
_ZN10QImageData14convertInPlaceEN6QImage6FormatE6QFlagsIN2Qt19ImageConversionFlagEE @ 11823 NONAME
_ZN10QZipReader5closeEv @ 11824 NONAME
_ZN10QZipReader8FileInfoC1ERKS0_ @ 11825 NONAME
@ -12230,7 +12230,7 @@ EXPORTS
_ZN17QInternalMimeDataD2Ev @ 12229 NONAME
_ZN18QTextureGlyphCache19fillInPendingGlyphsEv @ 12230 NONAME
_ZN19QAbstractProxyModel11setItemDataERK11QModelIndexRK4QMapIi8QVariantE @ 12231 NONAME
_ZN19QAbstractProxyModel17resetInternalDataEv @ 12232 NONAME
_ZN19QAbstractProxyModel17resetInternalDataEv @ 12232 NONAME ABSENT
_ZN19QAbstractProxyModel4sortEiN2Qt9SortOrderE @ 12233 NONAME
_ZN19QAbstractProxyModel9fetchMoreERK11QModelIndex @ 12234 NONAME
_ZN19QApplicationPrivateC1ERiPPcN12QApplication4TypeEi @ 12235 NONAME
@ -12302,22 +12302,22 @@ EXPORTS
_ZN5QFont20setHintingPreferenceENS_17HintingPreferenceE @ 12301 NONAME
_ZN6QImage4fillEN2Qt11GlobalColorE @ 12302 NONAME
_ZN6QImage4fillERK6QColor @ 12303 NONAME
_ZN7QGlyphs12setPositionsERK7QVectorI7QPointFE @ 12304 NONAME
_ZN7QGlyphs15setGlyphIndexesERK7QVectorIjE @ 12305 NONAME
_ZN7QGlyphs5clearEv @ 12306 NONAME
_ZN7QGlyphs6detachEv @ 12307 NONAME
_ZN7QGlyphs7setFontERK5QFont @ 12308 NONAME
_ZN7QGlyphsC1ERKS_ @ 12309 NONAME
_ZN7QGlyphsC1Ev @ 12310 NONAME
_ZN7QGlyphsC2ERKS_ @ 12311 NONAME
_ZN7QGlyphsC2Ev @ 12312 NONAME
_ZN7QGlyphsD1Ev @ 12313 NONAME
_ZN7QGlyphsD2Ev @ 12314 NONAME
_ZN7QGlyphsaSERKS_ @ 12315 NONAME
_ZN7QGlyphspLERKS_ @ 12316 NONAME
_ZN7QGlyphs12setPositionsERK7QVectorI7QPointFE @ 12304 NONAME ABSENT
_ZN7QGlyphs15setGlyphIndexesERK7QVectorIjE @ 12305 NONAME ABSENT
_ZN7QGlyphs5clearEv @ 12306 NONAME ABSENT
_ZN7QGlyphs6detachEv @ 12307 NONAME ABSENT
_ZN7QGlyphs7setFontERK5QFont @ 12308 NONAME ABSENT
_ZN7QGlyphsC1ERKS_ @ 12309 NONAME ABSENT
_ZN7QGlyphsC1Ev @ 12310 NONAME ABSENT
_ZN7QGlyphsC2ERKS_ @ 12311 NONAME ABSENT
_ZN7QGlyphsC2Ev @ 12312 NONAME ABSENT
_ZN7QGlyphsD1Ev @ 12313 NONAME ABSENT
_ZN7QGlyphsD2Ev @ 12314 NONAME ABSENT
_ZN7QGlyphsaSERKS_ @ 12315 NONAME ABSENT
_ZN7QGlyphspLERKS_ @ 12316 NONAME ABSENT
_ZN8QMdiArea14setTabsMovableEb @ 12317 NONAME
_ZN8QMdiArea15setTabsClosableEb @ 12318 NONAME
_ZN8QPainter10drawGlyphsERK7QPointFRK7QGlyphs @ 12319 NONAME
_ZN8QPainter10drawGlyphsERK7QPointFRK7QGlyphs @ 12319 NONAME ABSENT
_ZN9QScroller11grabGestureEP7QObjectNS_19ScrollerGestureTypeE @ 12320 NONAME
_ZN9QScroller11handleInputENS_5InputERK7QPointFx @ 12321 NONAME
_ZN9QScroller11hasScrollerEP7QObject @ 12322 NONAME
@ -12351,9 +12351,9 @@ EXPORTS
_ZNK10QBlittable12capabilitiesEv @ 12350 NONAME
_ZNK10QBlittable4sizeEv @ 12351 NONAME
_ZNK10QTabWidget14heightForWidthEi @ 12352 NONAME
_ZNK11QFontEngine18createExplicitFontEv @ 12353 NONAME
_ZNK11QFontEngine26createExplicitFontWithNameERK7QString @ 12354 NONAME
_ZNK11QTextLayout6glyphsEv @ 12355 NONAME
_ZNK11QFontEngine18createExplicitFontEv @ 12353 NONAME ABSENT
_ZNK11QFontEngine26createExplicitFontWithNameERK7QString @ 12354 NONAME ABSENT
_ZNK11QTextLayout6glyphsEv @ 12355 NONAME ABSENT
_ZNK12QFontMetrics10inFontUcs4Ej @ 12356 NONAME
_ZNK12QRadioButton15minimumSizeHintEv @ 12357 NONAME
_ZNK12QScrollEvent10contentPosEv @ 12358 NONAME
@ -12362,7 +12362,7 @@ EXPORTS
_ZNK12QScrollEvent6d_funcEv @ 12361 NONAME
_ZNK13QFlickGesture10metaObjectEv @ 12362 NONAME
_ZNK13QFontMetricsF10inFontUcs4Ej @ 12363 NONAME
_ZNK13QTextFragment6glyphsEv @ 12364 NONAME
_ZNK13QTextFragment6glyphsEv @ 12364 NONAME ABSENT
_ZNK14QFileOpenEvent8openFileER5QFile6QFlagsIN9QIODevice12OpenModeFlagEE @ 12365 NONAME
_ZNK14QWidgetPrivate17hasHeightForWidthEv @ 12366 NONAME
_ZNK16QFileSystemModel5rmdirERK11QModelIndex @ 12367 NONAME
@ -12396,12 +12396,12 @@ EXPORTS
_ZNK20QBlittablePixmapData9blittableEv @ 12395 NONAME
_ZNK20QRasterWindowSurface24hasStaticContentsSupportEv @ 12396 NONAME ABSENT
_ZNK5QFont17hintingPreferenceEv @ 12397 NONAME
_ZNK7QGlyphs12glyphIndexesEv @ 12398 NONAME
_ZNK7QGlyphs4fontEv @ 12399 NONAME
_ZNK7QGlyphs9positionsEv @ 12400 NONAME
_ZNK7QGlyphseqERKS_ @ 12401 NONAME
_ZNK7QGlyphsneERKS_ @ 12402 NONAME
_ZNK7QGlyphsplERKS_ @ 12403 NONAME
_ZNK7QGlyphs12glyphIndexesEv @ 12398 NONAME ABSENT
_ZNK7QGlyphs4fontEv @ 12399 NONAME ABSENT
_ZNK7QGlyphs9positionsEv @ 12400 NONAME ABSENT
_ZNK7QGlyphseqERKS_ @ 12401 NONAME ABSENT
_ZNK7QGlyphsneERKS_ @ 12402 NONAME ABSENT
_ZNK7QGlyphsplERKS_ @ 12403 NONAME ABSENT
_ZNK8QMdiArea11tabsMovableEv @ 12404 NONAME
_ZNK8QMdiArea12tabsClosableEv @ 12405 NONAME
_ZNK8QPainter16clipBoundingRectEv @ 12406 NONAME
@ -12413,7 +12413,7 @@ EXPORTS
_ZNK9QScroller5stateEv @ 12412 NONAME
_ZNK9QScroller6targetEv @ 12413 NONAME
_ZNK9QScroller8velocityEv @ 12414 NONAME
_ZNK9QTextLine6glyphsEii @ 12415 NONAME
_ZNK9QTextLine6glyphsEii @ 12415 NONAME ABSENT
_ZTI10QBlittable @ 12416 NONAME
_ZTI12QScrollEvent @ 12417 NONAME
_ZTI13QFlickGesture @ 12418 NONAME
@ -12799,4 +12799,69 @@ EXPORTS
_ZNK10QZipWriter6deviceEv @ 12798 NONAME
_ZNK10QZipWriter6existsEv @ 12799 NONAME
_ZNK10QZipWriter6statusEv @ 12800 NONAME
_Z27qt_isExtendedRadialGradientRK6QBrush @ 12801 NONAME
_Z28qt_painterPathFromVectorPathRK11QVectorPath @ 12802 NONAME
_Z29qt_draw_decoration_for_glyphsP8QPainterPKjPK11QFixedPointiP11QFontEngineRK5QFontRK15QTextCharFormat @ 12803 NONAME
_ZN10QTableView13doItemsLayoutEv @ 12804 NONAME
_ZN11QTextEngine15beginningOfLineEi @ 12805 NONAME
_ZN11QTextEngine16offsetInLigatureEPK11QScriptItemiii @ 12806 NONAME
_ZN11QTextEngine22insertionPointsForLineEiR7QVectorIiE @ 12807 NONAME
_ZN11QTextEngine25lineNumberForTextPositionEi @ 12808 NONAME
_ZN11QTextEngine27positionAfterVisualMovementEiN11QTextCursor13MoveOperationE @ 12809 NONAME
_ZN11QTextEngine9alignLineERK11QScriptLine @ 12810 NONAME
_ZN11QTextEngine9endOfLineEi @ 12811 NONAME
_ZN11QTextLayout18setCursorMoveStyleEN11QTextCursor9MoveStyleE @ 12812 NONAME
_ZN13QTextDocument25setDefaultCursorMoveStyleEN11QTextCursor9MoveStyleE @ 12813 NONAME
_ZN15QGraphicsLayout28instantInvalidatePropagationEv @ 12814 NONAME
_ZN15QGraphicsLayout31setInstantInvalidatePropagationEb @ 12815 NONAME
_ZN15QRadialGradient14setFocalRadiusEf @ 12816 NONAME
_ZN15QRadialGradient15setCenterRadiusEf @ 12817 NONAME
_ZN15QRadialGradientC1ERK7QPointFfS2_f @ 12818 NONAME
_ZN15QRadialGradientC1Effffff @ 12819 NONAME
_ZN15QRadialGradientC2ERK7QPointFfS2_f @ 12820 NONAME
_ZN15QRadialGradientC2Effffff @ 12821 NONAME
_ZN19QIdentityProxyModel10insertRowsEiiRK11QModelIndex @ 12822 NONAME
_ZN19QIdentityProxyModel10removeRowsEiiRK11QModelIndex @ 12823 NONAME
_ZN19QIdentityProxyModel11qt_metacallEN11QMetaObject4CallEiPPv @ 12824 NONAME
_ZN19QIdentityProxyModel11qt_metacastEPKc @ 12825 NONAME
_ZN19QIdentityProxyModel12dropMimeDataEPK9QMimeDataN2Qt10DropActionEiiRK11QModelIndex @ 12826 NONAME
_ZN19QIdentityProxyModel13insertColumnsEiiRK11QModelIndex @ 12827 NONAME
_ZN19QIdentityProxyModel13removeColumnsEiiRK11QModelIndex @ 12828 NONAME
_ZN19QIdentityProxyModel14setSourceModelEP18QAbstractItemModel @ 12829 NONAME
_ZN19QIdentityProxyModel16staticMetaObjectE @ 12830 NONAME DATA 16
_ZN19QIdentityProxyModel18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12831 NONAME
_ZN19QIdentityProxyModel19getStaticMetaObjectEv @ 12832 NONAME
_ZN19QIdentityProxyModel25staticMetaObjectExtraDataE @ 12833 NONAME DATA 8
_ZN19QIdentityProxyModelC1EP7QObject @ 12834 NONAME
_ZN19QIdentityProxyModelC1ER26QIdentityProxyModelPrivateP7QObject @ 12835 NONAME
_ZN19QIdentityProxyModelC2EP7QObject @ 12836 NONAME
_ZN19QIdentityProxyModelC2ER26QIdentityProxyModelPrivateP7QObject @ 12837 NONAME
_ZN19QIdentityProxyModelD0Ev @ 12838 NONAME
_ZN19QIdentityProxyModelD1Ev @ 12839 NONAME
_ZN19QIdentityProxyModelD2Ev @ 12840 NONAME
_ZN9QLineEdit18setCursorMoveStyleEN11QTextCursor9MoveStyleE @ 12841 NONAME
_ZNK10QTextBlock7isValidEv @ 12842 NONAME
_ZNK11QTextEngine19nextLogicalPositionEi @ 12843 NONAME
_ZNK11QTextEngine23previousLogicalPositionEi @ 12844 NONAME
_ZNK11QTextLayout15cursorMoveStyleEv @ 12845 NONAME
_ZNK11QTextLayout18leftCursorPositionEi @ 12846 NONAME
_ZNK11QTextLayout19rightCursorPositionEi @ 12847 NONAME
_ZNK12QUndoCommand10actionTextEv @ 12848 NONAME
_ZNK13QTextDocument22defaultCursorMoveStyleEv @ 12849 NONAME
_ZNK14QVolatileImage14paintingActiveEv @ 12850 NONAME
_ZNK15QRadialGradient11focalRadiusEv @ 12851 NONAME
_ZNK15QRadialGradient12centerRadiusEv @ 12852 NONAME
_ZNK19QIdentityProxyModel10metaObjectEv @ 12853 NONAME
_ZNK19QIdentityProxyModel11columnCountERK11QModelIndex @ 12854 NONAME
_ZNK19QIdentityProxyModel11mapToSourceERK11QModelIndex @ 12855 NONAME
_ZNK19QIdentityProxyModel13mapFromSourceERK11QModelIndex @ 12856 NONAME
_ZNK19QIdentityProxyModel20mapSelectionToSourceERK14QItemSelection @ 12857 NONAME
_ZNK19QIdentityProxyModel22mapSelectionFromSourceERK14QItemSelection @ 12858 NONAME
_ZNK19QIdentityProxyModel5indexEiiRK11QModelIndex @ 12859 NONAME
_ZNK19QIdentityProxyModel5matchERK11QModelIndexiRK8QVarianti6QFlagsIN2Qt9MatchFlagEE @ 12860 NONAME
_ZNK19QIdentityProxyModel6parentERK11QModelIndex @ 12861 NONAME
_ZNK19QIdentityProxyModel8rowCountERK11QModelIndex @ 12862 NONAME
_ZNK9QLineEdit15cursorMoveStyleEv @ 12863 NONAME
_ZTI19QIdentityProxyModel @ 12864 NONAME
_ZTV19QIdentityProxyModel @ 12865 NONAME

View File

@ -1260,4 +1260,12 @@ EXPORTS
_ZN4QFtp25staticMetaObjectExtraDataE @ 1259 NONAME DATA 8
_ZN5QHttp18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 1260 NONAME
_ZN5QHttp25staticMetaObjectExtraDataE @ 1261 NONAME DATA 8
_ZN18QNetworkProxyQuery23setNetworkConfigurationERK21QNetworkConfiguration @ 1262 NONAME
_ZN18QNetworkProxyQueryC1ERK21QNetworkConfigurationRK4QUrlNS_9QueryTypeE @ 1263 NONAME
_ZN18QNetworkProxyQueryC1ERK21QNetworkConfigurationRK7QStringiS5_NS_9QueryTypeE @ 1264 NONAME
_ZN18QNetworkProxyQueryC1ERK21QNetworkConfigurationtRK7QStringNS_9QueryTypeE @ 1265 NONAME
_ZN18QNetworkProxyQueryC2ERK21QNetworkConfigurationRK4QUrlNS_9QueryTypeE @ 1266 NONAME
_ZN18QNetworkProxyQueryC2ERK21QNetworkConfigurationRK7QStringiS5_NS_9QueryTypeE @ 1267 NONAME
_ZN18QNetworkProxyQueryC2ERK21QNetworkConfigurationtRK7QStringNS_9QueryTypeE @ 1268 NONAME
_ZNK18QNetworkProxyQuery20networkConfigurationEv @ 1269 NONAME

View File

@ -13,6 +13,8 @@ unix|win32-g++*:QMAKE_PKGCONFIG_REQUIRES = QtCore
include(../qbase.pri)
HEADERS += $$QT_SOURCE_TREE/src/sql/qtsqlversion.h
DEFINES += QT_NO_CAST_FROM_ASCII
PRECOMPILED_HEADER = ../corelib/global/qt_pch.h
SQL_P = sql

View File

@ -85,6 +85,9 @@ qpa:mac: {
}
include(../qbase.pri)
HEADERS += $$QT_SOURCE_TREE/src/testlib/qttestlibversion.h
QMAKE_TARGET_PRODUCT = QTestLib
QMAKE_TARGET_DESCRIPTION = Qt \
Unit \

View File

@ -4,6 +4,7 @@ HEADERS += \
itemviews/qabstractitemview.h \
itemviews/qabstractitemview_p.h \
itemviews/qheaderview.h \
itemviews/qidentityproxymodel.h \
itemviews/qlistview.h \
itemviews/qlistview_p.h \
itemviews/qbsptree_p.h \
@ -12,14 +13,14 @@ HEADERS += \
itemviews/qtreeview.h \
itemviews/qtreeview_p.h \
itemviews/qabstractitemdelegate.h \
itemviews/qitemdelegate.h \
itemviews/qitemdelegate.h \
itemviews/qitemselectionmodel.h \
itemviews/qitemselectionmodel_p.h \
itemviews/qdirmodel.h \
itemviews/qlistwidget.h \
itemviews/qlistwidget_p.h \
itemviews/qtablewidget.h \
itemviews/qtablewidget_p.h \
itemviews/qtablewidget_p.h \
itemviews/qtreewidget.h \
itemviews/qtreewidget_p.h \
itemviews/qwidgetitemdata_p.h \
@ -44,12 +45,13 @@ HEADERS += \
SOURCES += \
itemviews/qabstractitemview.cpp \
itemviews/qheaderview.cpp \
itemviews/qidentityproxymodel.cpp \
itemviews/qlistview.cpp \
itemviews/qbsptree.cpp \
itemviews/qtableview.cpp \
itemviews/qtreeview.cpp \
itemviews/qabstractitemdelegate.cpp \
itemviews/qitemdelegate.cpp \
itemviews/qitemdelegate.cpp \
itemviews/qitemselectionmodel.cpp \
itemviews/qdirmodel.cpp \
itemviews/qlistwidget.cpp \

View File

@ -0,0 +1,582 @@
/****************************************************************************
**
** Copyright (C) 2011 Klarälvdalens Datakonsult AB,
** a KDAB Group company, info@kdab.com,
** author Stephen Kelly <stephen.kelly@kdab.com>
** All rights reserved.
** Contact: Nokia Corporation (info@qt.nokia.com)
**
** This file is part of the QtGui module of the Qt Toolkit.
**
** GNU Lesser General Public License Usage
** Alternatively, this file may be used under the terms of the GNU Lesser
** General Public License version 2.1 as published by the Free Software
** Foundation and appearing in the file LICENSE.LGPL included in the
** packaging of this file. Please review the following information to
** ensure the GNU Lesser General Public License version 2.1 requirements
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
**
** In addition, as a special exception, Nokia gives you certain additional
** rights. These rights are described in the Nokia Qt LGPL Exception
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU General
** Public License version 3.0 as published by the Free Software Foundation
** and appearing in the file LICENSE.GPL included in the packaging of this
** file. Please review the following information to ensure the GNU General
** Public License version 3.0 requirements will be met:
** http://www.gnu.org/copyleft/gpl.html.
**
** Other Usage
** Alternatively, this file may be used in accordance with the terms and
** conditions contained in a signed written agreement between you and Nokia.
**
****************************************************************************/
#include "qidentityproxymodel.h"
#ifndef QT_NO_IDENTITYPROXYMODEL
#include "qitemselectionmodel.h"
#include <private/qabstractproxymodel_p.h>
QT_BEGIN_NAMESPACE
class QIdentityProxyModelPrivate : public QAbstractProxyModelPrivate
{
QIdentityProxyModelPrivate()
: ignoreNextLayoutAboutToBeChanged(false),
ignoreNextLayoutChanged(false)
{
}
Q_DECLARE_PUBLIC(QIdentityProxyModel)
bool ignoreNextLayoutAboutToBeChanged;
bool ignoreNextLayoutChanged;
QList<QPersistentModelIndex> layoutChangePersistentIndexes;
QModelIndexList proxyIndexes;
void _q_sourceRowsAboutToBeInserted(const QModelIndex &parent, int start, int end);
void _q_sourceRowsInserted(const QModelIndex &parent, int start, int end);
void _q_sourceRowsAboutToBeRemoved(const QModelIndex &parent, int start, int end);
void _q_sourceRowsRemoved(const QModelIndex &parent, int start, int end);
void _q_sourceRowsAboutToBeMoved(const QModelIndex &sourceParent, int sourceStart, int sourceEnd, const QModelIndex &destParent, int dest);
void _q_sourceRowsMoved(const QModelIndex &sourceParent, int sourceStart, int sourceEnd, const QModelIndex &destParent, int dest);
void _q_sourceColumnsAboutToBeInserted(const QModelIndex &parent, int start, int end);
void _q_sourceColumnsInserted(const QModelIndex &parent, int start, int end);
void _q_sourceColumnsAboutToBeRemoved(const QModelIndex &parent, int start, int end);
void _q_sourceColumnsRemoved(const QModelIndex &parent, int start, int end);
void _q_sourceColumnsAboutToBeMoved(const QModelIndex &sourceParent, int sourceStart, int sourceEnd, const QModelIndex &destParent, int dest);
void _q_sourceColumnsMoved(const QModelIndex &sourceParent, int sourceStart, int sourceEnd, const QModelIndex &destParent, int dest);
void _q_sourceDataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight);
void _q_sourceHeaderDataChanged(Qt::Orientation orientation, int first, int last);
void _q_sourceLayoutAboutToBeChanged();
void _q_sourceLayoutChanged();
void _q_sourceModelAboutToBeReset();
void _q_sourceModelReset();
};
/*!
\since 4.8
\class QIdentityProxyModel
\brief The QIdentityProxyModel class proxies its source model unmodified
\ingroup model-view
QIdentityProxyModel can be used to forward the structure of a source model exactly, with no sorting, filtering or other transformation.
This is similar in concept to an identity matrix where A.I = A.
Because it does no sorting or filtering, this class is most suitable to proxy models which transform the data() of the source model.
For example, a proxy model could be created to define the font used, or the background colour, or the tooltip etc. This removes the
need to implement all data handling in the same class that creates the structure of the model, and can also be used to create
re-usable components.
This also provides a way to change the data in the case where a source model is supplied by a third party which can not be modified.
\snippet doc/src/snippets/code/src_gui_itemviews_qidentityproxymodel.cpp 0
\sa QAbstractProxyModel, {Model/View Programming}, QAbstractItemModel
*/
/*!
Constructs an identity model with the given \a parent.
*/
QIdentityProxyModel::QIdentityProxyModel(QObject* parent)
: QAbstractProxyModel(*new QIdentityProxyModelPrivate, parent)
{
}
/*! \internal
*/
QIdentityProxyModel::QIdentityProxyModel(QIdentityProxyModelPrivate &dd, QObject* parent)
: QAbstractProxyModel(dd, parent)
{
}
/*!
Destroys this identity model.
*/
QIdentityProxyModel::~QIdentityProxyModel()
{
}
/*!
\reimp
*/
int QIdentityProxyModel::columnCount(const QModelIndex& parent) const
{
Q_ASSERT(parent.isValid() ? parent.model() == this : true);
Q_D(const QIdentityProxyModel);
return d->model->columnCount(mapToSource(parent));
}
/*!
\reimp
*/
bool QIdentityProxyModel::dropMimeData(const QMimeData* data, Qt::DropAction action, int row, int column, const QModelIndex& parent)
{
Q_ASSERT(parent.isValid() ? parent.model() == this : true);
Q_D(QIdentityProxyModel);
return d->model->dropMimeData(data, action, row, column, mapToSource(parent));
}
/*!
\reimp
*/
QModelIndex QIdentityProxyModel::index(int row, int column, const QModelIndex& parent) const
{
Q_ASSERT(parent.isValid() ? parent.model() == this : true);
Q_D(const QIdentityProxyModel);
if (!hasIndex(row, column, parent))
return QModelIndex();
const QModelIndex sourceParent = mapToSource(parent);
const QModelIndex sourceIndex = d->model->index(row, column, sourceParent);
Q_ASSERT(sourceIndex.isValid());
return mapFromSource(sourceIndex);
}
/*!
\reimp
*/
bool QIdentityProxyModel::insertColumns(int column, int count, const QModelIndex& parent)
{
Q_ASSERT(parent.isValid() ? parent.model() == this : true);
Q_D(QIdentityProxyModel);
return d->model->insertColumns(column, count, mapToSource(parent));
}
/*!
\reimp
*/
bool QIdentityProxyModel::insertRows(int row, int count, const QModelIndex& parent)
{
Q_ASSERT(parent.isValid() ? parent.model() == this : true);
Q_D(QIdentityProxyModel);
return d->model->insertRows(row, count, mapToSource(parent));
}
/*!
\reimp
*/
QModelIndex QIdentityProxyModel::mapFromSource(const QModelIndex& sourceIndex) const
{
Q_D(const QIdentityProxyModel);
if (!d->model || !sourceIndex.isValid())
return QModelIndex();
Q_ASSERT(sourceIndex.model() == d->model);
return createIndex(sourceIndex.row(), sourceIndex.column(), sourceIndex.internalPointer());
}
/*!
\reimp
*/
QItemSelection QIdentityProxyModel::mapSelectionFromSource(const QItemSelection& selection) const
{
Q_D(const QIdentityProxyModel);
QItemSelection proxySelection;
if (!d->model)
return proxySelection;
QItemSelection::const_iterator it = selection.constBegin();
const QItemSelection::const_iterator end = selection.constEnd();
for ( ; it != end; ++it) {
Q_ASSERT(it->model() == d->model);
const QItemSelectionRange range(mapFromSource(it->topLeft()), mapFromSource(it->bottomRight()));
proxySelection.append(range);
}
return proxySelection;
}
/*!
\reimp
*/
QItemSelection QIdentityProxyModel::mapSelectionToSource(const QItemSelection& selection) const
{
Q_D(const QIdentityProxyModel);
QItemSelection sourceSelection;
if (!d->model)
return sourceSelection;
QItemSelection::const_iterator it = selection.constBegin();
const QItemSelection::const_iterator end = selection.constEnd();
for ( ; it != end; ++it) {
Q_ASSERT(it->model() == this);
const QItemSelectionRange range(mapToSource(it->topLeft()), mapToSource(it->bottomRight()));
sourceSelection.append(range);
}
return sourceSelection;
}
/*!
\reimp
*/
QModelIndex QIdentityProxyModel::mapToSource(const QModelIndex& proxyIndex) const
{
Q_D(const QIdentityProxyModel);
if (!d->model || !proxyIndex.isValid())
return QModelIndex();
Q_ASSERT(proxyIndex.model() == this);
return d->model->createIndex(proxyIndex.row(), proxyIndex.column(), proxyIndex.internalPointer());
}
/*!
\reimp
*/
QModelIndexList QIdentityProxyModel::match(const QModelIndex& start, int role, const QVariant& value, int hits, Qt::MatchFlags flags) const
{
Q_D(const QIdentityProxyModel);
Q_ASSERT(start.isValid() ? start.model() == this : true);
if (!d->model)
return QModelIndexList();
const QModelIndexList sourceList = d->model->match(mapToSource(start), role, value, hits, flags);
QModelIndexList::const_iterator it = sourceList.constBegin();
const QModelIndexList::const_iterator end = sourceList.constEnd();
QModelIndexList proxyList;
for ( ; it != end; ++it)
proxyList.append(mapFromSource(*it));
return proxyList;
}
/*!
\reimp
*/
QModelIndex QIdentityProxyModel::parent(const QModelIndex& child) const
{
Q_ASSERT(child.isValid() ? child.model() == this : true);
const QModelIndex sourceIndex = mapToSource(child);
const QModelIndex sourceParent = sourceIndex.parent();
return mapFromSource(sourceParent);
}
/*!
\reimp
*/
bool QIdentityProxyModel::removeColumns(int column, int count, const QModelIndex& parent)
{
Q_ASSERT(parent.isValid() ? parent.model() == this : true);
Q_D(QIdentityProxyModel);
return d->model->removeColumns(column, count, mapToSource(parent));
}
/*!
\reimp
*/
bool QIdentityProxyModel::removeRows(int row, int count, const QModelIndex& parent)
{
Q_ASSERT(parent.isValid() ? parent.model() == this : true);
Q_D(QIdentityProxyModel);
return d->model->removeRows(row, count, mapToSource(parent));
}
/*!
\reimp
*/
int QIdentityProxyModel::rowCount(const QModelIndex& parent) const
{
Q_ASSERT(parent.isValid() ? parent.model() == this : true);
Q_D(const QIdentityProxyModel);
return d->model->rowCount(mapToSource(parent));
}
/*!
\reimp
*/
void QIdentityProxyModel::setSourceModel(QAbstractItemModel* sourceModel)
{
beginResetModel();
if (sourceModel) {
disconnect(sourceModel, SIGNAL(rowsAboutToBeInserted(const QModelIndex &, int, int)),
this, SLOT(_q_sourceRowsAboutToBeInserted(const QModelIndex &, int, int)));
disconnect(sourceModel, SIGNAL(rowsInserted(const QModelIndex &, int, int)),
this, SLOT(_q_sourceRowsInserted(const QModelIndex &, int, int)));
disconnect(sourceModel, SIGNAL(rowsAboutToBeRemoved(const QModelIndex &, int, int)),
this, SLOT(_q_sourceRowsAboutToBeRemoved(const QModelIndex &, int, int)));
disconnect(sourceModel, SIGNAL(rowsRemoved(const QModelIndex &, int, int)),
this, SLOT(_q_sourceRowsRemoved(const QModelIndex &, int, int)));
disconnect(sourceModel, SIGNAL(rowsAboutToBeMoved(const QModelIndex &, int, int, const QModelIndex &, int)),
this, SLOT(_q_sourceRowsAboutToBeMoved(const QModelIndex &, int, int, const QModelIndex &, int)));
disconnect(sourceModel, SIGNAL(rowsMoved(const QModelIndex &, int, int, const QModelIndex &, int)),
this, SLOT(_q_sourceRowsMoved(const QModelIndex &, int, int, const QModelIndex &, int)));
disconnect(sourceModel, SIGNAL(columnsAboutToBeInserted(const QModelIndex &, int, int)),
this, SLOT(_q_sourceColumnsAboutToBeInserted(const QModelIndex &, int, int)));
disconnect(sourceModel, SIGNAL(columnsInserted(const QModelIndex &, int, int)),
this, SLOT(_q_sourceColumnsInserted(const QModelIndex &, int, int)));
disconnect(sourceModel, SIGNAL(columnsAboutToBeRemoved(const QModelIndex &, int, int)),
this, SLOT(_q_sourceColumnsAboutToBeRemoved(const QModelIndex &, int, int)));
disconnect(sourceModel, SIGNAL(columnsRemoved(const QModelIndex &, int, int)),
this, SLOT(_q_sourceColumnsRemoved(const QModelIndex &, int, int)));
disconnect(sourceModel, SIGNAL(columnsAboutToBeMoved(const QModelIndex &, int, int, const QModelIndex &, int)),
this, SLOT(_q_sourceColumnsAboutToBeMoved(const QModelIndex &, int, int, const QModelIndex &, int)));
disconnect(sourceModel, SIGNAL(columnsMoved(const QModelIndex &, int, int, const QModelIndex &, int)),
this, SLOT(_q_sourceColumnsMoved(const QModelIndex &, int, int, const QModelIndex &, int)));
disconnect(sourceModel, SIGNAL(modelAboutToBeReset()),
this, SLOT(_q_sourceModelAboutToBeReset()));
disconnect(sourceModel, SIGNAL(modelReset()),
this, SLOT(_q_sourceModelReset()));
disconnect(sourceModel, SIGNAL(dataChanged(const QModelIndex &, const QModelIndex &)),
this, SLOT(_q_sourceDataChanged(const QModelIndex &, const QModelIndex &)));
disconnect(sourceModel, SIGNAL(headerDataChanged(Qt::Orientation,int,int)),
this, SLOT(_q_sourceHeaderDataChanged(Qt::Orientation,int,int)));
disconnect(sourceModel, SIGNAL(layoutAboutToBeChanged()),
this, SLOT(_q_sourceLayoutAboutToBeChanged()));
disconnect(sourceModel, SIGNAL(layoutChanged()),
this, SLOT(_q_sourceLayoutChanged()));
}
QAbstractProxyModel::setSourceModel(sourceModel);
if (sourceModel) {
connect(sourceModel, SIGNAL(rowsAboutToBeInserted(const QModelIndex &, int, int)),
SLOT(_q_sourceRowsAboutToBeInserted(const QModelIndex &, int, int)));
connect(sourceModel, SIGNAL(rowsInserted(const QModelIndex &, int, int)),
SLOT(_q_sourceRowsInserted(const QModelIndex &, int, int)));
connect(sourceModel, SIGNAL(rowsAboutToBeRemoved(const QModelIndex &, int, int)),
SLOT(_q_sourceRowsAboutToBeRemoved(const QModelIndex &, int, int)));
connect(sourceModel, SIGNAL(rowsRemoved(const QModelIndex &, int, int)),
SLOT(_q_sourceRowsRemoved(const QModelIndex &, int, int)));
connect(sourceModel, SIGNAL(rowsAboutToBeMoved(const QModelIndex &, int, int, const QModelIndex &, int)),
SLOT(_q_sourceRowsAboutToBeMoved(const QModelIndex &, int, int, const QModelIndex &, int)));
connect(sourceModel, SIGNAL(rowsMoved(const QModelIndex &, int, int, const QModelIndex &, int)),
SLOT(_q_sourceRowsMoved(const QModelIndex &, int, int, const QModelIndex &, int)));
connect(sourceModel, SIGNAL(columnsAboutToBeInserted(const QModelIndex &, int, int)),
SLOT(_q_sourceColumnsAboutToBeInserted(const QModelIndex &, int, int)));
connect(sourceModel, SIGNAL(columnsInserted(const QModelIndex &, int, int)),
SLOT(_q_sourceColumnsInserted(const QModelIndex &, int, int)));
connect(sourceModel, SIGNAL(columnsAboutToBeRemoved(const QModelIndex &, int, int)),
SLOT(_q_sourceColumnsAboutToBeRemoved(const QModelIndex &, int, int)));
connect(sourceModel, SIGNAL(columnsRemoved(const QModelIndex &, int, int)),
SLOT(_q_sourceColumnsRemoved(const QModelIndex &, int, int)));
connect(sourceModel, SIGNAL(columnsAboutToBeMoved(const QModelIndex &, int, int, const QModelIndex &, int)),
SLOT(_q_sourceColumnsAboutToBeMoved(const QModelIndex &, int, int, const QModelIndex &, int)));
connect(sourceModel, SIGNAL(columnsMoved(const QModelIndex &, int, int, const QModelIndex &, int)),
SLOT(_q_sourceColumnsMoved(const QModelIndex &, int, int, const QModelIndex &, int)));
connect(sourceModel, SIGNAL(modelAboutToBeReset()),
SLOT(_q_sourceModelAboutToBeReset()));
connect(sourceModel, SIGNAL(modelReset()),
SLOT(_q_sourceModelReset()));
connect(sourceModel, SIGNAL(dataChanged(const QModelIndex &, const QModelIndex &)),
SLOT(_q_sourceDataChanged(const QModelIndex &, const QModelIndex &)));
connect(sourceModel, SIGNAL(headerDataChanged(Qt::Orientation,int,int)),
SLOT(_q_sourceHeaderDataChanged(Qt::Orientation,int,int)));
connect(sourceModel, SIGNAL(layoutAboutToBeChanged()),
SLOT(_q_sourceLayoutAboutToBeChanged()));
connect(sourceModel, SIGNAL(layoutChanged()),
SLOT(_q_sourceLayoutChanged()));
}
endResetModel();
}
void QIdentityProxyModelPrivate::_q_sourceColumnsAboutToBeInserted(const QModelIndex &parent, int start, int end)
{
Q_ASSERT(parent.isValid() ? parent.model() == model : true);
Q_Q(QIdentityProxyModel);
q->beginInsertColumns(q->mapFromSource(parent), start, end);
}
void QIdentityProxyModelPrivate::_q_sourceColumnsAboutToBeMoved(const QModelIndex &sourceParent, int sourceStart, int sourceEnd, const QModelIndex &destParent, int dest)
{
Q_ASSERT(sourceParent.isValid() ? sourceParent.model() == model : true);
Q_ASSERT(destParent.isValid() ? destParent.model() == model : true);
Q_Q(QIdentityProxyModel);
q->beginMoveColumns(q->mapFromSource(sourceParent), sourceStart, sourceEnd, q->mapFromSource(destParent), dest);
}
void QIdentityProxyModelPrivate::_q_sourceColumnsAboutToBeRemoved(const QModelIndex &parent, int start, int end)
{
Q_ASSERT(parent.isValid() ? parent.model() == model : true);
Q_Q(QIdentityProxyModel);
q->beginRemoveColumns(q->mapFromSource(parent), start, end);
}
void QIdentityProxyModelPrivate::_q_sourceColumnsInserted(const QModelIndex &parent, int start, int end)
{
Q_ASSERT(parent.isValid() ? parent.model() == model : true);
Q_Q(QIdentityProxyModel);
Q_UNUSED(parent)
Q_UNUSED(start)
Q_UNUSED(end)
q->endInsertColumns();
}
void QIdentityProxyModelPrivate::_q_sourceColumnsMoved(const QModelIndex &sourceParent, int sourceStart, int sourceEnd, const QModelIndex &destParent, int dest)
{
Q_ASSERT(sourceParent.isValid() ? sourceParent.model() == model : true);
Q_ASSERT(destParent.isValid() ? destParent.model() == model : true);
Q_Q(QIdentityProxyModel);
Q_UNUSED(sourceParent)
Q_UNUSED(sourceStart)
Q_UNUSED(sourceEnd)
Q_UNUSED(destParent)
Q_UNUSED(dest)
q->endMoveColumns();
}
void QIdentityProxyModelPrivate::_q_sourceColumnsRemoved(const QModelIndex &parent, int start, int end)
{
Q_ASSERT(parent.isValid() ? parent.model() == model : true);
Q_Q(QIdentityProxyModel);
Q_UNUSED(parent)
Q_UNUSED(start)
Q_UNUSED(end)
q->endRemoveColumns();
}
void QIdentityProxyModelPrivate::_q_sourceDataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight)
{
Q_ASSERT(topLeft.isValid() ? topLeft.model() == model : true);
Q_ASSERT(bottomRight.isValid() ? bottomRight.model() == model : true);
Q_Q(QIdentityProxyModel);
q->dataChanged(q->mapFromSource(topLeft), q->mapFromSource(bottomRight));
}
void QIdentityProxyModelPrivate::_q_sourceHeaderDataChanged(Qt::Orientation orientation, int first, int last)
{
Q_Q(QIdentityProxyModel);
q->headerDataChanged(orientation, first, last);
}
void QIdentityProxyModelPrivate::_q_sourceLayoutAboutToBeChanged()
{
if (ignoreNextLayoutAboutToBeChanged)
return;
Q_Q(QIdentityProxyModel);
foreach(const QPersistentModelIndex &proxyPersistentIndex, q->persistentIndexList()) {
proxyIndexes << proxyPersistentIndex;
Q_ASSERT(proxyPersistentIndex.isValid());
const QPersistentModelIndex srcPersistentIndex = q->mapToSource(proxyPersistentIndex);
Q_ASSERT(srcPersistentIndex.isValid());
layoutChangePersistentIndexes << srcPersistentIndex;
}
q->layoutAboutToBeChanged();
}
void QIdentityProxyModelPrivate::_q_sourceLayoutChanged()
{
if (ignoreNextLayoutChanged)
return;
Q_Q(QIdentityProxyModel);
for (int i = 0; i < proxyIndexes.size(); ++i) {
q->changePersistentIndex(proxyIndexes.at(i), q->mapFromSource(layoutChangePersistentIndexes.at(i)));
}
layoutChangePersistentIndexes.clear();
proxyIndexes.clear();
q->layoutChanged();
}
void QIdentityProxyModelPrivate::_q_sourceModelAboutToBeReset()
{
Q_Q(QIdentityProxyModel);
q->beginResetModel();
}
void QIdentityProxyModelPrivate::_q_sourceModelReset()
{
Q_Q(QIdentityProxyModel);
q->endResetModel();
}
void QIdentityProxyModelPrivate::_q_sourceRowsAboutToBeInserted(const QModelIndex &parent, int start, int end)
{
Q_ASSERT(parent.isValid() ? parent.model() == model : true);
Q_Q(QIdentityProxyModel);
q->beginInsertRows(q->mapFromSource(parent), start, end);
}
void QIdentityProxyModelPrivate::_q_sourceRowsAboutToBeMoved(const QModelIndex &sourceParent, int sourceStart, int sourceEnd, const QModelIndex &destParent, int dest)
{
Q_ASSERT(sourceParent.isValid() ? sourceParent.model() == model : true);
Q_ASSERT(destParent.isValid() ? destParent.model() == model : true);
Q_Q(QIdentityProxyModel);
q->beginMoveRows(q->mapFromSource(sourceParent), sourceStart, sourceEnd, q->mapFromSource(destParent), dest);
}
void QIdentityProxyModelPrivate::_q_sourceRowsAboutToBeRemoved(const QModelIndex &parent, int start, int end)
{
Q_ASSERT(parent.isValid() ? parent.model() == model : true);
Q_Q(QIdentityProxyModel);
q->beginRemoveRows(q->mapFromSource(parent), start, end);
}
void QIdentityProxyModelPrivate::_q_sourceRowsInserted(const QModelIndex &parent, int start, int end)
{
Q_ASSERT(parent.isValid() ? parent.model() == model : true);
Q_Q(QIdentityProxyModel);
Q_UNUSED(parent)
Q_UNUSED(start)
Q_UNUSED(end)
q->endInsertRows();
}
void QIdentityProxyModelPrivate::_q_sourceRowsMoved(const QModelIndex &sourceParent, int sourceStart, int sourceEnd, const QModelIndex &destParent, int dest)
{
Q_ASSERT(sourceParent.isValid() ? sourceParent.model() == model : true);
Q_ASSERT(destParent.isValid() ? destParent.model() == model : true);
Q_Q(QIdentityProxyModel);
Q_UNUSED(sourceParent)
Q_UNUSED(sourceStart)
Q_UNUSED(sourceEnd)
Q_UNUSED(destParent)
Q_UNUSED(dest)
q->endMoveRows();
}
void QIdentityProxyModelPrivate::_q_sourceRowsRemoved(const QModelIndex &parent, int start, int end)
{
Q_ASSERT(parent.isValid() ? parent.model() == model : true);
Q_Q(QIdentityProxyModel);
Q_UNUSED(parent)
Q_UNUSED(start)
Q_UNUSED(end)
q->endRemoveRows();
}
QT_END_NAMESPACE
#include "moc_qidentityproxymodel.cpp"
#endif // QT_NO_IDENTITYPROXYMODEL

View File

@ -0,0 +1,115 @@
/****************************************************************************
**
** Copyright (C) 2011 Klarälvdalens Datakonsult AB,
** a KDAB Group company, info@kdab.com,
** author Stephen Kelly <stephen.kelly@kdab.com>
** All rights reserved.
** Contact: Nokia Corporation (info@qt.nokia.com)
**
** This file is part of the QtGui module of the Qt Toolkit.
**
** GNU Lesser General Public License Usage
** Alternatively, this file may be used under the terms of the GNU Lesser
** General Public License version 2.1 as published by the Free Software
** Foundation and appearing in the file LICENSE.LGPL included in the
** packaging of this file. Please review the following information to
** ensure the GNU Lesser General Public License version 2.1 requirements
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
**
** In addition, as a special exception, Nokia gives you certain additional
** rights. These rights are described in the Nokia Qt LGPL Exception
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU General
** Public License version 3.0 as published by the Free Software Foundation
** and appearing in the file LICENSE.GPL included in the packaging of this
** file. Please review the following information to ensure the GNU General
** Public License version 3.0 requirements will be met:
** http://www.gnu.org/copyleft/gpl.html.
**
** Other Usage
** Alternatively, this file may be used in accordance with the terms and
** conditions contained in a signed written agreement between you and Nokia.
**
****************************************************************************/
#ifndef QIDENTITYPROXYMODEL_H
#define QIDENTITYPROXYMODEL_H
#include <QtWidgets/qabstractproxymodel.h>
#ifndef QT_NO_IDENTITYPROXYMODEL
QT_BEGIN_HEADER
QT_BEGIN_NAMESPACE
QT_MODULE(Gui)
class QIdentityProxyModelPrivate;
class Q_GUI_EXPORT QIdentityProxyModel : public QAbstractProxyModel
{
Q_OBJECT
public:
explicit QIdentityProxyModel(QObject* parent = 0);
~QIdentityProxyModel();
int columnCount(const QModelIndex& parent = QModelIndex()) const;
QModelIndex index(int row, int column, const QModelIndex& parent = QModelIndex()) const;
QModelIndex mapFromSource(const QModelIndex& sourceIndex) const;
QModelIndex mapToSource(const QModelIndex& proxyIndex) const;
QModelIndex parent(const QModelIndex& child) const;
int rowCount(const QModelIndex& parent = QModelIndex()) const;
bool dropMimeData(const QMimeData* data, Qt::DropAction action, int row, int column, const QModelIndex& parent);
QItemSelection mapSelectionFromSource(const QItemSelection& selection) const;
QItemSelection mapSelectionToSource(const QItemSelection& selection) const;
QModelIndexList match(const QModelIndex& start, int role, const QVariant& value, int hits = 1, Qt::MatchFlags flags = Qt::MatchFlags(Qt::MatchStartsWith|Qt::MatchWrap)) const;
void setSourceModel(QAbstractItemModel* sourceModel);
bool insertColumns(int column, int count, const QModelIndex& parent = QModelIndex());
bool insertRows(int row, int count, const QModelIndex& parent = QModelIndex());
bool removeColumns(int column, int count, const QModelIndex& parent = QModelIndex());
bool removeRows(int row, int count, const QModelIndex& parent = QModelIndex());
protected:
QIdentityProxyModel(QIdentityProxyModelPrivate &dd, QObject* parent);
private:
Q_DECLARE_PRIVATE(QIdentityProxyModel)
Q_DISABLE_COPY(QIdentityProxyModel)
Q_PRIVATE_SLOT(d_func(), void _q_sourceRowsAboutToBeInserted(QModelIndex,int,int))
Q_PRIVATE_SLOT(d_func(), void _q_sourceRowsInserted(QModelIndex,int,int))
Q_PRIVATE_SLOT(d_func(), void _q_sourceRowsAboutToBeRemoved(QModelIndex,int,int))
Q_PRIVATE_SLOT(d_func(), void _q_sourceRowsRemoved(QModelIndex,int,int))
Q_PRIVATE_SLOT(d_func(), void _q_sourceRowsAboutToBeMoved(QModelIndex,int,int,QModelIndex,int))
Q_PRIVATE_SLOT(d_func(), void _q_sourceRowsMoved(QModelIndex,int,int,QModelIndex,int))
Q_PRIVATE_SLOT(d_func(), void _q_sourceColumnsAboutToBeInserted(QModelIndex,int,int))
Q_PRIVATE_SLOT(d_func(), void _q_sourceColumnsInserted(QModelIndex,int,int))
Q_PRIVATE_SLOT(d_func(), void _q_sourceColumnsAboutToBeRemoved(QModelIndex,int,int))
Q_PRIVATE_SLOT(d_func(), void _q_sourceColumnsRemoved(QModelIndex,int,int))
Q_PRIVATE_SLOT(d_func(), void _q_sourceColumnsAboutToBeMoved(QModelIndex,int,int,QModelIndex,int))
Q_PRIVATE_SLOT(d_func(), void _q_sourceColumnsMoved(QModelIndex,int,int,QModelIndex,int))
Q_PRIVATE_SLOT(d_func(), void _q_sourceDataChanged(QModelIndex,QModelIndex))
Q_PRIVATE_SLOT(d_func(), void _q_sourceHeaderDataChanged(Qt::Orientation orientation, int first, int last))
Q_PRIVATE_SLOT(d_func(), void _q_sourceLayoutAboutToBeChanged())
Q_PRIVATE_SLOT(d_func(), void _q_sourceLayoutChanged())
Q_PRIVATE_SLOT(d_func(), void _q_sourceModelAboutToBeReset())
Q_PRIVATE_SLOT(d_func(), void _q_sourceModelReset())
};
QT_END_NAMESPACE
QT_END_HEADER
#endif // QT_NO_IDENTITYPROXYMODEL
#endif // QIDENTITYPROXYMODEL_H

View File

@ -1502,7 +1502,7 @@ void QSortFilterProxyModelPrivate::_q_sourceColumnsRemoved(
\l{Model Subclassing Reference}.
\sa QAbstractProxyModel, QAbstractItemModel, {Model/View Programming},
{Basic Sort/Filter Model Example}, {Custom Sort/Filter Model Example}
{Basic Sort/Filter Model Example}, {Custom Sort/Filter Model Example}, QIdentityProxyModel
*/
/*!

View File

@ -295,6 +295,7 @@ QWidgetPrivate::QWidgetPrivate(int version)
#ifndef QT_NO_IM
, inheritsInputMethodHints(0)
#endif
, inSetParent(0)
#if defined(Q_WS_X11)
, picture(0)
#elif defined(Q_WS_WIN)
@ -2568,6 +2569,22 @@ WId QWidget::effectiveWinId() const
if (id || !testAttribute(Qt::WA_WState_Created))
return id;
QWidget *realParent = nativeParentWidget();
if (!realParent && d_func()->inSetParent) {
// In transitional state. This is really just a workaround. The real problem
// is that QWidgetPrivate::setParent_sys (platform specific code) first sets
// the window id to 0 (setWinId(0)) before it sets the Qt::WA_WState_Created
// attribute to false. The correct way is to do it the other way around, and
// in that case the Qt::WA_WState_Created logic above will kick in and
// return 0 whenever the widget is in a transitional state. However, changing
// the original logic for all platforms is far more intrusive and might
// break existing applications.
// Note: The widget can only be in a transitional state when changing its
// parent -- everything else is an internal error -- hence explicitly checking
// against 'inSetParent' rather than doing an unconditional return whenever
// 'realParent' is 0 (which may cause strange artifacts and headache later).
return 0;
}
// This widget *must* have a native parent widget.
Q_ASSERT(realParent);
Q_ASSERT(realParent->internalWinId());
return realParent->internalWinId();
@ -10080,6 +10097,7 @@ void QWidget::setParent(QWidget *parent)
void QWidget::setParent(QWidget *parent, Qt::WindowFlags f)
{
Q_D(QWidget);
d->inSetParent = true;
bool resized = testAttribute(Qt::WA_Resized);
bool wasCreated = testAttribute(Qt::WA_WState_Created);
QWidget *oldtlw = window();
@ -10240,6 +10258,8 @@ void QWidget::setParent(QWidget *parent, Qt::WindowFlags f)
ancestorProxy->d_func()->embedSubWindow(this);
}
#endif
d->inSetParent = false;
}
/*!

View File

@ -769,6 +769,7 @@ public:
#ifndef QT_NO_IM
uint inheritsInputMethodHints : 1;
#endif
uint inSetParent : 1;
// *************************** Platform specific ************************************
#if defined(Q_WS_X11) // <----------------------------------------------------------- X11

View File

@ -576,6 +576,11 @@ void QWidgetPrivate::show_sys()
if (isFullscreen) {
const bool cbaVisible = S60->buttonGroupContainer() && S60->buttonGroupContainer()->IsVisible();
S60->setStatusPaneAndButtonGroupVisibility(false, cbaVisible);
if (cbaVisible) {
// Fix window dimensions as without screen furniture they will have
// defaulted to full screen dimensions initially.
id->handleClientAreaChange();
}
}
}
}

View File

@ -1585,7 +1585,7 @@ void QLineControl::processKeyEvent(QKeyEvent* event)
}
bool unknown = false;
bool visual = cursorMoveStyle() == QTextCursor::Visual;
bool visual = cursorMoveStyle() == Qt::VisualMoveStyle;
if (false) {
}

View File

@ -160,8 +160,8 @@ public:
int cursorWidth() const { return m_cursorWidth; }
void setCursorWidth(int value) { m_cursorWidth = value; }
QTextCursor::MoveStyle cursorMoveStyle() const { return m_textLayout.cursorMoveStyle(); }
void setCursorMoveStyle(QTextCursor::MoveStyle style) { m_textLayout.setCursorMoveStyle(style); }
Qt::CursorMoveStyle cursorMoveStyle() const { return m_textLayout.cursorMoveStyle(); }
void setCursorMoveStyle(Qt::CursorMoveStyle style) { m_textLayout.setCursorMoveStyle(style); }
void moveCursor(int pos, bool mark = false);
void cursorForward(bool mark, int steps)
@ -169,11 +169,11 @@ public:
int c = m_cursor;
if (steps > 0) {
while (steps--)
c = cursorMoveStyle() == QTextCursor::Visual ? m_textLayout.rightCursorPosition(c)
c = cursorMoveStyle() == Qt::VisualMoveStyle ? m_textLayout.rightCursorPosition(c)
: m_textLayout.nextCursorPosition(c);
} else if (steps < 0) {
while (steps++)
c = cursorMoveStyle() == QTextCursor::Visual ? m_textLayout.leftCursorPosition(c)
c = cursorMoveStyle() == Qt::VisualMoveStyle ? m_textLayout.leftCursorPosition(c)
: m_textLayout.previousCursorPosition(c);
}
moveCursor(c, mark);

View File

@ -13,6 +13,8 @@ irix-cc*:QMAKE_CXXFLAGS += -no_prelink -ptused
unix|win32-g++*:QMAKE_PKGCONFIG_REQUIRES = QtCore
HEADERS += $$QT_SOURCE_TREE/src/widgets/qtwidgetsversion.h
include(../qbase.pri)
contains(QT_CONFIG, x11sm):CONFIG += x11sm

View File

@ -1116,24 +1116,24 @@ void QLineEdit::setDragEnabled(bool b)
\brief the movement style of cursor in this line edit
\since 4.8
When this property is set to QTextCursor::Visual, the line edit will use visual
When this property is set to Qt::VisualMoveStyle, the line edit will use visual
movement style. Pressing the left arrow key will always cause the cursor to move
left, regardless of the text's writing direction. The same behavior applies to
right arrow key.
When the property is QTextCursor::Logical (the default), within a LTR text block,
When the property is Qt::LogicalMoveStyle (the default), within a LTR text block,
increase cursor position when pressing left arrow key, decrease cursor position
when pressing the right arrow key. If the text block is right to left, the opposite
behavior applies.
*/
QTextCursor::MoveStyle QLineEdit::cursorMoveStyle() const
Qt::CursorMoveStyle QLineEdit::cursorMoveStyle() const
{
Q_D(const QLineEdit);
return d->control->cursorMoveStyle();
}
void QLineEdit::setCursorMoveStyle(QTextCursor::MoveStyle style)
void QLineEdit::setCursorMoveStyle(Qt::CursorMoveStyle style)
{
Q_D(QLineEdit);
d->control->setCursorMoveStyle(style);

View File

@ -85,6 +85,7 @@ class Q_GUI_EXPORT QLineEdit : public QWidget
Q_PROPERTY(bool redoAvailable READ isRedoAvailable)
Q_PROPERTY(bool acceptableInput READ hasAcceptableInput)
Q_PROPERTY(QString placeholderText READ placeholderText WRITE setPlaceholderText)
Q_PROPERTY(Qt::CursorMoveStyle cursorMoveStyle READ cursorMoveStyle WRITE setCursorMoveStyle)
public:
explicit QLineEdit(QWidget* parent=0);
@ -159,8 +160,8 @@ public:
void setDragEnabled(bool b);
bool dragEnabled() const;
void setCursorMoveStyle(QTextCursor::MoveStyle style);
QTextCursor::MoveStyle cursorMoveStyle() const;
void setCursorMoveStyle(Qt::CursorMoveStyle style);
Qt::CursorMoveStyle cursorMoveStyle() const;
QString inputMask() const;
void setInputMask(const QString &inputMask);

View File

@ -12,6 +12,8 @@ unix|win32-g++*:QMAKE_PKGCONFIG_REQUIRES = QtCore
include(../qbase.pri)
HEADERS += $$QT_SOURCE_TREE/src/xml/qtxmlversion.h
PRECOMPILED_HEADER = ../corelib/global/qt_pch.h
win32-borland {

View File

@ -28,6 +28,15 @@
"qtconcurrentmap.h" => "QtConcurrentMap",
"qtconcurrentfilter.h" => "QtConcurrentFilter",
"qtconcurrentrun.h" => "QtConcurrentRun",
"qtcoreversion.h" => "QtCoreVersion",
"qtdbusversion.h" => "QtDBusVersion",
"qtguiversion.h" => "QtGuiVersion",
"qtnetworkversion.h" => "QtNetworkVersion",
"qtopenglversion.h" => "QtOpenGLVersion",
"qtopenvgversion.h" => "QtOpenVGVersion",
"qtsqlversion.h" => "QtSqlVersion",
"qttestversion.h" => "QtTestVersion",
"qtxmlversion.h" => "QtXmlVersion",
);
%mastercontent = (
"core" => "#include <QtCore/QtCore>\n",

View File

@ -84,6 +84,7 @@ SUBDIRS=\
qheaderview \
qicoimageformat \
qicon \
qidentityproxymodel \
qimageiohandler \
qimagereader \
qimagewriter \
@ -102,7 +103,7 @@ SUBDIRS=\
qlistview \
qlistwidget \
qlocale \
qlocalsocket \
#qlocalsocket \ # FIXME: uses qtscript, shouldn't be in qtbase
qmacstyle \
qmainwindow \
qmatrixnxn \

View File

@ -1,5 +1,5 @@
load(qttest_p4)
QT += xml svg
QT += xml
contains(QT_CONFIG, opengl)|contains(QT_CONFIG, opengles1)|contains(QT_CONFIG, opengles2):QT += opengl
SOURCES += tst_lancelot.cpp \

View File

@ -214,7 +214,7 @@ void tst_QComplexText::bidiCursorMovement()
QTextOption option = layout.textOption();
option.setTextDirection(basicDir == QChar::DirL ? Qt::LeftToRight : Qt::RightToLeft);
layout.setTextOption(option);
layout.setCursorMoveStyle(QTextCursor::Visual);
layout.setCursorMoveStyle(Qt::VisualMoveStyle);
bool moved;
int oldPos, newPos = 0;
qreal x, newX;

View File

@ -0,0 +1,6 @@
load(qttest_p4)
INCLUDEPATH += $$PWD/../modeltest
SOURCES += tst_qidentityproxymodel.cpp ../modeltest/dynamictreemodel.cpp ../modeltest/modeltest.cpp
HEADERS += ../modeltest/dynamictreemodel.h ../modeltest/modeltest.h

View File

@ -0,0 +1,329 @@
/****************************************************************************
**
** Copyright (C) 2011 Klarälvdalens Datakonsult AB,
** a KDAB Group company, info@kdab.com,
** author Stephen Kelly <stephen.kelly@kdab.com>
** All rights reserved.
** Contact: Nokia Corporation (info@qt.nokia.com)
**
** This file is part of the QtGui module of the Qt Toolkit.
**
** GNU Lesser General Public License Usage
** Alternatively, this file may be used under the terms of the GNU Lesser
** General Public License version 2.1 as published by the Free Software
** Foundation and appearing in the file LICENSE.LGPL included in the
** packaging of this file. Please review the following information to
** ensure the GNU Lesser General Public License version 2.1 requirements
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
**
** In addition, as a special exception, Nokia gives you certain additional
** rights. These rights are described in the Nokia Qt LGPL Exception
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU General
** Public License version 3.0 as published by the Free Software Foundation
** and appearing in the file LICENSE.GPL included in the packaging of this
** file. Please review the following information to ensure the GNU General
** Public License version 3.0 requirements will be met:
** http://www.gnu.org/copyleft/gpl.html.
**
** Other Usage
** Alternatively, this file may be used in accordance with the terms and
** conditions contained in a signed written agreement between you and Nokia.
**
****************************************************************************/
#include <QtTest/QtTest>
#include "../../shared/util.h"
#include <QtCore>
#include <QtGui>
#include "dynamictreemodel.h"
#include "qidentityproxymodel.h"
//TESTED CLASS=
//TESTED_FILES=
Q_DECLARE_METATYPE(QModelIndex)
class tst_QIdentityProxyModel : public QObject
{
Q_OBJECT
public:
tst_QIdentityProxyModel();
virtual ~tst_QIdentityProxyModel();
public slots:
void initTestCase();
void cleanupTestCase();
void init();
void cleanup();
private slots:
void insertRows();
void removeRows();
void moveRows();
void reset();
protected:
void verifyIdentity(QAbstractItemModel *model, const QModelIndex &parent = QModelIndex());
private:
QStandardItemModel *m_model;
QIdentityProxyModel *m_proxy;
};
tst_QIdentityProxyModel::tst_QIdentityProxyModel()
: m_model(0), m_proxy(0)
{
}
tst_QIdentityProxyModel::~tst_QIdentityProxyModel()
{
}
void tst_QIdentityProxyModel::initTestCase()
{
qRegisterMetaType<QModelIndex>("QModelIndex");
m_model = new QStandardItemModel(0, 1);
m_proxy = new QIdentityProxyModel();
}
void tst_QIdentityProxyModel::cleanupTestCase()
{
delete m_proxy;
delete m_model;
}
void tst_QIdentityProxyModel::init()
{
}
void tst_QIdentityProxyModel::cleanup()
{
m_model->clear();
m_model->insertColumns(0, 1);
}
void tst_QIdentityProxyModel::verifyIdentity(QAbstractItemModel *model, const QModelIndex &parent)
{
const int rows = model->rowCount(parent);
const int columns = model->columnCount(parent);
const QModelIndex proxyParent = m_proxy->mapFromSource(parent);
QVERIFY(m_proxy->mapToSource(proxyParent) == parent);
QVERIFY(rows == m_proxy->rowCount(proxyParent));
QVERIFY(columns == m_proxy->columnCount(proxyParent));
for (int row = 0; row < rows; ++row) {
for (int column = 0; column < columns; ++column) {
const QModelIndex idx = model->index(row, column, parent);
const QModelIndex proxyIdx = m_proxy->mapFromSource(idx);
QVERIFY(proxyIdx.model() == m_proxy);
QVERIFY(m_proxy->mapToSource(proxyIdx) == idx);
QVERIFY(proxyIdx.isValid());
QVERIFY(proxyIdx.row() == row);
QVERIFY(proxyIdx.column() == column);
QVERIFY(proxyIdx.parent() == proxyParent);
QVERIFY(proxyIdx.data() == idx.data());
QVERIFY(proxyIdx.flags() == idx.flags());
const int childCount = m_proxy->rowCount(proxyIdx);
const bool hasChildren = m_proxy->hasChildren(proxyIdx);
QVERIFY(model->hasChildren(idx) == hasChildren);
QVERIFY((childCount > 0) == hasChildren);
if (hasChildren)
verifyIdentity(model, idx);
}
}
}
/*
tests
*/
void tst_QIdentityProxyModel::insertRows()
{
QStandardItem *parentItem = m_model->invisibleRootItem();
for (int i = 0; i < 4; ++i) {
QStandardItem *item = new QStandardItem(QString("item %0").arg(i));
parentItem->appendRow(item);
parentItem = item;
}
m_proxy->setSourceModel(m_model);
verifyIdentity(m_model);
QSignalSpy modelBeforeSpy(m_model, SIGNAL(rowsAboutToBeInserted(QModelIndex,int,int)));
QSignalSpy modelAfterSpy(m_model, SIGNAL(rowsInserted(QModelIndex,int,int)));
QSignalSpy proxyBeforeSpy(m_proxy, SIGNAL(rowsAboutToBeInserted(QModelIndex,int,int)));
QSignalSpy proxyAfterSpy(m_proxy, SIGNAL(rowsInserted(QModelIndex,int,int)));
QStandardItem *item = new QStandardItem(QString("new item"));
parentItem->appendRow(item);
QVERIFY(modelBeforeSpy.size() == 1 && 1 == proxyBeforeSpy.size());
QVERIFY(modelAfterSpy.size() == 1 && 1 == proxyAfterSpy.size());
QVERIFY(modelBeforeSpy.first().first().value<QModelIndex>() == m_proxy->mapToSource(proxyBeforeSpy.first().first().value<QModelIndex>()));
QVERIFY(modelBeforeSpy.first().at(1) == proxyBeforeSpy.first().at(1));
QVERIFY(modelBeforeSpy.first().at(2) == proxyBeforeSpy.first().at(2));
QVERIFY(modelAfterSpy.first().first().value<QModelIndex>() == m_proxy->mapToSource(proxyAfterSpy.first().first().value<QModelIndex>()));
QVERIFY(modelAfterSpy.first().at(1) == proxyAfterSpy.first().at(1));
QVERIFY(modelAfterSpy.first().at(2) == proxyAfterSpy.first().at(2));
verifyIdentity(m_model);
}
void tst_QIdentityProxyModel::removeRows()
{
QStandardItem *parentItem = m_model->invisibleRootItem();
for (int i = 0; i < 4; ++i) {
QStandardItem *item = new QStandardItem(QString("item %0").arg(i));
parentItem->appendRow(item);
parentItem = item;
}
m_proxy->setSourceModel(m_model);
verifyIdentity(m_model);
QSignalSpy modelBeforeSpy(m_model, SIGNAL(rowsAboutToBeRemoved(QModelIndex,int,int)));
QSignalSpy modelAfterSpy(m_model, SIGNAL(rowsRemoved(QModelIndex,int,int)));
QSignalSpy proxyBeforeSpy(m_proxy, SIGNAL(rowsAboutToBeRemoved(QModelIndex,int,int)));
QSignalSpy proxyAfterSpy(m_proxy, SIGNAL(rowsRemoved(QModelIndex,int,int)));
const QModelIndex topLevel = m_model->index(0, 0, QModelIndex());
const QModelIndex secondLevel = m_model->index(0, 0, topLevel);
const QModelIndex thirdLevel = m_model->index(0, 0, secondLevel);
QVERIFY(thirdLevel.isValid());
m_model->removeRow(0, secondLevel);
QVERIFY(modelBeforeSpy.size() == 1 && 1 == proxyBeforeSpy.size());
QVERIFY(modelAfterSpy.size() == 1 && 1 == proxyAfterSpy.size());
QVERIFY(modelBeforeSpy.first().first().value<QModelIndex>() == m_proxy->mapToSource(proxyBeforeSpy.first().first().value<QModelIndex>()));
QVERIFY(modelBeforeSpy.first().at(1) == proxyBeforeSpy.first().at(1));
QVERIFY(modelBeforeSpy.first().at(2) == proxyBeforeSpy.first().at(2));
QVERIFY(modelAfterSpy.first().first().value<QModelIndex>() == m_proxy->mapToSource(proxyAfterSpy.first().first().value<QModelIndex>()));
QVERIFY(modelAfterSpy.first().at(1) == proxyAfterSpy.first().at(1));
QVERIFY(modelAfterSpy.first().at(2) == proxyAfterSpy.first().at(2));
verifyIdentity(m_model);
}
void tst_QIdentityProxyModel::moveRows()
{
DynamicTreeModel model;
{
ModelInsertCommand insertCommand(&model);
insertCommand.setStartRow(0);
insertCommand.setEndRow(9);
insertCommand.doCommand();
}
{
ModelInsertCommand insertCommand(&model);
insertCommand.setAncestorRowNumbers(QList<int>() << 5);
insertCommand.setStartRow(0);
insertCommand.setEndRow(9);
insertCommand.doCommand();
}
m_proxy->setSourceModel(&model);
verifyIdentity(&model);
QSignalSpy modelBeforeSpy(&model, SIGNAL(rowsAboutToBeMoved(QModelIndex,int,int,QModelIndex,int)));
QSignalSpy modelAfterSpy(&model, SIGNAL(rowsMoved(QModelIndex,int,int,QModelIndex,int)));
QSignalSpy proxyBeforeSpy(m_proxy, SIGNAL(rowsAboutToBeMoved(QModelIndex,int,int,QModelIndex,int)));
QSignalSpy proxyAfterSpy(m_proxy, SIGNAL(rowsMoved(QModelIndex,int,int,QModelIndex,int)));
{
ModelMoveCommand moveCommand(&model, 0);
moveCommand.setAncestorRowNumbers(QList<int>() << 5);
moveCommand.setStartRow(3);
moveCommand.setEndRow(4);
moveCommand.setDestRow(1);
moveCommand.doCommand();
}
QVERIFY(modelBeforeSpy.size() == 1 && 1 == proxyBeforeSpy.size());
QVERIFY(modelAfterSpy.size() == 1 && 1 == proxyAfterSpy.size());
QVERIFY(modelBeforeSpy.first().first().value<QModelIndex>() == m_proxy->mapToSource(proxyBeforeSpy.first().first().value<QModelIndex>()));
QVERIFY(modelBeforeSpy.first().at(1) == proxyBeforeSpy.first().at(1));
QVERIFY(modelBeforeSpy.first().at(2) == proxyBeforeSpy.first().at(2));
QVERIFY(modelBeforeSpy.first().at(3).value<QModelIndex>() == m_proxy->mapToSource(proxyBeforeSpy.first().at(3).value<QModelIndex>()));
QVERIFY(modelBeforeSpy.first().at(4) == proxyBeforeSpy.first().at(4));
QVERIFY(modelAfterSpy.first().first().value<QModelIndex>() == m_proxy->mapToSource(proxyAfterSpy.first().first().value<QModelIndex>()));
QVERIFY(modelAfterSpy.first().at(1) == proxyAfterSpy.first().at(1));
QVERIFY(modelAfterSpy.first().at(2) == proxyAfterSpy.first().at(2));
QVERIFY(modelAfterSpy.first().at(3).value<QModelIndex>() == m_proxy->mapToSource(proxyAfterSpy.first().at(3).value<QModelIndex>()));
QVERIFY(modelAfterSpy.first().at(4) == proxyAfterSpy.first().at(4));
verifyIdentity(&model);
m_proxy->setSourceModel(0);
}
void tst_QIdentityProxyModel::reset()
{
DynamicTreeModel model;
{
ModelInsertCommand insertCommand(&model);
insertCommand.setStartRow(0);
insertCommand.setEndRow(9);
insertCommand.doCommand();
}
{
ModelInsertCommand insertCommand(&model);
insertCommand.setAncestorRowNumbers(QList<int>() << 5);
insertCommand.setStartRow(0);
insertCommand.setEndRow(9);
insertCommand.doCommand();
}
m_proxy->setSourceModel(&model);
verifyIdentity(&model);
QSignalSpy modelBeforeSpy(&model, SIGNAL(modelAboutToBeReset()));
QSignalSpy modelAfterSpy(&model, SIGNAL(modelReset()));
QSignalSpy proxyBeforeSpy(m_proxy, SIGNAL(modelAboutToBeReset()));
QSignalSpy proxyAfterSpy(m_proxy, SIGNAL(modelReset()));
{
ModelResetCommandFixed resetCommand(&model, 0);
resetCommand.setAncestorRowNumbers(QList<int>() << 5);
resetCommand.setStartRow(3);
resetCommand.setEndRow(4);
resetCommand.setDestRow(1);
resetCommand.doCommand();
}
QVERIFY(modelBeforeSpy.size() == 1 && 1 == proxyBeforeSpy.size());
QVERIFY(modelAfterSpy.size() == 1 && 1 == proxyAfterSpy.size());
verifyIdentity(&model);
m_proxy->setSourceModel(0);
}
QTEST_MAIN(tst_QIdentityProxyModel)
#include "tst_qidentityproxymodel.moc"

View File

@ -151,6 +151,7 @@ private slots:
void rgbSwapped();
void deepCopyWhenPaintingActive();
void scaled_QTBUG19157();
};
tst_QImage::tst_QImage()
@ -2029,5 +2030,12 @@ void tst_QImage::deepCopyWhenPaintingActive()
QVERIFY(copy != image);
}
void tst_QImage::scaled_QTBUG19157()
{
QImage foo(5000, 1, QImage::Format_RGB32);
foo = foo.scaled(1024, 1024, Qt::KeepAspectRatio);
QVERIFY(!foo.isNull());
}
QTEST_MAIN(tst_QImage)
#include "tst_qimage.moc"

View File

@ -3815,7 +3815,7 @@ void tst_QLineEdit::bidiVisualMovement()
QLineEdit le;
le.setText(logical);
le.setCursorMoveStyle(QTextCursor::Visual);
le.setCursorMoveStyle(Qt::VisualMoveStyle);
le.setCursorPosition(0);
bool moved;
@ -3863,7 +3863,7 @@ void tst_QLineEdit::bidiLogicalMovement()
QLineEdit le;
le.setText(logical);
le.setCursorMoveStyle(QTextCursor::Logical);
le.setCursorMoveStyle(Qt::LogicalMoveStyle);
le.setCursorPosition(0);
bool moved;

View File

@ -4103,6 +4103,7 @@ void tst_QNetworkReply::ioPostToHttpFromMiddleOfQBufferFiveBytes()
QUrl url = "http://" + QtNetworkSettings::serverName() + "/qtest/protected/cgi-bin/md5sum.cgi";
QNetworkRequest request(url);
request.setRawHeader("Content-Type", "application/octet-stream");
QNetworkReplyPtr reply = manager.post(request, &uploadBuffer);
connect(reply, SIGNAL(finished()), &QTestEventLoop::instance(), SLOT(exitLoop()));
@ -4359,6 +4360,7 @@ void tst_QNetworkReply::ioPostToHttpUploadProgress()
// create the request
QUrl url = QUrl(QString("http://127.0.0.1:%1/").arg(server.serverPort()));
QNetworkRequest request(url);
request.setRawHeader("Content-Type", "application/octet-stream");
QNetworkReplyPtr reply = manager.post(request, &sourceFile);
QSignalSpy spy(reply, SIGNAL(uploadProgress(qint64,qint64)));
connect(&server, SIGNAL(newConnection()), &QTestEventLoop::instance(), SLOT(exitLoop()));

View File

@ -196,6 +196,7 @@ private slots:
#if defined(Q_OS_SYMBIAN) && !defined(QT_NO_OPENVG)
void vgImageReadBack();
#endif
void scaled_QTBUG19157();
};
static bool lenientCompare(const QPixmap &actual, const QPixmap &expected)
@ -1897,5 +1898,12 @@ void tst_QPixmap::vgImageReadBack()
}
#endif // Symbian & OpenVG
void tst_QPixmap::scaled_QTBUG19157()
{
QPixmap foo(5000, 1);
foo = foo.scaled(1024, 1024, Qt::KeepAspectRatio);
QVERIFY(!foo.isNull());
}
QTEST_MAIN(tst_QPixmap)
#include "tst_qpixmap.moc"

View File

@ -4,7 +4,7 @@ QT = core network
requires(contains(QT_CONFIG,private_tests))
include(../qnativesocketengine/qsocketengine.pri)
include(../platformsocketengine/platformsocketengine.pri)
symbian: TARGET.CAPABILITY = NetworkServices

View File

@ -53,6 +53,11 @@
#include <private/qnativesocketengine_p.h>
#define NATIVESOCKETENGINE QNativeSocketEngine
#endif
#ifdef Q_OS_UNIX
#include <private/qnet_unix_p.h>
#endif
#include <limits>
#include <select.h>
class tst_QSocketNotifier : public QObject
{
@ -64,6 +69,8 @@ public:
private slots:
void unexpectedDisconnection();
void mixingWithTimers();
void posixSockets();
void bogusFds();
};
tst_QSocketNotifier::tst_QSocketNotifier()
@ -114,6 +121,9 @@ signals:
void tst_QSocketNotifier::unexpectedDisconnection()
{
#ifdef Q_OS_SYMBIAN
QSKIP("Symbian socket engine pseudo descriptors can't be used for QSocketNotifier", SkipAll);
#else
/*
Given two sockets and two QSocketNotifiers registered on each
their socket. If both sockets receive data, and the first slot
@ -163,10 +173,14 @@ void tst_QSocketNotifier::unexpectedDisconnection()
UnexpectedDisconnectTester tester(&readEnd1, &readEnd2);
QTimer timer;
timer.setSingleShot(true);
timer.start(30000);
do {
// we have to wait until sequence value changes
// as any event can make us jump out processing
QCoreApplication::processEvents(QEventLoop::WaitForMoreEvents);
QVERIFY(timer.isActive); //escape if test would hang
} while(tester.sequence <= 0);
QVERIFY(readEnd1.state() == QAbstractSocket::ConnectedState);
@ -179,6 +193,7 @@ void tst_QSocketNotifier::unexpectedDisconnection()
writeEnd1->close();
writeEnd2->close();
server.close();
#endif
}
class MixingWithTimersHelper : public QObject
@ -243,5 +258,99 @@ void tst_QSocketNotifier::mixingWithTimers()
QCOMPARE(helper.socketActivated, true);
}
void tst_QSocketNotifier::posixSockets()
{
#ifndef Q_OS_UNIX
QSKIP("test only for posix", SkipAll);
#else
QTcpServer server;
QVERIFY(server.listen(QHostAddress::LocalHost, 0));
int posixSocket = qt_safe_socket(AF_INET, SOCK_STREAM, 0);
sockaddr_in addr;
addr.sin_addr.s_addr = htonl(0x7f000001);
addr.sin_family = AF_INET;
addr.sin_port = htons(server.serverPort());
qt_safe_connect(posixSocket, (const struct sockaddr*)&addr, sizeof(sockaddr_in));
QVERIFY(server.waitForNewConnection(5000));
QScopedPointer<QTcpSocket> passive(server.nextPendingConnection());
::fcntl(posixSocket, F_SETFL, ::fcntl(posixSocket, F_GETFL) | O_NONBLOCK);
{
QSocketNotifier rn(posixSocket, QSocketNotifier::Read);
connect(&rn, SIGNAL(activated(int)), &QTestEventLoop::instance(), SLOT(exitLoop()));
QSignalSpy readSpy(&rn, SIGNAL(activated(int)));
QSocketNotifier wn(posixSocket, QSocketNotifier::Write);
connect(&wn, SIGNAL(activated(int)), &QTestEventLoop::instance(), SLOT(exitLoop()));
QSignalSpy writeSpy(&wn, SIGNAL(activated(int)));
QSocketNotifier en(posixSocket, QSocketNotifier::Exception);
connect(&en, SIGNAL(activated(int)), &QTestEventLoop::instance(), SLOT(exitLoop()));
QSignalSpy errorSpy(&en, SIGNAL(activated(int)));
passive->write("hello",6);
passive->waitForBytesWritten(5000);
QTestEventLoop::instance().enterLoop(3);
QCOMPARE(readSpy.count(), 1);
QCOMPARE(writeSpy.count(), 0);
QCOMPARE(errorSpy.count(), 0);
char buffer[100];
qt_safe_read(posixSocket, buffer, 100);
QCOMPARE(buffer, "hello");
qt_safe_write(posixSocket, "goodbye", 8);
QTestEventLoop::instance().enterLoop(3);
QCOMPARE(readSpy.count(), 1);
QCOMPARE(writeSpy.count(), 1);
QCOMPARE(errorSpy.count(), 0);
QCOMPARE(passive->readAll(), QByteArray("goodbye",8));
}
qt_safe_close(posixSocket);
#endif
}
void tst_QSocketNotifier::bogusFds()
{
#ifndef Q_OS_WIN
QTest::ignoreMessage(QtWarningMsg, "QSocketNotifier: Internal error");
#endif
QSocketNotifier max(std::numeric_limits<int>::max(), QSocketNotifier::Read);
QTest::ignoreMessage(QtWarningMsg, "QSocketNotifier: Invalid socket specified");
#ifndef Q_OS_WIN
QTest::ignoreMessage(QtWarningMsg, "QSocketNotifier: Internal error");
#endif
QSocketNotifier min(std::numeric_limits<int>::min(), QSocketNotifier::Write);
#ifndef Q_OS_WIN
QTest::ignoreMessage(QtWarningMsg, "QSocketNotifier: Internal error");
#endif
//bogus magic number is the first pseudo socket descriptor from symbian socket engine.
QSocketNotifier bogus(0x40000000, QSocketNotifier::Exception);
QSocketNotifier largestlegal(FD_SETSIZE - 1, QSocketNotifier::Read);
QSignalSpy maxspy(&max, SIGNAL(activated(int)));
QSignalSpy minspy(&min, SIGNAL(activated(int)));
QSignalSpy bogspy(&bogus, SIGNAL(activated(int)));
QSignalSpy llspy(&largestlegal, SIGNAL(activated(int)));
//generate some unrelated socket activity
QTcpServer server;
QVERIFY(server.listen(QHostAddress::LocalHost));
connect(&server, SIGNAL(newConnection()), &QTestEventLoop::instance(), SLOT(exitLoop()));
QTcpSocket client;
client.connectToHost(QHostAddress::LocalHost, server.serverPort());
QTestEventLoop::instance().enterLoop(5);
QVERIFY(server.hasPendingConnections());
//check no activity on bogus notifiers
QCOMPARE(maxspy.count(), 0);
QCOMPARE(minspy.count(), 0);
QCOMPARE(bogspy.count(), 0);
QCOMPARE(llspy.count(), 0);
}
QTEST_MAIN(tst_QSocketNotifier)
#include <tst_qsocketnotifier.moc>

View File

@ -430,6 +430,9 @@ void tst_QTcpServer::waitForConnectionTest()
void tst_QTcpServer::setSocketDescriptor()
{
QTcpServer server;
#ifdef Q_OS_SYMBIAN
QTest::ignoreMessage(QtWarningMsg, "QSymbianSocketEngine::initialize - socket descriptor not found");
#endif
QVERIFY(!server.setSocketDescriptor(42));
QCOMPARE(server.serverError(), QAbstractSocket::UnsupportedSocketOperationError);
#ifndef Q_OS_SYMBIAN

View File

@ -13,7 +13,7 @@ vxworks:QT -= gui
symbian: {
TARGET.EPOCHEAPSIZE="0x100 0x3000000"
TARGET.CAPABILITY = NetworkServices
TARGET.CAPABILITY = NetworkServices ReadUserData
}
TARGET = tst_qtcpsocket

View File

@ -476,6 +476,9 @@ void tst_QTcpSocket::setInvalidSocketDescriptor()
{
QTcpSocket *socket = newSocket();
QCOMPARE(socket->socketDescriptor(), -1);
#ifdef Q_OS_SYMBIAN
QTest::ignoreMessage(QtWarningMsg, "QSymbianSocketEngine::initialize - socket descriptor not found");
#endif
QVERIFY(!socket->setSocketDescriptor(-5, QTcpSocket::UnconnectedState));
QCOMPARE(socket->socketDescriptor(), -1);

View File

@ -2292,7 +2292,7 @@ void tst_QTextEdit::bidiVisualMovement()
option.setTextDirection(basicDir == QChar::DirL ? Qt::LeftToRight : Qt::RightToLeft);
ed->document()->setDefaultTextOption(option);
ed->document()->setDefaultCursorMoveStyle(QTextCursor::Visual);
ed->document()->setDefaultCursorMoveStyle(Qt::VisualMoveStyle);
ed->moveCursor(QTextCursor::Start);
ed->show();
@ -2346,7 +2346,7 @@ void tst_QTextEdit::bidiLogicalMovement()
option.setTextDirection(basicDir == QChar::DirL ? Qt::LeftToRight : Qt::RightToLeft);
ed->document()->setDefaultTextOption(option);
ed->document()->setDefaultCursorMoveStyle(QTextCursor::Logical);
ed->document()->setDefaultCursorMoveStyle(Qt::LogicalMoveStyle);
ed->moveCursor(QTextCursor::Start);
ed->show();

View File

@ -2646,7 +2646,6 @@ void tst_QVariant::invalidAsByteArray()
void tst_QVariant::invalidQColor() const
{
QVariant va("An invalid QColor::name() value.");
QTest::ignoreMessage(QtWarningMsg, "QColor::setNamedColor: Unknown color name 'An invalid QColor::name() value.'");
QVERIFY(va.canConvert(QVariant::Color));
QVERIFY(!va.convert(QVariant::Color));

View File

@ -345,6 +345,7 @@ private slots:
void immediateRepaintAfterInvalidateBuffer();
#endif
void effectiveWinId();
void effectiveWinId2();
void customDpi();
void customDpiProperty();
@ -8495,6 +8496,30 @@ void tst_QWidget::effectiveWinId()
QVERIFY(child.effectiveWinId());
}
void tst_QWidget::effectiveWinId2()
{
QWidget parent;
class MyWidget : public QWidget {
bool event(QEvent *e)
{
if (e->type() == QEvent::WinIdChange) {
// Shouldn't crash.
effectiveWinId();
}
return QWidget::event(e);
}
};
MyWidget child;
child.setParent(&parent);
parent.show();
child.setParent(0);
child.setParent(&parent);
}
class CustomWidget : public QWidget
{
public: