From eae8fb85997d82ecec0743ba3e470681129bff41 Mon Sep 17 00:00:00 2001 From: Qt by Nokia Date: Wed, 27 Apr 2011 14:13:26 +0200 Subject: [PATCH 01/53] Initial import from qtquick2. Branched from the monolithic repo, Qt qtquick2 branch, at commit a4a585d2ee907746682846ae6e8a48e19deef469 --- mkspecs/features/qt.prf | 4 + src/corelib/animation/qabstractanimation.cpp | 56 ++++- src/corelib/animation/qabstractanimation.h | 3 + src/corelib/animation/qabstractanimation_p.h | 5 + src/corelib/io/qprocess_unix.cpp | 30 ++- src/corelib/kernel/qcoreapplication.cpp | 18 +- src/corelib/kernel/qcoreapplication.h | 1 + src/corelib/kernel/qcoreapplication_p.h | 2 + src/gui/kernel/qcocoaview_mac.mm | 1 - src/gui/kernel/qsessionmanager_qpa.cpp | 2 + src/gui/painting/qpaintengine_mac.cpp | 4 +- src/gui/text/qfontengine_ft_p.h | 9 +- src/gui/text/qfontengine_p.h | 8 + src/gui/text/qrawfont_p.h | 2 +- src/gui/text/qstatictext.cpp | 10 +- src/opengl/gl2paintengineex/qtriangulator.cpp | 17 +- src/opengl/gl2paintengineex/qtriangulator_p.h | 12 +- src/opengl/qgl.cpp | 31 +++ src/opengl/qgl.h | 10 + src/opengl/qgl_p.h | 6 +- src/opengl/qglfunctions.cpp | 198 +++++++++--------- src/opengl/qglfunctions.h | 7 + src/opengl/qglpaintdevice_p.h | 2 +- .../wayland_egl/qwaylandeglwindow.h | 1 - .../wayland_egl/wayland_egl.pri | 9 +- .../platforms/wayland/qwaylandbuffer.h | 1 + .../platforms/wayland/qwaylandinputdevice.cpp | 21 +- .../platforms/wayland/qwaylandintegration.cpp | 7 + .../platforms/wayland/qwaylandintegration.h | 3 + .../wayland/qwaylandnativeinterface.cpp | 72 +++++++ .../wayland/qwaylandnativeinterface.h | 60 ++++++ .../platforms/wayland/qwaylandwindow.h | 3 + src/plugins/platforms/wayland/wayland.pro | 2 + 33 files changed, 465 insertions(+), 152 deletions(-) create mode 100644 src/plugins/platforms/wayland/qwaylandnativeinterface.cpp create mode 100644 src/plugins/platforms/wayland/qwaylandnativeinterface.h diff --git a/mkspecs/features/qt.prf b/mkspecs/features/qt.prf index 191a449719..e4a5ef7162 100644 --- a/mkspecs/features/qt.prf +++ b/mkspecs/features/qt.prf @@ -35,6 +35,9 @@ plugin { #Qt plugins INCLUDEPATH = $$QMAKE_INCDIR_QT $$INCLUDEPATH #prepending prevents us from picking up "stale" includes win32:INCLUDEPATH += $$QMAKE_INCDIR_QT/ActiveQt +# As declarative now uses OpenGL in the API, force include it to avoid having to update all projects +contains(QT, declarative): QT += opengl + # As order does matter for static libs, we reorder the QT variable here TMPLIBS = declarative webkit phonon multimedia dbus testlib script scripttools svg qt3support sql xmlpatterns xml egl opengl openvg gui network core meegographicssystemhelper for(QTLIB, $$list($$TMPLIBS)) { @@ -48,6 +51,7 @@ for(QTLIB, $$list($$QT_UNKNOWN)) { !contains(TMPLIBS, $$QTLIB):message("Warning: unknown QT: $$QTLIB") } + QT_PLUGIN_VERIFY = QTPLUGIN DEPLOYMENT_PLUGIN for(QT_CURRENT_VERIFY, $$list($$QT_PLUGIN_VERIFY)) { for(QTPLUG, $$list($$lower($$unique($$QT_CURRENT_VERIFY)))) { diff --git a/src/corelib/animation/qabstractanimation.cpp b/src/corelib/animation/qabstractanimation.cpp index 602cf8a6fd..f399d7c4cf 100644 --- a/src/corelib/animation/qabstractanimation.cpp +++ b/src/corelib/animation/qabstractanimation.cpp @@ -260,7 +260,8 @@ void QUnifiedTimer::restartAnimationTimer() } else if (!driver->isRunning() || isPauseTimerActive) { driver->start(); isPauseTimerActive = false; - } + } else if (runningLeafAnimations == 0) + driver->stop(); } void QUnifiedTimer::setTimingInterval(int interval) @@ -389,19 +390,49 @@ int QUnifiedTimer::closestPauseAnimationTimeToFinish() return closestTimeToFinish; } + void QUnifiedTimer::installAnimationDriver(QAnimationDriver *d) { - if (driver->isRunning()) { - qWarning("QUnifiedTimer: Cannot change animation driver while animations are running"); + if (driver != &defaultDriver) { + qWarning("QUnifiedTimer: animation driver already installed..."); return; } - if (driver && driver != &defaultDriver) - delete driver; + if (driver->isRunning()) { + driver->stop(); + d->start(); + } driver = d; + } + +void QUnifiedTimer::uninstallAnimationDriver(QAnimationDriver *d) +{ + if (driver != d) { + qWarning("QUnifiedTimer: trying to uninstall a driver that is not installed..."); + return; + } + + driver = &defaultDriver; + + if (d->isRunning()) { + d->stop(); + driver->start(); + } +} + +/*! + Returns true if \a d is the currently installed animation driver + and is not the default animation driver (which can never be uninstalled). +*/ +bool QUnifiedTimer::canUninstallAnimationDriver(QAnimationDriver *d) +{ + return d == driver && driver != &defaultDriver; +} + + /*! \class QAnimationDriver @@ -424,6 +455,12 @@ QAnimationDriver::QAnimationDriver(QAnimationDriverPrivate &dd, QObject *parent) { } +QAnimationDriver::~QAnimationDriver() +{ + QUnifiedTimer *timer = QUnifiedTimer::instance(true); + if (timer->canUninstallAnimationDriver(this)) + uninstall(); +} /*! Advances the animation based on the current time. This function should @@ -453,6 +490,15 @@ void QAnimationDriver::install() timer->installAnimationDriver(this); } +/*! + Uninstalls this animation driver. + */ +void QAnimationDriver::uninstall() +{ + QUnifiedTimer *timer = QUnifiedTimer::instance(true); + timer->uninstallAnimationDriver(this); +} + bool QAnimationDriver::isRunning() const { return d_func()->running; diff --git a/src/corelib/animation/qabstractanimation.h b/src/corelib/animation/qabstractanimation.h index 0900870ce2..a0cb0f93d0 100644 --- a/src/corelib/animation/qabstractanimation.h +++ b/src/corelib/animation/qabstractanimation.h @@ -141,9 +141,12 @@ class Q_CORE_EXPORT QAnimationDriver : public QObject public: QAnimationDriver(QObject *parent = 0); + ~QAnimationDriver(); void advance(); + void install(); + void uninstall(); bool isRunning() const; diff --git a/src/corelib/animation/qabstractanimation_p.h b/src/corelib/animation/qabstractanimation_p.h index ba92960f6b..1cba4644a8 100644 --- a/src/corelib/animation/qabstractanimation_p.h +++ b/src/corelib/animation/qabstractanimation_p.h @@ -180,10 +180,15 @@ public: static void updateAnimationTimer(); void installAnimationDriver(QAnimationDriver *driver); + void uninstallAnimationDriver(QAnimationDriver *driver); + bool canUninstallAnimationDriver(QAnimationDriver *driver); void restartAnimationTimer(); void updateAnimationsTime(); + //useful for profiling/debugging + int runningAnimationCount() { return animations.count(); } + protected: void timerEvent(QTimerEvent *); diff --git a/src/corelib/io/qprocess_unix.cpp b/src/corelib/io/qprocess_unix.cpp index 3af9b46df8..f53742b815 100644 --- a/src/corelib/io/qprocess_unix.cpp +++ b/src/corelib/io/qprocess_unix.cpp @@ -171,17 +171,27 @@ private: Q_GLOBAL_STATIC(QMutex, processManagerGlobalMutex) -static QProcessManager *processManager() { +static QProcessManager *processManagerInstance = 0; + +static QProcessManager *processManager() +{ // The constructor of QProcessManager should be called only once // so we cannot use Q_GLOBAL_STATIC directly for QProcessManager QMutex *mutex = processManagerGlobalMutex(); QMutexLocker locker(mutex); - static QProcessManager processManager; - return &processManager; + + if (!processManagerInstance) + QProcessPrivate::initializeProcessManager(); + + Q_ASSERT(processManagerInstance); + return processManagerInstance; } QProcessManager::QProcessManager() { + // can only be called from main thread + Q_ASSERT(!qApp || qApp->thread() == QThread::currentThread()); + #if defined (QPROCESS_DEBUG) qDebug() << "QProcessManager::QProcessManager()"; #endif @@ -197,6 +207,8 @@ QProcessManager::QProcessManager() action.sa_handler = qt_sa_sigchld_handler; action.sa_flags = SA_NOCLDSTOP; ::sigaction(SIGCHLD, &action, &qt_sa_old_sigchld_handler); + + processManagerInstance = this; } QProcessManager::~QProcessManager() @@ -221,6 +233,8 @@ QProcessManager::~QProcessManager() if (currentAction.sa_handler == qt_sa_sigchld_handler) { ::sigaction(SIGCHLD, &qt_sa_old_sigchld_handler, 0); } + + processManagerInstance = 0; } void QProcessManager::run() @@ -1287,7 +1301,15 @@ bool QProcessPrivate::startDetached(const QString &program, const QStringList &a void QProcessPrivate::initializeProcessManager() { - (void) processManager(); + if (qApp && qApp->thread() != QThread::currentThread()) { + // The process manager must be initialized in the main thread + // Note: The call below will re-enter this function, but in the right thread, + // so the else statement below will be executed. + QMetaObject::invokeMethod(qApp, "_q_initializeProcessManager", Qt::BlockingQueuedConnection); + } else { + static QProcessManager processManager; + Q_UNUSED(processManager); + } } QT_END_NAMESPACE diff --git a/src/corelib/kernel/qcoreapplication.cpp b/src/corelib/kernel/qcoreapplication.cpp index be86c58d47..e0841cbadc 100644 --- a/src/corelib/kernel/qcoreapplication.cpp +++ b/src/corelib/kernel/qcoreapplication.cpp @@ -392,6 +392,16 @@ void QCoreApplicationPrivate::createEventDispatcher() #endif } +void QCoreApplicationPrivate::_q_initializeProcessManager() +{ +#ifndef QT_NO_PROCESS +# ifdef Q_OS_UNIX + QProcessPrivate::initializeProcessManager(); +# endif +#endif +} + + QThread *QCoreApplicationPrivate::theMainThread = 0; QThread *QCoreApplicationPrivate::mainThread() { @@ -656,12 +666,6 @@ void QCoreApplication::init() } #endif -#if defined(Q_OS_UNIX) && !(defined(QT_NO_PROCESS)) - // Make sure the process manager thread object is created in the main - // thread. - QProcessPrivate::initializeProcessManager(); -#endif - #ifdef QT_EVAL extern void qt_core_eval_init(uint); qt_core_eval_init(d->application_type); @@ -2728,3 +2732,5 @@ int QCoreApplication::loopLevel() */ QT_END_NAMESPACE + +#include "moc_qcoreapplication.cpp" diff --git a/src/corelib/kernel/qcoreapplication.h b/src/corelib/kernel/qcoreapplication.h index 3957158d83..024c5096c9 100644 --- a/src/corelib/kernel/qcoreapplication.h +++ b/src/corelib/kernel/qcoreapplication.h @@ -205,6 +205,7 @@ protected: QCoreApplication(QCoreApplicationPrivate &p); private: + Q_PRIVATE_SLOT(d_func(), void _q_initializeProcessManager()) static bool sendSpontaneousEvent(QObject *receiver, QEvent *event); bool notifyInternal(QObject *receiver, QEvent *event); diff --git a/src/corelib/kernel/qcoreapplication_p.h b/src/corelib/kernel/qcoreapplication_p.h index add2a3553e..fdceab4724 100644 --- a/src/corelib/kernel/qcoreapplication_p.h +++ b/src/corelib/kernel/qcoreapplication_p.h @@ -85,6 +85,8 @@ public: bool sendThroughObjectEventFilters(QObject *, QEvent *); bool notify_helper(QObject *, QEvent *); + void _q_initializeProcessManager(); + virtual QString appName() const; virtual void createEventDispatcher(); static void removePostedEvent(QEvent *); diff --git a/src/gui/kernel/qcocoaview_mac.mm b/src/gui/kernel/qcocoaview_mac.mm index b5e5d186b8..e885d1552c 100644 --- a/src/gui/kernel/qcocoaview_mac.mm +++ b/src/gui/kernel/qcocoaview_mac.mm @@ -334,7 +334,6 @@ static int qCocoaViewCount = 0; // // Qt will then forward the update to the children. if (qwidget->isWindow()) { - qwidget->update(qwidget->rect()); qwidgetprivate->syncBackingStore(qwidget->rect()); } } diff --git a/src/gui/kernel/qsessionmanager_qpa.cpp b/src/gui/kernel/qsessionmanager_qpa.cpp index ef532d7981..68685b4fed 100644 --- a/src/gui/kernel/qsessionmanager_qpa.cpp +++ b/src/gui/kernel/qsessionmanager_qpa.cpp @@ -42,6 +42,8 @@ #include #include +#include + #ifndef QT_NO_SESSIONMANAGER QT_BEGIN_NAMESPACE diff --git a/src/gui/painting/qpaintengine_mac.cpp b/src/gui/painting/qpaintengine_mac.cpp index 8aab7c7a4b..c6d061dea8 100644 --- a/src/gui/painting/qpaintengine_mac.cpp +++ b/src/gui/painting/qpaintengine_mac.cpp @@ -100,7 +100,9 @@ QMacCGContext::QMacCGContext(QPainter *p) int devType = p->device()->devType(); if (pe->type() == QPaintEngine::Raster - && (devType == QInternal::Widget || devType == QInternal::Pixmap)) { + && (devType == QInternal::Widget || + devType == QInternal::Pixmap || + devType == QInternal::Image)) { extern CGColorSpaceRef qt_mac_colorSpaceForDeviceType(const QPaintDevice *paintDevice); CGColorSpaceRef colorspace = qt_mac_colorSpaceForDeviceType(pe->paintDevice()); diff --git a/src/gui/text/qfontengine_ft_p.h b/src/gui/text/qfontengine_ft_p.h index 887efed843..8733498cb7 100644 --- a/src/gui/text/qfontengine_ft_p.h +++ b/src/gui/text/qfontengine_ft_p.h @@ -311,14 +311,7 @@ private: virtual HB_Error getPointInOutline(HB_Glyph glyph, int flags, hb_uint32 point, HB_Fixed *xpos, HB_Fixed *ypos, hb_uint32 *nPoints); - enum HintStyle { - HintNone, - HintLight, - HintMedium, - HintFull - }; - - void setDefaultHintStyle(HintStyle style); + virtual void setDefaultHintStyle(HintStyle style); HintStyle defaultHintStyle() const { return default_hint_style; } protected: diff --git a/src/gui/text/qfontengine_p.h b/src/gui/text/qfontengine_p.h index 5b39fd39ad..30277b5156 100644 --- a/src/gui/text/qfontengine_p.h +++ b/src/gui/text/qfontengine_p.h @@ -248,6 +248,14 @@ public: static QByteArray convertToPostscriptFontFamilyName(const QByteArray &fontFamily); + enum HintStyle { + HintNone, + HintLight, + HintMedium, + HintFull + }; + virtual void setDefaultHintStyle(HintStyle) { } + QAtomicInt ref; QFontDef fontDef; uint cache_cost; // amount of mem used in kb by the font diff --git a/src/gui/text/qrawfont_p.h b/src/gui/text/qrawfont_p.h index f9a9ab55cd..18f3e7d006 100644 --- a/src/gui/text/qrawfont_p.h +++ b/src/gui/text/qrawfont_p.h @@ -62,7 +62,7 @@ QT_BEGIN_NAMESPACE namespace { class CustomFontFileLoader; } -class Q_AUTOTEST_EXPORT QRawFontPrivate +class Q_GUI_EXPORT QRawFontPrivate { public: QRawFontPrivate() diff --git a/src/gui/text/qstatictext.cpp b/src/gui/text/qstatictext.cpp index 1cfb4b61f9..5bee497a3e 100644 --- a/src/gui/text/qstatictext.cpp +++ b/src/gui/text/qstatictext.cpp @@ -714,17 +714,13 @@ QStaticTextItem::~QStaticTextItem() { if (m_userData != 0 && !m_userData->ref.deref()) delete m_userData; - if (!m_fontEngine->ref.deref()) - delete m_fontEngine; + m_fontEngine->ref.deref(); } void QStaticTextItem::setFontEngine(QFontEngine *fe) { - if (m_fontEngine != 0) { - if (!m_fontEngine->ref.deref()) - delete m_fontEngine; - } - + if (m_fontEngine != 0) + m_fontEngine->ref.deref(); m_fontEngine = fe; if (m_fontEngine != 0) m_fontEngine->ref.ref(); diff --git a/src/opengl/gl2paintengineex/qtriangulator.cpp b/src/opengl/gl2paintengineex/qtriangulator.cpp index 94024f3d74..a5faa36b4a 100644 --- a/src/opengl/gl2paintengineex/qtriangulator.cpp +++ b/src/opengl/gl2paintengineex/qtriangulator.cpp @@ -1564,6 +1564,19 @@ QVertexSet QTriangulator::triangulate() template QVertexSet QTriangulator::polyline() { + for (int i = 0; i < m_vertices.size(); ++i) { + Q_ASSERT(qAbs(m_vertices.at(i).x) < (1 << 21)); + Q_ASSERT(qAbs(m_vertices.at(i).y) < (1 << 21)); + } + + if (!(m_hint & (QVectorPath::OddEvenFill | QVectorPath::WindingFill))) + m_hint |= QVectorPath::OddEvenFill; + + if (m_hint & QVectorPath::NonConvexShapeMask) { + ComplexToSimple c2s(this); + c2s.decompose(); + } + QVertexSet result; result.indices = m_indices; result.vertices.resize(2 * m_vertices.size()); @@ -3084,7 +3097,7 @@ QPolylineSet qPolyline(const QVectorPath &path, } else { QTriangulator triangulator; triangulator.initialize(path, matrix, lod); - QVertexSet vertexSet = triangulator.triangulate(); + QVertexSet vertexSet = triangulator.polyline(); polyLineSet.vertices = vertexSet.vertices; polyLineSet.indices.setDataUshort(vertexSet.indices); } @@ -3104,7 +3117,7 @@ QPolylineSet qPolyline(const QPainterPath &path, } else { QTriangulator triangulator; triangulator.initialize(path, matrix, lod); - QVertexSet vertexSet = triangulator.triangulate(); + QVertexSet vertexSet = triangulator.polyline(); polyLineSet.vertices = vertexSet.vertices; polyLineSet.indices.setDataUshort(vertexSet.indices); } diff --git a/src/opengl/gl2paintengineex/qtriangulator_p.h b/src/opengl/gl2paintengineex/qtriangulator_p.h index a205b923e9..081738addf 100644 --- a/src/opengl/gl2paintengineex/qtriangulator_p.h +++ b/src/opengl/gl2paintengineex/qtriangulator_p.h @@ -58,7 +58,7 @@ QT_BEGIN_NAMESPACE -class QVertexIndexVector +class Q_OPENGL_EXPORT QVertexIndexVector { public: enum Type { @@ -111,7 +111,7 @@ private: QVector indices16; }; -struct QTriangleSet +struct Q_OPENGL_EXPORT QTriangleSet { inline QTriangleSet() { } inline QTriangleSet(const QTriangleSet &other) : vertices(other.vertices), indices(other.indices) { } @@ -122,14 +122,14 @@ struct QTriangleSet QVertexIndexVector indices; // [i[0], j[0], k[0], i[1], j[1], k[1], i[2], ...] }; -struct QPolylineSet +struct Q_OPENGL_EXPORT QPolylineSet { inline QPolylineSet() { } inline QPolylineSet(const QPolylineSet &other) : vertices(other.vertices), indices(other.indices) { } QPolylineSet &operator = (const QPolylineSet &other) {vertices = other.vertices; indices = other.indices; return *this;} QVector vertices; // [x[0], y[0], x[1], y[1], x[2], ...] - QVertexIndexVector indices; + QVertexIndexVector indices; // End of polyline is marked with -1. }; // The vertex coordinates of the returned triangle set will be rounded to a grid with a mesh size @@ -139,9 +139,9 @@ struct QPolylineSet // 'lod' is the level of detail. Default is 1. Curves are split into more lines when 'lod' is higher. QTriangleSet qTriangulate(const qreal *polygon, int count, uint hint = QVectorPath::PolygonHint | QVectorPath::OddEvenFill, const QTransform &matrix = QTransform()); QTriangleSet qTriangulate(const QVectorPath &path, const QTransform &matrix = QTransform(), qreal lod = 1); -QTriangleSet qTriangulate(const QPainterPath &path, const QTransform &matrix = QTransform(), qreal lod = 1); +QTriangleSet Q_OPENGL_EXPORT qTriangulate(const QPainterPath &path, const QTransform &matrix = QTransform(), qreal lod = 1); QPolylineSet qPolyline(const QVectorPath &path, const QTransform &matrix = QTransform(), qreal lod = 1); -QPolylineSet qPolyline(const QPainterPath &path, const QTransform &matrix = QTransform(), qreal lod = 1); +QPolylineSet Q_OPENGL_EXPORT qPolyline(const QPainterPath &path, const QTransform &matrix = QTransform(), qreal lod = 1); QT_END_NAMESPACE diff --git a/src/opengl/qgl.cpp b/src/opengl/qgl.cpp index 057fb55e2c..7ce35f8d1c 100644 --- a/src/opengl/qgl.cpp +++ b/src/opengl/qgl.cpp @@ -43,6 +43,7 @@ #include "qplatformdefs.h" #include "qgl.h" #include +#include #if defined(Q_WS_X11) #include "private/qt_x11_p.h" @@ -1663,6 +1664,7 @@ const QGLContext *qt_gl_transfer_context(const QGLContext *ctx) QGLContextPrivate::QGLContextPrivate(QGLContext *context) : internal_context(false) , q_ptr(context) + , functions(0) { group = new QGLContextGroup(context); texture_destroyer = new QGLTextureDestroyer; @@ -1671,6 +1673,8 @@ QGLContextPrivate::QGLContextPrivate(QGLContext *context) QGLContextPrivate::~QGLContextPrivate() { + delete functions; + if (!group->m_refs.deref()) { Q_ASSERT(group->context() == q_ptr); delete group; @@ -2710,6 +2714,19 @@ int QGLContextPrivate::maxTextureSize() #endif } +/*! + Returns a QGLFunctions object that is initialized for this context. + */ +QGLFunctions *QGLContext::functions() const +{ + QGLContextPrivate *d = const_cast(d_func()); + if (!d->functions) { + d->functions = new QGLFunctions(this); + d->functions->initializeGLFunctions(this); + } + return d->functions; +} + /*! Generates and binds a 2D GL texture to the current context, based on \a image. The generated texture id is returned and can be used in @@ -3792,6 +3809,20 @@ QGLWidget::QGLWidget(QWidget *parent, const QGLWidget* shareWidget, Qt::WindowFl d->init(new QGLContext(QGLFormat::defaultFormat(), this), shareWidget); } +/*! + \internal + */ +QGLWidget::QGLWidget(QGLWidgetPrivate &dd, const QGLFormat &format, QWidget *parent, const QGLWidget *shareWidget, Qt::WindowFlags f) + : QWidget(dd, parent, f | Qt::MSWindowsOwnDC) +{ + Q_D(QGLWidget); + setAttribute(Qt::WA_PaintOnScreen); + setAttribute(Qt::WA_NoSystemBackground); + setAutoFillBackground(true); // for compatibility + d->init(new QGLContext(format, this), shareWidget); + +} + /*! Constructs an OpenGL widget with parent \a parent. diff --git a/src/opengl/qgl.h b/src/opengl/qgl.h index c57995d8d0..dfd1ae1824 100644 --- a/src/opengl/qgl.h +++ b/src/opengl/qgl.h @@ -307,6 +307,8 @@ Q_OPENGL_EXPORT bool operator!=(const QGLFormat&, const QGLFormat&); Q_OPENGL_EXPORT QDebug operator<<(QDebug, const QGLFormat &); #endif +class QGLFunctions; + class Q_OPENGL_EXPORT QGLContext { Q_DECLARE_PRIVATE(QGLContext) @@ -332,6 +334,8 @@ public: virtual void swapBuffers() const; + QGLFunctions *functions() const; + enum BindOption { NoBindOption = 0x0000, InvertedYBindOption = 0x0001, @@ -466,6 +470,7 @@ private: friend class QX11GLPixmapData; friend class QX11GLSharedContexts; friend class QGLContextResourceBase; + friend class QSGDistanceFieldGlyphCache; private: Q_DISABLE_COPY(QGLContext) }; @@ -589,6 +594,11 @@ protected: virtual void glDraw(); int fontDisplayListBase(const QFont & fnt, int listBase = 2000); // ### Qt 5: remove + QGLWidget(QGLWidgetPrivate &dd, + const QGLFormat &format = QGLFormat(), + QWidget *parent = 0, + const QGLWidget* shareWidget = 0, + Qt::WindowFlags f = 0); private: Q_DISABLE_COPY(QGLWidget) diff --git a/src/opengl/qgl_p.h b/src/opengl/qgl_p.h index 50d13c9540..6a503fab90 100644 --- a/src/opengl/qgl_p.h +++ b/src/opengl/qgl_p.h @@ -159,7 +159,7 @@ public: QGLFormat::OpenGLContextProfile profile; }; -class QGLWidgetPrivate : public QWidgetPrivate +class Q_OPENGL_EXPORT QGLWidgetPrivate : public QWidgetPrivate { Q_DECLARE_PUBLIC(QGLWidget) public: @@ -441,6 +441,8 @@ public: QHash m_resources; QGLTextureDestroyer *texture_destroyer; + QGLFunctions *functions; + bool vertexAttributeArraysEnabledState[QT_GL_VERTEX_ARRAY_TRACKED_COUNT]; static inline QGLContextGroup *contextGroup(const QGLContext *ctx) { return ctx->d_ptr->group; } @@ -499,7 +501,7 @@ private: QGLContext *m_ctx; }; -class QGLTextureDestroyer : public QObject +class Q_OPENGL_EXPORT QGLTextureDestroyer : public QObject { Q_OBJECT public: diff --git a/src/opengl/qglfunctions.cpp b/src/opengl/qglfunctions.cpp index be8219a07f..8027081543 100644 --- a/src/opengl/qglfunctions.cpp +++ b/src/opengl/qglfunctions.cpp @@ -1348,7 +1348,7 @@ void QGLFunctions::initializeGLFunctions(const QGLContext *context) #ifndef QT_OPENGL_ES_2 -static void qglfResolveActiveTexture(GLenum texture) +static void QGLF_APIENTRY qglfResolveActiveTexture(GLenum texture) { typedef void (QGLF_APIENTRYP type_glActiveTexture)(GLenum texture); @@ -1368,7 +1368,7 @@ static void qglfResolveActiveTexture(GLenum texture) funcs->activeTexture = qglfResolveActiveTexture; } -static void qglfResolveAttachShader(GLuint program, GLuint shader) +static void QGLF_APIENTRY qglfResolveAttachShader(GLuint program, GLuint shader) { typedef void (QGLF_APIENTRYP type_glAttachShader)(GLuint program, GLuint shader); @@ -1388,7 +1388,7 @@ static void qglfResolveAttachShader(GLuint program, GLuint shader) funcs->attachShader = qglfResolveAttachShader; } -static void qglfResolveBindAttribLocation(GLuint program, GLuint index, const char* name) +static void QGLF_APIENTRY qglfResolveBindAttribLocation(GLuint program, GLuint index, const char* name) { typedef void (QGLF_APIENTRYP type_glBindAttribLocation)(GLuint program, GLuint index, const char* name); @@ -1408,7 +1408,7 @@ static void qglfResolveBindAttribLocation(GLuint program, GLuint index, const ch funcs->bindAttribLocation = qglfResolveBindAttribLocation; } -static void qglfResolveBindBuffer(GLenum target, GLuint buffer) +static void QGLF_APIENTRY qglfResolveBindBuffer(GLenum target, GLuint buffer) { typedef void (QGLF_APIENTRYP type_glBindBuffer)(GLenum target, GLuint buffer); @@ -1438,7 +1438,7 @@ static void qglfResolveBindBuffer(GLenum target, GLuint buffer) funcs->bindBuffer = qglfResolveBindBuffer; } -static void qglfResolveBindFramebuffer(GLenum target, GLuint framebuffer) +static void QGLF_APIENTRY qglfResolveBindFramebuffer(GLenum target, GLuint framebuffer) { typedef void (QGLF_APIENTRYP type_glBindFramebuffer)(GLenum target, GLuint framebuffer); @@ -1468,7 +1468,7 @@ static void qglfResolveBindFramebuffer(GLenum target, GLuint framebuffer) funcs->bindFramebuffer = qglfResolveBindFramebuffer; } -static void qglfResolveBindRenderbuffer(GLenum target, GLuint renderbuffer) +static void QGLF_APIENTRY qglfResolveBindRenderbuffer(GLenum target, GLuint renderbuffer) { typedef void (QGLF_APIENTRYP type_glBindRenderbuffer)(GLenum target, GLuint renderbuffer); @@ -1498,7 +1498,7 @@ static void qglfResolveBindRenderbuffer(GLenum target, GLuint renderbuffer) funcs->bindRenderbuffer = qglfResolveBindRenderbuffer; } -static void qglfResolveBlendColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha) +static void QGLF_APIENTRY qglfResolveBlendColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha) { typedef void (QGLF_APIENTRYP type_glBlendColor)(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha); @@ -1528,7 +1528,7 @@ static void qglfResolveBlendColor(GLclampf red, GLclampf green, GLclampf blue, G funcs->blendColor = qglfResolveBlendColor; } -static void qglfResolveBlendEquation(GLenum mode) +static void QGLF_APIENTRY qglfResolveBlendEquation(GLenum mode) { typedef void (QGLF_APIENTRYP type_glBlendEquation)(GLenum mode); @@ -1558,7 +1558,7 @@ static void qglfResolveBlendEquation(GLenum mode) funcs->blendEquation = qglfResolveBlendEquation; } -static void qglfResolveBlendEquationSeparate(GLenum modeRGB, GLenum modeAlpha) +static void QGLF_APIENTRY qglfResolveBlendEquationSeparate(GLenum modeRGB, GLenum modeAlpha) { typedef void (QGLF_APIENTRYP type_glBlendEquationSeparate)(GLenum modeRGB, GLenum modeAlpha); @@ -1588,7 +1588,7 @@ static void qglfResolveBlendEquationSeparate(GLenum modeRGB, GLenum modeAlpha) funcs->blendEquationSeparate = qglfResolveBlendEquationSeparate; } -static void qglfResolveBlendFuncSeparate(GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha) +static void QGLF_APIENTRY qglfResolveBlendFuncSeparate(GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha) { typedef void (QGLF_APIENTRYP type_glBlendFuncSeparate)(GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); @@ -1618,7 +1618,7 @@ static void qglfResolveBlendFuncSeparate(GLenum srcRGB, GLenum dstRGB, GLenum sr funcs->blendFuncSeparate = qglfResolveBlendFuncSeparate; } -static void qglfResolveBufferData(GLenum target, qgl_GLsizeiptr size, const void* data, GLenum usage) +static void QGLF_APIENTRY qglfResolveBufferData(GLenum target, qgl_GLsizeiptr size, const void* data, GLenum usage) { typedef void (QGLF_APIENTRYP type_glBufferData)(GLenum target, qgl_GLsizeiptr size, const void* data, GLenum usage); @@ -1648,7 +1648,7 @@ static void qglfResolveBufferData(GLenum target, qgl_GLsizeiptr size, const void funcs->bufferData = qglfResolveBufferData; } -static void qglfResolveBufferSubData(GLenum target, qgl_GLintptr offset, qgl_GLsizeiptr size, const void* data) +static void QGLF_APIENTRY qglfResolveBufferSubData(GLenum target, qgl_GLintptr offset, qgl_GLsizeiptr size, const void* data) { typedef void (QGLF_APIENTRYP type_glBufferSubData)(GLenum target, qgl_GLintptr offset, qgl_GLsizeiptr size, const void* data); @@ -1678,7 +1678,7 @@ static void qglfResolveBufferSubData(GLenum target, qgl_GLintptr offset, qgl_GLs funcs->bufferSubData = qglfResolveBufferSubData; } -static GLenum qglfResolveCheckFramebufferStatus(GLenum target) +static GLenum QGLF_APIENTRY qglfResolveCheckFramebufferStatus(GLenum target) { typedef GLenum (QGLF_APIENTRYP type_glCheckFramebufferStatus)(GLenum target); @@ -1708,7 +1708,7 @@ static GLenum qglfResolveCheckFramebufferStatus(GLenum target) return GLenum(0); } -static void qglfResolveCompileShader(GLuint shader) +static void QGLF_APIENTRY qglfResolveCompileShader(GLuint shader) { typedef void (QGLF_APIENTRYP type_glCompileShader)(GLuint shader); @@ -1728,7 +1728,7 @@ static void qglfResolveCompileShader(GLuint shader) funcs->compileShader = qglfResolveCompileShader; } -static void qglfResolveCompressedTexImage2D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void* data) +static void QGLF_APIENTRY qglfResolveCompressedTexImage2D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void* data) { typedef void (QGLF_APIENTRYP type_glCompressedTexImage2D)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void* data); @@ -1758,7 +1758,7 @@ static void qglfResolveCompressedTexImage2D(GLenum target, GLint level, GLenum i funcs->compressedTexImage2D = qglfResolveCompressedTexImage2D; } -static void qglfResolveCompressedTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void* data) +static void QGLF_APIENTRY qglfResolveCompressedTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void* data) { typedef void (QGLF_APIENTRYP type_glCompressedTexSubImage2D)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void* data); @@ -1788,7 +1788,7 @@ static void qglfResolveCompressedTexSubImage2D(GLenum target, GLint level, GLint funcs->compressedTexSubImage2D = qglfResolveCompressedTexSubImage2D; } -static GLuint qglfResolveCreateProgram() +static GLuint QGLF_APIENTRY qglfResolveCreateProgram() { typedef GLuint (QGLF_APIENTRYP type_glCreateProgram)(); @@ -1808,7 +1808,7 @@ static GLuint qglfResolveCreateProgram() return GLuint(0); } -static GLuint qglfResolveCreateShader(GLenum type) +static GLuint QGLF_APIENTRY qglfResolveCreateShader(GLenum type) { typedef GLuint (QGLF_APIENTRYP type_glCreateShader)(GLenum type); @@ -1828,7 +1828,7 @@ static GLuint qglfResolveCreateShader(GLenum type) return GLuint(0); } -static void qglfResolveDeleteBuffers(GLsizei n, const GLuint* buffers) +static void QGLF_APIENTRY qglfResolveDeleteBuffers(GLsizei n, const GLuint* buffers) { typedef void (QGLF_APIENTRYP type_glDeleteBuffers)(GLsizei n, const GLuint* buffers); @@ -1858,7 +1858,7 @@ static void qglfResolveDeleteBuffers(GLsizei n, const GLuint* buffers) funcs->deleteBuffers = qglfResolveDeleteBuffers; } -static void qglfResolveDeleteFramebuffers(GLsizei n, const GLuint* framebuffers) +static void QGLF_APIENTRY qglfResolveDeleteFramebuffers(GLsizei n, const GLuint* framebuffers) { typedef void (QGLF_APIENTRYP type_glDeleteFramebuffers)(GLsizei n, const GLuint* framebuffers); @@ -1888,7 +1888,7 @@ static void qglfResolveDeleteFramebuffers(GLsizei n, const GLuint* framebuffers) funcs->deleteFramebuffers = qglfResolveDeleteFramebuffers; } -static void qglfResolveDeleteProgram(GLuint program) +static void QGLF_APIENTRY qglfResolveDeleteProgram(GLuint program) { typedef void (QGLF_APIENTRYP type_glDeleteProgram)(GLuint program); @@ -1908,7 +1908,7 @@ static void qglfResolveDeleteProgram(GLuint program) funcs->deleteProgram = qglfResolveDeleteProgram; } -static void qglfResolveDeleteRenderbuffers(GLsizei n, const GLuint* renderbuffers) +static void QGLF_APIENTRY qglfResolveDeleteRenderbuffers(GLsizei n, const GLuint* renderbuffers) { typedef void (QGLF_APIENTRYP type_glDeleteRenderbuffers)(GLsizei n, const GLuint* renderbuffers); @@ -1938,7 +1938,7 @@ static void qglfResolveDeleteRenderbuffers(GLsizei n, const GLuint* renderbuffer funcs->deleteRenderbuffers = qglfResolveDeleteRenderbuffers; } -static void qglfResolveDeleteShader(GLuint shader) +static void QGLF_APIENTRY qglfResolveDeleteShader(GLuint shader) { typedef void (QGLF_APIENTRYP type_glDeleteShader)(GLuint shader); @@ -1958,7 +1958,7 @@ static void qglfResolveDeleteShader(GLuint shader) funcs->deleteShader = qglfResolveDeleteShader; } -static void qglfResolveDetachShader(GLuint program, GLuint shader) +static void QGLF_APIENTRY qglfResolveDetachShader(GLuint program, GLuint shader) { typedef void (QGLF_APIENTRYP type_glDetachShader)(GLuint program, GLuint shader); @@ -1978,7 +1978,7 @@ static void qglfResolveDetachShader(GLuint program, GLuint shader) funcs->detachShader = qglfResolveDetachShader; } -static void qglfResolveDisableVertexAttribArray(GLuint index) +static void QGLF_APIENTRY qglfResolveDisableVertexAttribArray(GLuint index) { typedef void (QGLF_APIENTRYP type_glDisableVertexAttribArray)(GLuint index); @@ -1998,7 +1998,7 @@ static void qglfResolveDisableVertexAttribArray(GLuint index) funcs->disableVertexAttribArray = qglfResolveDisableVertexAttribArray; } -static void qglfResolveEnableVertexAttribArray(GLuint index) +static void QGLF_APIENTRY qglfResolveEnableVertexAttribArray(GLuint index) { typedef void (QGLF_APIENTRYP type_glEnableVertexAttribArray)(GLuint index); @@ -2018,7 +2018,7 @@ static void qglfResolveEnableVertexAttribArray(GLuint index) funcs->enableVertexAttribArray = qglfResolveEnableVertexAttribArray; } -static void qglfResolveFramebufferRenderbuffer(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer) +static void QGLF_APIENTRY qglfResolveFramebufferRenderbuffer(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer) { typedef void (QGLF_APIENTRYP type_glFramebufferRenderbuffer)(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); @@ -2048,7 +2048,7 @@ static void qglfResolveFramebufferRenderbuffer(GLenum target, GLenum attachment, funcs->framebufferRenderbuffer = qglfResolveFramebufferRenderbuffer; } -static void qglfResolveFramebufferTexture2D(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level) +static void QGLF_APIENTRY qglfResolveFramebufferTexture2D(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level) { typedef void (QGLF_APIENTRYP type_glFramebufferTexture2D)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); @@ -2078,7 +2078,7 @@ static void qglfResolveFramebufferTexture2D(GLenum target, GLenum attachment, GL funcs->framebufferTexture2D = qglfResolveFramebufferTexture2D; } -static void qglfResolveGenBuffers(GLsizei n, GLuint* buffers) +static void QGLF_APIENTRY qglfResolveGenBuffers(GLsizei n, GLuint* buffers) { typedef void (QGLF_APIENTRYP type_glGenBuffers)(GLsizei n, GLuint* buffers); @@ -2108,7 +2108,7 @@ static void qglfResolveGenBuffers(GLsizei n, GLuint* buffers) funcs->genBuffers = qglfResolveGenBuffers; } -static void qglfResolveGenerateMipmap(GLenum target) +static void QGLF_APIENTRY qglfResolveGenerateMipmap(GLenum target) { typedef void (QGLF_APIENTRYP type_glGenerateMipmap)(GLenum target); @@ -2138,7 +2138,7 @@ static void qglfResolveGenerateMipmap(GLenum target) funcs->generateMipmap = qglfResolveGenerateMipmap; } -static void qglfResolveGenFramebuffers(GLsizei n, GLuint* framebuffers) +static void QGLF_APIENTRY qglfResolveGenFramebuffers(GLsizei n, GLuint* framebuffers) { typedef void (QGLF_APIENTRYP type_glGenFramebuffers)(GLsizei n, GLuint* framebuffers); @@ -2168,7 +2168,7 @@ static void qglfResolveGenFramebuffers(GLsizei n, GLuint* framebuffers) funcs->genFramebuffers = qglfResolveGenFramebuffers; } -static void qglfResolveGenRenderbuffers(GLsizei n, GLuint* renderbuffers) +static void QGLF_APIENTRY qglfResolveGenRenderbuffers(GLsizei n, GLuint* renderbuffers) { typedef void (QGLF_APIENTRYP type_glGenRenderbuffers)(GLsizei n, GLuint* renderbuffers); @@ -2198,7 +2198,7 @@ static void qglfResolveGenRenderbuffers(GLsizei n, GLuint* renderbuffers) funcs->genRenderbuffers = qglfResolveGenRenderbuffers; } -static void qglfResolveGetActiveAttrib(GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, char* name) +static void QGLF_APIENTRY qglfResolveGetActiveAttrib(GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, char* name) { typedef void (QGLF_APIENTRYP type_glGetActiveAttrib)(GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, char* name); @@ -2218,7 +2218,7 @@ static void qglfResolveGetActiveAttrib(GLuint program, GLuint index, GLsizei buf funcs->getActiveAttrib = qglfResolveGetActiveAttrib; } -static void qglfResolveGetActiveUniform(GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, char* name) +static void QGLF_APIENTRY qglfResolveGetActiveUniform(GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, char* name) { typedef void (QGLF_APIENTRYP type_glGetActiveUniform)(GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, char* name); @@ -2238,7 +2238,7 @@ static void qglfResolveGetActiveUniform(GLuint program, GLuint index, GLsizei bu funcs->getActiveUniform = qglfResolveGetActiveUniform; } -static void qglfResolveGetAttachedShaders(GLuint program, GLsizei maxcount, GLsizei* count, GLuint* shaders) +static void QGLF_APIENTRY qglfResolveGetAttachedShaders(GLuint program, GLsizei maxcount, GLsizei* count, GLuint* shaders) { typedef void (QGLF_APIENTRYP type_glGetAttachedShaders)(GLuint program, GLsizei maxcount, GLsizei* count, GLuint* shaders); @@ -2258,7 +2258,7 @@ static void qglfResolveGetAttachedShaders(GLuint program, GLsizei maxcount, GLsi funcs->getAttachedShaders = qglfResolveGetAttachedShaders; } -static int qglfResolveGetAttribLocation(GLuint program, const char* name) +static int QGLF_APIENTRY qglfResolveGetAttribLocation(GLuint program, const char* name) { typedef int (QGLF_APIENTRYP type_glGetAttribLocation)(GLuint program, const char* name); @@ -2278,7 +2278,7 @@ static int qglfResolveGetAttribLocation(GLuint program, const char* name) return int(0); } -static void qglfResolveGetBufferParameteriv(GLenum target, GLenum pname, GLint* params) +static void QGLF_APIENTRY qglfResolveGetBufferParameteriv(GLenum target, GLenum pname, GLint* params) { typedef void (QGLF_APIENTRYP type_glGetBufferParameteriv)(GLenum target, GLenum pname, GLint* params); @@ -2308,7 +2308,7 @@ static void qglfResolveGetBufferParameteriv(GLenum target, GLenum pname, GLint* funcs->getBufferParameteriv = qglfResolveGetBufferParameteriv; } -static void qglfResolveGetFramebufferAttachmentParameteriv(GLenum target, GLenum attachment, GLenum pname, GLint* params) +static void QGLF_APIENTRY qglfResolveGetFramebufferAttachmentParameteriv(GLenum target, GLenum attachment, GLenum pname, GLint* params) { typedef void (QGLF_APIENTRYP type_glGetFramebufferAttachmentParameteriv)(GLenum target, GLenum attachment, GLenum pname, GLint* params); @@ -2338,7 +2338,7 @@ static void qglfResolveGetFramebufferAttachmentParameteriv(GLenum target, GLenum funcs->getFramebufferAttachmentParameteriv = qglfResolveGetFramebufferAttachmentParameteriv; } -static void qglfResolveGetProgramiv(GLuint program, GLenum pname, GLint* params) +static void QGLF_APIENTRY qglfResolveGetProgramiv(GLuint program, GLenum pname, GLint* params) { typedef void (QGLF_APIENTRYP type_glGetProgramiv)(GLuint program, GLenum pname, GLint* params); @@ -2358,7 +2358,7 @@ static void qglfResolveGetProgramiv(GLuint program, GLenum pname, GLint* params) funcs->getProgramiv = qglfResolveGetProgramiv; } -static void qglfResolveGetProgramInfoLog(GLuint program, GLsizei bufsize, GLsizei* length, char* infolog) +static void QGLF_APIENTRY qglfResolveGetProgramInfoLog(GLuint program, GLsizei bufsize, GLsizei* length, char* infolog) { typedef void (QGLF_APIENTRYP type_glGetProgramInfoLog)(GLuint program, GLsizei bufsize, GLsizei* length, char* infolog); @@ -2378,7 +2378,7 @@ static void qglfResolveGetProgramInfoLog(GLuint program, GLsizei bufsize, GLsize funcs->getProgramInfoLog = qglfResolveGetProgramInfoLog; } -static void qglfResolveGetRenderbufferParameteriv(GLenum target, GLenum pname, GLint* params) +static void QGLF_APIENTRY qglfResolveGetRenderbufferParameteriv(GLenum target, GLenum pname, GLint* params) { typedef void (QGLF_APIENTRYP type_glGetRenderbufferParameteriv)(GLenum target, GLenum pname, GLint* params); @@ -2408,7 +2408,7 @@ static void qglfResolveGetRenderbufferParameteriv(GLenum target, GLenum pname, G funcs->getRenderbufferParameteriv = qglfResolveGetRenderbufferParameteriv; } -static void qglfResolveGetShaderiv(GLuint shader, GLenum pname, GLint* params) +static void QGLF_APIENTRY qglfResolveGetShaderiv(GLuint shader, GLenum pname, GLint* params) { typedef void (QGLF_APIENTRYP type_glGetShaderiv)(GLuint shader, GLenum pname, GLint* params); @@ -2428,7 +2428,7 @@ static void qglfResolveGetShaderiv(GLuint shader, GLenum pname, GLint* params) funcs->getShaderiv = qglfResolveGetShaderiv; } -static void qglfResolveGetShaderInfoLog(GLuint shader, GLsizei bufsize, GLsizei* length, char* infolog) +static void QGLF_APIENTRY qglfResolveGetShaderInfoLog(GLuint shader, GLsizei bufsize, GLsizei* length, char* infolog) { typedef void (QGLF_APIENTRYP type_glGetShaderInfoLog)(GLuint shader, GLsizei bufsize, GLsizei* length, char* infolog); @@ -2448,14 +2448,14 @@ static void qglfResolveGetShaderInfoLog(GLuint shader, GLsizei bufsize, GLsizei* funcs->getShaderInfoLog = qglfResolveGetShaderInfoLog; } -static void qglfSpecialGetShaderPrecisionFormat(GLenum shadertype, GLenum precisiontype, GLint* range, GLint* precision) +static void QGLF_APIENTRY qglfSpecialGetShaderPrecisionFormat(GLenum shadertype, GLenum precisiontype, GLint* range, GLint* precision) { Q_UNUSED(shadertype); Q_UNUSED(precisiontype); range[0] = range[1] = precision[0] = 0; } -static void qglfResolveGetShaderPrecisionFormat(GLenum shadertype, GLenum precisiontype, GLint* range, GLint* precision) +static void QGLF_APIENTRY qglfResolveGetShaderPrecisionFormat(GLenum shadertype, GLenum precisiontype, GLint* range, GLint* precision) { typedef void (QGLF_APIENTRYP type_glGetShaderPrecisionFormat)(GLenum shadertype, GLenum precisiontype, GLint* range, GLint* precision); @@ -2485,7 +2485,7 @@ static void qglfResolveGetShaderPrecisionFormat(GLenum shadertype, GLenum precis funcs->getShaderPrecisionFormat(shadertype, precisiontype, range, precision); } -static void qglfResolveGetShaderSource(GLuint shader, GLsizei bufsize, GLsizei* length, char* source) +static void QGLF_APIENTRY qglfResolveGetShaderSource(GLuint shader, GLsizei bufsize, GLsizei* length, char* source) { typedef void (QGLF_APIENTRYP type_glGetShaderSource)(GLuint shader, GLsizei bufsize, GLsizei* length, char* source); @@ -2505,7 +2505,7 @@ static void qglfResolveGetShaderSource(GLuint shader, GLsizei bufsize, GLsizei* funcs->getShaderSource = qglfResolveGetShaderSource; } -static void qglfResolveGetUniformfv(GLuint program, GLint location, GLfloat* params) +static void QGLF_APIENTRY qglfResolveGetUniformfv(GLuint program, GLint location, GLfloat* params) { typedef void (QGLF_APIENTRYP type_glGetUniformfv)(GLuint program, GLint location, GLfloat* params); @@ -2525,7 +2525,7 @@ static void qglfResolveGetUniformfv(GLuint program, GLint location, GLfloat* par funcs->getUniformfv = qglfResolveGetUniformfv; } -static void qglfResolveGetUniformiv(GLuint program, GLint location, GLint* params) +static void QGLF_APIENTRY qglfResolveGetUniformiv(GLuint program, GLint location, GLint* params) { typedef void (QGLF_APIENTRYP type_glGetUniformiv)(GLuint program, GLint location, GLint* params); @@ -2545,7 +2545,7 @@ static void qglfResolveGetUniformiv(GLuint program, GLint location, GLint* param funcs->getUniformiv = qglfResolveGetUniformiv; } -static int qglfResolveGetUniformLocation(GLuint program, const char* name) +static int QGLF_APIENTRY qglfResolveGetUniformLocation(GLuint program, const char* name) { typedef int (QGLF_APIENTRYP type_glGetUniformLocation)(GLuint program, const char* name); @@ -2565,7 +2565,7 @@ static int qglfResolveGetUniformLocation(GLuint program, const char* name) return int(0); } -static void qglfResolveGetVertexAttribfv(GLuint index, GLenum pname, GLfloat* params) +static void QGLF_APIENTRY qglfResolveGetVertexAttribfv(GLuint index, GLenum pname, GLfloat* params) { typedef void (QGLF_APIENTRYP type_glGetVertexAttribfv)(GLuint index, GLenum pname, GLfloat* params); @@ -2585,7 +2585,7 @@ static void qglfResolveGetVertexAttribfv(GLuint index, GLenum pname, GLfloat* pa funcs->getVertexAttribfv = qglfResolveGetVertexAttribfv; } -static void qglfResolveGetVertexAttribiv(GLuint index, GLenum pname, GLint* params) +static void QGLF_APIENTRY qglfResolveGetVertexAttribiv(GLuint index, GLenum pname, GLint* params) { typedef void (QGLF_APIENTRYP type_glGetVertexAttribiv)(GLuint index, GLenum pname, GLint* params); @@ -2605,7 +2605,7 @@ static void qglfResolveGetVertexAttribiv(GLuint index, GLenum pname, GLint* para funcs->getVertexAttribiv = qglfResolveGetVertexAttribiv; } -static void qglfResolveGetVertexAttribPointerv(GLuint index, GLenum pname, void** pointer) +static void QGLF_APIENTRY qglfResolveGetVertexAttribPointerv(GLuint index, GLenum pname, void** pointer) { typedef void (QGLF_APIENTRYP type_glGetVertexAttribPointerv)(GLuint index, GLenum pname, void** pointer); @@ -2625,7 +2625,7 @@ static void qglfResolveGetVertexAttribPointerv(GLuint index, GLenum pname, void* funcs->getVertexAttribPointerv = qglfResolveGetVertexAttribPointerv; } -static GLboolean qglfResolveIsBuffer(GLuint buffer) +static GLboolean QGLF_APIENTRY qglfResolveIsBuffer(GLuint buffer) { typedef GLboolean (QGLF_APIENTRYP type_glIsBuffer)(GLuint buffer); @@ -2655,7 +2655,7 @@ static GLboolean qglfResolveIsBuffer(GLuint buffer) return GLboolean(0); } -static GLboolean qglfResolveIsFramebuffer(GLuint framebuffer) +static GLboolean QGLF_APIENTRY qglfResolveIsFramebuffer(GLuint framebuffer) { typedef GLboolean (QGLF_APIENTRYP type_glIsFramebuffer)(GLuint framebuffer); @@ -2685,12 +2685,12 @@ static GLboolean qglfResolveIsFramebuffer(GLuint framebuffer) return GLboolean(0); } -static GLboolean qglfSpecialIsProgram(GLuint program) +static GLboolean QGLF_APIENTRY qglfSpecialIsProgram(GLuint program) { return program != 0; } -static GLboolean qglfResolveIsProgram(GLuint program) +static GLboolean QGLF_APIENTRY qglfResolveIsProgram(GLuint program) { typedef GLboolean (QGLF_APIENTRYP type_glIsProgram)(GLuint program); @@ -2710,7 +2710,7 @@ static GLboolean qglfResolveIsProgram(GLuint program) return funcs->isProgram(program); } -static GLboolean qglfResolveIsRenderbuffer(GLuint renderbuffer) +static GLboolean QGLF_APIENTRY qglfResolveIsRenderbuffer(GLuint renderbuffer) { typedef GLboolean (QGLF_APIENTRYP type_glIsRenderbuffer)(GLuint renderbuffer); @@ -2740,12 +2740,12 @@ static GLboolean qglfResolveIsRenderbuffer(GLuint renderbuffer) return GLboolean(0); } -static GLboolean qglfSpecialIsShader(GLuint shader) +static GLboolean QGLF_APIENTRY qglfSpecialIsShader(GLuint shader) { return shader != 0; } -static GLboolean qglfResolveIsShader(GLuint shader) +static GLboolean QGLF_APIENTRY qglfResolveIsShader(GLuint shader) { typedef GLboolean (QGLF_APIENTRYP type_glIsShader)(GLuint shader); @@ -2765,7 +2765,7 @@ static GLboolean qglfResolveIsShader(GLuint shader) return funcs->isShader(shader); } -static void qglfResolveLinkProgram(GLuint program) +static void QGLF_APIENTRY qglfResolveLinkProgram(GLuint program) { typedef void (QGLF_APIENTRYP type_glLinkProgram)(GLuint program); @@ -2785,11 +2785,11 @@ static void qglfResolveLinkProgram(GLuint program) funcs->linkProgram = qglfResolveLinkProgram; } -static void qglfSpecialReleaseShaderCompiler() +static void QGLF_APIENTRY qglfSpecialReleaseShaderCompiler() { } -static void qglfResolveReleaseShaderCompiler() +static void QGLF_APIENTRY qglfResolveReleaseShaderCompiler() { typedef void (QGLF_APIENTRYP type_glReleaseShaderCompiler)(); @@ -2809,7 +2809,7 @@ static void qglfResolveReleaseShaderCompiler() funcs->releaseShaderCompiler(); } -static void qglfResolveRenderbufferStorage(GLenum target, GLenum internalformat, GLsizei width, GLsizei height) +static void QGLF_APIENTRY qglfResolveRenderbufferStorage(GLenum target, GLenum internalformat, GLsizei width, GLsizei height) { typedef void (QGLF_APIENTRYP type_glRenderbufferStorage)(GLenum target, GLenum internalformat, GLsizei width, GLsizei height); @@ -2839,7 +2839,7 @@ static void qglfResolveRenderbufferStorage(GLenum target, GLenum internalformat, funcs->renderbufferStorage = qglfResolveRenderbufferStorage; } -static void qglfResolveSampleCoverage(GLclampf value, GLboolean invert) +static void QGLF_APIENTRY qglfResolveSampleCoverage(GLclampf value, GLboolean invert) { typedef void (QGLF_APIENTRYP type_glSampleCoverage)(GLclampf value, GLboolean invert); @@ -2869,7 +2869,7 @@ static void qglfResolveSampleCoverage(GLclampf value, GLboolean invert) funcs->sampleCoverage = qglfResolveSampleCoverage; } -static void qglfResolveShaderBinary(GLint n, const GLuint* shaders, GLenum binaryformat, const void* binary, GLint length) +static void QGLF_APIENTRY qglfResolveShaderBinary(GLint n, const GLuint* shaders, GLenum binaryformat, const void* binary, GLint length) { typedef void (QGLF_APIENTRYP type_glShaderBinary)(GLint n, const GLuint* shaders, GLenum binaryformat, const void* binary, GLint length); @@ -2889,7 +2889,7 @@ static void qglfResolveShaderBinary(GLint n, const GLuint* shaders, GLenum binar funcs->shaderBinary = qglfResolveShaderBinary; } -static void qglfResolveShaderSource(GLuint shader, GLsizei count, const char** string, const GLint* length) +static void QGLF_APIENTRY qglfResolveShaderSource(GLuint shader, GLsizei count, const char** string, const GLint* length) { typedef void (QGLF_APIENTRYP type_glShaderSource)(GLuint shader, GLsizei count, const char** string, const GLint* length); @@ -2909,7 +2909,7 @@ static void qglfResolveShaderSource(GLuint shader, GLsizei count, const char** s funcs->shaderSource = qglfResolveShaderSource; } -static void qglfResolveStencilFuncSeparate(GLenum face, GLenum func, GLint ref, GLuint mask) +static void QGLF_APIENTRY qglfResolveStencilFuncSeparate(GLenum face, GLenum func, GLint ref, GLuint mask) { typedef void (QGLF_APIENTRYP type_glStencilFuncSeparate)(GLenum face, GLenum func, GLint ref, GLuint mask); @@ -2939,7 +2939,7 @@ static void qglfResolveStencilFuncSeparate(GLenum face, GLenum func, GLint ref, funcs->stencilFuncSeparate = qglfResolveStencilFuncSeparate; } -static void qglfResolveStencilMaskSeparate(GLenum face, GLuint mask) +static void QGLF_APIENTRY qglfResolveStencilMaskSeparate(GLenum face, GLuint mask) { typedef void (QGLF_APIENTRYP type_glStencilMaskSeparate)(GLenum face, GLuint mask); @@ -2969,7 +2969,7 @@ static void qglfResolveStencilMaskSeparate(GLenum face, GLuint mask) funcs->stencilMaskSeparate = qglfResolveStencilMaskSeparate; } -static void qglfResolveStencilOpSeparate(GLenum face, GLenum fail, GLenum zfail, GLenum zpass) +static void QGLF_APIENTRY qglfResolveStencilOpSeparate(GLenum face, GLenum fail, GLenum zfail, GLenum zpass) { typedef void (QGLF_APIENTRYP type_glStencilOpSeparate)(GLenum face, GLenum fail, GLenum zfail, GLenum zpass); @@ -2999,7 +2999,7 @@ static void qglfResolveStencilOpSeparate(GLenum face, GLenum fail, GLenum zfail, funcs->stencilOpSeparate = qglfResolveStencilOpSeparate; } -static void qglfResolveUniform1f(GLint location, GLfloat x) +static void QGLF_APIENTRY qglfResolveUniform1f(GLint location, GLfloat x) { typedef void (QGLF_APIENTRYP type_glUniform1f)(GLint location, GLfloat x); @@ -3019,7 +3019,7 @@ static void qglfResolveUniform1f(GLint location, GLfloat x) funcs->uniform1f = qglfResolveUniform1f; } -static void qglfResolveUniform1fv(GLint location, GLsizei count, const GLfloat* v) +static void QGLF_APIENTRY qglfResolveUniform1fv(GLint location, GLsizei count, const GLfloat* v) { typedef void (QGLF_APIENTRYP type_glUniform1fv)(GLint location, GLsizei count, const GLfloat* v); @@ -3039,7 +3039,7 @@ static void qglfResolveUniform1fv(GLint location, GLsizei count, const GLfloat* funcs->uniform1fv = qglfResolveUniform1fv; } -static void qglfResolveUniform1i(GLint location, GLint x) +static void QGLF_APIENTRY qglfResolveUniform1i(GLint location, GLint x) { typedef void (QGLF_APIENTRYP type_glUniform1i)(GLint location, GLint x); @@ -3059,7 +3059,7 @@ static void qglfResolveUniform1i(GLint location, GLint x) funcs->uniform1i = qglfResolveUniform1i; } -static void qglfResolveUniform1iv(GLint location, GLsizei count, const GLint* v) +static void QGLF_APIENTRY qglfResolveUniform1iv(GLint location, GLsizei count, const GLint* v) { typedef void (QGLF_APIENTRYP type_glUniform1iv)(GLint location, GLsizei count, const GLint* v); @@ -3079,7 +3079,7 @@ static void qglfResolveUniform1iv(GLint location, GLsizei count, const GLint* v) funcs->uniform1iv = qglfResolveUniform1iv; } -static void qglfResolveUniform2f(GLint location, GLfloat x, GLfloat y) +static void QGLF_APIENTRY qglfResolveUniform2f(GLint location, GLfloat x, GLfloat y) { typedef void (QGLF_APIENTRYP type_glUniform2f)(GLint location, GLfloat x, GLfloat y); @@ -3099,7 +3099,7 @@ static void qglfResolveUniform2f(GLint location, GLfloat x, GLfloat y) funcs->uniform2f = qglfResolveUniform2f; } -static void qglfResolveUniform2fv(GLint location, GLsizei count, const GLfloat* v) +static void QGLF_APIENTRY qglfResolveUniform2fv(GLint location, GLsizei count, const GLfloat* v) { typedef void (QGLF_APIENTRYP type_glUniform2fv)(GLint location, GLsizei count, const GLfloat* v); @@ -3119,7 +3119,7 @@ static void qglfResolveUniform2fv(GLint location, GLsizei count, const GLfloat* funcs->uniform2fv = qglfResolveUniform2fv; } -static void qglfResolveUniform2i(GLint location, GLint x, GLint y) +static void QGLF_APIENTRY qglfResolveUniform2i(GLint location, GLint x, GLint y) { typedef void (QGLF_APIENTRYP type_glUniform2i)(GLint location, GLint x, GLint y); @@ -3139,7 +3139,7 @@ static void qglfResolveUniform2i(GLint location, GLint x, GLint y) funcs->uniform2i = qglfResolveUniform2i; } -static void qglfResolveUniform2iv(GLint location, GLsizei count, const GLint* v) +static void QGLF_APIENTRY qglfResolveUniform2iv(GLint location, GLsizei count, const GLint* v) { typedef void (QGLF_APIENTRYP type_glUniform2iv)(GLint location, GLsizei count, const GLint* v); @@ -3159,7 +3159,7 @@ static void qglfResolveUniform2iv(GLint location, GLsizei count, const GLint* v) funcs->uniform2iv = qglfResolveUniform2iv; } -static void qglfResolveUniform3f(GLint location, GLfloat x, GLfloat y, GLfloat z) +static void QGLF_APIENTRY qglfResolveUniform3f(GLint location, GLfloat x, GLfloat y, GLfloat z) { typedef void (QGLF_APIENTRYP type_glUniform3f)(GLint location, GLfloat x, GLfloat y, GLfloat z); @@ -3179,7 +3179,7 @@ static void qglfResolveUniform3f(GLint location, GLfloat x, GLfloat y, GLfloat z funcs->uniform3f = qglfResolveUniform3f; } -static void qglfResolveUniform3fv(GLint location, GLsizei count, const GLfloat* v) +static void QGLF_APIENTRY qglfResolveUniform3fv(GLint location, GLsizei count, const GLfloat* v) { typedef void (QGLF_APIENTRYP type_glUniform3fv)(GLint location, GLsizei count, const GLfloat* v); @@ -3199,7 +3199,7 @@ static void qglfResolveUniform3fv(GLint location, GLsizei count, const GLfloat* funcs->uniform3fv = qglfResolveUniform3fv; } -static void qglfResolveUniform3i(GLint location, GLint x, GLint y, GLint z) +static void QGLF_APIENTRY qglfResolveUniform3i(GLint location, GLint x, GLint y, GLint z) { typedef void (QGLF_APIENTRYP type_glUniform3i)(GLint location, GLint x, GLint y, GLint z); @@ -3219,7 +3219,7 @@ static void qglfResolveUniform3i(GLint location, GLint x, GLint y, GLint z) funcs->uniform3i = qglfResolveUniform3i; } -static void qglfResolveUniform3iv(GLint location, GLsizei count, const GLint* v) +static void QGLF_APIENTRY qglfResolveUniform3iv(GLint location, GLsizei count, const GLint* v) { typedef void (QGLF_APIENTRYP type_glUniform3iv)(GLint location, GLsizei count, const GLint* v); @@ -3239,7 +3239,7 @@ static void qglfResolveUniform3iv(GLint location, GLsizei count, const GLint* v) funcs->uniform3iv = qglfResolveUniform3iv; } -static void qglfResolveUniform4f(GLint location, GLfloat x, GLfloat y, GLfloat z, GLfloat w) +static void QGLF_APIENTRY qglfResolveUniform4f(GLint location, GLfloat x, GLfloat y, GLfloat z, GLfloat w) { typedef void (QGLF_APIENTRYP type_glUniform4f)(GLint location, GLfloat x, GLfloat y, GLfloat z, GLfloat w); @@ -3259,7 +3259,7 @@ static void qglfResolveUniform4f(GLint location, GLfloat x, GLfloat y, GLfloat z funcs->uniform4f = qglfResolveUniform4f; } -static void qglfResolveUniform4fv(GLint location, GLsizei count, const GLfloat* v) +static void QGLF_APIENTRY qglfResolveUniform4fv(GLint location, GLsizei count, const GLfloat* v) { typedef void (QGLF_APIENTRYP type_glUniform4fv)(GLint location, GLsizei count, const GLfloat* v); @@ -3279,7 +3279,7 @@ static void qglfResolveUniform4fv(GLint location, GLsizei count, const GLfloat* funcs->uniform4fv = qglfResolveUniform4fv; } -static void qglfResolveUniform4i(GLint location, GLint x, GLint y, GLint z, GLint w) +static void QGLF_APIENTRY qglfResolveUniform4i(GLint location, GLint x, GLint y, GLint z, GLint w) { typedef void (QGLF_APIENTRYP type_glUniform4i)(GLint location, GLint x, GLint y, GLint z, GLint w); @@ -3299,7 +3299,7 @@ static void qglfResolveUniform4i(GLint location, GLint x, GLint y, GLint z, GLin funcs->uniform4i = qglfResolveUniform4i; } -static void qglfResolveUniform4iv(GLint location, GLsizei count, const GLint* v) +static void QGLF_APIENTRY qglfResolveUniform4iv(GLint location, GLsizei count, const GLint* v) { typedef void (QGLF_APIENTRYP type_glUniform4iv)(GLint location, GLsizei count, const GLint* v); @@ -3319,7 +3319,7 @@ static void qglfResolveUniform4iv(GLint location, GLsizei count, const GLint* v) funcs->uniform4iv = qglfResolveUniform4iv; } -static void qglfResolveUniformMatrix2fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) +static void QGLF_APIENTRY qglfResolveUniformMatrix2fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) { typedef void (QGLF_APIENTRYP type_glUniformMatrix2fv)(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); @@ -3339,7 +3339,7 @@ static void qglfResolveUniformMatrix2fv(GLint location, GLsizei count, GLboolean funcs->uniformMatrix2fv = qglfResolveUniformMatrix2fv; } -static void qglfResolveUniformMatrix3fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) +static void QGLF_APIENTRY qglfResolveUniformMatrix3fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) { typedef void (QGLF_APIENTRYP type_glUniformMatrix3fv)(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); @@ -3359,7 +3359,7 @@ static void qglfResolveUniformMatrix3fv(GLint location, GLsizei count, GLboolean funcs->uniformMatrix3fv = qglfResolveUniformMatrix3fv; } -static void qglfResolveUniformMatrix4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) +static void QGLF_APIENTRY qglfResolveUniformMatrix4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) { typedef void (QGLF_APIENTRYP type_glUniformMatrix4fv)(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); @@ -3379,7 +3379,7 @@ static void qglfResolveUniformMatrix4fv(GLint location, GLsizei count, GLboolean funcs->uniformMatrix4fv = qglfResolveUniformMatrix4fv; } -static void qglfResolveUseProgram(GLuint program) +static void QGLF_APIENTRY qglfResolveUseProgram(GLuint program) { typedef void (QGLF_APIENTRYP type_glUseProgram)(GLuint program); @@ -3399,7 +3399,7 @@ static void qglfResolveUseProgram(GLuint program) funcs->useProgram = qglfResolveUseProgram; } -static void qglfResolveValidateProgram(GLuint program) +static void QGLF_APIENTRY qglfResolveValidateProgram(GLuint program) { typedef void (QGLF_APIENTRYP type_glValidateProgram)(GLuint program); @@ -3419,7 +3419,7 @@ static void qglfResolveValidateProgram(GLuint program) funcs->validateProgram = qglfResolveValidateProgram; } -static void qglfResolveVertexAttrib1f(GLuint indx, GLfloat x) +static void QGLF_APIENTRY qglfResolveVertexAttrib1f(GLuint indx, GLfloat x) { typedef void (QGLF_APIENTRYP type_glVertexAttrib1f)(GLuint indx, GLfloat x); @@ -3439,7 +3439,7 @@ static void qglfResolveVertexAttrib1f(GLuint indx, GLfloat x) funcs->vertexAttrib1f = qglfResolveVertexAttrib1f; } -static void qglfResolveVertexAttrib1fv(GLuint indx, const GLfloat* values) +static void QGLF_APIENTRY qglfResolveVertexAttrib1fv(GLuint indx, const GLfloat* values) { typedef void (QGLF_APIENTRYP type_glVertexAttrib1fv)(GLuint indx, const GLfloat* values); @@ -3459,7 +3459,7 @@ static void qglfResolveVertexAttrib1fv(GLuint indx, const GLfloat* values) funcs->vertexAttrib1fv = qglfResolveVertexAttrib1fv; } -static void qglfResolveVertexAttrib2f(GLuint indx, GLfloat x, GLfloat y) +static void QGLF_APIENTRY qglfResolveVertexAttrib2f(GLuint indx, GLfloat x, GLfloat y) { typedef void (QGLF_APIENTRYP type_glVertexAttrib2f)(GLuint indx, GLfloat x, GLfloat y); @@ -3479,7 +3479,7 @@ static void qglfResolveVertexAttrib2f(GLuint indx, GLfloat x, GLfloat y) funcs->vertexAttrib2f = qglfResolveVertexAttrib2f; } -static void qglfResolveVertexAttrib2fv(GLuint indx, const GLfloat* values) +static void QGLF_APIENTRY qglfResolveVertexAttrib2fv(GLuint indx, const GLfloat* values) { typedef void (QGLF_APIENTRYP type_glVertexAttrib2fv)(GLuint indx, const GLfloat* values); @@ -3499,7 +3499,7 @@ static void qglfResolveVertexAttrib2fv(GLuint indx, const GLfloat* values) funcs->vertexAttrib2fv = qglfResolveVertexAttrib2fv; } -static void qglfResolveVertexAttrib3f(GLuint indx, GLfloat x, GLfloat y, GLfloat z) +static void QGLF_APIENTRY qglfResolveVertexAttrib3f(GLuint indx, GLfloat x, GLfloat y, GLfloat z) { typedef void (QGLF_APIENTRYP type_glVertexAttrib3f)(GLuint indx, GLfloat x, GLfloat y, GLfloat z); @@ -3519,7 +3519,7 @@ static void qglfResolveVertexAttrib3f(GLuint indx, GLfloat x, GLfloat y, GLfloat funcs->vertexAttrib3f = qglfResolveVertexAttrib3f; } -static void qglfResolveVertexAttrib3fv(GLuint indx, const GLfloat* values) +static void QGLF_APIENTRY qglfResolveVertexAttrib3fv(GLuint indx, const GLfloat* values) { typedef void (QGLF_APIENTRYP type_glVertexAttrib3fv)(GLuint indx, const GLfloat* values); @@ -3539,7 +3539,7 @@ static void qglfResolveVertexAttrib3fv(GLuint indx, const GLfloat* values) funcs->vertexAttrib3fv = qglfResolveVertexAttrib3fv; } -static void qglfResolveVertexAttrib4f(GLuint indx, GLfloat x, GLfloat y, GLfloat z, GLfloat w) +static void QGLF_APIENTRY qglfResolveVertexAttrib4f(GLuint indx, GLfloat x, GLfloat y, GLfloat z, GLfloat w) { typedef void (QGLF_APIENTRYP type_glVertexAttrib4f)(GLuint indx, GLfloat x, GLfloat y, GLfloat z, GLfloat w); @@ -3559,7 +3559,7 @@ static void qglfResolveVertexAttrib4f(GLuint indx, GLfloat x, GLfloat y, GLfloat funcs->vertexAttrib4f = qglfResolveVertexAttrib4f; } -static void qglfResolveVertexAttrib4fv(GLuint indx, const GLfloat* values) +static void QGLF_APIENTRY qglfResolveVertexAttrib4fv(GLuint indx, const GLfloat* values) { typedef void (QGLF_APIENTRYP type_glVertexAttrib4fv)(GLuint indx, const GLfloat* values); @@ -3579,7 +3579,7 @@ static void qglfResolveVertexAttrib4fv(GLuint indx, const GLfloat* values) funcs->vertexAttrib4fv = qglfResolveVertexAttrib4fv; } -static void qglfResolveVertexAttribPointer(GLuint indx, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void* ptr) +static void QGLF_APIENTRY qglfResolveVertexAttribPointer(GLuint indx, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void* ptr) { typedef void (QGLF_APIENTRYP type_glVertexAttribPointer)(GLuint indx, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void* ptr); diff --git a/src/opengl/qglfunctions.h b/src/opengl/qglfunctions.h index 44d9bad9fa..759af4f939 100644 --- a/src/opengl/qglfunctions.h +++ b/src/opengl/qglfunctions.h @@ -59,6 +59,10 @@ QT_MODULE(OpenGL) typedef ptrdiff_t qgl_GLintptr; typedef ptrdiff_t qgl_GLsizeiptr; +#ifdef Q_WS_WIN +# define QGLF_APIENTRY APIENTRY +#endif + #ifndef Q_WS_MAC # ifndef QGLF_APIENTRYP # ifdef QGLF_APIENTRY @@ -1945,6 +1949,9 @@ inline void QGLFunctions::glVertexAttribPointer(GLuint indx, GLint size, GLenum #ifndef GL_RGBA4 #define GL_RGBA4 0x8056 #endif +#ifndef GL_BGRA +#define GL_BGRA 0x80E1 +#endif #ifndef GL_SAMPLE_ALPHA_TO_COVERAGE #define GL_SAMPLE_ALPHA_TO_COVERAGE 0x809E #endif diff --git a/src/opengl/qglpaintdevice_p.h b/src/opengl/qglpaintdevice_p.h index f4176fb2e7..241e3091c6 100644 --- a/src/opengl/qglpaintdevice_p.h +++ b/src/opengl/qglpaintdevice_p.h @@ -90,7 +90,7 @@ protected: // Wraps a QGLWidget class QGLWidget; -class QGLWidgetGLPaintDevice : public QGLPaintDevice +class Q_OPENGL_EXPORT QGLWidgetGLPaintDevice : public QGLPaintDevice { public: QGLWidgetGLPaintDevice(); diff --git a/src/plugins/platforms/wayland/gl_integration/wayland_egl/qwaylandeglwindow.h b/src/plugins/platforms/wayland/gl_integration/wayland_egl/qwaylandeglwindow.h index 549d039bf8..856321dec8 100644 --- a/src/plugins/platforms/wayland/gl_integration/wayland_egl/qwaylandeglwindow.h +++ b/src/plugins/platforms/wayland/gl_integration/wayland_egl/qwaylandeglwindow.h @@ -63,7 +63,6 @@ private: QWaylandEglIntegration *mEglIntegration; QWaylandGLContext *mGLContext; struct wl_egl_window *mWaylandEglWindow; - EGLConfig mConfig; const QWaylandWindow *mParentWindow; }; diff --git a/src/plugins/platforms/wayland/gl_integration/wayland_egl/wayland_egl.pri b/src/plugins/platforms/wayland/gl_integration/wayland_egl/wayland_egl.pri index bc978645c4..cd0701150f 100644 --- a/src/plugins/platforms/wayland/gl_integration/wayland_egl/wayland_egl.pri +++ b/src/plugins/platforms/wayland/gl_integration/wayland_egl/wayland_egl.pri @@ -1,12 +1,11 @@ +include (../../../eglconvenience/eglconvenience.pri) + LIBS += -lwayland-egl -lEGL INCLUDEPATH += $$PWD SOURCES += $$PWD/qwaylandeglintegration.cpp \ $$PWD/qwaylandglcontext.cpp \ - $$PWD/qwaylandeglwindow.cpp \ - $$PWD/../../../eglconvenience/qeglconvenience.cpp + $$PWD/qwaylandeglwindow.cpp HEADERS += $$PWD/qwaylandeglintegration.h \ $$PWD/qwaylandglcontext.h \ - $$PWD/qwaylandeglwindow.h \ - $$PWD/../../../eglconvenience/qeglconvenience.h \ - gl_integration/wayland_egl/qwaylandeglinclude.h + $$PWD/qwaylandeglwindow.h diff --git a/src/plugins/platforms/wayland/qwaylandbuffer.h b/src/plugins/platforms/wayland/qwaylandbuffer.h index 8779d5fda0..faeb3e85b1 100644 --- a/src/plugins/platforms/wayland/qwaylandbuffer.h +++ b/src/plugins/platforms/wayland/qwaylandbuffer.h @@ -44,6 +44,7 @@ #include +#include #include class QWaylandBuffer { diff --git a/src/plugins/platforms/wayland/qwaylandinputdevice.cpp b/src/plugins/platforms/wayland/qwaylandinputdevice.cpp index 6c2f341f64..2d7df1d613 100644 --- a/src/plugins/platforms/wayland/qwaylandinputdevice.cpp +++ b/src/plugins/platforms/wayland/qwaylandinputdevice.cpp @@ -101,6 +101,12 @@ void QWaylandInputDevice::inputHandleMotion(void *data, QWaylandInputDevice *inputDevice = (QWaylandInputDevice *) data; QWaylandWindow *window = inputDevice->mPointerFocus; + if (window == NULL) { + /* We destroyed the pointer focus surface, but the server + * didn't get the message yet. */ + return; + } + inputDevice->mSurfacePos = QPoint(surface_x, surface_y); inputDevice->mGlobalPos = QPoint(x, y); inputDevice->mTime = time; @@ -120,6 +126,12 @@ void QWaylandInputDevice::inputHandleButton(void *data, QWaylandWindow *window = inputDevice->mPointerFocus; Qt::MouseButton qt_button; + if (window == NULL) { + /* We destroyed the pointer focus surface, but the server + * didn't get the message yet. */ + return; + } + switch (button) { case 272: qt_button = Qt::LeftButton; @@ -229,6 +241,12 @@ void QWaylandInputDevice::inputHandleKey(void *data, QEvent::Type type; char s[2]; + if (window == NULL) { + /* We destroyed the keyboard focus surface, but the server + * didn't get the message yet. */ + return; + } + code = key + inputDevice->mXkb->min_key_code; level = 0; @@ -250,9 +268,6 @@ void QWaylandInputDevice::inputHandleKey(void *data, sym = translateKey(sym, s, sizeof s); - qWarning("keycode %d, sym %d, string %d, modifiers 0x%x", - code, sym, s[0], (int) inputDevice->mModifiers); - if (window) { QWindowSystemInterface::handleKeyEvent(window->widget(), time, type, sym, diff --git a/src/plugins/platforms/wayland/qwaylandintegration.cpp b/src/plugins/platforms/wayland/qwaylandintegration.cpp index 3f3ee5e571..b6401f6d06 100644 --- a/src/plugins/platforms/wayland/qwaylandintegration.cpp +++ b/src/plugins/platforms/wayland/qwaylandintegration.cpp @@ -44,6 +44,7 @@ #include "qwaylanddisplay.h" #include "qwaylandshmsurface.h" #include "qwaylandshmwindow.h" +#include "qwaylandnativeinterface.h" #include "qgenericunixfontdatabase.h" @@ -62,9 +63,15 @@ QWaylandIntegration::QWaylandIntegration(bool useOpenGL) : mFontDb(new QGenericUnixFontDatabase()) , mDisplay(new QWaylandDisplay()) , mUseOpenGL(useOpenGL) + , mNativeInterface(new QWaylandNativeInterface) { } +QPlatformNativeInterface * QWaylandIntegration::nativeInterface() const +{ + return mNativeInterface; +} + QList QWaylandIntegration::screens() const { diff --git a/src/plugins/platforms/wayland/qwaylandintegration.h b/src/plugins/platforms/wayland/qwaylandintegration.h index fc9b8d6a6e..71f6d9c7b3 100644 --- a/src/plugins/platforms/wayland/qwaylandintegration.h +++ b/src/plugins/platforms/wayland/qwaylandintegration.h @@ -63,12 +63,15 @@ public: QPlatformFontDatabase *fontDatabase() const; + QPlatformNativeInterface *nativeInterface() const; + private: bool hasOpenGL() const; QPlatformFontDatabase *mFontDb; QWaylandDisplay *mDisplay; bool mUseOpenGL; + QPlatformNativeInterface *mNativeInterface; }; QT_END_NAMESPACE diff --git a/src/plugins/platforms/wayland/qwaylandnativeinterface.cpp b/src/plugins/platforms/wayland/qwaylandnativeinterface.cpp new file mode 100644 index 0000000000..c3bfba03cc --- /dev/null +++ b/src/plugins/platforms/wayland/qwaylandnativeinterface.cpp @@ -0,0 +1,72 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** 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. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qwaylandnativeinterface.h" + +#include "qwaylanddisplay.h" +#include "qwaylandwindow.h" +#include + +void *QWaylandNativeInterface::nativeResourceForWidget(const QByteArray &resourceString, QWidget *widget) +{ + QByteArray lowerCaseResource = resourceString.toLower(); + + if (lowerCaseResource == "display") + return qPlatformScreenForWidget(widget)->display()->wl_display(); + if (lowerCaseResource == "surface") { + return ((QWaylandWindow *) widget->platformWindow())->wl_surface(); + } + + return NULL; +} + + +QWaylandScreen * QWaylandNativeInterface::qPlatformScreenForWidget(QWidget *widget) +{ + QWaylandScreen *screen; + + if (widget) { + screen = static_cast(QPlatformScreen::platformScreenForWidget(widget)); + } else { + screen = static_cast(QApplicationPrivate::platformIntegration()->screens()[0]); + } + return screen; +} diff --git a/src/plugins/platforms/wayland/qwaylandnativeinterface.h b/src/plugins/platforms/wayland/qwaylandnativeinterface.h new file mode 100644 index 0000000000..ac4cdb9a22 --- /dev/null +++ b/src/plugins/platforms/wayland/qwaylandnativeinterface.h @@ -0,0 +1,60 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** 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. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QWAYLANDNATIVEINTERFACE_H +#define QWAYLANDNATIVEINTERFACE_H + +#include "qwaylandscreen.h" + +#include + +class QWaylandNativeInterface : public QPlatformNativeInterface +{ +public: + void *nativeResourceForWidget(const QByteArray &resourceString, + QWidget *widget); + +private: + static QWaylandScreen *qPlatformScreenForWidget(QWidget *widget); +}; + + +#endif // QWAYLANDNATIVEINTERFACE_H diff --git a/src/plugins/platforms/wayland/qwaylandwindow.h b/src/plugins/platforms/wayland/qwaylandwindow.h index 1e605088ad..47d49a70d9 100644 --- a/src/plugins/platforms/wayland/qwaylandwindow.h +++ b/src/plugins/platforms/wayland/qwaylandwindow.h @@ -74,6 +74,9 @@ public: void damage(const QRegion ®ion); void waitForFrameSync(); + + struct wl_surface *wl_surface() const { return mSurface; } + protected: struct wl_surface *mSurface; virtual void newSurfaceCreated(); diff --git a/src/plugins/platforms/wayland/wayland.pro b/src/plugins/platforms/wayland/wayland.pro index 59454384c2..8d2d4b50af 100644 --- a/src/plugins/platforms/wayland/wayland.pro +++ b/src/plugins/platforms/wayland/wayland.pro @@ -8,6 +8,7 @@ DEFINES += $$QMAKE_DEFINES_WAYLAND SOURCES = main.cpp \ qwaylandintegration.cpp \ + qwaylandnativeinterface.cpp \ qwaylandshmsurface.cpp \ qwaylandinputdevice.cpp \ qwaylandcursor.cpp \ @@ -17,6 +18,7 @@ SOURCES = main.cpp \ qwaylandshmwindow.cpp HEADERS = qwaylandintegration.h \ + qwaylandnativeinterface.h \ qwaylandcursor.h \ qwaylanddisplay.h \ qwaylandwindow.h \ From 07fa0ccfc458c217ba1c071784e980f65f404f84 Mon Sep 17 00:00:00 2001 From: Eskil Abrahamsen Blomfeldt Date: Wed, 27 Apr 2011 14:21:54 +0200 Subject: [PATCH 02/53] Make QtQuick2 compile on QPA Moved the logic to set pixel size into the font engines to avoid making the platform plugin interface too complex, and added a function in QPA to make an isolated font engine based on font data. Currently none of the QPA back-ends supports it, but it compiles and spits out a warning if you try to create a QRawFont from data there. This isn't used in QtQuick2 anyway. Reviewed-by: Jiang Jiang --- src/corelib/global/qglobal.h | 3 +- src/gui/text/qfontengine_coretext.mm | 9 +++ src/gui/text/qfontengine_coretext_p.h | 2 + src/gui/text/qfontengine_ft.cpp | 35 +++++++++++ src/gui/text/qfontengine_ft_p.h | 7 ++- src/gui/text/qfontengine_p.h | 2 + src/gui/text/qfontengine_win.cpp | 17 ++++++ src/gui/text/qfontengine_win_p.h | 3 + src/gui/text/qfontengine_x11.cpp | 14 +++++ src/gui/text/qfontengine_x11_p.h | 2 + src/gui/text/qfontenginedirectwrite.cpp | 11 ++++ src/gui/text/qfontenginedirectwrite_p.h | 2 + src/gui/text/qplatformfontdatabase_qpa.cpp | 10 ++++ src/gui/text/qplatformfontdatabase_qpa.h | 2 + src/gui/text/qrawfont.cpp | 13 +++- src/gui/text/qrawfont_ft.cpp | 51 ---------------- src/gui/text/qrawfont_mac.cpp | 22 ------- src/gui/text/qrawfont_p.h | 4 -- src/gui/text/qrawfont_qpa.cpp | 69 ++++++++++++++++++++++ src/gui/text/qrawfont_win.cpp | 47 +-------------- src/gui/text/text.pri | 3 +- 21 files changed, 202 insertions(+), 126 deletions(-) create mode 100644 src/gui/text/qrawfont_qpa.cpp diff --git a/src/corelib/global/qglobal.h b/src/corelib/global/qglobal.h index 9434eb29f7..49f5f989fb 100644 --- a/src/corelib/global/qglobal.h +++ b/src/corelib/global/qglobal.h @@ -2755,7 +2755,8 @@ QT_LICENSED_MODULE(DBus) #if !(defined(Q_WS_WIN) && !defined(Q_WS_WINCE)) \ && !(defined(Q_WS_MAC) && defined(QT_MAC_USE_COCOA)) \ - && !(defined(Q_WS_X11) && !defined(QT_NO_FREETYPE)) + && !(defined(Q_WS_X11) && !defined(QT_NO_FREETYPE)) \ + && !(defined(Q_WS_QPA)) # define QT_NO_RAWFONT #endif diff --git a/src/gui/text/qfontengine_coretext.mm b/src/gui/text/qfontengine_coretext.mm index 20b37300fa..ff440de492 100644 --- a/src/gui/text/qfontengine_coretext.mm +++ b/src/gui/text/qfontengine_coretext.mm @@ -837,6 +837,15 @@ QFixed QCoreTextFontEngine::emSquareSize() const return QFixed::QFixed(int(CTFontGetUnitsPerEm(ctfont))); } +QFontEngine *QCoreTextFontEngine::cloneWithSize(qreal pixelSize) const +{ + QFontDef newFontDef = fontDef; + newFontDef.pixelSize = pixelSize; + newFontDef.pointSize = pixelSize * 72.0 / qt_defaultDpi(); + + return new QCoreTextFontEngine(cgFont, fontDef); +} + QT_END_NAMESPACE #endif// !defined(Q_WS_MAC) || (MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5) diff --git a/src/gui/text/qfontengine_coretext_p.h b/src/gui/text/qfontengine_coretext_p.h index 1503c3f73f..aa5f91a20c 100644 --- a/src/gui/text/qfontengine_coretext_p.h +++ b/src/gui/text/qfontengine_coretext_p.h @@ -91,6 +91,8 @@ public: virtual qreal minLeftBearing() const; virtual QFixed emSquareSize() const; + virtual QFontEngine *cloneWithSize(qreal pixelSize) const; + private: friend class QRawFontPrivate; diff --git a/src/gui/text/qfontengine_ft.cpp b/src/gui/text/qfontengine_ft.cpp index 8f2da9b713..58bcca87b7 100644 --- a/src/gui/text/qfontengine_ft.cpp +++ b/src/gui/text/qfontengine_ft.cpp @@ -2069,6 +2069,41 @@ HB_Error QFontEngineFT::getPointInOutline(HB_Glyph glyph, int flags, hb_uint32 p return result; } +bool QFontEngineFT::initFromFontEngine(const QFontEngineFT *fe) +{ + if (!init(fe->faceId(), fe->antialias, fe->defaultFormat, fe->freetype)) + return false; + + // Increase the reference of this QFreetypeFace since one more QFontEngineFT + // will be using it + freetype->ref.ref(); + + default_load_flags = fe->default_load_flags; + default_hint_style = fe->default_hint_style; + antialias = fe->antialias; + transform = fe->transform; + embolden = fe->embolden; + subpixelType = fe->subpixelType; + lcdFilterType = fe->lcdFilterType; + canUploadGlyphsToServer = fe->canUploadGlyphsToServer; + embeddedbitmap = fe->embeddedbitmap; + + return true; +} + +QFontEngine *QFontEngineFT::cloneWithSize(qreal pixelSize) const +{ + QFontDef fontDef; + fontDef.pixelSize = pixelSize; + QFontEngineFT *fe = new QFontEngineFT(fontDef); + if (!fe->initFromFontEngine(this)) { + delete fe; + return 0; + } else { + return fe; + } +} + QT_END_NAMESPACE #endif // QT_NO_FREETYPE diff --git a/src/gui/text/qfontengine_ft_p.h b/src/gui/text/qfontengine_ft_p.h index 8733498cb7..2c335f3cd3 100644 --- a/src/gui/text/qfontengine_ft_p.h +++ b/src/gui/text/qfontengine_ft_p.h @@ -122,7 +122,7 @@ struct QFreetypeFace static void addBitmapToPath(FT_GlyphSlot slot, const QFixedPoint &point, QPainterPath *path, bool = false); private: - friend class QFontEngineFTRawFont; + friend class QFontEngineFT; friend class QScopedPointerDeleter; QFreetypeFace() : _lock(QMutex::Recursive) {} ~QFreetypeFace() {} @@ -311,7 +311,12 @@ private: virtual HB_Error getPointInOutline(HB_Glyph glyph, int flags, hb_uint32 point, HB_Fixed *xpos, HB_Fixed *ypos, hb_uint32 *nPoints); + virtual void setDefaultHintStyle(HintStyle style); + + virtual QFontEngine *cloneWithSize(qreal pixelSize) const; + bool initFromFontEngine(const QFontEngineFT *fontEngine); + HintStyle defaultHintStyle() const { return default_hint_style; } protected: diff --git a/src/gui/text/qfontengine_p.h b/src/gui/text/qfontengine_p.h index 30277b5156..b74371c7a8 100644 --- a/src/gui/text/qfontengine_p.h +++ b/src/gui/text/qfontengine_p.h @@ -235,6 +235,8 @@ public: virtual int glyphCount() const; + virtual QFontEngine *cloneWithSize(qreal /*pixelSize*/) const { return 0; } + HB_Font harfbuzzFont() const; HB_Face harfbuzzFace() const; diff --git a/src/gui/text/qfontengine_win.cpp b/src/gui/text/qfontengine_win.cpp index 82d9da0be9..54d7ec2980 100644 --- a/src/gui/text/qfontengine_win.cpp +++ b/src/gui/text/qfontengine_win.cpp @@ -1284,6 +1284,23 @@ QImage QFontEngineWin::alphaRGBMapForGlyph(glyph_t glyph, QFixed, int margin, co return rgbMask; } +// From qfontdatabase_win.cpp +extern QFontEngine *qt_load_font_engine_win(const QFontDef &request); +QFontEngine *QFontEngineWin::cloneWithSize(qreal pixelSize) const +{ + QFontDef request = fontDef; + QString actualFontName = request.family; + if (!uniqueFamilyName.isEmpty()) + request.family = uniqueFamilyName; + request.pixelSize = pixelSize; + + QFontEngine *fontEngine = qt_load_font_engine_win(request); + if (fontEngine != NULL) + fontEngine->fontDef.family = actualFontName; + + return fontEngine; +} + // -------------------------------------- Multi font engine QFontEngineMultiWin::QFontEngineMultiWin(QFontEngine *first, const QStringList &fallbacks) diff --git a/src/gui/text/qfontengine_win_p.h b/src/gui/text/qfontengine_win_p.h index 28d80008e4..114149d61f 100644 --- a/src/gui/text/qfontengine_win_p.h +++ b/src/gui/text/qfontengine_win_p.h @@ -106,6 +106,8 @@ public: virtual QImage alphaMapForGlyph(glyph_t, const QTransform &xform); virtual QImage alphaRGBMapForGlyph(glyph_t t, QFixed subPixelPosition, int margin, const QTransform &xform); + virtual QFontEngine *cloneWithSize(qreal pixelSize) const; + #ifndef Q_CC_MINGW virtual void getGlyphBearings(glyph_t glyph, qreal *leftBearing = 0, qreal *rightBearing = 0); #endif @@ -118,6 +120,7 @@ public: #endif QString _name; + QString uniqueFamilyName; HFONT hfont; LOGFONT logfont; uint stockFont : 1; diff --git a/src/gui/text/qfontengine_x11.cpp b/src/gui/text/qfontengine_x11.cpp index 9f3f8d3d9d..4260b85b11 100644 --- a/src/gui/text/qfontengine_x11.cpp +++ b/src/gui/text/qfontengine_x11.cpp @@ -1196,6 +1196,20 @@ bool QFontEngineX11FT::uploadGlyphToServer(QGlyphSet *set, uint glyphid, Glyph * #endif } +QFontEngine *QFontEngineX11FT::cloneWithSize(qreal pixelSize) const +{ + QFontDef fontDef; + fontDef.pixelSize = pixelSize; + QFontEngineX11FT *fe = new QFontEngineX11FT(fontDef); + if (!fe->initFromFontEngine(this)) { + delete fe; + return 0; + } else { + fe->xglyph_format = xglyph_format; + return fe; + } +} + #endif // QT_NO_FONTCONFIG QT_END_NAMESPACE diff --git a/src/gui/text/qfontengine_x11_p.h b/src/gui/text/qfontengine_x11_p.h index ad68fac167..d7eb39daaa 100644 --- a/src/gui/text/qfontengine_x11_p.h +++ b/src/gui/text/qfontengine_x11_p.h @@ -161,6 +161,8 @@ public: explicit QFontEngineX11FT(FcPattern *pattern, const QFontDef &fd, int screen); ~QFontEngineX11FT(); + QFontEngine *cloneWithSize(qreal pixelSize) const; + #ifndef QT_NO_XRENDER int xglyph_format; #endif diff --git a/src/gui/text/qfontenginedirectwrite.cpp b/src/gui/text/qfontenginedirectwrite.cpp index f0a3644865..aab00c0db8 100644 --- a/src/gui/text/qfontenginedirectwrite.cpp +++ b/src/gui/text/qfontenginedirectwrite.cpp @@ -630,6 +630,17 @@ QFontEngine::Type QFontEngineDirectWrite::type() const return QFontEngine::DirectWrite; } +QFontEngine *QFontEngineDirectWrite::cloneWithSize(qreal pixelSize) const +{ + QFontEngine *fontEngine = new QFontEngineDirectWrite(m_directWriteFactory, m_directWriteFontFace, + pixelSize); + + fontEngine->fontDef = fontDef; + fontEngine->fontDef.pixelSize = pixelSize; + + return fontEngine; +} + QT_END_NAMESPACE #endif // QT_NO_DIRECTWRITE diff --git a/src/gui/text/qfontenginedirectwrite_p.h b/src/gui/text/qfontenginedirectwrite_p.h index c440a6ca65..53a4b0a53d 100644 --- a/src/gui/text/qfontenginedirectwrite_p.h +++ b/src/gui/text/qfontenginedirectwrite_p.h @@ -101,6 +101,8 @@ public: QImage alphaRGBMapForGlyph(glyph_t t, QFixed subPixelPosition, int margin, const QTransform &xform); + QFontEngine *cloneWithSize(qreal pixelSize) const; + bool canRender(const QChar *string, int len); Type type() const; diff --git a/src/gui/text/qplatformfontdatabase_qpa.cpp b/src/gui/text/qplatformfontdatabase_qpa.cpp index 6fa25e7ea2..82ec2793b9 100644 --- a/src/gui/text/qplatformfontdatabase_qpa.cpp +++ b/src/gui/text/qplatformfontdatabase_qpa.cpp @@ -218,6 +218,16 @@ QFontEngine *QPlatformFontDatabase::fontEngine(const QFontDef &fontDef, QUnicode return engine; } +QFontEngine *QPlatformFontDatabase::fontEngine(const QByteArray &fontData, qreal pixelSize, + QFont::HintingPreference hintingPreference) +{ + Q_UNUSED(fontData); + Q_UNUSED(pixelSize); + Q_UNUSED(hintingPreference); + qWarning("This plugin does not support font engines created directly from font data"); + return 0; +} + /*! */ diff --git a/src/gui/text/qplatformfontdatabase_qpa.h b/src/gui/text/qplatformfontdatabase_qpa.h index e0e4f04d89..046311f471 100644 --- a/src/gui/text/qplatformfontdatabase_qpa.h +++ b/src/gui/text/qplatformfontdatabase_qpa.h @@ -92,6 +92,8 @@ public: virtual QStringList addApplicationFont(const QByteArray &fontData, const QString &fileName); virtual void releaseHandle(void *handle); + virtual QFontEngine *fontEngine(const QByteArray &fontData, qreal pixelSize, QFont::HintingPreference hintingPreference); + virtual QString fontDir() const; //callback diff --git a/src/gui/text/qrawfont.cpp b/src/gui/text/qrawfont.cpp index 4a715c27cc..6ac2677c02 100644 --- a/src/gui/text/qrawfont.cpp +++ b/src/gui/text/qrawfont.cpp @@ -579,8 +579,19 @@ QRawFont QRawFont::fromFont(const QFont &font, QFontDatabase::WritingSystem writ */ void QRawFont::setPixelSize(int pixelSize) { + if (d->fontEngine == 0) + return; + detach(); - d->platformSetPixelSize(pixelSize); + QFontEngine *oldFontEngine = d->fontEngine; + + d->fontEngine = d->fontEngine->cloneWithSize(pixelSize); + if (d->fontEngine != 0) + d->fontEngine->ref.ref(); + + oldFontEngine->ref.deref(); + if (oldFontEngine->cache_count == 0 && oldFontEngine->ref == 0) + delete oldFontEngine; } /*! diff --git a/src/gui/text/qrawfont_ft.cpp b/src/gui/text/qrawfont_ft.cpp index eefbd92118..23d47ebfb6 100644 --- a/src/gui/text/qrawfont_ft.cpp +++ b/src/gui/text/qrawfont_ft.cpp @@ -90,32 +90,6 @@ public: return init(faceId, true, Format_None, fontData); } - - bool initFromFontEngine(QFontEngine *oldFontEngine) - { - QFontEngineFT *fe = static_cast(oldFontEngine); - - // Increase the reference of this QFreetypeFace since one more QFontEngineFT - // will be using it - fe->freetype->ref.ref(); - if (!init(fe->faceId(), fe->antialias, fe->defaultFormat, fe->freetype)) - return false; - - default_load_flags = fe->default_load_flags; - default_hint_style = fe->default_hint_style; - antialias = fe->antialias; - transform = fe->transform; - embolden = fe->embolden; - subpixelType = fe->subpixelType; - lcdFilterType = fe->lcdFilterType; - canUploadGlyphsToServer = fe->canUploadGlyphsToServer; - embeddedbitmap = fe->embeddedbitmap; - -#if defined(Q_WS_X11) - xglyph_format = static_cast(fe)->xglyph_format; -#endif - return true; - } }; @@ -159,31 +133,6 @@ void QRawFontPrivate::platformLoadFromData(const QByteArray &fontData, int pixel fontEngine->ref.ref(); } -void QRawFontPrivate::platformSetPixelSize(int pixelSize) -{ - if (fontEngine == NULL) - return; - - QFontEngine *oldFontEngine = fontEngine; - - QFontDef fontDef; - fontDef.pixelSize = pixelSize; - QFontEngineFTRawFont *fe = new QFontEngineFTRawFont(fontDef); - if (!fe->initFromFontEngine(oldFontEngine)) { - delete fe; - return; - } - - fontEngine = fe; - fontEngine->fontDef = oldFontEngine->fontDef; - fontEngine->fontDef.pixelSize = pixelSize; - fontEngine->ref.ref(); - Q_ASSERT(fontEngine != oldFontEngine); - oldFontEngine->ref.deref(); - if (oldFontEngine->cache_count == 0 && oldFontEngine->ref == 0) - delete oldFontEngine; -} - QT_END_NAMESPACE #endif // QT_NO_RAWFONT diff --git a/src/gui/text/qrawfont_mac.cpp b/src/gui/text/qrawfont_mac.cpp index 56005c61f5..1ed4185a5d 100644 --- a/src/gui/text/qrawfont_mac.cpp +++ b/src/gui/text/qrawfont_mac.cpp @@ -78,28 +78,6 @@ void QRawFontPrivate::platformLoadFromData(const QByteArray &fontData, } } -void QRawFontPrivate::platformSetPixelSize(int pixelSize) -{ - if (fontEngine == NULL) - return; - - QFontEngine *oldFontEngine = fontEngine; - - QFontDef fontDef = oldFontEngine->fontDef; - fontDef.pixelSize = pixelSize; - fontDef.pointSize = pixelSize * 72.0 / qt_defaultDpi(); - - QCoreTextFontEngine *ctFontEngine = static_cast(oldFontEngine); - Q_ASSERT(ctFontEngine->cgFont); - - fontEngine = new QCoreTextFontEngine(ctFontEngine->cgFont, fontDef); - fontEngine->ref.ref(); - Q_ASSERT(fontEngine != oldFontEngine); - oldFontEngine->ref.deref(); - if (oldFontEngine->cache_count == 0 && oldFontEngine->ref == 0) - delete oldFontEngine; -} - QT_END_NAMESPACE #endif // QT_NO_RAWFONT diff --git a/src/gui/text/qrawfont_p.h b/src/gui/text/qrawfont_p.h index 18f3e7d006..6c84be2d97 100644 --- a/src/gui/text/qrawfont_p.h +++ b/src/gui/text/qrawfont_p.h @@ -83,7 +83,6 @@ public: , fontHandle(NULL) , ptrAddFontMemResourceEx(other.ptrAddFontMemResourceEx) , ptrRemoveFontMemResourceEx(other.ptrRemoveFontMemResourceEx) - , uniqueFamilyName(other.uniqueFamilyName) #endif { fontEngine = other.fontEngine; @@ -102,7 +101,6 @@ public: void platformLoadFromData(const QByteArray &fontData, int pixelSize, QFont::HintingPreference hintingPreference); - void platformSetPixelSize(int pixelSize); static QRawFontPrivate *get(const QRawFont &font) { return font.d.data(); } @@ -120,8 +118,6 @@ public: PtrAddFontMemResourceEx ptrAddFontMemResourceEx; PtrRemoveFontMemResourceEx ptrRemoveFontMemResourceEx; - QString uniqueFamilyName; - #endif // Q_WS_WIN }; diff --git a/src/gui/text/qrawfont_qpa.cpp b/src/gui/text/qrawfont_qpa.cpp new file mode 100644 index 0000000000..103619c37d --- /dev/null +++ b/src/gui/text/qrawfont_qpa.cpp @@ -0,0 +1,69 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** 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:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** 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. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include + +#if !defined(QT_NO_RAWFONT) + +#include "qrawfont_p.h" +#include +#include + +QT_BEGIN_NAMESPACE + +void QRawFontPrivate::platformCleanUp() +{ +} + +void QRawFontPrivate::platformLoadFromData(const QByteArray &fontData, int pixelSize, + QFont::HintingPreference hintingPreference) +{ + Q_ASSERT(fontEngine == 0); + + QPlatformFontDatabase *pfdb = QApplicationPrivate::platformIntegration()->fontDatabase(); + fontEngine = pfdb->fontEngine(fontData, pixelSize, hintingPreference); + if (fontEngine != 0) + fontEngine->ref.ref(); +} + +QT_END_NAMESPACE + +#endif // QT_NO_RAWFONT diff --git a/src/gui/text/qrawfont_win.cpp b/src/gui/text/qrawfont_win.cpp index fb5c6f46b6..d8acf57431 100644 --- a/src/gui/text/qrawfont_win.cpp +++ b/src/gui/text/qrawfont_win.cpp @@ -559,7 +559,7 @@ void QRawFontPrivate::platformLoadFromData(const QByteArray &_fontData, GUID guid; CoCreateGuid(&guid); - uniqueFamilyName = QString::fromLatin1("f") + QString uniqueFamilyName = QString::fromLatin1("f") + QString::number(guid.Data1, 36) + QLatin1Char('-') + QString::number(guid.Data2, 36) + QLatin1Char('-') + QString::number(guid.Data3, 36) + QLatin1Char('-') @@ -613,6 +613,7 @@ void QRawFontPrivate::platformLoadFromData(const QByteArray &_fontData, Q_ASSERT(fontEngine->cache_count == 0 && fontEngine->ref == 0); // Override the generated font name + static_cast(fontEngine)->uniqueFamilyName = uniqueFamilyName; fontEngine->fontDef.family = actualFontName; fontEngine->ref.ref(); } @@ -701,50 +702,6 @@ void QRawFontPrivate::platformLoadFromData(const QByteArray &_fontData, } } -void QRawFontPrivate::platformSetPixelSize(int pixelSize) -{ - if (fontEngine == NULL) - return; - - QFontEngine *oldFontEngine = fontEngine; - -#if !defined(QT_NO_DIRECTWRITE) - if (fontEngine->type() == QFontEngine::Win) -#endif - - { - QFontDef request = fontEngine->fontDef; - QString actualFontName = request.family; - if (!uniqueFamilyName.isEmpty()) - request.family = uniqueFamilyName; - request.pixelSize = pixelSize; - - fontEngine = qt_load_font_engine_win(request); - if (fontEngine != NULL) { - fontEngine->fontDef.family = actualFontName; - fontEngine->ref.ref(); - } - } - -#if !defined(QT_NO_DIRECTWRITE) - else { - QFontEngineDirectWrite *dWriteFE = static_cast(fontEngine); - fontEngine = new QFontEngineDirectWrite(dWriteFE->m_directWriteFactory, - dWriteFE->m_directWriteFontFace, - pixelSize); - - fontEngine->fontDef = dWriteFE->fontDef; - fontEngine->fontDef.pixelSize = pixelSize; - fontEngine->ref.ref(); - } -#endif - - Q_ASSERT(fontEngine != oldFontEngine); - oldFontEngine->ref.deref(); - if (oldFontEngine->cache_count == 0 && oldFontEngine->ref == 0) - delete oldFontEngine; -} - QT_END_NAMESPACE #endif // QT_NO_RAWFONT diff --git a/src/gui/text/text.pri b/src/gui/text/text.pri index df9398ce59..2e0c6dea5d 100644 --- a/src/gui/text/text.pri +++ b/src/gui/text/text.pri @@ -136,7 +136,8 @@ qpa { SOURCES += \ text/qfont_qpa.cpp \ text/qfontengine_qpa.cpp \ - text/qplatformfontdatabase_qpa.cpp + text/qplatformfontdatabase_qpa.cpp \ + text/qrawfont_qpa.cpp HEADERS += \ text/qplatformfontdatabase_qpa.h From 514641bed524337acbad3d386b913b0c795f4c47 Mon Sep 17 00:00:00 2001 From: Gunnar Sletta Date: Thu, 28 Apr 2011 15:07:51 +0200 Subject: [PATCH 03/53] QT += declarative implies += opengl too, so hardcode it to make stuff work --- mkspecs/features/qt.prf | 3 +++ 1 file changed, 3 insertions(+) diff --git a/mkspecs/features/qt.prf b/mkspecs/features/qt.prf index 21fdd38e70..e30a2fdd27 100644 --- a/mkspecs/features/qt.prf +++ b/mkspecs/features/qt.prf @@ -1,5 +1,7 @@ CONFIG *= moc thread +contains(QT, declarative): QT += opengl + #handle defines win32 { qt_static:DEFINES += QT_NODLL @@ -129,6 +131,7 @@ QMAKE_LIBDIR += $$QMAKE_LIBDIR_QT # Topological ordering of modules based on their QT..depends variable QT = $$resolve_depends($$QT, "QT.") + QT_DEPENDS= for(QTLIB, $$list($$lower($$unique(QT)))) { From 064d54b2b08e6b897689cf2f938ce50c7bc6ee0a Mon Sep 17 00:00:00 2001 From: Eskil Abrahamsen Blomfeldt Date: Fri, 22 Apr 2011 11:20:37 +0200 Subject: [PATCH 04/53] doc: Simplify language in QGlyphs docs Mainly to trigger CI. Reviewed-by: TrustMe (cherry picked from commit 1a1683c2d57debbb3e7f3ae6001eb2c8685dca02) --- src/gui/text/qglyphs.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/gui/text/qglyphs.cpp b/src/gui/text/qglyphs.cpp index b8a418de44..8b92b73275 100644 --- a/src/gui/text/qglyphs.cpp +++ b/src/gui/text/qglyphs.cpp @@ -76,8 +76,8 @@ QT_BEGIN_NAMESPACE QTextLayout::glyphs() or QTextFragment::glyphs() can be used to convert unicode encoded text into a list of QGlyphs objects, and QPainter::drawGlyphs() can be used to draw the glyphs. - \note Please note that QRawFont is considered local to the thread in which it is constructed, - which in turn means that a new QRawFont will have to be created and set on the QGlyphs if it is + \note Please note that QRawFont is considered local to the thread in which it is constructed. + This in turn means that a new QRawFont will have to be created and set on the QGlyphs if it is moved to a different thread. If the QGlyphs contains a reference to a QRawFont from a different thread than the current, it will not be possible to draw the glyphs using a QPainter, as the QRawFont is considered invalid and inaccessible in this case. From 544babaaf9d84bc52de1b8e4a7e5e55043125eb7 Mon Sep 17 00:00:00 2001 From: Eskil Abrahamsen Blomfeldt Date: Thu, 21 Apr 2011 11:50:11 +0200 Subject: [PATCH 05/53] doc: Minor cleanup in QGlyphs docs Just a minor clean-up in the QGlyphs docs. Mainly to try to trigger CI. Reviewed-by: TrustMe (cherry picked from commit 774b5b8c6a627fc90fb7382bc907db5d2e8193bf) --- src/gui/text/qglyphs.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/text/qglyphs.cpp b/src/gui/text/qglyphs.cpp index 8b92b73275..cfea6ece93 100644 --- a/src/gui/text/qglyphs.cpp +++ b/src/gui/text/qglyphs.cpp @@ -50,7 +50,7 @@ QT_BEGIN_NAMESPACE /*! \class QGlyphs - \brief the QGlyphs class provides direct access to the internal glyphs in a font + \brief The QGlyphs class provides direct access to the internal glyphs in a font. \since 4.8 \ingroup text From b2db259a32576ac3c6f03f7834920157ea827567 Mon Sep 17 00:00:00 2001 From: Eskil Abrahamsen Blomfeldt Date: Thu, 28 Apr 2011 15:05:08 +0200 Subject: [PATCH 06/53] Fix crash in raster on X11 when text contains unsupported characters We would assume the font engine was a FT engine and do a static cast here, which would cause a crash if the box engine was in use instead. Task-number: QTBUG-17443 Reviewed-by: Samuel (cherry picked from commit c9c54682bcd23598ac7a8db3b10e9f18c978e268) --- src/gui/painting/qtextureglyphcache.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/painting/qtextureglyphcache.cpp b/src/gui/painting/qtextureglyphcache.cpp index 53f025f819..e9e56a2d58 100644 --- a/src/gui/painting/qtextureglyphcache.cpp +++ b/src/gui/painting/qtextureglyphcache.cpp @@ -296,7 +296,7 @@ void QTextureGlyphCache::fillInPendingGlyphs() QImage QTextureGlyphCache::textureMapForGlyph(glyph_t g, QFixed subPixelPosition) const { #if defined(Q_WS_X11) - if (m_transform.type() > QTransform::TxTranslate) { + if (m_transform.type() > QTransform::TxTranslate && m_current_fontengine->type() == QFontEngine::Freetype) { QFontEngineFT::GlyphFormat format = QFontEngineFT::Format_None; QImage::Format imageFormat = QImage::Format_Invalid; switch (m_type) { From 8c90fb22c4032198870d5cc349dc8a09abcb0728 Mon Sep 17 00:00:00 2001 From: Jiang Jiang Date: Fri, 29 Apr 2011 09:58:30 +0200 Subject: [PATCH 07/53] Fix glyph position issue with fallback fonts Task-number: QTBUG-18933 Reviewed-by: Eskil (cherry picked from commit 18fcbf7ae41504324cd453ba9b9655f3e94f6495) --- src/gui/text/qtextlayout.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/gui/text/qtextlayout.cpp b/src/gui/text/qtextlayout.cpp index 93f71d3dbb..fe0c53a480 100644 --- a/src/gui/text/qtextlayout.cpp +++ b/src/gui/text/qtextlayout.cpp @@ -2317,6 +2317,9 @@ QList QTextLine::glyphs(int from, int length) const QGlyphLayout subLayout = glyphLayout.mid(start, end - start); glyphLayoutHash.insertMulti(multiFontEngine->engine(which), GlyphInfo(subLayout, pos, flags)); + for (int i = 0; i < subLayout.numGlyphs; i++) + pos += QPointF(subLayout.advances_x[i].toReal(), + subLayout.advances_y[i].toReal()); start = end; which = e; From e99aa8b20c25812746c2e2ce55296d678724fa7a Mon Sep 17 00:00:00 2001 From: Eskil Abrahamsen Blomfeldt Date: Fri, 29 Apr 2011 10:07:12 +0200 Subject: [PATCH 08/53] Make sure QFont's resolve mask is copied on compilers with C++0x support The QFont consists of a d pointer and a resolve mask, and they should both be copied in the assignment operator. Task-number: QTBUG-18921 Done-by: Friedemann Kleint (cherry picked from commit cb5e526c6023237c36aac3446a0a18288f39f3a9) --- src/gui/text/qfont.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/text/qfont.h b/src/gui/text/qfont.h index 8dbc746813..0c7b6f8de8 100644 --- a/src/gui/text/qfont.h +++ b/src/gui/text/qfont.h @@ -239,7 +239,7 @@ public: bool isCopyOf(const QFont &) const; #ifdef Q_COMPILER_RVALUE_REFS inline QFont &operator=(QFont &&other) - { qSwap(d, other.d); return *this; } + { qSwap(d, other.d); qSwap(resolve_mask, other.resolve_mask); return *this; } #endif #ifdef Q_WS_WIN From 028aa80d700ad8d6799202f1fa1beb919e6ee531 Mon Sep 17 00:00:00 2001 From: Jiang Jiang Date: Mon, 18 Apr 2011 11:21:16 +0200 Subject: [PATCH 09/53] Disable tst_QPixmap::onlyNullPixmapsOutsideGuiThread on Mac No need to check it anymore after the switch to raster engine. Reviewed-by: Eskil (cherry picked from commit e004701bd7ba9e4a7cd5ac1bf784829feae16cae) --- tests/auto/qpixmap/tst_qpixmap.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/auto/qpixmap/tst_qpixmap.cpp b/tests/auto/qpixmap/tst_qpixmap.cpp index 4d032e8f3c..4ba51de7e5 100644 --- a/tests/auto/qpixmap/tst_qpixmap.cpp +++ b/tests/auto/qpixmap/tst_qpixmap.cpp @@ -1337,7 +1337,7 @@ void tst_QPixmap::toSymbianCFbsBitmap() void tst_QPixmap::onlyNullPixmapsOutsideGuiThread() { -#if !defined(Q_WS_WIN) +#if !defined(Q_WS_WIN) && !defined(Q_WS_MAC) class Thread : public QThread { public: @@ -1370,7 +1370,7 @@ void tst_QPixmap::onlyNullPixmapsOutsideGuiThread() thread.wait(); #endif -#endif // !defined(Q_WS_WIN) +#endif // !defined(Q_WS_WIN) && !defined(Q_WS_MAC) } void tst_QPixmap::refUnref() From 0f7cba14f612885151a95c590b23c5fe25efdd05 Mon Sep 17 00:00:00 2001 From: Jiang Jiang Date: Wed, 15 Dec 2010 15:11:45 +0100 Subject: [PATCH 10/53] Support visual cursor movement for BIDI text Bidi input can in some contexts be more intuitive if the cursor works in visual way: pressing left arrow key always make cursor move one character to the left regardless the language of text, pressing right arrow key always make cursor move to the right. It is also the behavior of Mac OS X. Based on the above reason and requests from Symbian we implemented this support for visual movement in BIDI text. 3 public properties are added to QTextDocument, QTextLayout and QLineEdit respectively: - QTextDocument::defaultCursorMoveStyle can be used to control the cursor behavior in all widgets based on QTextDocument, like QTextEdit, QPlainTextEdit, etc. When set to QTextCursor:: Visual, it will enable visual movement for all the cursors in the corresponding text edit. Default is QTextCursor::Logical. - QTextLayout::cursorMoveStyle is used for low-level cursor manipulation. When set to Visual, it will enable visual movement behavior for all the cursor related methods, including cursorToX, xToCursor and drawCursor. Default is Logical. - QLineEdit::cursorMoveStyle is used to control cursor movement behavior in QLineEdit. Default is Logical.: Task-number: QTBUG-13859 Reviewed-by: Eskil (cherry picked from commit c480dd641f5d22d1ee72cb27bf39e24c6df65658) --- src/gui/text/qtextcursor.cpp | 42 +- src/gui/text/qtextcursor.h | 4 + src/gui/text/qtextdocument.cpp | 23 ++ src/gui/text/qtextdocument.h | 5 +- src/gui/text/qtextdocument_p.cpp | 15 + src/gui/text/qtextdocument_p.h | 4 + src/gui/text/qtextengine.cpp | 297 ++++++++++++++ src/gui/text/qtextengine_p.h | 60 +++ src/gui/text/qtextlayout.cpp | 394 +++++++------------ src/gui/text/qtextlayout.h | 6 + src/gui/widgets/qlinecontrol.cpp | 9 +- src/gui/widgets/qlinecontrol_p.h | 8 +- src/gui/widgets/qlineedit.cpp | 28 ++ src/gui/widgets/qlineedit.h | 4 + tests/auto/qcomplextext/tst_qcomplextext.cpp | 87 ++++ tests/auto/qlineedit/tst_qlineedit.cpp | 136 +++++++ tests/auto/qtextedit/tst_qtextedit.cpp | 149 ++++++- 17 files changed, 998 insertions(+), 273 deletions(-) diff --git a/src/gui/text/qtextcursor.cpp b/src/gui/text/qtextcursor.cpp index 6ddfdb00e1..4f6857a201 100644 --- a/src/gui/text/qtextcursor.cpp +++ b/src/gui/text/qtextcursor.cpp @@ -362,20 +362,23 @@ bool QTextCursorPrivate::movePosition(QTextCursor::MoveOperation op, QTextCursor currentCharFormat = -1; bool adjustX = true; QTextBlock blockIt = block(); + bool visualMovement = priv->defaultCursorMoveStyle == QTextCursor::Visual; if (!blockIt.isValid()) return false; - if (op >= QTextCursor::Left && op <= QTextCursor::WordRight - && blockIt.textDirection() == Qt::RightToLeft) { - if (op == QTextCursor::Left) - op = QTextCursor::NextCharacter; - else if (op == QTextCursor::Right) - op = QTextCursor::PreviousCharacter; - else if (op == QTextCursor::WordLeft) + if (blockIt.textDirection() == Qt::RightToLeft) { + if (op == QTextCursor::WordLeft) op = QTextCursor::NextWord; else if (op == QTextCursor::WordRight) op = QTextCursor::PreviousWord; + + if (!visualMovement) { + if (op == QTextCursor::Left) + op = QTextCursor::NextCharacter; + else if (op == QTextCursor::Right) + op = QTextCursor::PreviousCharacter; + } } const QTextLayout *layout = blockLayout(blockIt); @@ -418,9 +421,12 @@ bool QTextCursorPrivate::movePosition(QTextCursor::MoveOperation op, QTextCursor break; } case QTextCursor::PreviousCharacter: - case QTextCursor::Left: newPosition = priv->previousCursorPosition(position, QTextLayout::SkipCharacters); break; + case QTextCursor::Left: + newPosition = visualMovement ? priv->leftCursorPosition(position) + : priv->previousCursorPosition(position, QTextLayout::SkipCharacters); + break; case QTextCursor::StartOfWord: { if (relativePos == 0) break; @@ -529,9 +535,12 @@ bool QTextCursorPrivate::movePosition(QTextCursor::MoveOperation op, QTextCursor break; } case QTextCursor::NextCharacter: - case QTextCursor::Right: newPosition = priv->nextCursorPosition(position, QTextLayout::SkipCharacters); break; + case QTextCursor::Right: + newPosition = visualMovement ? priv->rightCursorPosition(position) + : priv->nextCursorPosition(position, QTextLayout::SkipCharacters); + break; case QTextCursor::NextWord: case QTextCursor::WordRight: newPosition = priv->nextCursorPosition(position, QTextLayout::SkipWords); @@ -2558,4 +2567,19 @@ QTextDocument *QTextCursor::document() const return 0; // document went away } +/*! + \enum QTextCursor::MoveStyle + + This enum describes the movement style available to QTextCursor. 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 + 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. +*/ + QT_END_NAMESPACE diff --git a/src/gui/text/qtextcursor.h b/src/gui/text/qtextcursor.h index 4eaeb41ee9..30f827298b 100644 --- a/src/gui/text/qtextcursor.h +++ b/src/gui/text/qtextcursor.h @@ -86,6 +86,10 @@ public: MoveAnchor, KeepAnchor }; + enum MoveStyle { + Logical, + Visual, + }; void setPosition(int pos, MoveMode mode = MoveAnchor); int position() const; diff --git a/src/gui/text/qtextdocument.cpp b/src/gui/text/qtextdocument.cpp index 6dbd755d93..36f3c6cb4f 100644 --- a/src/gui/text/qtextdocument.cpp +++ b/src/gui/text/qtextdocument.cpp @@ -585,6 +585,29 @@ void QTextDocument::setDefaultTextOption(const QTextOption &option) d->lout->documentChanged(0, 0, d->length()); } +/*! + \since 4.8 + + The default cursor movement style is used by all QTextCursor objects + created from the document. The default is QTextCursor::Logical. +*/ +QTextCursor::MoveStyle QTextDocument::defaultCursorMoveStyle() const +{ + Q_D(const QTextDocument); + return d->defaultCursorMoveStyle; +} + +/*! + \since 4.8 + + Set the default cursor movement style. +*/ +void QTextDocument::setDefaultCursorMoveStyle(QTextCursor::MoveStyle style) +{ + Q_D(QTextDocument); + d->defaultCursorMoveStyle = style; +} + /*! \fn void QTextDocument::markContentsDirty(int position, int length) diff --git a/src/gui/text/qtextdocument.h b/src/gui/text/qtextdocument.h index f87ccc91e8..e515b36cc0 100644 --- a/src/gui/text/qtextdocument.h +++ b/src/gui/text/qtextdocument.h @@ -46,6 +46,7 @@ #include #include #include +#include QT_BEGIN_HEADER @@ -60,7 +61,6 @@ class QPainter; class QPrinter; class QAbstractTextDocumentLayout; class QPoint; -class QTextCursor; class QTextObject; class QTextFormat; class QTextFrame; @@ -269,6 +269,9 @@ public: QTextOption defaultTextOption() const; void setDefaultTextOption(const QTextOption &option); + QTextCursor::MoveStyle defaultCursorMoveStyle() const; + void setDefaultCursorMoveStyle(QTextCursor::MoveStyle style); + Q_SIGNALS: void contentsChange(int from, int charsRemoves, int charsAdded); void contentsChanged(); diff --git a/src/gui/text/qtextdocument_p.cpp b/src/gui/text/qtextdocument_p.cpp index a997720c12..779b1fff35 100644 --- a/src/gui/text/qtextdocument_p.cpp +++ b/src/gui/text/qtextdocument_p.cpp @@ -209,6 +209,7 @@ QTextDocumentPrivate::QTextDocumentPrivate() defaultTextOption.setTabStop(80); // same as in qtextengine.cpp defaultTextOption.setWrapMode(QTextOption::WrapAtWordBoundaryOrAnywhere); + defaultCursorMoveStyle = QTextCursor::Logical; indentWidth = 40; documentMargin = 4; @@ -1382,6 +1383,20 @@ int QTextDocumentPrivate::previousCursorPosition(int position, QTextLayout::Curs return it.layout()->previousCursorPosition(position-start, mode) + start; } +int QTextDocumentPrivate::leftCursorPosition(int position) const +{ + QTextBlock it = blocksFind(position); + int start = it.position(); + return it.layout()->leftCursorPosition(position-start) + start; +} + +int QTextDocumentPrivate::rightCursorPosition(int position) const +{ + QTextBlock it = blocksFind(position); + int start = it.position(); + return it.layout()->rightCursorPosition(position-start) + start; +} + void QTextDocumentPrivate::changeObjectFormat(QTextObject *obj, int format) { beginEditBlock(); diff --git a/src/gui/text/qtextdocument_p.h b/src/gui/text/qtextdocument_p.h index b464f2ee40..6563920c95 100644 --- a/src/gui/text/qtextdocument_p.h +++ b/src/gui/text/qtextdocument_p.h @@ -64,6 +64,7 @@ #include "private/qtextformat_p.h" #include "QtGui/qtextdocument.h" #include "QtGui/qtextobject.h" +#include "QtGui/qtextcursor.h" #include "QtCore/qmap.h" #include "QtCore/qvariant.h" #include "QtCore/qurl.h" @@ -244,6 +245,8 @@ public: int nextCursorPosition(int position, QTextLayout::CursorMode mode) const; int previousCursorPosition(int position, QTextLayout::CursorMode mode) const; + int leftCursorPosition(int position) const; + int rightCursorPosition(int position) const; void changeObjectFormat(QTextObject *group, int format); @@ -339,6 +342,7 @@ private: public: QTextOption defaultTextOption; + QTextCursor::MoveStyle defaultCursorMoveStyle; #ifndef QT_NO_CSSPARSER QCss::StyleSheet parsedDefaultStyleSheet; #endif diff --git a/src/gui/text/qtextengine.cpp b/src/gui/text/qtextengine.cpp index 08d0eca7ac..0e649f0c2d 100644 --- a/src/gui/text/qtextengine.cpp +++ b/src/gui/text/qtextengine.cpp @@ -1304,6 +1304,7 @@ static void init(QTextEngine *e) e->ignoreBidi = false; e->cacheGlyphs = false; e->forceJustification = false; + e->visualMovement = false; e->layoutData = 0; @@ -2737,6 +2738,180 @@ QFixed QTextEngine::leadingSpaceWidth(const QScriptLine &line) return width(line.from + pos, line.length - pos); } +QFixed QTextEngine::alignLine(const QScriptLine &line) +{ + QFixed x = 0; + justify(line); + // if width is QFIXED_MAX that means we used setNumColumns() and that implicitly makes this line left aligned. + if (!line.justified && line.width != QFIXED_MAX) { + int align = option.alignment(); + if (align & Qt::AlignJustify && isRightToLeft()) + align = Qt::AlignRight; + if (align & Qt::AlignRight) + x = line.width - (line.textAdvance + leadingSpaceWidth(line)); + else if (align & Qt::AlignHCenter) + x = (line.width - line.textAdvance)/2; + } + return x; +} + +QFixed QTextEngine::offsetInLigature(const QScriptItem *si, int pos, int max, int glyph_pos) +{ + unsigned short *logClusters = this->logClusters(si); + const QGlyphLayout &glyphs = shapedGlyphs(si); + + int offsetInCluster = 0; + for (int i = pos - 1; i >= 0; i--) { + if (logClusters[i] == glyph_pos) + offsetInCluster++; + else + break; + } + + // in the case that the offset is inside a (multi-character) glyph, + // interpolate the position. + if (offsetInCluster > 0) { + int clusterLength = 0; + for (int i = pos - offsetInCluster; i < max; i++) { + if (logClusters[i] == glyph_pos) + clusterLength++; + else + break; + } + if (clusterLength) + return glyphs.advances_x[glyph_pos] * offsetInCluster / clusterLength; + } + + return 0; +} + +int QTextEngine::previousLogicalPosition(int oldPos) const +{ + const HB_CharAttributes *attrs = attributes(); + if (!attrs || oldPos < 0) + return oldPos; + + if (oldPos <= 0) + return 0; + oldPos--; + while (oldPos && !attrs[oldPos].charStop) + oldPos--; + return oldPos; +} + +int QTextEngine::nextLogicalPosition(int oldPos) const +{ + const HB_CharAttributes *attrs = attributes(); + int len = block.isValid() ? block.length() - 1 + : layoutData->string.length(); + Q_ASSERT(len <= layoutData->string.length()); + if (!attrs || oldPos < 0 || oldPos >= len) + return oldPos; + + oldPos++; + while (oldPos < len && !attrs[oldPos].charStop) + oldPos++; + return oldPos; +} + +int QTextEngine::lineNumberForTextPosition(int pos) +{ + if (!layoutData) + itemize(); + if (pos == layoutData->string.length() && lines.size()) + return lines.size() - 1; + for (int i = 0; i < lines.size(); ++i) { + const QScriptLine& line = lines[i]; + if (line.from + line.length > pos) + return i; + } + return -1; +} + +void QTextEngine::insertionPointsForLine(int lineNum, QVector &insertionPoints) +{ + QTextLineItemIterator iterator(this, lineNum); + bool rtl = isRightToLeft(); + bool lastLine = lineNum >= lines.size() - 1; + + while (!iterator.atEnd()) { + iterator.next(); + const QScriptItem *si = &layoutData->items[iterator.item]; + if (si->analysis.bidiLevel % 2) { + int i = iterator.itemEnd - 1, min = iterator.itemStart; + if (lastLine && (rtl ? iterator.atBeginning() : iterator.atEnd())) + i++; + for (; i >= min; i--) + insertionPoints.push_back(i); + } else { + int i = iterator.itemStart, max = iterator.itemEnd; + if (lastLine && (rtl ? iterator.atBeginning() : iterator.atEnd())) + max++; + for (; i < max; i++) + insertionPoints.push_back(i); + } + } +} + +int QTextEngine::endOfLine(int lineNum) +{ + QVector insertionPoints; + insertionPointsForLine(lineNum, insertionPoints); + + if (insertionPoints.size() > 0) + return insertionPoints.last(); + return 0; +} + +int QTextEngine::beginningOfLine(int lineNum) +{ + QVector insertionPoints; + insertionPointsForLine(lineNum, insertionPoints); + + if (insertionPoints.size() > 0) + return insertionPoints.first(); + return 0; +} + +int QTextEngine::positionAfterVisualMovement(int pos, QTextCursor::MoveOperation op) +{ + if (!layoutData) + itemize(); + + bool moveRight = (op == QTextCursor::Right); + bool alignRight = isRightToLeft(); + if (!layoutData->hasBidi) + return moveRight ^ alignRight ? nextLogicalPosition(pos) : previousLogicalPosition(pos); + + int lineNum = lineNumberForTextPosition(pos); + Q_ASSERT(lineNum >= 0); + + QVector insertionPoints; + insertionPointsForLine(lineNum, insertionPoints); + int i, max = insertionPoints.size(); + for (i = 0; i < max; i++) + if (pos == insertionPoints[i]) { + if (moveRight) { + if (i + 1 < max) + return insertionPoints[i + 1]; + } else { + if (i > 0) + return insertionPoints[i - 1]; + } + + if (moveRight ^ alignRight) { + if (lineNum + 1 < lines.size()) + return alignRight ? endOfLine(lineNum + 1) : beginningOfLine(lineNum + 1); + } + else { + if (lineNum > 0) + return alignRight ? beginningOfLine(lineNum - 1) : endOfLine(lineNum - 1); + } + } + + return pos; +} + QStackTextEngine::QStackTextEngine(const QString &string, const QFont &f) : QTextEngine(string, f), _layoutData(string, _memory, MemSize) @@ -2841,5 +3016,127 @@ glyph_metrics_t glyph_metrics_t::transformed(const QTransform &matrix) const return m; } +QTextLineItemIterator::QTextLineItemIterator(QTextEngine *_eng, int _lineNum, const QPointF &pos, + const QTextLayout::FormatRange *_selection) + : eng(_eng), + line(eng->lines[_lineNum]), + si(0), + lineNum(_lineNum), + lineEnd(line.from + line.length), + firstItem(eng->findItem(line.from)), + lastItem(eng->findItem(lineEnd - 1)), + nItems((firstItem >= 0 && lastItem >= firstItem)? (lastItem-firstItem+1) : 0), + logicalItem(-1), + item(-1), + visualOrder(nItems), + levels(nItems), + selection(_selection) +{ + pos_x = x = QFixed::fromReal(pos.x()); + + x += line.x; + + x += eng->alignLine(line); + + for (int i = 0; i < nItems; ++i) + levels[i] = eng->layoutData->items[i+firstItem].analysis.bidiLevel; + QTextEngine::bidiReorder(nItems, levels.data(), visualOrder.data()); + + eng->shapeLine(line); +} + +QScriptItem &QTextLineItemIterator::next() +{ + x += itemWidth; + + ++logicalItem; + item = visualOrder[logicalItem] + firstItem; + itemLength = eng->length(item); + si = &eng->layoutData->items[item]; + if (!si->num_glyphs) + eng->shape(item); + + if (si->analysis.flags >= QScriptAnalysis::TabOrObject) { + itemWidth = si->width; + return *si; + } + + unsigned short *logClusters = eng->logClusters(si); + QGlyphLayout glyphs = eng->shapedGlyphs(si); + + itemStart = qMax(line.from, si->position); + glyphsStart = logClusters[itemStart - si->position]; + if (lineEnd < si->position + itemLength) { + itemEnd = lineEnd; + glyphsEnd = logClusters[itemEnd-si->position]; + } else { + itemEnd = si->position + itemLength; + glyphsEnd = si->num_glyphs; + } + // show soft-hyphen at line-break + if (si->position + itemLength >= lineEnd + && eng->layoutData->string.at(lineEnd - 1) == 0x00ad) + glyphs.attributes[glyphsEnd - 1].dontPrint = false; + + itemWidth = 0; + for (int g = glyphsStart; g < glyphsEnd; ++g) + itemWidth += glyphs.effectiveAdvance(g); + + return *si; +} + +bool QTextLineItemIterator::getSelectionBounds(QFixed *selectionX, QFixed *selectionWidth) const +{ + *selectionX = *selectionWidth = 0; + + if (!selection) + return false; + + if (si->analysis.flags >= QScriptAnalysis::TabOrObject) { + if (si->position >= selection->start + selection->length + || si->position + itemLength <= selection->start) + return false; + + *selectionX = x; + *selectionWidth = itemWidth; + } else { + unsigned short *logClusters = eng->logClusters(si); + QGlyphLayout glyphs = eng->shapedGlyphs(si); + + int from = qMax(itemStart, selection->start) - si->position; + int to = qMin(itemEnd, selection->start + selection->length) - si->position; + if (from >= to) + return false; + + int start_glyph = logClusters[from]; + int end_glyph = (to == eng->length(item)) ? si->num_glyphs : logClusters[to]; + QFixed soff; + QFixed swidth; + if (si->analysis.bidiLevel %2) { + for (int g = glyphsEnd - 1; g >= end_glyph; --g) + soff += glyphs.effectiveAdvance(g); + for (int g = end_glyph - 1; g >= start_glyph; --g) + swidth += glyphs.effectiveAdvance(g); + } else { + for (int g = glyphsStart; g < start_glyph; ++g) + soff += glyphs.effectiveAdvance(g); + for (int g = start_glyph; g < end_glyph; ++g) + swidth += glyphs.effectiveAdvance(g); + } + + // If the starting character is in the middle of a ligature, + // selection should only contain the right part of that ligature + // glyph, so we need to get the width of the left part here and + // add it to *selectionX + QFixed leftOffsetInLigature = eng->offsetInLigature(si, from, to, start_glyph); + *selectionX = x + soff + leftOffsetInLigature; + *selectionWidth = swidth - leftOffsetInLigature; + // If the ending character is also part of a ligature, swidth does + // not contain that part yet, we also need to find out the width of + // that left part + *selectionWidth += eng->offsetInLigature(si, to, eng->length(item), end_glyph); + } + return true; +} QT_END_NAMESPACE diff --git a/src/gui/text/qtextengine_p.h b/src/gui/text/qtextengine_p.h index 366c5c3207..c476485c1d 100644 --- a/src/gui/text/qtextengine_p.h +++ b/src/gui/text/qtextengine_p.h @@ -64,6 +64,7 @@ #include "QtGui/qpaintengine.h" #include "QtGui/qtextobject.h" #include "QtGui/qtextoption.h" +#include "QtGui/qtextcursor.h" #include "QtCore/qset.h" #include "QtCore/qdebug.h" #ifndef QT_BUILD_COMPAT_LIB @@ -471,6 +472,7 @@ public: void shape(int item) const; void justify(const QScriptLine &si); + QFixed alignLine(const QScriptLine &line); QFixed width(int charFrom, int numChars) const; glyph_metrics_t boundingBox(int from, int len) const; @@ -586,12 +588,18 @@ public: uint cacheGlyphs : 1; uint stackEngine : 1; uint forceJustification : 1; + uint visualMovement : 1; int *underlinePositions; mutable LayoutData *layoutData; inline bool hasFormats() const { return (block.docHandle() || specialData); } + inline bool visualCursorMovement() const + { + return (visualMovement || + (block.docHandle() ? block.docHandle()->defaultCursorMoveStyle == QTextCursor::Visual : false)); + } struct SpecialData { int preeditPosition; @@ -611,6 +619,13 @@ public: void shapeLine(const QScriptLine &line); QFixed leadingSpaceWidth(const QScriptLine &line); + QFixed offsetInLigature(const QScriptItem *si, int pos, int max, int glyph_pos); + int previousLogicalPosition(int oldPos) const; + int nextLogicalPosition(int oldPos) const; + int lineNumberForTextPosition(int pos); + int positionAfterVisualMovement(int oldPos, QTextCursor::MoveOperation op); + void insertionPointsForLine(int lineNum, QVector &insertionPoints); + private: void setBoundary(int strPos) const; void addRequiredBoundaries() const; @@ -625,6 +640,8 @@ private: void splitItem(int item, int pos) const; void resolveAdditionalFormats() const; + int endOfLine(int lineNum); + int beginningOfLine(int lineNum); }; class QStackTextEngine : public QTextEngine { @@ -635,6 +652,49 @@ public: void *_memory[MemSize]; }; +struct QTextLineItemIterator +{ + QTextLineItemIterator(QTextEngine *eng, int lineNum, const QPointF &pos = QPointF(), + const QTextLayout::FormatRange *_selection = 0); + + inline bool atEnd() const { return logicalItem >= nItems - 1; } + inline bool atBeginning() const { return logicalItem <= 0; } + QScriptItem &next(); + + bool getSelectionBounds(QFixed *selectionX, QFixed *selectionWidth) const; + inline bool isOutsideSelection() const { + QFixed tmp1, tmp2; + return !getSelectionBounds(&tmp1, &tmp2); + } + + QTextEngine *eng; + + QFixed x; + QFixed pos_x; + const QScriptLine &line; + QScriptItem *si; + + int lineNum; + int lineEnd; + int firstItem; + int lastItem; + int nItems; + int logicalItem; + int item; + int itemLength; + + int glyphsStart; + int glyphsEnd; + int itemStart; + int itemEnd; + + QFixed itemWidth; + + QVarLengthArray visualOrder; + QVarLengthArray levels; + + const QTextLayout::FormatRange *selection; +}; Q_DECLARE_OPERATORS_FOR_FLAGS(QTextEngine::ShaperFlags) diff --git a/src/gui/text/qtextlayout.cpp b/src/gui/text/qtextlayout.cpp index fe0c53a480..9fc4e7f470 100644 --- a/src/gui/text/qtextlayout.cpp +++ b/src/gui/text/qtextlayout.cpp @@ -72,23 +72,6 @@ QT_BEGIN_NAMESPACE #define SuppressText 0x5012 #define SuppressBackground 0x513 -static QFixed alignLine(QTextEngine *eng, const QScriptLine &line) -{ - QFixed x = 0; - eng->justify(line); - // if width is QFIXED_MAX that means we used setNumColumns() and that implicitly makes this line left aligned. - if (!line.justified && line.width != QFIXED_MAX) { - int align = eng->option.alignment(); - if (align & Qt::AlignJustify && eng->isRightToLeft()) - align = Qt::AlignRight; - if (align & Qt::AlignRight) - x = line.width - (line.textAdvance + eng->leadingSpaceWidth(line)); - else if (align & Qt::AlignHCenter) - x = (line.width - line.textAdvance)/2; - } - return x; -} - /*! \class QTextLayout::FormatRange \reentrant @@ -595,6 +578,30 @@ bool QTextLayout::cacheEnabled() const return d->cacheGlyphs; } +/*! + Set the visual 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. + + \sa setCursorMoveStyle() +*/ +void QTextLayout::setCursorMoveStyle(QTextCursor::MoveStyle style) +{ + d->visualMovement = style == QTextCursor::Visual ? true : false; +} + +/*! + The cursor movement style of this QTextLayout. The default is + QTextCursor::Logical. + + \sa setCursorMoveStyle() +*/ +QTextCursor::MoveStyle QTextLayout::cursorMoveStyle() const +{ + return d->visualMovement ? QTextCursor::Visual : QTextCursor::Logical; +} + /*! Begins the layout process. @@ -718,6 +725,34 @@ int QTextLayout::previousCursorPosition(int oldPos, CursorMode mode) const } /*! + Returns the cursor position to the right of \a oldPos, next to it. + It's dependent on the visual position of characters, after bi-directional + reordering. + + \sa leftCursorPosition(), nextCursorPosition() +*/ +int QTextLayout::rightCursorPosition(int oldPos) const +{ + int newPos = d->positionAfterVisualMovement(oldPos, QTextCursor::Right); +// qDebug("%d -> %d", oldPos, newPos); + return newPos; +} + +/*! + Returns the cursor position to the left of \a oldPos, next to it. + It's dependent on the visual position of characters, after bi-directional + reordering. + + \sa rightCursorPosition(), previousCursorPosition() +*/ +int QTextLayout::leftCursorPosition(int oldPos) const +{ + int newPos = d->positionAfterVisualMovement(oldPos, QTextCursor::Left); +// qDebug("%d -> %d", oldPos, newPos); + return newPos; +} + +/*!/ Returns true if position \a pos is a valid cursor position. In a Unicode context some positions in the text are not valid @@ -815,16 +850,8 @@ QTextLine QTextLayout::lineAt(int i) const */ QTextLine QTextLayout::lineForTextPosition(int pos) const { - for (int i = 0; i < d->lines.size(); ++i) { - const QScriptLine& line = d->lines[i]; - if (line.from + (int)line.length > pos) - return QTextLine(i, d); - } - if (!d->layoutData) - d->itemize(); - if (pos == d->layoutData->string.length() && d->lines.size()) - return QTextLine(d->lines.size()-1, d); - return QTextLine(); + int lineNum = d->lineNumberForTextPosition(pos); + return lineNum >= 0 ? lineAt(lineNum) : QTextLine(); } /*! @@ -919,201 +946,6 @@ void QTextLayout::setFlags(int flags) } } -struct QTextLineItemIterator -{ - QTextLineItemIterator(QTextEngine *eng, int lineNum, const QPointF &pos = QPointF(), - const QTextLayout::FormatRange *_selection = 0); - - inline bool atEnd() const { return logicalItem >= nItems - 1; } - QScriptItem &next(); - - bool getSelectionBounds(QFixed *selectionX, QFixed *selectionWidth) const; - inline bool isOutsideSelection() const { - QFixed tmp1, tmp2; - return !getSelectionBounds(&tmp1, &tmp2); - } - - QTextEngine *eng; - - QFixed x; - QFixed pos_x; - const QScriptLine &line; - QScriptItem *si; - - int lineEnd; - int firstItem; - int lastItem; - int nItems; - int logicalItem; - int item; - int itemLength; - - int glyphsStart; - int glyphsEnd; - int itemStart; - int itemEnd; - - QFixed itemWidth; - - QVarLengthArray visualOrder; - QVarLengthArray levels; - - const QTextLayout::FormatRange *selection; -}; - -QTextLineItemIterator::QTextLineItemIterator(QTextEngine *_eng, int lineNum, const QPointF &pos, - const QTextLayout::FormatRange *_selection) - : eng(_eng), - line(eng->lines[lineNum]), - si(0), - lineEnd(line.from + line.length), - firstItem(eng->findItem(line.from)), - lastItem(eng->findItem(lineEnd - 1)), - nItems((firstItem >= 0 && lastItem >= firstItem)? (lastItem-firstItem+1) : 0), - logicalItem(-1), - item(-1), - visualOrder(nItems), - levels(nItems), - selection(_selection) -{ - pos_x = x = QFixed::fromReal(pos.x()); - - x += line.x; - - x += alignLine(eng, line); - - for (int i = 0; i < nItems; ++i) - levels[i] = eng->layoutData->items[i+firstItem].analysis.bidiLevel; - QTextEngine::bidiReorder(nItems, levels.data(), visualOrder.data()); - - eng->shapeLine(line); -} - -QScriptItem &QTextLineItemIterator::next() -{ - x += itemWidth; - - ++logicalItem; - item = visualOrder[logicalItem] + firstItem; - itemLength = eng->length(item); - si = &eng->layoutData->items[item]; - if (!si->num_glyphs) - eng->shape(item); - - if (si->analysis.flags >= QScriptAnalysis::TabOrObject) { - itemWidth = si->width; - return *si; - } - - unsigned short *logClusters = eng->logClusters(si); - QGlyphLayout glyphs = eng->shapedGlyphs(si); - - itemStart = qMax(line.from, si->position); - glyphsStart = logClusters[itemStart - si->position]; - if (lineEnd < si->position + itemLength) { - itemEnd = lineEnd; - glyphsEnd = logClusters[itemEnd-si->position]; - } else { - itemEnd = si->position + itemLength; - glyphsEnd = si->num_glyphs; - } - // show soft-hyphen at line-break - if (si->position + itemLength >= lineEnd - && eng->layoutData->string.at(lineEnd - 1) == 0x00ad) - glyphs.attributes[glyphsEnd - 1].dontPrint = false; - - itemWidth = 0; - for (int g = glyphsStart; g < glyphsEnd; ++g) - itemWidth += glyphs.effectiveAdvance(g); - - return *si; -} - -static QFixed offsetInLigature(const unsigned short *logClusters, - const QGlyphLayout &glyphs, - int pos, int max, int glyph_pos) -{ - int offsetInCluster = 0; - for (int i = pos - 1; i >= 0; i--) { - if (logClusters[i] == glyph_pos) - offsetInCluster++; - else - break; - } - - // in the case that the offset is inside a (multi-character) glyph, - // interpolate the position. - if (offsetInCluster > 0) { - int clusterLength = 0; - for (int i = pos - offsetInCluster; i < max; i++) { - if (logClusters[i] == glyph_pos) - clusterLength++; - else - break; - } - if (clusterLength) - return glyphs.advances_x[glyph_pos] * offsetInCluster / clusterLength; - } - - return 0; -} - -bool QTextLineItemIterator::getSelectionBounds(QFixed *selectionX, QFixed *selectionWidth) const -{ - *selectionX = *selectionWidth = 0; - - if (!selection) - return false; - - if (si->analysis.flags >= QScriptAnalysis::TabOrObject) { - if (si->position >= selection->start + selection->length - || si->position + itemLength <= selection->start) - return false; - - *selectionX = x; - *selectionWidth = itemWidth; - } else { - unsigned short *logClusters = eng->logClusters(si); - QGlyphLayout glyphs = eng->shapedGlyphs(si); - - int from = qMax(itemStart, selection->start) - si->position; - int to = qMin(itemEnd, selection->start + selection->length) - si->position; - if (from >= to) - return false; - - int start_glyph = logClusters[from]; - int end_glyph = (to == eng->length(item)) ? si->num_glyphs : logClusters[to]; - QFixed soff; - QFixed swidth; - if (si->analysis.bidiLevel %2) { - for (int g = glyphsEnd - 1; g >= end_glyph; --g) - soff += glyphs.effectiveAdvance(g); - for (int g = end_glyph - 1; g >= start_glyph; --g) - swidth += glyphs.effectiveAdvance(g); - } else { - for (int g = glyphsStart; g < start_glyph; ++g) - soff += glyphs.effectiveAdvance(g); - for (int g = start_glyph; g < end_glyph; ++g) - swidth += glyphs.effectiveAdvance(g); - } - - // If the starting character is in the middle of a ligature, - // selection should only contain the right part of that ligature - // glyph, so we need to get the width of the left part here and - // add it to *selectionX - QFixed leftOffsetInLigature = offsetInLigature(logClusters, glyphs, from, - to, start_glyph); - *selectionX = x + soff + leftOffsetInLigature; - *selectionWidth = swidth - leftOffsetInLigature; - // If the ending character is also part of a ligature, swidth does - // not contain that part yet, we also need to find out the width of - // that left part - *selectionWidth += offsetInLigature(logClusters, glyphs, to, - eng->length(item), end_glyph); - } - return true; -} - static void addSelectedRegionsToPath(QTextEngine *eng, int lineNumber, const QPointF &pos, QTextLayout::FormatRange *selection, QPainterPath *region, QRectF boundingRect) { @@ -1382,18 +1214,9 @@ void QTextLayout::drawCursor(QPainter *p, const QPointF &pos, int cursorPosition QFixed pos_y = QFixed::fromReal(position.y()); cursorPosition = qBound(0, cursorPosition, d->layoutData->string.length()); - int line = 0; - if (cursorPosition == d->layoutData->string.length()) { - line = d->lines.size() - 1; - } else { - // ### binary search - for (line = 0; line < d->lines.size(); line++) { - const QScriptLine &sl = d->lines[line]; - if (sl.from <= cursorPosition && sl.from + (int)sl.length > cursorPosition) - break; - } - } - + int line = d->lineNumberForTextPosition(cursorPosition); + if (line < 0) + line = 0; if (line >= d->lines.size()) return; @@ -1402,7 +1225,15 @@ void QTextLayout::drawCursor(QPainter *p, const QPointF &pos, int cursorPosition qreal x = position.x() + l.cursorToX(cursorPosition); - int itm = d->findItem(cursorPosition - 1); + int itm; + + if (d->visualCursorMovement()) { + if (cursorPosition == sl.from + sl.length) + cursorPosition--; + itm = d->findItem(cursorPosition); + } else + itm = d->findItem(cursorPosition - 1); + QFixed base = sl.base(); QFixed descent = sl.descent; bool rightToLeft = d->isRightToLeft(); @@ -1512,7 +1343,7 @@ QRectF QTextLine::rect() const QRectF QTextLine::naturalTextRect() const { const QScriptLine& sl = eng->lines[i]; - QFixed x = sl.x + alignLine(eng, sl); + QFixed x = sl.x + eng->alignLine(sl); QFixed width = sl.textWidth; if (sl.justified) @@ -2635,9 +2466,10 @@ qreal QTextLine::cursorToX(int *cursorPos, Edge edge) const eng->itemize(); const QScriptLine &line = eng->lines[i]; + bool lastLine = i >= eng->lines.size() - 1; QFixed x = line.x; - x += alignLine(eng, line); + x += eng->alignLine(line); if (!i && !eng->layoutData->items.size()) { *cursorPos = 0; @@ -2723,21 +2555,29 @@ qreal QTextLine::cursorToX(int *cursorPos, Edge edge) const logClusters = eng->logClusters(si); glyphs = eng->shapedGlyphs(si); if (si->analysis.flags >= QScriptAnalysis::TabOrObject) { - if(pos == l) + if (pos == (reverse ? 0 : l)) x += si->width; } else { + bool rtl = eng->isRightToLeft(); + bool visual = eng->visualCursorMovement(); if (reverse) { int end = qMin(lineEnd, si->position + l) - si->position; int glyph_end = end == l ? si->num_glyphs : logClusters[end]; - for (int i = glyph_end - 1; i >= glyph_pos; i--) + int glyph_start = glyph_pos; + if (visual && !rtl && !(lastLine && itm == (visualOrder[nItems - 1] + firstItem))) + glyph_start++; + for (int i = glyph_end - 1; i >= glyph_start; i--) x += glyphs.effectiveAdvance(i); } else { int start = qMax(line.from - si->position, 0); int glyph_start = logClusters[start]; - for (int i = glyph_start; i < glyph_pos; i++) + int glyph_end = glyph_pos; + if (!visual || !rtl || (lastLine && itm == visualOrder[0] + firstItem)) + glyph_end--; + for (int i = glyph_start; i <= glyph_end; i++) x += glyphs.effectiveAdvance(i); } - x += offsetInLigature(logClusters, glyphs, pos, line.length, glyph_pos); + x += eng->offsetInLigature(si, pos, line.length, glyph_pos); } *cursorPos = pos + si->position; @@ -2756,6 +2596,8 @@ int QTextLine::xToCursor(qreal _x, CursorPosition cpos) const { QFixed x = QFixed::fromReal(_x); const QScriptLine &line = eng->lines[i]; + bool lastLine = i >= eng->lines.size() - 1; + int lineNum = i; if (!eng->layoutData) eng->itemize(); @@ -2773,7 +2615,7 @@ int QTextLine::xToCursor(qreal _x, CursorPosition cpos) const return 0; x -= line.x; - x -= alignLine(eng, line); + x -= eng->alignLine(line); // qDebug("xToCursor: x=%f, cpos=%d", x.toReal(), cpos); QVarLengthArray visualOrder(nItems); @@ -2782,6 +2624,7 @@ int QTextLine::xToCursor(qreal _x, CursorPosition cpos) const levels[i] = eng->layoutData->items[i+firstItem].analysis.bidiLevel; QTextEngine::bidiReorder(nItems, levels.data(), visualOrder.data()); + bool visual = eng->visualCursorMovement(); if (x <= 0) { // left of first item int item = visualOrder[0]+firstItem; @@ -2798,8 +2641,13 @@ int QTextLine::xToCursor(qreal _x, CursorPosition cpos) const || (line.justified && x < line.width)) { // has to be in one of the runs QFixed pos; + bool rtl = eng->isRightToLeft(); eng->shapeLine(line); + QVector insertionPoints; + if (visual && rtl) + eng->insertionPointsForLine(lineNum, insertionPoints); + int nchars = 0; for (int i = 0; i < nItems; ++i) { int item = visualOrder[i]+firstItem; QScriptItem &si = eng->layoutData->items[item]; @@ -2829,6 +2677,7 @@ int QTextLine::xToCursor(qreal _x, CursorPosition cpos) const if (pos + item_width < x) { pos += item_width; + nchars += end; continue; } // qDebug(" inside run"); @@ -2873,27 +2722,60 @@ int QTextLine::xToCursor(qreal _x, CursorPosition cpos) const } else { QFixed dist = INT_MAX/256; if (si.analysis.bidiLevel % 2) { - pos += item_width; - while (gs <= ge) { - if (glyphs.attributes[gs].clusterStart && qAbs(x-pos) < dist) { - glyph_pos = gs; - dist = qAbs(x-pos); + if (!visual || rtl || (lastLine && i == nItems - 1)) { + pos += item_width; + while (gs <= ge) { + if (glyphs.attributes[gs].clusterStart && qAbs(x-pos) < dist) { + glyph_pos = gs; + dist = qAbs(x-pos); + } + pos -= glyphs.effectiveAdvance(gs); + ++gs; + } + } else { + while (ge >= gs) { + if (glyphs.attributes[ge].clusterStart && qAbs(x-pos) < dist) { + glyph_pos = ge; + dist = qAbs(x-pos); + } + pos += glyphs.effectiveAdvance(ge); + --ge; } - pos -= glyphs.effectiveAdvance(gs); - ++gs; } } else { - while (gs <= ge) { - if (glyphs.attributes[gs].clusterStart && qAbs(x-pos) < dist) { - glyph_pos = gs; - dist = qAbs(x-pos); + if (!visual || !rtl || (lastLine && i == 0)) { + while (gs <= ge) { + if (glyphs.attributes[gs].clusterStart && qAbs(x-pos) < dist) { + glyph_pos = gs; + dist = qAbs(x-pos); + } + pos += glyphs.effectiveAdvance(gs); + ++gs; } - pos += glyphs.effectiveAdvance(gs); - ++gs; + } else { + QFixed oldPos = pos; + while (gs <= ge) { + pos += glyphs.effectiveAdvance(gs); + if (glyphs.attributes[gs].clusterStart && qAbs(x-pos) < dist) { + glyph_pos = gs; + dist = qAbs(x-pos); + } + ++gs; + } + pos = oldPos; } } - if (qAbs(x-pos) < dist) + if (qAbs(x-pos) < dist) { + if (visual) { + if (!rtl && i < nItems - 1) { + nchars += end; + continue; + } + if (rtl && nchars > 0) + return insertionPoints[lastLine ? nchars : nchars - 1]; + } return si.position + end; + } } Q_ASSERT(glyph_pos != -1); int j; diff --git a/src/gui/text/qtextlayout.h b/src/gui/text/qtextlayout.h index 9dd8ebd28f..6aa81f9e7c 100644 --- a/src/gui/text/qtextlayout.h +++ b/src/gui/text/qtextlayout.h @@ -50,6 +50,7 @@ #include #include #include +#include QT_BEGIN_HEADER @@ -136,6 +137,9 @@ public: void setCacheEnabled(bool enable); bool cacheEnabled() const; + void setCursorMoveStyle(QTextCursor::MoveStyle style); + QTextCursor::MoveStyle cursorMoveStyle() const; + void beginLayout(); void endLayout(); void clearLayout(); @@ -153,6 +157,8 @@ public: bool isValidCursorPosition(int pos) const; int nextCursorPosition(int oldPos, CursorMode mode = SkipCharacters) const; int previousCursorPosition(int oldPos, CursorMode mode = SkipCharacters) const; + int leftCursorPosition(int oldPos) const; + int rightCursorPosition(int oldPos) const; void draw(QPainter *p, const QPointF &pos, const QVector &selections = QVector(), const QRectF &clip = QRectF()) const; diff --git a/src/gui/widgets/qlinecontrol.cpp b/src/gui/widgets/qlinecontrol.cpp index 289faa9b02..eb4e142328 100644 --- a/src/gui/widgets/qlinecontrol.cpp +++ b/src/gui/widgets/qlinecontrol.cpp @@ -1585,6 +1585,7 @@ void QLineControl::processKeyEvent(QKeyEvent* event) } bool unknown = false; + bool visual = cursorMoveStyle() == QTextCursor::Visual; if (false) { } @@ -1649,11 +1650,11 @@ void QLineControl::processKeyEvent(QKeyEvent* event) #endif moveCursor(selectionEnd(), false); } else { - cursorForward(0, layoutDirection() == Qt::LeftToRight ? 1 : -1); + cursorForward(0, visual ? 1 : (layoutDirection() == Qt::LeftToRight ? 1 : -1)); } } else if (event == QKeySequence::SelectNextChar) { - cursorForward(1, layoutDirection() == Qt::LeftToRight ? 1 : -1); + cursorForward(1, visual ? 1 : (layoutDirection() == Qt::LeftToRight ? 1 : -1)); } else if (event == QKeySequence::MoveToPreviousChar) { #if !defined(Q_WS_WIN) || defined(QT_NO_COMPLETER) @@ -1664,11 +1665,11 @@ void QLineControl::processKeyEvent(QKeyEvent* event) #endif moveCursor(selectionStart(), false); } else { - cursorForward(0, layoutDirection() == Qt::LeftToRight ? -1 : 1); + cursorForward(0, visual ? -1 : (layoutDirection() == Qt::LeftToRight ? -1 : 1)); } } else if (event == QKeySequence::SelectPreviousChar) { - cursorForward(1, layoutDirection() == Qt::LeftToRight ? -1 : 1); + cursorForward(1, visual ? -1 : (layoutDirection() == Qt::LeftToRight ? -1 : 1)); } else if (event == QKeySequence::MoveToNextWord) { if (echoMode() == QLineEdit::Normal) diff --git a/src/gui/widgets/qlinecontrol_p.h b/src/gui/widgets/qlinecontrol_p.h index 3c505c8696..0042f17261 100644 --- a/src/gui/widgets/qlinecontrol_p.h +++ b/src/gui/widgets/qlinecontrol_p.h @@ -160,6 +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); } void moveCursor(int pos, bool mark = false); void cursorForward(bool mark, int steps) @@ -167,10 +169,12 @@ public: int c = m_cursor; if (steps > 0) { while (steps--) - c = m_textLayout.nextCursorPosition(c); + c = cursorMoveStyle() == QTextCursor::Visual ? m_textLayout.rightCursorPosition(c) + : m_textLayout.nextCursorPosition(c); } else if (steps < 0) { while (steps++) - c = m_textLayout.previousCursorPosition(c); + c = cursorMoveStyle() == QTextCursor::Visual ? m_textLayout.leftCursorPosition(c) + : m_textLayout.previousCursorPosition(c); } moveCursor(c, mark); } diff --git a/src/gui/widgets/qlineedit.cpp b/src/gui/widgets/qlineedit.cpp index 07bd2733f2..43c3f52d2b 100644 --- a/src/gui/widgets/qlineedit.cpp +++ b/src/gui/widgets/qlineedit.cpp @@ -1111,6 +1111,34 @@ void QLineEdit::setDragEnabled(bool b) } +/*! + \property QLineEdit::cursorMoveStyle + \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 + 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, + 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 +{ + Q_D(const QLineEdit); + return d->control->cursorMoveStyle(); +} + +void QLineEdit::setCursorMoveStyle(QTextCursor::MoveStyle style) +{ + Q_D(QLineEdit); + d->control->setCursorMoveStyle(style); +} + /*! \property QLineEdit::acceptableInput \brief whether the input satisfies the inputMask and the diff --git a/src/gui/widgets/qlineedit.h b/src/gui/widgets/qlineedit.h index 636cee7bb0..73a736c690 100644 --- a/src/gui/widgets/qlineedit.h +++ b/src/gui/widgets/qlineedit.h @@ -43,6 +43,7 @@ #define QLINEEDIT_H #include +#include #include #include @@ -158,6 +159,9 @@ public: void setDragEnabled(bool b); bool dragEnabled() const; + void setCursorMoveStyle(QTextCursor::MoveStyle style); + QTextCursor::MoveStyle cursorMoveStyle() const; + QString inputMask() const; void setInputMask(const QString &inputMask); bool hasAcceptableInput() const; diff --git a/tests/auto/qcomplextext/tst_qcomplextext.cpp b/tests/auto/qcomplextext/tst_qcomplextext.cpp index 3d8e29057d..04943c5ceb 100644 --- a/tests/auto/qcomplextext/tst_qcomplextext.cpp +++ b/tests/auto/qcomplextext/tst_qcomplextext.cpp @@ -71,6 +71,10 @@ private slots: void bidiReorderString(); void bidiCursor_qtbug2795(); void bidiCursor_PDF(); + void bidiCursorMovement_data(); + void bidiCursorMovement(); + void bidiCursorLogicalMovement_data(); + void bidiCursorLogicalMovement(); }; tst_QComplexText::tst_QComplexText() @@ -185,6 +189,89 @@ void tst_QComplexText::bidiCursor_qtbug2795() QVERIFY(x1 == x2); } +void tst_QComplexText::bidiCursorMovement_data() +{ + QTest::addColumn("logical"); + QTest::addColumn("basicDir"); + + const LV *data = logical_visual; + while ( data->name ) { + //next we fill it with data + QTest::newRow( data->name ) + << QString::fromUtf8( data->logical ) + << (int) data->basicDir; + data++; + } +} + +void tst_QComplexText::bidiCursorMovement() +{ + QFETCH(QString, logical); + QFETCH(int, basicDir); + + QTextLayout layout(logical); + + QTextOption option = layout.textOption(); + option.setTextDirection(basicDir == QChar::DirL ? Qt::LeftToRight : Qt::RightToLeft); + layout.setTextOption(option); + bool moved; + int oldPos, newPos = 0; + qreal x, newX; + + layout.beginLayout(); + QTextLine line = layout.createLine(); + layout.endLayout(); + + newX = line.cursorToX(0); + do { + oldPos = newPos; + x = newX; + newX = line.cursorToX(oldPos); + if (basicDir == QChar::DirL) { + QVERIFY(newX >= x); + newPos = layout.rightCursorPosition(oldPos); + } else + { + QVERIFY(newX <= x); + newPos = layout.leftCursorPosition(oldPos); + } + moved = (oldPos != newPos); + } while (moved); +} + +void tst_QComplexText::bidiCursorLogicalMovement_data() +{ + bidiCursorMovement_data(); +} + +void tst_QComplexText::bidiCursorLogicalMovement() +{ + QFETCH(QString, logical); + QFETCH(int, basicDir); + + QTextLayout layout(logical); + + QTextOption option = layout.textOption(); + option.setTextDirection(basicDir == QChar::DirL ? Qt::LeftToRight : Qt::RightToLeft); + layout.setTextOption(option); + bool moved; + int oldPos, newPos = 0; + + do { + oldPos = newPos; + newPos = layout.nextCursorPosition(oldPos); + QVERIFY(newPos >= oldPos); + moved = (oldPos != newPos); + } while (moved); + + do { + oldPos = newPos; + newPos = layout.previousCursorPosition(oldPos); + QVERIFY(newPos <= oldPos); + moved = (oldPos != newPos); + } while (moved); +} + void tst_QComplexText::bidiCursor_PDF() { QString str = QString::fromUtf8("\342\200\252hello\342\200\254"); diff --git a/tests/auto/qlineedit/tst_qlineedit.cpp b/tests/auto/qlineedit/tst_qlineedit.cpp index 9176174cd8..f45481ca8a 100644 --- a/tests/auto/qlineedit/tst_qlineedit.cpp +++ b/tests/auto/qlineedit/tst_qlineedit.cpp @@ -282,6 +282,12 @@ private slots: void validateAndSet(); #endif + void bidiVisualMovement_data(); + void bidiVisualMovement(); + + void bidiLogicalMovement_data(); + void bidiLogicalMovement(); + protected slots: #ifdef QT3_SUPPORT void lostFocus(); @@ -3760,5 +3766,135 @@ void tst_QLineEdit::QTBUG13520_textNotVisible() } +void tst_QLineEdit::bidiVisualMovement_data() +{ + QTest::addColumn("logical"); + QTest::addColumn("basicDir"); + QTest::addColumn("positionList"); + + QTest::newRow("Latin text") + << QString::fromUtf8("abc") + << (int) QChar::DirL + << (IntList() << 0 << 1 << 2 << 3); + QTest::newRow("Hebrew text, one item") + << QString::fromUtf8("\327\220\327\221\327\222") + << (int) QChar::DirR + << (QList() << 0 << 1 << 2 << 3); + QTest::newRow("Hebrew text after Latin text") + << QString::fromUtf8("abc\327\220\327\221\327\222") + << (int) QChar::DirL + << (QList() << 0 << 1 << 2 << 6 << 5 << 4 << 3); + QTest::newRow("Latin text after Hebrew text") + << QString::fromUtf8("\327\220\327\221\327\222abc") + << (int) QChar::DirR + << (QList() << 0 << 1 << 2 << 6 << 5 << 4 << 3); + QTest::newRow("LTR, 3 items") + << QString::fromUtf8("abc\327\220\327\221\327\222abc") + << (int) QChar::DirL + << (QList() << 0 << 1 << 2 << 5 << 4 << 3 << 6 << 7 << 8 << 9); + QTest::newRow("RTL, 3 items") + << QString::fromUtf8("\327\220\327\221\327\222abc\327\220\327\221\327\222") + << (int) QChar::DirR + << (QList() << 0 << 1 << 2 << 5 << 4 << 3 << 6 << 7 << 8 << 9); + QTest::newRow("LTR, 4 items") + << QString::fromUtf8("abc\327\220\327\221\327\222abc\327\220\327\221\327\222") + << (int) QChar::DirL + << (QList() << 0 << 1 << 2 << 5 << 4 << 3 << 6 << 7 << 8 << 12 << 11 << 10 << 9); + QTest::newRow("RTL, 4 items") + << QString::fromUtf8("\327\220\327\221\327\222abc\327\220\327\221\327\222abc") + << (int) QChar::DirR + << (QList() << 0 << 1 << 2 << 5 << 4 << 3 << 6 << 7 << 8 << 12 << 11 << 10 << 9); +} + +void tst_QLineEdit::bidiVisualMovement() +{ + QFETCH(QString, logical); + QFETCH(int, basicDir); + QFETCH(IntList, positionList); + + QLineEdit le; + le.setText(logical); + + le.setCursorMoveStyle(QTextCursor::Visual); + le.setCursorPosition(0); + + bool moved; + int i = 0, oldPos, newPos = 0; + + do { + oldPos = newPos; + QVERIFY(oldPos == positionList[i]); + if (basicDir == QChar::DirL) { + QTest::keyClick(&le, Qt::Key_Right); + } else + QTest::keyClick(&le, Qt::Key_Left); + newPos = le.cursorPosition(); + moved = (oldPos != newPos); + i++; + } while (moved); + + QVERIFY(i == positionList.size()); + + do { + i--; + oldPos = newPos; + QVERIFY(oldPos == positionList[i]); + if (basicDir == QChar::DirL) { + QTest::keyClick(&le, Qt::Key_Left); + } else + { + QTest::keyClick(&le, Qt::Key_Right); + } + newPos = le.cursorPosition(); + moved = (oldPos != newPos); + } while (moved && i >= 0); +} + +void tst_QLineEdit::bidiLogicalMovement_data() +{ + bidiVisualMovement_data(); +} + +void tst_QLineEdit::bidiLogicalMovement() +{ + QFETCH(QString, logical); + QFETCH(int, basicDir); + + QLineEdit le; + le.setText(logical); + + le.setCursorMoveStyle(QTextCursor::Logical); + le.setCursorPosition(0); + + bool moved; + int i = 0, oldPos, newPos = 0; + + do { + oldPos = newPos; + QVERIFY(oldPos == i); + if (basicDir == QChar::DirL) { + QTest::keyClick(&le, Qt::Key_Right); + } else + QTest::keyClick(&le, Qt::Key_Left); + newPos = le.cursorPosition(); + moved = (oldPos != newPos); + i++; + } while (moved); + + do { + i--; + oldPos = newPos; + QVERIFY(oldPos == i); + if (basicDir == QChar::DirL) { + QTest::keyClick(&le, Qt::Key_Left); + } else + { + QTest::keyClick(&le, Qt::Key_Right); + } + newPos = le.cursorPosition(); + moved = (oldPos != newPos); + } while (moved && i >= 0); +} + QTEST_MAIN(tst_QLineEdit) #include "tst_qlineedit.moc" diff --git a/tests/auto/qtextedit/tst_qtextedit.cpp b/tests/auto/qtextedit/tst_qtextedit.cpp index 9ca17b9f5f..5a645937d7 100644 --- a/tests/auto/qtextedit/tst_qtextedit.cpp +++ b/tests/auto/qtextedit/tst_qtextedit.cpp @@ -42,7 +42,6 @@ #include - #include #include #include @@ -69,6 +68,7 @@ typedef QList pairListType; Q_DECLARE_METATYPE(pairListType); Q_DECLARE_METATYPE(keyPairType); Q_DECLARE_METATYPE(QList); +Q_DECLARE_METATYPE(QList); #ifdef Q_WS_MAC #include @@ -205,6 +205,11 @@ private slots: #ifndef QT_NO_CONTEXTMENU void taskQTBUG_7902_contextMenuCrash(); #endif + void bidiVisualMovement_data(); + void bidiVisualMovement(); + + void bidiLogicalMovement_data(); + void bidiLogicalMovement(); private: void createSelection(); @@ -2235,5 +2240,147 @@ void tst_QTextEdit::taskQTBUG_7902_contextMenuCrash() } #endif +void tst_QTextEdit::bidiVisualMovement_data() +{ + QTest::addColumn("logical"); + QTest::addColumn("basicDir"); + QTest::addColumn >("positionList"); + + QTest::newRow("Latin text") + << QString::fromUtf8("abc") + << (int) QChar::DirL + << (QList() << 0 << 1 << 2 << 3); + QTest::newRow("Hebrew text, one item") + << QString::fromUtf8("\327\220\327\221\327\222") + << (int) QChar::DirR + << (QList() << 0 << 1 << 2 << 3); + QTest::newRow("Hebrew text after Latin text") + << QString::fromUtf8("abc\327\220\327\221\327\222") + << (int) QChar::DirL + << (QList() << 0 << 1 << 2 << 6 << 5 << 4 << 3); + QTest::newRow("Latin text after Hebrew text") + << QString::fromUtf8("\327\220\327\221\327\222abc") + << (int) QChar::DirR + << (QList() << 0 << 1 << 2 << 6 << 5 << 4 << 3); + QTest::newRow("LTR, 3 items") + << QString::fromUtf8("abc\327\220\327\221\327\222abc") + << (int) QChar::DirL + << (QList() << 0 << 1 << 2 << 5 << 4 << 3 << 6 << 7 << 8 << 9); + QTest::newRow("RTL, 3 items") + << QString::fromUtf8("\327\220\327\221\327\222abc\327\220\327\221\327\222") + << (int) QChar::DirR + << (QList() << 0 << 1 << 2 << 5 << 4 << 3 << 6 << 7 << 8 << 9); + QTest::newRow("LTR, 4 items") + << QString::fromUtf8("abc\327\220\327\221\327\222abc\327\220\327\221\327\222") + << (int) QChar::DirL + << (QList() << 0 << 1 << 2 << 5 << 4 << 3 << 6 << 7 << 8 << 12 << 11 << 10 << 9); + QTest::newRow("RTL, 4 items") + << QString::fromUtf8("\327\220\327\221\327\222abc\327\220\327\221\327\222abc") + << (int) QChar::DirR + << (QList() << 0 << 1 << 2 << 5 << 4 << 3 << 6 << 7 << 8 << 12 << 11 << 10 << 9); +} + +void tst_QTextEdit::bidiVisualMovement() +{ + QFETCH(QString, logical); + QFETCH(int, basicDir); + QFETCH(QList, positionList); + + ed->setText(logical); + + QTextOption option = ed->document()->defaultTextOption(); + option.setTextDirection(basicDir == QChar::DirL ? Qt::LeftToRight : Qt::RightToLeft); + ed->document()->setDefaultTextOption(option); + + ed->document()->setDefaultCursorMoveStyle(QTextCursor::Visual); + ed->moveCursor(QTextCursor::Start); + ed->show(); + + bool moved; + int i = 0, oldPos, newPos = 0; + + do { + oldPos = newPos; + QVERIFY(oldPos == positionList[i]); + if (basicDir == QChar::DirL) { + ed->moveCursor(QTextCursor::Right); + } else + { + ed->moveCursor(QTextCursor::Left); + } + newPos = ed->textCursor().position(); + moved = (oldPos != newPos); + i++; + } while (moved); + + QVERIFY(i == positionList.size()); + + do { + i--; + oldPos = newPos; + QVERIFY(oldPos == positionList[i]); + if (basicDir == QChar::DirL) { + ed->moveCursor(QTextCursor::Left); + } else + { + ed->moveCursor(QTextCursor::Right); + } + newPos = ed->textCursor().position(); + moved = (oldPos != newPos); + } while (moved && i >= 0); +} + +void tst_QTextEdit::bidiLogicalMovement_data() +{ + bidiVisualMovement_data(); +} + +void tst_QTextEdit::bidiLogicalMovement() +{ + QFETCH(QString, logical); + QFETCH(int, basicDir); + + ed->setText(logical); + + QTextOption option = ed->document()->defaultTextOption(); + option.setTextDirection(basicDir == QChar::DirL ? Qt::LeftToRight : Qt::RightToLeft); + ed->document()->setDefaultTextOption(option); + + ed->document()->setDefaultCursorMoveStyle(QTextCursor::Logical); + ed->moveCursor(QTextCursor::Start); + ed->show(); + + bool moved; + int i = 0, oldPos, newPos = 0; + + do { + oldPos = newPos; + QVERIFY(oldPos == i); + if (basicDir == QChar::DirL) { + ed->moveCursor(QTextCursor::Right); + } else + { + ed->moveCursor(QTextCursor::Left); + } + newPos = ed->textCursor().position(); + moved = (oldPos != newPos); + i++; + } while (moved); + + do { + i--; + oldPos = newPos; + QVERIFY(oldPos == i); + if (basicDir == QChar::DirL) { + ed->moveCursor(QTextCursor::Left); + } else + { + ed->moveCursor(QTextCursor::Right); + } + newPos = ed->textCursor().position(); + moved = (oldPos != newPos); + } while (moved && i >= 0); +} + QTEST_MAIN(tst_QTextEdit) #include "tst_qtextedit.moc" From a7b6f4c8a532df62ba053f30f23dfaecc148351a Mon Sep 17 00:00:00 2001 From: Jiang Jiang Date: Mon, 18 Apr 2011 17:08:30 +0200 Subject: [PATCH 11/53] Turn on HarfBuzz support for Mac/Cocoa It's possible to enable HarfBuzz text layout on Mac by either: - Set QT_ENABLE_HARFBUZZ environment variable when running a Qt app. - configure with -harfbuzz to build Qt, then HarfBuzz support will be turned on by default. HarfBuzz will only be used when the font explicitly requested is supported by HarfBuzz (aka. TrueType/OpenType font), other fonts (AAT fonts) will still be handled by Core Text. Using HarfBuzz for text layout will hopefully solve most tricky complex text shaping bugs on Mac. Task-number: QTBUG-17728 Reviewed-by: Eskil --- configure | 16 +++++++++++++++- src/gui/text/qtextengine.cpp | 34 +++++++++++++++++++++++++++++++++- src/gui/text/text.pri | 3 +++ 3 files changed, 51 insertions(+), 2 deletions(-) diff --git a/configure b/configure index 60e1ec1216..b0cafbcab7 100755 --- a/configure +++ b/configure @@ -804,6 +804,7 @@ CFG_MAC_XARCH=auto CFG_MAC_CARBON=no CFG_MAC_COCOA=yes COMMANDLINE_MAC_CARBON=no +CFG_MAC_HARFBUZZ=no CFG_SXE=no CFG_PREFIX_INSTALL=yes CFG_SDK= @@ -1041,7 +1042,7 @@ while [ "$#" -gt 0 ]; do VAL=no ;; #Qt style yes options - -incremental|-qvfb|-profile|-shared|-static|-sm|-xinerama|-xshape|-xsync|-xinput|-egl|-reduce-exports|-pch|-separate-debug-info|-stl|-freetype|-xcursor|-xfixes|-xrandr|-xrender|-mitshm|-fontconfig|-xkb|-nis|-qdbus|-dbus|-dbus-linked|-glib|-gstreamer|-gtkstyle|-cups|-iconv|-largefile|-h|-help|-v|-verbose|-debug|-release|-fast|-accessibility|-confirm-license|-gnumake|-framework|-qt3support|-debug-and-release|-exceptions|-cocoa|-carbon|-universal|-prefix-install|-silent|-armfpa|-optimized-qmake|-dwarf2|-reduce-relocations|-sse|-openssl|-openssl-linked|-ptmalloc|-xmlpatterns|-phonon|-phonon-backend|-multimedia|-audio-backend|-svg|-declarative|-declarative-debug|-javascript-jit|-script|-scripttools|-rpath|-force-pkg-config|-s60|-usedeffiles|-icu) + -incremental|-qvfb|-profile|-shared|-static|-sm|-xinerama|-xshape|-xsync|-xinput|-egl|-reduce-exports|-pch|-separate-debug-info|-stl|-freetype|-xcursor|-xfixes|-xrandr|-xrender|-mitshm|-fontconfig|-xkb|-nis|-qdbus|-dbus|-dbus-linked|-glib|-gstreamer|-gtkstyle|-cups|-iconv|-largefile|-h|-help|-v|-verbose|-debug|-release|-fast|-accessibility|-confirm-license|-gnumake|-framework|-qt3support|-debug-and-release|-exceptions|-cocoa|-carbon|-universal|-harfbuzz|-prefix-install|-silent|-armfpa|-optimized-qmake|-dwarf2|-reduce-relocations|-sse|-openssl|-openssl-linked|-ptmalloc|-xmlpatterns|-phonon|-phonon-backend|-multimedia|-audio-backend|-svg|-declarative|-declarative-debug|-javascript-jit|-script|-scripttools|-rpath|-force-pkg-config|-s60|-usedeffiles|-icu) VAR=`echo $1 | sed "s,^-\(.*\),\1,"` VAL=yes ;; @@ -1499,6 +1500,13 @@ while [ "$#" -gt 0 ]; do UNKNOWN_OPT=yes fi ;; + harfbuzz) + if [ "$PLATFORM_MAC" = "yes" ] && [ "$CFG_MAC_CARBON" != "yes" ] && [ "$VAL" = "yes" ]; then + CFG_MAC_HARFBUZZ="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; framework) if [ "$PLATFORM_MAC" = "yes" ] || [ "$PLATFORM_QPA" = "yes" ]; then @@ -4257,6 +4265,11 @@ Qt/Mac only: -sdk ......... Build Qt using Apple provided SDK . This option requires gcc 4. To use a different SDK with gcc 3.3, set the SDKROOT environment variable. + -harfbuzz .......... Use HarfBuzz to do text layout instead of Core Text when possible. + It is only available to Cocoa builds. + * -no-harfbuzz ....... Disable HarfBuzz on Mac. It can still be enabled by setting + QT_ENABLE_HARFBUZZ environment variable. + EOF fi @@ -7251,6 +7264,7 @@ fi [ "$CFG_NAS" = "system" ] && QT_CONFIG="$QT_CONFIG nas" [ "$CFG_OPENSSL" = "yes" ] && QT_CONFIG="$QT_CONFIG openssl" [ "$CFG_OPENSSL" = "linked" ] && QT_CONFIG="$QT_CONFIG openssl-linked" +[ "$CFG_MAC_HARFBUZZ" = "yes" ] && QT_CONFIG="$QT_CONFIG harfbuzz" if [ "$PLATFORM_X11" = "yes" ]; then [ "$CFG_SM" = "yes" ] && QT_CONFIG="$QT_CONFIG x11sm" diff --git a/src/gui/text/qtextengine.cpp b/src/gui/text/qtextengine.cpp index 0e649f0c2d..dab4bb75ec 100644 --- a/src/gui/text/qtextengine.cpp +++ b/src/gui/text/qtextengine.cpp @@ -856,6 +856,21 @@ void QTextEngine::shapeLine(const QScriptLine &line) } } +#if !defined(QT_ENABLE_HARFBUZZ_FOR_MAC) +static bool enableHarfBuzz() +{ + static enum { Yes, No, Unknown } status = Unknown; + + if (status == Unknown) { + QByteArray v = qgetenv("QT_ENABLE_HARFBUZZ"); + bool value = !v.isEmpty() && v != "0" && v != "false"; + if (value) status = Yes; + else status = No; + } + return status == Yes; +} +#endif + void QTextEngine::shapeText(int item) const { Q_ASSERT(item < layoutData->items.size()); @@ -865,7 +880,24 @@ void QTextEngine::shapeText(int item) const return; #if defined(Q_WS_MAC) - shapeTextMac(item); +#if !defined(QT_ENABLE_HARFBUZZ_FOR_MAC) + if (enableHarfBuzz()) { +#endif + QFontEngine *actualFontEngine = fontEngine(si, &si.ascent, &si.descent, &si.leading); + if (actualFontEngine->type() == QFontEngine::Multi) + actualFontEngine = static_cast(actualFontEngine)->engine(0); + + HB_Face face = actualFontEngine->harfbuzzFace(); + HB_Script script = (HB_Script) si.analysis.script; + if (face->supported_scripts[script]) + shapeTextWithHarfbuzz(item); + else + shapeTextMac(item); +#if !defined(QT_ENABLE_HARFBUZZ_FOR_MAC) + } else { + shapeTextMac(item); + } +#endif #elif defined(Q_WS_WINCE) shapeTextWithCE(item); #else diff --git a/src/gui/text/text.pri b/src/gui/text/text.pri index 2e0c6dea5d..e5d57d069d 100644 --- a/src/gui/text/text.pri +++ b/src/gui/text/text.pri @@ -114,6 +114,9 @@ unix:x11 { OBJECTIVE_SOURCES += \ text/qfontengine_coretext.mm \ text/qfontengine_mac.mm + contains(QT_CONFIG, harfbuzz) { + DEFINES += QT_ENABLE_HARFBUZZ_FOR_MAC + } } embedded { From 0d32728af23cd307c84d8c98dcd6d6d78908e5bf Mon Sep 17 00:00:00 2001 From: Jiang Jiang Date: Tue, 19 Apr 2011 12:48:19 +0200 Subject: [PATCH 12/53] Don't transform glyph positions for Core Graphics paint engine Since it already transformed text positions based on transform matrix on QPainter. Reviewed-by: Eskil (cherry picked from commit b86c9120710bf1481df5f6541618169a82fd65b8) --- src/gui/painting/qpainter.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/gui/painting/qpainter.cpp b/src/gui/painting/qpainter.cpp index 9fafba5f4f..b7686fa7fe 100644 --- a/src/gui/painting/qpainter.cpp +++ b/src/gui/painting/qpainter.cpp @@ -156,7 +156,8 @@ static bool qt_paintengine_supports_transformations(QPaintEngine::Type type) { return type == QPaintEngine::OpenGL2 || type == QPaintEngine::OpenVG - || type == QPaintEngine::OpenGL; + || type == QPaintEngine::OpenGL + || type == QPaintEngine::CoreGraphics; } #ifndef QT_NO_DEBUG @@ -5809,7 +5810,7 @@ void QPainter::drawGlyphs(const QPointF &position, const QGlyphs &glyphs) bool paintEngineSupportsTransformations = d->extended != 0 ? qt_paintengine_supports_transformations(d->extended->type()) - : false; + : qt_paintengine_supports_transformations(d->engine->type()); for (int i=0; i Date: Wed, 20 Apr 2011 10:19:02 +0200 Subject: [PATCH 13/53] Remove extra comma at the end of enum list It fails compilerwarnings test. Reviewed-by: TrustMe (cherry picked from commit 1e847c00dcf4948b8892d0a552576e1d3ea554b9) --- src/gui/text/qtextcursor.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/text/qtextcursor.h b/src/gui/text/qtextcursor.h index 30f827298b..9e4c0b82df 100644 --- a/src/gui/text/qtextcursor.h +++ b/src/gui/text/qtextcursor.h @@ -88,7 +88,7 @@ public: }; enum MoveStyle { Logical, - Visual, + Visual }; void setPosition(int pos, MoveMode mode = MoveAnchor); From 044e7602ae72889f363d688dbe0d73cec5f0636a Mon Sep 17 00:00:00 2001 From: Jiang Jiang Date: Tue, 19 Apr 2011 14:40:19 +0200 Subject: [PATCH 14/53] Take leading space width into account for painting and selection When painting horizontally centered RTL text and selection with trailing spaces, we need to take that space width into account because line.textAdvance doesn't include it. Task-number: QTBUG-18612 Reviewed-by: Eskil (cherry picked from commit 224226727f07e8940e0d3131fe7587b11cc4a6ca) --- src/gui/text/qtextengine.cpp | 4 +++- src/gui/text/qtextlayout.cpp | 1 + 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/gui/text/qtextengine.cpp b/src/gui/text/qtextengine.cpp index dab4bb75ec..ce012a818f 100644 --- a/src/gui/text/qtextengine.cpp +++ b/src/gui/text/qtextengine.cpp @@ -2777,12 +2777,14 @@ QFixed QTextEngine::alignLine(const QScriptLine &line) // if width is QFIXED_MAX that means we used setNumColumns() and that implicitly makes this line left aligned. if (!line.justified && line.width != QFIXED_MAX) { int align = option.alignment(); + if (align & Qt::AlignLeft) + x -= leadingSpaceWidth(line); if (align & Qt::AlignJustify && isRightToLeft()) align = Qt::AlignRight; if (align & Qt::AlignRight) x = line.width - (line.textAdvance + leadingSpaceWidth(line)); else if (align & Qt::AlignHCenter) - x = (line.width - line.textAdvance)/2; + x = (line.width - (line.textAdvance + leadingSpaceWidth(line)))/2; } return x; } diff --git a/src/gui/text/qtextlayout.cpp b/src/gui/text/qtextlayout.cpp index 9fc4e7f470..cb5ba0e672 100644 --- a/src/gui/text/qtextlayout.cpp +++ b/src/gui/text/qtextlayout.cpp @@ -1060,6 +1060,7 @@ void QTextLayout::draw(QPainter *p, const QPointF &pos, const QVectorleadingSpaceWidth(sl).toReal(), 0); bool isLastLineInBlock = (line == d->lines.size()-1); int sl_length = sl.length + (isLastLineInBlock? 1 : 0); // the infamous newline From d64460fffb488eb2e7b90df58d3891338bad7948 Mon Sep 17 00:00:00 2001 From: Jiang Jiang Date: Wed, 27 Apr 2011 08:47:46 +0200 Subject: [PATCH 15/53] Make sure layoutData exist before checking for string direction MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Otherwise accessing that through QTextEngine::alignLine may cause crash. Reviewed-by: Samuel Rødal (cherry picked from commit dcdb62c3d1a76d951c4b65bc1b1bd930e2ad14ec) --- src/gui/text/qtextengine.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/gui/text/qtextengine.cpp b/src/gui/text/qtextengine.cpp index ce012a818f..cc150c5965 100644 --- a/src/gui/text/qtextengine.cpp +++ b/src/gui/text/qtextengine.cpp @@ -1598,6 +1598,8 @@ bool QTextEngine::isRightToLeft() const default: break; } + if (!layoutData) + itemize(); // this places the cursor in the right position depending on the keyboard layout if (layoutData->string.isEmpty()) return QApplication::keyboardInputDirection() == Qt::RightToLeft; From bbbfc9b0eb373054aa4df7928c6472acc8f49c81 Mon Sep 17 00:00:00 2001 From: Jiang Jiang Date: Wed, 27 Apr 2011 11:39:09 +0200 Subject: [PATCH 16/53] Another ugly hack to make bidi cursor work with Core Text If the text is wrapped with LRE/LRO/RLE/RLO override/embed marks, Core Text in Mac OS X 10.5 doesn't produce an empty glyph at the beginning of the glyphs (while it does in Mac OS X 10.6), thus we need to prepend an empty glyph here, otherwise cursor position calculation will consider the first two characters as a ligature of the same glyph. Reviewed-by: Eskil (cherry picked from commit a36ac6c34bafa801c2c30d76f59e4a3594efc4d5) --- src/gui/text/qfontengine_coretext.mm | 27 +++++++++++++++++--- tests/auto/qcomplextext/tst_qcomplextext.cpp | 1 + 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/src/gui/text/qfontengine_coretext.mm b/src/gui/text/qfontengine_coretext.mm index ff440de492..c4d2d47f59 100644 --- a/src/gui/text/qfontengine_coretext.mm +++ b/src/gui/text/qfontengine_coretext.mm @@ -180,6 +180,8 @@ bool QCoreTextFontEngineMulti::stringToCMap(const QChar *str, int len, QGlyphLay &kCFCopyStringDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks); typeSetter = CTTypesetterCreateWithAttributedStringAndOptions(attributedString, options); } else +#else + Q_UNUSED(flags); #endif typeSetter = CTTypesetterCreateWithAttributedString(attributedString); @@ -219,6 +221,25 @@ bool QCoreTextFontEngineMulti::stringToCMap(const QChar *str, int len, QGlyphLay Q_ASSERT((CTRunGetStatus(run) & kCTRunStatusRightToLeft) == rtl); CFRange stringRange = CTRunGetStringRange(run); + int prepend = 0; +#if MAC_OS_X_VERSION_MAX_ALLOWED == MAC_OS_X_VERSION_10_5 + UniChar beginGlyph = CFStringGetCharacterAtIndex(cfstring, stringRange.location); + QChar dir = QChar::direction(beginGlyph); + bool beginWithOverride = dir == QChar::DirLRO || dir == QChar::DirRLO || dir == QChar::DirLRE || dir == QChar::DirRLE; + if (beginWithOverride) { + logClusters[stringRange.location] = 0; + outGlyphs[0] = 0xFFFF; + outAdvances_x[0] = 0; + outAdvances_y[0] = 0; + outAttributes[0].clusterStart = true; + outAttributes[0].dontPrint = true; + outGlyphs++; + outAdvances_x++; + outAdvances_y++; + outAttributes++; + prepend = 1; + } +#endif UniChar endGlyph = CFStringGetCharacterAtIndex(cfstring, stringRange.location + stringRange.length - 1); bool endWithPDF = QChar::direction(endGlyph) == QChar::DirPDF; if (endWithPDF) @@ -271,9 +292,9 @@ bool QCoreTextFontEngineMulti::stringToCMap(const QChar *str, int len, QGlyphLay CFIndex k = 0; CFIndex i = 0; - for (i = stringRange.location; + for (i = stringRange.location + prepend; (i < stringRange.location + stringRange.length) && (k < glyphCount); ++i) { - if (tmpIndices[k * rtlSign + rtlOffset] == i || i == stringRange.location) { + if (tmpIndices[k * rtlSign + rtlOffset] == i || i == stringRange.location + prepend) { logClusters[i] = k + firstGlyphIndex; outAttributes[k].clusterStart = true; ++k; @@ -308,7 +329,7 @@ bool QCoreTextFontEngineMulti::stringToCMap(const QChar *str, int len, QGlyphLay : QFixed::fromReal(lastGlyphAdvance.width); if (endWithPDF) { - logClusters[stringRange.location + stringRange.length - 1] = glyphCount; + logClusters[stringRange.location + stringRange.length - 1] = glyphCount + prepend; outGlyphs[glyphCount] = 0xFFFF; outAdvances_x[glyphCount] = 0; outAdvances_y[glyphCount] = 0; diff --git a/tests/auto/qcomplextext/tst_qcomplextext.cpp b/tests/auto/qcomplextext/tst_qcomplextext.cpp index 04943c5ceb..58b31b4aa4 100644 --- a/tests/auto/qcomplextext/tst_qcomplextext.cpp +++ b/tests/auto/qcomplextext/tst_qcomplextext.cpp @@ -214,6 +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); bool moved; int oldPos, newPos = 0; qreal x, newX; From 774527dd1e85da6ab91cba9b0e5897ba90f4c828 Mon Sep 17 00:00:00 2001 From: Jiang Jiang Date: Wed, 27 Apr 2011 16:05:09 +0200 Subject: [PATCH 17/53] Use maximum ascent/descent/leading from fallback fonts in shaping When shaping a QScriptItem with a multi font engine, currently we only take the ascent/descent/leading from the primary (first) font engine in that multi font engine, however, subsequent engines used during shaping may have larger ascent/descent/leading, disregarding them may cause clipping issues in some cases. It's fixed by checking each font engine used in the shaping process and take the maximum value instead of the first one. On ATSUI we merely make it compile. Task-number: QTBUG-16719 Reviewed-by: Eskil (cherry picked from commit c501403cb5a0c9ec21b00e0c2f640ae85566e0cf) --- src/gui/text/qfontengine_coretext.mm | 13 ++++++++++--- src/gui/text/qfontengine_coretext_p.h | 3 ++- src/gui/text/qfontengine_mac.mm | 2 +- src/gui/text/qfontengine_mac_p.h | 2 +- src/gui/text/qtextengine.cpp | 4 ++++ src/gui/text/qtextengine_mac.cpp | 4 ++-- 6 files changed, 20 insertions(+), 8 deletions(-) diff --git a/src/gui/text/qfontengine_coretext.mm b/src/gui/text/qfontengine_coretext.mm index c4d2d47f59..d4df2183ed 100644 --- a/src/gui/text/qfontengine_coretext.mm +++ b/src/gui/text/qfontengine_coretext.mm @@ -162,8 +162,10 @@ uint QCoreTextFontEngineMulti::fontIndexForFont(CTFontRef font) const return engines.count() - 1; } -bool QCoreTextFontEngineMulti::stringToCMap(const QChar *str, int len, QGlyphLayout *glyphs, int *nglyphs, QTextEngine::ShaperFlags flags, - unsigned short *logClusters, const HB_CharAttributes *) const +bool QCoreTextFontEngineMulti::stringToCMap(const QChar *str, int len, QGlyphLayout *glyphs, + int *nglyphs, QTextEngine::ShaperFlags flags, + unsigned short *logClusters, const HB_CharAttributes *, + QScriptItem *si) const { QCFType cfstring = CFStringCreateWithCharactersNoCopy(0, reinterpret_cast(str), @@ -254,7 +256,12 @@ bool QCoreTextFontEngineMulti::stringToCMap(const QChar *str, int len, QGlyphLay if (!runAttribs) runAttribs = attributeDict; CTFontRef runFont = static_cast(CFDictionaryGetValue(runAttribs, NSFontAttributeName)); - const uint fontIndex = (fontIndexForFont(runFont) << 24); + uint fontIndex = fontIndexForFont(runFont); + const QFontEngine *engine = engineAt(fontIndex); + fontIndex <<= 24; + si->ascent = qMax(engine->ascent(), si->ascent); + si->descent = qMax(engine->descent(), si->descent); + si->leading = qMax(engine->leading(), si->leading); //NSLog(@"Run Font Name = %@", CTFontCopyFamilyName(runFont)); if (endWithPDF) glyphCount--; diff --git a/src/gui/text/qfontengine_coretext_p.h b/src/gui/text/qfontengine_coretext_p.h index aa5f91a20c..bb80a9b2f3 100644 --- a/src/gui/text/qfontengine_coretext_p.h +++ b/src/gui/text/qfontengine_coretext_p.h @@ -120,7 +120,8 @@ public: QTextEngine::ShaperFlags flags) const; bool stringToCMap(const QChar *str, int len, QGlyphLayout *glyphs, int *nglyphs, QTextEngine::ShaperFlags flags, - unsigned short *logClusters, const HB_CharAttributes *charAttributes) const; + unsigned short *logClusters, const HB_CharAttributes *charAttributes, + QScriptItem *si) const; virtual const char *name() const { return "CoreText"; } protected: diff --git a/src/gui/text/qfontengine_mac.mm b/src/gui/text/qfontengine_mac.mm index 673a7c86fa..9f094ad7d1 100644 --- a/src/gui/text/qfontengine_mac.mm +++ b/src/gui/text/qfontengine_mac.mm @@ -377,7 +377,7 @@ bool QFontEngineMacMulti::stringToCMap(const QChar *str, int len, QGlyphLayout * } bool QFontEngineMacMulti::stringToCMap(const QChar *str, int len, QGlyphLayout *glyphs, int *nglyphs, QTextEngine::ShaperFlags flags, - unsigned short *logClusters, const HB_CharAttributes *charAttributes) const + unsigned short *logClusters, const HB_CharAttributes *charAttributes, QScriptItem *) const { if (*nglyphs < len) { *nglyphs = len; diff --git a/src/gui/text/qfontengine_mac_p.h b/src/gui/text/qfontengine_mac_p.h index 385fa83fe9..292ea98d9a 100644 --- a/src/gui/text/qfontengine_mac_p.h +++ b/src/gui/text/qfontengine_mac_p.h @@ -131,7 +131,7 @@ public: virtual bool stringToCMap(const QChar *str, int len, QGlyphLayout *glyphs, int *nglyphs, QTextEngine::ShaperFlags flags) const; bool stringToCMap(const QChar *str, int len, QGlyphLayout *glyphs, int *nglyphs, QTextEngine::ShaperFlags flags, - unsigned short *logClusters, const HB_CharAttributes *charAttributes) const; + unsigned short *logClusters, const HB_CharAttributes *charAttributes, QScriptItem *) const; virtual void recalcAdvances(QGlyphLayout *, QTextEngine::ShaperFlags) const; virtual void doKerning(QGlyphLayout *, QTextEngine::ShaperFlags) const; diff --git a/src/gui/text/qtextengine.cpp b/src/gui/text/qtextengine.cpp index cc150c5965..ff27bc673f 100644 --- a/src/gui/text/qtextengine.cpp +++ b/src/gui/text/qtextengine.cpp @@ -1274,6 +1274,10 @@ void QTextEngine::shapeTextWithHarfbuzz(int item) const actualFontEngine = static_cast(font)->engine(engineIdx); } + si.ascent = qMax(actualFontEngine->ascent(), si.ascent); + si.descent = qMax(actualFontEngine->descent(), si.descent); + si.leading = qMax(actualFontEngine->leading(), si.leading); + shaper_item.font = actualFontEngine->harfbuzzFont(); shaper_item.face = actualFontEngine->harfbuzzFace(); diff --git a/src/gui/text/qtextengine_mac.cpp b/src/gui/text/qtextengine_mac.cpp index 97e8c5b0f8..2c6e579b45 100644 --- a/src/gui/text/qtextengine_mac.cpp +++ b/src/gui/text/qtextengine_mac.cpp @@ -605,11 +605,11 @@ void QTextEngine::shapeTextMac(int item) const unsigned short *log_clusters = logClusters(&si); bool stringToCMapFailed = false; - if (!fe->stringToCMap(str, len, &g, &num_glyphs, flags, log_clusters, attributes())) { + if (!fe->stringToCMap(str, len, &g, &num_glyphs, flags, log_clusters, attributes(), &si)) { ensureSpace(num_glyphs); g = availableGlyphs(&si); stringToCMapFailed = !fe->stringToCMap(str, len, &g, &num_glyphs, flags, log_clusters, - attributes()); + attributes(), &si); } if (!stringToCMapFailed) { From f26c4ba80dd927a705f5af03b915dcf1af8f351a Mon Sep 17 00:00:00 2001 From: Dmitry Zelenkovsky Date: Thu, 28 Apr 2011 11:49:13 +0200 Subject: [PATCH 18/53] Support more items for QTextCharFormat::VerticalAlignment enum for custom text objects. * QTextCharFormat::AlignNormal - support text format descent, place text object bottom on (baseline - descent). * QTextCharFormat::AlignBottom - place text object bottom on baseline. * QTextCharFormat::AlignTop - Still not supported. * Any other vertical alignment is mapped QTextCharFormat::AlignBottom. Add new enum AlignBaseline for custom inline objects to take into account font baseline. Merge-request: 2578 Reviewed-by: Eskil Abrahamsen Blomfeldt (cherry picked from commit ee9455ed2a83084692d969c398ecb91bcd4fc33a) --- src/gui/text/qtextdocumentlayout.cpp | 13 +++++++++++-- src/gui/text/qtextformat.h | 3 ++- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/src/gui/text/qtextdocumentlayout.cpp b/src/gui/text/qtextdocumentlayout.cpp index ce157be254..130f012639 100644 --- a/src/gui/text/qtextdocumentlayout.cpp +++ b/src/gui/text/qtextdocumentlayout.cpp @@ -2996,10 +2996,19 @@ void QTextDocumentLayout::resizeInlineObject(QTextInlineObject item, int posInDo QSizeF inlineSize = (pos == QTextFrameFormat::InFlow ? intrinsic : QSizeF(0, 0)); item.setWidth(inlineSize.width()); - if (f.verticalAlignment() == QTextCharFormat::AlignMiddle) { + + QFontMetrics m(f.font()); + switch (f.verticalAlignment()) + { + case QTextCharFormat::AlignMiddle: item.setDescent(inlineSize.height() / 2); item.setAscent(inlineSize.height() / 2 - 1); - } else { + break; + case QTextCharFormat::AlignBaseline: + item.setDescent(m.descent()); + item.setAscent(inlineSize.height() - m.descent() - 1); + break; + default: item.setDescent(0); item.setAscent(inlineSize.height() - 1); } diff --git a/src/gui/text/qtextformat.h b/src/gui/text/qtextformat.h index ff28eaa1b2..4f4752a26a 100644 --- a/src/gui/text/qtextformat.h +++ b/src/gui/text/qtextformat.h @@ -378,7 +378,8 @@ public: AlignSubScript, AlignMiddle, AlignTop, - AlignBottom + AlignBottom, + AlignBaseline }; enum UnderlineStyle { // keep in sync with Qt::PenStyle! NoUnderline, From ac4af55972291db96cc6bfa322dc7d35b67f7775 Mon Sep 17 00:00:00 2001 From: Eskil Abrahamsen Blomfeldt Date: Mon, 2 May 2011 10:06:44 +0200 Subject: [PATCH 19/53] Make pixel size a qreal in QRawFont The pixel size in the font engines is already a floating point value. For maximum flexibility, we should expose this in the public API. Task-number: QTBUG-18817 Reviewed-by: Jiang Jiang (cherry picked from commit ac9e63b58533a3215106ed9da82cff3a3e3dda3a) --- src/gui/text/qrawfont.cpp | 6 +++--- src/gui/text/qrawfont.h | 4 ++-- tests/auto/qrawfont/tst_qrawfont.cpp | 32 ++++++++++++++-------------- 3 files changed, 21 insertions(+), 21 deletions(-) diff --git a/src/gui/text/qrawfont.cpp b/src/gui/text/qrawfont.cpp index 6ac2677c02..1bce909b0e 100644 --- a/src/gui/text/qrawfont.cpp +++ b/src/gui/text/qrawfont.cpp @@ -308,10 +308,10 @@ qreal QRawFont::descent() const \sa setPixelSize() */ -int QRawFont::pixelSize() const +qreal QRawFont::pixelSize() const { if (!isValid()) - return -1; + return 0.0; return d->fontEngine->fontDef.pixelSize; } @@ -577,7 +577,7 @@ QRawFont QRawFont::fromFont(const QFont &font, QFontDatabase::WritingSystem writ /*! Sets the pixel size with which this font should be rendered to \a pixelSize. */ -void QRawFont::setPixelSize(int pixelSize) +void QRawFont::setPixelSize(qreal pixelSize) { if (d->fontEngine == 0) return; diff --git a/src/gui/text/qrawfont.h b/src/gui/text/qrawfont.h index 96dc838ede..56aeefc8ff 100644 --- a/src/gui/text/qrawfont.h +++ b/src/gui/text/qrawfont.h @@ -96,8 +96,8 @@ public: const QTransform &transform = QTransform()) const; QPainterPath pathForGlyph(quint32 glyphIndex) const; - void setPixelSize(int pixelSize); - int pixelSize() const; + void setPixelSize(qreal pixelSize); + qreal pixelSize() const; QFont::HintingPreference hintingPreference() const; diff --git a/tests/auto/qrawfont/tst_qrawfont.cpp b/tests/auto/qrawfont/tst_qrawfont.cpp index 3aa4006b68..4b42c74bb7 100644 --- a/tests/auto/qrawfont/tst_qrawfont.cpp +++ b/tests/auto/qrawfont/tst_qrawfont.cpp @@ -104,7 +104,7 @@ void tst_QRawFont::invalidRawFont() { QRawFont font; QVERIFY(!font.isValid()); - QCOMPARE(font.pixelSize(), -1); + QCOMPARE(font.pixelSize(), 0.0); QVERIFY(font.familyName().isEmpty()); QCOMPARE(font.style(), QFont::StyleNormal); QCOMPARE(font.weight(), -1); @@ -165,7 +165,7 @@ void tst_QRawFont::correctFontData_data() QTest::addColumn("weight"); QTest::addColumn("hintingPreference"); QTest::addColumn("unitsPerEm"); - QTest::addColumn("pixelSize"); + QTest::addColumn("pixelSize"); int hintingPreferences[] = { int(QFont::PreferDefaultHinting), @@ -189,7 +189,7 @@ void tst_QRawFont::correctFontData_data() << QFont::Normal << QFont::HintingPreference(*hintingPreference) << 1000.0 - << 10; + << 10.0; fileName = QLatin1String(SRCDIR "testfont_bold_italic.ttf"); title = fileName @@ -203,7 +203,7 @@ void tst_QRawFont::correctFontData_data() << QFont::Bold << QFont::HintingPreference(*hintingPreference) << 1000.0 - << 10; + << 10.0; ++hintingPreference; } @@ -217,7 +217,7 @@ void tst_QRawFont::correctFontData() QFETCH(QFont::Weight, weight); QFETCH(QFont::HintingPreference, hintingPreference); QFETCH(qreal, unitsPerEm); - QFETCH(int, pixelSize); + QFETCH(qreal, pixelSize); QRawFont font(fileName, 10, hintingPreference); QVERIFY(font.isValid()); @@ -284,7 +284,7 @@ void tst_QRawFont::textLayout() QString familyName = QString::fromLatin1("QtBidiTestFont"); QFont font(familyName); - font.setPixelSize(18); + font.setPixelSize(18.0); QCOMPARE(QFontInfo(font).family(), familyName); QTextLayout layout(QLatin1String("Foobar")); @@ -301,7 +301,7 @@ void tst_QRawFont::textLayout() QRawFont rawFont = glyphs.font(); QVERIFY(rawFont.isValid()); QCOMPARE(rawFont.familyName(), familyName); - QCOMPARE(rawFont.pixelSize(), 18); + QCOMPARE(rawFont.pixelSize(), 18.0); QVector expectedGlyphIndices; expectedGlyphIndices << 44 << 83 << 83 << 70 << 69 << 86; @@ -597,12 +597,12 @@ void tst_QRawFont::fromFont() QFont font(familyName); font.setHintingPreference(hintingPreference); - font.setPixelSize(26); + font.setPixelSize(26.0); QRawFont rawFont = QRawFont::fromFont(font, writingSystem); QVERIFY(rawFont.isValid()); QCOMPARE(rawFont.familyName(), familyName); - QCOMPARE(rawFont.pixelSize(), 26); + QCOMPARE(rawFont.pixelSize(), 26.0); QVERIFY(fontDatabase.removeApplicationFont(id)); } @@ -623,7 +623,7 @@ void tst_QRawFont::copyConstructor() { QString rawFontFamilyName; - int rawFontPixelSize; + qreal rawFontPixelSize; qreal rawFontAscent; qreal rawFontDescent; int rawFontTableSize; @@ -691,7 +691,7 @@ void tst_QRawFont::detach() { QString rawFontFamilyName; - int rawFontPixelSize; + qreal rawFontPixelSize; qreal rawFontAscent; qreal rawFontDescent; int rawFontTableSize; @@ -773,15 +773,15 @@ void tst_QRawFont::unsupportedWritingSystem() QFont font("QtBidiTestFont"); font.setHintingPreference(hintingPreference); - font.setPixelSize(12); + font.setPixelSize(12.0); QRawFont rawFont = QRawFont::fromFont(font, QFontDatabase::Any); QCOMPARE(rawFont.familyName(), QString::fromLatin1("QtBidiTestFont")); - QCOMPARE(rawFont.pixelSize(), 12); + QCOMPARE(rawFont.pixelSize(), 12.0); rawFont = QRawFont::fromFont(font, QFontDatabase::Hebrew); QCOMPARE(rawFont.familyName(), QString::fromLatin1("QtBidiTestFont")); - QCOMPARE(rawFont.pixelSize(), 12); + QCOMPARE(rawFont.pixelSize(), 12.0); QString arabicText = QFontDatabase::writingSystemSample(QFontDatabase::Arabic); @@ -798,11 +798,11 @@ void tst_QRawFont::unsupportedWritingSystem() QGlyphs glyphs = glyphss.at(0); QRawFont layoutFont = glyphs.font(); QVERIFY(layoutFont.familyName() != QString::fromLatin1("QtBidiTestFont")); - QCOMPARE(layoutFont.pixelSize(), 12); + QCOMPARE(layoutFont.pixelSize(), 12.0); rawFont = QRawFont::fromFont(font, QFontDatabase::Arabic); QCOMPARE(rawFont.familyName(), layoutFont.familyName()); - QCOMPARE(rawFont.pixelSize(), 12); + QCOMPARE(rawFont.pixelSize(), 12.0); fontDatabase.removeApplicationFont(id); } From e4b289c276c2621423e5f052af89ff5b79401502 Mon Sep 17 00:00:00 2001 From: Martin Petersson Date: Tue, 26 Apr 2011 12:03:17 +0200 Subject: [PATCH 20/53] Fix compile warning on Windows Reviewed-by: Prasanth Ullattil (cherry picked from commit 800ad68e4f000e65b0a83ef1da2a29d595964156) --- src/corelib/io/qfilesystemengine_win.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/corelib/io/qfilesystemengine_win.cpp b/src/corelib/io/qfilesystemengine_win.cpp index 82c6ebad05..1dbc40f3ed 100644 --- a/src/corelib/io/qfilesystemengine_win.cpp +++ b/src/corelib/io/qfilesystemengine_win.cpp @@ -583,6 +583,7 @@ QString QFileSystemEngine::owner(const QFileSystemEntry &entry, QAbstractFileEng } } #else + Q_UNUSED(entry); Q_UNUSED(own); #endif return name; From 5be54b220a9f9343f8442f7b2f3de50374e22061 Mon Sep 17 00:00:00 2001 From: Martin Petersson Date: Thu, 28 Apr 2011 12:07:07 +0200 Subject: [PATCH 21/53] QAbstractSocket: Fix waitForReadyRead infinite loop. Make sure that waitForReadyRead times out if the read buffer is full. Task-number: QTBUG-16123 Reviewed-by: Peter Hartmann (cherry picked from commit 8d4cd52b6981a4e6deea7fdb77f56e40c4f3e6ba) --- src/network/socket/qabstractsocket.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/network/socket/qabstractsocket.cpp b/src/network/socket/qabstractsocket.cpp index 7af71ccc8b..cfb141398c 100644 --- a/src/network/socket/qabstractsocket.cpp +++ b/src/network/socket/qabstractsocket.cpp @@ -1877,7 +1877,7 @@ bool QAbstractSocket::waitForReadyRead(int msecs) } Q_ASSERT(d->socketEngine); - forever { + do { bool readyToRead = false; bool readyToWrite = false; if (!d->socketEngine->waitForReadOrWrite(&readyToRead, &readyToWrite, true, !d->writeBuffer.isEmpty(), @@ -1904,7 +1904,7 @@ bool QAbstractSocket::waitForReadyRead(int msecs) if (state() != ConnectedState) return false; - } + } while (qt_timeout_value(msecs, stopWatch.elapsed()) > 0); return false; } From 5aaa38c7ac9370fa6f61581f4b5e57dd6d119ec0 Mon Sep 17 00:00:00 2001 From: Martin Petersson Date: Wed, 27 Apr 2011 12:36:53 +0200 Subject: [PATCH 22/53] QNetworkConfigurationManager: Fix network polling. startPolling() is called by each engine, so before it would start multiple singleshot timers. So I moved the timer to the class and check if it has already been started before it is activated again. So that we just use one timer. Task-number: QTBUG-17219 Reviewed-by: Iiro Kause Reviewed-by: Kranthi Kuntala (cherry picked from commit 2506b86828ca8140c2f22d85a4378df40899b132) --- src/network/bearer/qnetworkconfigmanager_p.cpp | 14 ++++++++++++-- src/network/bearer/qnetworkconfigmanager_p.h | 2 ++ 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/src/network/bearer/qnetworkconfigmanager_p.cpp b/src/network/bearer/qnetworkconfigmanager_p.cpp index c108ad34cf..e9b6703dd9 100644 --- a/src/network/bearer/qnetworkconfigmanager_p.cpp +++ b/src/network/bearer/qnetworkconfigmanager_p.cpp @@ -60,7 +60,7 @@ Q_GLOBAL_STATIC_WITH_ARGS(QFactoryLoader, loader, #endif QNetworkConfigurationManagerPrivate::QNetworkConfigurationManagerPrivate() - : QObject(), mutex(QMutex::Recursive), forcedPolling(0), firstUpdate(true) + : QObject(), pollTimer(0), mutex(QMutex::Recursive), forcedPolling(0), firstUpdate(true) { qRegisterMetaType("QNetworkConfiguration"); qRegisterMetaType("QNetworkConfigurationPrivatePointer"); @@ -442,9 +442,19 @@ void QNetworkConfigurationManagerPrivate::startPolling() { QMutexLocker locker(&mutex); + if(!pollTimer) { + pollTimer = new QTimer(this); + pollTimer->setInterval(10000); + pollTimer->setSingleShot(true); + connect(pollTimer, SIGNAL(timeout()), this, SLOT(pollEngines())); + } + + if(pollTimer->isActive()) + return; + foreach (QBearerEngine *engine, sessionEngines) { if (engine->requiresPolling() && (forcedPolling || engine->configurationsInUse())) { - QTimer::singleShot(10000, this, SLOT(pollEngines())); + pollTimer->start(); break; } } diff --git a/src/network/bearer/qnetworkconfigmanager_p.h b/src/network/bearer/qnetworkconfigmanager_p.h index 81f38c5183..abc4b9b4fa 100644 --- a/src/network/bearer/qnetworkconfigmanager_p.h +++ b/src/network/bearer/qnetworkconfigmanager_p.h @@ -64,6 +64,7 @@ QT_BEGIN_NAMESPACE class QBearerEngine; +class QTimer; class Q_NETWORK_EXPORT QNetworkConfigurationManagerPrivate : public QObject { @@ -107,6 +108,7 @@ private Q_SLOTS: private: void startPolling(); + QTimer *pollTimer; private: mutable QMutex mutex; From 738d5c7c85230c740a7e86cb66c452c5719cc7e8 Mon Sep 17 00:00:00 2001 From: Marius Storm-Olsen Date: Wed, 30 Mar 2011 11:59:54 -0500 Subject: [PATCH 23/53] Make sure we don't always pull in modules from installed mkspecs When building Qt, qmake should not pull in mkspecs from an installed version, as this will lead to incorrect paths for the current build. So, here we ensure only to pull in modules from there we detected the qconfig.pri, and ensure we still handle the QMAKEPATH case used by some. --- mkspecs/features/qt_config.prf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mkspecs/features/qt_config.prf b/mkspecs/features/qt_config.prf index 5afd82c84a..071bb6c237 100644 --- a/mkspecs/features/qt_config.prf +++ b/mkspecs/features/qt_config.prf @@ -12,7 +12,7 @@ isEmpty(QMAKE_QT_CONFIG)|!exists($$QMAKE_QT_CONFIG) { } else { debug(1, "Loaded .qconfig.pri from ($$QMAKE_QT_CONFIG)") for(dir, $$list($$unique($$list($$dirname(QMAKE_QT_CONFIG) \ - $$split($$list($$[QMAKE_MKSPECS]), $$DIRLIST_SEPARATOR))))) { + $$replace($$list($$split($$list($$(QMAKEPATH)), $$DIRLIST_SEPARATOR)), $, /mkspecs))))) { debug(1, "Loading modules from $${dir}") for(mod, $$list($$files($$dir/modules/qt_*.pri))) { # For installed Qt these paths will be common for all modules From 6319779bedcc590af165e2ed7d3f1ab74d4b2329 Mon Sep 17 00:00:00 2001 From: Marius Storm-Olsen Date: Fri, 1 Apr 2011 05:47:28 -0500 Subject: [PATCH 24/53] Add module.prf, and install MODULE_PRI for each module Output warning if not present --- mkspecs/features/module.prf | 7 +++++++ src/corelib/corelib.pro | 6 +++++- src/dbus/dbus.pro | 5 ++++- src/gui/gui.pro | 4 ++++ src/network/network.pro | 5 ++++- src/opengl/opengl.pro | 4 ++++ src/openvg/openvg.pro | 3 +++ src/sql/sql.pro | 4 ++++ src/testlib/testlib.pro | 4 ++++ src/uitools/uitools.pro | 7 +++++-- src/xml/xml.pro | 4 ++++ 11 files changed, 48 insertions(+), 5 deletions(-) create mode 100644 mkspecs/features/module.prf diff --git a/mkspecs/features/module.prf b/mkspecs/features/module.prf new file mode 100644 index 0000000000..248f7f516a --- /dev/null +++ b/mkspecs/features/module.prf @@ -0,0 +1,7 @@ +!isEmpty(MODULE_PRI) { + pritarget.path = $$[QT_INSTALL_DATA]/mkspecs/modules + pritarget.files = $$MODULE_PRI + INSTALLS = pritarget +} else { + warning("Project $$basename(_PRO_FILE_) is a module, but has not defined MODULE_PRI, which is required for Qt to expose the module to other projects") +} diff --git a/src/corelib/corelib.pro b/src/corelib/corelib.pro index 4efb1b9a22..a31d1e5b7f 100644 --- a/src/corelib/corelib.pro +++ b/src/corelib/corelib.pro @@ -1,7 +1,11 @@ -MODULE = core TARGET = QtCore QPRO_PWD = $$PWD QT = + +CONFIG += module +MODULE = core # not corelib, as per project file +MODULE_PRI = ../modules/qt_core.pri + DEFINES += QT_BUILD_CORE_LIB QT_NO_USING_NAMESPACE win32-msvc*|win32-icc:QMAKE_LFLAGS += /BASE:0x67000000 irix-cc*:QMAKE_CXXFLAGS += -no_prelink -ptused diff --git a/src/dbus/dbus.pro b/src/dbus/dbus.pro index 08c9ea1fb2..4f2aa7e9b5 100644 --- a/src/dbus/dbus.pro +++ b/src/dbus/dbus.pro @@ -2,7 +2,10 @@ TARGET = QtDBus QPRO_PWD = $$PWD QT = core \ xml -CONFIG += link_pkgconfig + +CONFIG += link_pkgconfig module +MODULE_PRI = ../modules/qt_dbus.pri + DEFINES += QT_BUILD_DBUS_LIB \ DBUS_API_SUBJECT_TO_CHANGE QMAKE_CXXFLAGS += $$QT_CFLAGS_DBUS diff --git a/src/gui/gui.pro b/src/gui/gui.pro index 8f72fead8d..878a384696 100644 --- a/src/gui/gui.pro +++ b/src/gui/gui.pro @@ -1,6 +1,10 @@ TARGET = QtGui QPRO_PWD = $$PWD QT = core + +CONFIG += module +MODULE_PRI = ../modules/qt_gui.pri + DEFINES += QT_BUILD_GUI_LIB QT_NO_USING_NAMESPACE win32-msvc*|win32-icc:QMAKE_LFLAGS += /BASE:0x65000000 irix-cc*:QMAKE_CXXFLAGS += -no_prelink -ptused diff --git a/src/network/network.pro b/src/network/network.pro index 948922b8c1..153961762a 100644 --- a/src/network/network.pro +++ b/src/network/network.pro @@ -1,7 +1,10 @@ # Qt network module - TARGET = QtNetwork QPRO_PWD = $$PWD + +CONFIG += module +MODULE_PRI = ../modules/qt_network.pri + DEFINES += QT_BUILD_NETWORK_LIB QT_NO_USING_NAMESPACE #DEFINES += QLOCALSERVER_DEBUG QLOCALSOCKET_DEBUG #DEFINES += QNETWORKDISKCACHE_DEBUG diff --git a/src/opengl/opengl.pro b/src/opengl/opengl.pro index e7c1c446de..24dbb7aa3e 100644 --- a/src/opengl/opengl.pro +++ b/src/opengl/opengl.pro @@ -1,6 +1,10 @@ TARGET = QtOpenGL QPRO_PWD = $$PWD QT = core gui + +CONFIG += module +MODULE_PRI = ../modules/qt_opengl.pri + DEFINES += QT_BUILD_OPENGL_LIB DEFINES += QT_NO_USING_NAMESPACE win32-msvc*|win32-icc:QMAKE_LFLAGS += /BASE:0x63000000 diff --git a/src/openvg/openvg.pro b/src/openvg/openvg.pro index e185949bef..5451c2d04e 100644 --- a/src/openvg/openvg.pro +++ b/src/openvg/openvg.pro @@ -2,6 +2,9 @@ TARGET = QtOpenVG QT += core \ gui +CONFIG += module +MODULE_PRI = ../modules/qt_openvg.pri + DEFINES+=QT_BUILD_OPENVG_LIB contains(QT_CONFIG, shivavg) { diff --git a/src/sql/sql.pro b/src/sql/sql.pro index 81aa3c06c9..550b24b754 100644 --- a/src/sql/sql.pro +++ b/src/sql/sql.pro @@ -1,6 +1,10 @@ TARGET = QtSql QPRO_PWD = $$PWD QT = core + +CONFIG += module +MODULE_PRI = ../modules/qt_sql.pri + DEFINES += QT_BUILD_SQL_LIB DEFINES += QT_NO_USING_NAMESPACE win32-msvc*|win32-icc:QMAKE_LFLAGS += /BASE:0x62000000 diff --git a/src/testlib/testlib.pro b/src/testlib/testlib.pro index c25d23db12..311c79379b 100644 --- a/src/testlib/testlib.pro +++ b/src/testlib/testlib.pro @@ -1,6 +1,10 @@ TARGET = QtTest QPRO_PWD = $$PWD QT = core + +CONFIG += module +MODULE_PRI = ../modules/qt_testlib.pri + INCLUDEPATH += . unix:!embedded:QMAKE_PKGCONFIG_DESCRIPTION = Qt \ Unit \ diff --git a/src/uitools/uitools.pro b/src/uitools/uitools.pro index 32c4501375..0af26d9375 100644 --- a/src/uitools/uitools.pro +++ b/src/uitools/uitools.pro @@ -1,9 +1,12 @@ -MODULE = uitools QPRO_PWD = $$PWD TEMPLATE = lib TARGET = $$qtLibraryTarget(QtUiTools) QT = core xml -CONFIG += qt staticlib + +CONFIG += qt staticlib # Not adding module here, since the module pri's are only used for building +MODULE_PRI = ../modules/qt_uitools.pri \ + ../modules/qt_uilib.pri + DESTDIR = $$QMAKE_LIBDIR_QT symbian { diff --git a/src/xml/xml.pro b/src/xml/xml.pro index 019153ce85..e6fce60371 100644 --- a/src/xml/xml.pro +++ b/src/xml/xml.pro @@ -1,6 +1,10 @@ TARGET = QtXml QPRO_PWD = $$PWD QT = core + +CONFIG += module +MODULE_PRI = ../modules/qt_xml.pri + DEFINES += QT_BUILD_XML_LIB QT_NO_USING_NAMESPACE win32-msvc*|win32-icc:QMAKE_LFLAGS += /BASE:0x61000000 From 1606667d3ebd760368b949e0661294874959bb44 Mon Sep 17 00:00:00 2001 From: Prasanth Ullattil Date: Tue, 12 Apr 2011 13:50:27 +0200 Subject: [PATCH 25/53] Moved QtUiTools to CONFIG QtUiTools is a staic library now. If this is added to QT variable qmake will treat this as a framework on Mac. This patch is to avoid that. --- tests/auto/headersclean/headersclean.pro | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/tests/auto/headersclean/headersclean.pro b/tests/auto/headersclean/headersclean.pro index d9b6ae3e2a..0f976ffb95 100644 --- a/tests/auto/headersclean/headersclean.pro +++ b/tests/auto/headersclean/headersclean.pro @@ -1,7 +1,9 @@ load(qttest_p4) SOURCES += tst_headersclean.cpp -QT = core network xml sql uitools +QT = core network xml sql +CONFIG += uitools contains(QT_CONFIG,dbus): QT += dbus contains(QT_CONFIG,opengl): QT += opengl -contains(QT_CONFIG,openvg): QT += openvg \ No newline at end of file +contains(QT_CONFIG,openvg): QT += openvg + From 2e8b6dcb4a6fa8ff42e967eb5dc27a461e721858 Mon Sep 17 00:00:00 2001 From: Marius Storm-Olsen Date: Thu, 7 Apr 2011 09:40:33 -0500 Subject: [PATCH 26/53] Install syncqt, and ensure it runs fine for external modules --- bin/syncqt | 8 ++++++-- qtbase.pro | 6 ++++++ 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/bin/syncqt b/bin/syncqt index 45ac9d0fb0..8fa253a733 100755 --- a/bin/syncqt +++ b/bin/syncqt @@ -558,8 +558,11 @@ sub locateSyncProfile # check if this is an in-source build, and if so use that as the basedir too $basedir = locateSyncProfile($out_basedir); -$basedir = dirname($basedir) if ($basedir); -$quoted_basedir = "\Q$basedir"; +if ($basedir) { + $basedir = dirname($basedir) ; + $basedir =~ s=\\=/=g; + $quoted_basedir = "\Q$basedir"; +} # -------------------------------------------------------------------- # "main" function @@ -624,6 +627,7 @@ while ( @ARGV ) { die "Could not find a sync.profile for '$arg'\n" if (!$basedir); $basedir = dirname($basedir); $basedir =~ s=\\=/=g; + $quoted_basedir = "\Q$basedir"; $var = "ignore"; } diff --git a/qtbase.pro b/qtbase.pro index d3ca3e1d9a..7e334501ae 100644 --- a/qtbase.pro +++ b/qtbase.pro @@ -122,6 +122,12 @@ win32 { } INSTALLS += qmake +#syncqt +syncqt.path=$$[QT_INSTALL_BINS] +syncqt.files=$$QT_BUILD_TREE/bin/syncqt +win32:syncqt.files=$$QT_BUILD_TREE/bin/syncqt.bat +INSTALLS += syncqt + #mkspecs mkspecs.path=$$[QT_INSTALL_DATA]/mkspecs mkspecs.files=$$QT_BUILD_TREE/mkspecs/qconfig.pri $$files($$QT_SOURCE_TREE/mkspecs/*) From 1287361f64c6d429535e65c8dd248a94dfc633d1 Mon Sep 17 00:00:00 2001 From: Marius Storm-Olsen Date: Wed, 20 Apr 2011 13:57:51 -0500 Subject: [PATCH 27/53] Move private headers into versioned subdirectory This will allow us to expose private headers in a controlled manner, and ensure that they are not used by accident. This also means that we internally will have to enable the private headers for the modules we wish to use in the project. --- bin/syncqt | 22 ++++++++++++++++- configure | 4 ++-- demos/shared/shared.pro | 1 + mkspecs/features/designer.prf | 2 +- mkspecs/features/help.prf | 2 +- mkspecs/features/qt.prf | 18 +++++++++++++- mkspecs/features/qt_functions.prf | 24 +++++++++++++++---- qmake/Makefile.unix | 2 ++ qmake/Makefile.win32 | 4 ++-- qmake/Makefile.win32-g++ | 4 ++-- qmake/Makefile.win32-g++-sh | 4 ++-- qmake/qmake.pro | 2 ++ src/dbus/dbus.pro | 2 +- src/gui/gui.pro | 2 +- src/modules/qt_core.pri | 10 ++++---- src/modules/qt_dbus.pri | 10 ++++---- src/modules/qt_gui.pri | 10 ++++---- src/modules/qt_network.pri | 10 ++++---- src/modules/qt_opengl.pri | 10 ++++---- src/modules/qt_openvg.pri | 10 ++++---- src/modules/qt_sql.pri | 10 ++++---- src/modules/qt_testlib.pri | 10 ++++---- src/modules/qt_uilib.pri | 13 +++++----- src/modules/qt_uitools.pri | 10 ++++---- src/modules/qt_xml.pri | 10 ++++---- src/network/network.pro | 2 +- src/opengl/opengl.pro | 2 +- src/plugins/accessible/widgets/widgets.pro | 1 + src/plugins/bearer/connman/connman.pro | 2 +- src/plugins/bearer/generic/generic.pro | 2 +- src/plugins/bearer/nativewifi/nativewifi.pro | 2 +- .../bearer/networkmanager/networkmanager.pro | 2 +- src/plugins/graphicssystems/opengl/opengl.pro | 2 +- src/plugins/graphicssystems/trace/trace.pro | 2 +- src/plugins/imageformats/jpeg/jpeg.pro | 2 ++ src/plugins/sqldrivers/qsqldriverbase.pri | 2 +- src/qbase.pri | 3 +++ src/qt_install.pri | 8 +++---- src/sql/sql.pro | 2 +- src/tools/bootstrap/bootstrap.pri | 4 ++++ src/tools/bootstrap/bootstrap.pro | 6 ++++- src/xml/xml.pro | 2 +- tools/configure/configure.pro | 2 ++ tools/configure/configureapp.cpp | 5 ++-- 44 files changed, 164 insertions(+), 95 deletions(-) diff --git a/bin/syncqt b/bin/syncqt index 8fa253a733..3d25ecc817 100755 --- a/bin/syncqt +++ b/bin/syncqt @@ -747,6 +747,21 @@ mkpath "$out_basedir/include/Qt", !$quiet; foreach my $lib (@modules_to_sync) { #iteration info my $dir = $modules{$lib}; + my $module_version = ""; + + if (-e "$modulepris{$lib}") { + my $content = fileContents($modulepris{$lib}); + my @version_rows = grep(/QT\..*\.VERSION/, split('\n', $content)); + if(@version_rows) { + # We only pick the first one, since each module need a separate .pri file + $module_version = $version_rows[0]; + chomp $module_version; + $module_version =~ s/^\s*QT\..*\.VERSION\s*=\s*([^#]+).*$/$1/; + $module_version =~ s/\s+$//; + } + } + print "WARNING: Module $lib\'s pri missing QT..VERSION variable! Private headers not versioned!\n" if (!$module_version); + my $pathtoheaders = ""; $pathtoheaders = $moduleheaders{$lib} if ($moduleheaders{$lib}); @@ -766,6 +781,7 @@ foreach my $lib (@modules_to_sync) { chomp $line; if($line =~ /^ *QT *\+?= *([^\r\n]*)/) { foreach(split(/ /, $1)) { + $_ =~ s/-private$//; my $content = $mastercontent{$_}; $master_contents .= $content if ($content); } @@ -913,7 +929,11 @@ foreach my $lib (@modules_to_sync) { } } } elsif ($create_private_headers) { - @headers = ( "$out_basedir/include/$lib/private/$header" ); + if ($module_version) { + @headers = ( "$out_basedir/include/$lib/$module_version/$lib/private/$header" ); + } else { + @headers = ( "$out_basedir/include/$lib/private/$header" ); + } } foreach(@headers) { #sync them $header_copies++ if(syncHeader($_, $iheader, $copy_headers && !$shadow, $ts)); diff --git a/configure b/configure index 60e1ec1216..293f642d35 100755 --- a/configure +++ b/configure @@ -4921,7 +4921,7 @@ if true; then ###[ '!' -f "$outpath/bin/qmake" ]; -e "s,@QT_INSTALL_BINS@,\$(INSTALL_ROOT)$QMAKE_BIN_DIR,g" \ -e "s,@QT_INSTALL_DATA@,\$(INSTALL_ROOT)$QMAKE_DATA_DIR,g" \ -e "s,@QMAKE_QTOBJS@,$EXTRA_OBJS,g" -e "s,@QMAKE_QTSRCS@,$EXTRA_SRCS,g" \ - -e "s,@QMAKESPEC@,$adjqmakespec,g" "$in_mkfile" >>"$mkfile" + -e "s,@QMAKESPEC@,$adjqmakespec,g" -e "s,@QT_VERSION@,$QT_VERSION,g" "$in_mkfile" >>"$mkfile" if "$WHICH" makedepend >/dev/null 2>&1 && grep 'depend:' "$mkfile" >/dev/null 2>&1; then (cd "$outpath/qmake" && "$MAKE" -f "$mkfile" depend) >/dev/null 2>&1 @@ -8500,7 +8500,7 @@ CACHEFILE="$outpath/.qmake.cache" [ -f "$CACHEFILE.tmp" ] && rm -f "$CACHEFILE.tmp" cat >>"$CACHEFILE.tmp" </ + # and / + # since we have code using both #include and #include + # Both need to be supported with the new private includes structure + MODULE_INCLUDES_PRIVATES = $$eval(QT.$${1}.private_includes) + INCLUDEPATH -= $$MODULE_INCLUDES_PRIVATES $$MODULE_INCLUDES_PRIVATES/$$MODULE_NAME + INCLUDEPATH = $$MODULE_INCLUDES_PRIVATES $$MODULE_INCLUDES_PRIVATES/$$MODULE_NAME $$INCLUDEPATH + } unset(LINKAGE) mac { @@ -140,12 +150,16 @@ defineTest(qtAddModule) { } isEmpty(LINKAGE):LINKAGE = -l$${MODULE_NAME}$${QT_LIBINFIX} } - !isEmpty(QMAKE_LSB) { - QMAKE_LFLAGS *= --lsb-libpath=$$$$QMAKE_LIBDIR_QT - QMAKE_LFLAGS *= -L/opt/lsb/lib - QMAKE_LFLAGS *= --lsb-shared-libs=$${MODULE_NAME}$${QT_LIBINFIX} + # Only link to this module if a libs directory is set, else this is just a module + # to give access to sources or include files, and not for linking. + !isEmpty(MODULE_LIBS) { + !isEmpty(QMAKE_LSB) { + QMAKE_LFLAGS *= --lsb-libpath=$$$$QMAKE_LIBDIR_QT + QMAKE_LFLAGS *= -L/opt/lsb/lib + QMAKE_LFLAGS *= --lsb-shared-libs=$${MODULE_NAME}$${QT_LIBINFIX} + } + LIBS += $$LINKAGE } - LIBS += $$LINKAGE export(CONFIG) export(DEFINES) export(LIBS) diff --git a/qmake/Makefile.unix b/qmake/Makefile.unix index 9dbe035fc2..c522779981 100644 --- a/qmake/Makefile.unix +++ b/qmake/Makefile.unix @@ -1,5 +1,6 @@ SOURCE_PATH = @SOURCE_PATH@ BUILD_PATH = @BUILD_PATH@ +QT_VERSION = @QT_VERSION@ QTOBJS = @QMAKE_QTOBJS@ QTSRCS = @QMAKE_QTSRCS@ QMAKESPEC = @QMAKESPEC@ @@ -76,6 +77,7 @@ DEPEND_SRC=project.cpp property.cpp meta.cpp main.cpp generators/makefile.cpp ge CPPFLAGS = -g -I. -Igenerators -Igenerators/unix -Igenerators/win32 \ -Igenerators/mac -Igenerators/symbian -Igenerators/integrity \ -I$(BUILD_PATH)/include -I$(BUILD_PATH)/include/QtCore \ + -I$(BUILD_PATH)/include/QtCore/$(QT_VERSION) -I$(BUILD_PATH)/include/QtCore/$(QT_VERSION)/QtCore \ -I$(BUILD_PATH)/src/corelib/global -I$(BUILD_PATH)/src/corelib/xml \ -I$(SOURCE_PATH)/tools/shared \ -DQT_NO_PCRE \ diff --git a/qmake/Makefile.win32 b/qmake/Makefile.win32 index 6fd393993e..56ccf3d565 100644 --- a/qmake/Makefile.win32 +++ b/qmake/Makefile.win32 @@ -32,8 +32,8 @@ CFLAGS_BARE = -c -Fo./ \ -W3 -nologo -O2 \ $(CFLAGS_EXTRA) \ -I. -Igenerators -Igenerators\unix -Igenerators\win32 -Igenerators\mac -Igenerators\symbian -Igenerators\integrity \ - -I$(BUILD_PATH)\include -I$(BUILD_PATH)\include\QtCore \ - -I$(SOURCE_PATH)\include -I$(SOURCE_PATH)\include\QtCore \ + -I$(BUILD_PATH)\include -I$(BUILD_PATH)\include\QtCore -I$(BUILD_PATH)\include\QtCore\$(QT_VERSION) -I$(BUILD_PATH)\include\QtCore\$(QT_VERSION)\QtCore \ + -I$(SOURCE_PATH)\include -I$(SOURCE_PATH)\include\QtCore -I$(SOURCE_PATH)\include\QtCore\$(QT_VERSION) -I$(SOURCE_PATH)\include\QtCore\$(QT_VERSION)\QtCore \ -I$(BUILD_PATH)\src\corelib\global \ -I$(BUILD_PATH)\src\corelib\xml \ -I$(SOURCE_PATH)\mkspecs\$(QMAKESPEC) \ diff --git a/qmake/Makefile.win32-g++ b/qmake/Makefile.win32-g++ index d40dc29a9b..05d7a154d6 100644 --- a/qmake/Makefile.win32-g++ +++ b/qmake/Makefile.win32-g++ @@ -16,8 +16,8 @@ CFLAGS = -c -o$@ -O \ -I. -Igenerators -Igenerators/unix \ -Igenerators/win32 -Igenerators/mac \ -Igenerators/symbian -Igenerators/integrity \ - -I$(BUILD_PATH)/include -I$(BUILD_PATH)/include/QtCore \ - -I$(SOURCE_PATH)/include -I$(SOURCE_PATH)/include/QtCore \ + -I$(BUILD_PATH)/include -I$(BUILD_PATH)/include/QtCore -I$(BUILD_PATH)/include/QtCore/$(QT_VERSION) -I$(BUILD_PATH)/include/QtCore/$(QT_VERSION)/QtCore \ + -I$(SOURCE_PATH)/include -I$(SOURCE_PATH)/include/QtCore -I$(SOURCE_PATH)/include/QtCore/$(QT_VERSION) -I$(SOURCE_PATH)/include/QtCore/$(QT_VERSION)/QtCore \ -I$(BUILD_PATH)/src/corelib/global \ -I$(BUILD_PATH)/src/corelib/xml \ -I$(SOURCE_PATH)/mkspecs/win32-g++ \ diff --git a/qmake/Makefile.win32-g++-sh b/qmake/Makefile.win32-g++-sh index 49ccfbcc77..b691470cca 100644 --- a/qmake/Makefile.win32-g++-sh +++ b/qmake/Makefile.win32-g++-sh @@ -16,8 +16,8 @@ CFLAGS = -c -o$@ -O \ -I. -Igenerators -Igenerators/unix \ -Igenerators/win32 -Igenerators/mac \ -Igenerators/symbian -Igenerators/integrity \ - -I$(BUILD_PATH)/include -I$(BUILD_PATH)/include/QtCore \ - -I$(SOURCE_PATH)/include -I$(SOURCE_PATH)/include/QtCore \ + -I$(BUILD_PATH)/include -I$(BUILD_PATH)/include/QtCore -I$(BUILD_PATH)/include/QtCore/$(QT_VERSION) -I$(BUILD_PATH)/include/QtCore/$(QT_VERSION)/QtCore \ + -I$(SOURCE_PATH)/include -I$(SOURCE_PATH)/include/QtCore -I$(SOURCE_PATH)/include/QtCore/$(QT_VERSION) -I$(SOURCE_PATH)/include/QtCore/$(QT_VERSION)/QtCore \ -I$(BUILD_PATH)/src/corelib/global \ -I$(BUILD_PATH)/src/corelib/xml \ -I$(SOURCE_PATH)/mkspecs/win32-g++ \ diff --git a/qmake/qmake.pro b/qmake/qmake.pro index b602afa198..ac52bd8dd0 100644 --- a/qmake/qmake.pro +++ b/qmake/qmake.pro @@ -27,6 +27,8 @@ INCLUDEPATH += . \ generators/symbian \ $$QT_SOURCE_TREE/include \ $$QT_SOURCE_TREE/include/QtCore \ + $$QT_SOURCE_TREE/include/QtCore/$$QT_VERSION \ + $$QT_SOURCE_TREE/include/QtCore/$$QT_VERSION/QtCore \ $$QT_SOURCE_TREE/qmake VPATH += $$QT_SOURCE_TREE/tools/shared diff --git a/src/dbus/dbus.pro b/src/dbus/dbus.pro index 4f2aa7e9b5..e73fa05a74 100644 --- a/src/dbus/dbus.pro +++ b/src/dbus/dbus.pro @@ -1,6 +1,6 @@ TARGET = QtDBus QPRO_PWD = $$PWD -QT = core \ +QT = core-private \ xml CONFIG += link_pkgconfig module diff --git a/src/gui/gui.pro b/src/gui/gui.pro index 878a384696..072553a05c 100644 --- a/src/gui/gui.pro +++ b/src/gui/gui.pro @@ -1,6 +1,6 @@ TARGET = QtGui QPRO_PWD = $$PWD -QT = core +QT = core-private CONFIG += module MODULE_PRI = ../modules/qt_gui.pri diff --git a/src/modules/qt_core.pri b/src/modules/qt_core.pri index 9636fb2500..bf013432a5 100644 --- a/src/modules/qt_core.pri +++ b/src/modules/qt_core.pri @@ -1,12 +1,12 @@ -QT_CORE_VERSION = $$QT_VERSION -QT_CORE_MAJOR_VERSION = $$QT_MAJOR_VERSION -QT_CORE_MINOR_VERSION = $$QT_MINOR_VERSION -QT_CORE_PATCH_VERSION = $$QT_PATCH_VERSION +QT.core.VERSION = 4.8.0 +QT.core.MAJOR_VERSION = 4 +QT.core.MINOR_VERSION = 8 +QT.core.PATCH_VERSION = 0 QT.core.name = QtCore QT.core.bins = $$QT_MODULE_BIN_BASE QT.core.includes = $$QT_MODULE_INCLUDE_BASE/QtCore -QT.core.private_includes = $$QT_MODULE_INCLUDE_BASE/QtCore/private +QT.core.private_includes = $$QT_MODULE_INCLUDE_BASE/QtCore/$$QT.core.VERSION QT.core.sources = $$QT_MODULE_BASE/src/corelib QT.core.libs = $$QT_MODULE_LIB_BASE QT.core.plugins = $$QT_MODULE_PLUGIN_BASE diff --git a/src/modules/qt_dbus.pri b/src/modules/qt_dbus.pri index 13c9914f0d..9aefab9b82 100644 --- a/src/modules/qt_dbus.pri +++ b/src/modules/qt_dbus.pri @@ -1,12 +1,12 @@ -QT_DBUS_VERSION = $$QT_VERSION -QT_DBUS_MAJOR_VERSION = $$QT_MAJOR_VERSION -QT_DBUS_MINOR_VERSION = $$QT_MINOR_VERSION -QT_DBUS_PATCH_VERSION = $$QT_PATCH_VERSION +QT.dbus.VERSION = 4.8.0 +QT.dbus.MAJOR_VERSION = 4 +QT.dbus.MINOR_VERSION = 8 +QT.dbus.PATCH_VERSION = 0 QT.dbus.name = QtDBus QT.dbus.bins = $$QT_MODULE_BIN_BASE QT.dbus.includes = $$QT_MODULE_INCLUDE_BASE/QtDBus -QT.dbus.private_includes = $$QT_MODULE_INCLUDE_BASE/QtDBus/private +QT.dbus.private_includes = $$QT_MODULE_INCLUDE_BASE/QtDBus/$$QT.dbus.VERSION QT.dbus.sources = $$QT_MODULE_BASE/src/dbus QT.dbus.libs = $$QT_MODULE_LIB_BASE QT.dbus.plugins = $$QT_MODULE_PLUGIN_BASE diff --git a/src/modules/qt_gui.pri b/src/modules/qt_gui.pri index 444f5c4804..1ef3697db6 100644 --- a/src/modules/qt_gui.pri +++ b/src/modules/qt_gui.pri @@ -1,11 +1,11 @@ -QT_GUI_VERSION = $$QT_VERSION -QT_GUI_MAJOR_VERSION = $$QT_MAJOR_VERSION -QT_GUI_MINOR_VERSION = $$QT_MINOR_VERSION -QT_GUI_PATCH_VERSION = $$QT_PATCH_VERSION +QT.gui.VERSION = 4.8.0 +QT.gui.MAJOR_VERSION = 4 +QT.gui.MINOR_VERSION = 8 +QT.gui.PATCH_VERSION = 0 QT.gui.name = QtGui QT.gui.includes = $$QT_MODULE_INCLUDE_BASE/QtGui -QT.gui.private_includes = $$QT_MODULE_INCLUDE_BASE/QtGui/private +QT.gui.private_includes = $$QT_MODULE_INCLUDE_BASE/QtGui/$$QT.gui.VERSION QT.gui.sources = $$QT_MODULE_BASE/src/gui QT.gui.libs = $$QT_MODULE_LIB_BASE QT.gui.plugins = $$QT_MODULE_PLUGIN_BASE diff --git a/src/modules/qt_network.pri b/src/modules/qt_network.pri index f54afd21a0..44326c2b2d 100644 --- a/src/modules/qt_network.pri +++ b/src/modules/qt_network.pri @@ -1,12 +1,12 @@ -QT_CORE_VERSION = $$QT_VERSION -QT_NETWORK_MAJOR_VERSION = $$QT_MAJOR_VERSION -QT_NETWORK_MINOR_VERSION = $$QT_MINOR_VERSION -QT_NETWORK_PATCH_VERSION = $$QT_PATCH_VERSION +QT.network.VERSION = 4.8.0 +QT.network.MAJOR_VERSION = 4 +QT.network.MINOR_VERSION = 8 +QT.network.PATCH_VERSION = 0 QT.network.name = QtNetwork QT.network.bins = $$QT_MODULE_BIN_BASE QT.network.includes = $$QT_MODULE_INCLUDE_BASE/QtNetwork -QT.network.private_includes = $$QT_MODULE_INCLUDE_BASE/QtNetwork/private +QT.network.private_includes = $$QT_MODULE_INCLUDE_BASE/QtNetwork/$$QT.network.VERSION QT.network.sources = $$QT_MODULE_BASE/src/network QT.network.libs = $$QT_MODULE_LIB_BASE QT.network.plugins = $$QT_MODULE_PLUGIN_BASE diff --git a/src/modules/qt_opengl.pri b/src/modules/qt_opengl.pri index 4d9a7029ef..b767a3ce12 100644 --- a/src/modules/qt_opengl.pri +++ b/src/modules/qt_opengl.pri @@ -1,12 +1,12 @@ -QT_OPENGL_VERSION = $$QT_VERSION -QT_OPENGL_MAJOR_VERSION = $$QT_MAJOR_VERSION -QT_OPENGL_MINOR_VERSION = $$QT_MINOR_VERSION -QT_OPENGL_PATCH_VERSION = $$QT_PATCH_VERSION +QT.opengl.VERSION = 4.8.0 +QT.opengl.MAJOR_VERSION = 4 +QT.opengl.MINOR_VERSION = 8 +QT.opengl.PATCH_VERSION = 0 QT.opengl.name = QtOpenGL QT.opengl.bins = $$QT_MODULE_BIN_BASE QT.opengl.includes = $$QT_MODULE_INCLUDE_BASE/QtOpenGL -QT.opengl.private_includes = $$QT_MODULE_INCLUDE_BASE/QtOpenGL/private +QT.opengl.private_includes = $$QT_MODULE_INCLUDE_BASE/QtOpenGL/$$QT.opengl.VERSION QT.opengl.sources = $$QT_MODULE_BASE/src/opengl QT.opengl.libs = $$QT_MODULE_LIB_BASE QT.opengl.plugins = $$QT_MODULE_PLUGIN_BASE diff --git a/src/modules/qt_openvg.pri b/src/modules/qt_openvg.pri index 1261fd99c2..2ff477c013 100644 --- a/src/modules/qt_openvg.pri +++ b/src/modules/qt_openvg.pri @@ -1,12 +1,12 @@ -QT_OPENVG_VERSION = $$QT_VERSION -QT_OPENVG_MAJOR_VERSION = $$QT_MAJOR_VERSION -QT_OPENVG_MINOR_VERSION = $$QT_MINOR_VERSION -QT_OPENVG_PATCH_VERSION = $$QT_PATCH_VERSION +QT.openvg.VERSION = 4.8.0 +QT.openvg.MAJOR_VERSION = 4 +QT.openvg.MINOR_VERSION = 8 +QT.openvg.PATCH_VERSION = 0 QT.openvg.name = QtOpenVG QT.openvg.bins = $$QT_MODULE_BIN_BASE QT.openvg.includes = $$QT_MODULE_INCLUDE_BASE/QtOpenVG -QT.openvg.private_includes = $$QT_MODULE_INCLUDE_BASE/QtOpenVG/private +QT.openvg.private_includes = $$QT_MODULE_INCLUDE_BASE/QtOpenVG/$$QT.openvg.VERSION QT.openvg.sources = $$QT_MODULE_BASE/src/openvg QT.openvg.libs = $$QT_MODULE_LIB_BASE QT.openvg.plugins = $$QT_MODULE_PLUGIN_BASE diff --git a/src/modules/qt_sql.pri b/src/modules/qt_sql.pri index e7ca42a513..14d2422989 100644 --- a/src/modules/qt_sql.pri +++ b/src/modules/qt_sql.pri @@ -1,12 +1,12 @@ -QT_SQL_VERSION = $$QT_VERSION -QT_SQL_MAJOR_VERSION = $$QT_MAJOR_VERSION -QT_SQL_MINOR_VERSION = $$QT_MINOR_VERSION -QT_SQL_PATCH_VERSION = $$QT_PATCH_VERSION +QT.sql.VERSION = 4.8.0 +QT.sql.MAJOR_VERSION = 4 +QT.sql.MINOR_VERSION = 8 +QT.sql.PATCH_VERSION = 0 QT.sql.name = QtSql QT.sql.bins = $$QT_MODULE_BIN_BASE QT.sql.includes = $$QT_MODULE_INCLUDE_BASE/QtSql -QT.sql.private_includes = $$QT_MODULE_INCLUDE_BASE/QtSql/private +QT.sql.private_includes = $$QT_MODULE_INCLUDE_BASE/QtSql/$$QT.sql.VERSION QT.sql.sources = $$QT_MODULE_BASE/src/sql QT.sql.libs = $$QT_MODULE_LIB_BASE QT.sql.plugins = $$QT_MODULE_PLUGIN_BASE diff --git a/src/modules/qt_testlib.pri b/src/modules/qt_testlib.pri index 6ef7939164..9fd9b2e446 100644 --- a/src/modules/qt_testlib.pri +++ b/src/modules/qt_testlib.pri @@ -1,12 +1,12 @@ -QT_TEST_VERSION = $$QT_VERSION -QT_TEST_MAJOR_VERSION = $$QT_MAJOR_VERSION -QT_TEST_MINOR_VERSION = $$QT_MINOR_VERSION -QT_TEST_PATCH_VERSION = $$QT_PATCH_VERSION +QT.testlib.VERSION = 4.8.0 +QT.testlib.MAJOR_VERSION = 4 +QT.testlib.MINOR_VERSION = 8 +QT.testlib.PATCH_VERSION = 0 QT.testlib.name = QtTest QT.testlib.bins = $$QT_MODULE_BIN_BASE QT.testlib.includes = $$QT_MODULE_INCLUDE_BASE/QtTest -QT.testlib.private_includes = $$QT_MODULE_INCLUDE_BASE/QtTest/private +QT.testlib.private_includes = $$QT_MODULE_INCLUDE_BASE/QtTest/$$QT.testlib.VERSION QT.testlib.sources = $$QT_MODULE_BASE/src/testlib QT.testlib.libs = $$QT_MODULE_LIB_BASE QT.testlib.plugins = $$QT_MODULE_PLUGIN_BASE diff --git a/src/modules/qt_uilib.pri b/src/modules/qt_uilib.pri index 7e1dc7ccd2..5973216921 100644 --- a/src/modules/qt_uilib.pri +++ b/src/modules/qt_uilib.pri @@ -1,14 +1,13 @@ -QT_UILIB_VERSION = $$QT_VERSION -QT_UILIB_MAJOR_VERSION = $$QT_MAJOR_VERSION -QT_UILIB_MINOR_VERSION = $$QT_MINOR_VERSION -QT_UILIB_PATCH_VERSION = $$QT_PATCH_VERSION +QT.uilib.VERSION = 4.8.0 +QT.uilib.MAJOR_VERSION = 4 +QT.uilib.MINOR_VERSION = 8 +QT.uilib.PATCH_VERSION = 0 -QT.uilib.name = +QT.uilib.name = QtUiLib QT.uilib.bins = $$QT_MODULE_BIN_BASE QT.uilib.includes = $$QT_MODULE_INCLUDE_BASE/QtDesigner -QT.uilib.private_includes = $$QT_MODULE_INCLUDE_BASE/QtDesigner/private +QT.uilib.private_includes = $$QT_MODULE_INCLUDE_BASE/QtDesigner/$$QT.uilib.VERSION QT.uilib.sources = $$QT_MODULE_BASE/tools/uilib -QT.uilib.libs = $$QT_MODULE_LIB_BASE QT.uilib.plugins = $$QT_MODULE_PLUGIN_BASE QT.uilib.imports = $$QT_MODULE_IMPORT_BASE QT.uilib.depends = xml diff --git a/src/modules/qt_uitools.pri b/src/modules/qt_uitools.pri index d221007684..d30c8b845b 100644 --- a/src/modules/qt_uitools.pri +++ b/src/modules/qt_uitools.pri @@ -1,12 +1,12 @@ -QT_UITOOLS_VERSION = $$QT_VERSION -QT_UITOOLS_MAJOR_VERSION = $$QT_MAJOR_VERSION -QT_UITOOLS_MINOR_VERSION = $$QT_MINOR_VERSION -QT_UITOOLS_PATCH_VERSION = $$QT_PATCH_VERSION +QT.uitools.VERSION = 4.8.0 +QT.uitools.MAJOR_VERSION = 4 +QT.uitools.MINOR_VERSION = 8 +QT.uitools.PATCH_VERSION = 0 QT.uitools.name = QtUiTools QT.uitools.bins = $$QT_MODULE_BIN_BASE QT.uitools.includes = $$QT_MODULE_INCLUDE_BASE/QtUiTools -QT.uitools.private_includes = $$QT_MODULE_INCLUDE_BASE/QtUiTools/private +QT.uitools.private_includes = $$QT_MODULE_INCLUDE_BASE/QtUiTools/$$QT.uitools.VERSION QT.uitools.sources = $$QT_MODULE_BASE/src/uitools QT.uitools.libs = $$QT_MODULE_LIB_BASE QT.uitools.plugins = $$QT_MODULE_PLUGIN_BASE diff --git a/src/modules/qt_xml.pri b/src/modules/qt_xml.pri index 0ede3d2ddf..e7db6365eb 100644 --- a/src/modules/qt_xml.pri +++ b/src/modules/qt_xml.pri @@ -1,12 +1,12 @@ -QT_XML_VERSION = $$QT_VERSION -QT_XML_MAJOR_VERSION = $$QT_MAJOR_VERSION -QT_XML_MINOR_VERSION = $$QT_MINOR_VERSION -QT_XML_PATCH_VERSION = $$QT_PATCH_VERSION +QT.xml.VERSION = 4.8.0 +QT.xml.MAJOR_VERSION = 4 +QT.xml.MINOR_VERSION = 8 +QT.xml.PATCH_VERSION = 0 QT.xml.name = QtXml QT.xml.bins = $$QT_MODULE_BIN_BASE QT.xml.includes = $$QT_MODULE_INCLUDE_BASE/QtXml -QT.xml.private_includes = $$QT_MODULE_INCLUDE_BASE/QtXml/private +QT.xml.private_includes = $$QT_MODULE_INCLUDE_BASE/QtXml/$$QT.xml.VERSION QT.xml.sources = $$QT_MODULE_BASE/src/xml QT.xml.libs = $$QT_MODULE_LIB_BASE QT.xml.plugins = $$QT_MODULE_PLUGIN_BASE diff --git a/src/network/network.pro b/src/network/network.pro index 153961762a..fc5d08d936 100644 --- a/src/network/network.pro +++ b/src/network/network.pro @@ -13,7 +13,7 @@ DEFINES += QT_BUILD_NETWORK_LIB QT_NO_USING_NAMESPACE #DEFINES += QABSTRACTSOCKET_DEBUG QNATIVESOCKETENGINE_DEBUG #DEFINES += QTCPSOCKETENGINE_DEBUG QTCPSOCKET_DEBUG QTCPSERVER_DEBUG QSSLSOCKET_DEBUG #DEFINES += QUDPSOCKET_DEBUG QUDPSERVER_DEBUG -QT = core +QT = core-private win32-msvc*|win32-icc:QMAKE_LFLAGS += /BASE:0x64000000 unix|win32-g++*:QMAKE_PKGCONFIG_REQUIRES = QtCore diff --git a/src/opengl/opengl.pro b/src/opengl/opengl.pro index 24dbb7aa3e..849bd9ebc7 100644 --- a/src/opengl/opengl.pro +++ b/src/opengl/opengl.pro @@ -1,6 +1,6 @@ TARGET = QtOpenGL QPRO_PWD = $$PWD -QT = core gui +QT = core-private gui-private CONFIG += module MODULE_PRI = ../modules/qt_opengl.pri diff --git a/src/plugins/accessible/widgets/widgets.pro b/src/plugins/accessible/widgets/widgets.pro index 092f3ca32c..8329bce963 100644 --- a/src/plugins/accessible/widgets/widgets.pro +++ b/src/plugins/accessible/widgets/widgets.pro @@ -2,6 +2,7 @@ TARGET = qtaccessiblewidgets include(../../qpluginbase.pri) include (../qaccessiblebase.pri) +QT += core-private gui-private DESTDIR = $$QT.gui.plugins/accessible QTDIR_build:REQUIRES += "contains(QT_CONFIG, accessibility)" diff --git a/src/plugins/bearer/connman/connman.pro b/src/plugins/bearer/connman/connman.pro index 3ac54c3769..f57a0c930b 100644 --- a/src/plugins/bearer/connman/connman.pro +++ b/src/plugins/bearer/connman/connman.pro @@ -1,7 +1,7 @@ TARGET = qconnmanbearer include(../../qpluginbase.pri) -QT = core network dbus +QT = core network-private dbus HEADERS += qconnmanservice_linux_p.h \ qofonoservice_linux_p.h \ diff --git a/src/plugins/bearer/generic/generic.pro b/src/plugins/bearer/generic/generic.pro index 94ab36ce59..94fefaf6c2 100644 --- a/src/plugins/bearer/generic/generic.pro +++ b/src/plugins/bearer/generic/generic.pro @@ -1,7 +1,7 @@ TARGET = qgenericbearer include(../../qpluginbase.pri) -QT = core network +QT = core-private network-private HEADERS += qgenericengine.h \ ../qnetworksession_impl.h \ diff --git a/src/plugins/bearer/nativewifi/nativewifi.pro b/src/plugins/bearer/nativewifi/nativewifi.pro index 6df346cd46..ba02f37d23 100644 --- a/src/plugins/bearer/nativewifi/nativewifi.pro +++ b/src/plugins/bearer/nativewifi/nativewifi.pro @@ -1,7 +1,7 @@ TARGET = qnativewifibearer include(../../qpluginbase.pri) -QT = core network +QT = core-private network-private HEADERS += qnativewifiengine.h \ platformdefs.h \ diff --git a/src/plugins/bearer/networkmanager/networkmanager.pro b/src/plugins/bearer/networkmanager/networkmanager.pro index b3e088344d..a9de1561fd 100644 --- a/src/plugins/bearer/networkmanager/networkmanager.pro +++ b/src/plugins/bearer/networkmanager/networkmanager.pro @@ -1,7 +1,7 @@ TARGET = qnmbearer include(../../qpluginbase.pri) -QT = core network dbus +QT = core network-private dbus HEADERS += qnmdbushelper.h \ qnetworkmanagerservice.h \ diff --git a/src/plugins/graphicssystems/opengl/opengl.pro b/src/plugins/graphicssystems/opengl/opengl.pro index fb3cb5331a..30c88271b6 100644 --- a/src/plugins/graphicssystems/opengl/opengl.pro +++ b/src/plugins/graphicssystems/opengl/opengl.pro @@ -1,7 +1,7 @@ TARGET = qglgraphicssystem include(../../qpluginbase.pri) -QT += opengl +QT += core-private gui-private opengl-private DESTDIR = $$QT.gui.plugins/graphicssystems diff --git a/src/plugins/graphicssystems/trace/trace.pro b/src/plugins/graphicssystems/trace/trace.pro index 0958a86973..b31beb35f8 100644 --- a/src/plugins/graphicssystems/trace/trace.pro +++ b/src/plugins/graphicssystems/trace/trace.pro @@ -1,7 +1,7 @@ TARGET = qtracegraphicssystem include(../../qpluginbase.pri) -QT += network +QT += core-private gui-private network DESTDIR = $$QT.gui.plugins/graphicssystems symbian:TARGET.UID3 = 0x2002130E diff --git a/src/plugins/imageformats/jpeg/jpeg.pro b/src/plugins/imageformats/jpeg/jpeg.pro index 3a0e8754c0..1e6c24d061 100644 --- a/src/plugins/imageformats/jpeg/jpeg.pro +++ b/src/plugins/imageformats/jpeg/jpeg.pro @@ -1,6 +1,8 @@ TARGET = qjpeg include(../../qpluginbase.pri) +QT += core-private + QTDIR_build:REQUIRES = "!contains(QT_CONFIG, no-jpeg)" include(../../../gui/image/qjpeghandler.pri) diff --git a/src/plugins/sqldrivers/qsqldriverbase.pri b/src/plugins/sqldrivers/qsqldriverbase.pri index 64f55fda78..7399c659da 100644 --- a/src/plugins/sqldrivers/qsqldriverbase.pri +++ b/src/plugins/sqldrivers/qsqldriverbase.pri @@ -1,5 +1,5 @@ include(../qpluginbase.pri) -QT = core sql +QT = core sql-private DESTDIR = $$QT.sql.plugins/sqldrivers target.path += $$[QT_INSTALL_PLUGINS]/sqldrivers diff --git a/src/qbase.pri b/src/qbase.pri index 4ff17630c5..6336aa9f5c 100644 --- a/src/qbase.pri +++ b/src/qbase.pri @@ -4,6 +4,9 @@ isEmpty(MODULE):MODULE = $$section($$list($$basename(_PRO_FILE_)), ., 0, 0) isEmpty(TARGET):error("You must set TARGET before include()'ing $${_FILE_}") MODULE_INCLUDES = $$eval(QT.$${MODULE}.includes) +MODULE_PRIVATE_INCLUDES = $$eval(QT.$${MODULE}.private_includes) +INCLUDEPATH *= $$MODULE_PRIVATE_INCLUDES +INCLUDEPATH *= $$MODULE_PRIVATE_INCLUDES/$$TARGET INCLUDEPATH *= $$MODULE_INCLUDES $$MODULE_INCLUDES/.. #just for today to have some compat !isEmpty(RCC_DIR): INCLUDEPATH += $$RCC_DIR isEmpty(QT_ARCH):!isEmpty(ARCH):QT_ARCH=$$ARCH #another compat that will rot for change #215700 diff --git a/src/qt_install.pri b/src/qt_install.pri index 268bb864f6..17b41af1ce 100644 --- a/src/qt_install.pri +++ b/src/qt_install.pri @@ -31,11 +31,9 @@ qt_install_headers { targ_headers.path = $$[QT_INSTALL_HEADERS]/$$TARGET INSTALLS += targ_headers - contains(QT_CONFIG,private_tests) { - private_headers.files = $$SYNCQT.PRIVATE_HEADER_FILES - private_headers.path = $$[QT_INSTALL_HEADERS]/$$TARGET/private - INSTALLS += private_headers - } + private_headers.files = $$SYNCQT.PRIVATE_HEADER_FILES + private_headers.path = $$[QT_INSTALL_HEADERS]/$$TARGET/$$eval(QT.$${MODULE}.VERSION)/private + INSTALLS += private_headers } embedded|qpa: equals(TARGET, QtGui) { diff --git a/src/sql/sql.pro b/src/sql/sql.pro index 550b24b754..f1bdd6bda1 100644 --- a/src/sql/sql.pro +++ b/src/sql/sql.pro @@ -1,6 +1,6 @@ TARGET = QtSql QPRO_PWD = $$PWD -QT = core +QT = core-private CONFIG += module MODULE_PRI = ../modules/qt_sql.pri diff --git a/src/tools/bootstrap/bootstrap.pri b/src/tools/bootstrap/bootstrap.pri index f48c8c12ff..50c1af1775 100644 --- a/src/tools/bootstrap/bootstrap.pri +++ b/src/tools/bootstrap/bootstrap.pri @@ -29,7 +29,11 @@ win32:DEFINES += QT_NODLL INCLUDEPATH += $$QT_BUILD_TREE/include \ $$QT_BUILD_TREE/include/QtCore \ + $$QT_BUILD_TREE/include/QtCore/$$QT.core.VERSION \ + $$QT_BUILD_TREE/include/QtCore/$$QT.core.VERSION/QtCore \ $$QT_BUILD_TREE/include/QtXml \ + $$QT_BUILD_TREE/include/QtXml/$$QT.xml.VERSION \ + $$QT_BUILD_TREE/include/QtXml/$$QT.xml.VERSION/QtXml \ $$QT_SOURCE_TREE/src/xml DEPENDPATH += $$INCLUDEPATH \ $$QT_SOURCE_TREE/src/corelib/global \ diff --git a/src/tools/bootstrap/bootstrap.pro b/src/tools/bootstrap/bootstrap.pro index 50ae2cff16..6ff948c8e8 100644 --- a/src/tools/bootstrap/bootstrap.pro +++ b/src/tools/bootstrap/bootstrap.pro @@ -32,7 +32,11 @@ win32:DEFINES += QT_NODLL INCLUDEPATH += $$QT_BUILD_TREE/include \ $$QT_BUILD_TREE/include/QtCore \ - $$QT_BUILD_TREE/include/QtXml + $$QT_BUILD_TREE/include/QtCore/$$QT.core.VERSION \ + $$QT_BUILD_TREE/include/QtCore/$$QT.core.VERSION/QtCore \ + $$QT_BUILD_TREE/include/QtXml \ + $$QT_BUILD_TREE/include/QtXml/$$QT.xml.VERSION \ + $$QT_BUILD_TREE/include/QtXml/$$QT.xml.VERSION/QtXml \ DEPENDPATH += $$INCLUDEPATH \ ../../corelib/global \ diff --git a/src/xml/xml.pro b/src/xml/xml.pro index e6fce60371..68bb20b009 100644 --- a/src/xml/xml.pro +++ b/src/xml/xml.pro @@ -1,6 +1,6 @@ TARGET = QtXml QPRO_PWD = $$PWD -QT = core +QT = core-private CONFIG += module MODULE_PRI = ../modules/qt_xml.pri diff --git a/tools/configure/configure.pro b/tools/configure/configure.pro index 124564667c..81458fc1bd 100644 --- a/tools/configure/configure.pro +++ b/tools/configure/configure.pro @@ -28,6 +28,8 @@ INCLUDEPATH += \ $$QT_SOURCE_TREE/src/corelib/global \ $$QT_BUILD_TREE/include \ $$QT_BUILD_TREE/include/QtCore \ + $$QT_BUILD_TREE/include/QtCore/$$QT.core.VERSION \ + $$QT_BUILD_TREE/include/QtCore/$$QT.core.VERSION/QtCore \ $$QT_SOURCE_TREE/tools/shared HEADERS = configureapp.h environment.h tools.h\ diff --git a/tools/configure/configureapp.cpp b/tools/configure/configureapp.cpp index 9c2ce2cfb4..3f9d97c1ac 100644 --- a/tools/configure/configureapp.cpp +++ b/tools/configure/configureapp.cpp @@ -2913,7 +2913,7 @@ void Configure::generateCachefile() for (QStringList::Iterator var = qmakeVars.begin(); var != qmakeVars.end(); ++var) { cacheStream << (*var) << endl; } - cacheStream << "CONFIG += " << qmakeConfig.join(" ") << " incremental msvc_mp create_prl link_prl depend_includepath QTDIR_build" << endl; + cacheStream << "CONFIG += " << qmakeConfig.join(" ") << " incremental msvc_mp create_prl link_prl depend_includepath no_private_qt_headers_warning QTDIR_build" << endl; cacheStream.flush(); cacheFile.close(); @@ -3648,7 +3648,8 @@ void Configure::buildQmake() stream << "#AutoGenerated by configure.exe" << endl << "BUILD_PATH = " << QDir::convertSeparators(buildPath) << endl << "SOURCE_PATH = " << QDir::convertSeparators(sourcePath) << endl; - stream << "QMAKESPEC = " << dictionary["QMAKESPEC"] << endl; + stream << "QMAKESPEC = " << dictionary["QMAKESPEC"] << endl + << "QT_VERSION = " << QT_VERSION_STR << endl; if (dictionary["EDITION"] == "OpenSource" || dictionary["QT_EDITION"].contains("OPENSOURCE")) From c04b7a55d131006cf1061f3456f4c63a7436801e Mon Sep 17 00:00:00 2001 From: Joerg Bornemann Date: Tue, 3 May 2011 09:52:30 +0200 Subject: [PATCH 28/53] qmake nmake generator: pass MAKEFLAGS to sub-make calls Unlike other make tools nmake doesn't do this automatically. Reviewed-by: ossi --- qmake/generators/makefile.cpp | 28 +++++++++++++-------------- qmake/generators/makefile.h | 2 ++ qmake/generators/win32/msvc_nmake.cpp | 9 +++++++++ qmake/generators/win32/msvc_nmake.h | 2 ++ 4 files changed, 27 insertions(+), 14 deletions(-) diff --git a/qmake/generators/makefile.cpp b/qmake/generators/makefile.cpp index 61e7ac55ca..47ae384ba9 100644 --- a/qmake/generators/makefile.cpp +++ b/qmake/generators/makefile.cpp @@ -2376,6 +2376,14 @@ MakefileGenerator::writeSubDirs(QTextStream &t) qDeleteAll(targets); } +void MakefileGenerator::writeSubMakeCall(QTextStream &t, const QString &callPrefix, + const QString &makeArguments, const QString &callPostfix) +{ + t << callPrefix + << "$(MAKE)" << makeArguments + << callPostfix << endl; +} + void MakefileGenerator::writeSubTargets(QTextStream &t, QList targets, int flags) { @@ -2499,9 +2507,7 @@ MakefileGenerator::writeSubTargets(QTextStream &t, QListdepends); if(project->isEmpty("QMAKE_NOFORCE")) t << " FORCE"; - t << out_directory_cdin - << "$(MAKE)" << makefilein - << out_directory_cdout << endl; + writeSubMakeCall(t, out_directory_cdin, makefilein, out_directory_cdout); } for(int suffix = 0; suffix < targetSuffixes.size(); ++suffix) { @@ -2521,9 +2527,7 @@ MakefileGenerator::writeSubTargets(QTextStream &t, QListtarget << "-" << targetSuffixes.at(suffix) << "-ordered "; if(project->isEmpty("QMAKE_NOFORCE")) t << " FORCE"; - t << out_directory_cdin - << "$(MAKE)" << makefilein << " " << s - << out_directory_cdout << endl; + writeSubMakeCall(t, out_directory_cdin, makefilein, out_directory_cdout); } t << subtarget->target << "-" << targetSuffixes.at(suffix) << ": " << mkfile; if(!subtarget->depends.isEmpty()) @@ -2531,9 +2535,7 @@ MakefileGenerator::writeSubTargets(QTextStream &t, QListisEmpty("QMAKE_NOFORCE")) t << " FORCE"; - t << out_directory_cdin - << "$(MAKE)" << makefilein << " " << s - << out_directory_cdout << endl; + writeSubMakeCall(t, out_directory_cdin, makefilein, out_directory_cdout); } } t << endl; @@ -2671,12 +2673,10 @@ MakefileGenerator::writeSubTargets(QTextStream &t, QList findSubDirsSubTargets() const; + virtual void writeSubMakeCall(QTextStream &t, const QString &outDirectory_cdin, + const QString &makeFileIn, const QString &outDirectory_cdout); void writeSubTargets(QTextStream &t, QList subtargets, int flags); //extra compiler interface diff --git a/qmake/generators/win32/msvc_nmake.cpp b/qmake/generators/win32/msvc_nmake.cpp index c55806d002..e0e2fe0e79 100644 --- a/qmake/generators/win32/msvc_nmake.cpp +++ b/qmake/generators/win32/msvc_nmake.cpp @@ -85,6 +85,15 @@ NmakeMakefileGenerator::writeMakefile(QTextStream &t) return false; } +void NmakeMakefileGenerator::writeSubMakeCall(QTextStream &t, const QString &callPrefix, + const QString &makeArguments, const QString &callPostfix) +{ + // Pass MAKEFLAGS as environment variable to sub-make calls. + // Unlike other make tools nmake doesn't do this automatically. + t << "\n\t@set MAKEFLAGS=$(MAKEFLAGS)"; + Win32MakefileGenerator::writeSubMakeCall(t, callPrefix, makeArguments, callPostfix); +} + QString NmakeMakefileGenerator::getPdbTarget() { return QString(project->first("TARGET") + project->first("TARGET_VERSION_EXT") + ".pdb"); diff --git a/qmake/generators/win32/msvc_nmake.h b/qmake/generators/win32/msvc_nmake.h index 8954655672..689cc19479 100644 --- a/qmake/generators/win32/msvc_nmake.h +++ b/qmake/generators/win32/msvc_nmake.h @@ -57,6 +57,8 @@ class NmakeMakefileGenerator : public Win32MakefileGenerator void init(); protected: + virtual void writeSubMakeCall(QTextStream &t, const QString &callPrefix, + const QString &makeArguments, const QString &callPostfix); virtual QString getPdbTarget(); virtual QString defaultInstall(const QString &t); virtual QStringList &findDependencies(const QString &file); From 0996cf7645527c176e13d0d1fa05cbf9698bbfaa Mon Sep 17 00:00:00 2001 From: Joerg Bornemann Date: Tue, 3 May 2011 14:49:38 +0200 Subject: [PATCH 29/53] new configure.exe binary --- configure.exe | Bin 1399808 -> 1471488 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/configure.exe b/configure.exe index e30778119ac03da00bb9161136417f483fcc4b01..9ccd3af81db068423e5bb0e5d874369fbaee2e47 100644 GIT binary patch delta 612315 zcmb4s30zdw`}f?-HYg~_03!^{0GCApMMcFxMMcC!9T0KD9d$x7R7f%u3@mWO&<7hW zb4mMU=B}lt=DuX+mX-Z9v$8xUZe=cI@;=YG_YQ;hf8YP>=i?pboagyI%X!Xz&YiNI zgUi^knk0cO?AmMS@@Own&;cG7Z^W3%9@l#uubS;*Dw!RjH zpKV*4ukGUbUti1NpZhsq<_qI3gthRBe$bkS`}%8?e^)f3&{S~OXoh=gG=BJr|K^7@ z)o8r%j{;27B+Gw`8jTBnqkrnBX1||C&=@o~B0 ztBG3;Tf|U5%N!jcHT*+t326dav?-iWT!`r%hM_c)IvoBIf;*pTsg)H7z|T>nNW;Hm z)T&MH*ut@xw4^&eYJ4@CVEiohg@Iyldz4RlY2Lz5hkwb$Hf=)wOXD?~*DhcNs;Buc ze!lIyZG|{iSQw|(=ha&RlhZZ1tBB7$r)~*;tXgIp40`8?HcvbRO?A5De5^uRL;3iR zHL+@VTE+gNXeGTK|1q%!@|}Zq?+uq(*rVIZALdY4?(FaKrbe?S7b| zSV1U##WDF(fs;%;-ZAy)RwcE+W2$L~lG@oZ_0#_nX!&*>SEV}hybm#P)UZQb9eQMB53xSV zBma4@31x80Ep+S)NHQ9gQK_sclCxElomX$R-eqt0(xRC1!&MATtE`bVKRNz9GI$YBW^8)RoXD|<5D=P?JUNXLA^F)AiBg^;9ep~ z@=fm*j=r%TIHuWIJ6KciLQktFJsSj{Jc*(`tXY!QoTtfTZOh;#ccZwVE7Z6Li&MJ7 zW_O)eLq*BR=9T2Udt2|PH2iNV=$eFyzM~d-_=CBL^Z$zJ`BGTZqz` z>S+o4W<%SiQe2lFRK^}y#>Y}5gFtoj*Bq?|t&r-qR( zKCm*`8QyN%o0>90r>}=(ATDdHKZ5AE$MQ6@QRYOy6^*Wj&=`}?j_|?odcZN32 z1Dt9*Yi-HnU3~oz<->E&qP*Pv88;@(gio3WhbBz#ubEh-i_VtCo8}C3gO)dZEtbI97J6;l+9n!m3gK=G zWAFL-E*k3{)O7CsBAw+ebeDyZUb-?D(!ZglQHmE!rAJSDsSHxWbg)l%r{Y2GVDm|8 z(W{~8v4P_;^NUZ&)3xy1BJkIRJ)OF`2>R(vPp3{Rf)d>z;Y&E9Yd6?BNvn~YYOWFL zV`&h`15MN6u(=v-&RtDGfQ=yr88)EU%$hP-IuAgl+Utmbbt!d*g?>R!FSOIb7QX;r zgj~`9sn*2zeY^Xv?WEMXFVUw4&b)XwJn{{8IufU~%`s|q(8kZV|Noal1{u?;v8HLQ z$sQTle9BD{hkr5wYW#wo+QgA+p*{b?s2$sRP=%<>n2K45C|W^$T| zr`1)%k^oaO;mzGYyQwwR%gnA}ZMo5OmWOqKR|Y$cU$Ex!@xd`ywI_VD+Oa1*dD6Dz zQ*>i1^d*5MwYr4bb~V7-r}a{#PrxO~q~idoImUD(t!YvFqXie@V`T&pNlH z(drAm?3K5?E?up^%n(|N-MP?_I`vibs4A3l@xPfuhrY{Ma<7jbE~vut7vij5dG*_z zEYu2OhndeVx4{ugiWG%{Vv72cDuvGMb4~|OpgXHx#03r|crE*(g%*;7^-l4KJ|Z|E#@~)^LNvBE zmV{~1o*1$w&W_WBZI}$Jf(=fmBT=p3meTklXASCLAg(^hg)B+^Fc@1p4MDyHV|XZMI1!_YNytV`lQL9wJ=y6zC^Z_K?nY=~xv`}*w~&kB%DsSG zC?-u2OJbU_tQaj^GzLwIf0=tS2|cMLQ=85G9K$3_O3GxfL~svc(I!(6VQJRqO~yE6ew=RM%$zx_Ap#6nKH_) zidKzEBclu%)mf4`(|Q`UDez{Ki@1JiPic^r!M508iV3DC3b|0}UBS+*xV zljX?_Xpf%I$XZb`NRPdMJy(ahJgNjGs&r=7CR__+Ljs+=@Ut{TivCYSo!M!?DJNUI zpb4MlVOv>MA?Yz`klIb03JLf9{5uy-hnr-dRJC48B92eK18t}wot<*Q=~wfL<=D?= zSPyfGTuFaS!^dwYl-x4>*5M*%>Z@|3sH%KP$KL#fGtQ-fDrT72>|dZDG+12lDb$1- z#TP$?Eurs-E8lW!Gy6S+rzZYU^u_2rt@R7$-Odd*O3~ii%5c}QPbgwxw`i~xf86KaL4*x)kwzvtU{nW9rjlh)m8P< zR`v3#>ZPmd{g_$CVESw=9EkMkx?_UeRUEI*l{9njzwAEGztVd^k3Kj4Ko%B3Ha z{kI;gHVZZLw8<5p7d?tTSY04wvyut0GE(pMXf)D{DS~~GzGCVG_$D$mZ5Jk4i|VYd z^R$)yJlHz?S~klAjdGqRR`&8NjAb@Vs_uU^BTvIyW3~v(8wau^vjnq__VQ@MrjLf? zs7Ueo*WiVyI5DgTyb~pf|0KhKs5Eg~GBj-!6E`V^`!|E9iZR_`HpBd@h8x1E~NkSXA-AeMyaKtd!YfY=xCJ!2R zS}fF5zAzdFw@z{jG-#o=b$9kuRq;k-W&;MqZ6B9cjhpOg@Bk);RmgzAM)B9QCiU_O2Ie7q*M(QViDoboRjtv=F;arJYK1YUuq=>b2n0rbF6O zQ)t@=&Vlm`4z;8q=5zcEg|7U_}lq2~tH!gRymw%2Y+Tv9lu}sBNIr z8h}~zbta~oJ**3o0hc97cL<7%w z)iv&lYvRr9u^-n7a}%D1OUPuG{ctD{XLQ3NygeJ{}IYpXPhV zF$g@=;a9&7*{vu4KowS7)mwWb%Gz6tZBA8hmYk#vm2@c1KLl6f_Q(?cNSE|hl>O1VRL*tVKV#_ z-&t4<0Ug^51<=2vKH;eVT7s1dgU9Mxufb^v4d8jV?BP&pG<+=x-tE}R$u-msKJS>2 z`pzF%O<#6S>|AuUe0<82QC7F|{qfY&Yl@m!n`dAp`S2DRVH`c8{BXh{S|rHs{Vxql zpH6AQ_fXR*@M(`{4uUOx{OGb-WD*~HPkt-#93oYp6nXuv}alq+w{q~h%Kvj zY;@qVr(R5*585uVt#`zS&~O4&5zBj6Q*I-Z5Y+1S7|@| zGKhUWpQDYa>U=-dODJk;9pFqwcZ#5nah-U3c9P0(r-LJDp5J)ljWY*lTBMMdDpt{- z*c>=#(u{)79EanWqWpNhz?U+r5>q5EPE^#+>Y0MXtCERBSDj8D9&_mx zAVPR7O4inP;2UROD0t3fTlv1T(F?P)*>Nj3gjQ0adr!YafAp!{8SBpB7Ygh~?x>~I zQ>_21n2HO^xRfN5K+SV)#HIPL|GD<JUPgkBWZEXwEXWUFT1d`OpK9K zed3|%Ev>0K^B}|;aUa4GpKI!p&ui;oc6TyZ5m!TtuSZC{;{w}X4 zglJ4Bgk#gYSO@4bh9E+>KkMt~*1tRyi%o~9nS-b>TV993NqNbq%}9>JL-b;FsxI-! z3>Q{`Npo*DfBhID53-KZIejndmQSQyw{Sux-AeC4eNur>K_2E{%TASQFiEVt2CsD; zC$1X^zjh6e={HbT^&*CWlfD_EAjRD13Guh6^~iq-EN(9tRXnc>*AHs!nJNe zF%~q)S|XW;U|H&@0)NZu>l0mzCSzcDP$#G~GrssY#B~n{Yk@AuB`S&(%BI;3pQ09d zTIf5=bk)L(-FpbLVN>_W(oQ%TvOc8N;ptxb6l;wIT<%tHbt}@6!qE?@nvGD4v-}mw zYnrpQhu5KM{IBj9V6#v@8#8c`64wgCCh>aSVgIpIsX2P2D%E5?RhjC=v=ik`h3EOM z!aw*82Lc#BjspR#GAXI{CNHDWdW)C3-hz{Ej}8|HvD#D^n4BoC=nM0cBXzZoeCk}| z7*0|z_GzNoO9OTk*JVlpshMMD9uwi8WTSXv0tENacR4E$NvmcjRE>(S93^#`Vjwzf z0F=RM)oer6C_Nf7N{fYH;$!{gy_;xkbMjn$(i|80<$B+sjJmk1RQ*O)9CK}4{ozCp zgI6ai%q+>2Nn!l?iF(@)pS$>hM^8`f>Jz;7VJBh>UX2}!V}XQ;ULq z*ifB8>QX{U&&0`985Wfb`{f9A_L7w$+F=FFm91_-i!-wWt+g7?Oo#~_(T%O=jC$)s zWZa`LYFVDjNW(2wiHzIa6;@iGsLXMZ3fZ(Hke(9O`k!Cri6CG8Ft7#3(Y?W_ou2xH z6f>KJ2~;y#JS#Tfb`(hlJRIwlfrzz}XV z`}3FrxgJ7#ns@{eX8g(#7TQf8^%yCo3 zhEgW`tKN;*HC%SWT$<_UxGICws0?<=o=Zbln(61bD8s}UGyAN5QEHG-55fGI#Gk`c zO_=g(YFOk`>w9nZ!*Ml^nX#d?W@w$hsZLpliv^#rfg`D{XigzFPgdS;Jx)z+_Jr$2 znz1fDl(O zkrzz{tVnAS{RK`3`50R#B%t#ur1iwuuu^j4vF!T_3FrG`eOq6`+)Q>vP90Klv3W(P z2hP}XNsobC6fK(>EMs1Qz`h3Y;}g)Ouc5a>Zb>JyzXZ8DR!C$ZQuf!NUQ6(AY%x&v z?f91yieWvdA34s3Q?r4@FlU%AZ0hS4sG=ni+EN8AMUqJ9Srl6TIo$4R2>zREKEx75 zWGQx`d1}^Sr)FxmpMc>ttfytDS$$ojH=yHkJW+-gf zyvZej%YzLDHX#EK)5!2R`~DbsryGJ*?lZ(4Y8P547bWydH;S(vgZ%W+K$Y?^Q6AuR zg&dheR(zOlNQ%Uk06muStjAI^*?%7@TJ9n4e1*G0x~CW?^fzix9_7Z}BjccJf44xD zXFKsUwM$GViKF`)#HmMNR)0gVO17EEKH;^H{Fbhmumhp}WaxB?xl+o=WQQIo8m%F= z!3tZ7l%@J@XoKJQ`r3PUxZieTgN|lqJ!@uGCYz#yE+bHlU6;qQnY?Dev;hI)m?N-Y zKxm*!KA*@}@QOe_&9Rgf!xsY#qRSDuKETlXzM^U|kv*@FRY>z?3pr{H{@tLk4;A#n z+g#yw*r#F4%;)uO^gy>j6|IoauJigqLUYNja|Rm3frnwmKtr%fmQQ503RwjnIgsny zcLR;udxto*Gj}Ux;B4zpMOO>4b+Du7t8Oi5&=OAM~F)}&KkL@~OqQ;K zjv>&?yrNJMXE`_kYRv&+w?nYm92$5}(P1c&&r-;-gU7lFH_Zm|=Y!BR!w{^JnTagQ zj_RRU*gM0htvtvr^xzg!Mked1vZWE*FD_OTN4^mK5Jx2 zCj0&mMe8KOeM!NsKx(B`U6dIlo<0D^%+MH>G@eMCAt^e8R+=027qs8W?mmPUGvmY` zI>Cy}@Fu@=5f}|RGALHZ4f;w>rN%#uWALII$*UE4c|PKh=e!0P#l8EX-JsB5nPZ5B zm&aos#YCAysv_moK}K!Pe(t#(9(EfBx%F0gxOwl`d1_^JxzoVE8$4&iZ|tYvxaa=f z$I)te+t4h_E%vVBEE9R)IYdM8Ymi~c?ht%hyfC?H8Sgfk;Q{o_>LlLl1~aolg}d-> zR(S9oNA_wS>SVw&G9YU@T*)$uH$MYma4Shm0%DN@vtzh>9J*wQRP?$J0|v*5PdY%^ z;P56gGP+peE|!obll^{MmPbCmh0_qr!x@NL!o!;6t|y(b`rRFD)Lz=lOuJ zt?N^dsRlu<;AeT0gdb2- z5t<;Q1;}XIxo)=+?Uv$4-gghPqmiRj-QpVQ){4+pUgNs$+QTi4;kucJxCN_dyo-Ox zgPe5RBkKl5LyX#?GS42;Ae=HXnTyKCyLg+OtwL4;zCpGJySb|}b<@HCPMyWr+p0KF%;(* zx(waH?M;4G#pF!ZRORMlfp_iPX;dU%<`_h$9dH9dn4%)@_)03Dpe1%t`0prB(dA>fKFZMhS4Cq!tax7G zk{1%>0I85FPz5_LKR3-5{=gMlw;ex_n76Q_N4we4&X5k*d4;5EU5N;?8gd8SfYyV| zi<8m%%4n4wZU1Pu;9nHo(kOB(?PxWGhB5xjXrq>G;~LcPR){h(*N90kTENY%4h%Wn{9it}06IB(@25 zwzb5D(zIiZ+9O-Jl505|Wn{8xD%%=jbGEZ>R@h!Zwp^KQGiRfWOy;e!Eg`nmyn2z6 z)CrQ3C&n5@r>$^fY-sS$ieB@HvZtMLzd{*3&M3aO1=7cb#;TNjbn+txJ_24qvLUayP5mu0%xO)Ox8nXD<;*y;&DxESBP!Q40wCIQS7i8c8?DY{!uY9ohYZ- zDH&15&w#&?^4umci4~de!411B% zYZF{X$}5WWOGG))PD#ftsOW=EvBejDWeq1yAyG+x1N_(6dwY`PIBw5@@yuh z1MNICh_bB5v}$>z(NNv9$$)XV#EO%sS7o#~j<&!7Z6%?7%A=BWO(3*d8I5}V2DBlB zCdg<3GFk#hyNzhyEA~_n+Aup>GNBdAXeo`*h7#J!Z@6x|KH`=pb2PKXEm%e4qmYL@ zKuNbWLPI|mS#Yo?^P~|^IA!2qPi5mn5}TdPtgwB9Y!B9PQD)9Y893Oxr0C9j_D*)T zp$c2)7jUpAvkm2Jl!1dim92nG{+ibfQgV#KwglNa%4}me8)e{N@1i1Y46zm3*(}6n zeiu=gA zYZS`MNO}7MsCS^`jcXe_TLl4&;Xl z7vO4sTi=%H_N7(au2MJVqh2(XZZ~Q*`;d)}lY7yQhR~Is@M{Kc!2N4z{qbEB5F34ph}iyL|oC!zEgoG`QF1t^Pnku?@0sX(-k_DWY)5^Cm?l7 ztoG4z+8iw(0lpXjSVqc2Yw%`gb%Z70; zNxqeY=+c0QOMhYY@Xkvuy;!;fvnOi>hhJ)=o%t>q=bR0Hy%ZGtHCNACC}p8lUbMTR zH)pefIN?KuP^=!yE}2R}WKH%%NjKLnFT?@*RZ4@+HZ?vSR~lDl)ftn zOQIG3hV!zteUXlcLvjBuja}V}hv#VD$a);V4`qi}@xyd!_;&5ZJe}XVAK==v_(?a5r8#fKF_r%!7u-iX>p}8WA`p(!t#?pWzf2P5&aN6= zG|hMLB2LcEV1wVn^99O27>=ZyuWQGN zrhLsDOw(P3a}YT_sOveojO9~4w7HX|o&icQvk~@O^}uVEi?ZmB)uih=m@_>DaaK?7 zGw`*|>S+pXCOuJb>@yr#{F(=Mp7y%Z`N6uQ|Mb-Mt_f0=uY9*20A2}x=^Gmro7%t z9$u;=XR81+%?qV&_V|Z**6q9Gp(mE+*4T18JJS! zUy590X9AHl=$KA=C5EwF%DQ-O0SU9)6n2jRXbAeHN=e<3OG^7DFR2aa7z@KB6k=k3EU2&NebH{b*Qc>u zlG6=UCGJuJo)y-!uNFYl8DRm-ThKAi!XO7h+})p?g0vYy(KCj)6P`gW;SLvBE+!@9 zNXd#4v=E5lGGGDJ%+U2ekKfp!Q*N4l7&inw&T^bYb63S=XR-$i>+5%GG0#jfftpBc z`*eO}35nZSb`mkRCD~^7)}9iq&Fj88*%u zid^fd!e%&tLj`74lSgiZ^H^pt$>033={ih({14}#v^c)yPXp~0a!wsZoV`w-EDmxb zhp{Q=;7)Pd7Ec{|Ti)CS+P%`M^dxUm5H+m?Y42ej!qzYWzf&RL4k(Qqo!BKzm-kK6 zao-d>SZXHYF*_Nvoms4x(sA;W>6lFQ!bxd-@O1h=UvMcE7Yp5Z!+T>q3P>V>V)7$i}YaAl9rz_^(`Bo(1~g$)Zx zA!4hs0?~0p+Qu-Iz_FPj{^v2cuxlhs^aw&Dd3V-*AJoqbO+3N%#kRPR@3G4UsoU&@ z8SGV=00SP6$W7_1B{_O-&l$*hHPoq%!42lT>f?6-yWi^hQWRnqTCj${-9zAT^eA6n{A8%&SMsIKK}0CWa~W;K4S-+X>5A_)&- z)bjYCESg^UGcPNi8@Y;{w5v}|oEfunFiX#TkqggQ%ukl~V|oUrTQI#PyF3qBNKZoJ zvvkZV#H;}JGos-U4%`PMm@-TYWSi!}?O74RG4PvB&#wHL%b!;M+=|bm@EtuDm74I+ zkWy3B(MAsP#HxZ08rs-F5$w+|;DypKF|HaGlm>@+Q9XTVIZuAzqst0j`lJf^p%uGb z1*c0}cG+I(V6z@`RGXvOt}5APzIUyf9K&8C4lLY|GM(QWNWyK*Rc&m;23118vIyY_ zOykd`_&f~z`STioHk(5!9r-h7jtT#sHOCZnxRH@tFuu@8OJgIuu%(~FkvU=F`FZf$ zoM89u=zTQu_^aUknm!HQQ1qpJ3(}WLwJXbc-JyscV(C$VQ>k`iW08ZaZzlDrM7y)t z*J0{w5yBx@g3p7nk3WCqPtS5ni7z+db8xvS@*r0kV`UA+3WXta#vVWoNUF(c>|AqL zRvs2{K&7SLktihgskclkp=_e<%PQfQa;broc5{d{iWMlNQ3~nvtQ)kgkV<7#%N{w} z4Qv;VGt_Sq`-r}6mh+<6yZCLV2_ey^YcX*m`gasNhQWmsv`S3h<&cSTsM__LST$c- zfO%|11KpDsXzd=`ew2X6=;(QlcS)SgZXuRm-q%ydD%`?V;Jj#pcqv1rAz2HRgK|HB#t#RVb$w8(XAYIydEKZ z2ABEM`@5{kU)!eQolG^=@)T{{KOu(S7{RVfNxc#mrRU7vV_J|Ee=9@RR{5=JItvH zMT#|55yEcxqRNENI{x&WM}N2B&w=yewb#+mY&Ja+toUUE|I#@Tj$!_%z~+VF)599u z)@-&97|QDs91m1s+pnIcqDZB_=>9&iSfkwdKzY)qV6z$%KIJA+|MMH#LfR5x%|702 zm@M=0TlIhvy5|ZtTo;Sw+< z%bD$%!smo^2ZYuQ%xcGrJ!Sqb)unX#lcqpsH^t#5JXO963g!ple%XTgL4Go&eC;d& z@5IMf>DjFDaA3YJ%Iy_bzPv%_X@wwq@)NeGffr3|`BbPW3was-nJ*3Khck4ZgOe0? zxfD%Fb1qq!7>#HMU5}xm`zH8-wI6jL7u$c;A^j=uFzz13^Xd~b@ z*@DnEQNDIoJha;A?5)nBm^t&8dyqNGZ6^VB+X4F*gbJU)&kNd%50-)dn{C8n%b?Gj zu^9nR+%?u$b!d_y`X4;AEm|KY{!wJit9SZ`ju&5FiIqB!hS5LZUvy*@uTyzwaOBNwr#}8oAh@Q~ch_T;!bBGj2=U}f*jm%uX|i7v_^W17%!$9< z`C0EbFs$fk_CGT8HcVEJW-E+GSHRAN8BW7|n}ElnNF58d`y#_WKJK$9C?40f3Y%Kf z_>uo*ILgFnZTj9(iUDK_+80nHiGq}Ad4pU9g zEqWu)>KmWe#X`E6;ZW^#b|tD{kPrvoLyV7)AFU&K&~a`5BKINe=XUO3sBQ0XgmMX< ze`P=X1EXstvC0USAv!+aw=q*vJ3gDo5~Ax`PG4FJD|K`47wXWLXN#$Ic)3LrxLVuV z=~kROcrP}!z8HrKHP$k8CDV<6ZS?II!5i^Cr2*_8P-4#}J(_()AmY!A_`I zId%vgLEwq*O`D+kTLHo*X#G}VbD1ph&!VeCn6<4t6u#B1m1A1Bw%lyX=Ey#pJf}S8 z>Ru_d!jkO8rW%^S#kV>)-^g{45iYlJhY(wjMrjK$ZR%5L-7xI{rfqQGy%mdoThcgf zIi`($Ds2F!ZNaql4!lod+(B5{IBg@QWjvKO3e#3$+D8t&%`olmQ)!;)FkiU@W5ajmNL*=Y|y4>m@*;<@gVoR5fQKw-YH$kgq zMlttqcz#*H@DI7(LvZjO&j(-`SR)Hqs7Xr6_3n9s3^EDj4B*9R}Q<=qA? z-qNAzEcMVd9!=1E2%jx8i0$8mOUoif_cy`i-SDT+A;S$we79v{bY??mv(P-Nhe;eTsz?D(%shIm~l=a|zo#YT5Maot1~k%J<(t>|ui zpNl3DgV~etr$ltE0q>Qe1Frlp0t_3!9CAP!vkrIB$lZS$M$b?RHyj3xQEs2_9SCz) z26}t-c5U#xz%nMlhLtT#JIM-Ap_jj+)ikeQxB#_Hi@|$=I>{Nle$i@zgjd$6!{FNp z)SHiSW*^>n#hYw21I;Bx=w9U*7gmm&3#!lDSooWKsh1z{ugsCMlrbTm?|*fTn+AHX z3KiZ5%POPzelb+73U)t2Ma>3E?yz}PyQd@f(y#FQs)(mk-~Sa_z4uH(PyZE0yk~Sf zNoLGi4RhY}2|rGMk6$e>B2K|U8`_h^w?)ux$@?j{_iEVnUa0UMTzb!h&wt)CM7<}+ zIc`?VYrXLl$7WX2)4`t}EOsjNSgm(j9qJA_t5ciHOmZO)z_cx^{l)FW;Kb?x-&Jbp zrJ&R-J_`DJ1Uy>ZURVV&YfSj;zs7*iyfy8fJ8L0tj0lmNsD>S;EcHboI8yuvs~)cR zqf!lkkA}n7Yb0SM0vg5DD-khJe0?QBmO63BYSaG>vhBY>Mq`leq}9pm1Mmv^$-&mT z@~d=PC1H?5TNu}PoSp120ORBAm){5WzB10fwgUYB6WVzN*Ph1NdmP5uo>)sT>Kc!; z>53suxioCRcqsUfsnlcK)5GjBPRxJ2eV9#cL%K8TNSDbQoR{V>%>HdT7mvB>Fgwj* zn0?Zot6oq^(>4U~MqxR4eGrV#wjTtQ-br(zmGX+WQ9rewB(RyIaO99`vTDkYQtO%4 zr2L^!=xJ?c&2Yw*ZDz&ECcp4XyFpg^)2sY1BEV~II9NNy@?-+DM|DaKUYV5Q6CW0u z_!Q4Wq`fCPsIZ$>v{{Q6Vc9y#n1owY z_YVn$x^nE}y{6F{bg<&g!GSn>Y^MlupO~P2oonfK9C|GD}mNiqpnAy zg35i_hHJAsvg~dwugg(~zKVebN>#Xym(Wdl^&Rl?{wzFuT!MY)kGu--Mm7f9Qrz0+#nR5ABdG_1z@S|YM{iXI=a{yZ<>wKvU&83EE45N+4om5M(nB|d# z{9-@4zeIJa7>l6*W#cTJm_$~^qnzZ^1_qy>#$&9OII&GIdwrbKEgu)yvOd=R@)&B2 zEG^yP+WKJ8Z7H~IXyq_$=kH4D{|ofk5D++a0uQ@fRGpCM_Ms&gWwHxP;N=a$rNv9^ z`cs>Ndec4&^F}u71#2x=%u&M5trX)t)BF=i)D%CQIt z%7gt)w~HBqr6_}~Vs)^ETh>!-uySKa&W*otUWV_gaK;q?3(51uE5H@is2qBFC|Uja zGLlLjHk9MOIBhJ@!AcU*jO`hZMn9x<5&dA6cM?nJ5-M9b1%fu2oZfVHf#gjFapiaz zwW*!QmpCN7;f@t0pS=d}Y>F0B--6@#(ef?$6F=$}L+Iu<;-1BjxjC!5U!l4Ky3AK? z^3`4cVxi$aUAM)&L{NhqEG(Qu;r`%EUl;ggb6;T;wB0gLZ1w|`Z5aTwxA?-(TN2^a zmKLRGA9DlGpL~=;6EL9^6O7LdlD(kW|%?lw+Caq1`qg!vxeP zn_VE?c^|7Mt+{vlorf{odW)0h!{6Il!I^EX#PP-WXTraLKQ@XB%i!k6l8^|($G&3O zU1;@5Yu_b~QfOJ1zY5UuNrJ~zbnE>C&V}79`)9%WPfTG~@D7>fj_hYGy|2*2Ox2+c zrxTHG?JT(ci7EJ9J6#ICzQ9g*<995knpqIL!&ExjPC^%Mk;KfQHXsRFG#}MaxAEs3 zuElQ$`9{<623?h&?cXjmQ+GCmExm=E&bhpLrQ5+!>En@ktcRXo2Zxh8nmT`t2i|Pn zi(HKG*ACxUlHX|g18c*UAr2)#<*N1qkiIh_^SASE)Ff2mw6JPD-^^i?AMwEA6PXNF z^$91S9m(oh0*1y_gb-K@;DezOI&UnsTUVyExkPagdt)Vmg^kOaXBs#9e&PgDe>m0_gJ z_66|#o{+$W>AWCl-F_#kfSR1gj}~m0mkYeUC))ppJ9e4#d1IiM?aMxJcY))3Lc|VL zaAOZ1)vE%Jy&aAHUgd9PTZXP>tM4iCGoSAfWw6h-z?i*>;+#r&cW>y^z4NK_aAvRG zH)}NZaOn1QMF~CoshJD>vo}z5u7rTk+Uf>ri2!HXXVRA>Jn&)4lK9+)!dK(CNa_LM!&YEz!3_}QQB#13}Hfk7b$$EiqZ|3a05RM7_$ zJtx|!>YQ*@>u9iOEr+Q`jbVA^YVgQQGjjB5lou$_}=U1Fz*66F252o4~2<4j>3#Xoy94y!RAA89g|+;;_yU8 zAjZEBvS4-KwPCk}Ufhc}h&B7@RqBO#h{GqpAHD&;ha-d^A?a|4*KKUh+)L;MAxb@X z@o)#RWDdM{xV@M*2fjHRC;H6+?UB~vZ)H5%KQH6azP1dbJpgKsc(f`jQzJfJE@pmI zuv?uHl**k0Hta(~v2Uc+6L19bn?IP_cG4%sUp)^199h~*6pzw!P?`%HnZPH86A=dc zg@O1DUuTd6A0H1Fd(MJO$HPklXK`nuz*^EfKMp5`vMp?XJa3069RbYU zejXwgl)%Q%!^OTO@b%{=j}IbTG<#_;ZXX`-7EbuLmXgq~F(io=A!X*K>{KT*EG@A? zHw@mMCqg?NFC^jfrNbzTrWHGJugPrD%lxz%PC9zBsmPE1nc0zGu098EpOC~+ufqNl z;ohBJ<^DmNwPf@0GPsYpIt6#Vg6qt2@0D}CRNUrlF9IU&(Rjj*dkzMCA&Ki|Lg5$T zBgyBr6;%RE}ig&~Xl{%Fz>UoNOg(Uje@_L&RT-q05({z6Xls z=*z~{V(ggFn`ZVR6nxo3xCmRnd@1bj89YDnZ(1U4^N_zJgvWzg4eor<6A5;r-`{DhnbZjDN4w~RJOeY znw*wmp7bLLag8PD*$#xp65fy1#>`q%7*$Bci_Yk^g=h=jB6t~Qo;G@yzpMt4i6C_) zu$D_3DFV}(aPM!6RGd2GVwP7S`-~K^^?6e5 zcw-y`n~VUcT47sK?Q%Sh>6s(Tk;!2nwU|BjN*`sIzZi7 zslA5`V8!(TZ2#33$4i-)TJR-=(^Uz%q;$zE(DPjDnEkkZWwsKIbYb4 z&M1aHUrEw|$=F`gu6IHe&f5|XKD%eS;$wL8s|0cIH2D0hb|P+VKmN+tNtnhBu*8$H z1B&U?$!6|C){$2#s&}>g{sKQXg0-hL+Yk>K=k?;DRG54|RD5$Pym>w%YtmE>gbJi( zvey1|3KM@Dqi{quwi49Z6(B0LcKf=JZ%mDS)0SytxNp3p$v3Z3lvGFsu=0csg1!!l z{Jr?U%N`hFA$E0BAj)R z`FnEy^;G_N5(%om*TbE!U0X!hfi%d#b`-hU+U;}Ff#I7b23G_^qx9$xTK}q$4EPtD zgJgyR==n`l+pRBgEpYVXuPOAm?8GeIe$C{v?qMXLf3P}lCZ6yjSo)38snAky>#@nn zM_lj{ocSi)5b1!?yka6c5E)hy!-hie{x+oZUz5-rY@^7xbSmPvUS!^US(e)3cVw$u zaW}1xA~*T9afKJYmBcrvz?4Z#$9Ixe?WWolaoIaY@9U8P`pX>9DK7&GuuA-~%l$ zHWjtG5OFa^epvKmtw~K@PdQvB9-O^9^zzqJi_uf#$vUi z<5}2ND5H%YY#VN*m@PH3s3=y5I-zQ_!uZET`bPYaaZTq>Fc^!nFqBe8zPL99PFymI zy~e?fOEIM`4w^Ktz+dzsjX9l_R|e9Cj?h^O72A{{T`%?#N;I=@j6#e`EGDADVzNGD z2gZ_yxyXR0P%31_szZtT0fkNlKX^x72(IqF^}TP4sTMV0Hj}HwDQ>p7Per|!iaUj6 zjD_#NkJ0Fe`gl(5&^+_^UgILadG#?&bHcGx+Y>F!O8X7YDtMF( z-p)uyyd#H`2}9lAK;_GP?P7Rk{ZAg~e>4hzLc))+`W?Ak1zF4s7)P9>M;^@j(P*q0 zNn-4^HUsg|hT*~7OF2AV;q;HLfqi5Utl9?ljz6F4oI%O#cAyK~`7u!R&IQk(jN+Z~ z(B`LJr5}ywBIV)d<)0gdpTv)$N^_zn?0qx?=O_Isw)wp3*G^Ab&kJvJ*ksh@w z-zzd7e-TG)E-Xa864-)#Z;gWE*TP4(ZOk`c<$Iv#^7yMq~Vl&!|MNS_LJ?}{N zS2p*UGuk1Spq4Dsje_S{c*KU0jWnxJB^1dL_*+X_jfcg|s4pg*T1iqovtFXn2wOA~ zP9jcpW1JEd=MQWQu>SJ*mwYe|{I47J_Xl%*XyPmD<3%`LBVoYx@W>By8tGH0;!Krs z_{&Ga$GO=)8z#slHii`vUM-(`%aKko&lcpsnd{*Zk&W^4RlM7NT(6<{ovj`Vfxj6; zf5#aLMwZU57Y&V>2LdROb%saQ86H{hk7%T4ii-Q9j2lO|A!FTaTmGX&);Lx`__e&6 z%aL`5B6r>hIR9ICL|9`ygNk>P>X&44oiuh| zQ*^Se!(e?~cwE26I9F91AH<=?54UmT=;X7by`w<5X*7BuqSQPyk9HG!D&Jzp9O`_O7@NvG zxwUU#;L{K_UCPICG>%Ur29klvNR8vu>u3*}^?P$ND@P&Ck_zRa?B4^3G)5-^)fBUw97cHs{%WpAB~Wec#l&%%hVHO>M5N1g3c8_xDzZ6 z84Snn7{yM5f#HYmU~s=HW!=u=4o71o)=SHWM>MoxHV=M^gXXzZ0-5Yrl!EPe`=t1G43UFJ%c;)cxvGA z|8#0#N&{8nQv<|U9YeX?KSvi+D8_&+*eYb|%cq-@q!zCx z4Gx$L=zx$j4f`|Yb!O#P2C&AZtNS!idvC1anty$Lhl^(1vMykOc#Va*K~#xj}pXyF5vuEH?ehRNcpRkIPepA>8}prZwavGuUPS&PVm)V zy~V6f5b$@b7~To`{v9G_ehm44;}x&YunH5GcZ4&4#{_%L?XM|v+2w&BRx|z+vx6aeTnG`1<wNH()y*TGkhL&byZ z;KAeIw%gWHK@`woeRRLs(f!E{?oYD2Kjoh&v7k9j`6o{NqY7636KZ%+h3>CM_q%cT zpXTn5r^Yxg87}{`S={m=)I6CgPHqoQ^%24!(7L{(=-D2|)^`(cc7Rp&?fsUvqd$ER}`Yfh$>r8Q5YoJ2HR|+5FDh# zLc(=teP%XG4I$e~{p8Jdl!%*;dZcV%U*b?89rBliABwoO{0jd)|3?FX&k?{meWRFqJ# zxw{LArnA0SwhiY^wWI89i+q;Wmg|m%_w5|pLU*Bk+%wt#cGMO-6CDq&4=ZecxC>EY z)*M?<6QQMVLIZetola3>N53XQupski=h9^n((VlYEY-i<{cjimD?54iYYPMGSoeW=@$iwkxGpc5L zHO|#F&eb>0HIzDLSC2APB{n9I9P_JYM>WokX`CC^I5)m=ZbIYSB>uJ3ZdI~lHoq5# zgHT+V(|B2Gf|BJ+a;Yh1=JFqR`A~G#Y;$7)S&j(%=qy>)?4im}KJec{ubQ3X@Cy)_ zJ4PsV_^I@&*}0C{$5Jf?h#|W(XJGLG^*j$$HvW@T&Ld6yBZKXa! zJFfz4HRnrp7&95>df%7=+kPJ*$t}4Gr&GH-+njVlnASC#pDHxk+USHJr?c(cYy)(H zQ5@LW_L5GJgf6yP9RhyyyKN^Xdwu--lX~kHid_;*wO!K*t(-iN%g0v;?SS&|U}deO zb;fB#b%m6UlFcl{Op5atljJDH)`~sG`GghUAz|C%EBM)F`wFi9OXB4DiNc42gd8Sm zU2O083hnz3v}dj%P@XyYA7@SVXJy#1;p?*$E&2R2fqdxI(YDb~ z=;RhdU%raB-S878Ih|7I(22|OXwL;q z%4X4cu>$L5z+aHDF_ zP@Ftdq_Oum*gn?_p?%xMa@pAI$LC{XQSU-et1mqfZ9Af&YjFET6VLv`!;01mEZC@8 z_}EPGWk=T17T;1ZIUSF2vkhq}gt?8wx1!*IecPOtf`358ohNi$Bnx-8v!pS!t&K;J zG@V)cZQItCLU=&$7_J0A;9s3uO#9zg`TR1*b{F}@d$(*&0)%kCo6(#OL2@#&;5MT@ zZ0S~8?*O5_U-)`%UK>MRN@hR0xY(Wq2!8H6AJDH&kwrm)g1*hQTTlKETh{}hQ}zF!yNyjP8;M~t zJQzt!(()&h6|(efhGC*wd6HNfsnj!>s7*=BRVkFB@pQ=kq?FbMCq4o_nu)JBz=ZfnprGR@VM@4lQJ!=-1;; ze>u|JzOALzHrnnSYtL*Twmim0>(otz6DUMJ^(VE0M3ns;~pHrKpv34j)Yaj6QVlYZjz6GwfnTP+F$*CM@M!NYT1Y5AyX4lo>Mtc zm;R_{Hnw(*wV!WgwTr$P2Oqb>9JJd>`#>uzC3!9T+-QJehh|^L3e}jW|Fn}@W9(eT z63M97zqQpP`sEI>_Keon70vJNpbX*Wte zfS^dZ7ML0hm#?ZYI9AAkgX-r~{DseE{;alwpy*r{#oZa)r@@zs9r)V)a22;wk;z`f z1!NhF^A0Rd=NAN_7d!ljXnECV<0T#bP+@yxXHhFvNWM52gMm5*9T86i8;F0Zm4b>> zcb{Q00v;Gzpt4J4%M~Z;@ugqbq|p(>NIE-SCNIQW`f6*jeWkGm#RE102_7R&oP9|f zt3~uT{#bip8>?0HdK}z|gJ#e8ov3m;Y+t!Nx}J?keX|mOjKbF4f2N*5NB0M$V7dKw z8>@A6H0ma|1;~%>V(mUW_!tK_x3#*YMMYu6s=)m_web@#a%M2fjKl0`I3-~Nrxu=* zi99KAQe9^;`_@1iTlx>*3R+|c%-d%9=pdi0@WQQ zrKDG{Vbj}JH^U3Ol2NnLp6MRn7`gi!`-gT`+g8mr7@rx|B_1pA`?vW}7dLr#*lqk) zi)I$A!YLsaHkk++CwC*HbNrS+YW-<@x}O(Cr)}GBwX>$!ANZ}5Q1)re0&0Q-wX1tP z>f5Eh@}`*ai`CT9a(@PL5mRbM!q8wQs$}Pk2=>+zRPI+2{IE~`?9)GA>7R`{?^FHP zYWx+DRN|J{quN_-qL-z_+7GwKkoEu$Ug5z|9PHph7aaVFgHXK`N6jLbA?v?UvAkOw zOl8MP)DJ3_nQvlwlzjiKDrdSR%Uve_Mq1EMk97-lM}=%z{*xO=g&Kizbcbx*gWxsjybq@wu8+l)Q;1K^sjZD1Hy&R|4q$!8paJ&YiuH`1YMSPRKRV z)LzK35?r7G6XYw53<0_E`+B~XP~VNY50Q+R`>c|=Y2VvJI$HkAUT@{7RHY&4aZuhS z|Isut4l=)MUnJx1V+D~*wgRb0dzuFlMn%gqg-rgAvy5ZBX1}(#jZ*^=Qz_0X% z8EDXnUV}a$E79wkU4pfR-;UY+F0n2ixa(MW%dwtmxrbzyviHA;#)y`ih-7#(b&vX) zgr9&^ervya30f|@MXbH+60}@r9Gt>ID7uB?CT){-|4}Vhsd*T~_lpm92J`6h!!r<+ zU63~duc`V@8K%-1bl9eZ3{Fuv6?s@*NB&U$nSnn;a{eK9W`7dO@Zp77TT_sgQr}+G z#Y&7WY94F9(FKcaH#S$+K$QUaJv{B6mVvykH}Kw!!O>q#Fu4ZRwgW-B_mrzLs&n)1dl}p zR7fb_V!wK+)jWDkQmp;Sr4X?P4ytj`HbI-k$;xQhH9|drz^)kV0*llI%Vk}yDZTiD z6!@mzuas~xUE$6CRT#H|e9sb$@b36?o>77)p464)l%MSbT@hEUn#J1IWmc1Gn(1~b zfL%&QpYLvo)@kg4CM_t(cB}T}m}t^2ll{Bxp_f_R2fw28A~2rPX%QF?{SS;gkp@rH zj{n~f>|b7nYn3Z8x#R_kzNhR=mL8Rh6YNH5R%-N57scAW)6mQtFLIh$?FPCL08`Se z_RXL9RRi#$FFkxwg}L&Oy*3S($o*0O0P82a_0=~U{)J#}e7V)3`N?Y5M{_{}Z?^Wh z9I&%5NBx(Y#M%#CZutj4*u>%IGlCM2K7e-M1~liPK@OXx(y^EewV2_Q`!{QoByfRh zkUM`wOz|^H_HJB7Ch@CD*>X`N?5l|C=H0Lec*;)iW_4+?;X=d8I63B!Nk0^OxSQ1? zxu7otPR*w(i04i>pOE|Qb=}}V-wR{ys&1CQPm%)_OlCiMO~oH$iCZy(iMktb!tAN= zr2KilGCkhzcZKEet}5oZ6?f2{cwJHLi*VWJ%VJ&eohtj;E3CHH+|t-lPu;aY(TsnR zoVzT7F&cxrZang*q_@TxR%QQ149msf>sn=ji@^u|f@dF9{g_YFc^C`izbkl$UNUMhflVb~A*6Kf;cuWroIh=Aiu^F#7a!F%A*q%chPmd|#k?$u2Oe zBJ3!aWQ}p9ophzu?wTJG9W#P-Wr_>IO*IY#H%oc0JR=($C|ADz-oF1zxH8kl2oR&O zi=np1@$nv*!N>hPjD?b~F{XZRe+!I0ZCs2!bmcA8N7yWBVRCeju)~(KamtR1?DQUR z<>Lg$l^ul0aUqUU4WsDs2s0MRVh!=mclNVA7#%JKU)mriRG*+3>0xGY2b<^0v(j5* z4ExUhix`%Rq4u3Ea4}BO4kJfRgdNYxfmj_K2kenoF*+JLzNkHC-CT?e+F>vUH#mx0oCZA4Yu7m&KB-F%TW;jE)N&Gt}0wDK5l7nz0o! zqh+%q%y>aI*4NRo-@ZSc(cxmKZDNgG4DNn*Fx2Ze-A?xAllG=sZp9E|)3GnPqjjWKMW{TDGT7h?}c?*%T#xG;=@2#lBHK#Y!#Z|#vi86D?4 zzNiNRy15uh^uvF)-(XrPa*@w{)=lHUe7~NcqblPFYj@}Wzydg6*#xr~E_khu-pNlb{7+b8&w_ z?XmwNhUH?YeVq$j49*iA44$|>JKmB5xY-F;PJLyM%wTlXb9_uX~W<70Je>`DEwGPQ22y2eZaBw#q3-XJOG#o9~ySskOUA8uFl zv)Xp*rh#zhtRU=e7_Z=Gc-IXZrR4_u!fSEsq-K-d<65hG)3>4(KUOO7O1m;4b4BGNxf9guueGj-z9Kr-K6))Kv*R^LDHgi;QoX57 z468)HThGULgyEWkdwKI=i7a{F?%Ur=4t*S@nak8yqs)cP2I={m+HyyuoqIX&ZoyTs z!A_XX22wA~F8!pm0+%mMAj=((mHVf_%sUWBe5#Ev*?y4{o>fuL_~N+)&MZV~&V=(O z`0RcCtrk|QeX2ih?nT=zGO^0{{g-w|rqw-qr4?)6hlJ>vICzl&M!EBRwkNZ@cw%R%+v~eNO&y?0JwokU#P|KtGvdhpw~Qraq|ip?4}*h6l=d zC+jPT_Q7m;!#$gFx?ZgPIZC&<5)OQ*l=de>W>qJFQn)2_GLH{MpO zc4wkKw}VO^>W{zPYTJCvXxgl=i!q-VY6Q}6 zEAZ_2N*>f0<^Kj0-UnviGRV4UFe?P4pNqGWcweeOrC+>UaPT;P_we>evc|ho<8_a+ z-@M7XXb=hoREJnDGfA$%W>=(_>I*5 zsSHfgfJ?Q3tbmnK40l+BLj<1Xlyta@$EmD?$LXnuS1C(1-g_0w;e2hNy>_rwKl2V3 zPkm(PjOt{xZ)KQ$t0L_CR{CkYQ5tWhvd>P)vg%(K>%yszA}w;^;=;`1(t&5*KKYSr z#uf6ey^GFSfPxEsUApssfD)`pq4F2cP1GE3tv)_7}`dHq=d&+55&>Vr=E zRDY(sy~FIwh_LT~_%&W1JMl)Glz**pOqxrR9&{l#gqgH4!lduy(?67p-+yKo-iUFe z)WuNWqte3)%}CT3_M10iOt?c=3VmjO!Af1+O6o&ZdR$?pCZAaL=@1M) zJ25uvaM{fXl^#}DCz*9H%1uU{1}m{O01fc*r}n%d7&s=mmDJ}Q^*F*xygqO`RVt3X zM*KkrX^dMxwT}X$PlAh4!!L~LafBFM!Z6YzFn*L@xddGy(e@2DS#2}dVqn*{tItL1 zp@R_J!ywWlAbyfk4Y7Qyily$V?QdWOJjvkVE#=swhYsTPCY~9~IN|l&IwV~*-gO$U zx5i_IfSfqx*r&dUt%nZcaiZ+V#EGki_p|K8Rsy*A%NAu{rp9B1fIRKusZVk1k%M@g z@H$;P5P|oLOwxFBG+vg*V}*cpckv4OoTwf-h?g6NmluI|SQ0c|s>aJzc-OE(K)%K# zK)1&RHmM#txD#cfb{6l-_B<6?k8K$6^ovjIP`1@F^AWf9e5!w;8YpN@0j)73buhx3 zY8j(3rhTH+D$w4sLO|NNcm*5?*Qt(8yotm!18ZRf-mh{FyBT0pGmSS<T)d(%yy+2mNAOu`g}32jWnYoTV}*d+?&9?(-f7i&Y2OUu8Gku#@H9Ir85(b- z#+#w=?8KoM2}do-x9F~^Hc8kA>h>le~GF;U_RZ-LYDl7{%; zLm;7~{nSY7B7604gjmppQ{NZ-OZ8U@ITsKP9JfumCi%`te+`$f;pQs1OjZa;0~b$y zlkhngZ+;kFc?4dK9Ky~KX#U@gcJ>Ga$m_p5E~e7OUM|L>FpR|!7=OuZjq&0}do3_h z2D=#Q6Nd*>$E06NiLv!j`;QR_kPf<1U%O!*0^}&J7xmDozIgqRTW2Nf6wkH;c?ghg z*dPL9t3I$N<$-9PTSt!*vHOjiY(XU4wD+*}EgMZllN8!G5 z5%z1|HOfkFe!r7HyEdWZRa&OXMg3uK9A$O9=+3UOz6@TKZpCCyKaRitH@jvO9z8hz ztKD_9b!jZ$WGwl|?OR8q{FX~i`5kWg#NX@}N2B}=zuJ37TkRXQ`_-{X`LynseO^8; z%g@=DO8~yt!8)@4jo>`B45g7ehUj ze^NynF?a_;H(t5ABj8~)kZUx?hVu*R_0+wTG+s=wI#$5^edYNxTx!irfz zStrRa;VwPa7kG=_BwpsdlJWP$cG}I@#=G;dG6ZW7d8SZXx$`so_M5Gg%lZ$%Lo`2+ z!7F9?Ows0t!}jTK#S)P7ERlJ$V5Pn1W^6*(uo#*gL~vr94WQau{QcNQKgLbGdP^ts z9d4_T3__e0@uJtYI-QUFuGHzc=)(K=7U}dNq%YU$ScvsSOEJ=CZA}G3-nLACR`@IB zq81FZ?;mTm@nhh@D*==DE7>p7KMnOytp4%sw?7(-J=|+{pbTI*;KQUU`?s-H`_R6B zsnld_F}XuMOo1YK{EQ8hDs9AaAc&jF$KmnBmT(MWpdpz4OE$2Y}|0mWau&( zZkh8`nT&v}bIOGLnYvJ>Tj+dM2>S)+JB9oMb(w)~nRrzO&*x3lWoG?jC6paQOyRpt zJLSIjusfp6KOe8d#qLk+yeP-fVkj#Qp*VIW-pdx4fxmZ#R99rr7#J4SS#DG#=I|=P zX5TA$)8599E(sCYt`sL8Z!=3QEmHv5a^R3wXs6s-iPF2ISLfQ=>S2y)-)&GEH};?& z78$pdg#48_oKM?+LQSq7c1BtHqrTFt%!DsRTuWTG{2UelF)x~jZ$u(NFZj~LhBB3V zTPoy{)5{IhCtgx|fqIQ5tBnmoAUy2)+n)FoPhO)K0{fYiI!)M;w;_DL$o-hER!#&vEN_-O#!J8!kpLUp!;uf2>rO%qG6 z!?TBR(O=EW!p9Z#CZ7PJp*IYjPQ?fPq!r(dL9u_Ye1CF62@eq*MVx#-t_B=Vq^1wW z3*+(P7gTI4f3BxgdIltWRUb=}$!Y4H^wXWrg_7}RIyF5Y%YIZr;Q)6Nd(~}L^H}0t zC^PLHw^_*%p(F@_Y`Ip~!tUCZzM@!!(lR@~08hHzc$d9;j@7(z9jEW=8e@OB-fA6N zNZ(?9v>zz2+VrhcsBzbDWxg@W%!MITrVPImS^JG2lrpm?*fR^P7Io!)@6!JTvJzoH zkW~yJg5(&GMs2ab2m#Rc9o2*xAkp126G!H* zA-z|l7;OU_(-0TQSL^iF8_pyVo$~g#DpIn#qA5!JEFIZP6J|df#1WgbhzJf5=HapGrxo-q5L@i4Dk0p-ZvgW9}b#`{9bzF#ogXr>!?BaV3SEPYV#@k+pN&@QW!k8=4-!0TkZ zA?`> zduJv*b`^GJY9$@CDScsz(~D6L&&~L%8-gyF1Xyx51Sce%^Wr%^5#bW>MunVs9{47z znc!&e^R<@HXM0q|gReypq@h^#>f1mNV+dBSQRO;11ncyb6<+Uw%>*PclXWI|TBgVy z8b1_?kC(&aBT&E(1&=?kJs6@1w!J_P5=!2H1;HK2<2F&ej%$f}kgc?G!g+X!LC$jA z%-=3Y%JKZgT(`_wJokn^W6E^ZWwx|ao+xMT1HB5!z{=sQ-(H@2V5N707HT&eOnnqoKS^~*FbZT?E>{D zP#UZTLnaOC<^q+g1W#gIvS@=^YaHGWaB=>*6*!z|0H>S={rW6O@%08%!XLt%Wj-=y zZMWbfUXqa{8*nEAF*G?Chb1M{%Od~Vs5fhSl!H}<_QPqI!*YA{0ab54is1Whx&q%( z%enEa?fgg;isCZE*FhIekzrpd3C|_RhJ2s#!7e-oRgVV*<*ACGr?z9o*&6Y-Vzp*`aeXMCv? z3gpt$?Teh=g3~Gzyr%CcOa7zm-tcNfX9=KG^&H~((PHe4b2uJXh!6cj^+w*(1b!2^ zA$Ji!NjGhidg%XNOr%O*O^_E!kcfKK9Z3*x2s&zlrHG1f0^U}W^GV<%0p6*O1TR!N z$-&*qu$osK2SUDh7{+Z-)!W8`pyoO4!8VS?6_Vi)@Dd*d7ehjM!}dA{6Fh}FOGpze zatRbZo^SP4k0<_7gFjy5SA`HX$^%1CKo16!zzkSS@D#d4T5E#zNCMtNtd1pt7=l<$ zQ0(AyZGcV8COERtaiBb;Qap*e$fhrp=asmAak>%e1=s{DZU#Y>Ay~n)LxrT&A(%)9 zN=cv`zzRPSJcTZmu^NB6#t*5983=;(U;qjB7=i(sU^AMN1L6_{vzfbIM@PA=gL=!^ zBFW%G+`(S<$gUEPs=U%-Cd8AYyOgc7+o@}*rAT#L3&{^RV~F6cXOu6Z@w=aa@f9!v z@xug9oXcdn2Ko@!QVs&D71H*yF)(VgvAqn#J;bSJZ0CxQvHfwn$PLn{ms}6iPPqkq zp7Cjtjk?^ej$8^Smut>{w^ha`A=ROl4zzu(;cTus7a(}3R}}3rL^J5uU*+&?CH=w% z9wex!3i)}pdAaP|sSN(*B{isXf00Y_$rwX|dU#^kCvO4>+N{KJ&b%S1C`i@2$zK%_ zsxZHLdOoaJY%H9P5gMxef!0znkNw%0e_$Fw^YUq)I*FF31TSW;kTh-GAXw*^g=)p9 zR-HrwUTJdNNzw#QX@dF#s%u9hcfO(jdxfIE*P$;#dI&g0>=WNV?a=E4ug`Utw|1zC z+m}Vq7qUw{M}p~w;5kijp+mr33BWI-dk+)8nByR>5RhP^Dg@=OlpIZPS0uq)`qz^L zK||0}6TFRxQ34u*b!?SZB-o03hX@@ec>48_6Wf&o=SSkNMX6BrzEL0;X9)IT;6)1! zbqKf(0v?ppgO3(~z>G>v@D#dA7HEPumPRNvpAI}g{9J?ofX4q5ZOs^+kNC&7eof+M zGmLUc@E%Gec%3g@x@wXEAc0LO$aR82+Konx7HYW{)7Zu?PKloho*GxnFaK6f)-Hju zA#-U6z(urn*GL#N&{(?*gDlh-psdBD(hzK<+;2VQv?o3Wh6GQIp7N+BSV961e*;QY zPa=N0!JqWXxey5sqv=$88iM8YAcq91JuyK?f~Q0;>7WVvMiMNg0}V;g#Sk>q4$M*b zlpA^6IRbC+3(%4(`*#0TT+FNl-fExSJbV?0Fu$6LOPXg0@nBb{#jkM4NS40wQ zrrc3^z)v*zQ5yfjaD4Xvb@bquCmp%beURWO(O2Hbzy`ygSGVFr4b;AF$6E+ zw19Fg6@ihPJ8Qtvg>pYa4%35}0F^=jtH;XI7)(nmLNXa~rsOsRJ1FtU zehe?S;i@f6jS9-WkOX1~7AgWssDrI*iWe~bWr!viA4#y89`qo=0YlJ3 z6RbgK=)r_dp;aoO+)YWMPN`Ryc?vPXQ)r+(qVb=P#7{%1>Iu2*|4R+Q1WoW0 znoW6N2oBJLAtX?8@W@^9+VkR(RJ`*h3ZmhLJeE2hgAO?q<%52Fp;~ zKPvT=X2b_)z>+{P5C5vGdZ31QGb>AO!Mk5@=^l_g=inxNU@qoo;sPBP{4HjyP0u7S z77dpAOVva6yQwE{s0aDv3fkoW1FLzd3hzo}^4WK8#z94zb)$^ABE}a8!CrNv1j!tS zhR8Rq)Egu?10{slk~hgl?lY>8VR%{>V7omlhRB;k)jbIk8Ov^z7fc#ZOxg|dm`-yw zMf=CgD>uaWs)ISOJz$#ZHjL$9IsidcC>Wm(F%$+o?u7yqyif>8OKo9y%)1RGFYl@t z3em(LXz-&o{){r5|H26h*o=oCbAq|t&jhcxWXlJiD8u$(k{w1c4yCGJ&IUnmL+~<& zUpSDg95AN>J`MzHj?#%)h6D3otPLQ=(>X^*Xp%yZpu8a0;gYNzj7_N^LB=7ra4*+b zo#3f4R1!2!YNWAMs8)R@0Ao|0#r&I5dGfz=YSa5Oy6$wQ8FLO^h10#!poErswI77kUP&(S)fe!k)JZAuMxWRXvaUEe!53 zDZynMhWXh}&&xCw4zbDRKm}CJLr7wA8Fd)q!=(znt2D9n+W251EWu|E7I{679dCq$ zelImW?`P-WfIcuiui;aw=dGBjdL9XkMZ@Lk#j593vGG;UqfRK` zQAZ?rF*{mTZc_C=#$4H$!Jb#cP?%5rjRt?d#&2NoLqS7ul)+p?0y9Bkf)~vBGEfuT z5=kHo<}?zlGz4jy;5CG;a)4XrU`Y&b?ly59z^)1;1H9bL7o1@T3N=AB zB1n1Q(;o0W3X)3#a~@=Zr_fkQ)dc+_2>fw$Ad&b520u~bKSulz7t0MnfF7JIaXi3@ z3<+Koj+2THmFGWTe(QOlZd_Nd%>qHd5Uj=U3xzs44sg#Wnt-oYkaFUi%X}n+!X&yy zf|_7vBtarQ2#}z+AqZ%K&(WMpAw!Ty2fDisU_3yAr_ikur}5i(_#sAVE{atj9}EJ& zAvlg9lfA$p;4V`XOr{5WW;q^|s{~J>+hpZNRqtcWdBYUq+byc+6F=VI&)4`39(B$? zhF}~$C?bLC1toqactKPk12w@dkp%g4AdLhyw(iDhn&35ri&Ch!cEC>unz#;>`9nmO`_ z0(wwLf*ppSP!m+6Ih6<8NsEGA=s_+COb{`_Q)s-TYJz@-z~J+JEY*p`UuWJizK651Qt`g>{0Gc~!`gTv9auXE1j`M(}8m0 z(*e%EnBqxvrvx>@%t!)ken2lELAfCaXoAntoJt`>Fr5x`cOAfI6_Ma6G(qAtejDP4 zt$!5JgX051P+|yCw`H^ zpI@%mKN{2_D5eKRBv8GeT;1>U6q+alHNh>B1T*MB8VL#vL7H~pHH3>&h?|7rKqeh% zq8tb@s`RU2Jc;fW*`PeIA_+3+!R`Sd$TbAJG1jsd)FGHl2iBo)J0~+HcnVFDxf*}j zJd_EOsDvIAk|5I%6l#KMG$*fd`7WyfCGJjOzoZUv0&)CrK0e=3V9Lam;9OCz>U3Q#fL4#fR6ctrg75 zkwqWro5CyYf6cM}-|m)Q&f`?a**xTIkr{{1%H1sm_)UiZ5&{Ssj`y$CQzc()aV%X+ zAyjne?|pmX7D{t%X*X>tOV)NU`|&s$%>FWAcI|cQeme64vhPD}>aW+SJwJ7K;-vmh zTaR;M2U}0#Hfv5Hm6Gb_{c7Geyq4qX;JpiT*9zaP`H zrIWS?PM=)}()T}hoZjp@jjh8t_6Uk3MiX4D30Tr0P(gqziC_DxO$^M+mQO#>K7ZXG zm!x$1YYdMVoNLg&dKbf49GxWpeiWtCeoStimhR}BlQ6rcAJkZf6uq(Hhllj0i5hII_(Cq6Ra+av@2Y#TA%gGY0+w)` z-F`m?bM-PVTrMENYt`wp(%5sSvFA?OgZNK$1!{t$`4nifXHOm$W@VEa2B}XaTysuY2XO4^^Pn`) z_O#XZuw-3*j`dagFbl7)dspd$TVhCMaPPx_34tnHfp*|%2JNXrQ8lBWH7GJa1~Kx+ zeTb3coKRrz2NFDKW=LqQl4cR6%T92hS{X`Jj|W?DB2Y;=zEsD572++NAeTWnm;~m+ zfC-+j4@qlHkRC}8K&k3j6670#Se^tbq}ajdvq!LG5gj-(4fsvelt`y|XQ_u}(;8K= z64Ti*56bDmifceH&=9QPfQx+rbqMn5Kq(1~LQL=!3dvZFKfNS!N|Z+r29O}#5ODnu z1e>QDg^UMS9>Pm|NnjLWf~Qci)UHY}WIxvR>$%cT7RlxVv!Cy%S?wX4BcO+tpC($F)R}Vm=1=`lB-m^S255rK zXilY&A=pe0E+K(YhzXuTbEWnTWmr-q{zf`*xF_(}J%jO|5*_BKiC$2LpoAW5pW-RR z1W%#IWQiu&fXk~eg^KCG91^TF4$RT`J_n!A_@S3os4by)k-$h)0oy!@9+$qFATN?& zD?R8)f<=a)qb692a8U{wf-*XAKJkr0Oz;#cmC(W0mFG2)1JPW1uJaRPCGy5So+U*I&ePmRTJR83lg+KAzm~-EeBU9&ueBxc(9TlZ0iAn7(=iPV=a4u zLy)KyI!*`PnB*zM1W%!I32FRAk@!bruq0ePo&?9s&6G$JRG~SQ2ZmrBJs3;^qYx83 zh44LFO^_Z*u$B(Q62Hpe$7=jy2R~#8YUsg{yFH1R;04h_+4QRNyz;>ag-)VW^@=M& zumc2$m5ns?W#Dk%F*XQe%LY<%W^IqdFpD9QJA-ZP%T1AoF({W-L`$V-U3yEZ#u+fb-~C+Y|AmR65ooh_nb(Sq0Xy$bREFt404R!XxqY zmPBp@K89*ZNKzYt4_@hRCyrM|;#lMiifn+1s>ntZu^)Wa>JVChODR~BhRVvCM=$`R z;h#qYqQZ0}d$-=6m92QJUX4#)lRPJVUr|-^9&oFeQ^d2<9Xw&@ixj|BU)UWguG1>| zy5jO%5+TQAW%gvLlG@sJ#ET- z$COiOMVQhMrl3M9l0ErekgM=KzY1(mz8B@KmsOSRm^hj$MzI%U#T60q6$7sN(Qc4$ zsg`dm9wWpCqzOj8t&G5#+l%3tr{EH$;LX~uGr!s2KX0|^*Zn1>V1{G1UuXA0(CZj{ znK3wXyAMBMIxYpWf{U>;7F(^aXA~|$T2Ygk1^yS=UM-jFHNn_O zf(n$X?n;8WhM=n^Sb=CzBWk{OAdwC|(1|-753tJyDV{_t<+CNq z^MjZZhAC7@4_0>tL9QWKjbMdB9UTI`h5!zv(18WSR}Pe`1W%#YA({tNHPvQq48tu;2(_+fnW*=j6_Fa znZ?eltYClqQb`w?(eML)CFL1hHn$L>#8O<1l$E8{YhX1V}d8x8fm5p(i{Sf-<=NB zUP3jV)-7I((Gm`XraJ`Yv7xi{;HTRh53n}`30_RCm3J4bin}pI3~TZlI z*8%JeL4v2yTXN=kEOOrcCV5F-9ogC7EZ2n01~PUXQ`eJ?Pc9^6I(b4kbqPoZ^kl_m&862#Gg z)+E?y2wH0g7S+KI(1B>}07ok94MB=0(L3_ZbISAMxTFa4Ad4Ps>I8zdhF}whUiJcq zfNx=kluhWs%eOcV;5B(j@Dy4v_i6n3lQI5<5hT)su_Rb(2*zrHN;IcZ$PnbwgZ?B? zL8LdddkVcP%``z;qyxEhpf(lwiwu4(hhBIv-62@4JxHbpKaF!dz}^rfcnWQhcb`@D zcH@#I%z-32u!ICf_!?=mjp8mL0?U< z0nMot;yeG)1b#Zu&UHX1cnZBQXBH_3LWz+CDfHlAM-T)J!9fhY>;;7|dvYd}WR zl1yXCaBayKXm{mmP`6bVy4usV1n)USf+yuhX{asf2umCjU{NYPJss)*g5HMUGzLw$ zI=K!(Azj^fvl9%s$$|t=%MWF>t?F&V^-LJSM3kytNc=Q|zfj{RIQV$ezgi#YP7fX+ zff>}9;A#1h4ABJRBMH*zK@Sq78iF30U=7+`DFgxr!*n{(!gT<5bC94FQtJbo3!xTza>jTqB zkYos^X@X;DPUV3iD2636iUev%#3m9XcnW?P4ssg7J|A0hFrlL4ry{&_fffLAWS|4E{;t zw{RW6E(RooJc+i+?@ucaVj~H-)>XZ?EeI+M!Cs7+>;-iQ@=5UiC^)bg1u>~)f~OGP zHKg%ZU>58s6hhPGkzg7L))|6nn&23kQ+dF*h%!jo1fxh`6k>v>(C5-s6ATC=K(!1u zK~v(dGWbn3{*(DQ|ArG3(1X86I&F*{^GNU%`nT*_pgcc}X|Lk}2*%NY^=&|~)DW!a z3K@Dq9S6=5|2g6-2QazBmgO*sw#y_8NP?cO1K6H} z1W%zI(oo}fbnwmmJ4k}lDIl0@2u@=tWG|>oz$Vz2=d^LTpQF5|&`w$Xl&ZH4)7~(J zcyg>>Ncc9RhyT1eT=Y4x{`%-0?sscnWoL}{7u3N|BmQ&5Z*sq$e>26C=qs6|3Fbr+bRofT68H_la82+9 zno}vnFPXrBbQ1J*9nha;@)X)54K;qpg2?%IcM_bw7z9a%;53Fp_JTSD86?;@%xMA) zF-Y(f`dU^$q3UhJv^Pwl-o#%>{5XTZFr*0*90Gnv1s)6}!2>Qqxk~U9+ABje!T3mm zOcL}U!O5re*|LYmUxRQ_3K{$W@ml~t8c3^MB?WYzbWx|DE!b)X{rgHbO=`ICJ2(?@1c$d*vp6nPoaIXt4w)*7_-?h z2MS2Az9k4Y8VA;6tYt5#gI`Ge=RzbfQzE8#6782snqW>O!9)@aC&5ZXFkBOSf#y^S z_0~-=odi8y{Bl1NJcSNOL*R#CS;t6%A`+Z#0fNPb;53Fp_5z0>pb3geurJ3`hzXuT z-^uDyRc{++%V7%5ApSz)mp^45*;=Rx66z4lCBXwEFbXljQ|Nmcq6x-F5|ogj2MJ1y z13fhU8ib2d$T%=R3is!v1qsY6xsVbj(LwqBapgg5BtaPo_BIDWks;WNv6j8SA>apq z(2Wg5e}cF$BXk!53&vr4YY; z1P3+{zo+YfPVf{89g>EcpkpM#Iue|227-7)a2i7)dqEw7%_P`&lj8usqKO1gp`T^- zTvcxyX3Jp;Z6yA}X7+;hcyC*scP@UrpC8GryPb!vLd_r%u{0@m+D*p}x zDs){AEA;;9l{h*%ANKr&l8~Mo+z%moGxTX!l=d*F_2~;g(wLQ}@QHDM&Sy!LyXb<-GDt%InJ!!_CG}?pP^sqwfvl&Ob zX-^Nw9^8ae20gmK5ok9BG86DUIQBZ^ud;i#(x)2pUf9Eub@f@_MCrq<9C@lt>$41r z)MpvSQs}eQ)u)2*&DuIye@=2ELm5d zjk;+w-j%rQSK3vvW&kx&8iqP=wF9B^Ry#Jl zs@fT))TR~I$$^yz@H=z+ExtHqtl4$)hc2EXM;}qPKeMyGkMFble=oKp?wKvDT-0>t zPqk;%9sWIl1X&aLsIj}D;+Q>iqtzrtHkI{^mldxukfSjEt1#%iDmW1Z&CBgZHuCx2 zOF?OVysZ@qIL%OlW9dH#C!p#2`t3LpATkv@A)T2~jCP$@hG7PgWODwLM#w3xM0gM^ zX95>&&f-XS^`oeKQof(5pJQjeY`n5z2zH7ypvd42QKw`*%5nO$S2gkh&B6=Ylk!F* z^+fj}q=ih&|0%XkJgN<4!4on|r=9fD;$N;%Xzhw|Jvb4i-NHGroBWcKhznT6CfeF44yhwJvptonm zr@VEZ8>4yY#6R+$PNTNQ*}vtL z5E9K_T<~au%<7VcXxxEj*eT%S`4V9u{Eb;R9ZFsrC7*GUz8`JZ6f~k=IpoyW@AY=9@c*h}}i-7E^+#aW@&;$@&Yp(W$5@4SGEfAp`;Pz0KM3Xd8 ztS0iKL?qFWFrsTw7Cia#`G3IEg*-`$C*)5fQ9DgkuKvpLi1=j+sjrEaY*QX}`F}*e z#Csm?!p)t+Il{S;GTZ3P z=X7RC2^!19PiyM6Nbf+(pc|*JRVR4Z&ajQ8?LT2DgIywpv8CVrUx+AFp;hi@E$`$I zC$BuHJiTUjNR1uIsAT$1tUPzViuB&7Qaz2z8*PQ)?(e)lcOWgg9Tqv0 zFD77|f_0n>HlTGqG~Z3Q=7WuyglGM3R$UJoN{hRvT)~F^@#?k zxz<$t4eJvy>JD8o$0&A;;3;}ZBtZK<>ld!rd9>+m)C_R^WdWQ;yv(j<#U zPAAn$Lp4iNoka}6e}`%|sTQFKkn%{CA3=3KsRoe>9iRD}^mWoqpX|ak57lx>)sR&4 z4OMeZwIGs8Nmi_>#*ykoMz~k;q&kS@4xTKS&$-?v3?y(WZIv6`wllBxlznrQvzlB(*OaH>Y6 z+KB}c1|ajP-@oot`dq(5_x}=7;X)I)j1AQbr~m<*Mp7-I<7TompH$N#s2Y>%HbsS( zUL&9S_19DfwkxN~$dpQ^lTUC=#9HqanranVJxstWNmYe1P+}3O;v=XoB-LM7WTSq} zr+(jJbb!%QG*vmNKEkXhxJOa#l+RHf`PYUqh47_{?KEezrdmp>m->VY*o0J1Dynin z^C{qDO%9 zsftNeZm3E%Rg9uaDEY5zdTDHMT$8ibslXQLxxOyYa;mW}A4CdE7 zs4md6g8Y0LKsHc}ExnW&yw^vglH_eH7P8kfm!dyiq?G9Lxe|RHQqB3XnaqvB`7z7i zy?Q)Sg9S#KDF8q#9D&zi4bB^-!CVvp@n#Ya*2G4P<`ypVC0%jr0&ImO&HW~p2vBV! zs#X6NS17?ujZ;CK7~o9ssq5w)_&Wy$18@YmyoPAO)_oJJClk~p2c|Q%rR*A_jNArE zX4R-OG2exd@XQwDTnoAQb~VY`3QS>*I`SxsPp+m zfbdduGycRo>$<TT6vC5}6$BBC z;l$x$X`{_O?*U~~7SiV8lHb^xEKx8DeiJL))+15Q_4(|juszsC8xTY>`QmD2fPMoA z7j8oorWFmC`u_}QEz7Xjf<}G(eq}&@qyequ5ir4kf;tA=wlab{QJ@dT_T1gg{R<2$VQ(9?HgTGIhm44pS55gEBMlPMf|g2^zSJu5-mG8YYx z0P7z-j<2QzemA4x&va+@g-7uj4({wLg|2PAN4fFc^{TZPFV(M6nRo*oT9>5?T&l1W zO0Fia!LKBKIq}WXBNNa=pdA~j4e@W+_z!FRJt%PGMl%s(zy$f(d6-&7s6l}8&baki zy+;W29EMnc9l&geTJx#u00)p7-o9}bX5suORQx4@xB8UkSKySjYR^}HfRbIn{9L60*t_i(! zG8+p_NQ<}{w1(qqkh6B@vsg7`7)=JXDv4KpAi-;zw)DLVIq;2&>omzplnD2=6?oYA zO|gm?2rhTMJKfW~RPfSk!rg40q1@b%1~)VL#`)`~Q`dNmLfP^bIv;u%h6HrL7$j*^ z&;dfecC_UslAw47^57{4M!)p=ulmx_Sr`_!gxkTqK84A6&%!jdoQ#!K!lIaS=b|IN zp2e>NF*zXJbg}Hxt&bJ>Q?s}E@c2z_>DGB!_T9U!#5My_Xq(T61yuP6q_|_jH}IR* zNR`JQv|rq9H7lSqTqfkDA>z>FcaqO1sn$BNvA%C+mcNNF1>+C4uE2@xP5c^LX$8LQ zN1veYbo?xWn6hsU$C3I$A%P*1DY4+}-m~Q)zM7?c+sLH!6LiK5* zOXb&z>O_yzFd~W{>MO<(KW`vDR92rhiqjNM|4B7|GC5nGyH{zXU9s7J*zVHKb)^!; zf+c7!#O(nbBW_izzkubT-l~fD|PS^{WRHE?0SnvJr30_mz4YLxUa3$T%Mb|K^_@1 zK?Uq^EQEg02MP1;vgSP)g$2IZEieE^0~~sFqB)d<{2I!^PEsW0c6%)9hn_%OYG4Cd|-qQw?0E zhD#*e9~f%jcN~&5VoDvvs|c`tsy$|}b%{buXF@%Vc67LhCb&J#okSsM8qmUY;AE~t3UwH6t749Y@ z<*`*5z29fXiinIvSX^bFKt{945gBo2Snq9j{T7*5L}bR8%wF~cW}cZC&J|@cd)luu z^Mi;?%Vb_{|H#ZxcxJJ4DoM9n?L%h&@XQP+^D283Gh@RuQ=H5m_CjRdxc#m$gA$!g zMt4ygj0WS>>8bV@Pfu~?i@f7<L zNU#!Ni__I296P5gpYK{ZeyfV_2ABkch9$$_hUT0XnT|QeoyunrRIm?R?-DE~!3IsR z6vrMxf0?fdUc;;t1S}cpM8fPv7%_2rV^((ctY{xD(bW0&@Fdk!*C8F0s{n7t<4oBx z$f1O;YDdJ(CIFxVhc`^(*qcBOkT$odw&~eJNyn0mL5L8}!Q>qIWxQ#cxL`Tk=Dxe_H^0ZtN-_lIB0cJ-?SYp|F(A?v|1R6^+f&v!DQYY z%KdPOTc|OH5+6d5;5c%d-7oGOJxdD4D!U)*uIy$>*zH^_I1^7M2c(ncn1J1|D*WG9 z;|2+il0b#O**@YD+$b@c;9^a{lK+E%$pQHsD;V^T61JYO*(-#LXLkZP1@;n9~n9~JiU~EE)*IYxT z_)dG}k7l&Wm2KQIhWG2dshWb`g_$(en8f64DZ5Px1C#u^SeQw8(;>%AomI{49l>I@ zLk&h77{X~#q-w*W<-4Fg_$RBKQfIid)rM?;)u=<;!%P`wOkr}i{Culp3TLVRqbZpj zkdJgRj*~es2^Oex(Ex2!0m>k0Tv%Iq!{V3T#-oEjWIgO5%&ZD`8Q10g(j92Mh5Mcp1jH_QF=`x2{lG!%k!!z?%A6UEW2I*=8&vKQMB|R%;6bTs1PRa z7$Yx}vt=q4;`Lc6Sr>C!I^SIUGC3ea++u!R%sCs3HfJ0r=U}fk(CmVrtwc3ejxtn? ziEQz?7@7DxtR+VpDkcZy+i{LXS-O}*m1n4!oFi|!#d38qXHXfTNb%$h)3c@2Ek{Aa zSe-#u=`01hm=iarFvg&jXP^p_jz8`W0b^xfMAjjl#pW9)o7BjZ#PG1E{9+}kX~Hd1 zeS<%+qi^h|xw9sw1Tjjev)o#=NrP_@F6K3x%MkO6bFO79nVkDxNqtZB| z5|eMqkq6y!6LmR9rm?1Nn4B%SZm}X=%n1WWB_;>tQe6y^sG;|x0(-(?tL<|>S2*@gj4U%TkTD#cMab4)R5=wC{>c-nGe?=1wLIDgX%!yJ>bR$wj&2%c8h}***;-zXpU=ytZEjkE)ydm#S zIhL!3yma&gS@5G;er1`kaKFohJCk!{^=L(3XI<6){a5S4mR!q~jGxqU>Q>!r83Pj~ z{uVp=h?Nq@K76-q{l?BbVs&iCxSMGD$U1;$O9KrK>(`;WJU7mM!l^b%a=x+GA3-$g zYI@$kQQ7p&C?{^zcfmWTfrd_RMfR*Le@YxY=dtJcWGTe`Z8X_ptvgy|DUP;s+xnw` z!xemjx{ND|DcK+18gUIaO$3s_6lmg~C$e_kBEiq*cI3cHUk z#BzDATjq<1GL|m$9LscZ%e;XyPJ>>ih6m1$cEAeUCdpQF-`)7b8|Dh-etnyJK}Xf; zSQHKF3^)_{&iGQC!qFd@RXt6g&QIcj3Hjn?d*p9ctF{c)d!#vV(B+on553&F5=VSg z2G8`_&;Dk$w5sfPeuD~Y@>~_v-JYt)92H(k4p-qDbVV!)7B+^5tK2d(Bg(w3%VeR9 z&{%-ufSH8uaWdz46pz0OYwK!TyzmJWuzx`eLed>4kJ$Z!d_e!?@IM=7!TZa2> zrzpSE8b$csFQUx7x=cLEIDW5H-I{(Mg{}Io7%oI;y*jB4q~AsIx4s{IVSD8_i$*rL zx-Y`yfNUDB3@**|r-%1(`}<>7>(JG$aKB8p?2Y9J1OItC#X!y;mns|gy7x)M=h}4= zs3^%FZ4v`#s@w#N5I9(xG=Z}LN4(CL+hM@mN6R4=!jILwCTfGL>&>v$z{x+ul&uhh zUtyQB(e>@s9ix**lVY0e#|>LBZ^R$EjW***jmCeVo?0z9tKpr%ch0m-#wxf*$A#r^ zFl3?OBx$sr_=lA|hy?e^okL%27gD$Ru2>XpGY96H624J)Ah}Z>#8n z(%900G1&<6f?ntB@860}PPz`aI++?jFLQ2_UX?`+apyHjZdzu){)ct(rHRaKSvoXs zUjEZf<}LR_8DHu3O-g<9CN-H=V-+=oYNgru@cK^qxu^ZxA6E0LA8!rIYHFv(4MpN_ z*t$AvOU#iC0G&4}H5*Bt*$-l|!W3aoc~5Om>QvmE3%BP2!W1vnFuNhfO5CHAB_r*} zPgt$4pcvDoI!md&m1=LI%IX$Z1^$$CL)9sZDyn(GkdgNO6IPp^tav}9mIb=*4%SuG zcC*?lT`lZPSBz1Zu{PcA@u$_kNf#6_XSxiNlWI@?(`wuHbdKqDMX|U5u6zsbWcqu1 zf#mCGAK4P!`l{PooU0u!$G&vpxi{k3AjLyv`T0wn@G|{fSkt8QHsRB~CbzyRLDhX$ z*F{KH!mxtJu>Tg9C}VFPGkWG$da-3k*nbe9x;V>Mu#ANQGmnH3fd7Ks|ALxDuSK0`X{Uy!INYQNl;-+V8NYV?DeI!d^RZqB)&Q=KvixbX z*uMOfb>aDQlT<3cTK}ss)eehd#2iPg||5hwQ@B z*5wKNZ&F_M`e*8);nHxoz4o-#y7h9-js~KG!Gl6L=hMz@070yz4YPkgZMDrf`U1X* zS0O*+XWqT>r8TAXb<}s6VBsw~c)E3${Dt)yK=|>06C>z(vo{y@8G(8)*nu-va--rz zL=f-uQSCTsw8?(xjMcvPz9GsiC?7;?aQe^u`j`)007Zj2@}65DW!9%L)mVtZM?E-& z$jG(7KVw~LwXx%CtkzKhyf1i%zdVdJ`F-(*sDa(&=2;y9iHUk}ee# z0})2a=@%k)YU`;ux`_WS!$0=_v31>nHD2#O_hbk{5|T)W47mt`ASDQbAc(rrgxI4g zm)eaTt3r|3;R&T;6s=vOwkTD#)mAN9tz$>6*uT$n&V6sf_xI0z&pqRLKF>J&yyx|J zfj-VeVK0DwS#fIf!W810T3mUEzk%OvFD6lO=D{@KrO7Wiy{1yL7pvN)sj^VB8~YfK ziL200FH99Z9X}v4k6wbd$(;gTg4M=i)aa$Dg6~(w-e*;64_M)j7c#vx`J3j^B4jqz zqFpad6@80-koW7|D(_UCw-ouj0^uLssLm@>NQt>_?-MS!oBF>pRTDLL(z`cs$eOhK zm8q(GW~%}Y`O8sy{>s$Ky}m8-`LLUx$bm=6@){mqq!p#`^WT<~#m}Ew(jI<((~_>^ zS#5Mn!?zi(Ibv$pq1P_=IGuw-g zT%>_nynIzu)muhku_1_%y`ykzmC0WmX+hiHni{#*fy1_!2Y#V9Z%q-duVB0Oa`G=! z_noP?sVZf^!=6W>s_7~(OfdIomwpNoaI05a zI)fR!EnxmEQP%Txv-gzWv-SMF!q2?DA+oqa^^wzXRIvU}!^&9k4iC0bhGNWm2tP7& z>in0YeCr0-8PFfx90|Q!tT|Ak8rp*!*U7rFbz$2SvxyO?s{`q|_yWsG`FU{+`%X%y zcht`$f<=v=X@*GziqkQ)!6bsr$|{&ff>wKr%yzZ4q;0tZu}jpGZguHDlPD+f2`wKX zB3%E1)!NJcho~L@Tc!SmAEKG~7uZkzdvZ|sc5!CzG`YdzE=}G)NH>Hi=VzW#po8Mq zxa=L2zoTeWgTFl}yEIi3AfCQDe2f3il;J2U#{b$xDf)Jg z>S{E|OO_Y`fj__PG#htl%Uj5SNmXai%v*{7b?h`F*%Eru!UM~mur*$EBqt{kDlAQ? znv*C~iocyM2j)|_#}xLppdL=bUwCY#aZaLQ#Kp!M!@z24rke`R7KLE~Li{;!`4l;9 z7;Z9!W-aJ4D42+zF}H4wDacursXdbOrs}-)t(TA!l_r7*GA&GKJ+PvPa6Vv+DI8?k zEi}Ygg!m8UvLQy<%_A4oVH&lfeBcWne8WuCaPg@k)ZF*HbU8aI@BcF=w=H`4?W zfBE1SApN0`s8*K0?jbKWETESRO*cg@drNOX*k|x2#j$}kO`}X>l%G>gSJacpO`7Q- zS5d;L3{#!#DyjwX7dNDnjp{Juw~n-xg*@`u8#?PMg2!iVga$sJIb+N$Hp)^~Q-7T; zlUYoA14ZCoF@$$dzzS&5kdU%3K>?v0O%ka2S)YyC9N$g%9ZA?lNhMIbox3*@Z(FmRaBJqnTm9X)WGVh z6M0T4CsAoPXwb5b(baIOiq??6a1+5!t{lp819$%LguGictQ7& zKX^RWPWD12++qwcUNv6HEQY;!!>hAYt(fpLB~olL5mwk2qaSoT2U2NlF;Ug&zXM>l zp_nK?{#S%hN!jta9fo!sgabxJI2+E~zDF{ajxuA+rEZrkkA@5PBcQoLkA_10N;H21 zLavO|U^&8S`zi$Y5AyRo7*MzJ@Go0qfQwHYWaAo8UWU238AbH;I20lNfQ0M-YDnU) zLA^w0V3PqFOq#DbUnj>Ir88v}7a{e|V0}RwWT2stt<3A!=Sm?;hrG;Y^C65bgB%>f z9prb<>1lCMrD*?fr6lh$E)Ep!hE^)ZUHCXP$$_rAxx++dIW!5Oo_YHV@oUee9B@0{ zlNH)H;B=T@!j`{313SsFxYYo$x+(U8hH*6%daLS+%VZa&0Pd%6`-VWEtD4Rs&XYyX z9>VPN=^Euh4Xvkj+Bp`s8#VF}A)@jc_MkE}-b48GECf80j=h6mtSmO-1Z~6|rgnRu z4Xt}x*K*)wLwuE~op=hcioE?iAJgSqH8)fCtf^vpw44CK#Q$VDG%V;@Ai^^gX3 zob&diC{GdMQ+2h??RV%j9@WcG8s-VNf4WM8-s%a({l)M-gv)Q#qp5amplX=@1) z;k0!R7~U%ZOU~kuXGsxJhHqz-Lu)bXltgQWejVjH(``UKN(w*!k{Is68zby~8i~*Z zE>)=(%`YiJ;?)NL-_?AdL=R?v^grePT@cQ9|4=5LT}4rivQv#VsBW+6LWR9Vx!USG zei}+#KBdY` zX;)=K}RNd320+>NLM*+^IUEU(J@lmV< z+DO}46^yEQGbsp<99bV+_F}B(pau-?Y25T0bn+0EqbbBkl&_f#GHRq^O;s@Sdq97A z30hXo_h9W%yfGp}XtWO;Dwme{h%l$KJAnFxk0|4`l|%P@gl|X|LeK+W9ROr3TvagS znJgaBaujE*SW1+2<=b)P7u8)Tu9PV4%J-EiPe;@IUn6i3xrP}(|9vXlH19n6GIKZ>YBO_7 ztCq?Ct*qd20W=j=43%u$qKsa}!98sj^T=CnY~@UTpq!QWQTel?KR!m^bxK-pqN&(q z&(t$N6B6g?JYgyi7C>Ona0c5NV2v-3a)eeNcZ;zy5Qw3@NFLkZ6X^`k){1!p8m2)J zhtrDMDvA?gXtBR29mJo6kS2)4WA|MQd@(SAKqT`!a+@yri*i1hU)ws*44udgpqxd; z%cAq_^0l5jv@VOeL!%!+xMx{W!=Eq3l;ta_3O~wfyMX-&m&=v3p)7{NfB4XuvZ73o z((18LrB!au3pT)+n?cVlK$H#S`wQhv?ff&+i*1+5!3Wcj4O2xWR@>((YFB@YV8S9I{XZW$>@5p@TJEAm`cpu1Q5joMOmjI z9I75D%9L$~kgnsCTk_pLX<9Md9Ld_$Cs2fhh=mvmCxN`JwQmjCtf@L59~hI5{-yPS zs62bKSiA0N#W_QY&hUgYZ2gz+AVcX1whU)L-D=et?s0|@R3S)&lx}KE&*bzZozC5` ztVf?B-N!|x4{KnJ)oE8b%|wflR^|k0=KO-4HBzUaMisyKuf2++_7=XUYWVW2sNq)R=^%f6Fa7pimHs8C=Vo&{y_f#0PVdF(HotO% z4uqUY{$}AfzC)%mS?0k>C%CG+BF(l)Ami5Z#3;pVy#%^?KfTg>v^#6sPksk&n=f)} zFH8QVjN*YX%mGz!^WB9_eS02r10PPqiR)>d^@4=F@x6`LAv>>q{}j|i?j0rPH0EXV zN^Y#>nj5N#@%wuDu269$IA=f@oVPVbP@VK;q32h zs+eFWJoY`p8*eLB#4=&!)^T`&wBL2;fp?VbO6b8#XsVeYp#b!T%pnw~CAMKL$=ct} zrj(71UN~*ZY);C*D7^ya2vd1arDTw8%$1BXuwoR;^XE0nsem!pR=Qk4n8)+|zj9Zg zYFj5~;x!-)Sq7sq((~yQg!XWbEL)DDoC9y@Azm*P@}eQ%vMh(&a#%PAE=@qZUeHWK zi0|H%3AP;7G?%G}Z%3&WMd2X6TvXQ7$!VM6ea6VR3nPBrexp-$V}mFLSIdcK^b03y|z zj5#SZo6He!f2Zuq@XB-8OGMmhrEPw@?;Jwvl+>Lvs#ooS+|w@^wP4#yc2@VaFm$5* zitJRc;+}yU=}@2ZaM34Ajn-r2HC;cne|?W^@UN!GqZaBH@qee2vetR3UqzG+=4+B= zcQEDdtO7QAb*CF=?xEKp%rvTs2(0@AOZI#F!vL7b^wDb~apoj>|4M!@-5-zvm|G#+ zBqdy)xI$;Dh|t3GN`mVV8P$zfjY^SU7-sDQRzQih!bCZz798prCW1?rLx=@k2q0Kc zG+X3#nh}Oc`J8M=R^nnHu#FrC$t7RXfiU4U9$R^)2Kn21*5gnG@=n!x8P8z3;xd3{ z>x2pU2}9&`PDtT|IP*x5=Ildd3dhFk*ul2gFJw2wZb`BF>v$^$Yn)ri7Sz6~s6KuK z_U9nvVEyQ;AHDRWGalfOYz*-3E>i=%{x)I0kXLj>iY;QO{8dM!+9HO?9UP%IwQO;N zZFdu};(7NHt*4VCCN@KioDJ1o_6x#D6~Y5G$)E3x`Q~dl?Z9DfMBm zn05-Z?(K)5hk<%5a?KwFfiFTehM2VgtdcH!clRV5cLfn@6D~@OA5es=v~B`=BC`%X zKcyUvPbg?3`rvvQpa`->43ZzA-0fq4ViY#p3-3ZJ2CzXh$=FH7M3z&U!EXfKKnk={;2Xp!d?3>GXP>ZsByg8ZJs#R87_p zomK>CXp>5P&<+fg@$+eH4G|K=cPq$J-nuE{tyF6aD8Vv2AguiJ9Ocvy!KK$ufr7^H z7QrBEluqBo=_}6Bs~W=JXBg6v7-bFDi9Ar2gQ;pw%zqkAAxlkB#VL3R8m#d(g-=K! zgur1dGTj}(=uCHq8(mKhm;CoE?LblQv)EC4e+jFWY)cP7qfFLfMPm=LqbFdisg2Bu zh^D|=BEqlQq5@l)sYthPW%jQn0-EzyCiWeI@Iy?kA$XoRTjs{Z{|%7q$4h-&^r zqG9wrtQGUyZy0%d-7T+9?#V3V_$opK==?+RZ+(O)S9mWx4-I7d?sN%%9l!K+p*Int zl4E-WDt#nsIR+un9f2BmJQR#{Y{Z&E(_PW6FbmrbdU!i|RHr9ec~k3%E01z`wm+D5|yycUAP(;$KQ_Q9ih7LlzJRYrQ;R z8HRvcwH)qN)KY$iY`bcUpw_BT12`UP2KJ64JD|Qr=^-MzEeDL7Fb_rt3fU{-EjCCM z38_5Lm?)|AnWspL?Bwo3R)FJJo3|>oA_MQuJRU?JJUoB0J)$y}Zha$VTqzm*M^A**sD?%JA7IUGbx}v({ zQ#TiyURTt1+=IZux)5y&0x#;~>_Trhn?!kR%RIP1#d;#Re2lXKKN7;k?`P2JKplI( z?1&QT*y9sg)<}3qJz+POPl_r!EXpNFpJ-L|#(Ao@FJd6Mj)5W9fCyFqu+ac!`|1gE zz{|RPIy}al3=N{8WUG10`A$ldY8@BU7r|9KYw|E&4;YU}A#A*oILBEm9iydqSqcv0RWy>xt{)s;6VR>2WR)fZ*_@*E+baltI#qVWW|Wr?DwEA@qctt~}9 zkVchm0Plr|jnu?!qTuRwtS5u+>-xeRv?o#@bm!GXy*$R!_{jwDg9F~D=qS{^(nVb8 zvnXM9d|cRtGNNFHvxRMD=+7`eg9q-462U>6g)&1lXy_x2F$l?H$gC`osw_Yr4TMYW z-kL(b0TiWNco>fLPF3E;F*elru7iU-3qOo&Ak1a^*U<(@%{M?b zH$kx6>Y(IllSntf!*Nt07jkKYTJi}3VF-9uEo8I7Ypx3WQA2t(0@k7^hj!a)w?Thq zS01GnHA0h?<6?Ie7YJc%8d{9^F3I+~r#wwjfSXc66Ey4U-#m8pCZd`sSCjTM!B&ZC z#~LH{&n6;7=kdY6!c9dvkDjlUEHAOVnT{62MA^-R7qx9FTpTMpqETxKaqbER&bddlUmn_Ex9hW`-nJU0kSXGf1NHY{tKV&CnvhexW3pPg(fq_>+SR?QI6A zQxJH;fmR57)Et502n=Zs@baBAx-zFkt2!Vw8bOoYRvNt1^y}u zsOI1Z1vL@g^sc#Z@f)G3|b@@ns+N( zm6=8$=b9D}PL+$pzq2jia)cduxLkM~y={R3TGzJ}94pX$yrr)E{O1iV#MAA&H%cN{ z@{)sYo4Jdy$Voar(K?tL2X7d*NJ~iC6LTU+%CkFNWq7?_Njd@rl%&^b$fv?PkjM1# zvV<4 zHq;^7v6jjMuhY_IAT_R)a1nX0Xi6(cx91i8#Lo$@=q*2EUQxZ)!t5FF%4WYLmTD8s zI;gb>Hoc}ft%X-1B}a)@w63)X@mv2=Wz9#fiqt_7*;<4bQvcq)qrf;(UCaz6OPnZO zNVOg7-_ejbVb(dmd`FApM2N=;>~sQh?-mMjo~|^mc}hp~UeMh*fb8&sDz?G1%nSOI zpV#teX&Yho*okY%mD9yB=+ARQccD zP~69&Mj`cQ(HlzpSX2+GR3YEV9E=fNOYLMzsMt4j;bRD;N|k*>rnVxaur*f+WokxM z+rq`FJts?B;QsF!W$<(RGdhB&+vsP8i}~vAAA6(hVhK7v(W(x7{rid{Eux&cCbk73 z*I>I`DTZ9J$ge!iS9w@~T62|uKegNGU)8=TY6D);W(%ZLe?EFew=JSN&fWRNi!$0u zf4`*q@eoL5*zuBj$HUDWv7-koEv7l~*bMsh32loP5n|pGx*HF9Iy|9@?L@tzWpJrG z?13s1s+wpYUO=_Tr;lxBiexi=^@4Cfvz+6o zX_^Wfjdw^At%_Rl7v%8?#8H1PY-sKi#8K)*jQvw9i3vfg;CZ+*XEB zhxWCT|Hi=+@&I&0X6b2HRtE+JM<+#bMDZ-&Van=jt#Op$QG7M|8<7O zNB*re9&Xoo1Z$j6R?NIZ;awm=C0&jM*bm1}RL9=rmWT9t7tyNKFSl*>Na<-yNmQ0~ z#gIA;2GVcJ;R<4e^)ZfYFyMt+xfuIHsOH;#!~>aCYvRLY;$<&QHPNchVLf?3mAe9K zG;b(ns5`Fp@<6iT9qn(EwJWeb!sjtymV9Na@?##*imp($`qT6Q{oWPc@f#KGW_ZV= z`&6|XbgeQRzE4TrpleU8lmXuNA1PgDm?*ag23SkG!8-lgas@Rb2xG^B^&D;albZV%vBIeOluy*P> zp;&&tyh&;N+;@|5dIED6z6+u}TAkLZe21R&6y?ef|3hJBq#85N)fMIpCTTxSC3HB*xQPeiyrUAV~s1I+;WADRxKX+z{R(&q$Hm&U?f;Ms7_Ad+a*;#7YI(*gE+Hu(HU<*KMj(N7*L-OA9{}{{9!SUjWtd%u=h4 z=U@ug{p)n*Gf~!erY^_!T&3)(%KQFHF1@jj{{b$QcKsh}*c&7M2+#(uHq@gxUJY=# zPUCuu0FUd}Y&i63#D8cVQsWO@Qu^U}pVkl0KNOBD$PX{Wn}NI_Wh}Gl1*tHL9HYtQ z!&79P{~^CV{|is0ow!NyeMIRB!C(n^_15DNgLewBVqz?J=>?OBczOR%n$riMPyA^E ztq!Yoze)T1KzW-lD&_G6Nh^;>;|laIf70_lP@Ywn%SWfm|MxeASw*?=A1F_y?NT1j zYjklPX5e+f{KbapvN-qwam95CaU2l48i@64aB=PAl|K|xNR+@58T!%^CB(~JIvvxA z;SJC-#o5_)!J>Z`-9Gc`TspVU-&{~u;i-kT3J-FXfLs5dB7GrXq9&IwpgNLw?JsK7 zSCotVKtPqYTGbC0Fu4O*TEWt`oHawfIHCLKlf%l&-6(Hk9av*N8`{fZ)lggL4`g?)A}h0 zqEX<1s8%nJdKB1E$gi5#3_TYN;7u>A(`hn{U9TT1eBWHB37?CQk8Yn;vh#pR%g$Xo zn?Sz1;_RSa6fV&8DkROX)1}WvP~l7zg=ei_L#F;BxM(NjhsM!{ELKvK;!VwX8KI*S zt?C%o;cL!xBg|Bi`u7*b%a>s0I67>XCDM>36s43bD{Zo@RI(hrtaz|2x=B_<+gzhF z{r}evD$V^GxepLQ?p=RVV27{91Mg<3S*Pndg)rnYbsoUoFFwaG>T>y@RC%92$#vlWf>LRh{-EXq(Fj)nZD_C&4IC)S6}@-S zP~dUB+^}h&aPc^-V-v0FR6^1pbQpQduRN_Z7h~64tbuA5@+-}qvuTcxP+4T6CX)|R zk-K)48V&kikSYznKXwo__wbYg>H4kG+*Pf)t4ed*F3_)opt)HWY?@2uO_$)S^kxu- z_5)5)@L*9=Ps}G>p!$QMtN@+$18-dOI}JzbM~_b`u@dZJB_X7|u`tSg=#7e-<##$c z7%;yhevtr!g3jKoAkCvZMn0ZjCE2P!HyaVMv#H?7qyG(&YF?eZ%qQKmH zxx(ybo6xzbv24k6^!ZSLzJJyRTAgSZf0>pJ1?XeP73lt8r9lriK;Jk^e+&iaR9!CL z;HtdKW%B*ve+{nEj$ESlU%)GUKpUv4)3`6-l~;dL{84Gb)KHspuo&pEUB_ZYlT{ge zi7p_oIrErOMT%V&BMnsFBfs*>2sN7vh=7b1*-TT($Ec{Cx=3wP{uiT4n{$z7q(F1m zjw+0KOO@uLY?|W}Me*|6Gjurxnj3${ra5(x+w&q78wRiJdX#DmGraPPGt_z*lvP}3 z%?F~2WL=;s!~PeDO6zoi4h=&ixaL;{KSrG zp_;x#si(hfRNQEUa4A|x6NNof6sxEdWeQJQv`czy#H5^vNiR(5YKHIkf`U)_Xs6v9 zQI*nNkd%(ELFmL8duiDSQM#(?eO{k*#vnZ+ zKgkiIycl$n+(%*y_}142wt%_Yvu^=+87X{=@|;t>dbac|jUS2Ks(Xi(26?9;IpIbqlJ zUZh(sYm74jZgceU1$`rULmUak!ODx+O}DxtPX~E#cER)jo&F=I%hjBIT&K&NXjf>? zaaf^#4l=Nzx*=LksiU|OR8%{x(P~Y22Hza74&w11JqFo$bMa?o&*h8AZL|pdDE_zt z3rQvS)PKQyF*NGm@7;bU3hw=r0cZ*q*H#)!(}eU90+^cARDvmv2AN#QoD zpcWe9TqtV^r%9|yN(=X97EBM&=|6J1zt+-w>2Gmt66J~0S&N#-ntD2uTnzOYs(e-7 z)gjU9hD_2Al?ZykYf5}atxbBIxWZWG6a}V=pdxJ!Dm^yGZduDzQC9dIC2Oh(82{{7 zn_M^qc4U>oFLy>k%;hwu-IIW6G4gbfr{7B#I{j--&&Rw@=aJbB@*%&&hprN>xx89Z zR#iK49xHsspr0sktS~3nHNd#1{R`_SS~I~-9)x>CxQIk+8vfdZ<86ESojpZ@B*w)% z5L-mfMKoS;K$%dS01D!RWcro}bw9-Fv7&5^NUq&SWDWhO%n#<_|IQ)Z6_Ww~XVD%e zYy(@I_?T3Xyu5*)jukarU1q<*EkmM z9d){V9+~f;?Q5&%Nn!osC^*xGiK2AjL)uUNm`i6Sia^hdLkbgwQYVzk9wpP4qI}if z$c0XhCm*`K<;Gf0K<2#;=xWgF)HaG7`;|WVQY4CV2kHASMUC;x4%(%h#8OUx1X@b^ zN=vEF+WndVDNo8?VZr#InrHn4eS%2`;oLuX}{EswAmybQ!spc(oB z&&O{3C6tma>B%Hf(YNPMc4_A$U!s)>$h*H#tu#@&WZO;b#2-h&VY!fyGq=;=Gz?(w z9H7iJ3^5KJP{kAV^=IvWp(98wzkC-eG2e|5g_;ue|J{u-!O4-_CyOwT#s&d(>E7AH z)OxZA^e+bjFyCPC)IOPlkQ#zV9-t|caoYH|99lP7_y(wJ~#>Ieq($rf;DIZ%Elj}6HK|-7JBrRs8mQ1d~=Y3r-EP{7N4P{RJ)QUAf%SR zd+nnxQ$g_cUPVx=#ES_|KS-HVL9qD`v}39WDzQ@MfM2NtJs%x(p67qZw+b8EU8ZeU z4EQ3`0^=OM30E#eIW<%~O{P6KW_KEzx5!!sH6?)?GtBvkx=j=1+)}YNs;@!I5j14E z@Q%wtw{n|Tss3DfM${3?pEyhqG#C4iKVT1fbKE72OG&F9rjX8{>-81bTr^qw^Gk^4Eh!3 zrn_lOIxzpSt03kbjJaP9ZA}M}3LEKCIxtVtS%7&k`;%7=70D2R=1;dMsC*llt|QS1 zDf5p)0R=Z#!_8H2OTNb`Z#_t5@27DYSkCLR!7$Eg7)9MtcMi&RR(I5KRJ`1|(Hd-F7$GIlLx1LwNYKF*qo7<}$u3 z`<&@O0Jiu#&k#k$g7svb0j0XK7N+c@tQpY4dH5A7L8jd+vJ9`dyTiuIfr2vOqTKFV z2b(V4o^F3zDZYr#;H4UFXfd?^TXHv8*hrdB)f^ z&)5VyMHXmMY>WpSk?Ehr(uwz@WxxaUstU zyWWno-Z~?*(wm2tMZK3KpKiC=L}~0QbNO-)EuIA~4cAi6Ea*znuC|AAL0gR7NS?C| z2b{N^s>}w|s+x#RA!}G6yLMCZY!Dg#Jx!ersAsnswpWK=l6TXt*--r!cnzS&+0|e% z)bJ|`D7ZlyZje&_r<#n7(`kmAyNjyL5#=J*VP#Uc4!lS6fdi@|ma?!NgcIv)(JtPd z_X)Pu-171^R>OhD%h{;8z6eRjZM1t1q+GJKpsJ2A@5;OA33!Wt*O2dAs7jH&u#;lv zLbmdn+Elw+Wf*Q%AC#1A;aWD{`L@XOTM8O{9c!`IPTDgU^aIw=^|{dE7@Y+MAISo^ z?WFNuj(*CeD#^}R83+0VyDpOqT@KkoZRSCOqVI9o!xCiepeggfAz?LrKMx!>|6thZ zG`~F5WCvZHCj!gPS*vK9Su^=#!cbPvsvpQV6U3u+NuyRU@e@B%d?tubTSdb%LHys% z2JzXGkv!r@TAe8ZeGh-Hh=HZ>B$)?r2@eM%U>p6fE>3m6{K_2fwBI^FcSr zPB)6Dk(;;kroLYVu4&b!gQgx~ryj}FOQVP~fkm4@@5*o8RL}$~S%${j=?~`hW+j;x zh~U^xItxq?%DnC>m*Pf@UnoK&#*h3)tcI)yw}e%q?ChhNeZnT{w*bOD*jSKZ7Bd{P zjaDoG!#XSJ7clh9)LFn#9qul_jb1E((o)tax-oXTu}pX7MhYj;4SkPp2GiZPmHHCs z4p~7n2y{<`p>A)35$nr;_6-5yLg3YnD*Bb5x4y->LLTv%6-NitLU z^ap1$m3Qf*>8U>Dxu1yM3*peg~%8Vl!Q2x(ik+y8Z2R2Q%GGYpM9xpxa6p zvZ+6Tv0vOoExrcbc}wZ@uR%BWdxNfI^-tVH-5Uv?$~L(g$891Ke&>nt!$61Rp=H#pPg znU1~zT<@F87%WCZ&@?;wsZ74xchqAE$mgxGsR_a*SYw#{F;_%u zY@qu~Fi@VbOi^2GZ_Kk1%4N$fSVN)TfMU3&Xj7J=xOYAE{00<9EvCuez&00F8@5pg z*!rxeAHRXkw`VKbU39}eZJoIXLh|%#dcbu18HE(mC`S5x9aUTkx?8@c)=Pm@QCqQ& z#wPEaaL4K_P_$ZO zyS$c~WdnDp=9Fy5ZDrg|R#9p;a9{nlpoSwEcVCPsyd6u?@oWsm$}ghJ*`kuGBI&)> znbyy6^sUUcYa^4tQ8KKw%dp0fVKk^J8E}%7M`TBo3|^X-P4|k|vhQi^GRV+%AuU@5 zXW6yV(0wF3OY85Qsca*gv$U0qmMDh(?V=23QMRt6BFiDl$3|IYf^Zh)_wT6ba_lNl zmNDvxrXe$gk0Z|D?Xp3=+$m3gdK3PasR?gK{&Q(^fX%tds2xaj5S5fzG z0e;MU1H46nkF(gpD+Zq{4_0#xkm9)p9{G(?N4aaEl4_(~DxMOn`h7Z^9()U_`ehfC zN^yVwEmd3vskUTN>s64-LuY|hYTH6pNlFSrMU$k0My*>*NU zYQi!S1(YBjHbFd;ASK>o<-vk1UExeaLRb*KSCp%I57~JxtylxLJC@kw)@R;YuAuW^ z>zlPeu{~sO#gA|+{=*V-`wrs78HJQbxH6B+%ciZoOq|UTWUQP?YgAnK7 zCJ=(_o}TX>HxzVdu}z2|n-D=th%`j!*F(j?bGb9kslY;n+k{A#CuUQP@3{-q*`YfR zu9Lf!!?M?ff*QPzANgMQnJl95WZFF=i#-G94iGpkH&=nk5y4K6+?Dz2ZLRh)h zlbtLIo{MIO3+l?MI6u#(ifbWo^Gqdh7rVe*ZIwrK0dZxua4j%RSc}2Yvqc5vRV*iE zqg$<1P+qHSG>i7Hh0zx4?2uP2y;aSoN8sw4I!|$3Y!@q=#agh4Lf1j8@b`E;SqHK9 zE~TF9V6;&)Y4SSIy|B=52K7mVK1=!Bu@9YCC)|o`nadk-r(~I#^f$^Rk9a??E9wsv zZh@xzz1z~?dK2_foN{h%&Iibynn< zCA4CLC?At@1^WaLgx3JLbhPXRHSu18M2s~DdAEEK54~JxD9yXToA~B*`zmdU{4br{ zHexrVExMbH*ys!;YR^yHQ9E{{C{r)_q%(76^~#aT?O6j!P^fhW;=sEL!g`zJDwqtD zKh09g{F;8-C_=cJ8WB84AWrOsNAKD;Q)&U0WZ@Zz@Tra#_-B7HZ%*>=an_-9nndJEc zp3O5U5>L;-OhX@h>!aMXkOuxB0!{B|<_{ul{7>_2lDenez`7YMr*gGcm4_`i7z%;j z_@Q5keO7VJ@9B>qFMDOdFm}H-a6#=+1WG zE*#V76?5pJGaCRNWm4520bs)L8Ke81=QIF9c@I$u;Y{hhW7p?(h zPwdF@7@6}d+W8}z#icVpM3%-H56z@!NEUy6N&Y*4sgcfRU^+dIK1Q^d@g)txGxp95 zMFq(_xRDs6Y5`-)f}(+mANiPO%A->hrq^~%4uC3e&Y&wh-~r<_HJfLtIcd>(RB|Ug z;FpP1XD9HO?F`jjoZIG7-<`06lcwtgYTC10nQp)g%H9dOJ2Gstss-gJwm`GFbeZXz zCej@<7seSejA+FIH-(vl;5FbgI4^P%CMYHWiqe+V*_9cD&Z1{vAa0JO(t82EvCaZL=d#26Hk0D^VjLB$>8@k&`RkvX@K@GG38nhi zdZ*;IQvGSHHeldr)4Bt*>N=AS?8P>g-&jKyCzIO7@^nI2ony7@~ z(Sp_(H+X7Sec)8G?1MnAnv2aEd27LC{tTM74+6!f()xW6Xv0^AHPmshMl z7VL-LtU;;*@2@9X{y<`pO>`L>*<2=jDudeY2if#7^u>OVl~W9|>LBQ-4ElCI^nYZ$ zf*fYoe>m&^uPJnOKU$kqU5E!dhoL1Xc^#i3aL&Nwf1zzIzDy=CjZE_dl+>+z8q*kv zt37g9WP^sPE7z6C=`<~eMIKG-b6Dib1~zpISEF>gmct^CTX29yMye7yMu{90qea$b z3P4jw36D(&w8b`PD`jc8A)s-M(9n3#NJdPi=?4JqB-WbpCkv+;TIcC>@BpBd8b!Ab z09uO90?F0UROjjB_Y*9g0GB{h7zJwD($NShOZQ8ogr7vk1d~DAJ?*Ggogy$@xhpql z$q)l1_>tdLu9lZm72<4-7`1LCLTW$y;Uqfs6Hrf^R1kFzqxP9bt_Okow-FR}5U8u` zELhB-!~MmHRbkgSBvO1~-ErS!49gI^Zpa+AqerqW4p8Sgg2 zs1KT^axqxNCW-{F9|lW2rOMBY(ubR<<0Ykj2@NSs2-;prVj*sr;S8 zL5GBg_nV0Y@oi!)O#g~94?zpfhtrNj(83Cxg}s)OBfg?LhtLx}7)BmH z)K}rBINH+#*=--sxd{v#@}EANSUhguR0-h3qBn5u|pvma#&OrH^$SF!?;{z>v%eP80wfko*wYC|9C3#izw$A zJ6>rH;MBKPE~oL^Uf6E^MHKc89m%6bebtv76Rn1Vivg3)oD(H!)-S@P?5%OCcp^Gu zJ~YIWl}J8CRjZwhdqqF|f(z<;-J`3&h_)f>BPE$;tg||FXeXOC(WA}uW43Adez|EV zeSAce^K#QP*)c#8SMJFo<0$Qj=vu0EGnVcA8}$l5AgAyOZiPvdcSMBL4etKt-R=V@ zfiIh;8j1JdG|=!?phgs*$HNg&HYGI8?=Il(?=LCgS5di4@!_hftwc`vVtSr@1D*5j zyH8VT;jf~;Sd&T@e&xf6spNK4MEFLfD$#NOWf=$6nk{C(Iy{k*jzYg*4yM$jBDl`A zF@}DFFjhSrV-CS>`^wk20vrN2D3~Al)&7v&l|tu^iYjHs>cVKrol&xk2_jf$fr;}( zXL?)C(btuSVn54-6smU&HZC=W`WzF1g%Wu7GG_wKI3_~IGh5kb0;6D#SHVi%xMR%( zT$qhtvBww+ZOc_w3#;V2FSOnF@Hk4QH&mA5LP7mtVSJ4b@zBvUeApF5Xi6-xFNy>7NLErGc~MaGuRpV?I5~+3X)id)5PCU zl`5SUZd#nb#!%F0Q6WHyvrU*v%VNRqDpN5;GtWSAxCxK^w)~>3HvpU*CXIAuMrK-eS@^lC zJo3#KEWFK(BSz8c-$aFGO72#6q7jDNIJ#lY&<-1kxO|7b%vPP&Uu!}QT<{5(5@%u6 z4zYGcI5-uss=|GABqbn|t2atQ5gTaySy=V=p|s*GgkLd~em@JL`wXR0=kTmDls>`J z^WhLf_>nxkoG^mEIfs__6zw~Qch2Vy(bjx-&akH22r6;jaL#MPsS(s%X@VAm*IM$$ zxW-}x^wVOz=5eaTJ^SZHi0K|JJC7IH6~pesX+Po$f8ST3Zn}@|p2u`)@L(!_0k9(n zQ}YXe`+5+4$ z1Z%Q(r%i~9Oa6bLi4N;a?f!r;xmKEqr{`9yA3VceN&IQBJ=n$}<+_b`LEIuVcl_V^xeE$=^fw zNW3gsphwyj#qP&MgYtb(0Sq7DOb`FW^)F*U5zgneP04&n%X~=5+_(=lxCWWs`_Q0k zkoj_N`j($7deiTCdJgDq$ehD6zx|wou0!TF-Kp_)$n4RZ2I9ZA;PlTa^STJp?OG3I zd6t=9_eM?fp8(;k7AI?Mddw7=Ky{{Te@hii?Zswb+ki?~MqL{~2vO!u+& z-=cvC{*=1@4G6b;(fq$f{W|M)ro^^h9g#JY5uUi9fr+|l#2ry-SEp`Ox*vTkB%`CBJeC_X0# zf3e0u?-n_TPTmy$zRPQaOdj}#BNjta9t;(d{(VUNgBP>vnAzjJW^{|P*axhI<$*+M z@DFNw*`Cz%A6PyY-x>c$lrQ>g55*iEULGCzQTVv#ft^Jz??G4p0k%|~3|UOrQ7-T3VU+-ik*-KO!VtEjB>kqxm&K4Ley;xiiauPEz% zsGLHa54X6CPoVW+B-VGQGyI&^ou2-Sb=+Rv$^RCf^}AEkTfpbt{XN~SN~V#wpu7J% zFuqK6zRv0dp6&3#gAKQ!yPs;=kmP=E*PW+~N~XVVi4gA&!5<(gDQ~u;(h>-wyHP`a z`gfyV5(u7lrD^;;*_Ad)VGdc-RV%W2v|6H%{+}iKil5SRDJuJRhN6`9uI3}~mjCpk zy0@VVm!J<2l#=t}>GRv*{ICnn;^(n0wBu@Nw6gZ;? z&AE%0GcSLlrqMe9QZGyFL5LR<<-<;N3XJ@xc2bN~Kj@xTTGLR?K=B^raZgn7HlZce z%|HssyYgJ(WOuUM6JEs&R{V9{Y3Myv{D0fQ4oBpyCA9ILXe=^1(tr0*@e?{y<@=(Z zpKr%}e&}yMv1UVKa(Oprno!!&+avuLW+6PK;ZIA+E^TP}eRRVkIZxYebm~6rQn(F0 z#WVQRB%5b+;i2V>ab4Wgs-qAvhVrLPZ+4}64@5oRywlDO$}g<>rZLO8T`A)MOtYo* z2d1eYqvL4b1DIrS2l|VjBRi1GLzpJM166$}Dg{^Qp!nW(-pjA&{Su=;pIqRxw>07* z+I|IMVi#KSP}K3yI_1oRb~H9=0s(~JSOR`Z`qHLHfrqNH5l7VRmOpMNG&b}sP$m`K0yb2h$r z%+J1wcvlJH9xm}LdX6C^^8yG zKYo7p3Hd!1wJKeQojS;VXZ59q&BOSUuH(Y$$9}M1_gxYVdyK~54=6@yGbSI$N3u^6 z{rDI-rh0#XqmJ}$LAM`+|B!Z6>K6O+NxHh;vA_s^T$w7xfJKnM0)lNoV&oHO3$wOoEyu3 z6DaaIntfA=4>&iKGn>-j=iqqfW6I>`;g4y@b8uezF7aoM z#LL;%#UNynVe@clIIaaphl|-EQ|5-JIa5AUjPB=QX>9!oW1T589c{|nb`L3$jt4taV{!!|!!2{|*KX1^4*N{m{F>S!N!w2_sf>HJHmZ*psTfzJzj zc57|0NMjZcEmZxL2yVQt5e!i1T{?CTA$__h8XaDniNz}&7=R+mA`9!12KOWz_ajh< zoME9kufTmIwsZ5jTV!Y>y6_6z(^}EXS1?}JRuudiqlP-I3>0iBd8941e~oNjO=8-)B7d@&zybPTk331>YQW;7=Kxk_&O2uJx*Vv3bLL>DNoB^iiCCNTttw zFFi-6cSJf&qdxWg25wbMPY>Ogwbv+o9$Waj#$X8&p3{{qZ$yQH^N7ZI7Pp_fxPo#>FyiM?OkOPS}r93A>O!|Sjkz}>QKsF@^>gFo`+Fas6M{@4+$4&k{6lFG`ll=&9T(V-T! z>n$|Dqy^o0E4;kwfFw89d?`H_>Lj1mr^4?5CcXt#eTQqpc5v}ian$ymsPu_baWyQ6 zMo!J2%XE<^ut=ajQf;v=Mt0*ZRTi|XypF5IxwgoQI)G|l1i}>dP{vqJ$KGM=eey8n zz5}j4&F7bLEZ-oyx#19-Qo;U=@-?3P@WBw{n_WQ&V-#=GLN{3kP79kv%pc_#BCa=^ z|BYjaPnAdo_#Cp@eE1Xj{O9=>9V1+Wi@m{Ttk?cbB~6ayMNBiQXF}{gH;#?{nTDGj z%ZZyYw8-RGfwH=pd?~w|$(6D_OobaB-&^1kxO;L5NCTfokcH{s^BS zNvwraQaS3)${_i?B^45mfmNR!6})`QEtFOzFF={((yvwYVpte}dGdy>q(k(Ha13rJ zn<}kXw}KXI7TzIVo-f2LC4b=F0&{bA48*YPS=`C^vH-_9%C3%1^n-A$>GsUgAyF^a z7jH?q03y0Zk*A|$$wF%H;)|wK#nI7RwU}mw)nh+vwq|FRm)^ixWIN&Ha62AsY;?Yi zrBp`~U(k*pb-XP7Joo-nGAo^Xsa848ld?|Zkv-}^muvC z86J>ePHD%6>B24p7%_lRRBm=+<@sAmAakzv5H^CFy#0*6b%OclH>O{mfOBAD%5`!q zUHZ4X!T~S;_C;OeHIsI>aVv{&e^eC@6ZFPBd{hJSbu!Q zBGf>~0TDoebK5LkL>_&KEBA0i6z*8^uthpe)^~m-TjXL4;58*sV1+O0DrcX~t%JI>1t(k8uX7Ntf#?DzNGY434iLV+^sltxt=wO|n z``vlaT%z?HZ*Q(um6cU{36UM(!dLOslUi15Dfxm|7mmmhG^Vg)$oPFximNr&(8>%z zv&cf=&&mojqKB*KTvQJhAYT595KL(GFft^n45w7Ill93yx_606+fNXB$&NMJS;x*m<>B zQ#G|vo1eYXYwlE{W#%j4S)zz*-4Ptl<(WGcWhZSM_K`QOEjXTs^v8 z)G?xKY(2#db$Xnw`~_7t*kTfv(v<#LcmMmBV!v3ygRCKN#;MS~u}lrLMnaWrId^z|AqxKcgm)qtOIj3{cQhZAD0( za#&uMUb{J(y`nTppoY|O03nYyq=;hZ$tPE(j>Q~!iXo!mkB_u2(0yE5gzQ8eEjl+9IW zmpdqbsdE@#i;1E;?vCcLZq*g$n@l;sr%*G8FHiv2<+ZbYz~xYVs^{TY(YL5BaZh7G zw~~vHEMJ>OdBFG9d_>zl93#AjepCQY?q1+=s84S_&ry}o7@|7!$}qpy!o$fN z073C;7C{|Lzz|n!6`-8Ml>61?xBg1e+7ga#qI@XrECKS9bhbpRdPC2x4`FE{{L^!^^9R`W7uqL>>0x_48t574a2ixREkP^l31ZAH8P?(7CscA z5G9mD&Ziv9nVdSQR2Ly~$YHhr`}4W(``*^K|Ih1X*K=Qo_vd&W?(1}mSF=L-%rX3! zgF-)Upyy&D2|@-r420MWtZGDmRDh5j4WOwy3z_7}W>hB(B&XG+?qQJcN<)jJoS4jM z#)p)ns~)Z+$YBn0xQ%?FVE}CoQ#He0F$E3uM20TajBYXX?l`Ja5zsYkXgM^wwke-Z zj;O=F&{!)&fEhNrV^U(D2$T}tp$TQ(wS~}Ly*jaowFWb_)=l|*TCD4?hkjvdy-g0> zRK!j8#U@m-5(G(x6SE&+$Y$vH**@1T5eIcDL6Bb>6oKx`(8HQgUL`=+_t5G}fSzn} zSRcWu)`U+iqwkF;|H`UDpm05|K>$TnR`yy-Cs1p!pv znVz0pd0p1Xlq)X|og*qk->qkH;O5~-p7ngY4y?nq~ys(W< zjT50}Iwa=UBpyaF5h`2s9hoiqzFxNoy$eh)2Y{H(uHkACLyN0GqB$mu{Yj~YeB{|k z)J~7W(gB|{A@Q3}boBUQDkeXyhf`fNE<8MvPk`a|jjP{Sw{TQSg- zG$vci;IrY`&qM({qZ&<#0{E)h7H$5hwQh&xZBYQ94vzzPlmi}PgD-zB7udRs(pn4K91$KZO@{s|IjC1MYD+M>Ydq3E-2e0ep3>B8DHs;H^;_ zSC!Oo-HoJQ7`(U1f&n_KoP&0rcVgMdf6ud8kuY|ARgklZX zGgW9r48ZrrSvr^9*$*LkX$-)ZVJQoo^YGSq%QBnuZE-kpz~FsMNuzTwgZ~Ogil`3o zMG@4hI=~B{)^Ys#8`&*A1Ia_G1N?kd0Y~3$fhXJGw><&0ygI}U39njJFXs55mJ|oPtqndfHh`MP0^F}CcnpJ2g(KlGWer!S$}}q$ z;2+ko)FM~2Hb?T_Sb$H&q6)xQIN+;o@b_xq+5->3lTAsZ7C#2x3rA}10r=QT^r#2m zKUBBCWxMzDNS^8e_zoKRS%#844!RD8t`kI0saph3D+&uaBZwead7~z zY=g^w?d3?$iUar^EW-ethd@T>JSq`CF9+}$aR6V276Gncz`teirYL=Y!LNtW6@Z6y zH(9KEn}3Yst$?QWd`u@A3h55}UYq@nF#+^YO;9)=U4+7ZrZ5DqiUXkdabwE!Mo6nq1NFNHTfR14sbSD;sG0epKk zOYw4Lbq11G)&lrKEZP9Prvu){247z-fG#q)*OWB6SJSg`zp7f` zN4bHSgya|F0e%MSG62^O_+=aXYE>KtjR*KdQ__IXWbjHTeUZVBg;Lqt0B>M}%h8*i za5ijUtX4I|fcJI4``h3(0Y0iWz;~dzG`kCb zC{YLCX;_;B=UW``9X9x5Q32Gh4#4k376H#@@ChhAst&;0h0y#u0AFCT^fITo8Y1~H zN;Z83OL71oz~GzN5Apgv&*Q_Ro{kdRpGEJ=SIEtiURF+Foq-$Gs;g?m$C|SI$^c(R zF&^UURw#y7e7t5!_c0Z@pRcQGMtqG$H&7aE#6a$BCh|v>09svFHB~R-$Hls;v1*GS z(Fv+?#nM%Z2sMC(ngbtuIsroUC`Wk-5bDzi%hqx6a#_mW4IgM(Usa2%5DLEVo(*X8W_J_6WL#Vu z1!NX8NKu>Cs$yi23_ic8Tto$_OezCdE9)zqFu-&^My~wfM~qwpi;P@nN>rvEWC~l7 z=8JRj$aOWKF=NbunI++IfS(=uXw*w5&n{x zze#Y(7aKqosb%P$22jQOCQC1KpGgvuziObWdBz0`wSx||qc*j-~}BEy(X z-MA8amFZugF;2TqU##gcnoP+_$+8Cy+KZf+AiwS$df}KEjavdm|{~NjNkV;pZsAZ7X6F3J5iiD1x`bd3A-Ngl=vE zp+%^pk2QuO`eJcLUg`$_uOc`K-^?g)d4yb~kuJ5B6~Skq;Sn4ZDk4X}TSiz5bXW_r zS^E?~!WtK`6;aR_is)iU7?04*-`UCmR5J;Rm|224CqWT^hFV<6g%`OF93~SYG*0_kRh-porh|Lhh>G<|Df1N4?(E27&ggb!F zHGv|YFj;z;8zyd644^Vip@;`ci6UYgY95=~Lnt7MND@UPi6U+U7a_EP35^BPYfYhu z6s(7dA}0T@A~-5TzheqpGua7JS6LC$jUqTGRKy$l71TA@DBfW$0l(xh?+gG5Yh1)u zM07JKqHaxQMNYRmo7qyJd?QY5?<6-6@xIdJ%1*NbHIEFXR zm_nFOPUcb3iqHV+(LyyY^($Nv>nYQ^)3g?~ud)Ux@U6NN@beKlx^8u?(|0{~B6wRHoio$|9^cqF@&kT+6^E z0DKm}Ap`96Gh>i`yBxJi#qqgntyC%3txHt9m8#V?$YkLqI2SNww+*Ioke|2ul!qeq zBzO>e9+L4LI#9wOhm|=;4=oo!(_5+94c5Sfydo}FLm}k6x*FCTWUUbSd2I8J9=wYe zc~0#k-AZ|sH!y<jNJ<{Ah|F!7eoIa1yMWMP=$+6X==NDmv@tH~9s5AsKo3lLmOO zp{(V;5tV&kgD>Bi7qAm#H~#3Ioq4}hP+mz~%Fa{y!UncqpZzZ1tX5haysKZ@DXW&* zZt}0HDwg7_xV-wwk^z+8T15n2(HYH@5{({q- z<;7(SC4_y}WiZY{;pTNd>-H?17wXfZzSY>PZmDm+&H$yAZB(ODlM5i?eqC`CU2FsU zWt2cO(N=kK>KH&QgQXQNgXLA^-@SbMjU{+(?R~uv-U=f80f%0`9fdafKu_S5RFAKh zZ-a^E9TJQ6P*Y&76j*Ii(vY%5_cAF*u^S6m%S@6NNlSH0CkZKwO-di6e5k7zNm;YZ zw*q2LoagC}G+hEU>TX-rz1z&YBIOhlOfW%?2}YXWc@qpmfPMn6iBKAFcqJz@AQdKWa$l6OZ8$y-4U^yV51^+~ zVe%9H!Xr$cUc}^Ojma&;GFPAKPH;jH;Y-Cq#2ACC6*`d!;xlNeFc2DM+cRe(Cn57nrMRB zCa7V8NE3vapzJL=)&aXr24n1rRsh>n2BW{iU#IO`j}I;M^bF3_o%}Fg*-_PwtLo$( zE_sJLdDlwb;hFkg0S)M=>bMRU(DaU~y6fWtT7&1xIR$2i3^dJ6*LipY24c_A&5kO| z{}t-;ApD^d`$HdyRn#9gZ4`g_0z)jXuD6Y5Jcyh#HzzvPM04%mrH?w%mP>Kf|3Ysx(WCKZBDv!{T<>@5_c`8j zwKaQuiAaQU25fuEuV`emIM z=;~TFP@hdSunP=y>>f?&qMl9--^B)c|7EjlD$o@5=!Pic)gQyORvkVM_khfN$g`KP zzcE@0BtD?`7Ep3Jh7kTYMB+CG)9`fIZ0}u~ldj?_FSu*C?&%rH`{HFsnC|>EolIAq zYFyjE+t%)G&F4*Z(m6tr+&SusYnXwY4b-M9xV>|S26j~g0^9FkZV!&6<6Tv=KqXI8 zM&j$&*h#o=JEvugq^{jmtH9UgDQG0U#c3Vo>F7&znA7~_Deon!&>d-ewsE=cFH!gI zs#WF~c`E&q<**5mRQJUjrrF$-2=O5V2ZfUqNA<^lVB|H~K;j#Nv&#R)V$1o-?IR*%3WhQO$ z^kujffRVvuvP))U8YP3341MxeA^LtBeZgu*kFe3VFnX8!ZVK(;s>nBSv!0LZcdiQW z{h4>6Gl1!=y+xP2V7prp;I%ezgaE${e-gHnSVw#AQS%HH9UjJTGi9pIusxXJ>ffU5 z48ZNj8W75e78crYZ?9rL%i3@$4AJ>Vlp~A{6LqU<-i;s&gPPsU@_yO(O~YJ83AW~pYbdwDND_EhyOFm7)b_dibUzT(a?0 z(NaC_QorbW6w+JO46kVl0kLf+%$v*(m71Y{pl-cY)6N?(7mDvMwF~k^iH&c5UfjkP z_1@1c8*jCLtTjI@8~^&b*f@s{_eSHrVhH`&Tg9bxxLVZ2r=@zx{DWg+46?Z<%C>Me z@g-gTH!*Pw>d^;#1%ACkBm1Bt@3}&AIb3{&HX-ag?usD)+wxHdrDDieaxDwH$2*_N z?Pe7!>JJa2dUBm|{Gs_KYVweZD|wPPzRv%X9)CzxbIr#E1`nx<6+5O%%^8DQkDi8W zj#kgn#}BC*^`>EGFlwvsByiNb>o182%OmGGj_NU!K;_U%-2vFB|cBhjbD$1FO{%32I8w zg++_P<4_cp5+$2m$j?F17*q6~DWgnq8G%<1L{YEqF93nQK+d>dACsgmMNoVDHmsMV z^``Ll#X^3WWUL_=QTU66femnX+z7;Ng;;<-e?$elW?!QHkD#L;dWrr(7@BrTi~*g6 zjD#7_{y}klRdlKNpYsdGCU2P8i@Nqjd;R-G$tB&%NYH1k>GdG()rreRTL6&5*N>z6 zzz$((91+FG%Pl+H&>f2<@nL%;agDvH>lRDm`vZ`~W5ZiI1W7rCh5krBEQwE9Bgu!PyLz!y!?wWWw+;xvx1H?GZ6hya z_w)o)(n{l7XHb%z?7n`sSQ6jZfg~0#Uwg08%12dn`2|1ntiWVX0*@y#OHi zZuz3b=X%B<9`#$FLQTliTrU$0ns@m(b#umq5QQfzW|C@feMF?oMkSY z_;c%LEbN6A(+5m$xP%=3D8_k!ZfTJWvPiyba?j)3ILw3G-Y99=xZ0P{Wi3{CnuG;< zjH@$1Re2F?pc`Bk<(ae{hvS4+yH<{&4-y z@SRyF)v1Tc-`C{tAo;g*e%upk<)nZAjpK&&Z{UY$*cPr0vP2v3}yQCT4Cr5lmDQ}zYb41UfsYD;7RsE3FeprZ<_-1Oo8!2pnzKk z%s3RupXp08`JXiT2b=u8B>xf4kISTs-j%- z&sl9XmT0-@DUBFC^nX&V)~Af_`Cm!gv0?Q?LX3_X)UMKeBYKdqwbb>|}5+%7X&wtyCr3D*s+BHVyx>I&2uMII@^Ma~TJM{~}bQ48}|(Z8QI zY;kkO?eI4km|`j=47Uh@CG>H~UpU^2)SD&088Bt&`R~)tr&VO5>0AnfLsVIxb&FD3 zv4U0gb5_B5Ae5oIQ#qfCYSiA8<0ja?L`wD$I|IyU9c`6cE9LyDFUmE(`I*o|Ej8!& z!DwHLOB=K;K;xd#0pgCQmcIP8;hf(u zxZ_D*f?*r9yPJt$V^2wUhKupI>4RIgQcxk<*rIJ_ru0W>=AT0j1TW5(pr7PF`z{_P z7i*K9UZ|DH-_hi6!1;6ZaxO4a)@1Fb*6D@HngW$ffdT|LMQ8{V?Nu^-Rxk9O$@uFm zVd#kD?_}_c_F7Ia^vUcT$+_MXSRe%=3<0$APTQa1vwERd4S@+J|4_+)@f{JMXus?9 zLS0S%ER(;D>uLZI1NPRv#2&a@RJw%S-Ob$ZhMz>4N?;Is8m;5doH4iez-U zpu;A|Y1AJWYKLTOQ6yvU#&#dH#N=FQa+2f>wQ`<>YoPe+5}7}jc0G%Bf5bVu$YHm0 z6fziLt#j0jL%(zM7>8%i(s&L(J4-7#%sWdbI2>@6?s3@aELDFFVWqQ_#^E1lXefvH z7W`}u7oDN49KL*pE^yf643!yzFyRa};xOP0J;dSnr)dm_pP!}=Ih=l)4s-a-X}ZN> z`_mLP6k+6PdVs^5r)Us|hfdK94ws&y4IJj2q8~WybBao2BW!qz>Ty{56!px;`_=ic zrGN9Sw(5yqHJ#PY#$x+q8y&qPkzrP3jENjCkp)mK=REVNXfs(YMb+hyeWSRCiMGf z*-SjSz=H|j7Q_{4)#~V7Q<=Gxw+m|(fJY*$yaeCT#}A^7^!ZqxBYGAx!|~snBEcI{ z)E`Ch{>er7Mp{^OFCBhCg*ABjggA%@e0YKgEKI&X2?D1uA00E-b$E*=`mDcSL7Xw)!O%l{xP0!CCK%l*@Fx8HWZF}$B~ zL?$xEb7Z|UbZnTa=iiMAhN-TukmJ;CxN4en=9qAb_uWu%n~(vfG^;avcA;vAgKNaI z1Q?3NqyM;y_Za;NhNy_4;-D1;wyH-*92u$zY#1aO~z>2rZD(&~y zzov73m`~G2VB%=yQCdAh#n7zB{6lh}ry9G9+zG&67x~wn0DTcP-~)(`I{|zbj&${F zd_`tGCk^&Q>GYX08)nUYy*5|ozAC?okBb-h&LFSej79^4o^-a{DBL8lLM~L)i={0I zq3$nY*UDGb-I%UH4!)%X0`Od?OV4d7pZaEp;RVkOz4i`E88oG*Cp8my)LI#pK8O>T zGV>UPna8OAnt6N^`wjB2@`}<0{(1gz-aE#5*%$-p+KVbQqRSDZL%hF(8pk6jp?7bj zDlcIoFXRZden~~={Bc;a0WGTeGl3(@`Hn(L@%VuGn62a;2EGl5GS_?@d&`*$n~uzw z{$Z8r3N0LsMd3L^*Z+%RMyg6>I%5A0&vVA;E!1u#ri(8gvW1ODMoZYz`iTuR8p*De zhiKtQ2s_1OgXcyy_Z1WNgLh?WHY&rn*b#OpKKp`($E%kXa|-?(5?YdmZxjmqHL5C{ zqHl3w%j&I&H^TN5VOx(pRa5M+ggZ4yRT3R*{}vyMbh1EX#)~*-krNLxno? zm9>Dgmab1ym2%cXQyKaN#G(b@x5~#6;cM&A_f5l97UvJ!9{CU+p<=7T=D||1jmL0t z5V`bzv?cJi0YJgWh|2po5)Q`Rs8>ik6T+tR?MFP^J*U4JeX|2r(D`3*-?77?c6q8L ze5_p&&Y2jCevqNRBo|uXyH)a`BkpzZ?AyWw%t1V!+*%~iYZ2KSy^;lca0U*ziqDNJ zhP%$-bhB}nnCI41@QR9ZHT;sQj#i0ja-+jLQttyH(*TGwV9IMg+*pGe!HX|p`Z88^ zrEN(>+miTSZOfNIE}Au3)eN0+Kuo|s4JLJsBXn>y&Urs?BP0MJ;lB{N10m#9l@Jb%OSDK1Rv4x<(iy~>fyfGT_k$T%?n*J(AYqXy}e-)d* zUc`k)@CdLoli4YGn0`ZaTo%AYAP?B_{1-b(Wn5JEHI*23eV-s~#VoO3^TD3P5w!s( zm&Lwxh+cY4#nm1TWYf^C&$H}srI;Olfb+wiBWcfTD!y_*0|=~y5eYWdrGwUkClOZ~hnk+WHt;dZ8a!jQ+jJLjP_0=ylK^^93D#UB%UU z=nJ7gsPx8>t9#-5*2rXjCF1)Mu&XRap4?AW#zAQ(7E{Y{m_xg?%M>c`Me(Qn+fmTy785K1*BDcI^&mTDksZ^=#8_H<6PkeTV@FeDE*5@6c2VnGm7K#1s5XOx zq;fEWC%FN)7+eTh3K^`g*J4fEVeq`g-~x#(WN;dqb1}eP+Y?^3W7gU+&mtxQnJfn9 z!?(d;(^n9H1FD{@Dh4tm89H_+)g6!N&3w$-me}K+XPi2^v-shdHFiuq&@W11Qq@8nGMp-rh~|4{=x`vWtb-) z;?q}9LOz>=^Ur%m1Z?2LQ(oTyhlTm$EIDVI9~KL&a>&__zMr6C`*m^1ewzb1zm>|y za`NsvxEKef|71BE>AK*@>q~WrMA}3$i@8&(A@Uvde*?-qu+5fD&N)Bq5Xpu8K!k%r zB8~O(&zXqFAu{)MOOm6;ODsutLA8+Nk&&XzTp4Xp!5dKKgAT#f>vnJ}+qm6|;kGrnXI~QBwKNo?n96I};CjziTM{``o%IFHVc;d}#pw^)E!3>B7Q>dW zSqyK3j=*ql1C0Bi0UUloeE0zecph_na+jMDH@U)_u-2RESi#@z;8(EmEjP39Qw;vs ze2kz|K4n&yD*APlo$8a|p`m z`u*Ff=45zTWx;hjxFv1e*2QoW4eo(qf_u`qFRz|v=ye-yN#tl`$L+L?foEY#8g2Gh zw)>7p&n66SG4`|=UI`t6;Rg-yP2;{d#eEw)z;dd7_ck|e-)y;WYh6L`cRTpX#&1y! zKf&Pdp^;PICZA$4*|g?z+`auaS}_G~GUHQmUk7XKXp7ek#*`MXA3-JH^#QuaSPdMk z-B_a6JGN5&slW;rtXv1H0G*4--Lx21yusQ@qo)Gvlh19wp28~O)W{pvbca!7lN)G~J8%f@{b%@+YKOzh_Dn`U( zh-{@X(^PEF-=)8%sd`Vx z8)Uo#@eW_v)QQfC-|Tf)B;gQlIbSlE#T&0j*Ugm|@|X-?xWoTnqb&aG8;`J*6a)1` zNgIbENcF@}^|7i#?-*=SU1v)&n$IhwNabgB-DGv)+6i`YSw7-sv!l*iX-N_fN#g%Y zl4tJFt?8=%fZ7Hbug39S-<>b*icrJm?;+!57Jpr!ZSZ$th#Zqh1+5H-m@o++>tflX z0LJ_C#)2IT5as3o-zGO*o$m^#1v6BMrk{Vp&T__~^C7x0vE%o~Yb-iPp%u`126WIu zER!)0T?2qCYc1WGfgK%9urg*U$rjeg-i_|Jx1J48Vevcbib7?BLnXkbl2VKc>mF40 zJttK1WlU0;cYb*Fnl(1O9F$MpNFTk0_Tudo%>En)cpN%3VSkhHM~nRxP#SKO(MA%i8_YF7xePmsG6%jv)PqT zp0?dUE8j-doc1xZ+sDDmdC_8by)m!F?lNcv?6#wP#;WIF$>-U&eNKrpRdk!Of|cxG z@#m;S^rT`~H4WDGXRTMRO6GYLO`WM?o4os}@ac0H(4EhE^zrM<5Tdp8_eVv;YzEJ2fnfll=7GR-6Vkf#O5#Ww7 zwg>a3Qf*_V*E7Ofjx~6 zbwR0?E=!rx?=u?wln-5YTtmy|@Q`9D3mxth9B&GG^%i4!3t=Vn385b}^b?H16U5++ z4RHVuV0YU6nVUX&(%-agy>$h_zq8+VS7qb3D2AV4@b?T9`LwAA<|NgpD{O0}Gk*Ke zXvJJuYsM00{EP!UHruk+2IB)3;~zn-U>xI%xp1Qf4ps_d?f8`HzoR0WRurra4pxAT zl~N3=zQNk}6d$D^YYhPM=Rvz5>mJBa~KHNdIHNgUvCagtS3 zXC8nn2yn6ktZd*G#efqG@SZ1ygO%+~(L%ykixu0C0mD?~7YIz+=(33CA0Z zX>IR-VvKjpWAAXV49s>Pu-&JS?I(1O5Sr)^8fp_-YCOPVdk!=V zT{NVi1*&TQSO-3tnO-ZEnc@2bzJDS7le(0^`yBYY=%_@F#A5I@4E*N)B1eCbBdoty zf3nn;BasQUUO}rDKs#?QVC|$isN-zZO~xZErdL2$V7h}r^%?E>ytPiYd&2KE67_ zo*`^1qD>kP?x{_<%(?md?E0;XVi-Uo?zz0pG?GSK1cv1cr`&Kmr81Eb({ zJ8GQmh%HQvrJTVq0F)EZkD4!1k!9{I7N*g@jWOfdF(BpD$4oTbQ?8qM;v<^82(|iC zER5nV?7enPT;#LppE2%Z(fATt0*xo>+#=NK?haN68}s~fD)&AHhz$g5zk?NRV`UY? zN;6nLK5EtKWb=$ElJ|kV^#fbyfw{o$wwx9MyTSZW>MXW!I7B9)gBD446tn7Q&>1A@(iZ{00LgS|@M7+&9D?#W(ET4$ z&BfeR32vH$ThhjDT?{wT;2wBHa90}_Sq&b&dfg&h68ZXB#}8>41JA<3DK>dKz~j+- z3d38BeJ$0mgpR=Qg9dnm0p1|MjU8Y+ku4zu-)x#HVUQ`(0VC-r!F5j+{@yrtLu^dSG zEa#3TRDUV_FIcelJ6HwiI0dU|F|2s#8cM)?$x>i_vcP7Kk1OcbOK3G?O_?LU>|niW zW34qNv-nyHEdUGiCBW)e*TIr6JZ_OH$i93Ynt(5JQ0QjEbQvKs(IIjlou4q=s2CBC zA%gjm58=zp-?JH(&oQ=ei0~EPAi_Z*k>Pq0i7z`uM%hGG8&g`6@F*FQwCp1m)W(;i zm#GrvYdHk@w2I#Fft!YQ!Ixjtm*LH+q@brc=zpPe6cOqdLys}&8+!}-HRE{Kz^PX+ znQzM@=VO|FKpU2+=#JxOi$^=aBW&Om#zQQ&--D*Wb~6CW;^9>DT+0x;V+h?5LKPfB zvL?3ped@ei#g~8Qwfq7c&3hQFuEY;|pK_P0X6454z-rzsOwr&1h~0ExIc~d7n@1%+ zQb|?I&l8@l?*z@pkc@{EJa(M3$W8N4;F}>sKf*-HZ!=klKu3tv{VeU2Gwx&w;Rjto zh`GH)J0WJ~G6bj@di=Y#c2h{SNSn$1KK67X!}cp((Z-^t7~p**uTOGaAGg zLnuZFJ^zj^h-lfhkS>1=?caGtwEw8B{rwB5<_guKoZK4o*IT0f?42}Zg=+0uIG0wg zP)SjP<`&id>o6`#Z{Swz+I#fR3e?^7Sq_ z_->BP;bO)b@*a)(L`CDvnF~Kr@e#Qum6u6d8+%KxvhUH4$d%Z422-5qP)tXkAQZN?on3A zk$Duo3X90qrc>KhDy(!eNXbd)K4NEIAF=cC*&-4c@c1S>;0Mt$6f*D+bOHwO2_**a z!z+6&rAD#n{aN&x5){rYkJI-u|0xh^{e@aIXUot%ZEC@}mLCY(ckfc@YWP9IG`7lM zhm9!1hFAA64q;iPgW>0U>bF|Ow)t|FNRU_T`;p(k%Y5k$(E5iUK}k6~IPQ-B@UnTq zc^Pj0Qqy;@(9YGWdY?`3Yh=JT=Tawzwba9_%bhd5%npJ1wsZ6Z4Ae4ikNfv6_6q(O zRJFW{yqKTY-rcz1_LwpFSz<&)-k62>LC3yPVdct7awqrLo%~}~JO4_ps|27}M=yW! za)?(xd07=2@+CMdAK;d~0}fy_LGWBI4;xgO=|lSJ%e4Aa)u`Gg+%%MThckiio)g3J z(gJ&A@(<3mb@pc}sd6~ZEaXl0xZ!trn`?P?#CN@QYFG*C@|miV!`JHcHX1YrcHJ3J`OZ|o=~c2d`eyhSlL@E@U5OU0Rq;`8V~YxeZp%Uo6TF%r zUjtn}gML}7I_6ZLVM!UBJDm*{;}GHQrjSS{9vU9eKXnEp`8#cG+(1uJm?zHU*~WP; zJ9&;2%j0kIyu*2x?dUl)Jh)j?u_Z_IUinJ8mz)Um^3c zx`%aYCy2w(@0#Z%Jo~~?CQElJmj4x#9>(c0D?y>BCj}=~aOOKpM|U(?y*kS{3NE}T zR=ABRd?pPvQ$6;6>H!eT-olCf)L%}e+|RKKY3Wp2_PMIt^mySO=y8|Z7TW-gZJ^ff z=Zk|18sGMvM0Yi5IJVOM@-~&)psLku@&**2?n!3{OZ9lexI4?3D(iENq1S{-cwY22 zb={z<`u|DKZcvR}tESL`4XSR=>r+IP7>8B%3(if$mU3VGQQNmhpzmVeGCKSa(n57@ zAN;#uJ73u|X|yNCzbgOAlS`a@8$fr;h|$nha#ki7;U3pd$7DFC?mc@k<)ZY|v1o2^ ztp#SHsnbRkl5=CSFaf|Q3sCL>n$iK^B7#kyUoT=um&6weuWeLe z>G7E?fL!|_BunY_V?+SnOCK_^ucxoI(H=9pQHCPV+aWQK`6+2_vTvKI|H&ioChYz^ zpGQLwR&fQ%#UN0Xr^p>htV~+GNi{05_xbz+ELVNINhRf61{b~ci)Ez5_}js`Z$i0Q zzMIZ2+q&J2vG(gwc%x;rEFMQ5)_`$=CY4*QZIQrDbd{Y0n2#v4uSOn zW%Q|WkQ86}?nBcys|eTPH|e9zs$r?>UnP6Shf7!Miop<`F5pRN?@!cvtBPxQaiUOyKKs0iiuN)p z9x4rFNPrA*o5>!YctA0x;MSK~(M%M}snFP5@^Zs1FP$rp$cxN9^*gAAQ~HfW&$SqF zJ$QfZ8T=@rL$AYmHP~W2hpm$O?lpf<49UCZ3uMlLVG#?|T8R=#h?&lGDHX$Z+E17AQT$p zV9Sp5`I9MeyQ@`Z}yUMx<1~i`C^5Ic*?@P0uNHPovMqrLj9zOy--p!d6D!?tLgA4z&XT?v;$+=NF1!TGu!3#^fRALIix~Xa_<)ItI+c zX8kR{3DYm9(hbmw$iju|s6|NYYn<~|E0(k015|&Ps+RM^I3bHo;1; z!6mj4Adey_p}%N_ICHrRM+E3yP?pq4shi-1i(1*;dM2_%bFw)zTBJYRS*c^NeU^U2Re~z)R*mCl$z!z3H1KG)hH%4x zGphQL5pYjS75(0zA-h#{(8`x>vBO@Zxx2AAojq1Wu*LR&gAVRiRb9JA(C@odWKNt( z1|ZIwv4k@XYA)+&8R}5pHEy+rd(z>G>6x6x@`kGV8DwSE;SiM^9`@I%Y#j(aB-8Fas#)my2lESh=s|uWIKxoTUX_@$K%#3G zM*DHEHv?A7^7VHNbM^td*V~S9iPh`5F>Hf<<~O%`y_-A|JFKVhv(@W0lzPlA)yMAj z`l7pm$lTV(=&^w#rRRI6D}Aw7)oy&`g+d#gkjlno`=f>LZ;ElXt*+xy%6Q|{VHCX& z-gxb`VrCheOX>SymiEKw*?lUq-4c^rXqK>HIQ%|OdY+-wu7U->a5AbdQ&q?eWB+0 zBYw8j*G=jet03E` JYnuA1~e(yz5-{)Oqq?9d#Gt&~-*V^Yd8g>u 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 delta 544581 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 z z_TJ$Vj^b!kfx(`NmPRUn&HDxkS+1ZhN3@YLS~*9f3JmuCqi~BQv}z}sjnIs};1;4? zf17i&aWtyHU{6K!C$vsZv?_(${SRZX_clEFaAdd&sU^q{c&{P3W-5?d5wgeIa0(&c zQbf6po6oGk2{~7RG)=)^??2FQN-N}bg1pMzooFslAZH_F)qh|mLcXccLs|oU0PgsqR!`^~jk3s|OA0#x^O8K}kTZLT`x0Z`V z_A7TNiWM*wk@mkO$}fQp6uQ8N^Y&Xv+k4_ch=9WX)nwuA~)O9 zDNJS|OE^qG-gLspGx1V4coo_YU?SZpW-;OBGVL{U0XwjPpF>hrlD@|(5->juCR9m* zR-*We-boR+{@@V2R2A&MAk+ofhy4fkRCU$AxRP);n&6+Ru%y?xc=l?k7`5`J(+#7w zgguHYHxvlj8nNv%sTD*PvIw%Lb=8L;dMQga!4uQMgx6sCw1mz=M;Et9a~>&uH!UiI zcKlnjS?Ty9A1RK)W57ICJP%Xb=-kMD0Kbo7sZ~7HEsxCV#`evFwCOS8kw_??o-(!F znLyEGa^zE8&4h24?^EYx0^|(_U2uYe8EyF z;B_GM2_i@CTdrr}n2s`SMsl5uIRA!U!?);zSf4=$_s`A5Lx(%XYK~2sm5p)Ms_Cf3?#iY+c9VXqVP16v(s`|Vu(@NM zn&Ys^$a5S}De?_GQ~u55jt8lo-8+ZS2~3l#KNy|<(5EIkYE)k|;0vp$N&Mz}Xt`lB z@l+d!jchB`&0YobY69!>=bw0eVItX1p1EU*E>^s74EyZbJ-}yNRZc9X<=6rW4o1I$aJ9(+H$hMgz%Frqr1f zbi^dxys0izsnbwhtKJ%_la#u1vQw#g-z3M>D|H8`4n?X{h+d`2OE1g9(6*NgQ6BUi zQ|gwqC3=qVHuAcfnJ$JrLFFst@^Tki$EdtPF3&@S>s09uQN6P930#V+A3^)4F5whoJsiG_8-LO%Cw#mjRV+Zwst)L82&rD5i-k^Q+C zI?Rj;>HiZS3Bp_$adUsP0`g{tC47rsfb>ji3#Xi9d$1_2Ov+S*pp8EiV(Ma8GSe_@ z1%6{iD{$UJzo8*!f^7-0=B7$4!R%G^kga;GvyxAsBoaG5kS7iya97)00>-hU#L6x| z3)f}_if;@A{jB(5UdUAy;>K=$HC+ykW!F*5xi}bW$aC#Ss(mqFLjhi1L>9Ri&3&0I zmcIp2C!{Fl$JJ0bD>b-BpmTtpcZodC*(VRp3e%Cn*wocYstI*Rc=b=$D4ysS)tRlj1}-b_&bobJBb~C&dYshQ(B@&ctdhJA7K1D0!YZ z7E`})QwAH%6~FTW=hASpTE_?4ixZK7mKciltKj4lQEpRD>p*x?>gNRXwcSqVUXaSZ z!ciQpW@wv_L4)>n1W|9+EM2h6MO)Oi$6x6MsbEYeo2;=?vR1#j1e^>A<&5R6

_`v+Cgaw3Q&H({R0TEwJNd>Z1c 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

rB7N7xx^ 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%0DIL;4<7jVIRt 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 Date: Tue, 3 May 2011 16:21:07 +0200 Subject: [PATCH 30/53] Added .tag file with Git revision. --- .gitattributes | 1 + .tag | 1 + 2 files changed, 2 insertions(+) create mode 100644 .gitattributes create mode 100644 .tag diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000000..a3c6108370 --- /dev/null +++ b/.gitattributes @@ -0,0 +1 @@ +.tag ident diff --git a/.tag b/.tag new file mode 100644 index 0000000000..055c8729cd --- /dev/null +++ b/.tag @@ -0,0 +1 @@ +$Id$ From e443d8850105549eb1d72f54d3bf0d3d72cf90c2 Mon Sep 17 00:00:00 2001 From: Eskil Abrahamsen Blomfeldt Date: Tue, 3 May 2011 15:06:13 +0200 Subject: [PATCH 31/53] Support gamma correction of text on GL If the SRGB framebuffer extension in GL is available, we can support gamma correction of text with a gamma of 2.1. On Mac this is sufficient for gamma correcting subpixel antialiased text. Gray antialiasing should not be gamma corrected on Mac. On Windows, the user can potentially set the gamma value to anything between 1.0 and 2.2 (or something like that). We support anything that resembles 1.0 closely enough by pushing the text out without any correction (like before). We also support anything that resembles 2.1 (the gamma hardcoded in GL's SRGB extension) by turning on the extension before blending the text. In between the two, we'll use gray antialiasing to avoid differing too much from the raster engine (which is our reference in this.) For gray antialiasing on Windows, we use a constant gamma of 2.3 which has been determined by experimentation. Since this is close enough to 2.1 we do gamma correction with SRGB extension. The distance limit of 0.2 is determined by some experimentation. Reviewed-by: Samuel (cherry picked from commit 79ba7cceca5e4029876ace2121edd25b08ae14ce) --- src/gui/kernel/qapplication_win.cpp | 13 +++++++- src/gui/painting/qdrawhelper.cpp | 10 ++---- .../qpaintengineex_opengl2.cpp | 31 +++++++++++++++++-- src/opengl/qgl.cpp | 7 +++++ src/opengl/qgl_p.h | 3 +- src/opengl/qglextensions_p.h | 8 +++++ 6 files changed, 60 insertions(+), 12 deletions(-) diff --git a/src/gui/kernel/qapplication_win.cpp b/src/gui/kernel/qapplication_win.cpp index 0a03397251..1a490c9979 100644 --- a/src/gui/kernel/qapplication_win.cpp +++ b/src/gui/kernel/qapplication_win.cpp @@ -237,6 +237,7 @@ static void resolveAygLibs() # define FE_FONTSMOOTHINGCLEARTYPE 0x0002 #endif +Q_GUI_EXPORT qreal qt_fontsmoothing_gamma; Q_GUI_EXPORT bool qt_cleartype_enabled; Q_GUI_EXPORT bool qt_win_owndc_required; // CS_OWNDC is required if we use the GL graphicssystem as default @@ -653,8 +654,18 @@ static void qt_win_read_cleartype_settings() if (SystemParametersInfo(SPI_GETFONTSMOOTHINGTYPE, 0, &result, 0)) qt_cleartype_enabled = (result == FE_FONTSMOOTHINGCLEARTYPE); #endif -} + int winSmooth; + if (SystemParametersInfo(SPI_GETFONTSMOOTHINGCONTRAST, 0, &winSmooth, 0)) { + qt_fontsmoothing_gamma = winSmooth / qreal(1000.0); + } else { + qt_fontsmoothing_gamma = 1.0; + } + + // Safeguard ourselves against corrupt registry values... + if (qt_fontsmoothing_gamma > 5 || qt_fontsmoothing_gamma < 1) + qt_fontsmoothing_gamma = qreal(1.4); +} static void qt_set_windows_resources() { diff --git a/src/gui/painting/qdrawhelper.cpp b/src/gui/painting/qdrawhelper.cpp index 5e75e4a884..3553b6064d 100644 --- a/src/gui/painting/qdrawhelper.cpp +++ b/src/gui/painting/qdrawhelper.cpp @@ -7198,14 +7198,8 @@ void qt_build_pow_tables() { #endif #ifdef Q_WS_WIN - int winSmooth; - if (SystemParametersInfo(0x200C /* SPI_GETFONTSMOOTHINGCONTRAST */, 0, &winSmooth, 0)) - smoothing = winSmooth / qreal(1000.0); - - // Safeguard ourselves against corrupt registry values... - if (smoothing > 5 || smoothing < 1) - smoothing = qreal(1.4); - + extern qreal qt_fontsmoothing_gamma; // qapplication_win.cpp + smoothing = qt_fontsmoothing_gamma; #endif #ifdef Q_WS_X11 diff --git a/src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp b/src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp index 18c684ff1b..673f614c0d 100644 --- a/src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp +++ b/src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp @@ -1548,6 +1548,14 @@ namespace { } +#if defined(Q_WS_WIN) +static bool fontSmoothingApproximately(qreal target) +{ + extern Q_GUI_EXPORT qreal qt_fontsmoothing_gamma; // qapplication_win.cpp + return (qAbs(qt_fontsmoothing_gamma - target) < 0.2); +} +#endif + // #define QT_OPENGL_DRAWCACHEDGLYPHS_INDEX_ARRAY_VBO void QGL2PaintEngineExPrivate::drawCachedGlyphs(QFontEngineGlyphCache::Type glyphType, @@ -1786,7 +1794,6 @@ void QGL2PaintEngineExPrivate::drawCachedGlyphs(QFontEngineGlyphCache::Type glyp shaderManager->setMaskType(QGLEngineShaderManager::PixelMask); prepareForDraw(false); // Text always causes src pixels to be transparent } - //### TODO: Gamma correction QGLTextureGlyphCache::FilterMode filterMode = (s->matrix.type() > QTransform::TxTranslate)?QGLTextureGlyphCache::Linear:QGLTextureGlyphCache::Nearest; if (lastMaskTextureUsed != cache->texture() || cache->filterMode() != filterMode) { @@ -1809,12 +1816,31 @@ void QGL2PaintEngineExPrivate::drawCachedGlyphs(QFontEngineGlyphCache::Type glyp } } + bool srgbFrameBufferEnabled = false; + if (ctx->d_ptr->extension_flags & QGLExtensions::SRGBFrameBuffer) { +#if defined(Q_WS_MAC) + if (glyphType == QFontEngineGlyphCache::Raster_RGBMask) +#elif defined(Q_WS_WIN) + if (glyphType != QFontEngineGlyphCache::Raster_RGBMask || fontSmoothingApproximately(2.1)) +#else + if (false) +#endif + { + glEnable(FRAMEBUFFER_SRGB_EXT); + srgbFrameBufferEnabled = true; + } + } + #if defined(QT_OPENGL_DRAWCACHEDGLYPHS_INDEX_ARRAY_VBO) glDrawElements(GL_TRIANGLE_STRIP, 6 * numGlyphs, GL_UNSIGNED_SHORT, 0); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); #else glDrawElements(GL_TRIANGLE_STRIP, 6 * numGlyphs, GL_UNSIGNED_SHORT, elementIndices.data()); #endif + + if (srgbFrameBufferEnabled) + glDisable(FRAMEBUFFER_SRGB_EXT); + } void QGL2PaintEngineEx::drawPixmapFragments(const QPainter::PixmapFragment *fragments, int fragmentCount, const QPixmap &pixmap, @@ -1986,7 +2012,8 @@ bool QGL2PaintEngineEx::begin(QPaintDevice *pdev) #if !defined(QT_OPENGL_ES_2) #if defined(Q_WS_WIN) - if (qt_cleartype_enabled) + if (qt_cleartype_enabled + && (fontSmoothingApproximately(1.0) || fontSmoothingApproximately(2.1))) #endif #if defined(Q_WS_MAC) if (qt_applefontsmoothing_enabled) diff --git a/src/opengl/qgl.cpp b/src/opengl/qgl.cpp index 7ce35f8d1c..4cb976f3c2 100644 --- a/src/opengl/qgl.cpp +++ b/src/opengl/qgl.cpp @@ -5521,6 +5521,13 @@ QGLExtensions::Extensions QGLExtensions::currentContextExtensions() if (extensions.match("GL_EXT_bgra")) glExtensions |= BGRATextureFormat; + { + GLboolean srgbCapableFramebuffers; + glGetBooleanv(FRAMEBUFFER_SRGB_CAPABLE_EXT, &srgbCapableFramebuffers); + if (srgbCapableFramebuffers) + glExtensions |= SRGBFrameBuffer; + } + return glExtensions; } diff --git a/src/opengl/qgl_p.h b/src/opengl/qgl_p.h index 6a503fab90..46683c742e 100644 --- a/src/opengl/qgl_p.h +++ b/src/opengl/qgl_p.h @@ -288,7 +288,8 @@ public: PVRTCTextureCompression = 0x00020000, FragmentShader = 0x00040000, ElementIndexUint = 0x00080000, - Depth24 = 0x00100000 + Depth24 = 0x00100000, + SRGBFrameBuffer = 0x00200000 }; Q_DECLARE_FLAGS(Extensions, Extension) diff --git a/src/opengl/qglextensions_p.h b/src/opengl/qglextensions_p.h index 529c7a1b4e..ac80ce8b96 100644 --- a/src/opengl/qglextensions_p.h +++ b/src/opengl/qglextensions_p.h @@ -477,6 +477,14 @@ struct QGLExtensionFuncs // OpenGL constants +#ifndef FRAMEBUFFER_SRGB_CAPABLE_EXT +#define FRAMEBUFFER_SRGB_CAPABLE_EXT 0x8DBA +#endif + +#ifndef FRAMEBUFFER_SRGB_EXT +#define FRAMEBUFFER_SRGB_EXT 0x8DB9 +#endif + #ifndef GL_ARRAY_BUFFER #define GL_ARRAY_BUFFER 0x8892 #endif From 64fa65df74e25f97bacc63db2019eaf7e08caff2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Wed, 20 Apr 2011 09:17:13 +0200 Subject: [PATCH 32/53] Lighthouse: Fix virtual desktopwidget (cherry picked from commit 69c759f5b84c2f6a44377e5f72cfe9d5bf7344c6) --- src/gui/kernel/qdesktopwidget_qpa.cpp | 12 ++++-------- src/gui/kernel/qdesktopwidget_qpa_p.h | 1 - 2 files changed, 4 insertions(+), 9 deletions(-) diff --git a/src/gui/kernel/qdesktopwidget_qpa.cpp b/src/gui/kernel/qdesktopwidget_qpa.cpp index cff05f5836..6257a8bc06 100644 --- a/src/gui/kernel/qdesktopwidget_qpa.cpp +++ b/src/gui/kernel/qdesktopwidget_qpa.cpp @@ -51,6 +51,8 @@ QT_USE_NAMESPACE void QDesktopWidgetPrivate::updateScreenList() { + Q_Q(QDesktopWidget); + QList screenList = QApplicationPrivate::platformIntegration()->screens(); int targetLength = screenList.length(); int currentLength = screens.length(); @@ -72,19 +74,15 @@ void QDesktopWidgetPrivate::updateScreenList() } QRegion virtualGeometry; - bool doVirtualGeometry = QApplicationPrivate::platformIntegration()->isVirtualDesktop(); // update the geometry of each screen widget for (int i = 0; i < screens.length(); i++) { QRect screenGeometry = screenList.at(i)->geometry(); screens.at(i)->setGeometry(screenGeometry); - if (doVirtualGeometry) - virtualGeometry += screenGeometry; + virtualGeometry += screenGeometry; } - virtualScreen.setGeometry(virtualGeometry.boundingRect()); - Q_Q(QDesktopWidget); - q->setGeometry(virtualScreen.geometry()); + q->setGeometry(virtualGeometry.boundingRect()); } QDesktopWidget::QDesktopWidget() @@ -118,8 +116,6 @@ int QDesktopWidget::numScreens() const QWidget *QDesktopWidget::screen(int screen) { Q_D(QDesktopWidget); - if (QApplicationPrivate::platformIntegration()->isVirtualDesktop()) - return &d->virtualScreen; if (screen < 0 || screen >= d->screens.length()) return d->screens.at(0); return d->screens.at(screen); diff --git a/src/gui/kernel/qdesktopwidget_qpa_p.h b/src/gui/kernel/qdesktopwidget_qpa_p.h index abee8a101e..d6ed686a3f 100644 --- a/src/gui/kernel/qdesktopwidget_qpa_p.h +++ b/src/gui/kernel/qdesktopwidget_qpa_p.h @@ -76,7 +76,6 @@ public: void updateScreenList(); QList screens; - QDesktopScreenWidget virtualScreen; }; #endif // QDESKTOPWIDGET_QPA_P_H From 95bbf56ff076d003eddf7a7f9f1030d2c683ca01 Mon Sep 17 00:00:00 2001 From: con Date: Tue, 19 Apr 2011 16:15:09 +0200 Subject: [PATCH 33/53] Support GL ES 2 with uikit. For GL ES 2 teach the paint device about the fact that it is doing rendering backed by a framebuffer object, not a system framebuffer (which doesn't exist). (cherry picked from commit 3b437a7706efbaaafdc4861393cbe21354cf4ee2) --- .../platforms/uikit/quikiteventloop.mm | 7 +- .../platforms/uikit/quikitintegration.mm | 2 +- src/plugins/platforms/uikit/quikitscreen.mm | 4 +- src/plugins/platforms/uikit/quikitwindow.h | 11 ++- src/plugins/platforms/uikit/quikitwindow.mm | 71 ++++++++++++------- .../platforms/uikit/quikitwindowsurface.mm | 43 ++++++++++- 6 files changed, 98 insertions(+), 40 deletions(-) diff --git a/src/plugins/platforms/uikit/quikiteventloop.mm b/src/plugins/platforms/uikit/quikiteventloop.mm index 8d2603c60d..2b9728cea5 100644 --- a/src/plugins/platforms/uikit/quikiteventloop.mm +++ b/src/plugins/platforms/uikit/quikiteventloop.mm @@ -69,13 +69,8 @@ - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { Q_UNUSED(launchOptions) + Q_UNUSED(application) foreach (QWidget *widget, qApp->topLevelWidgets()) { - QRect geom = widget->geometry(); - CGRect bar = application.statusBarFrame; - if (geom.y() <= bar.size.height) { - geom.setY(bar.size.height); - widget->setGeometry(geom); - } QUIKitWindow *platformWindow = static_cast(widget->platformWindow()); platformWindow->ensureNativeWindow(); } diff --git a/src/plugins/platforms/uikit/quikitintegration.mm b/src/plugins/platforms/uikit/quikitintegration.mm index d4b4192b60..3a432d11a4 100644 --- a/src/plugins/platforms/uikit/quikitintegration.mm +++ b/src/plugins/platforms/uikit/quikitintegration.mm @@ -66,7 +66,7 @@ QUIKitIntegration::~QUIKitIntegration() QPixmapData *QUIKitIntegration::createPixmapData(QPixmapData::PixelType type) const { - return new QRasterPixmapData(type); + return new QRasterPixmapData(type); } QPlatformWindow *QUIKitIntegration::createPlatformWindow(QWidget *widget, WId winId) const diff --git a/src/plugins/platforms/uikit/quikitscreen.mm b/src/plugins/platforms/uikit/quikitscreen.mm index 21494c9385..78389f21fd 100644 --- a/src/plugins/platforms/uikit/quikitscreen.mm +++ b/src/plugins/platforms/uikit/quikitscreen.mm @@ -54,7 +54,7 @@ QUIKitScreen::QUIKitScreen(int screenIndex) NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; UIScreen *screen = [[UIScreen screens] objectAtIndex:screenIndex]; CGRect bounds = [screen bounds]; - m_geometry = QRect(0, 0, bounds.size.width, bounds.size.height); + m_geometry = QRect(bounds.origin.x, bounds.origin.y, bounds.size.width, bounds.size.height); m_format = QImage::Format_ARGB32; @@ -62,7 +62,7 @@ QUIKitScreen::QUIKitScreen(int screenIndex) const qreal inch = 25.4; qreal dpi = 160.; - int dragDistance = 14; + int dragDistance = 12; if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) { dpi = 132.; dragDistance = 10; diff --git a/src/plugins/platforms/uikit/quikitwindow.h b/src/plugins/platforms/uikit/quikitwindow.h index 9e73754fc8..5c6496a2ce 100644 --- a/src/plugins/platforms/uikit/quikitwindow.h +++ b/src/plugins/platforms/uikit/quikitwindow.h @@ -47,6 +47,8 @@ #import #import #import +#import +#import #import @interface EAGLView : UIView @@ -59,6 +61,7 @@ GLuint mFramebuffer, mColorRenderbuffer, mDepthRenderbuffer; + id delegate; // ------- Text Input ---------- UITextAutocapitalizationType autocapitalizationType; UITextAutocorrectionType autocorrectionType; @@ -77,6 +80,8 @@ - (void)setWindow:(QPlatformWindow *)window; - (void)sendMouseEventForTouches:(NSSet *)touches withEvent:(UIEvent *)event fakeButtons:(Qt::MouseButtons)buttons; +@property (readonly,getter=fbo) GLint fbo; +@property (nonatomic, assign) id delegate; // ------- Text Input ---------- @@ -90,6 +95,10 @@ @end +@protocol EAGLViewDelegate +- (void)eaglView:(EAGLView *)view usesFramebuffer:(GLuint)buffer; +@end + class EAGLPlatformContext; QT_BEGIN_NAMESPACE @@ -103,7 +112,7 @@ public: ~QUIKitWindow(); UIWindow *nativeWindow() const { return mWindow; } - UIView *nativeView() const { return mView; } + EAGLView *nativeView() const { return mView; } void setGeometry(const QRect &rect); UIWindow *ensureNativeWindow(); diff --git a/src/plugins/platforms/uikit/quikitwindow.mm b/src/plugins/platforms/uikit/quikitwindow.mm index 52d184636e..1f57baad69 100644 --- a/src/plugins/platforms/uikit/quikitwindow.mm +++ b/src/plugins/platforms/uikit/quikitwindow.mm @@ -79,7 +79,11 @@ public: mFormat.setStereo(false); mFormat.setDirectRendering(false); +#if defined(QT_OPENGL_ES_2) + EAGLContext *aContext = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2]; +#else EAGLContext *aContext = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES1]; +#endif [mView setContext:aContext]; } @@ -116,6 +120,8 @@ private: @implementation EAGLView +@synthesize delegate; + + (Class)layerClass { return [CAEAGLLayer class]; @@ -156,8 +162,8 @@ private: { if (mContext) { [EAGLContext setCurrentContext:mContext]; - glBindRenderbufferOES(GL_RENDERBUFFER_OES, mColorRenderbuffer); - [mContext presentRenderbuffer:GL_RENDERBUFFER_OES]; + glBindRenderbuffer(GL_RENDERBUFFER, mColorRenderbuffer); + [mContext presentRenderbuffer:GL_RENDERBUFFER]; } } @@ -167,15 +173,15 @@ private: { [EAGLContext setCurrentContext:mContext]; if (mFramebuffer) { - glDeleteFramebuffersOES(1, &mFramebuffer); + glDeleteFramebuffers(1, &mFramebuffer); mFramebuffer = 0; } if (mColorRenderbuffer) { - glDeleteRenderbuffersOES(1, &mColorRenderbuffer); + glDeleteRenderbuffers(1, &mColorRenderbuffer); mColorRenderbuffer = 0; } if (mDepthRenderbuffer) { - glDeleteRenderbuffersOES(1, &mDepthRenderbuffer); + glDeleteRenderbuffers(1, &mDepthRenderbuffer); mDepthRenderbuffer = 0; } } @@ -186,24 +192,27 @@ private: if (mContext && !mFramebuffer) { [EAGLContext setCurrentContext:mContext]; - glGenFramebuffersOES(1, &mFramebuffer); - glBindFramebufferOES(GL_FRAMEBUFFER_OES, mFramebuffer); + glGenFramebuffers(1, &mFramebuffer); + glBindFramebuffer(GL_FRAMEBUFFER, mFramebuffer); - glGenRenderbuffersOES(1, &mColorRenderbuffer); - glBindRenderbufferOES(GL_RENDERBUFFER_OES, mColorRenderbuffer); - [mContext renderbufferStorage:GL_RENDERBUFFER_OES fromDrawable:(CAEAGLLayer *)self.layer]; - glGetRenderbufferParameterivOES(GL_RENDERBUFFER_OES, GL_RENDERBUFFER_WIDTH_OES, &mFramebufferWidth); - glGetRenderbufferParameterivOES(GL_RENDERBUFFER_OES, GL_RENDERBUFFER_HEIGHT_OES, &mFramebufferHeight); - glFramebufferRenderbufferOES(GL_FRAMEBUFFER_OES, GL_COLOR_ATTACHMENT0_OES, GL_RENDERBUFFER_OES, mColorRenderbuffer); + glGenRenderbuffers(1, &mColorRenderbuffer); + glBindRenderbuffer(GL_RENDERBUFFER, mColorRenderbuffer); + [mContext renderbufferStorage:GL_RENDERBUFFER fromDrawable:(CAEAGLLayer *)self.layer]; + glGetRenderbufferParameteriv(GL_RENDERBUFFER, GL_RENDERBUFFER_WIDTH, &mFramebufferWidth); + glGetRenderbufferParameteriv(GL_RENDERBUFFER, GL_RENDERBUFFER_HEIGHT, &mFramebufferHeight); + glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, mColorRenderbuffer); - glGenRenderbuffersOES(1, &mDepthRenderbuffer); - glBindRenderbufferOES(GL_RENDERBUFFER_OES, mDepthRenderbuffer); - glRenderbufferStorageOES(GL_RENDERBUFFER_OES, GL_DEPTH24_STENCIL8_OES, mFramebufferWidth, mFramebufferHeight); - glFramebufferRenderbufferOES(GL_FRAMEBUFFER_OES, GL_DEPTH_ATTACHMENT_OES, GL_RENDERBUFFER_OES, mDepthRenderbuffer); - glFramebufferRenderbufferOES(GL_FRAMEBUFFER_OES, GL_STENCIL_ATTACHMENT_OES, GL_RENDERBUFFER_OES, mDepthRenderbuffer); + glGenRenderbuffers(1, &mDepthRenderbuffer); + glBindRenderbuffer(GL_RENDERBUFFER, mDepthRenderbuffer); + glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH24_STENCIL8_OES, mFramebufferWidth, mFramebufferHeight); + glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, mDepthRenderbuffer); + glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_STENCIL_ATTACHMENT, GL_RENDERBUFFER, mDepthRenderbuffer); - if (glCheckFramebufferStatusOES(GL_FRAMEBUFFER_OES) != GL_FRAMEBUFFER_COMPLETE_OES) - NSLog(@"Failed to make complete framebuffer object %x", glCheckFramebufferStatusOES(GL_FRAMEBUFFER_OES)); + if (glCheckFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE) + NSLog(@"Failed to make complete framebuffer object %x", glCheckFramebufferStatus(GL_FRAMEBUFFER)); + if (delegate && [delegate respondsToSelector:@selector(eaglView:usesFramebuffer:)]) { + [delegate eaglView:self usesFramebuffer:mFramebuffer]; + } } } @@ -214,11 +223,16 @@ private: [EAGLContext setCurrentContext:mContext]; if (!mFramebuffer) [self createFramebuffer]; - glBindFramebufferOES(GL_FRAMEBUFFER_OES, mFramebuffer); + glBindFramebuffer(GL_FRAMEBUFFER, mFramebuffer); glViewport(0, 0, mFramebufferWidth, mFramebufferHeight); } } +- (GLint)fbo +{ + return mFramebuffer; +} + - (void)setWindow:(QPlatformWindow *)window { mWindow = window; @@ -322,6 +336,7 @@ QUIKitWindow::QUIKitWindow(QWidget *tlw) : CGRect screenBounds = [mScreen->uiScreen() bounds]; QRect geom(screenBounds.origin.x, screenBounds.origin.y, screenBounds.size.width, screenBounds.size.height); setGeometry(geom); + mView = [[EAGLView alloc] initWithFrame:CGRectMake(0, 0, 0, 0)]; // TODO ensure the native window if the application is already running } @@ -334,7 +349,7 @@ QUIKitWindow::~QUIKitWindow() void QUIKitWindow::setGeometry(const QRect &rect) { - if (mWindow) { + if (mWindow && rect != geometry()) { mWindow.frame = CGRectMake(rect.x(), rect.y(), rect.width(), rect.height()); mView.frame = CGRectMake(0, 0, rect.width(), rect.height()); [mView deleteFramebuffer]; @@ -347,14 +362,16 @@ UIWindow *QUIKitWindow::ensureNativeWindow() { if (!mWindow) { // window - QRect geom = geometry(); - CGRect frame = CGRectMake(geom.x(), geom.y(), geom.width(), geom.height()); - mWindow = [[UIWindow alloc] initWithFrame:frame]; + CGRect frame = [mScreen->uiScreen() applicationFrame]; + QRect geom = QRect(frame.origin.x, frame.origin.y, frame.size.width, frame.size.height); + widget()->setGeometry(geom); + mWindow = [[UIWindow alloc] init]; mWindow.screen = mScreen->uiScreen(); - mWindow.frame = frame; // for some reason setting the screen resets frame.origin + mWindow.frame = frame; // for some reason setting the screen resets frame.origin, so we need to set the frame afterwards // view - mView = [[EAGLView alloc] initWithFrame:CGRectMake(0, 0, geom.width(), geom.height())]; + [mView deleteFramebuffer]; + mView.frame = CGRectMake(0, 0, frame.size.width, frame.size.height); // fill [mView setMultipleTouchEnabled:YES]; [mView setWindow:this]; [mWindow addSubview:mView]; diff --git a/src/plugins/platforms/uikit/quikitwindowsurface.mm b/src/plugins/platforms/uikit/quikitwindowsurface.mm index bb7dcd794b..8caa15fbbe 100644 --- a/src/plugins/platforms/uikit/quikitwindowsurface.mm +++ b/src/plugins/platforms/uikit/quikitwindowsurface.mm @@ -47,27 +47,64 @@ #include +class EAGLPaintDevice; + +@interface PaintDeviceHelper : NSObject { + EAGLPaintDevice *device; +} + +@property (nonatomic, assign) EAGLPaintDevice *device; + +- (void)eaglView:(EAGLView *)view usesFramebuffer:(GLuint)buffer; + +@end + class EAGLPaintDevice : public QGLPaintDevice { public: EAGLPaintDevice(QPlatformWindow *window) :QGLPaintDevice(), mWindow(window) { +#if defined(QT_OPENGL_ES_2) + helper = [[PaintDeviceHelper alloc] init]; + helper.device = this; + EAGLView *view = static_cast(window)->nativeView(); + view.delegate = helper; + m_thisFBO = view.fbo; +#endif } + ~EAGLPaintDevice() + { +#if defined(QT_OPENGL_ES_2) + [helper release]; +#endif + } + + void setFramebuffer(GLuint buffer) { m_thisFBO = buffer; } int devType() const { return QInternal::OpenGL; } QSize size() const { return mWindow->geometry().size(); } QGLContext* context() const { return QGLContext::fromPlatformGLContext(mWindow->glContext()); } QPaintEngine *paintEngine() const { return qt_qgl_paint_engine(); } - void beginPaint(){ - QGLPaintDevice::beginPaint(); - } private: QPlatformWindow *mWindow; + PaintDeviceHelper *helper; }; +@implementation PaintDeviceHelper +@synthesize device; + +- (void)eaglView:(EAGLView *)view usesFramebuffer:(GLuint)buffer +{ + Q_UNUSED(view) + if (device) + device->setFramebuffer(buffer); +} + +@end + QT_BEGIN_NAMESPACE QUIKitWindowSurface::QUIKitWindowSurface(QWidget *window) From 1e3e3980da02ae32f71e845e13c877e9ca1ac9af Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kristian=20H=C3=B8gsberg?= Date: Thu, 21 Apr 2011 21:14:43 -0400 Subject: [PATCH 34/53] wayland: Track wayland changes Pass version number when creating proxies, use wl_ prefix when looking up interfaces and drop wl_egl_display. (cherry picked from commit c2adf9395214d711a3a40516c6c2afa64b3b4ca3) --- .../wayland_egl/qwaylandeglintegration.cpp | 8 +------- .../wayland_egl/qwaylandeglintegration.h | 3 --- .../wayland_egl/qwaylandeglwindow.cpp | 2 +- .../platforms/wayland/qwaylanddisplay.cpp | 18 +++++++++--------- .../platforms/wayland/qwaylandinputdevice.cpp | 2 +- 5 files changed, 12 insertions(+), 21 deletions(-) diff --git a/src/plugins/platforms/wayland/gl_integration/wayland_egl/qwaylandeglintegration.cpp b/src/plugins/platforms/wayland/gl_integration/wayland_egl/qwaylandeglintegration.cpp index 39e7be5ac6..ddd17636c1 100644 --- a/src/plugins/platforms/wayland/gl_integration/wayland_egl/qwaylandeglintegration.cpp +++ b/src/plugins/platforms/wayland/gl_integration/wayland_egl/qwaylandeglintegration.cpp @@ -49,7 +49,6 @@ QWaylandEglIntegration::QWaylandEglIntegration(struct wl_display *waylandDisplay) : mWaylandDisplay(waylandDisplay) - , mNativeEglDisplay(wl_egl_display_create(mWaylandDisplay)) { qDebug() << "Using Wayland-EGL"; } @@ -63,7 +62,7 @@ QWaylandEglIntegration::~QWaylandEglIntegration() void QWaylandEglIntegration::initialize() { EGLint major,minor; - mEglDisplay = eglGetDisplay((EGLNativeDisplayType)mNativeEglDisplay); + mEglDisplay = eglGetDisplay(mWaylandDisplay); if (mEglDisplay == NULL) { qWarning("EGL not available"); } else { @@ -84,11 +83,6 @@ EGLDisplay QWaylandEglIntegration::eglDisplay() const return mEglDisplay; } -wl_egl_display * QWaylandEglIntegration::nativeDisplay() const -{ - return mNativeEglDisplay; -} - QWaylandGLIntegration *QWaylandGLIntegration::createGLIntegration(QWaylandDisplay *waylandDisplay) { return new QWaylandEglIntegration(waylandDisplay->wl_display()); diff --git a/src/plugins/platforms/wayland/gl_integration/wayland_egl/qwaylandeglintegration.h b/src/plugins/platforms/wayland/gl_integration/wayland_egl/qwaylandeglintegration.h index bf4c3fe45c..3a26f97b32 100644 --- a/src/plugins/platforms/wayland/gl_integration/wayland_egl/qwaylandeglintegration.h +++ b/src/plugins/platforms/wayland/gl_integration/wayland_egl/qwaylandeglintegration.h @@ -65,9 +65,6 @@ private: struct wl_display *mWaylandDisplay; EGLDisplay mEglDisplay; - struct wl_egl_display *mNativeEglDisplay; - - }; #endif // QWAYLANDEGLINTEGRATION_H diff --git a/src/plugins/platforms/wayland/gl_integration/wayland_egl/qwaylandeglwindow.cpp b/src/plugins/platforms/wayland/gl_integration/wayland_egl/qwaylandeglwindow.cpp index d7cf0a55e1..cf52f39d15 100644 --- a/src/plugins/platforms/wayland/gl_integration/wayland_egl/qwaylandeglwindow.cpp +++ b/src/plugins/platforms/wayland/gl_integration/wayland_egl/qwaylandeglwindow.cpp @@ -103,7 +103,7 @@ void QWaylandEglWindow::newSurfaceCreated() if (!size.isValid()) size = QSize(0,0); - mWaylandEglWindow = wl_egl_window_create(mEglIntegration->nativeDisplay(),mSurface,size.width(),size.height(),visual); + mWaylandEglWindow = wl_egl_window_create(mSurface,size.width(),size.height(),visual); if (mGLContext) { EGLNativeWindowType window(reinterpret_cast(mWaylandEglWindow)); EGLSurface surface = eglCreateWindowSurface(mEglIntegration->eglDisplay(),mGLContext->eglConfig(),window,NULL); diff --git a/src/plugins/platforms/wayland/qwaylanddisplay.cpp b/src/plugins/platforms/wayland/qwaylanddisplay.cpp index 1c56561904..bd50e6454a 100644 --- a/src/plugins/platforms/wayland/qwaylanddisplay.cpp +++ b/src/plugins/platforms/wayland/qwaylanddisplay.cpp @@ -252,17 +252,17 @@ void QWaylandDisplay::displayHandleGlobal(uint32_t id, { Q_UNUSED(version); - if (interface == "output") { - struct wl_output *output = wl_output_create(mDisplay, id); + if (interface == "wl_output") { + struct wl_output *output = wl_output_create(mDisplay, id, 1); wl_output_add_listener(output, &outputListener, this); - } else if (interface == "compositor") { - mCompositor = wl_compositor_create(mDisplay, id); - } else if (interface == "shm") { - mShm = wl_shm_create(mDisplay, id); - } else if (interface == "shell"){ - mShell = wl_shell_create(mDisplay, id); + } else if (interface == "wl_compositor") { + mCompositor = wl_compositor_create(mDisplay, id, 1); + } else if (interface == "wl_shm") { + mShm = wl_shm_create(mDisplay, id, 1); + } else if (interface == "wl_shell"){ + mShell = wl_shell_create(mDisplay, id, 1); wl_shell_add_listener(mShell, &shellListener, this); - } else if (interface == "input_device") { + } else if (interface == "wl_input_device") { QWaylandInputDevice *inputDevice = new QWaylandInputDevice(mDisplay, id); mInputDevices.append(inputDevice); diff --git a/src/plugins/platforms/wayland/qwaylandinputdevice.cpp b/src/plugins/platforms/wayland/qwaylandinputdevice.cpp index 2d7df1d613..f9e7c95861 100644 --- a/src/plugins/platforms/wayland/qwaylandinputdevice.cpp +++ b/src/plugins/platforms/wayland/qwaylandinputdevice.cpp @@ -61,7 +61,7 @@ QWaylandInputDevice::QWaylandInputDevice(struct wl_display *display, uint32_t id) : mDisplay(display) - , mInputDevice(wl_input_device_create(display, id)) + , mInputDevice(wl_input_device_create(display, id, 1)) , mPointerFocus(NULL) , mKeyboardFocus(NULL) , mButtons(0) From 03aafc9d48300ba75da4bf4a8710783bc63ad53c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Tue, 3 May 2011 08:57:49 +0200 Subject: [PATCH 35/53] Fix Wayland plugin so it works with the wayland bind api This is mostly for the xcomposite api, but also we needed to readEvents after doing a connect (cherry picked from commit 16c054125949b8f8ceec9626156d8790254a63a2) --- .../qwaylandxcompositeeglintegration.cpp | 4 +- .../qwaylandxcompositeglxintegration.cpp | 4 +- .../wayland-xcomposite-client-protocol.h | 54 ++++++------------- .../wayland-xcomposite-protocol.c | 10 ++-- .../platforms/wayland/qwaylanddisplay.cpp | 4 +- 5 files changed, 26 insertions(+), 50 deletions(-) diff --git a/src/plugins/platforms/wayland/gl_integration/xcomposite_egl/qwaylandxcompositeeglintegration.cpp b/src/plugins/platforms/wayland/gl_integration/xcomposite_egl/qwaylandxcompositeeglintegration.cpp index 95b4112cdc..7537b52d59 100644 --- a/src/plugins/platforms/wayland/gl_integration/xcomposite_egl/qwaylandxcompositeeglintegration.cpp +++ b/src/plugins/platforms/wayland/gl_integration/xcomposite_egl/qwaylandxcompositeeglintegration.cpp @@ -111,9 +111,9 @@ const struct wl_xcomposite_listener QWaylandXCompositeEGLIntegration::xcomposite void QWaylandXCompositeEGLIntegration::wlDisplayHandleGlobal(wl_display *display, uint32_t id, const char *interface, uint32_t version, void *data) { Q_UNUSED(version); - if (strcmp(interface, "xcomposite") == 0) { + if (strcmp(interface, "wl_xcomposite") == 0) { QWaylandXCompositeEGLIntegration *integration = static_cast(data); - integration->mWaylandComposite = wl_xcomposite_create(display,id); + integration->mWaylandComposite = wl_xcomposite_create(display,id,1); wl_xcomposite_add_listener(integration->mWaylandComposite,&xcomposite_listener,integration); } diff --git a/src/plugins/platforms/wayland/gl_integration/xcomposite_glx/qwaylandxcompositeglxintegration.cpp b/src/plugins/platforms/wayland/gl_integration/xcomposite_glx/qwaylandxcompositeglxintegration.cpp index 43c0135c6e..5cb6ef336b 100644 --- a/src/plugins/platforms/wayland/gl_integration/xcomposite_glx/qwaylandxcompositeglxintegration.cpp +++ b/src/plugins/platforms/wayland/gl_integration/xcomposite_glx/qwaylandxcompositeglxintegration.cpp @@ -106,9 +106,9 @@ const struct wl_xcomposite_listener QWaylandXCompositeGLXIntegration::xcomposite void QWaylandXCompositeGLXIntegration::wlDisplayHandleGlobal(wl_display *display, uint32_t id, const char *interface, uint32_t version, void *data) { Q_UNUSED(version); - if (strcmp(interface, "xcomposite") == 0) { + if (strcmp(interface, "wl_xcomposite") == 0) { QWaylandXCompositeGLXIntegration *integration = static_cast(data); - integration->mWaylandComposite = wl_xcomposite_create(display,id); + integration->mWaylandComposite = wl_xcomposite_create(display,id,1); wl_xcomposite_add_listener(integration->mWaylandComposite,&xcomposite_listener,integration); } diff --git a/src/plugins/platforms/wayland/gl_integration/xcomposite_share/wayland-xcomposite-client-protocol.h b/src/plugins/platforms/wayland/gl_integration/xcomposite_share/wayland-xcomposite-client-protocol.h index 72376e1dcb..85da7a9521 100644 --- a/src/plugins/platforms/wayland/gl_integration/xcomposite_share/wayland-xcomposite-client-protocol.h +++ b/src/plugins/platforms/wayland/gl_integration/xcomposite_share/wayland-xcomposite-client-protocol.h @@ -39,7 +39,6 @@ ** ****************************************************************************/ - #ifndef XCOMPOSITE_CLIENT_PROTOCOL_H #define XCOMPOSITE_CLIENT_PROTOCOL_H @@ -55,84 +54,63 @@ struct wl_client; struct wl_xcomposite; -struct wl_proxy; - -extern void -wl_proxy_marshal(struct wl_proxy *p, uint32_t opcode, ...); -extern struct wl_proxy * -wl_proxy_create(struct wl_proxy *factory, - const struct wl_interface *interface); -extern struct wl_proxy * -wl_proxy_create_for_id(struct wl_display *display, - const struct wl_interface *interface, uint32_t id); -extern void -wl_proxy_destroy(struct wl_proxy *proxy); - -extern int -wl_proxy_add_listener(struct wl_proxy *proxy, - void (**implementation)(void), void *data); - -extern void -wl_proxy_set_user_data(struct wl_proxy *proxy, void *user_data); - -extern void * -wl_proxy_get_user_data(struct wl_proxy *proxy); - extern const struct wl_interface wl_xcomposite_interface; struct wl_xcomposite_listener { void (*root)(void *data, - struct wl_xcomposite *xcomposite, + struct wl_xcomposite *wl_xcomposite, const char *display_name, uint32_t root_window); }; static inline int -wl_xcomposite_add_listener(struct wl_xcomposite *xcomposite, - const struct wl_xcomposite_listener *listener, void *data) +wl_xcomposite_add_listener(struct wl_xcomposite *wl_xcomposite, + const struct wl_xcomposite_listener *listener, void *data) { - return wl_proxy_add_listener((struct wl_proxy *) xcomposite, + return wl_proxy_add_listener((struct wl_proxy *) wl_xcomposite, (void (**)(void)) listener, data); } #define WL_XCOMPOSITE_CREATE_BUFFER 0 static inline struct wl_xcomposite * -wl_xcomposite_create(struct wl_display *display, uint32_t id) +wl_xcomposite_create(struct wl_display *display, uint32_t id, uint32_t version) { + wl_display_bind(display, id, "wl_xcomposite", version); + return (struct wl_xcomposite *) wl_proxy_create_for_id(display, &wl_xcomposite_interface, id); } static inline void -wl_xcomposite_set_user_data(struct wl_xcomposite *xcomposite, void *user_data) +wl_xcomposite_set_user_data(struct wl_xcomposite *wl_xcomposite, void *user_data) { - wl_proxy_set_user_data((struct wl_proxy *) xcomposite, user_data); + wl_proxy_set_user_data((struct wl_proxy *) wl_xcomposite, user_data); } static inline void * -wl_xcomposite_get_user_data(struct wl_xcomposite *xcomposite) +wl_xcomposite_get_user_data(struct wl_xcomposite *wl_xcomposite) { - return wl_proxy_get_user_data((struct wl_proxy *) xcomposite); + return wl_proxy_get_user_data((struct wl_proxy *) wl_xcomposite); } static inline void -wl_xcomposite_destroy(struct wl_xcomposite *xcomposite) +wl_xcomposite_destroy(struct wl_xcomposite *wl_xcomposite) { - wl_proxy_destroy((struct wl_proxy *) xcomposite); + wl_proxy_destroy((struct wl_proxy *) wl_xcomposite); } static inline struct wl_buffer * -wl_xcomposite_create_buffer(struct wl_xcomposite *xcomposite, uint32_t x_window, int width, int height, struct wl_visual *visual) +wl_xcomposite_create_buffer(struct wl_xcomposite *wl_xcomposite, uint32_t x_window, int width, int height, struct wl_visual *visual) { struct wl_proxy *id; - id = wl_proxy_create((struct wl_proxy *) xcomposite, + id = wl_proxy_create((struct wl_proxy *) wl_xcomposite, &wl_buffer_interface); if (!id) return NULL; - wl_proxy_marshal((struct wl_proxy *) xcomposite, + wl_proxy_marshal((struct wl_proxy *) wl_xcomposite, WL_XCOMPOSITE_CREATE_BUFFER, id, x_window, width, height, visual); return (struct wl_buffer *) id; diff --git a/src/plugins/platforms/wayland/gl_integration/xcomposite_share/wayland-xcomposite-protocol.c b/src/plugins/platforms/wayland/gl_integration/xcomposite_share/wayland-xcomposite-protocol.c index 5c966fda46..a1b63254cb 100644 --- a/src/plugins/platforms/wayland/gl_integration/xcomposite_share/wayland-xcomposite-protocol.c +++ b/src/plugins/platforms/wayland/gl_integration/xcomposite_share/wayland-xcomposite-protocol.c @@ -43,17 +43,17 @@ #include #include "wayland-util.h" -static const struct wl_message xcomposite_requests[] = { +static const struct wl_message wl_xcomposite_requests[] = { { "create_buffer", "nuiio" }, }; -static const struct wl_message xcomposite_events[] = { +static const struct wl_message wl_xcomposite_events[] = { { "root", "su" }, }; WL_EXPORT const struct wl_interface wl_xcomposite_interface = { - "xcomposite", 1, - ARRAY_LENGTH(xcomposite_requests), xcomposite_requests, - ARRAY_LENGTH(xcomposite_events), xcomposite_events, + "wl_xcomposite", 1, + ARRAY_LENGTH(wl_xcomposite_requests), wl_xcomposite_requests, + ARRAY_LENGTH(wl_xcomposite_events), wl_xcomposite_events, }; diff --git a/src/plugins/platforms/wayland/qwaylanddisplay.cpp b/src/plugins/platforms/wayland/qwaylanddisplay.cpp index bd50e6454a..876b46ae9a 100644 --- a/src/plugins/platforms/wayland/qwaylanddisplay.cpp +++ b/src/plugins/platforms/wayland/qwaylanddisplay.cpp @@ -126,6 +126,7 @@ QWaylandDisplay::QWaylandDisplay(void) #ifdef QT_WAYLAND_GL_SUPPORT mEglIntegration = QWaylandGLIntegration::createGLIntegration(this); #endif + blockingReadEvents(); qRegisterMetaType("uint32_t"); @@ -216,9 +217,6 @@ void QWaylandDisplay::outputHandleGeometry(void *data, int32_t x, int32_t y, int32_t width, int32_t height) { - //call back function called from another thread; - //but its safe to call createScreen from another thread since - //QWaylandScreen does a moveToThread QWaylandDisplay *waylandDisplay = static_cast(data); QRect outputRect = QRect(x, y, width, height); waylandDisplay->createNewScreen(output,outputRect); From d8c6e2773f2161b3070809254c3fb9f9768bcc09 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Tue, 3 May 2011 13:00:50 +0200 Subject: [PATCH 36/53] Remove warnings (cherry picked from commit 9625c564877414695a9706acf34bc8719018ef06) --- src/gui/kernel/qplatformintegration_qpa.cpp | 1 + src/gui/kernel/qplatformwindow_qpa.cpp | 2 +- src/plugins/platforms/wayland/qwaylandwindow.cpp | 1 + 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/gui/kernel/qplatformintegration_qpa.cpp b/src/gui/kernel/qplatformintegration_qpa.cpp index d559c53355..8ff12ebf9c 100644 --- a/src/gui/kernel/qplatformintegration_qpa.cpp +++ b/src/gui/kernel/qplatformintegration_qpa.cpp @@ -214,6 +214,7 @@ QPlatformNativeInterface * QPlatformIntegration::nativeInterface() const bool QPlatformIntegration::hasCapability(Capability cap) const { + Q_UNUSED(cap); return false; } diff --git a/src/gui/kernel/qplatformwindow_qpa.cpp b/src/gui/kernel/qplatformwindow_qpa.cpp index 19bf7a9f29..f3654b676d 100644 --- a/src/gui/kernel/qplatformwindow_qpa.cpp +++ b/src/gui/kernel/qplatformwindow_qpa.cpp @@ -150,7 +150,7 @@ void QPlatformWindow::setParent(const QPlatformWindow *parent) /*! Reimplement to set the window title to \a title */ -void QPlatformWindow::setWindowTitle(const QString &title) {} +void QPlatformWindow::setWindowTitle(const QString &) {} /*! Reimplement to be able to let Qt rais windows to the top of the desktop diff --git a/src/plugins/platforms/wayland/qwaylandwindow.cpp b/src/plugins/platforms/wayland/qwaylandwindow.cpp index 6f522911d7..53f2f483e9 100644 --- a/src/plugins/platforms/wayland/qwaylandwindow.cpp +++ b/src/plugins/platforms/wayland/qwaylandwindow.cpp @@ -146,6 +146,7 @@ void QWaylandWindow::newSurfaceCreated() void QWaylandWindow::frameCallback(struct wl_surface *surface, void *data, uint32_t time) { Q_UNUSED(time); + Q_UNUSED(surface); QWaylandWindow *self = static_cast(data); self->mWaitingForFrameSync = false; } From 5bf2f85953a1df33ec942e49a9f72e0d9742bd54 Mon Sep 17 00:00:00 2001 From: Eskil Abrahamsen Blomfeldt Date: Wed, 4 May 2011 09:10:45 +0200 Subject: [PATCH 37/53] Compile on Windows The SPI_FONTSMOOTHINGCONTRAST macro is not defined everywhere. When the code was refactored, the workaround for this was lost. This resubmits the work-around to make it compile. Reviewed-by: Samuel (cherry picked from commit 4c3630c1fcd2b3008f540a8906a19c533604f36a) --- src/gui/kernel/qapplication_win.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/kernel/qapplication_win.cpp b/src/gui/kernel/qapplication_win.cpp index 1a490c9979..72a05afbd0 100644 --- a/src/gui/kernel/qapplication_win.cpp +++ b/src/gui/kernel/qapplication_win.cpp @@ -656,7 +656,7 @@ static void qt_win_read_cleartype_settings() #endif int winSmooth; - if (SystemParametersInfo(SPI_GETFONTSMOOTHINGCONTRAST, 0, &winSmooth, 0)) { + if (SystemParametersInfo(0x200C /* SPI_GETFONTSMOOTHINGCONTRAST */, 0, &winSmooth, 0)) { qt_fontsmoothing_gamma = winSmooth / qreal(1000.0); } else { qt_fontsmoothing_gamma = 1.0; From 539602d43a7214d4dbd182a629c5142af658129f Mon Sep 17 00:00:00 2001 From: Gunnar Sletta Date: Wed, 4 May 2011 10:00:42 +0200 Subject: [PATCH 38/53] Make it possible for animation driver to specify the advance time delta --- src/corelib/animation/qabstractanimation.cpp | 68 ++++++++++++++------ src/corelib/animation/qabstractanimation.h | 15 +++-- src/corelib/animation/qabstractanimation_p.h | 3 +- 3 files changed, 62 insertions(+), 24 deletions(-) diff --git a/src/corelib/animation/qabstractanimation.cpp b/src/corelib/animation/qabstractanimation.cpp index f399d7c4cf..7d74de8e44 100644 --- a/src/corelib/animation/qabstractanimation.cpp +++ b/src/corelib/animation/qabstractanimation.cpp @@ -201,16 +201,17 @@ void QUnifiedTimer::ensureTimerUpdate() { QUnifiedTimer *inst = QUnifiedTimer::instance(false); if (inst && inst->isPauseTimerActive) - inst->updateAnimationsTime(); + inst->updateAnimationsTime(-1); } -void QUnifiedTimer::updateAnimationsTime() +void QUnifiedTimer::updateAnimationsTime(qint64 timeStep) { //setCurrentTime can get this called again while we're the for loop. At least with pauseAnimations if(insideTick) return; - qint64 totalElapsed = time.elapsed(); + qint64 totalElapsed = timeStep >= 0 ? timeStep : time.elapsed(); + // ignore consistentTiming in case the pause timer is active int delta = (consistentTiming && !isPauseTimerActive) ? timingInterval : totalElapsed - lastTick; @@ -303,7 +304,7 @@ void QUnifiedTimer::timerEvent(QTimerEvent *event) if (event->timerId() == animationTimer.timerId()) { // update current time on all top level animations - updateAnimationsTime(); + updateAnimationsTime(-1); restartAnimationTimer(); } } @@ -462,37 +463,56 @@ QAnimationDriver::~QAnimationDriver() uninstall(); } -/*! - Advances the animation based on the current time. This function should - be continuously called by the driver while the animation is running. - \internal + +/*! + Advances the animation based to the specified \a timeStep. This function should + be continuously called by the driver subclasses while the animation is running. + + If \a timeStep is positive, it will be used as the current time in the + calculations; otherwise, the current clock time will be used. */ -void QAnimationDriver::advance() + +void QAnimationDriver::advanceAnimation(qint64 timeStep) { QUnifiedTimer *instance = QUnifiedTimer::instance(); // update current time on all top level animations - instance->updateAnimationsTime(); + instance->updateAnimationsTime(timeStep); instance->restartAnimationTimer(); } + +/*! + Advances the animation. This function should be continously called + by the driver while the animation is running. + */ + +void QAnimationDriver::advance() +{ + advanceAnimation(-1); +} + + + /*! Installs this animation driver. The animation driver is thread local and will only apply for the thread its installed in. - - \internal */ + void QAnimationDriver::install() { QUnifiedTimer *timer = QUnifiedTimer::instance(true); timer->installAnimationDriver(this); } + + /*! Uninstalls this animation driver. */ + void QAnimationDriver::uninstall() { QUnifiedTimer *timer = QUnifiedTimer::instance(true); @@ -509,7 +529,7 @@ void QAnimationDriver::start() { Q_D(QAnimationDriver); if (!d->running) { - started(); + emit started(); d->running = true; } } @@ -519,16 +539,28 @@ void QAnimationDriver::stop() { Q_D(QAnimationDriver); if (d->running) { - stopped(); + emit stopped(); d->running = false; } } + +/*! + \fn qint64 QAnimationDriver::elapsed() const + + Returns the number of milliseconds since the animations was started. + */ + +qint64 QAnimationDriver::elapsed() const +{ + return QUnifiedTimer::instance()->time.elapsed(); +} + /*! \fn QAnimationDriver::started() - This function is called by the animation framework to notify the driver - that it should start running. + This signal is emitted by the animation framework to notify the driver + that continous animation has started. \internal */ @@ -536,8 +568,8 @@ void QAnimationDriver::stop() /*! \fn QAnimationDriver::stopped() - This function is called by the animation framework to notify the driver - that it should stop running. + This signal is emitted by the animation framework to notify the driver + that continous animation has stopped. \internal */ diff --git a/src/corelib/animation/qabstractanimation.h b/src/corelib/animation/qabstractanimation.h index a0cb0f93d0..91282066a6 100644 --- a/src/corelib/animation/qabstractanimation.h +++ b/src/corelib/animation/qabstractanimation.h @@ -143,24 +143,29 @@ public: QAnimationDriver(QObject *parent = 0); ~QAnimationDriver(); - void advance(); + virtual void advance(); void install(); void uninstall(); bool isRunning() const; + qint64 elapsed() const; + +Q_SIGNALS: + void started(); + void stopped(); + protected: - virtual void started() {}; - virtual void stopped() {}; + void advanceAnimation(qint64 timeStep = -1); + virtual void start(); + virtual void stop(); QAnimationDriver(QAnimationDriverPrivate &dd, QObject *parent = 0); private: friend class QUnifiedTimer; - void start(); - void stop(); }; diff --git a/src/corelib/animation/qabstractanimation_p.h b/src/corelib/animation/qabstractanimation_p.h index 1cba4644a8..de26987721 100644 --- a/src/corelib/animation/qabstractanimation_p.h +++ b/src/corelib/animation/qabstractanimation_p.h @@ -184,7 +184,7 @@ public: bool canUninstallAnimationDriver(QAnimationDriver *driver); void restartAnimationTimer(); - void updateAnimationsTime(); + void updateAnimationsTime(qint64 timeStep); //useful for profiling/debugging int runningAnimationCount() { return animations.count(); } @@ -194,6 +194,7 @@ protected: private: friend class QDefaultAnimationDriver; + friend class QAnimationDriver; QAnimationDriver *driver; QDefaultAnimationDriver defaultDriver; From 2e0003eda4783f69a40fb4b31e7084c761d9640d Mon Sep 17 00:00:00 2001 From: Eskil Abrahamsen Blomfeldt Date: Wed, 4 May 2011 10:52:20 +0200 Subject: [PATCH 39/53] Include pixel size of font in exported HTML from QTextDocument When you copy-pasted rich text in which the font size had been set using setPixelSize() the font size would be mysteriously forgotten. The pixel size property in QTextCharFormat was added ad hoc, and not integrated in the HTML exporter. Task-number: QT-4792 Reviewed-by: Gunnar (cherry picked from commit 5aa5c2e2935c1829cc6965198968699f17c24ec0) --- src/gui/text/qtextdocument.cpp | 8 ++++++ .../auto/qtextdocument/tst_qtextdocument.cpp | 26 +++++++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/src/gui/text/qtextdocument.cpp b/src/gui/text/qtextdocument.cpp index 6dbd755d93..7d84e505a7 100644 --- a/src/gui/text/qtextdocument.cpp +++ b/src/gui/text/qtextdocument.cpp @@ -2076,6 +2076,10 @@ QString QTextHtmlExporter::toHtml(const QByteArray &encoding, ExportMode mode) html += QLatin1String(" font-size:"); html += QString::number(defaultCharFormat.fontPointSize()); html += QLatin1String("pt;"); + } else if (defaultCharFormat.hasProperty(QTextFormat::FontPixelSize)) { + html += QLatin1String(" font-size:"); + html += QString::number(defaultCharFormat.intProperty(QTextFormat::FontPixelSize)); + html += QLatin1String("px;"); } html += QLatin1String(" font-weight:"); @@ -2156,6 +2160,10 @@ bool QTextHtmlExporter::emitCharFormatStyle(const QTextCharFormat &format) html += QLatin1Char(';'); attributesEmitted = true; } + } else if (format.hasProperty(QTextFormat::FontPixelSize)) { + html += QLatin1String(" font-size:"); + html += QString::number(format.intProperty(QTextFormat::FontPixelSize)); + html += QLatin1String("px;"); } if (format.hasProperty(QTextFormat::FontWeight) diff --git a/tests/auto/qtextdocument/tst_qtextdocument.cpp b/tests/auto/qtextdocument/tst_qtextdocument.cpp index 6675c99d23..26fa43d137 100644 --- a/tests/auto/qtextdocument/tst_qtextdocument.cpp +++ b/tests/auto/qtextdocument/tst_qtextdocument.cpp @@ -180,6 +180,8 @@ private slots: void escape_data(); void escape(); + void copiedFontSize(); + private: void backgroundImage_checkExpectedHtml(const QTextDocument &doc); @@ -2734,5 +2736,29 @@ void tst_QTextDocument::escape() QCOMPARE(Qt::escape(original), expected); } +void tst_QTextDocument::copiedFontSize() +{ + QTextDocument documentInput; + QTextDocument documentOutput; + + QFont fontInput; + fontInput.setPixelSize(24); // With pixels font size is not transfered in html + + QTextCursor cursorInput(&documentInput); + QTextCharFormat formatInput = cursorInput.charFormat(); + formatInput.setFont(fontInput); + cursorInput.insertText("Should be the same font", formatInput); + cursorInput.select(QTextCursor::Document); + + QTextDocumentFragment fragmentInput(cursorInput); + QString html = fragmentInput.toHtml(); + + QTextCursor cursorOutput(&documentOutput); + QTextDocumentFragment fragmentOutput = QTextDocumentFragment::fromHtml(html); + cursorOutput.insertFragment(fragmentOutput); + + QCOMPARE(cursorOutput.charFormat().font().pixelSize(), 24); +} + QTEST_MAIN(tst_QTextDocument) #include "tst_qtextdocument.moc" From 2a8d50ed6a8e3ca6a03b407028ea175460af6e2f Mon Sep 17 00:00:00 2001 From: Jiang Jiang Date: Mon, 2 May 2011 14:13:06 +0200 Subject: [PATCH 40/53] Add required font metrics functions to QRawFont Reviewed-by: Eskil (cherry picked from commit 2c8df8bfb679885c3cbd2ee02f5e4053fdd554c2) --- src/gui/text/qrawfont.cpp | 52 +++++++++++++++++++++++++++++++++++++++ src/gui/text/qrawfont.h | 4 +++ 2 files changed, 56 insertions(+) diff --git a/src/gui/text/qrawfont.cpp b/src/gui/text/qrawfont.cpp index 1bce909b0e..46c892c500 100644 --- a/src/gui/text/qrawfont.cpp +++ b/src/gui/text/qrawfont.cpp @@ -301,6 +301,58 @@ qreal QRawFont::descent() const return d->fontEngine->descent().toReal(); } +/*! + Returns the xHeight of this QRawFont in pixel units. + + \sa QFontMetricsF::xHeight() +*/ +qreal QRawFont::xHeight() const +{ + if (!isValid()) + return 0.0; + + return d->fontEngine->xHeight().toReal(); +} + +/*! + Returns the leading of this QRawFont in pixel units. + + \sa QFontMetricsF::leading() +*/ +qreal QRawFont::leading() const +{ + if (!isValid()) + return 0.0; + + return d->fontEngine->leading().toReal(); +} + +/*! + Returns the average character width of this QRawFont in pixel units. + + \sa QFontMetricsF::averageCharWidth() +*/ +qreal QRawFont::averageCharWidth() const +{ + if (!isValid()) + return 0.0; + + return d->fontEngine->averageCharWidth().toReal(); +} + +/*! + Returns the width of the widest character in the font. + + \sa QFontMetricsF::maxWidth() +*/ +qreal QRawFont::maxCharWidth() const +{ + if (!isValid()) + return 0.0; + + return d->fontEngine->maxCharWidth(); +} + /*! Returns the pixel size set for this QRawFont. The pixel size affects how glyphs are rasterized, the size of glyphs returned by pathForGlyph(), and is used to convert diff --git a/src/gui/text/qrawfont.h b/src/gui/text/qrawfont.h index 56aeefc8ff..900c07a7dd 100644 --- a/src/gui/text/qrawfont.h +++ b/src/gui/text/qrawfont.h @@ -103,6 +103,10 @@ public: qreal ascent() const; qreal descent() const; + qreal leading() const; + qreal xHeight() const; + qreal averageCharWidth() const; + qreal maxCharWidth() const; qreal unitsPerEm() const; From edf55f7d500a18c04e1f7244958491c79e7674cf Mon Sep 17 00:00:00 2001 From: Jiang Jiang Date: Tue, 3 May 2011 13:50:10 +0200 Subject: [PATCH 41/53] Remove QFontEngineFT::loadGlyphMetrics It is no longer used and was accidentally merged back in. Reviewed-by: Eskil (cherry picked from commit 782535ac548c582542bd1c17207e288e816870a8) --- src/gui/text/qfontengine_ft.cpp | 100 -------------------------------- src/gui/text/qfontengine_ft_p.h | 1 - 2 files changed, 101 deletions(-) diff --git a/src/gui/text/qfontengine_ft.cpp b/src/gui/text/qfontengine_ft.cpp index 58bcca87b7..237cde4ed1 100644 --- a/src/gui/text/qfontengine_ft.cpp +++ b/src/gui/text/qfontengine_ft.cpp @@ -803,106 +803,6 @@ int QFontEngineFT::loadFlags(QGlyphSet *set, GlyphFormat format, int flags, return load_flags; } -QFontEngineFT::Glyph *QFontEngineFT::loadGlyphMetrics(QGlyphSet *set, uint glyph, GlyphFormat format) const -{ - Glyph *g = set->getGlyph(glyph); - if (g && g->format == format) - return g; - - bool hsubpixel = false; - int vfactor = 1; - int load_flags = loadFlags(set, format, 0, hsubpixel, vfactor); - - // apply our matrix to this, but note that the metrics will not be affected by this. - FT_Face face = lockFace(); - FT_Matrix matrix = this->matrix; - FT_Matrix_Multiply(&set->transformationMatrix, &matrix); - FT_Set_Transform(face, &matrix, 0); - freetype->matrix = matrix; - - bool transform = matrix.xx != 0x10000 || matrix.yy != 0x10000 || matrix.xy != 0 || matrix.yx != 0; - if (transform) - load_flags |= FT_LOAD_NO_BITMAP; - - FT_Error err = FT_Load_Glyph(face, glyph, load_flags); - if (err && (load_flags & FT_LOAD_NO_BITMAP)) { - load_flags &= ~FT_LOAD_NO_BITMAP; - err = FT_Load_Glyph(face, glyph, load_flags); - } - if (err == FT_Err_Too_Few_Arguments) { - // this is an error in the bytecode interpreter, just try to run without it - load_flags |= FT_LOAD_FORCE_AUTOHINT; - err = FT_Load_Glyph(face, glyph, load_flags); - } - if (err != FT_Err_Ok) - qWarning("load glyph failed err=%x face=%p, glyph=%d", err, face, glyph); - - unlockFace(); - if (set->outline_drawing) - return 0; - - if (!g) { - g = new Glyph; - g->uploadedToServer = false; - g->data = 0; - } - - FT_GlyphSlot slot = face->glyph; - if (embolden) Q_FT_GLYPHSLOT_EMBOLDEN(slot); - int left = slot->metrics.horiBearingX; - int right = slot->metrics.horiBearingX + slot->metrics.width; - int top = slot->metrics.horiBearingY; - int bottom = slot->metrics.horiBearingY - slot->metrics.height; - if (transform && slot->format != FT_GLYPH_FORMAT_BITMAP) { // freetype doesn't apply the transformation on the metrics - int l, r, t, b; - FT_Vector vector; - vector.x = left; - vector.y = top; - FT_Vector_Transform(&vector, &matrix); - l = r = vector.x; - t = b = vector.y; - vector.x = right; - vector.y = top; - FT_Vector_Transform(&vector, &matrix); - if (l > vector.x) l = vector.x; - if (r < vector.x) r = vector.x; - if (t < vector.y) t = vector.y; - if (b > vector.y) b = vector.y; - vector.x = right; - vector.y = bottom; - FT_Vector_Transform(&vector, &matrix); - if (l > vector.x) l = vector.x; - if (r < vector.x) r = vector.x; - if (t < vector.y) t = vector.y; - if (b > vector.y) b = vector.y; - vector.x = left; - vector.y = bottom; - FT_Vector_Transform(&vector, &matrix); - if (l > vector.x) l = vector.x; - if (r < vector.x) r = vector.x; - if (t < vector.y) t = vector.y; - if (b > vector.y) b = vector.y; - left = l; - right = r; - top = t; - bottom = b; - } - left = FLOOR(left); - right = CEIL(right); - bottom = FLOOR(bottom); - top = CEIL(top); - - g->linearAdvance = face->glyph->linearHoriAdvance >> 10; - g->width = TRUNC(right-left); - g->height = TRUNC(top-bottom); - g->x = TRUNC(left); - g->y = TRUNC(top); - g->advance = TRUNC(ROUND(face->glyph->advance.x)); - g->format = Format_None; - - return g; -} - QFontEngineFT::Glyph *QFontEngineFT::loadGlyph(QGlyphSet *set, uint glyph, QFixed subPixelPosition, GlyphFormat format, diff --git a/src/gui/text/qfontengine_ft_p.h b/src/gui/text/qfontengine_ft_p.h index 2c335f3cd3..41064715b1 100644 --- a/src/gui/text/qfontengine_ft_p.h +++ b/src/gui/text/qfontengine_ft_p.h @@ -343,7 +343,6 @@ protected: private: friend class QFontEngineFTRawFont; - QFontEngineFT::Glyph *loadGlyphMetrics(QGlyphSet *set, uint glyph, GlyphFormat format) const; int loadFlags(QGlyphSet *set, GlyphFormat format, int flags, bool &hsubpixel, int &vfactor) const; GlyphFormat defaultFormat; From 89cf89c51d1355467bd749c02cea49dfd08e841f Mon Sep 17 00:00:00 2001 From: Jiang Jiang Date: Wed, 4 May 2011 15:44:32 +0200 Subject: [PATCH 42/53] Fix framework absolute path issue module.prf incorrectly overwrites INSTALLS which results the absolute soname not prepended. Reviewed-by: Marius Storm-Olsen --- mkspecs/features/module.prf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mkspecs/features/module.prf b/mkspecs/features/module.prf index 248f7f516a..85639f0345 100644 --- a/mkspecs/features/module.prf +++ b/mkspecs/features/module.prf @@ -1,7 +1,7 @@ !isEmpty(MODULE_PRI) { pritarget.path = $$[QT_INSTALL_DATA]/mkspecs/modules pritarget.files = $$MODULE_PRI - INSTALLS = pritarget + INSTALLS += pritarget } else { warning("Project $$basename(_PRO_FILE_) is a module, but has not defined MODULE_PRI, which is required for Qt to expose the module to other projects") } From 10a0cc3da20458b4d915ad71a02ed7cbc1d8a5e7 Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Wed, 4 May 2011 16:19:35 +0200 Subject: [PATCH 43/53] BC cleanup in uitools. Remove virtual functions obsoleted by new resource handling in Qt Designer 4.4. Remove static hash of private objects for formbuilder. Requires fd61c9b24d27452df3eb478a81d7e7725fe6f5b4 in qttools. Rubber-stamped-by: axis --- src/uitools/quiloader.cpp | 2 +- tools/uilib/abstractformbuilder.cpp | 142 +++++++--------------------- tools/uilib/abstractformbuilder.h | 19 +--- tools/uilib/formbuilder.cpp | 46 ++++----- tools/uilib/formbuilder.h | 5 - tools/uilib/formbuilderextra.cpp | 31 +----- tools/uilib/formbuilderextra_p.h | 24 +++-- 7 files changed, 84 insertions(+), 185 deletions(-) diff --git a/src/uitools/quiloader.cpp b/src/uitools/quiloader.cpp index 13ee48aa45..7f39b557ea 100644 --- a/src/uitools/quiloader.cpp +++ b/src/uitools/quiloader.cpp @@ -505,7 +505,7 @@ bool FormBuilderPrivate::addItem(DomWidget *ui_widget, QWidget *widget, QWidget // Check special cases. First: Custom container const QString className = QLatin1String(parentWidget->metaObject()->className()); - if (!QFormBuilderExtra::instance(this)->customWidgetAddPageMethod(className).isEmpty()) + if (!d->customWidgetAddPageMethod(className).isEmpty()) return true; const QFormBuilderStrings &strings = QFormBuilderStrings::instance(); diff --git a/tools/uilib/abstractformbuilder.cpp b/tools/uilib/abstractformbuilder.cpp index ecb43db89f..e850df8f37 100644 --- a/tools/uilib/abstractformbuilder.cpp +++ b/tools/uilib/abstractformbuilder.cpp @@ -165,9 +165,7 @@ public: /*! Constructs a new form builder.*/ -QAbstractFormBuilder::QAbstractFormBuilder() : - m_defaultMargin(INT_MIN), - m_defaultSpacing(INT_MIN) +QAbstractFormBuilder::QAbstractFormBuilder() : d(new QFormBuilderExtra) { setResourceBuilder(new QResourceBuilder()); setTextBuilder(new QTextBuilder()); @@ -177,10 +175,8 @@ QAbstractFormBuilder::QAbstractFormBuilder() : Destroys the form builder.*/ QAbstractFormBuilder::~QAbstractFormBuilder() { - QFormBuilderExtra::removeInstance(this); } - /*! \fn QWidget *QAbstractFormBuilder::load(QIODevice *device, QWidget *parent) @@ -229,11 +225,10 @@ QWidget *QAbstractFormBuilder::create(DomUI *ui, QWidget *parentWidget) { typedef QFormBuilderExtra::ButtonGroupHash ButtonGroupHash; - QFormBuilderExtra *formBuilderPrivate = QFormBuilderExtra::instance(this); - formBuilderPrivate->clear(); + d->clear(); if (const DomLayoutDefault *def = ui->elementLayoutDefault()) { - m_defaultMargin = def->hasAttributeMargin() ? def->attributeMargin() : INT_MIN; - m_defaultSpacing = def->hasAttributeSpacing() ? def->attributeSpacing() : INT_MIN; + d->m_defaultMargin = def->hasAttributeMargin() ? def->attributeMargin() : INT_MIN; + d->m_defaultSpacing = def->hasAttributeSpacing() ? def->attributeSpacing() : INT_MIN; } DomWidget *ui_widget = ui->elementWidget(); @@ -243,11 +238,11 @@ QWidget *QAbstractFormBuilder::create(DomUI *ui, QWidget *parentWidget) initialize(ui); if (const DomButtonGroups *domButtonGroups = ui->elementButtonGroups()) - formBuilderPrivate->registerButtonGroups(domButtonGroups); + d->registerButtonGroups(domButtonGroups); if (QWidget *widget = create(ui_widget, parentWidget)) { // Reparent button groups that were actually created to main container for them to be found in the signal/slot part - const ButtonGroupHash &buttonGroups = formBuilderPrivate->buttonGroups(); + const ButtonGroupHash &buttonGroups = d->buttonGroups(); if (!buttonGroups.empty()) { const ButtonGroupHash::const_iterator cend = buttonGroups.constEnd(); for (ButtonGroupHash::const_iterator it = buttonGroups.constBegin(); it != cend; ++it) @@ -257,12 +252,12 @@ QWidget *QAbstractFormBuilder::create(DomUI *ui, QWidget *parentWidget) createConnections(ui->elementConnections(), widget); createResources(ui->elementResources()); // maybe this should go first, before create()... applyTabStops(widget, ui->elementTabStops()); - formBuilderPrivate->applyInternalProperties(); + d->applyInternalProperties(); reset(); - formBuilderPrivate->clear(); + d->clear(); return widget; } - formBuilderPrivate->clear(); + d->clear(); return 0; } @@ -283,10 +278,9 @@ void QAbstractFormBuilder::initialize(const DomUI *ui) if (domCustomWidgets) { const DomCustomWidgetList customWidgets = domCustomWidgets->elementCustomWidget(); if (!customWidgets.empty()) { - QFormBuilderExtra *formBuilderPrivate = QFormBuilderExtra::instance(this); const DomCustomWidgetList::const_iterator cend = customWidgets.constEnd(); for (DomCustomWidgetList::const_iterator it = customWidgets.constBegin(); it != cend; ++it) - formBuilderPrivate->storeCustomWidgetData((*it)->elementClass(), *it); + d->storeCustomWidgetData((*it)->elementClass(), *it); } } } @@ -337,9 +331,9 @@ QWidget *QAbstractFormBuilder::create(DomWidget *ui_widget, QWidget *parentWidge sep->setSeparator(true); w->addAction(sep); addMenuAction(sep); - } else if (QAction *a = m_actions.value(name)) { + } else if (QAction *a = d->m_actions.value(name)) { w->addAction(a); - } else if (QActionGroup *g = m_actionGroups.value(name)) { + } else if (QActionGroup *g = d->m_actionGroups.value(name)) { w->addActions(g->actions()); } else if (QMenu *menu = w->findChild(name)) { w->addAction(menu->menuAction()); @@ -351,9 +345,8 @@ QWidget *QAbstractFormBuilder::create(DomWidget *ui_widget, QWidget *parentWidge loadExtraInfo(ui_widget, w, parentWidget); #ifndef QT_FORMBUILDER_NO_SCRIPT QString scriptErrorMessage; - QFormBuilderExtra *extra = QFormBuilderExtra::instance(this); - extra->formScriptRunner().run(ui_widget, - extra->customWidgetScript(ui_widget->attributeClass()), + d->formScriptRunner().run(ui_widget, + d->customWidgetScript(ui_widget->attributeClass()), w, children, &scriptErrorMessage); #endif addItem(ui_widget, w, parentWidget); @@ -388,7 +381,7 @@ QAction *QAbstractFormBuilder::create(DomAction *ui_action, QObject *parent) if (!a) return 0; - m_actions.insert(ui_action->attributeName(), a); + d->m_actions.insert(ui_action->attributeName(), a); applyProperties(a, ui_action->elementProperty()); return a; } @@ -401,7 +394,7 @@ QActionGroup *QAbstractFormBuilder::create(DomActionGroup *ui_action_group, QObj QActionGroup *a = createActionGroup(parent, ui_action_group->attributeName()); if (!a) return 0; - m_actionGroups.insert(ui_action_group->attributeName(), a); + d->m_actionGroups.insert(ui_action_group->attributeName(), a); applyProperties(a, ui_action_group->elementProperty()); foreach (DomAction *ui_action, ui_action_group->elementAction()) { @@ -446,7 +439,7 @@ bool QAbstractFormBuilder::addItem(DomWidget *ui_widget, QWidget *widget, QWidge return true; // Check special cases. First: Custom container const QString className = QLatin1String(parentWidget->metaObject()->className()); - const QString addPageMethod = QFormBuilderExtra::instance(this)->customWidgetAddPageMethod(className); + const QString addPageMethod = d->customWidgetAddPageMethod(className); if (!addPageMethod.isEmpty()) { // If this fails ( non-existent or non-slot), use ContainerExtension in Designer, else it can't be helped return QMetaObject::invokeMethod(parentWidget, addPageMethod.toUtf8().constData(), Qt::DirectConnection, Q_ARG(QWidget*, widget)); @@ -968,14 +961,12 @@ void QAbstractFormBuilder::applyProperties(QObject *o, const QList if (properties.empty()) return; - QFormBuilderExtra *fb = QFormBuilderExtra::instance(this); - const DomPropertyList::const_iterator cend = properties.constEnd(); for (DomPropertyList::const_iterator it = properties.constBegin(); it != cend; ++it) { const QVariant v = toVariant(o->metaObject(), *it); if (!v.isNull()) { const QString attributeName = (*it)->attributeName(); - if (!fb->applyPropertyInternally(o, attributeName, v)) + if (!d->applyPropertyInternally(o, attributeName, v)) o->setProperty(attributeName.toUtf8(), v); } } @@ -990,7 +981,7 @@ void QAbstractFormBuilder::applyProperties(QObject *o, const QList bool QAbstractFormBuilder::applyPropertyInternally(QObject *o, const QString &propertyName, const QVariant &value) { - return QFormBuilderExtra::instance(this)->applyPropertyInternally(o,propertyName, value); + return d->applyPropertyInternally(o,propertyName, value); } /*! @@ -1274,7 +1265,7 @@ void QAbstractFormBuilder::save(QIODevice *dev, QWidget *widget) ui->write(writer); writer.writeEndDocument(); - m_laidout.clear(); + d->m_laidout.clear(); delete ui; } @@ -1374,7 +1365,7 @@ DomWidget *QAbstractFormBuilder::createDom(QWidget *widget, DomWidget *ui_parent foreach (QObject *obj, children) { if (QWidget *childWidget = qobject_cast(obj)) { - if (m_laidout.contains(childWidget) || recursive == false) + if (d->m_laidout.contains(childWidget) || recursive == false) continue; if (QMenu *menu = qobject_cast(childWidget)) { @@ -1580,7 +1571,7 @@ DomLayoutItem *QAbstractFormBuilder::createDom(QLayoutItem *item, DomLayout *ui_ if (item->widget()) { ui_item->setElementWidget(createDom(item->widget(), ui_parentWidget)); - m_laidout.insert(item->widget(), true); + d->m_laidout.insert(item->widget(), true); } else if (item->layout()) { ui_item->setElementLayout(createDom(item->layout(), ui_layout, ui_parentWidget)); } else if (item->spacerItem()) { @@ -2369,7 +2360,7 @@ void QAbstractFormBuilder::saveItemViewExtraInfo(const QAbstractItemView *itemVi void QAbstractFormBuilder::setResourceBuilder(QResourceBuilder *builder) { - QFormBuilderExtra::instance(this)->setResourceBuilder(builder); + d->setResourceBuilder(builder); } /*! @@ -2379,7 +2370,7 @@ void QAbstractFormBuilder::setResourceBuilder(QResourceBuilder *builder) QResourceBuilder *QAbstractFormBuilder::resourceBuilder() const { - return QFormBuilderExtra::instance(this)->resourceBuilder(); + return d->resourceBuilder(); } /*! @@ -2389,7 +2380,7 @@ QResourceBuilder *QAbstractFormBuilder::resourceBuilder() const void QAbstractFormBuilder::setTextBuilder(QTextBuilder *builder) { - QFormBuilderExtra::instance(this)->setTextBuilder(builder); + d->setTextBuilder(builder); } /*! @@ -2399,7 +2390,7 @@ void QAbstractFormBuilder::setTextBuilder(QTextBuilder *builder) QTextBuilder *QAbstractFormBuilder::textBuilder() const { - return QFormBuilderExtra::instance(this)->textBuilder(); + return d->textBuilder(); } /*! @@ -2663,8 +2654,7 @@ void QAbstractFormBuilder::loadButtonExtraInfo(const DomWidget *ui_widget, QAbst if (groupName.isEmpty()) return; // Find entry - QFormBuilderExtra *extra = QFormBuilderExtra::instance(this); - ButtonGroupHash &buttonGroups = extra->buttonGroups(); + ButtonGroupHash &buttonGroups = d->buttonGroups(); ButtonGroupHash::iterator it = buttonGroups.find(groupName); if (it == buttonGroups.end()) { #ifdef QFORMINTERNAL_NAMESPACE // Suppress the warning when copying in Designer @@ -2796,75 +2786,13 @@ void QAbstractFormBuilder::loadExtraInfo(DomWidget *ui_widget, QWidget *widget, } } -/*! - \internal -*/ -QIcon QAbstractFormBuilder::nameToIcon(const QString &filePath, const QString &qrcPath) -{ - Q_UNUSED(filePath) - Q_UNUSED(qrcPath) - qWarning() << "QAbstractFormBuilder::nameToIcon() is obsoleted"; - return QIcon(); -} - -/*! - \internal -*/ -QString QAbstractFormBuilder::iconToFilePath(const QIcon &pm) const -{ - Q_UNUSED(pm) - qWarning() << "QAbstractFormBuilder::iconToFilePath() is obsoleted"; - return QString(); -} - -/*! - \internal -*/ -QString QAbstractFormBuilder::iconToQrcPath(const QIcon &pm) const -{ - Q_UNUSED(pm) - qWarning() << "QAbstractFormBuilder::iconToQrcPath() is obsoleted"; - return QString(); -} - -/*! - \internal -*/ -QPixmap QAbstractFormBuilder::nameToPixmap(const QString &filePath, const QString &qrcPath) -{ - Q_UNUSED(filePath) - Q_UNUSED(qrcPath) - qWarning() << "QAbstractFormBuilder::nameToPixmap() is obsoleted"; - return QPixmap(); -} - -/*! - \internal -*/ -QString QAbstractFormBuilder::pixmapToFilePath(const QPixmap &pm) const -{ - Q_UNUSED(pm) - qWarning() << "QAbstractFormBuilder::pixmapToFilePath() is obsoleted"; - return QString(); -} - -/*! - \internal -*/ -QString QAbstractFormBuilder::pixmapToQrcPath(const QPixmap &pm) const -{ - Q_UNUSED(pm) - qWarning() << "QAbstractFormBuilder::pixmapToQrcPath() is obsoleted"; - return QString(); -} - /*! Returns the current working directory of the form builder. \sa setWorkingDirectory() */ QDir QAbstractFormBuilder::workingDirectory() const { - return m_workingDirectory; + return d->m_workingDirectory; } /*! @@ -2874,7 +2802,7 @@ QDir QAbstractFormBuilder::workingDirectory() const \sa workingDirectory()*/ void QAbstractFormBuilder::setWorkingDirectory(const QDir &directory) { - m_workingDirectory = directory; + d->m_workingDirectory = directory; } /*! @@ -2948,11 +2876,11 @@ void QAbstractFormBuilder::addMenuAction(QAction *action) */ void QAbstractFormBuilder::reset() { - m_laidout.clear(); - m_actions.clear(); - m_actionGroups.clear(); - m_defaultMargin = INT_MIN; - m_defaultSpacing = INT_MIN; + d->m_laidout.clear(); + d->m_actions.clear(); + d->m_actionGroups.clear(); + d->m_defaultMargin = INT_MIN; + d->m_defaultSpacing = INT_MIN; } /*! @@ -3165,7 +3093,7 @@ QPixmap QAbstractFormBuilder::domPropertyToPixmap(const DomProperty* p) #ifndef QT_FORMBUILDER_NO_SCRIPT QFormScriptRunner *QAbstractFormBuilder::formScriptRunner() const { - return &(QFormBuilderExtra::instance(this)->formScriptRunner()); + return &(d->formScriptRunner()); } #endif diff --git a/tools/uilib/abstractformbuilder.h b/tools/uilib/abstractformbuilder.h index 2f99b36515..4c22570932 100644 --- a/tools/uilib/abstractformbuilder.h +++ b/tools/uilib/abstractformbuilder.h @@ -47,6 +47,7 @@ #include #include #include +#include #include #include @@ -105,6 +106,7 @@ class DomResourcePixmap; class QResourceBuilder; class QTextBuilder; +class QFormBuilderExtra; #ifndef QT_FORMBUILDER_NO_SCRIPT class QFormScriptRunner; @@ -186,13 +188,6 @@ protected: virtual void layoutInfo(DomLayout *layout, QObject *parent, int *margin, int *spacing); - virtual QIcon nameToIcon(const QString &filePath, const QString &qrcPath); - virtual QString iconToFilePath(const QIcon &pm) const; - virtual QString iconToQrcPath(const QIcon &pm) const; - virtual QPixmap nameToPixmap(const QString &filePath, const QString &qrcPath); - virtual QString pixmapToFilePath(const QPixmap &pm) const; - virtual QString pixmapToQrcPath(const QPixmap &pm) const; - void loadListWidgetExtraInfo(DomWidget *ui_widget, QListWidget *listWidget, QWidget *parentWidget); void loadTreeWidgetExtraInfo(DomWidget *ui_widget, QTreeWidget *treeWidget, QWidget *parentWidget); void loadTableWidgetExtraInfo(DomWidget *ui_widget, QTableWidget *tableWidget, QWidget *parentWidget); @@ -259,13 +254,6 @@ protected: QPixmap domPropertyToPixmap(const DomResourcePixmap* p); QPixmap domPropertyToPixmap(const DomProperty* p); - QHash m_laidout; - QHash m_actions; - QHash m_actionGroups; - int m_defaultMargin; - int m_defaultSpacing; - QDir m_workingDirectory; - private: // // utils @@ -277,6 +265,9 @@ private: friend QDESIGNER_UILIB_EXPORT DomProperty *variantToDomProperty(QAbstractFormBuilder *abstractFormBuilder, const QMetaObject *meta, const QString &propertyName, const QVariant &value); friend QDESIGNER_UILIB_EXPORT QVariant domPropertyToVariant(QAbstractFormBuilder *abstractFormBuilder,const QMetaObject *meta, const DomProperty *property); + +protected: + QScopedPointer d; }; #ifdef QFORMINTERNAL_NAMESPACE diff --git a/tools/uilib/formbuilder.cpp b/tools/uilib/formbuilder.cpp index b997cc9bc0..592b1f15f7 100644 --- a/tools/uilib/formbuilder.cpp +++ b/tools/uilib/formbuilder.cpp @@ -104,7 +104,7 @@ namespace QFormInternal { Constructs a new form builder. */ -QFormBuilder::QFormBuilder() : QAbstractFormBuilder() +QFormBuilder::QFormBuilder() { } @@ -120,12 +120,11 @@ QFormBuilder::~QFormBuilder() */ QWidget *QFormBuilder::create(DomWidget *ui_widget, QWidget *parentWidget) { - QFormBuilderExtra *fb = QFormBuilderExtra::instance(this); - if (!fb->parentWidgetIsSet()) - fb->setParentWidget(parentWidget); + if (!d->parentWidgetIsSet()) + d->setParentWidget(parentWidget); // Is this a QLayoutWidget with a margin of 0: Not a known page-based // container and no method for adding pages registered. - fb->setProcessingLayoutWidget(false); + d->setProcessingLayoutWidget(false); if (ui_widget->attributeClass() == QFormBuilderStrings::instance().qWidgetClass && !ui_widget->hasAttributeNative() && parentWidget #ifndef QT_NO_MAINWINDOW @@ -151,8 +150,8 @@ QWidget *QFormBuilder::create(DomWidget *ui_widget, QWidget *parentWidget) #endif ) { const QString parentClassName = QLatin1String(parentWidget->metaObject()->className()); - if (!fb->isCustomWidgetContainer(parentClassName)) - fb->setProcessingLayoutWidget(true); + if (!d->isCustomWidgetContainer(parentClassName)) + d->setProcessingLayoutWidget(true); } return QAbstractFormBuilder::create(ui_widget, parentWidget); } @@ -212,14 +211,13 @@ QWidget *QFormBuilder::createWidget(const QString &widgetName, QWidget *parentWi break; // try with a registered custom widget - QDesignerCustomWidgetInterface *factory = m_customWidgets.value(widgetName); + QDesignerCustomWidgetInterface *factory = d->m_customWidgets.value(widgetName); if (factory != 0) w = factory->createWidget(parentWidget); } while(false); - QFormBuilderExtra *fb = QFormBuilderExtra::instance(this); if (w == 0) { // Attempt to instantiate base class of promoted/custom widgets - const QString baseClassName = fb->customWidgetBaseClass(widgetName); + const QString baseClassName = d->customWidgetBaseClass(widgetName); if (!baseClassName.isEmpty()) { qWarning() << QCoreApplication::translate("QFormBuilder", "QFormBuilder was unable to create a custom widget of the class '%1'; defaulting to base class '%2'.").arg(widgetName, baseClassName); return createWidget(baseClassName, parentWidget, name); @@ -374,10 +372,9 @@ QWidget *QFormBuilder::create(DomUI *ui, QWidget *parentWidget) */ QLayout *QFormBuilder::create(DomLayout *ui_layout, QLayout *layout, QWidget *parentWidget) { - QFormBuilderExtra *fb = QFormBuilderExtra::instance(this); // Is this a temporary layout widget used to represent QLayout hierarchies in Designer? // Set its margins to 0. - bool layoutWidget = fb->processingLayoutWidget(); + bool layoutWidget = d->processingLayoutWidget(); QLayout *l = QAbstractFormBuilder::create(ui_layout, layout, parentWidget); if (layoutWidget) { const QFormBuilderStrings &strings = QFormBuilderStrings::instance(); @@ -398,7 +395,7 @@ QLayout *QFormBuilder::create(DomLayout *ui_layout, QLayout *layout, QWidget *pa bottom = prop->elementNumber(); l->setContentsMargins(left, top, right, bottom); - fb->setProcessingLayoutWidget(false); + d->setProcessingLayoutWidget(false); } return l; } @@ -434,7 +431,7 @@ QActionGroup *QFormBuilder::create(DomActionGroup *ui_action_group, QObject *par */ QStringList QFormBuilder::pluginPaths() const { - return m_pluginPaths; + return d->m_pluginPaths; } /*! @@ -445,7 +442,7 @@ QStringList QFormBuilder::pluginPaths() const */ void QFormBuilder::clearPluginPaths() { - m_pluginPaths.clear(); + d->m_pluginPaths.clear(); updateCustomWidgets(); } @@ -458,7 +455,7 @@ void QFormBuilder::clearPluginPaths() */ void QFormBuilder::addPluginPath(const QString &pluginPath) { - m_pluginPaths.append(pluginPath); + d->m_pluginPaths.append(pluginPath); updateCustomWidgets(); } @@ -469,7 +466,7 @@ void QFormBuilder::addPluginPath(const QString &pluginPath) */ void QFormBuilder::setPluginPath(const QStringList &pluginPaths) { - m_pluginPaths = pluginPaths; + d->m_pluginPaths = pluginPaths; updateCustomWidgets(); } @@ -492,9 +489,9 @@ static void insertPlugins(QObject *o, QMapm_customWidgets.clear(); - foreach (const QString &path, m_pluginPaths) { + foreach (const QString &path, d->m_pluginPaths) { const QDir dir(path); const QStringList candidates = dir.entryList(QDir::Files); @@ -508,14 +505,14 @@ void QFormBuilder::updateCustomWidgets() QPluginLoader loader(loaderPath); if (loader.load()) - insertPlugins(loader.instance(), &m_customWidgets); + insertPlugins(loader.instance(), &d->m_customWidgets); } } // Check statically linked plugins const QObjectList staticPlugins = QPluginLoader::staticInstances(); if (!staticPlugins.empty()) foreach (QObject *o, staticPlugins) - insertPlugins(o, &m_customWidgets); + insertPlugins(o, &d->m_customWidgets); } /*! @@ -525,7 +522,7 @@ void QFormBuilder::updateCustomWidgets() */ QList QFormBuilder::customWidgets() const { - return m_customWidgets.values(); + return d->m_customWidgets.values(); } /*! @@ -539,7 +536,6 @@ void QFormBuilder::applyProperties(QObject *o, const QList &proper if (properties.empty()) return; - QFormBuilderExtra *fb = QFormBuilderExtra::instance(this); const QFormBuilderStrings &strings = QFormBuilderStrings::instance(); const DomPropertyList::const_iterator cend = properties.constEnd(); @@ -550,10 +546,10 @@ void QFormBuilder::applyProperties(QObject *o, const QList &proper const QString attributeName = (*it)->attributeName(); const bool isWidget = o->isWidgetType(); - if (isWidget && o->parent() == fb->parentWidget() && attributeName == strings.geometryProperty) { + if (isWidget && o->parent() == d->parentWidget() && attributeName == strings.geometryProperty) { // apply only the size part of a geometry for the root widget static_cast(o)->resize(qvariant_cast(v).size()); - } else if (fb->applyPropertyInternally(o, attributeName, v)) { + } else if (d->applyPropertyInternally(o, attributeName, v)) { } else if (isWidget && !qstrcmp("QFrame", o->metaObject()->className ()) && attributeName == strings.orientationProperty) { // ### special-casing for Line (QFrame) -- try to fix me o->setProperty("frameShape", v); // v is of QFrame::Shape enum diff --git a/tools/uilib/formbuilder.h b/tools/uilib/formbuilder.h index 1d3dc5a395..6c0820c214 100644 --- a/tools/uilib/formbuilder.h +++ b/tools/uilib/formbuilder.h @@ -45,9 +45,6 @@ #include "uilib_global.h" #include "abstractformbuilder.h" -#include -#include - QT_BEGIN_HEADER QT_BEGIN_NAMESPACE @@ -100,8 +97,6 @@ protected: static QWidget *widgetByName(QWidget *topLevel, const QString &name); private: - QStringList m_pluginPaths; - QMap m_customWidgets; }; #ifdef QFORMINTERNAL_NAMESPACE diff --git a/tools/uilib/formbuilderextra.cpp b/tools/uilib/formbuilderextra.cpp index ecc62886b9..12e43f1e38 100644 --- a/tools/uilib/formbuilderextra.cpp +++ b/tools/uilib/formbuilderextra.cpp @@ -55,6 +55,8 @@ #include #include +#include + QT_BEGIN_NAMESPACE #ifdef QFORMINTERNAL_NAMESPACE @@ -83,6 +85,8 @@ QFormBuilderExtra::CustomWidgetData::CustomWidgetData(const DomCustomWidget *dcw } QFormBuilderExtra::QFormBuilderExtra() : + m_defaultMargin(INT_MIN), + m_defaultSpacing(INT_MIN), m_layoutWidget(false), m_resourceBuilder(0), m_textBuilder(0) @@ -217,33 +221,6 @@ bool QFormBuilderExtra::isCustomWidgetContainer(const QString &className) const return false; } -namespace { - typedef QHash FormBuilderPrivateHash; -} - -Q_GLOBAL_STATIC(FormBuilderPrivateHash, g_FormBuilderPrivateHash) - -QFormBuilderExtra *QFormBuilderExtra::instance(const QAbstractFormBuilder *afb) -{ - FormBuilderPrivateHash &fbHash = *g_FormBuilderPrivateHash(); - - FormBuilderPrivateHash::iterator it = fbHash.find(afb); - if (it == fbHash.end()) - it = fbHash.insert(afb, new QFormBuilderExtra); - return it.value(); -} - -void QFormBuilderExtra::removeInstance(const QAbstractFormBuilder *afb) -{ - FormBuilderPrivateHash &fbHash = *g_FormBuilderPrivateHash(); - - FormBuilderPrivateHash::iterator it = fbHash.find(afb); - if (it != fbHash.end()) { - delete it.value(); - fbHash.erase(it); - } -} - void QFormBuilderExtra::setProcessingLayoutWidget(bool processing) { m_layoutWidget = processing; diff --git a/tools/uilib/formbuilderextra_p.h b/tools/uilib/formbuilderextra_p.h index cac882b8d8..a5e2029391 100644 --- a/tools/uilib/formbuilderextra_p.h +++ b/tools/uilib/formbuilderextra_p.h @@ -61,19 +61,23 @@ #include #include -#include +#include +#include +#include QT_BEGIN_NAMESPACE +class QDesignerCustomWidgetInterface; class QObject; class QVariant; class QWidget; class QObject; class QLabel; class QButtonGroup; - class QBoxLayout; class QGridLayout; +class QAction; +class QActionGroup; #ifdef QFORMINTERNAL_NAMESPACE namespace QFormInternal @@ -90,9 +94,10 @@ class QTextBuilder; class QDESIGNER_UILIB_EXPORT QFormBuilderExtra { +public: QFormBuilderExtra(); ~QFormBuilderExtra(); -public: + struct CustomWidgetData { CustomWidgetData(); explicit CustomWidgetData(const DomCustomWidget *dc); @@ -130,9 +135,6 @@ public: void setTextBuilder(QTextBuilder *builder); QTextBuilder *textBuilder() const; - static QFormBuilderExtra *instance(const QAbstractFormBuilder *afb); - static void removeInstance(const QAbstractFormBuilder *afb); - void storeCustomWidgetData(const QString &className, const DomCustomWidget *d); QString customWidgetAddPageMethod(const QString &className) const; QString customWidgetBaseClass(const QString &className) const; @@ -169,6 +171,16 @@ public: static bool setGridLayoutColumnMinimumWidth(const QString &, QGridLayout *); static void clearGridLayoutColumnMinimumWidth(QGridLayout *); + QStringList m_pluginPaths; + QMap m_customWidgets; + + QHash m_laidout; + QHash m_actions; + QHash m_actionGroups; + int m_defaultMargin; + int m_defaultSpacing; + QDir m_workingDirectory; + private: void clearResourceBuilder(); void clearTextBuilder(); From 3611f8297532babce9d49072d5cacf8a10e8fda4 Mon Sep 17 00:00:00 2001 From: Paul Olav Tvete Date: Wed, 4 May 2011 16:55:48 +0200 Subject: [PATCH 44/53] Build fix --- src/plugins/platforms/minimal/minimal.pro | 1 + 1 file changed, 1 insertion(+) diff --git a/src/plugins/platforms/minimal/minimal.pro b/src/plugins/platforms/minimal/minimal.pro index c8329387bf..d1088e3233 100644 --- a/src/plugins/platforms/minimal/minimal.pro +++ b/src/plugins/platforms/minimal/minimal.pro @@ -1,6 +1,7 @@ TARGET = qminimal include(../../qpluginbase.pri) +QT = core-private gui-private DESTDIR = $$QT.gui.plugins/platforms SOURCES = main.cpp \ From af026f6fa4dfbad3782f7dc9b56ea9a11f221e2a Mon Sep 17 00:00:00 2001 From: Prasanth Ullattil Date: Wed, 4 May 2011 17:54:44 +0200 Subject: [PATCH 45/53] Fix build error on Mac To use the private headers, the .pro file should contain QT += -private Reviewed-by: Olivier Goffart --- src/plugins/bearer/corewlan/corewlan.pro | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/bearer/corewlan/corewlan.pro b/src/plugins/bearer/corewlan/corewlan.pro index ae5371a715..adc1625c3d 100644 --- a/src/plugins/bearer/corewlan/corewlan.pro +++ b/src/plugins/bearer/corewlan/corewlan.pro @@ -1,7 +1,7 @@ TARGET = qcorewlanbearer include(../../qpluginbase.pri) -QT = core network +QT = core-private network-private LIBS += -framework Foundation -framework SystemConfiguration contains(QT_CONFIG, corewlan) { From 1a2345ec198114890571478d38a8fbd3e5236401 Mon Sep 17 00:00:00 2001 From: Kent Hansen Date: Fri, 3 Sep 2010 10:49:46 +0200 Subject: [PATCH 46/53] Add Q_UNIMPLEMENTED() macro (cherry picked from commit adce00979c30cc22d26ba43c15e0c7a3733b57ab) --- src/corelib/global/qglobal.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/corelib/global/qglobal.h b/src/corelib/global/qglobal.h index 49f5f989fb..0c861990fa 100644 --- a/src/corelib/global/qglobal.h +++ b/src/corelib/global/qglobal.h @@ -1843,6 +1843,10 @@ inline QT3_SUPPORT void qSuppressObsoleteWarnings(bool = true) {} inline QT3_SUPPORT void qObsolete(const char *, const char * = 0, const char * = 0) {} #endif +#if !defined(Q_UNIMPLEMENTED) +# define Q_UNIMPLEMENTED() qWarning("%s:%d: %s: Unimplemented code.", __FILE__, __LINE__, Q_FUNC_INFO) +#endif + #if defined(QT_NO_THREAD) template From 45b80f054fb729ec94714ee1a5f6145352be0296 Mon Sep 17 00:00:00 2001 From: Eskil Abrahamsen Blomfeldt Date: Thu, 5 May 2011 13:43:13 +0200 Subject: [PATCH 47/53] Remove misspelled comment in tst_qtextdocument.cpp The comment was copy-pasted, spelling error and all, from the example in the bug report, and really doesn't make any sense at all in this context. Reviewed-by: TrustMe (cherry picked from commit 7ac511d8d906575dff1a02361e31251b244d3b3a) --- tests/auto/qtextdocument/tst_qtextdocument.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/auto/qtextdocument/tst_qtextdocument.cpp b/tests/auto/qtextdocument/tst_qtextdocument.cpp index 26fa43d137..7aa6578e86 100644 --- a/tests/auto/qtextdocument/tst_qtextdocument.cpp +++ b/tests/auto/qtextdocument/tst_qtextdocument.cpp @@ -2742,7 +2742,7 @@ void tst_QTextDocument::copiedFontSize() QTextDocument documentOutput; QFont fontInput; - fontInput.setPixelSize(24); // With pixels font size is not transfered in html + fontInput.setPixelSize(24); QTextCursor cursorInput(&documentInput); QTextCharFormat formatInput = cursorInput.charFormat(); From 05a1416be87528ba722d7735ed49701c634de083 Mon Sep 17 00:00:00 2001 From: Jiang Jiang Date: Wed, 4 May 2011 16:06:06 +0200 Subject: [PATCH 48/53] Add a way to retrieve CTFontRef from QFont Since macFontID restricts to quint32, we have to return that in QFont::handle. Task-number: QTBUG-17890 Reviewed-by: Eskil (cherry picked from commit c8f299b7e675c839b16d750cd2633a57cdd0526f) --- src/gui/text/qfont_mac.cpp | 7 ++++--- src/gui/text/qfontengine_coretext_p.h | 2 ++ 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/gui/text/qfont_mac.cpp b/src/gui/text/qfont_mac.cpp index daf68c03ea..044fd84a8b 100644 --- a/src/gui/text/qfont_mac.cpp +++ b/src/gui/text/qfont_mac.cpp @@ -43,6 +43,7 @@ #include "qfont_p.h" #include "qfontengine_p.h" #include "qfontengine_mac_p.h" +#include "qfontengine_coretext_p.h" #include "qfontinfo.h" #include "qfontmetrics.h" #include "qpaintdevice.h" @@ -119,10 +120,10 @@ quint32 QFont::macFontID() const // ### need 64-bit version // Returns an ATSUFonFamilyRef Qt::HANDLE QFont::handle() const { -#if 0 +#ifdef QT_MAC_USE_COCOA QFontEngine *fe = d->engineForScript(QUnicodeTables::Common); - if (fe && fe->type() == QFontEngine::Mac) - return (Qt::HANDLE)static_cast(fe)->fontFamilyRef(); + if (fe && fe->type() == QFontEngine::Multi) + return (Qt::HANDLE)static_cast(fe)->macFontID(); #endif return 0; } diff --git a/src/gui/text/qfontengine_coretext_p.h b/src/gui/text/qfontengine_coretext_p.h index bb80a9b2f3..3775bc6002 100644 --- a/src/gui/text/qfontengine_coretext_p.h +++ b/src/gui/text/qfontengine_coretext_p.h @@ -124,6 +124,8 @@ public: QScriptItem *si) const; virtual const char *name() const { return "CoreText"; } + inline CTFontRef macFontID() const { return ctfont; } + protected: virtual void loadEngine(int at); From 1daf67042da6e25ae1a2733b374f83375d79b713 Mon Sep 17 00:00:00 2001 From: Jiang Jiang Date: Thu, 5 May 2011 13:17:26 +0200 Subject: [PATCH 49/53] Only enable design metrics for scalable fonts Bitmap fonts don't have linear advance at all. Reviewed-by: Eskil (cherry picked from commit 111accbf9aaf95b052448ecb70937c61e9b59d66) --- src/gui/text/qfontengine_ft.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/text/qfontengine_ft.cpp b/src/gui/text/qfontengine_ft.cpp index 237cde4ed1..4dae2a3784 100644 --- a/src/gui/text/qfontengine_ft.cpp +++ b/src/gui/text/qfontengine_ft.cpp @@ -1597,7 +1597,7 @@ void QFontEngineFT::recalcAdvances(QGlyphLayout *glyphs, QTextEngine::ShaperFlag FT_Face face = 0; bool design = (default_hint_style == HintNone || default_hint_style == HintLight || - (flags & HB_ShaperFlag_UseDesignMetrics)); + (flags & HB_ShaperFlag_UseDesignMetrics)) && FT_IS_SCALABLE(freetype->face); for (int i = 0; i < glyphs->numGlyphs; i++) { Glyph *g = defaultGlyphSet.getGlyph(glyphs->glyphs[i]); if (g) { From 022a528dfd3b768d36c396e00d01fbd3fc2e9f9c Mon Sep 17 00:00:00 2001 From: Marius Storm-Olsen Date: Thu, 5 May 2011 08:58:59 -0500 Subject: [PATCH 50/53] compile openvg with private headers --- src/openvg/openvg.pro | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/openvg/openvg.pro b/src/openvg/openvg.pro index 5451c2d04e..dbe1620f80 100644 --- a/src/openvg/openvg.pro +++ b/src/openvg/openvg.pro @@ -1,6 +1,6 @@ TARGET = QtOpenVG -QT += core \ - gui +QT += core-private \ + gui-private CONFIG += module MODULE_PRI = ../modules/qt_openvg.pri From 0df9ee335c933465b8028cfdf289e2d6532ab031 Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Thu, 28 Apr 2011 15:32:46 +0200 Subject: [PATCH 51/53] Changelog: Qt Designer 4.8 (cherry picked from commit 3a10cfc583f30be4dd98e1fcc3463c3d8bc14f31) --- dist/changes-4.8.0 | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/dist/changes-4.8.0 b/dist/changes-4.8.0 index fa50f24963..b8cc62600e 100644 --- a/dist/changes-4.8.0 +++ b/dist/changes-4.8.0 @@ -97,9 +97,17 @@ Qt for Windows CE - Assistant - - Designer - + * [QTBUG-18631] Enabled the use of promoted QWidgets in the buddy editor. + * [QTBUG-18120] Fixed saving of the Z-order. + * [QTBUG-13683] Fixed saving of QGridLayout and QFormLayout + by QFormBuilder. + * [QTBUG-10890] Added a filter to the rich text editor dialog. + that simplifies the HTML markup generated. + * [QTBUG-7777] Added support for QIcon::fromTheme. + * [QTBUG-7169] Fixed QtUiTools to be built with the correct + lib-infix. + * [QTBUG-3120] Added support for alignment of box layout items. - Linguist - Linguist GUI From 1edc4510572b6a10f2b6ee16697204cd95114fda Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Thu, 5 May 2011 17:34:07 +0200 Subject: [PATCH 52/53] Dont do doneCurrent in swapBuffers --- src/plugins/platforms/xcb/qglxintegration.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/plugins/platforms/xcb/qglxintegration.cpp b/src/plugins/platforms/xcb/qglxintegration.cpp index 190221c5f4..1417157bdf 100644 --- a/src/plugins/platforms/xcb/qglxintegration.cpp +++ b/src/plugins/platforms/xcb/qglxintegration.cpp @@ -110,7 +110,6 @@ void QGLXContext::swapBuffers() { Q_XCB_NOOP(m_screen->connection()); glXSwapBuffers(DISPLAY_FROM_XCB(m_screen), m_drawable); - doneCurrent(); Q_XCB_NOOP(m_screen->connection()); } From ec88a761278953fa7816ecd874311ae270d28a2a Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Fri, 6 May 2011 09:31:21 +0200 Subject: [PATCH 53/53] uic: Remove Q3Support. Remove code and tests. --- src/tools/uic/cpp/cppwriteincludes.cpp | 20 - src/tools/uic/cpp/cppwriteinitialization.cpp | 403 +--- src/tools/uic/cpp/cppwriteinitialization.h | 17 - src/tools/uic/uic.cpp | 6 +- tests/auto/uic/baseline/config_fromuic3.ui | 1647 ----------------- tests/auto/uic/baseline/config_fromuic3.ui.h | 716 ------- tests/auto/uic/baseline/mainwindowbase.ui | 1214 ------------ tests/auto/uic/baseline/mainwindowbase.ui.h | 968 ---------- tests/auto/uic/baseline/mydialog.ui.h | 1 - .../uic/baseline/paletteeditoradvancedbase.ui | 617 ------ .../baseline/paletteeditoradvancedbase.ui.h | 485 ----- tests/auto/uic/baseline/previewwidgetbase.ui | 340 ---- .../auto/uic/baseline/previewwidgetbase.ui.h | 316 ---- 13 files changed, 15 insertions(+), 6735 deletions(-) delete mode 100644 tests/auto/uic/baseline/config_fromuic3.ui delete mode 100644 tests/auto/uic/baseline/config_fromuic3.ui.h delete mode 100644 tests/auto/uic/baseline/mainwindowbase.ui delete mode 100644 tests/auto/uic/baseline/mainwindowbase.ui.h delete mode 100644 tests/auto/uic/baseline/paletteeditoradvancedbase.ui delete mode 100644 tests/auto/uic/baseline/paletteeditoradvancedbase.ui.h delete mode 100644 tests/auto/uic/baseline/previewwidgetbase.ui delete mode 100644 tests/auto/uic/baseline/previewwidgetbase.ui.h diff --git a/src/tools/uic/cpp/cppwriteincludes.cpp b/src/tools/uic/cpp/cppwriteincludes.cpp index d09c712b7b..b2f4f6d311 100644 --- a/src/tools/uic/cpp/cppwriteincludes.cpp +++ b/src/tools/uic/cpp/cppwriteincludes.cpp @@ -124,22 +124,6 @@ void WriteIncludes::acceptUI(DomUI *node) add(QLatin1String("QButtonGroup")); // ### only if it is really necessary add(QLatin1String("QHeaderView")); - if (m_uic->hasExternalPixmap() && m_uic->pixmapFunction() == QLatin1String("qPixmapFromMimeSource")) { -#ifdef QT_NO_QT3_SUPPORT - qWarning("%s: Warning: The form file has external pixmaps or qPixmapFromMimeSource() set as a pixmap function. " - "This requires Qt 3 support, which is disabled. The resulting code will not compile.", - qPrintable(m_uic->option().messagePrefix())); -#endif - add(QLatin1String("Q3MimeSourceFactory")); - } - - if (m_uic->databaseInfo()->connections().size()) { - add(QLatin1String("QSqlDatabase")); - add(QLatin1String("Q3SqlCursor")); - add(QLatin1String("QSqlRecord")); - add(QLatin1String("Q3SqlForm")); - } - TreeWalker::acceptUI(node); writeHeaders(m_globalIncludes, true); @@ -241,10 +225,6 @@ void WriteIncludes::add(const QString &className, bool determineHeader, const QS return; } - if (m_uic->customWidgetsInfo()->extends(className, QLatin1String("Q3ListView")) || - m_uic->customWidgetsInfo()->extends(className, QLatin1String("Q3Table"))) { - add(QLatin1String("Q3Header")); - } if (determineHeader) insertIncludeForClass(className, header, global); } diff --git a/src/tools/uic/cpp/cppwriteinitialization.cpp b/src/tools/uic/cpp/cppwriteinitialization.cpp index 37d012c109..85c1b1d285 100644 --- a/src/tools/uic/cpp/cppwriteinitialization.cpp +++ b/src/tools/uic/cpp/cppwriteinitialization.cpp @@ -636,7 +636,7 @@ void WriteInitialization::acceptWidget(DomWidget *node) const QString savedParentWidget = parentWidget; - if (m_uic->isContainer(parentClass) || m_uic->customWidgetsInfo()->extends(parentClass, QLatin1String("Q3ToolBar"))) + if (m_uic->isContainer(parentClass)) parentWidget.clear(); if (m_widgetChain.size() != 1) @@ -644,9 +644,7 @@ void WriteInitialization::acceptWidget(DomWidget *node) parentWidget = savedParentWidget; - if (m_uic->customWidgetsInfo()->extends(className, QLatin1String("Q3ComboBox"))) { - initializeComboBox3(node); - } else if (m_uic->customWidgetsInfo()->extends(className, QLatin1String("QComboBox"))) { + if (m_uic->customWidgetsInfo()->extends(className, QLatin1String("QComboBox"))) { initializeComboBox(node); } else if (m_uic->customWidgetsInfo()->extends(className, QLatin1String("QListWidget"))) { initializeListWidget(node); @@ -654,18 +652,6 @@ void WriteInitialization::acceptWidget(DomWidget *node) initializeTreeWidget(node); } else if (m_uic->customWidgetsInfo()->extends(className, QLatin1String("QTableWidget"))) { initializeTableWidget(node); - } else if (m_uic->customWidgetsInfo()->extends(className, QLatin1String("Q3ListBox"))) { - initializeQ3ListBox(node); - } else if (m_uic->customWidgetsInfo()->extends(className, QLatin1String("Q3ListView"))) { - initializeQ3ListView(node); - } else if (m_uic->customWidgetsInfo()->extends(className, QLatin1String("Q3IconView"))) { - initializeQ3IconView(node); - } else if (m_uic->customWidgetsInfo()->extends(className, QLatin1String("Q3Table"))) { - initializeQ3Table(node); - } else if (m_uic->customWidgetsInfo()->extends(className, QLatin1String("Q3DataTable"))) { - initializeQ3SqlDataTable(node); - } else if (m_uic->customWidgetsInfo()->extends(className, QLatin1String("Q3DataBrowser"))) { - initializeQ3SqlDataBrowser(node); } if (m_uic->isButton(className)) @@ -706,12 +692,9 @@ void WriteInitialization::acceptWidget(DomWidget *node) id = pid->elementNumber(); } - if (m_uic->customWidgetsInfo()->extends(parentClass, QLatin1String("QMainWindow")) - || m_uic->customWidgetsInfo()->extends(parentClass, QLatin1String("Q3MainWindow"))) { - + if (m_uic->customWidgetsInfo()->extends(parentClass, QLatin1String("QMainWindow"))) { if (m_uic->customWidgetsInfo()->extends(className, QLatin1String("QMenuBar"))) { - if (!m_uic->customWidgetsInfo()->extends(parentClass, QLatin1String("Q3MainWindow"))) - m_output << m_indent << parentWidget << "->setMenuBar(" << varName <<");\n"; + m_output << m_indent << parentWidget << "->setMenuBar(" << varName <<");\n"; } else if (m_uic->customWidgetsInfo()->extends(className, QLatin1String("QToolBar"))) { m_output << m_indent << parentWidget << "->addToolBar(" << toolBarAreaStringFromDOMAttributes(attributes) << varName << ");\n"; @@ -733,8 +716,7 @@ void WriteInitialization::acceptWidget(DomWidget *node) m_output << m_indent << parentWidget << "->addDockWidget(" << area << varName << ");\n"; } else if (m_uic->customWidgetsInfo()->extends(className, QLatin1String("QStatusBar"))) { m_output << m_indent << parentWidget << "->setStatusBar(" << varName << ");\n"; - } else if (!m_uic->customWidgetsInfo()->extends(className, QLatin1String("Q3DockWindow")) - && !m_uic->customWidgetsInfo()->extends(className, QLatin1String("Q3ToolBar"))) { + } else { m_output << m_indent << parentWidget << "->setCentralWidget(" << varName << ");\n"; } } @@ -747,8 +729,6 @@ void WriteInitialization::acceptWidget(DomWidget *node) m_output << m_indent << parentWidget << "->addWidget(" << varName << ");\n"; } else if (m_uic->customWidgetsInfo()->extends(parentClass, QLatin1String("QToolBar"))) { m_output << m_indent << parentWidget << "->addWidget(" << varName << ");\n"; - } else if (m_uic->customWidgetsInfo()->extends(parentClass, QLatin1String("Q3WidgetStack"))) { - m_output << m_indent << parentWidget << "->addWidget(" << varName << ", " << id << ");\n"; } else if (m_uic->customWidgetsInfo()->extends(parentClass, QLatin1String("QDockWidget"))) { m_output << m_indent << parentWidget << "->setWidget(" << varName << ");\n"; } else if (m_uic->customWidgetsInfo()->extends(parentClass, QLatin1String("QScrollArea"))) { @@ -809,15 +789,6 @@ void WriteInitialization::acceptWidget(DomWidget *node) << parentWidget << "->indexOf(" << varName << "), " << autoTrCall(pwhatsThis->elementString()) << ");\n"; } #endif // QT_NO_WHATSTHIS - } else if (m_uic->customWidgetsInfo()->extends(parentClass, QLatin1String("Q3Wizard"))) { - const DomProperty *ptitle = attributes.value(QLatin1String("title")); - DomString *ptitleString = ptitle ? ptitle->elementString() : 0; - - m_output << m_indent << parentWidget << "->addPage(" << varName << ", " << noTrCall(ptitleString, pageDefaultString) << ");\n"; - - autoTrOutput(ptitleString, pageDefaultString) << m_indent << parentWidget << "->setTitle(" - << varName << ", " << autoTrCall(ptitleString, pageDefaultString) << ");\n"; - } // @@ -937,28 +908,6 @@ void WriteInitialization::acceptLayout(DomLayout *node) bool isGroupBox = false; - if (m_widgetChain.top()) { - const QString parentWidget = m_widgetChain.top()->attributeClass(); - - if (!m_layoutChain.top() && (m_uic->customWidgetsInfo()->extends(parentWidget, QLatin1String("Q3GroupBox")) - || m_uic->customWidgetsInfo()->extends(parentWidget, QLatin1String("Q3ButtonGroup")))) { - const QString parent = m_driver->findOrInsertWidget(m_widgetChain.top()); - - isGroupBox = true; - // special case for group box - - m_output << m_indent << parent << "->setColumnLayout(0, Qt::Vertical);\n"; - QString objectName = parent; - objectName += QLatin1String("->layout()"); - int marginType = Use43UiFile; - if (oldLayoutProperties) - marginType = m_layoutMarginType; - - m_LayoutDefaultHandler.writeProperties(m_indent, - objectName, properties, marginType, false, m_output); - } - } - m_output << m_indent << varName << " = new " << className << '('; if (!m_layoutChain.top() && !isGroupBox) @@ -966,24 +915,12 @@ void WriteInitialization::acceptLayout(DomLayout *node) m_output << ");\n"; - if (isGroupBox) { - const QString tempName = m_driver->unique(QLatin1String("boxlayout")); - m_output << m_indent << "QBoxLayout *" << tempName << " = qobject_cast(" << - m_driver->findOrInsertWidget(m_widgetChain.top()) << "->layout());\n"; - m_output << m_indent << "if (" << tempName << ")\n"; - m_output << m_dindent << tempName << "->addLayout(" << varName << ");\n"; - } - - if (isGroupBox) { - m_output << m_indent << varName << "->setAlignment(Qt::AlignTop);\n"; - } else { - // Suppress margin on a read child layout - const bool suppressMarginDefault = m_layoutChain.top(); - int marginType = Use43UiFile; - if (oldLayoutProperties) - marginType = m_layoutMarginType; - m_LayoutDefaultHandler.writeProperties(m_indent, varName, properties, marginType, suppressMarginDefault, m_output); - } + // Suppress margin on a read child layout + const bool suppressMarginDefault = m_layoutChain.top(); + int marginType = Use43UiFile; + if (oldLayoutProperties) + marginType = m_layoutMarginType; + m_LayoutDefaultHandler.writeProperties(m_indent, varName, properties, marginType, suppressMarginDefault, m_output); m_layoutMarginType = SubLayoutMargin; @@ -1175,13 +1112,8 @@ void WriteInitialization::acceptActionRef(DomActionRef *node) return; } else if (m_driver->actionGroupByName(actionName)) { return; - } else if (DomWidget *w = m_driver->widgetByName(actionName)) { + } else if (const DomWidget *w = m_driver->widgetByName(actionName)) { isMenu = m_uic->isMenu(w->attributeClass()); - bool inQ3ToolBar = m_uic->customWidgetsInfo()->extends(m_widgetChain.top()->attributeClass(), QLatin1String("Q3ToolBar")); - if (!isMenu && inQ3ToolBar) { - m_actionOut << m_indent << actionName << "->setParent(" << varName << ");\n"; - return; - } } else if (!(m_driver->actionByName(actionName) || isSeparator)) { fprintf(stderr, "%s: Warning: action `%s' not declared\n", qPrintable(m_option.messagePrefix()), @@ -1217,8 +1149,6 @@ void WriteInitialization::writeProperties(const QString &varName, } } - DomWidget *buttonGroupWidget = findWidget(QLatin1String("Q3ButtonGroup")); - QString indent; if (!m_widgetChain.top()) { indent = m_option.indent; @@ -1244,11 +1174,6 @@ void WriteInitialization::writeProperties(const QString &varName, const DomRect *r = p->elementRect(); m_output << m_indent << varName << "->resize(" << r->elementWidth() << ", " << r->elementHeight() << ");\n"; continue; - } else if (propertyName == QLatin1String("buttonGroupId")) { // Q3ButtonGroup support - if (buttonGroupWidget) - m_output << m_indent << m_driver->findOrInsertWidget(buttonGroupWidget) << "->insert(" - << varName << ", " << p->elementNumber() << ");\n"; - continue; } else if (propertyName == QLatin1String("currentRow") // QListWidget::currentRow && m_uic->customWidgetsInfo()->extends(className, QLatin1String("QListWidget"))) { m_delayedOut << m_indent << varName << "->setCurrentRow(" @@ -1568,16 +1493,7 @@ void WriteInitialization::writeProperties(const QString &varName, } } if (leftMargin != -1 || topMargin != -1 || rightMargin != -1 || bottomMargin != -1) { - QString objectName = varName; - if (m_widgetChain.top()) { - const QString parentWidget = m_widgetChain.top()->attributeClass(); - - if (!m_layoutChain.top() && (m_uic->customWidgetsInfo()->extends(parentWidget, QLatin1String("Q3GroupBox")) - || m_uic->customWidgetsInfo()->extends(parentWidget, QLatin1String("Q3ButtonGroup")))) { - objectName = m_driver->findOrInsertWidget(m_widgetChain.top()) + QLatin1String("->layout()"); - } - } - m_output << m_indent << objectName << QLatin1String("->setContentsMargins(") + m_output << m_indent << varName << QLatin1String("->setContentsMargins(") << leftMargin << QLatin1String(", ") << topMargin << QLatin1String(", ") << rightMargin << QLatin1String(", ") @@ -1934,199 +1850,6 @@ void WriteInitialization::acceptTabStops(DomTabStops *tabStops) } } -void WriteInitialization::initializeQ3ListBox(DomWidget *w) -{ - const QString varName = m_driver->findOrInsertWidget(w); - const QString className = w->attributeClass(); - - const QList items = w->elementItem(); - - if (items.isEmpty()) - return; - - m_refreshOut << m_indent << varName << "->clear();\n"; - - for (int i=0; ielementProperty()); - const DomProperty *text = properties.value(QLatin1String("text")); - const DomProperty *pixmap = properties.value(QLatin1String("pixmap")); - if (!(text || pixmap)) - continue; - - m_refreshOut << m_indent << varName << "->insertItem("; - if (pixmap) { - m_refreshOut << pixCall(pixmap); - - if (text) - m_refreshOut << ", "; - } - if (text) - m_refreshOut << trCall(text->elementString()); - m_refreshOut << ");\n"; - } -} - -void WriteInitialization::initializeQ3IconView(DomWidget *w) -{ - const QString varName = m_driver->findOrInsertWidget(w); - const QString className = w->attributeClass(); - - const QList items = w->elementItem(); - - if (items.isEmpty()) - return; - - m_refreshOut << m_indent << varName << "->clear();\n"; - - for (int i=0; ielementProperty()); - const DomProperty *text = properties.value(QLatin1String("text")); - const DomProperty *pixmap = properties.value(QLatin1String("pixmap")); - if (!(text || pixmap)) - continue; - - const QString itemName = m_driver->unique(QLatin1String("__item")); - m_refreshOut << "\n"; - m_refreshOut << m_indent << "Q3IconViewItem *" << itemName << " = new Q3IconViewItem(" << varName << ");\n"; - - if (pixmap) { - m_refreshOut << m_indent << itemName << "->setPixmap(" << pixCall(pixmap) << ");\n"; - } - - if (text) { - m_refreshOut << m_indent << itemName << "->setText(" << trCall(text->elementString()) << ");\n"; - } - } -} - -void WriteInitialization::initializeQ3ListView(DomWidget *w) -{ - const QString varName = m_driver->findOrInsertWidget(w); - const QString className = w->attributeClass(); - - // columns - const QList columns = w->elementColumn(); - for (int i=0; ielementProperty()); - const DomProperty *text = properties.value(QLatin1String("text")); - const DomProperty *pixmap = properties.value(QLatin1String("pixmap")); - const DomProperty *clickable = properties.value(QLatin1String("clickable")); - const DomProperty *resizable = properties.value(QLatin1String("resizable")); - - const QString txt = trCall(text->elementString()); - m_output << m_indent << varName << "->addColumn(" << txt << ");\n"; - m_refreshOut << m_indent << varName << "->header()->setLabel(" << i << ", " << txt << ");\n"; - - if (pixmap) { - m_output << m_indent << varName << "->header()->setLabel(" - << varName << "->header()->count() - 1, " << pixCall(pixmap) << ", " << txt << ");\n"; - } - - if (clickable != 0) { - m_output << m_indent << varName << "->header()->setClickEnabled(" << clickable->elementBool() << ", " << varName << "->header()->count() - 1);\n"; - } - - if (resizable != 0) { - m_output << m_indent << varName << "->header()->setResizeEnabled(" << resizable->elementBool() << ", " << varName << "->header()->count() - 1);\n"; - } - } - - if (w->elementItem().size()) { - m_refreshOut << m_indent << varName << "->clear();\n"; - - initializeQ3ListViewItems(className, varName, w->elementItem()); - } -} - -void WriteInitialization::initializeQ3ListViewItems(const QString &className, const QString &varName, const QList &items) -{ - if (items.isEmpty()) - return; - - // items - for (int i=0; iunique(QLatin1String("__item")); - m_refreshOut << "\n"; - m_refreshOut << m_indent << "Q3ListViewItem *" << itemName << " = new Q3ListViewItem(" << varName << ");\n"; - - int textCount = 0, pixCount = 0; - const DomPropertyList properties = item->elementProperty(); - for (int i=0; iattributeName() == QLatin1String("text")) - m_refreshOut << m_indent << itemName << "->setText(" << textCount++ << ", " - << trCall(p->elementString()) << ");\n"; - - if (p->attributeName() == QLatin1String("pixmap")) - m_refreshOut << m_indent << itemName << "->setPixmap(" << pixCount++ << ", " - << pixCall(p) << ");\n"; - } - - if (item->elementItem().size()) { - m_refreshOut << m_indent << itemName << "->setOpen(true);\n"; - initializeQ3ListViewItems(className, itemName, item->elementItem()); - } - } -} - - -void WriteInitialization::initializeQ3Table(DomWidget *w) -{ - const QString varName = m_driver->findOrInsertWidget(w); - const QString className = w->attributeClass(); - - // columns - const QList columns = w->elementColumn(); - - for (int i=0; ielementProperty()); - const DomProperty *text = properties.value(QLatin1String("text")); - const DomProperty *pixmap = properties.value(QLatin1String("pixmap")); - - m_refreshOut << m_indent << varName << "->horizontalHeader()->setLabel(" << i << ", "; - if (pixmap) { - m_refreshOut << pixCall(pixmap) << ", "; - } - m_refreshOut << trCall(text->elementString()) << ");\n"; - } - - // rows - const QList rows = w->elementRow(); - for (int i=0; ielementProperty()); - const DomProperty *text = properties.value(QLatin1String("text")); - const DomProperty *pixmap = properties.value(QLatin1String("pixmap")); - - m_refreshOut << m_indent << varName << "->verticalHeader()->setLabel(" << i << ", "; - if (pixmap) { - m_refreshOut << pixCall(pixmap) << ", "; - } - m_refreshOut << trCall(text->elementString()) << ");\n"; - } - - - //initializeQ3TableItems(className, varName, w->elementItem()); -} - -void WriteInitialization::initializeQ3TableItems(const QString &className, const QString &varName, const QList &items) -{ - Q_UNUSED(className); - Q_UNUSED(varName); - Q_UNUSED(items); -} - QString WriteInitialization::iconCall(const DomProperty *icon) { if (icon->kind() == DomProperty::IconSet) @@ -2194,26 +1917,6 @@ QString WriteInitialization::pixCall(const QString &t, const QString &text) cons return type; } -void WriteInitialization::initializeComboBox3(DomWidget *w) -{ - const QList items = w->elementItem(); - if (items.empty()) - return; - // Basic legacy Qt3 support, write out translatable text items, ignore pixmaps - const QString varName = m_driver->findOrInsertWidget(w); - const QString textProperty = QLatin1String("text"); - - m_refreshOut << m_indent << varName << "->clear();\n"; - m_refreshOut << m_indent << varName << "->insertStringList(QStringList()" << '\n'; - const int itemCount = items.size(); - for (int i = 0; i< itemCount; ++i) { - const DomItem *item = items.at(i); - if (const DomProperty *text = propertyMap(item->elementProperty()).value(textProperty)) - m_refreshOut << m_indent << " << " << autoTrCall(text->elementString()) << "\n"; - } - m_refreshOut << m_indent << ", 0);\n"; -} - void WriteInitialization::initializeComboBox(DomWidget *w) { const QString varName = m_driver->findOrInsertWidget(w); @@ -2617,86 +2320,6 @@ QString WriteInitialization::trCall(const QString &str, const QString &commentHi return result; } -void WriteInitialization::initializeQ3SqlDataTable(DomWidget *w) -{ - const DomPropertyMap properties = propertyMap(w->elementProperty()); - - const DomProperty *frameworkCode = properties.value(QLatin1String("frameworkCode"), 0); - if (frameworkCode && toBool(frameworkCode->elementBool()) == false) - return; - - QString connection; - QString table; - QString field; - - const DomProperty *db = properties.value(QLatin1String("database"), 0); - if (db && db->elementStringList()) { - const QStringList info = db->elementStringList()->elementString(); - connection = info.size() > 0 ? info.at(0) : QString(); - table = info.size() > 1 ? info.at(1) : QString(); - field = info.size() > 2 ? info.at(2) : QString(); - } - - if (table.isEmpty() || connection.isEmpty()) { - fprintf(stderr, "%s: Warning: Invalid database connection\n", qPrintable(m_option.messagePrefix())); - return; - } - - const QString varName = m_driver->findOrInsertWidget(w); - - m_output << m_indent << "if (!" << varName << "->sqlCursor()) {\n"; - - m_output << m_dindent << varName << "->setSqlCursor("; - - if (connection == QLatin1String("(default)")) { - m_output << "new Q3SqlCursor(" << fixString(table, m_dindent) << "), false, true);\n"; - } else { - m_output << "new Q3SqlCursor(" << fixString(table, m_dindent) << ", true, " << connection << "Connection" << "), false, true);\n"; - } - m_output << m_dindent << varName << "->refresh(Q3DataTable::RefreshAll);\n"; - m_output << m_indent << "}\n"; -} - -void WriteInitialization::initializeQ3SqlDataBrowser(DomWidget *w) -{ - const DomPropertyMap properties = propertyMap(w->elementProperty()); - - const DomProperty *frameworkCode = properties.value(QLatin1String("frameworkCode"), 0); - if (frameworkCode && toBool(frameworkCode->elementBool()) == false) - return; - - QString connection; - QString table; - QString field; - - const DomProperty *db = properties.value(QLatin1String("database"), 0); - if (db && db->elementStringList()) { - const QStringList info = db->elementStringList()->elementString(); - connection = info.size() > 0 ? info.at(0) : QString(); - table = info.size() > 1 ? info.at(1) : QString(); - field = info.size() > 2 ? info.at(2) : QString(); - } - - if (table.isEmpty() || connection.isEmpty()) { - fprintf(stderr, "%s: Warning: Invalid database connection\n", qPrintable(m_option.messagePrefix())); - return; - } - - const QString varName = m_driver->findOrInsertWidget(w); - - m_output << m_indent << "if (!" << varName << "->sqlCursor()) {\n"; - - m_output << m_dindent << varName << "->setSqlCursor("; - - if (connection == QLatin1String("(default)")) { - m_output << "new Q3SqlCursor(" << fixString(table, m_dindent) << "), true);\n"; - } else { - m_output << "new Q3SqlCursor(" << fixString(table, m_dindent) << ", true, " << connection << "Connection" << "), false, true);\n"; - } - m_output << m_dindent << varName << "->refresh();\n"; - m_output << m_indent << "}\n"; -} - void WriteInitialization::initializeMenu(DomWidget *w, const QString &/*parentWidget*/) { const QString menuName = m_driver->findOrInsertWidget(w); diff --git a/src/tools/uic/cpp/cppwriteinitialization.h b/src/tools/uic/cpp/cppwriteinitialization.h index 302fbe4bc5..09983cff14 100644 --- a/src/tools/uic/cpp/cppwriteinitialization.h +++ b/src/tools/uic/cpp/cppwriteinitialization.h @@ -241,7 +241,6 @@ private: void initializeMenu(DomWidget *w, const QString &parentWidget); void initializeComboBox(DomWidget *w); - void initializeComboBox3(DomWidget *w); void initializeListWidget(DomWidget *w); void initializeTreeWidget(DomWidget *w); QList initializeTreeWidgetItems(const QList &domItems); @@ -250,22 +249,6 @@ private: QString disableSorting(DomWidget *w, const QString &varName); void enableSorting(DomWidget *w, const QString &varName, const QString &tempName); -// -// special initialization for the Q3 support classes -// - void initializeQ3ListBox(DomWidget *w); - void initializeQ3IconView(DomWidget *w); - void initializeQ3ListView(DomWidget *w); - void initializeQ3ListViewItems(const QString &className, const QString &varName, const QList &items); - void initializeQ3Table(DomWidget *w); - void initializeQ3TableItems(const QString &className, const QString &varName, const QList &items); - -// -// Sql -// - void initializeQ3SqlDataTable(DomWidget *w); - void initializeQ3SqlDataBrowser(DomWidget *w); - QString findDeclaration(const QString &name); DomWidget *findWidget(const QLatin1String &widgetClass); DomImage *findImage(const QString &name) const; diff --git a/src/tools/uic/uic.cpp b/src/tools/uic/uic.cpp index f045e58d2e..b616f77b94 100644 --- a/src/tools/uic/uic.cpp +++ b/src/tools/uic/uic.cpp @@ -333,14 +333,12 @@ void Uic::writeHeaderProtectionEnd() bool Uic::isMainWindow(const QString &className) const { - return customWidgetsInfo()->extends(className, QLatin1String("Q3MainWindow")) - || customWidgetsInfo()->extends(className, QLatin1String("QMainWindow")); + return customWidgetsInfo()->extends(className, QLatin1String("QMainWindow")); } bool Uic::isToolBar(const QString &className) const { - return customWidgetsInfo()->extends(className, QLatin1String("Q3ToolBar")) - || customWidgetsInfo()->extends(className, QLatin1String("QToolBar")); + return customWidgetsInfo()->extends(className, QLatin1String("QToolBar")); } bool Uic::isButton(const QString &className) const diff --git a/tests/auto/uic/baseline/config_fromuic3.ui b/tests/auto/uic/baseline/config_fromuic3.ui deleted file mode 100644 index f8debfebe3..0000000000 --- a/tests/auto/uic/baseline/config_fromuic3.ui +++ /dev/null @@ -1,1647 +0,0 @@ - - - - ********************************************************************* -** -** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the test suite of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** 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. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -********************************************************************* - - Config - - - - 0 - 0 - 481 - 645 - - - - Configure - - - logo.png - - - true - - - - 11 - - - 6 - - - - - Depth - - - - - 11 - 19 - 229 - 19 - - - - 1 bit monochrome - - - - - - 11 - 44 - 229 - 19 - - - - 4 bit grayscale - - - - - - 11 - 69 - 229 - 19 - - - - 8 bit - - - - - - 11 - 94 - 229 - 19 - - - - 12 (16) bit - - - - - - 11 - 119 - 229 - 19 - - - - 16 bit - - - - - - 11 - 144 - 229 - 19 - - - - 32 bit - - - - - - - - 0 - - - 6 - - - - - - 20 - 20 - - - - QSizePolicy::Expanding - - - Qt::Horizontal - - - - - - - &OK - - - true - - - true - - - - - - - &Cancel - - - true - - - - - - - - - Emulate touch screen (no mouse move). - - - - - - - Gamma - - - - 11 - - - 6 - - - - - Blue - - - false - - - - - - - - - - 0 - 0 - 0 - - - 0 - 0 - 255 - - - 127 - 127 - 255 - - - 63 - 63 - 255 - - - 0 - 0 - 127 - - - 0 - 0 - 170 - - - 0 - 0 - 0 - - - 255 - 255 - 255 - - - 0 - 0 - 0 - - - 255 - 255 - 255 - - - 220 - 220 - 220 - - - 0 - 0 - 0 - - - 10 - 95 - 137 - - - 255 - 255 - 255 - - - 0 - 0 - 0 - - - 0 - 0 - 0 - - - - - 0 - 0 - 0 - - - 0 - 0 - 255 - - - 127 - 127 - 255 - - - 38 - 38 - 255 - - - 0 - 0 - 127 - - - 0 - 0 - 170 - - - 0 - 0 - 0 - - - 255 - 255 - 255 - - - 0 - 0 - 0 - - - 255 - 255 - 255 - - - 220 - 220 - 220 - - - 0 - 0 - 0 - - - 10 - 95 - 137 - - - 255 - 255 - 255 - - - 0 - 0 - 0 - - - 0 - 0 - 0 - - - - - 128 - 128 - 128 - - - 0 - 0 - 255 - - - 127 - 127 - 255 - - - 38 - 38 - 255 - - - 0 - 0 - 127 - - - 0 - 0 - 170 - - - 0 - 0 - 0 - - - 255 - 255 - 255 - - - 128 - 128 - 128 - - - 255 - 255 - 255 - - - 220 - 220 - 220 - - - 0 - 0 - 0 - - - 10 - 95 - 137 - - - 255 - 255 - 255 - - - 0 - 0 - 0 - - - 0 - 0 - 0 - - - - - - 400 - - - 100 - - - Qt::Horizontal - - - - - - - 1.0 - - - false - - - - - - - - 20 - 20 - - - - QSizePolicy::Expanding - - - Qt::Vertical - - - - - - - Green - - - false - - - - - - - - - - 0 - 0 - 0 - - - 0 - 255 - 0 - - - 127 - 255 - 127 - - - 63 - 255 - 63 - - - 0 - 127 - 0 - - - 0 - 170 - 0 - - - 0 - 0 - 0 - - - 255 - 255 - 255 - - - 0 - 0 - 0 - - - 255 - 255 - 255 - - - 220 - 220 - 220 - - - 0 - 0 - 0 - - - 10 - 95 - 137 - - - 255 - 255 - 255 - - - 0 - 0 - 0 - - - 0 - 0 - 0 - - - - - 0 - 0 - 0 - - - 0 - 255 - 0 - - - 127 - 255 - 127 - - - 38 - 255 - 38 - - - 0 - 127 - 0 - - - 0 - 170 - 0 - - - 0 - 0 - 0 - - - 255 - 255 - 255 - - - 0 - 0 - 0 - - - 255 - 255 - 255 - - - 220 - 220 - 220 - - - 0 - 0 - 0 - - - 10 - 95 - 137 - - - 255 - 255 - 255 - - - 0 - 0 - 0 - - - 0 - 0 - 0 - - - - - 128 - 128 - 128 - - - 0 - 255 - 0 - - - 127 - 255 - 127 - - - 38 - 255 - 38 - - - 0 - 127 - 0 - - - 0 - 170 - 0 - - - 0 - 0 - 0 - - - 255 - 255 - 255 - - - 128 - 128 - 128 - - - 255 - 255 - 255 - - - 220 - 220 - 220 - - - 0 - 0 - 0 - - - 10 - 95 - 137 - - - 255 - 255 - 255 - - - 0 - 0 - 0 - - - 0 - 0 - 0 - - - - - - 400 - - - 100 - - - Qt::Horizontal - - - - - - - 1.0 - - - false - - - - - - - All - - - false - - - - - - - 1.0 - - - false - - - - - - - - - - 0 - 0 - 0 - - - 255 - 255 - 255 - - - 255 - 255 - 255 - - - 255 - 255 - 255 - - - 127 - 127 - 127 - - - 170 - 170 - 170 - - - 0 - 0 - 0 - - - 255 - 255 - 255 - - - 0 - 0 - 0 - - - 255 - 255 - 255 - - - 220 - 220 - 220 - - - 0 - 0 - 0 - - - 10 - 95 - 137 - - - 255 - 255 - 255 - - - 0 - 0 - 0 - - - 0 - 0 - 0 - - - - - 0 - 0 - 0 - - - 255 - 255 - 255 - - - 255 - 255 - 255 - - - 255 - 255 - 255 - - - 127 - 127 - 127 - - - 170 - 170 - 170 - - - 0 - 0 - 0 - - - 255 - 255 - 255 - - - 0 - 0 - 0 - - - 255 - 255 - 255 - - - 220 - 220 - 220 - - - 0 - 0 - 0 - - - 10 - 95 - 137 - - - 255 - 255 - 255 - - - 0 - 0 - 0 - - - 0 - 0 - 0 - - - - - 128 - 128 - 128 - - - 255 - 255 - 255 - - - 255 - 255 - 255 - - - 255 - 255 - 255 - - - 127 - 127 - 127 - - - 170 - 170 - 170 - - - 0 - 0 - 0 - - - 255 - 255 - 255 - - - 128 - 128 - 128 - - - 255 - 255 - 255 - - - 220 - 220 - 220 - - - 0 - 0 - 0 - - - 10 - 95 - 137 - - - 255 - 255 - 255 - - - 0 - 0 - 0 - - - 0 - 0 - 0 - - - - - - 400 - - - 100 - - - Qt::Horizontal - - - - - - - Red - - - false - - - - - - - 1.0 - - - false - - - - - - - - - - 0 - 0 - 0 - - - 255 - 0 - 0 - - - 255 - 127 - 127 - - - 255 - 63 - 63 - - - 127 - 0 - 0 - - - 170 - 0 - 0 - - - 0 - 0 - 0 - - - 255 - 255 - 255 - - - 0 - 0 - 0 - - - 255 - 255 - 255 - - - 220 - 220 - 220 - - - 0 - 0 - 0 - - - 10 - 95 - 137 - - - 255 - 255 - 255 - - - 0 - 0 - 0 - - - 0 - 0 - 0 - - - - - 0 - 0 - 0 - - - 255 - 0 - 0 - - - 255 - 127 - 127 - - - 255 - 38 - 38 - - - 127 - 0 - 0 - - - 170 - 0 - 0 - - - 0 - 0 - 0 - - - 255 - 255 - 255 - - - 0 - 0 - 0 - - - 255 - 255 - 255 - - - 220 - 220 - 220 - - - 0 - 0 - 0 - - - 10 - 95 - 137 - - - 255 - 255 - 255 - - - 0 - 0 - 0 - - - 0 - 0 - 0 - - - - - 128 - 128 - 128 - - - 255 - 0 - 0 - - - 255 - 127 - 127 - - - 255 - 38 - 38 - - - 127 - 0 - 0 - - - 170 - 0 - 0 - - - 0 - 0 - 0 - - - 255 - 255 - 255 - - - 128 - 128 - 128 - - - 255 - 255 - 255 - - - 220 - 220 - 220 - - - 0 - 0 - 0 - - - 10 - 95 - 137 - - - 255 - 255 - 255 - - - 0 - 0 - 0 - - - 0 - 0 - 0 - - - - - - 400 - - - 100 - - - Qt::Horizontal - - - - - - - - 20 - 20 - - - - QSizePolicy::Expanding - - - Qt::Vertical - - - - - - - - 20 - 20 - - - - QSizePolicy::Expanding - - - Qt::Vertical - - - - - - - Set all to 1.0 - - - - - - - - - - - 20 - 20 - - - - QSizePolicy::Expanding - - - Qt::Vertical - - - - - - - - - - - 5 - 5 - 0 - 0 - - - - Size - - - - 11 - - - 6 - - - - - 240x320 "PDA" - - - - - - - 320x240 "TV" - - - - - - - 640x480 "VGA" - - - - - - - 0 - - - 6 - - - - - Custom - - - - - - - 1280 - - - 1 - - - 16 - - - 400 - - - - - - - 1024 - - - 1 - - - 16 - - - 300 - - - - - - - - - 0 - - - 6 - - - - - - 0 - 0 - 0 - 0 - - - - Skin - - - - - - - - 5 - 0 - 0 - 0 - - - - - pda.skin - - - - - ipaq.skin - - - - - qpe.skin - - - - - cassiopeia.skin - - - - - other.skin - - - - - - - - - - - - - <p>Note that any applications using the virtual framebuffer will be terminated if you change the Size or Depth <i>above</i>. You may freely modify the Gamma <i>below</i>. - - - false - - - - - - - Test - - - 1 - - - - - - - - - GammaView - QWidget -

gammaview.h
- - 64 - 64 - - 0 - - 3 - 3 - - image0 - - - - - 789c6dd2c10ac2300c00d07bbf2234b7229d1be245fc04c5a3201e4615f430059d0711ff5ddb2e6bb236ec90eed134cb5a19d8ef36602af5ecdbfeeac05dda0798d3abebde87e3faa374d3807fa0d633a52d38d8de6f679fe33fc776e196f53cd010188256a3600a292882096246517815ca99884606e18044a3a40d91824820924265a7923a2e8bcd05f33db1173e002913175f2a6be6d3294871a2d95fa00e8a94ee017b69d339d90df1e77c57ea072ede6758 - - - - - buttonOk - clicked() - Config - accept() - - - buttonCancel - clicked() - Config - reject() - - - diff --git a/tests/auto/uic/baseline/config_fromuic3.ui.h b/tests/auto/uic/baseline/config_fromuic3.ui.h deleted file mode 100644 index 1078b891d2..0000000000 --- a/tests/auto/uic/baseline/config_fromuic3.ui.h +++ /dev/null @@ -1,716 +0,0 @@ -/* -********************************************************************* -** -** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the test suite of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** 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. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -********************************************************************* -*/ - -/******************************************************************************** -** Form generated from reading UI file 'config_fromuic3.ui' -** -** Created: Thu Dec 17 12:48:42 2009 -** by: Qt User Interface Compiler version 4.6.4 -** -** WARNING! All changes made in this file will be lost when recompiling UI file! -********************************************************************************/ - -#ifndef CONFIG_FROMUIC3_H -#define CONFIG_FROMUIC3_H - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "gammaview.h" - -QT_BEGIN_NAMESPACE - -class Ui_Config -{ -public: - QGridLayout *gridLayout; - Q3ButtonGroup *ButtonGroup2; - QRadioButton *depth_1; - QRadioButton *depth_4gray; - QRadioButton *depth_8; - QRadioButton *depth_12; - QRadioButton *depth_16; - QRadioButton *depth_32; - QHBoxLayout *hboxLayout; - QSpacerItem *Horizontal_Spacing2; - QPushButton *buttonOk; - QPushButton *buttonCancel; - QCheckBox *touchScreen; - Q3GroupBox *GroupBox1; - QGridLayout *gridLayout1; - QLabel *TextLabel3; - QSlider *bslider; - QLabel *blabel; - QSpacerItem *Spacer3; - QLabel *TextLabel2; - QSlider *gslider; - QLabel *glabel; - QLabel *TextLabel7; - QLabel *TextLabel8; - QSlider *gammaslider; - QLabel *TextLabel1_2; - QLabel *rlabel; - QSlider *rslider; - QSpacerItem *Spacer2; - QSpacerItem *Spacer4; - QPushButton *PushButton3; - GammaView *MyCustomWidget1; - QSpacerItem *Spacer5; - Q3ButtonGroup *ButtonGroup1; - QVBoxLayout *vboxLayout; - QRadioButton *size_240_320; - QRadioButton *size_320_240; - QRadioButton *size_640_480; - QHBoxLayout *hboxLayout1; - QRadioButton *size_custom; - QSpinBox *size_width; - QSpinBox *size_height; - QHBoxLayout *hboxLayout2; - QRadioButton *size_skin; - QComboBox *skin; - QLabel *TextLabel1; - QRadioButton *test_for_useless_buttongroupId; - - void setupUi(QDialog *Config) - { - if (Config->objectName().isEmpty()) - Config->setObjectName(QString::fromUtf8("Config")); - Config->resize(481, 645); - Config->setWindowIcon(QPixmap(QString::fromUtf8("logo.png"))); - Config->setSizeGripEnabled(true); - gridLayout = new QGridLayout(Config); - gridLayout->setSpacing(6); - gridLayout->setContentsMargins(11, 11, 11, 11); - gridLayout->setObjectName(QString::fromUtf8("gridLayout")); - ButtonGroup2 = new Q3ButtonGroup(Config); - ButtonGroup2->setObjectName(QString::fromUtf8("ButtonGroup2")); - depth_1 = new QRadioButton(ButtonGroup2); - depth_1->setObjectName(QString::fromUtf8("depth_1")); - depth_1->setGeometry(QRect(11, 19, 229, 19)); - depth_4gray = new QRadioButton(ButtonGroup2); - depth_4gray->setObjectName(QString::fromUtf8("depth_4gray")); - depth_4gray->setGeometry(QRect(11, 44, 229, 19)); - depth_8 = new QRadioButton(ButtonGroup2); - depth_8->setObjectName(QString::fromUtf8("depth_8")); - depth_8->setGeometry(QRect(11, 69, 229, 19)); - depth_12 = new QRadioButton(ButtonGroup2); - depth_12->setObjectName(QString::fromUtf8("depth_12")); - depth_12->setGeometry(QRect(11, 94, 229, 19)); - depth_16 = new QRadioButton(ButtonGroup2); - depth_16->setObjectName(QString::fromUtf8("depth_16")); - depth_16->setGeometry(QRect(11, 119, 229, 19)); - depth_32 = new QRadioButton(ButtonGroup2); - depth_32->setObjectName(QString::fromUtf8("depth_32")); - depth_32->setGeometry(QRect(11, 144, 229, 19)); - - gridLayout->addWidget(ButtonGroup2, 0, 1, 1, 1); - - hboxLayout = new QHBoxLayout(); - hboxLayout->setSpacing(6); - hboxLayout->setContentsMargins(0, 0, 0, 0); - hboxLayout->setObjectName(QString::fromUtf8("hboxLayout")); - Horizontal_Spacing2 = new QSpacerItem(20, 20, QSizePolicy::Expanding, QSizePolicy::Minimum); - - hboxLayout->addItem(Horizontal_Spacing2); - - buttonOk = new QPushButton(Config); - buttonOk->setObjectName(QString::fromUtf8("buttonOk")); - buttonOk->setAutoDefault(true); - buttonOk->setDefault(true); - - hboxLayout->addWidget(buttonOk); - - buttonCancel = new QPushButton(Config); - buttonCancel->setObjectName(QString::fromUtf8("buttonCancel")); - buttonCancel->setAutoDefault(true); - - hboxLayout->addWidget(buttonCancel); - - - gridLayout->addLayout(hboxLayout, 4, 0, 1, 2); - - touchScreen = new QCheckBox(Config); - touchScreen->setObjectName(QString::fromUtf8("touchScreen")); - - gridLayout->addWidget(touchScreen, 2, 0, 1, 2); - - GroupBox1 = new Q3GroupBox(Config); - GroupBox1->setObjectName(QString::fromUtf8("GroupBox1")); - GroupBox1->setColumnLayout(0, Qt::Vertical); - GroupBox1->layout()->setSpacing(6); - GroupBox1->layout()->setContentsMargins(11, 11, 11, 11); - gridLayout1 = new QGridLayout(); - QBoxLayout *boxlayout = qobject_cast(GroupBox1->layout()); - if (boxlayout) - boxlayout->addLayout(gridLayout1); - gridLayout1->setAlignment(Qt::AlignTop); - gridLayout1->setObjectName(QString::fromUtf8("gridLayout1")); - TextLabel3 = new QLabel(GroupBox1); - TextLabel3->setObjectName(QString::fromUtf8("TextLabel3")); - TextLabel3->setWordWrap(false); - - gridLayout1->addWidget(TextLabel3, 6, 0, 1, 1); - - bslider = new QSlider(GroupBox1); - bslider->setObjectName(QString::fromUtf8("bslider")); - QPalette palette; - palette.setColor(QPalette::Active, static_cast(0), QColor(0, 0, 0)); - palette.setColor(QPalette::Active, static_cast(1), QColor(0, 0, 255)); - palette.setColor(QPalette::Active, static_cast(2), QColor(127, 127, 255)); - palette.setColor(QPalette::Active, static_cast(3), QColor(63, 63, 255)); - palette.setColor(QPalette::Active, static_cast(4), QColor(0, 0, 127)); - palette.setColor(QPalette::Active, static_cast(5), QColor(0, 0, 170)); - palette.setColor(QPalette::Active, static_cast(6), QColor(0, 0, 0)); - palette.setColor(QPalette::Active, static_cast(7), QColor(255, 255, 255)); - palette.setColor(QPalette::Active, static_cast(8), QColor(0, 0, 0)); - palette.setColor(QPalette::Active, static_cast(9), QColor(255, 255, 255)); - palette.setColor(QPalette::Active, static_cast(10), QColor(220, 220, 220)); - palette.setColor(QPalette::Active, static_cast(11), QColor(0, 0, 0)); - palette.setColor(QPalette::Active, static_cast(12), QColor(10, 95, 137)); - palette.setColor(QPalette::Active, static_cast(13), QColor(255, 255, 255)); - palette.setColor(QPalette::Active, static_cast(14), QColor(0, 0, 0)); - palette.setColor(QPalette::Active, static_cast(15), QColor(0, 0, 0)); - palette.setColor(QPalette::Inactive, static_cast(0), QColor(0, 0, 0)); - palette.setColor(QPalette::Inactive, static_cast(1), QColor(0, 0, 255)); - palette.setColor(QPalette::Inactive, static_cast(2), QColor(127, 127, 255)); - palette.setColor(QPalette::Inactive, static_cast(3), QColor(38, 38, 255)); - palette.setColor(QPalette::Inactive, static_cast(4), QColor(0, 0, 127)); - palette.setColor(QPalette::Inactive, static_cast(5), QColor(0, 0, 170)); - palette.setColor(QPalette::Inactive, static_cast(6), QColor(0, 0, 0)); - palette.setColor(QPalette::Inactive, static_cast(7), QColor(255, 255, 255)); - palette.setColor(QPalette::Inactive, static_cast(8), QColor(0, 0, 0)); - palette.setColor(QPalette::Inactive, static_cast(9), QColor(255, 255, 255)); - palette.setColor(QPalette::Inactive, static_cast(10), QColor(220, 220, 220)); - palette.setColor(QPalette::Inactive, static_cast(11), QColor(0, 0, 0)); - palette.setColor(QPalette::Inactive, static_cast(12), QColor(10, 95, 137)); - palette.setColor(QPalette::Inactive, static_cast(13), QColor(255, 255, 255)); - palette.setColor(QPalette::Inactive, static_cast(14), QColor(0, 0, 0)); - palette.setColor(QPalette::Inactive, static_cast(15), QColor(0, 0, 0)); - palette.setColor(QPalette::Disabled, static_cast(0), QColor(128, 128, 128)); - palette.setColor(QPalette::Disabled, static_cast(1), QColor(0, 0, 255)); - palette.setColor(QPalette::Disabled, static_cast(2), QColor(127, 127, 255)); - palette.setColor(QPalette::Disabled, static_cast(3), QColor(38, 38, 255)); - palette.setColor(QPalette::Disabled, static_cast(4), QColor(0, 0, 127)); - palette.setColor(QPalette::Disabled, static_cast(5), QColor(0, 0, 170)); - palette.setColor(QPalette::Disabled, static_cast(6), QColor(0, 0, 0)); - palette.setColor(QPalette::Disabled, static_cast(7), QColor(255, 255, 255)); - palette.setColor(QPalette::Disabled, static_cast(8), QColor(128, 128, 128)); - palette.setColor(QPalette::Disabled, static_cast(9), QColor(255, 255, 255)); - palette.setColor(QPalette::Disabled, static_cast(10), QColor(220, 220, 220)); - palette.setColor(QPalette::Disabled, static_cast(11), QColor(0, 0, 0)); - palette.setColor(QPalette::Disabled, static_cast(12), QColor(10, 95, 137)); - palette.setColor(QPalette::Disabled, static_cast(13), QColor(255, 255, 255)); - palette.setColor(QPalette::Disabled, static_cast(14), QColor(0, 0, 0)); - palette.setColor(QPalette::Disabled, static_cast(15), QColor(0, 0, 0)); - bslider->setPalette(palette); - bslider->setMaximum(400); - bslider->setValue(100); - bslider->setOrientation(Qt::Horizontal); - - gridLayout1->addWidget(bslider, 6, 1, 1, 1); - - blabel = new QLabel(GroupBox1); - blabel->setObjectName(QString::fromUtf8("blabel")); - blabel->setWordWrap(false); - - gridLayout1->addWidget(blabel, 6, 2, 1, 1); - - Spacer3 = new QSpacerItem(20, 20, QSizePolicy::Minimum, QSizePolicy::Expanding); - - gridLayout1->addItem(Spacer3, 5, 1, 1, 1); - - TextLabel2 = new QLabel(GroupBox1); - TextLabel2->setObjectName(QString::fromUtf8("TextLabel2")); - TextLabel2->setWordWrap(false); - - gridLayout1->addWidget(TextLabel2, 4, 0, 1, 1); - - gslider = new QSlider(GroupBox1); - gslider->setObjectName(QString::fromUtf8("gslider")); - QPalette palette1; - palette1.setColor(QPalette::Active, static_cast(0), QColor(0, 0, 0)); - palette1.setColor(QPalette::Active, static_cast(1), QColor(0, 255, 0)); - palette1.setColor(QPalette::Active, static_cast(2), QColor(127, 255, 127)); - palette1.setColor(QPalette::Active, static_cast(3), QColor(63, 255, 63)); - palette1.setColor(QPalette::Active, static_cast(4), QColor(0, 127, 0)); - palette1.setColor(QPalette::Active, static_cast(5), QColor(0, 170, 0)); - palette1.setColor(QPalette::Active, static_cast(6), QColor(0, 0, 0)); - palette1.setColor(QPalette::Active, static_cast(7), QColor(255, 255, 255)); - palette1.setColor(QPalette::Active, static_cast(8), QColor(0, 0, 0)); - palette1.setColor(QPalette::Active, static_cast(9), QColor(255, 255, 255)); - palette1.setColor(QPalette::Active, static_cast(10), QColor(220, 220, 220)); - palette1.setColor(QPalette::Active, static_cast(11), QColor(0, 0, 0)); - palette1.setColor(QPalette::Active, static_cast(12), QColor(10, 95, 137)); - palette1.setColor(QPalette::Active, static_cast(13), QColor(255, 255, 255)); - palette1.setColor(QPalette::Active, static_cast(14), QColor(0, 0, 0)); - palette1.setColor(QPalette::Active, static_cast(15), QColor(0, 0, 0)); - palette1.setColor(QPalette::Inactive, static_cast(0), QColor(0, 0, 0)); - palette1.setColor(QPalette::Inactive, static_cast(1), QColor(0, 255, 0)); - palette1.setColor(QPalette::Inactive, static_cast(2), QColor(127, 255, 127)); - palette1.setColor(QPalette::Inactive, static_cast(3), QColor(38, 255, 38)); - palette1.setColor(QPalette::Inactive, static_cast(4), QColor(0, 127, 0)); - palette1.setColor(QPalette::Inactive, static_cast(5), QColor(0, 170, 0)); - palette1.setColor(QPalette::Inactive, static_cast(6), QColor(0, 0, 0)); - palette1.setColor(QPalette::Inactive, static_cast(7), QColor(255, 255, 255)); - palette1.setColor(QPalette::Inactive, static_cast(8), QColor(0, 0, 0)); - palette1.setColor(QPalette::Inactive, static_cast(9), QColor(255, 255, 255)); - palette1.setColor(QPalette::Inactive, static_cast(10), QColor(220, 220, 220)); - palette1.setColor(QPalette::Inactive, static_cast(11), QColor(0, 0, 0)); - palette1.setColor(QPalette::Inactive, static_cast(12), QColor(10, 95, 137)); - palette1.setColor(QPalette::Inactive, static_cast(13), QColor(255, 255, 255)); - palette1.setColor(QPalette::Inactive, static_cast(14), QColor(0, 0, 0)); - palette1.setColor(QPalette::Inactive, static_cast(15), QColor(0, 0, 0)); - palette1.setColor(QPalette::Disabled, static_cast(0), QColor(128, 128, 128)); - palette1.setColor(QPalette::Disabled, static_cast(1), QColor(0, 255, 0)); - palette1.setColor(QPalette::Disabled, static_cast(2), QColor(127, 255, 127)); - palette1.setColor(QPalette::Disabled, static_cast(3), QColor(38, 255, 38)); - palette1.setColor(QPalette::Disabled, static_cast(4), QColor(0, 127, 0)); - palette1.setColor(QPalette::Disabled, static_cast(5), QColor(0, 170, 0)); - palette1.setColor(QPalette::Disabled, static_cast(6), QColor(0, 0, 0)); - palette1.setColor(QPalette::Disabled, static_cast(7), QColor(255, 255, 255)); - palette1.setColor(QPalette::Disabled, static_cast(8), QColor(128, 128, 128)); - palette1.setColor(QPalette::Disabled, static_cast(9), QColor(255, 255, 255)); - palette1.setColor(QPalette::Disabled, static_cast(10), QColor(220, 220, 220)); - palette1.setColor(QPalette::Disabled, static_cast(11), QColor(0, 0, 0)); - palette1.setColor(QPalette::Disabled, static_cast(12), QColor(10, 95, 137)); - palette1.setColor(QPalette::Disabled, static_cast(13), QColor(255, 255, 255)); - palette1.setColor(QPalette::Disabled, static_cast(14), QColor(0, 0, 0)); - palette1.setColor(QPalette::Disabled, static_cast(15), QColor(0, 0, 0)); - gslider->setPalette(palette1); - gslider->setMaximum(400); - gslider->setValue(100); - gslider->setOrientation(Qt::Horizontal); - - gridLayout1->addWidget(gslider, 4, 1, 1, 1); - - glabel = new QLabel(GroupBox1); - glabel->setObjectName(QString::fromUtf8("glabel")); - glabel->setWordWrap(false); - - gridLayout1->addWidget(glabel, 4, 2, 1, 1); - - TextLabel7 = new QLabel(GroupBox1); - TextLabel7->setObjectName(QString::fromUtf8("TextLabel7")); - TextLabel7->setWordWrap(false); - - gridLayout1->addWidget(TextLabel7, 0, 0, 1, 1); - - TextLabel8 = new QLabel(GroupBox1); - TextLabel8->setObjectName(QString::fromUtf8("TextLabel8")); - TextLabel8->setWordWrap(false); - - gridLayout1->addWidget(TextLabel8, 0, 2, 1, 1); - - gammaslider = new QSlider(GroupBox1); - gammaslider->setObjectName(QString::fromUtf8("gammaslider")); - QPalette palette2; - palette2.setColor(QPalette::Active, static_cast(0), QColor(0, 0, 0)); - palette2.setColor(QPalette::Active, static_cast(1), QColor(255, 255, 255)); - palette2.setColor(QPalette::Active, static_cast(2), QColor(255, 255, 255)); - palette2.setColor(QPalette::Active, static_cast(3), QColor(255, 255, 255)); - palette2.setColor(QPalette::Active, static_cast(4), QColor(127, 127, 127)); - palette2.setColor(QPalette::Active, static_cast(5), QColor(170, 170, 170)); - palette2.setColor(QPalette::Active, static_cast(6), QColor(0, 0, 0)); - palette2.setColor(QPalette::Active, static_cast(7), QColor(255, 255, 255)); - palette2.setColor(QPalette::Active, static_cast(8), QColor(0, 0, 0)); - palette2.setColor(QPalette::Active, static_cast(9), QColor(255, 255, 255)); - palette2.setColor(QPalette::Active, static_cast(10), QColor(220, 220, 220)); - palette2.setColor(QPalette::Active, static_cast(11), QColor(0, 0, 0)); - palette2.setColor(QPalette::Active, static_cast(12), QColor(10, 95, 137)); - palette2.setColor(QPalette::Active, static_cast(13), QColor(255, 255, 255)); - palette2.setColor(QPalette::Active, static_cast(14), QColor(0, 0, 0)); - palette2.setColor(QPalette::Active, static_cast(15), QColor(0, 0, 0)); - palette2.setColor(QPalette::Inactive, static_cast(0), QColor(0, 0, 0)); - palette2.setColor(QPalette::Inactive, static_cast(1), QColor(255, 255, 255)); - palette2.setColor(QPalette::Inactive, static_cast(2), QColor(255, 255, 255)); - palette2.setColor(QPalette::Inactive, static_cast(3), QColor(255, 255, 255)); - palette2.setColor(QPalette::Inactive, static_cast(4), QColor(127, 127, 127)); - palette2.setColor(QPalette::Inactive, static_cast(5), QColor(170, 170, 170)); - palette2.setColor(QPalette::Inactive, static_cast(6), QColor(0, 0, 0)); - palette2.setColor(QPalette::Inactive, static_cast(7), QColor(255, 255, 255)); - palette2.setColor(QPalette::Inactive, static_cast(8), QColor(0, 0, 0)); - palette2.setColor(QPalette::Inactive, static_cast(9), QColor(255, 255, 255)); - palette2.setColor(QPalette::Inactive, static_cast(10), QColor(220, 220, 220)); - palette2.setColor(QPalette::Inactive, static_cast(11), QColor(0, 0, 0)); - palette2.setColor(QPalette::Inactive, static_cast(12), QColor(10, 95, 137)); - palette2.setColor(QPalette::Inactive, static_cast(13), QColor(255, 255, 255)); - palette2.setColor(QPalette::Inactive, static_cast(14), QColor(0, 0, 0)); - palette2.setColor(QPalette::Inactive, static_cast(15), QColor(0, 0, 0)); - palette2.setColor(QPalette::Disabled, static_cast(0), QColor(128, 128, 128)); - palette2.setColor(QPalette::Disabled, static_cast(1), QColor(255, 255, 255)); - palette2.setColor(QPalette::Disabled, static_cast(2), QColor(255, 255, 255)); - palette2.setColor(QPalette::Disabled, static_cast(3), QColor(255, 255, 255)); - palette2.setColor(QPalette::Disabled, static_cast(4), QColor(127, 127, 127)); - palette2.setColor(QPalette::Disabled, static_cast(5), QColor(170, 170, 170)); - palette2.setColor(QPalette::Disabled, static_cast(6), QColor(0, 0, 0)); - palette2.setColor(QPalette::Disabled, static_cast(7), QColor(255, 255, 255)); - palette2.setColor(QPalette::Disabled, static_cast(8), QColor(128, 128, 128)); - palette2.setColor(QPalette::Disabled, static_cast(9), QColor(255, 255, 255)); - palette2.setColor(QPalette::Disabled, static_cast(10), QColor(220, 220, 220)); - palette2.setColor(QPalette::Disabled, static_cast(11), QColor(0, 0, 0)); - palette2.setColor(QPalette::Disabled, static_cast(12), QColor(10, 95, 137)); - palette2.setColor(QPalette::Disabled, static_cast(13), QColor(255, 255, 255)); - palette2.setColor(QPalette::Disabled, static_cast(14), QColor(0, 0, 0)); - palette2.setColor(QPalette::Disabled, static_cast(15), QColor(0, 0, 0)); - gammaslider->setPalette(palette2); - gammaslider->setMaximum(400); - gammaslider->setValue(100); - gammaslider->setOrientation(Qt::Horizontal); - - gridLayout1->addWidget(gammaslider, 0, 1, 1, 1); - - TextLabel1_2 = new QLabel(GroupBox1); - TextLabel1_2->setObjectName(QString::fromUtf8("TextLabel1_2")); - TextLabel1_2->setWordWrap(false); - - gridLayout1->addWidget(TextLabel1_2, 2, 0, 1, 1); - - rlabel = new QLabel(GroupBox1); - rlabel->setObjectName(QString::fromUtf8("rlabel")); - rlabel->setWordWrap(false); - - gridLayout1->addWidget(rlabel, 2, 2, 1, 1); - - rslider = new QSlider(GroupBox1); - rslider->setObjectName(QString::fromUtf8("rslider")); - QPalette palette3; - palette3.setColor(QPalette::Active, static_cast(0), QColor(0, 0, 0)); - palette3.setColor(QPalette::Active, static_cast(1), QColor(255, 0, 0)); - palette3.setColor(QPalette::Active, static_cast(2), QColor(255, 127, 127)); - palette3.setColor(QPalette::Active, static_cast(3), QColor(255, 63, 63)); - palette3.setColor(QPalette::Active, static_cast(4), QColor(127, 0, 0)); - palette3.setColor(QPalette::Active, static_cast(5), QColor(170, 0, 0)); - palette3.setColor(QPalette::Active, static_cast(6), QColor(0, 0, 0)); - palette3.setColor(QPalette::Active, static_cast(7), QColor(255, 255, 255)); - palette3.setColor(QPalette::Active, static_cast(8), QColor(0, 0, 0)); - palette3.setColor(QPalette::Active, static_cast(9), QColor(255, 255, 255)); - palette3.setColor(QPalette::Active, static_cast(10), QColor(220, 220, 220)); - palette3.setColor(QPalette::Active, static_cast(11), QColor(0, 0, 0)); - palette3.setColor(QPalette::Active, static_cast(12), QColor(10, 95, 137)); - palette3.setColor(QPalette::Active, static_cast(13), QColor(255, 255, 255)); - palette3.setColor(QPalette::Active, static_cast(14), QColor(0, 0, 0)); - palette3.setColor(QPalette::Active, static_cast(15), QColor(0, 0, 0)); - palette3.setColor(QPalette::Inactive, static_cast(0), QColor(0, 0, 0)); - palette3.setColor(QPalette::Inactive, static_cast(1), QColor(255, 0, 0)); - palette3.setColor(QPalette::Inactive, static_cast(2), QColor(255, 127, 127)); - palette3.setColor(QPalette::Inactive, static_cast(3), QColor(255, 38, 38)); - palette3.setColor(QPalette::Inactive, static_cast(4), QColor(127, 0, 0)); - palette3.setColor(QPalette::Inactive, static_cast(5), QColor(170, 0, 0)); - palette3.setColor(QPalette::Inactive, static_cast(6), QColor(0, 0, 0)); - palette3.setColor(QPalette::Inactive, static_cast(7), QColor(255, 255, 255)); - palette3.setColor(QPalette::Inactive, static_cast(8), QColor(0, 0, 0)); - palette3.setColor(QPalette::Inactive, static_cast(9), QColor(255, 255, 255)); - palette3.setColor(QPalette::Inactive, static_cast(10), QColor(220, 220, 220)); - palette3.setColor(QPalette::Inactive, static_cast(11), QColor(0, 0, 0)); - palette3.setColor(QPalette::Inactive, static_cast(12), QColor(10, 95, 137)); - palette3.setColor(QPalette::Inactive, static_cast(13), QColor(255, 255, 255)); - palette3.setColor(QPalette::Inactive, static_cast(14), QColor(0, 0, 0)); - palette3.setColor(QPalette::Inactive, static_cast(15), QColor(0, 0, 0)); - palette3.setColor(QPalette::Disabled, static_cast(0), QColor(128, 128, 128)); - palette3.setColor(QPalette::Disabled, static_cast(1), QColor(255, 0, 0)); - palette3.setColor(QPalette::Disabled, static_cast(2), QColor(255, 127, 127)); - palette3.setColor(QPalette::Disabled, static_cast(3), QColor(255, 38, 38)); - palette3.setColor(QPalette::Disabled, static_cast(4), QColor(127, 0, 0)); - palette3.setColor(QPalette::Disabled, static_cast(5), QColor(170, 0, 0)); - palette3.setColor(QPalette::Disabled, static_cast(6), QColor(0, 0, 0)); - palette3.setColor(QPalette::Disabled, static_cast(7), QColor(255, 255, 255)); - palette3.setColor(QPalette::Disabled, static_cast(8), QColor(128, 128, 128)); - palette3.setColor(QPalette::Disabled, static_cast(9), QColor(255, 255, 255)); - palette3.setColor(QPalette::Disabled, static_cast(10), QColor(220, 220, 220)); - palette3.setColor(QPalette::Disabled, static_cast(11), QColor(0, 0, 0)); - palette3.setColor(QPalette::Disabled, static_cast(12), QColor(10, 95, 137)); - palette3.setColor(QPalette::Disabled, static_cast(13), QColor(255, 255, 255)); - palette3.setColor(QPalette::Disabled, static_cast(14), QColor(0, 0, 0)); - palette3.setColor(QPalette::Disabled, static_cast(15), QColor(0, 0, 0)); - rslider->setPalette(palette3); - rslider->setMaximum(400); - rslider->setValue(100); - rslider->setOrientation(Qt::Horizontal); - - gridLayout1->addWidget(rslider, 2, 1, 1, 1); - - Spacer2 = new QSpacerItem(20, 20, QSizePolicy::Minimum, QSizePolicy::Expanding); - - gridLayout1->addItem(Spacer2, 3, 1, 1, 1); - - Spacer4 = new QSpacerItem(20, 20, QSizePolicy::Minimum, QSizePolicy::Expanding); - - gridLayout1->addItem(Spacer4, 1, 1, 1, 1); - - PushButton3 = new QPushButton(GroupBox1); - PushButton3->setObjectName(QString::fromUtf8("PushButton3")); - - gridLayout1->addWidget(PushButton3, 8, 0, 1, 3); - - MyCustomWidget1 = new GammaView(GroupBox1); - MyCustomWidget1->setObjectName(QString::fromUtf8("MyCustomWidget1")); - - gridLayout1->addWidget(MyCustomWidget1, 0, 3, 9, 1); - - Spacer5 = new QSpacerItem(20, 20, QSizePolicy::Minimum, QSizePolicy::Expanding); - - gridLayout1->addItem(Spacer5, 7, 1, 1, 1); - - - gridLayout->addWidget(GroupBox1, 3, 0, 1, 2); - - ButtonGroup1 = new Q3ButtonGroup(Config); - ButtonGroup1->setObjectName(QString::fromUtf8("ButtonGroup1")); - QSizePolicy sizePolicy(static_cast(5), static_cast(5)); - sizePolicy.setHorizontalStretch(0); - sizePolicy.setVerticalStretch(0); - sizePolicy.setHeightForWidth(ButtonGroup1->sizePolicy().hasHeightForWidth()); - ButtonGroup1->setSizePolicy(sizePolicy); - ButtonGroup1->setColumnLayout(0, Qt::Vertical); - ButtonGroup1->layout()->setSpacing(6); - ButtonGroup1->layout()->setContentsMargins(11, 11, 11, 11); - vboxLayout = new QVBoxLayout(); - QBoxLayout *boxlayout1 = qobject_cast(ButtonGroup1->layout()); - if (boxlayout1) - boxlayout1->addLayout(vboxLayout); - vboxLayout->setAlignment(Qt::AlignTop); - vboxLayout->setObjectName(QString::fromUtf8("vboxLayout")); - size_240_320 = new QRadioButton(ButtonGroup1); - size_240_320->setObjectName(QString::fromUtf8("size_240_320")); - - vboxLayout->addWidget(size_240_320); - - size_320_240 = new QRadioButton(ButtonGroup1); - size_320_240->setObjectName(QString::fromUtf8("size_320_240")); - - vboxLayout->addWidget(size_320_240); - - size_640_480 = new QRadioButton(ButtonGroup1); - size_640_480->setObjectName(QString::fromUtf8("size_640_480")); - - vboxLayout->addWidget(size_640_480); - - hboxLayout1 = new QHBoxLayout(); - hboxLayout1->setSpacing(6); - hboxLayout1->setContentsMargins(0, 0, 0, 0); - hboxLayout1->setObjectName(QString::fromUtf8("hboxLayout1")); - size_custom = new QRadioButton(ButtonGroup1); - size_custom->setObjectName(QString::fromUtf8("size_custom")); - - hboxLayout1->addWidget(size_custom); - - size_width = new QSpinBox(ButtonGroup1); - size_width->setObjectName(QString::fromUtf8("size_width")); - size_width->setMaximum(1280); - size_width->setMinimum(1); - size_width->setSingleStep(16); - size_width->setValue(400); - - hboxLayout1->addWidget(size_width); - - size_height = new QSpinBox(ButtonGroup1); - size_height->setObjectName(QString::fromUtf8("size_height")); - size_height->setMaximum(1024); - size_height->setMinimum(1); - size_height->setSingleStep(16); - size_height->setValue(300); - - hboxLayout1->addWidget(size_height); - - - vboxLayout->addLayout(hboxLayout1); - - hboxLayout2 = new QHBoxLayout(); - hboxLayout2->setSpacing(6); - hboxLayout2->setContentsMargins(0, 0, 0, 0); - hboxLayout2->setObjectName(QString::fromUtf8("hboxLayout2")); - size_skin = new QRadioButton(ButtonGroup1); - size_skin->setObjectName(QString::fromUtf8("size_skin")); - QSizePolicy sizePolicy1(static_cast(0), static_cast(0)); - sizePolicy1.setHorizontalStretch(0); - sizePolicy1.setVerticalStretch(0); - sizePolicy1.setHeightForWidth(size_skin->sizePolicy().hasHeightForWidth()); - size_skin->setSizePolicy(sizePolicy1); - - hboxLayout2->addWidget(size_skin); - - skin = new QComboBox(ButtonGroup1); - skin->setObjectName(QString::fromUtf8("skin")); - QSizePolicy sizePolicy2(static_cast(5), static_cast(0)); - sizePolicy2.setHorizontalStretch(0); - sizePolicy2.setVerticalStretch(0); - sizePolicy2.setHeightForWidth(skin->sizePolicy().hasHeightForWidth()); - skin->setSizePolicy(sizePolicy2); - - hboxLayout2->addWidget(skin); - - - vboxLayout->addLayout(hboxLayout2); - - - gridLayout->addWidget(ButtonGroup1, 0, 0, 1, 1); - - TextLabel1 = new QLabel(Config); - TextLabel1->setObjectName(QString::fromUtf8("TextLabel1")); - TextLabel1->setWordWrap(false); - - gridLayout->addWidget(TextLabel1, 1, 0, 1, 2); - - test_for_useless_buttongroupId = new QRadioButton(Config); - test_for_useless_buttongroupId->setObjectName(QString::fromUtf8("test_for_useless_buttongroupId")); - - gridLayout->addWidget(test_for_useless_buttongroupId, 0, 0, 1, 1); - - - retranslateUi(Config); - QObject::connect(buttonOk, SIGNAL(clicked()), Config, SLOT(accept())); - QObject::connect(buttonCancel, SIGNAL(clicked()), Config, SLOT(reject())); - - QMetaObject::connectSlotsByName(Config); - } // setupUi - - void retranslateUi(QDialog *Config) - { - Config->setWindowTitle(QApplication::translate("Config", "Configure", 0, QApplication::UnicodeUTF8)); - ButtonGroup2->setTitle(QApplication::translate("Config", "Depth", 0, QApplication::UnicodeUTF8)); - depth_1->setText(QApplication::translate("Config", "1 bit monochrome", 0, QApplication::UnicodeUTF8)); - depth_4gray->setText(QApplication::translate("Config", "4 bit grayscale", 0, QApplication::UnicodeUTF8)); - depth_8->setText(QApplication::translate("Config", "8 bit", 0, QApplication::UnicodeUTF8)); - depth_12->setText(QApplication::translate("Config", "12 (16) bit", 0, QApplication::UnicodeUTF8)); - depth_16->setText(QApplication::translate("Config", "16 bit", 0, QApplication::UnicodeUTF8)); - depth_32->setText(QApplication::translate("Config", "32 bit", 0, QApplication::UnicodeUTF8)); - buttonOk->setText(QApplication::translate("Config", "&OK", 0, QApplication::UnicodeUTF8)); - buttonCancel->setText(QApplication::translate("Config", "&Cancel", 0, QApplication::UnicodeUTF8)); - touchScreen->setText(QApplication::translate("Config", "Emulate touch screen (no mouse move).", 0, QApplication::UnicodeUTF8)); - GroupBox1->setTitle(QApplication::translate("Config", "Gamma", 0, QApplication::UnicodeUTF8)); - TextLabel3->setText(QApplication::translate("Config", "Blue", 0, QApplication::UnicodeUTF8)); - blabel->setText(QApplication::translate("Config", "1.0", 0, QApplication::UnicodeUTF8)); - TextLabel2->setText(QApplication::translate("Config", "Green", 0, QApplication::UnicodeUTF8)); - glabel->setText(QApplication::translate("Config", "1.0", 0, QApplication::UnicodeUTF8)); - TextLabel7->setText(QApplication::translate("Config", "All", 0, QApplication::UnicodeUTF8)); - TextLabel8->setText(QApplication::translate("Config", "1.0", 0, QApplication::UnicodeUTF8)); - TextLabel1_2->setText(QApplication::translate("Config", "Red", 0, QApplication::UnicodeUTF8)); - rlabel->setText(QApplication::translate("Config", "1.0", 0, QApplication::UnicodeUTF8)); - PushButton3->setText(QApplication::translate("Config", "Set all to 1.0", 0, QApplication::UnicodeUTF8)); - ButtonGroup1->setTitle(QApplication::translate("Config", "Size", 0, QApplication::UnicodeUTF8)); - size_240_320->setText(QApplication::translate("Config", "240x320 \"PDA\"", 0, QApplication::UnicodeUTF8)); - size_320_240->setText(QApplication::translate("Config", "320x240 \"TV\"", 0, QApplication::UnicodeUTF8)); - size_640_480->setText(QApplication::translate("Config", "640x480 \"VGA\"", 0, QApplication::UnicodeUTF8)); - size_custom->setText(QApplication::translate("Config", "Custom", 0, QApplication::UnicodeUTF8)); - size_skin->setText(QApplication::translate("Config", "Skin", 0, QApplication::UnicodeUTF8)); - skin->clear(); - skin->insertItems(0, QStringList() - << QApplication::translate("Config", "pda.skin", 0, QApplication::UnicodeUTF8) - << QApplication::translate("Config", "ipaq.skin", 0, QApplication::UnicodeUTF8) - << QApplication::translate("Config", "qpe.skin", 0, QApplication::UnicodeUTF8) - << QApplication::translate("Config", "cassiopeia.skin", 0, QApplication::UnicodeUTF8) - << QApplication::translate("Config", "other.skin", 0, QApplication::UnicodeUTF8) - ); - TextLabel1->setText(QApplication::translate("Config", "

Note that any applications using the virtual framebuffer will be terminated if you change the Size or Depth above. You may freely modify the Gamma below.", 0, QApplication::UnicodeUTF8)); - test_for_useless_buttongroupId->setText(QApplication::translate("Config", "Test", 0, QApplication::UnicodeUTF8)); - } // retranslateUi - - -protected: - enum IconID - { - image0_ID, - unknown_ID - }; - static QPixmap qt_get_icon(IconID id) - { - /* XPM */ - static const char* const image0_data[] = { -"22 22 2 1", -". c None", -"# c #a4c610", -"........######........", -".....###########......", -"....##############....", -"...################...", -"..######......######..", -"..#####........#####..", -".#####.......#..#####.", -".####.......###..####.", -"####.......#####..####", -"####......#####...####", -"####....#######...####", -"####....######....####", -"####...########...####", -".####.##########..####", -".####..####.#########.", -".#####..##...########.", -"..#####.......#######.", -"..######......######..", -"...###################", -"....##################", -"......###########.###.", -"........######.....#.."}; - - - switch (id) { - case image0_ID: return QPixmap((const char**)image0_data); - default: return QPixmap(); - } // switch - } // icon - -}; - -namespace Ui { - class Config: public Ui_Config {}; -} // namespace Ui - -QT_END_NAMESPACE - -#endif // CONFIG_FROMUIC3_H diff --git a/tests/auto/uic/baseline/mainwindowbase.ui b/tests/auto/uic/baseline/mainwindowbase.ui deleted file mode 100644 index 3bdfecc62c..0000000000 --- a/tests/auto/uic/baseline/mainwindowbase.ui +++ /dev/null @@ -1,1214 +0,0 @@ - - - ********************************************************************* -** -** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the autotests of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** 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. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -********************************************************************* - - MainWindowBase - - - - 0 - 0 - 724 - 615 - - - - Qt Configuration - - - - - 0 - 28 - 724 - 587 - - - - - 8 - - - 4 - - - - - - 200 - 0 - - - - true - - - - - - - - Appearance - - - - 4 - - - 4 - - - - - GUI Style - - - - 8 - - - 4 - - - - - Select GUI &Style: - - - gstylecombo - - - - - - - - - - - - - - 5 - 4 - 0 - 0 - - - - Build Palette - - - - 8 - - - 4 - - - - - &3-D Effects: - - - buttonMainColor - - - - - - - - - - - 1 - 1 - 0 - 0 - - - - - 50 - 0 - - - - 1 - - - 0 - - - Window Back&ground: - - - Qt::AlignVCenter - - - 0 - - - buttonMainColor2 - - - - - - - - - - Qt::Horizontal - - - QSizePolicy::Expanding - - - - 70 - 20 - - - - - - - - &Tune Palette... - - - - - - - - - - - 5 - 7 - 0 - 0 - - - - Preview - - - - 8 - - - 4 - - - - - Select &Palette: - - - paletteCombo - - - - - - - - Active Palette - - - - - Inactive Palette - - - - - Disabled Palette - - - - - - - - - 7 - 7 - 0 - 0 - - - - - 410 - 260 - - - - - - - - - - - - Fonts - - - - 8 - - - 4 - - - - - Default Font - - - - 8 - - - 4 - - - - - true - - - false - - - - - - - true - - - false - - - - - - - true - - - true - - - false - - - - - - - &Style: - - - stylecombo - - - - - - - &Point Size: - - - psizecombo - - - - - - - F&amily: - - - familycombo - - - - - - - Sample Text - - - Qt::AlignHCenter - - - - - - - - - - Font Substitution - - - - 8 - - - 4 - - - - - 0 - - - 4 - - - - - S&elect or Enter a Family: - - - familysubcombo - - - - - - - true - - - true - - - false - - - - - - - - - QFrame::HLine - - - QFrame::Sunken - - - Qt::Horizontal - - - - - - - Current Substitutions: - - - - - - - - - - 0 - - - 4 - - - - - Up - - - - - - - Down - - - - - - - Remove - - - - - - - - - QFrame::HLine - - - QFrame::Sunken - - - Qt::Horizontal - - - - - - - 0 - - - 4 - - - - - Select s&ubstitute Family: - - - choosesubcombo - - - - - - - true - - - false - - - - - - - Add - - - - - - - - - - - - - Interface - - - - 7 - - - 4 - - - - - Feel Settings - - - - 8 - - - 4 - - - - - ms - - - 10000 - - - 10 - - - - - - - &Double Click Interval: - - - dcispin - - - - - - - No blinking - - - ms - - - 10000 - - - 9 - - - - - - - &Cursor Flash Time: - - - cfispin - - - - - - - lines - - - 20 - - - 1 - - - - - - - Wheel &Scroll Lines: - - - wslspin - - - - - - - Resolve symlinks in URLs - - - - - - - - - - GUI Effects - - - - 8 - - - 4 - - - - - &Enable - - - Alt+E - - - - - - - QFrame::NoFrame - - - QFrame::Plain - - - - 0 - - - 4 - - - - - &Menu Effect: - - - menueffect - - - - - - - C&omboBox Effect: - - - comboeffect - - - - - - - &ToolTip Effect: - - - tooltipeffect - - - - - - - Tool&Box Effect: - - - toolboxeffect - - - - - - - 0 - - - true - - - - Disable - - - - - Animate - - - - - Fade - - - - - - - - - Disable - - - - - Animate - - - - - - - - - Disable - - - - - Animate - - - - - Fade - - - - - - - - - Disable - - - - - Animate - - - - - - - - - - - - - - Global Strut - - - - 8 - - - 4 - - - - - Minimum &Width: - - - strutwidth - - - - - - - Minimum Hei&ght: - - - strutheight - - - - - - - pixels - - - 1000 - - - - - - - pixels - - - 1000 - - - - - - - - - - Enhanced support for languages written right-to-left - - - - - - - XIM Input Style: - - - - - - - 0 - - - - On The Spot - - - - - Over The Spot - - - - - Off The Spot - - - - - Root - - - - - - - - Qt::Vertical - - - QSizePolicy::Expanding - - - - 20 - 40 - - - - - - - - - Printer - - - - 8 - - - 4 - - - - - Enable Font embedding - - - true - - - - - - - - 5 - 7 - 0 - 0 - - - - Font Paths - - - - 8 - - - 4 - - - - - 0 - - - 4 - - - - - Up - - - - - - - Remove - - - - - - - Down - - - - - - - - - - - - 0 - - - 4 - - - - - Qt::Horizontal - - - QSizePolicy::Minimum - - - - 20 - 20 - - - - - - - - Add - - - - - - - Browse... - - - - - - - Press the <b>Browse</b> button or enter a directory and press Enter to add them to the list. - - - - - - - - - - - - - - - - - - - - - 0 - 0 - 724 - 27 - - - - - - 0 - 0 - 800 - 480 - - - - &File - - - - - - - - - - - - 0 - 0 - 800 - 480 - - - - &Help - - - - - - - - - - - - - - &Save - - - Save - - - Ctrl+S - - - - - E&xit - - - Exit - - - - - - - - &About - - - About - - - - - - - - About &Qt - - - About Qt - - - - - - - Q3ListBox - -

q3listbox.h
- 0 - - - - ColorButton - -
colorbutton.h
- 0 - -
- - Q3Frame - -
Qt3Support/Q3Frame
- 1 - -
- - PreviewFrame - -
previewframe.h
- 0 - -
- - Q3MainWindow - -
q3mainwindow.h
- 1 - -
- - - helpview - TabWidget3 - familycombo - stylecombo - psizecombo - samplelineedit - familysubcombo - PushButton2 - PushButton3 - PushButton4 - choosesubcombo - PushButton1 - dcispin - cfispin - wslspin - effectcheckbox - menueffect - comboeffect - tooltipeffect - strutwidth - strutheight - sublistbox - - - - diff --git a/tests/auto/uic/baseline/mainwindowbase.ui.h b/tests/auto/uic/baseline/mainwindowbase.ui.h deleted file mode 100644 index abf8ff81d1..0000000000 --- a/tests/auto/uic/baseline/mainwindowbase.ui.h +++ /dev/null @@ -1,968 +0,0 @@ -/* -********************************************************************* -** -** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the autotests of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** 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. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -********************************************************************* -*/ - -/******************************************************************************** -** Form generated from reading UI file 'mainwindowbase.ui' -** -** Created: Fri Sep 4 10:17:14 2009 -** by: Qt User Interface Compiler version 4.6.0 -** -** WARNING! All changes made in this file will be lost when recompiling UI file! -********************************************************************************/ - -#ifndef MAINWINDOWBASE_H -#define MAINWINDOWBASE_H - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "colorbutton.h" -#include "previewframe.h" - -QT_BEGIN_NAMESPACE - -class Ui_MainWindowBase -{ -public: - QAction *fileSaveAction; - QAction *fileExitAction; - QAction *helpAboutAction; - QAction *helpAboutQtAction; - QWidget *widget; - QHBoxLayout *hboxLayout; - QTextEdit *helpview; - QTabWidget *TabWidget3; - QWidget *tab1; - QVBoxLayout *vboxLayout; - QGroupBox *GroupBox40; - QHBoxLayout *hboxLayout1; - QLabel *gstylebuddy; - QComboBox *gstylecombo; - QGroupBox *groupAutoPalette; - QHBoxLayout *hboxLayout2; - QLabel *labelMainColor; - ColorButton *buttonMainColor; - QLabel *labelMainColor2; - ColorButton *buttonMainColor2; - QSpacerItem *spacerItem; - QPushButton *btnAdvanced; - QGroupBox *GroupBox126; - QGridLayout *gridLayout; - QLabel *TextLabel1; - QComboBox *paletteCombo; - PreviewFrame *previewFrame; - QWidget *tab2; - QVBoxLayout *vboxLayout1; - QGroupBox *GroupBox1; - QGridLayout *gridLayout1; - QComboBox *stylecombo; - QComboBox *familycombo; - QComboBox *psizecombo; - QLabel *stylebuddy; - QLabel *psizebuddy; - QLabel *familybuddy; - QLineEdit *samplelineedit; - QGroupBox *GroupBox2; - QVBoxLayout *vboxLayout2; - QHBoxLayout *hboxLayout3; - QLabel *famsubbuddy; - QComboBox *familysubcombo; - QFrame *Line1; - QLabel *TextLabel5; - Q3ListBox *sublistbox; - QHBoxLayout *hboxLayout4; - QPushButton *PushButton2; - QPushButton *PushButton3; - QPushButton *PushButton4; - QFrame *Line2; - QHBoxLayout *hboxLayout5; - QLabel *choosebuddy; - QComboBox *choosesubcombo; - QPushButton *PushButton1; - QWidget *tab; - QVBoxLayout *vboxLayout3; - QGroupBox *GroupBox4; - QGridLayout *gridLayout2; - QSpinBox *dcispin; - QLabel *dcibuddy; - QSpinBox *cfispin; - QLabel *cfibuddy; - QSpinBox *wslspin; - QLabel *wslbuddy; - QCheckBox *resolvelinks; - QGroupBox *GroupBox3; - QVBoxLayout *vboxLayout4; - QCheckBox *effectcheckbox; - Q3Frame *effectbase; - QGridLayout *gridLayout3; - QLabel *meffectbuddy; - QLabel *ceffectbuddy; - QLabel *teffectbuddy; - QLabel *beffectbuddy; - QComboBox *menueffect; - QComboBox *comboeffect; - QComboBox *tooltipeffect; - QComboBox *toolboxeffect; - QGroupBox *GroupBox5; - QGridLayout *gridLayout4; - QLabel *swbuddy; - QLabel *shbuddy; - QSpinBox *strutwidth; - QSpinBox *strutheight; - QCheckBox *rtlExtensions; - QLabel *inputStyleLabel; - QComboBox *inputStyle; - QSpacerItem *spacerItem1; - QWidget *tab3; - QVBoxLayout *vboxLayout5; - QCheckBox *fontembeddingcheckbox; - QGroupBox *GroupBox10; - QVBoxLayout *vboxLayout6; - QGridLayout *gridLayout5; - QPushButton *PushButton11; - QPushButton *PushButton13; - QPushButton *PushButton12; - Q3ListBox *fontpathlistbox; - QGridLayout *gridLayout6; - QSpacerItem *spacerItem2; - QPushButton *PushButton15; - QPushButton *PushButton14; - QLabel *TextLabel15_2; - QLineEdit *fontpathlineedit; - QMenuBar *menubar; - QAction *action; - QAction *action1; - QAction *action2; - QMenu *PopupMenu; - QAction *action3; - QAction *action4; - QAction *action5; - QMenu *PopupMenu_2; - - void setupUi(Q3MainWindow *MainWindowBase) - { - if (MainWindowBase->objectName().isEmpty()) - MainWindowBase->setObjectName(QString::fromUtf8("MainWindowBase")); - MainWindowBase->resize(724, 615); - fileSaveAction = new QAction(MainWindowBase); - fileSaveAction->setObjectName(QString::fromUtf8("fileSaveAction")); - fileExitAction = new QAction(MainWindowBase); - fileExitAction->setObjectName(QString::fromUtf8("fileExitAction")); - helpAboutAction = new QAction(MainWindowBase); - helpAboutAction->setObjectName(QString::fromUtf8("helpAboutAction")); - helpAboutQtAction = new QAction(MainWindowBase); - helpAboutQtAction->setObjectName(QString::fromUtf8("helpAboutQtAction")); - widget = new QWidget(MainWindowBase); - widget->setObjectName(QString::fromUtf8("widget")); - widget->setGeometry(QRect(0, 28, 724, 587)); - hboxLayout = new QHBoxLayout(widget); - hboxLayout->setSpacing(4); - hboxLayout->setContentsMargins(8, 8, 8, 8); - hboxLayout->setObjectName(QString::fromUtf8("hboxLayout")); - helpview = new QTextEdit(widget); - helpview->setObjectName(QString::fromUtf8("helpview")); - helpview->setMinimumSize(QSize(200, 0)); - helpview->setReadOnly(true); - - hboxLayout->addWidget(helpview); - - TabWidget3 = new QTabWidget(widget); - TabWidget3->setObjectName(QString::fromUtf8("TabWidget3")); - tab1 = new QWidget(); - tab1->setObjectName(QString::fromUtf8("tab1")); - vboxLayout = new QVBoxLayout(tab1); - vboxLayout->setSpacing(4); - vboxLayout->setContentsMargins(4, 4, 4, 4); - vboxLayout->setObjectName(QString::fromUtf8("vboxLayout")); - GroupBox40 = new QGroupBox(tab1); - GroupBox40->setObjectName(QString::fromUtf8("GroupBox40")); - hboxLayout1 = new QHBoxLayout(GroupBox40); - hboxLayout1->setSpacing(4); - hboxLayout1->setContentsMargins(8, 8, 8, 8); - hboxLayout1->setObjectName(QString::fromUtf8("hboxLayout1")); - gstylebuddy = new QLabel(GroupBox40); - gstylebuddy->setObjectName(QString::fromUtf8("gstylebuddy")); - - hboxLayout1->addWidget(gstylebuddy); - - gstylecombo = new QComboBox(GroupBox40); - gstylecombo->setObjectName(QString::fromUtf8("gstylecombo")); - - hboxLayout1->addWidget(gstylecombo); - - - vboxLayout->addWidget(GroupBox40); - - groupAutoPalette = new QGroupBox(tab1); - groupAutoPalette->setObjectName(QString::fromUtf8("groupAutoPalette")); - QSizePolicy sizePolicy(static_cast(5), static_cast(4)); - sizePolicy.setHorizontalStretch(0); - sizePolicy.setVerticalStretch(0); - sizePolicy.setHeightForWidth(groupAutoPalette->sizePolicy().hasHeightForWidth()); - groupAutoPalette->setSizePolicy(sizePolicy); - hboxLayout2 = new QHBoxLayout(groupAutoPalette); - hboxLayout2->setSpacing(4); - hboxLayout2->setContentsMargins(8, 8, 8, 8); - hboxLayout2->setObjectName(QString::fromUtf8("hboxLayout2")); - labelMainColor = new QLabel(groupAutoPalette); - labelMainColor->setObjectName(QString::fromUtf8("labelMainColor")); - - hboxLayout2->addWidget(labelMainColor); - - buttonMainColor = new ColorButton(groupAutoPalette); - buttonMainColor->setObjectName(QString::fromUtf8("buttonMainColor")); - - hboxLayout2->addWidget(buttonMainColor); - - labelMainColor2 = new QLabel(groupAutoPalette); - labelMainColor2->setObjectName(QString::fromUtf8("labelMainColor2")); - QSizePolicy sizePolicy1(static_cast(1), static_cast(1)); - sizePolicy1.setHorizontalStretch(0); - sizePolicy1.setVerticalStretch(0); - sizePolicy1.setHeightForWidth(labelMainColor2->sizePolicy().hasHeightForWidth()); - labelMainColor2->setSizePolicy(sizePolicy1); - labelMainColor2->setMinimumSize(QSize(50, 0)); - labelMainColor2->setLineWidth(1); - labelMainColor2->setMidLineWidth(0); - labelMainColor2->setAlignment(Qt::AlignVCenter); - labelMainColor2->setMargin(0); - - hboxLayout2->addWidget(labelMainColor2); - - buttonMainColor2 = new ColorButton(groupAutoPalette); - buttonMainColor2->setObjectName(QString::fromUtf8("buttonMainColor2")); - - hboxLayout2->addWidget(buttonMainColor2); - - spacerItem = new QSpacerItem(70, 20, QSizePolicy::Expanding, QSizePolicy::Minimum); - - hboxLayout2->addItem(spacerItem); - - btnAdvanced = new QPushButton(groupAutoPalette); - btnAdvanced->setObjectName(QString::fromUtf8("btnAdvanced")); - - hboxLayout2->addWidget(btnAdvanced); - - - vboxLayout->addWidget(groupAutoPalette); - - GroupBox126 = new QGroupBox(tab1); - GroupBox126->setObjectName(QString::fromUtf8("GroupBox126")); - QSizePolicy sizePolicy2(static_cast(5), static_cast(7)); - sizePolicy2.setHorizontalStretch(0); - sizePolicy2.setVerticalStretch(0); - sizePolicy2.setHeightForWidth(GroupBox126->sizePolicy().hasHeightForWidth()); - GroupBox126->setSizePolicy(sizePolicy2); - gridLayout = new QGridLayout(GroupBox126); - gridLayout->setSpacing(4); - gridLayout->setContentsMargins(8, 8, 8, 8); - gridLayout->setObjectName(QString::fromUtf8("gridLayout")); - TextLabel1 = new QLabel(GroupBox126); - TextLabel1->setObjectName(QString::fromUtf8("TextLabel1")); - - gridLayout->addWidget(TextLabel1, 0, 0, 1, 1); - - paletteCombo = new QComboBox(GroupBox126); - paletteCombo->setObjectName(QString::fromUtf8("paletteCombo")); - - gridLayout->addWidget(paletteCombo, 0, 1, 1, 1); - - previewFrame = new PreviewFrame(GroupBox126); - previewFrame->setObjectName(QString::fromUtf8("previewFrame")); - QSizePolicy sizePolicy3(static_cast(7), static_cast(7)); - sizePolicy3.setHorizontalStretch(0); - sizePolicy3.setVerticalStretch(0); - sizePolicy3.setHeightForWidth(previewFrame->sizePolicy().hasHeightForWidth()); - previewFrame->setSizePolicy(sizePolicy3); - previewFrame->setMinimumSize(QSize(410, 260)); - - gridLayout->addWidget(previewFrame, 1, 0, 1, 2); - - - vboxLayout->addWidget(GroupBox126); - - TabWidget3->addTab(tab1, QString()); - tab2 = new QWidget(); - tab2->setObjectName(QString::fromUtf8("tab2")); - vboxLayout1 = new QVBoxLayout(tab2); - vboxLayout1->setSpacing(4); - vboxLayout1->setContentsMargins(8, 8, 8, 8); - vboxLayout1->setObjectName(QString::fromUtf8("vboxLayout1")); - GroupBox1 = new QGroupBox(tab2); - GroupBox1->setObjectName(QString::fromUtf8("GroupBox1")); - gridLayout1 = new QGridLayout(GroupBox1); - gridLayout1->setSpacing(4); - gridLayout1->setContentsMargins(8, 8, 8, 8); - gridLayout1->setObjectName(QString::fromUtf8("gridLayout1")); - stylecombo = new QComboBox(GroupBox1); - stylecombo->setObjectName(QString::fromUtf8("stylecombo")); - stylecombo->setAutoCompletion(true); - stylecombo->setDuplicatesEnabled(false); - - gridLayout1->addWidget(stylecombo, 1, 1, 1, 1); - - familycombo = new QComboBox(GroupBox1); - familycombo->setObjectName(QString::fromUtf8("familycombo")); - familycombo->setAutoCompletion(true); - familycombo->setDuplicatesEnabled(false); - - gridLayout1->addWidget(familycombo, 0, 1, 1, 1); - - psizecombo = new QComboBox(GroupBox1); - psizecombo->setObjectName(QString::fromUtf8("psizecombo")); - psizecombo->setEditable(true); - psizecombo->setAutoCompletion(true); - psizecombo->setDuplicatesEnabled(false); - - gridLayout1->addWidget(psizecombo, 2, 1, 1, 1); - - stylebuddy = new QLabel(GroupBox1); - stylebuddy->setObjectName(QString::fromUtf8("stylebuddy")); - - gridLayout1->addWidget(stylebuddy, 1, 0, 1, 1); - - psizebuddy = new QLabel(GroupBox1); - psizebuddy->setObjectName(QString::fromUtf8("psizebuddy")); - - gridLayout1->addWidget(psizebuddy, 2, 0, 1, 1); - - familybuddy = new QLabel(GroupBox1); - familybuddy->setObjectName(QString::fromUtf8("familybuddy")); - - gridLayout1->addWidget(familybuddy, 0, 0, 1, 1); - - samplelineedit = new QLineEdit(GroupBox1); - samplelineedit->setObjectName(QString::fromUtf8("samplelineedit")); - samplelineedit->setAlignment(Qt::AlignHCenter); - - gridLayout1->addWidget(samplelineedit, 3, 0, 1, 2); - - - vboxLayout1->addWidget(GroupBox1); - - GroupBox2 = new QGroupBox(tab2); - GroupBox2->setObjectName(QString::fromUtf8("GroupBox2")); - vboxLayout2 = new QVBoxLayout(GroupBox2); - vboxLayout2->setSpacing(4); - vboxLayout2->setContentsMargins(8, 8, 8, 8); - vboxLayout2->setObjectName(QString::fromUtf8("vboxLayout2")); - hboxLayout3 = new QHBoxLayout(); - hboxLayout3->setSpacing(4); -#ifndef Q_OS_MAC - hboxLayout3->setContentsMargins(0, 0, 0, 0); -#endif - hboxLayout3->setObjectName(QString::fromUtf8("hboxLayout3")); - famsubbuddy = new QLabel(GroupBox2); - famsubbuddy->setObjectName(QString::fromUtf8("famsubbuddy")); - - hboxLayout3->addWidget(famsubbuddy); - - familysubcombo = new QComboBox(GroupBox2); - familysubcombo->setObjectName(QString::fromUtf8("familysubcombo")); - familysubcombo->setEditable(true); - familysubcombo->setAutoCompletion(true); - familysubcombo->setDuplicatesEnabled(false); - - hboxLayout3->addWidget(familysubcombo); - - - vboxLayout2->addLayout(hboxLayout3); - - Line1 = new QFrame(GroupBox2); - Line1->setObjectName(QString::fromUtf8("Line1")); - Line1->setFrameShape(QFrame::HLine); - Line1->setFrameShadow(QFrame::Sunken); - Line1->setFrameShape(QFrame::HLine); - - vboxLayout2->addWidget(Line1); - - TextLabel5 = new QLabel(GroupBox2); - TextLabel5->setObjectName(QString::fromUtf8("TextLabel5")); - - vboxLayout2->addWidget(TextLabel5); - - sublistbox = new Q3ListBox(GroupBox2); - sublistbox->setObjectName(QString::fromUtf8("sublistbox")); - - vboxLayout2->addWidget(sublistbox); - - hboxLayout4 = new QHBoxLayout(); - hboxLayout4->setSpacing(4); - hboxLayout4->setContentsMargins(0, 0, 0, 0); - hboxLayout4->setObjectName(QString::fromUtf8("hboxLayout4")); - PushButton2 = new QPushButton(GroupBox2); - PushButton2->setObjectName(QString::fromUtf8("PushButton2")); - - hboxLayout4->addWidget(PushButton2); - - PushButton3 = new QPushButton(GroupBox2); - PushButton3->setObjectName(QString::fromUtf8("PushButton3")); - - hboxLayout4->addWidget(PushButton3); - - PushButton4 = new QPushButton(GroupBox2); - PushButton4->setObjectName(QString::fromUtf8("PushButton4")); - - hboxLayout4->addWidget(PushButton4); - - - vboxLayout2->addLayout(hboxLayout4); - - Line2 = new QFrame(GroupBox2); - Line2->setObjectName(QString::fromUtf8("Line2")); - Line2->setFrameShape(QFrame::HLine); - Line2->setFrameShadow(QFrame::Sunken); - Line2->setFrameShape(QFrame::HLine); - - vboxLayout2->addWidget(Line2); - - hboxLayout5 = new QHBoxLayout(); - hboxLayout5->setSpacing(4); - hboxLayout5->setContentsMargins(0, 0, 0, 0); - hboxLayout5->setObjectName(QString::fromUtf8("hboxLayout5")); - choosebuddy = new QLabel(GroupBox2); - choosebuddy->setObjectName(QString::fromUtf8("choosebuddy")); - - hboxLayout5->addWidget(choosebuddy); - - choosesubcombo = new QComboBox(GroupBox2); - choosesubcombo->setObjectName(QString::fromUtf8("choosesubcombo")); - choosesubcombo->setAutoCompletion(true); - choosesubcombo->setDuplicatesEnabled(false); - - hboxLayout5->addWidget(choosesubcombo); - - PushButton1 = new QPushButton(GroupBox2); - PushButton1->setObjectName(QString::fromUtf8("PushButton1")); - - hboxLayout5->addWidget(PushButton1); - - - vboxLayout2->addLayout(hboxLayout5); - - - vboxLayout1->addWidget(GroupBox2); - - TabWidget3->addTab(tab2, QString()); - tab = new QWidget(); - tab->setObjectName(QString::fromUtf8("tab")); - vboxLayout3 = new QVBoxLayout(tab); - vboxLayout3->setSpacing(4); - vboxLayout3->setContentsMargins(7, 7, 7, 7); - vboxLayout3->setObjectName(QString::fromUtf8("vboxLayout3")); - GroupBox4 = new QGroupBox(tab); - GroupBox4->setObjectName(QString::fromUtf8("GroupBox4")); - gridLayout2 = new QGridLayout(GroupBox4); - gridLayout2->setSpacing(4); - gridLayout2->setContentsMargins(8, 8, 8, 8); - gridLayout2->setObjectName(QString::fromUtf8("gridLayout2")); - dcispin = new QSpinBox(GroupBox4); - dcispin->setObjectName(QString::fromUtf8("dcispin")); - dcispin->setMaximum(10000); - dcispin->setMinimum(10); - - gridLayout2->addWidget(dcispin, 0, 1, 1, 1); - - dcibuddy = new QLabel(GroupBox4); - dcibuddy->setObjectName(QString::fromUtf8("dcibuddy")); - - gridLayout2->addWidget(dcibuddy, 0, 0, 1, 1); - - cfispin = new QSpinBox(GroupBox4); - cfispin->setObjectName(QString::fromUtf8("cfispin")); - cfispin->setMaximum(10000); - cfispin->setMinimum(9); - - gridLayout2->addWidget(cfispin, 1, 1, 1, 1); - - cfibuddy = new QLabel(GroupBox4); - cfibuddy->setObjectName(QString::fromUtf8("cfibuddy")); - - gridLayout2->addWidget(cfibuddy, 1, 0, 1, 1); - - wslspin = new QSpinBox(GroupBox4); - wslspin->setObjectName(QString::fromUtf8("wslspin")); - wslspin->setMaximum(20); - wslspin->setMinimum(1); - - gridLayout2->addWidget(wslspin, 2, 1, 1, 1); - - wslbuddy = new QLabel(GroupBox4); - wslbuddy->setObjectName(QString::fromUtf8("wslbuddy")); - - gridLayout2->addWidget(wslbuddy, 2, 0, 1, 1); - - resolvelinks = new QCheckBox(GroupBox4); - resolvelinks->setObjectName(QString::fromUtf8("resolvelinks")); - - gridLayout2->addWidget(resolvelinks, 3, 0, 1, 2); - - - vboxLayout3->addWidget(GroupBox4); - - GroupBox3 = new QGroupBox(tab); - GroupBox3->setObjectName(QString::fromUtf8("GroupBox3")); - vboxLayout4 = new QVBoxLayout(GroupBox3); - vboxLayout4->setSpacing(4); - vboxLayout4->setContentsMargins(8, 8, 8, 8); - vboxLayout4->setObjectName(QString::fromUtf8("vboxLayout4")); - effectcheckbox = new QCheckBox(GroupBox3); - effectcheckbox->setObjectName(QString::fromUtf8("effectcheckbox")); - - vboxLayout4->addWidget(effectcheckbox); - - effectbase = new Q3Frame(GroupBox3); - effectbase->setObjectName(QString::fromUtf8("effectbase")); - effectbase->setFrameShape(QFrame::NoFrame); - effectbase->setFrameShadow(QFrame::Plain); - gridLayout3 = new QGridLayout(effectbase); - gridLayout3->setSpacing(4); - gridLayout3->setContentsMargins(0, 0, 0, 0); - gridLayout3->setObjectName(QString::fromUtf8("gridLayout3")); - meffectbuddy = new QLabel(effectbase); - meffectbuddy->setObjectName(QString::fromUtf8("meffectbuddy")); - - gridLayout3->addWidget(meffectbuddy, 0, 0, 1, 1); - - ceffectbuddy = new QLabel(effectbase); - ceffectbuddy->setObjectName(QString::fromUtf8("ceffectbuddy")); - - gridLayout3->addWidget(ceffectbuddy, 1, 0, 1, 1); - - teffectbuddy = new QLabel(effectbase); - teffectbuddy->setObjectName(QString::fromUtf8("teffectbuddy")); - - gridLayout3->addWidget(teffectbuddy, 2, 0, 1, 1); - - beffectbuddy = new QLabel(effectbase); - beffectbuddy->setObjectName(QString::fromUtf8("beffectbuddy")); - - gridLayout3->addWidget(beffectbuddy, 3, 0, 1, 1); - - menueffect = new QComboBox(effectbase); - menueffect->setObjectName(QString::fromUtf8("menueffect")); - menueffect->setAutoCompletion(true); - - gridLayout3->addWidget(menueffect, 0, 1, 1, 1); - - comboeffect = new QComboBox(effectbase); - comboeffect->setObjectName(QString::fromUtf8("comboeffect")); - - gridLayout3->addWidget(comboeffect, 1, 1, 1, 1); - - tooltipeffect = new QComboBox(effectbase); - tooltipeffect->setObjectName(QString::fromUtf8("tooltipeffect")); - - gridLayout3->addWidget(tooltipeffect, 2, 1, 1, 1); - - toolboxeffect = new QComboBox(effectbase); - toolboxeffect->setObjectName(QString::fromUtf8("toolboxeffect")); - - gridLayout3->addWidget(toolboxeffect, 3, 1, 1, 1); - - - vboxLayout4->addWidget(effectbase); - - - vboxLayout3->addWidget(GroupBox3); - - GroupBox5 = new QGroupBox(tab); - GroupBox5->setObjectName(QString::fromUtf8("GroupBox5")); - gridLayout4 = new QGridLayout(GroupBox5); - gridLayout4->setSpacing(4); - gridLayout4->setContentsMargins(8, 8, 8, 8); - gridLayout4->setObjectName(QString::fromUtf8("gridLayout4")); - swbuddy = new QLabel(GroupBox5); - swbuddy->setObjectName(QString::fromUtf8("swbuddy")); - - gridLayout4->addWidget(swbuddy, 0, 0, 1, 1); - - shbuddy = new QLabel(GroupBox5); - shbuddy->setObjectName(QString::fromUtf8("shbuddy")); - - gridLayout4->addWidget(shbuddy, 1, 0, 1, 1); - - strutwidth = new QSpinBox(GroupBox5); - strutwidth->setObjectName(QString::fromUtf8("strutwidth")); - strutwidth->setMaximum(1000); - - gridLayout4->addWidget(strutwidth, 0, 1, 1, 1); - - strutheight = new QSpinBox(GroupBox5); - strutheight->setObjectName(QString::fromUtf8("strutheight")); - strutheight->setMaximum(1000); - - gridLayout4->addWidget(strutheight, 1, 1, 1, 1); - - - vboxLayout3->addWidget(GroupBox5); - - rtlExtensions = new QCheckBox(tab); - rtlExtensions->setObjectName(QString::fromUtf8("rtlExtensions")); - - vboxLayout3->addWidget(rtlExtensions); - - inputStyleLabel = new QLabel(tab); - inputStyleLabel->setObjectName(QString::fromUtf8("inputStyleLabel")); - - vboxLayout3->addWidget(inputStyleLabel); - - inputStyle = new QComboBox(tab); - inputStyle->setObjectName(QString::fromUtf8("inputStyle")); - - vboxLayout3->addWidget(inputStyle); - - spacerItem1 = new QSpacerItem(20, 40, QSizePolicy::Minimum, QSizePolicy::Expanding); - - vboxLayout3->addItem(spacerItem1); - - TabWidget3->addTab(tab, QString()); - tab3 = new QWidget(); - tab3->setObjectName(QString::fromUtf8("tab3")); - vboxLayout5 = new QVBoxLayout(tab3); - vboxLayout5->setSpacing(4); - vboxLayout5->setContentsMargins(8, 8, 8, 8); - vboxLayout5->setObjectName(QString::fromUtf8("vboxLayout5")); - fontembeddingcheckbox = new QCheckBox(tab3); - fontembeddingcheckbox->setObjectName(QString::fromUtf8("fontembeddingcheckbox")); - fontembeddingcheckbox->setChecked(true); - - vboxLayout5->addWidget(fontembeddingcheckbox); - - GroupBox10 = new QGroupBox(tab3); - GroupBox10->setObjectName(QString::fromUtf8("GroupBox10")); - sizePolicy2.setHeightForWidth(GroupBox10->sizePolicy().hasHeightForWidth()); - GroupBox10->setSizePolicy(sizePolicy2); - vboxLayout6 = new QVBoxLayout(GroupBox10); - vboxLayout6->setSpacing(4); - vboxLayout6->setContentsMargins(8, 8, 8, 8); - vboxLayout6->setObjectName(QString::fromUtf8("vboxLayout6")); - gridLayout5 = new QGridLayout(); - gridLayout5->setSpacing(4); -#ifndef Q_OS_MAC - gridLayout5->setContentsMargins(0, 0, 0, 0); -#endif - gridLayout5->setObjectName(QString::fromUtf8("gridLayout5")); - PushButton11 = new QPushButton(GroupBox10); - PushButton11->setObjectName(QString::fromUtf8("PushButton11")); - - gridLayout5->addWidget(PushButton11, 1, 0, 1, 1); - - PushButton13 = new QPushButton(GroupBox10); - PushButton13->setObjectName(QString::fromUtf8("PushButton13")); - - gridLayout5->addWidget(PushButton13, 1, 2, 1, 1); - - PushButton12 = new QPushButton(GroupBox10); - PushButton12->setObjectName(QString::fromUtf8("PushButton12")); - - gridLayout5->addWidget(PushButton12, 1, 1, 1, 1); - - fontpathlistbox = new Q3ListBox(GroupBox10); - fontpathlistbox->setObjectName(QString::fromUtf8("fontpathlistbox")); - - gridLayout5->addWidget(fontpathlistbox, 0, 0, 1, 3); - - - vboxLayout6->addLayout(gridLayout5); - - gridLayout6 = new QGridLayout(); - gridLayout6->setSpacing(4); - gridLayout6->setContentsMargins(0, 0, 0, 0); - gridLayout6->setObjectName(QString::fromUtf8("gridLayout6")); - spacerItem2 = new QSpacerItem(20, 20, QSizePolicy::Minimum, QSizePolicy::Minimum); - - gridLayout6->addItem(spacerItem2, 2, 0, 1, 1); - - PushButton15 = new QPushButton(GroupBox10); - PushButton15->setObjectName(QString::fromUtf8("PushButton15")); - - gridLayout6->addWidget(PushButton15, 2, 2, 1, 1); - - PushButton14 = new QPushButton(GroupBox10); - PushButton14->setObjectName(QString::fromUtf8("PushButton14")); - - gridLayout6->addWidget(PushButton14, 2, 1, 1, 1); - - TextLabel15_2 = new QLabel(GroupBox10); - TextLabel15_2->setObjectName(QString::fromUtf8("TextLabel15_2")); - - gridLayout6->addWidget(TextLabel15_2, 0, 0, 1, 3); - - fontpathlineedit = new QLineEdit(GroupBox10); - fontpathlineedit->setObjectName(QString::fromUtf8("fontpathlineedit")); - - gridLayout6->addWidget(fontpathlineedit, 1, 0, 1, 3); - - - vboxLayout6->addLayout(gridLayout6); - - - vboxLayout5->addWidget(GroupBox10); - - TabWidget3->addTab(tab3, QString()); - - hboxLayout->addWidget(TabWidget3); - - MainWindowBase->setCentralWidget(widget); - menubar = new QMenuBar(MainWindowBase); - menubar->setObjectName(QString::fromUtf8("menubar")); - menubar->setGeometry(QRect(0, 0, 724, 27)); - action = new QAction(menubar); - action->setObjectName(QString::fromUtf8("action")); - action1 = new QAction(menubar); - action1->setObjectName(QString::fromUtf8("action1")); - action2 = new QAction(menubar); - action2->setObjectName(QString::fromUtf8("action2")); - PopupMenu = new QMenu(menubar); - PopupMenu->setObjectName(QString::fromUtf8("PopupMenu")); - PopupMenu->setGeometry(QRect(0, 0, 800, 480)); - action3 = new QAction(PopupMenu); - action3->setObjectName(QString::fromUtf8("action3")); - action4 = new QAction(PopupMenu); - action4->setObjectName(QString::fromUtf8("action4")); - action5 = new QAction(PopupMenu); - action5->setObjectName(QString::fromUtf8("action5")); - PopupMenu_2 = new QMenu(menubar); - PopupMenu_2->setObjectName(QString::fromUtf8("PopupMenu_2")); - PopupMenu_2->setGeometry(QRect(0, 0, 800, 480)); -#ifndef QT_NO_SHORTCUT - gstylebuddy->setBuddy(gstylecombo); - labelMainColor->setBuddy(buttonMainColor); - labelMainColor2->setBuddy(buttonMainColor2); - TextLabel1->setBuddy(paletteCombo); - stylebuddy->setBuddy(stylecombo); - psizebuddy->setBuddy(psizecombo); - familybuddy->setBuddy(familycombo); - famsubbuddy->setBuddy(familysubcombo); - choosebuddy->setBuddy(choosesubcombo); - dcibuddy->setBuddy(dcispin); - cfibuddy->setBuddy(cfispin); - wslbuddy->setBuddy(wslspin); - meffectbuddy->setBuddy(menueffect); - ceffectbuddy->setBuddy(comboeffect); - teffectbuddy->setBuddy(tooltipeffect); - beffectbuddy->setBuddy(toolboxeffect); - swbuddy->setBuddy(strutwidth); - shbuddy->setBuddy(strutheight); -#endif // QT_NO_SHORTCUT - QWidget::setTabOrder(helpview, TabWidget3); - QWidget::setTabOrder(TabWidget3, familycombo); - QWidget::setTabOrder(familycombo, stylecombo); - QWidget::setTabOrder(stylecombo, psizecombo); - QWidget::setTabOrder(psizecombo, samplelineedit); - QWidget::setTabOrder(samplelineedit, familysubcombo); - QWidget::setTabOrder(familysubcombo, PushButton2); - QWidget::setTabOrder(PushButton2, PushButton3); - QWidget::setTabOrder(PushButton3, PushButton4); - QWidget::setTabOrder(PushButton4, choosesubcombo); - QWidget::setTabOrder(choosesubcombo, PushButton1); - QWidget::setTabOrder(PushButton1, dcispin); - QWidget::setTabOrder(dcispin, cfispin); - QWidget::setTabOrder(cfispin, wslspin); - QWidget::setTabOrder(wslspin, effectcheckbox); - QWidget::setTabOrder(effectcheckbox, menueffect); - QWidget::setTabOrder(menueffect, comboeffect); - QWidget::setTabOrder(comboeffect, tooltipeffect); - QWidget::setTabOrder(tooltipeffect, strutwidth); - QWidget::setTabOrder(strutwidth, strutheight); - QWidget::setTabOrder(strutheight, sublistbox); - - menubar->addAction(PopupMenu->menuAction()); - menubar->addSeparator(); - menubar->addAction(PopupMenu_2->menuAction()); - PopupMenu->addAction(fileSaveAction); - PopupMenu->addSeparator(); - PopupMenu->addAction(fileExitAction); - PopupMenu_2->addAction(helpAboutAction); - PopupMenu_2->addAction(helpAboutQtAction); - - retranslateUi(MainWindowBase); - - menueffect->setCurrentIndex(0); - inputStyle->setCurrentIndex(0); - - - QMetaObject::connectSlotsByName(MainWindowBase); - } // setupUi - - void retranslateUi(Q3MainWindow *MainWindowBase) - { - MainWindowBase->setWindowTitle(QApplication::translate("MainWindowBase", "Qt Configuration", 0, QApplication::UnicodeUTF8)); - fileSaveAction->setText(QApplication::translate("MainWindowBase", "&Save", 0, QApplication::UnicodeUTF8)); - fileSaveAction->setIconText(QApplication::translate("MainWindowBase", "Save", 0, QApplication::UnicodeUTF8)); - fileSaveAction->setShortcut(QApplication::translate("MainWindowBase", "Ctrl+S", 0, QApplication::UnicodeUTF8)); - fileExitAction->setText(QApplication::translate("MainWindowBase", "E&xit", 0, QApplication::UnicodeUTF8)); - fileExitAction->setIconText(QApplication::translate("MainWindowBase", "Exit", 0, QApplication::UnicodeUTF8)); - fileExitAction->setShortcut(QString()); - helpAboutAction->setText(QApplication::translate("MainWindowBase", "&About", 0, QApplication::UnicodeUTF8)); - helpAboutAction->setIconText(QApplication::translate("MainWindowBase", "About", 0, QApplication::UnicodeUTF8)); - helpAboutAction->setShortcut(QString()); - helpAboutQtAction->setText(QApplication::translate("MainWindowBase", "About &Qt", 0, QApplication::UnicodeUTF8)); - helpAboutQtAction->setIconText(QApplication::translate("MainWindowBase", "About Qt", 0, QApplication::UnicodeUTF8)); - GroupBox40->setTitle(QApplication::translate("MainWindowBase", "GUI Style", 0, QApplication::UnicodeUTF8)); - gstylebuddy->setText(QApplication::translate("MainWindowBase", "Select GUI &Style:", 0, QApplication::UnicodeUTF8)); - groupAutoPalette->setTitle(QApplication::translate("MainWindowBase", "Build Palette", 0, QApplication::UnicodeUTF8)); - labelMainColor->setText(QApplication::translate("MainWindowBase", "&3-D Effects:", 0, QApplication::UnicodeUTF8)); - labelMainColor2->setText(QApplication::translate("MainWindowBase", "Window Back&ground:", 0, QApplication::UnicodeUTF8)); - btnAdvanced->setText(QApplication::translate("MainWindowBase", "&Tune Palette...", 0, QApplication::UnicodeUTF8)); - GroupBox126->setTitle(QApplication::translate("MainWindowBase", "Preview", 0, QApplication::UnicodeUTF8)); - TextLabel1->setText(QApplication::translate("MainWindowBase", "Select &Palette:", 0, QApplication::UnicodeUTF8)); - paletteCombo->clear(); - paletteCombo->insertItems(0, QStringList() - << QApplication::translate("MainWindowBase", "Active Palette", 0, QApplication::UnicodeUTF8) - << QApplication::translate("MainWindowBase", "Inactive Palette", 0, QApplication::UnicodeUTF8) - << QApplication::translate("MainWindowBase", "Disabled Palette", 0, QApplication::UnicodeUTF8) - ); - TabWidget3->setTabText(TabWidget3->indexOf(tab1), QApplication::translate("MainWindowBase", "Appearance", 0, QApplication::UnicodeUTF8)); - GroupBox1->setTitle(QApplication::translate("MainWindowBase", "Default Font", 0, QApplication::UnicodeUTF8)); - stylebuddy->setText(QApplication::translate("MainWindowBase", "&Style:", 0, QApplication::UnicodeUTF8)); - psizebuddy->setText(QApplication::translate("MainWindowBase", "&Point Size:", 0, QApplication::UnicodeUTF8)); - familybuddy->setText(QApplication::translate("MainWindowBase", "F&amily:", 0, QApplication::UnicodeUTF8)); - samplelineedit->setText(QApplication::translate("MainWindowBase", "Sample Text", 0, QApplication::UnicodeUTF8)); - GroupBox2->setTitle(QApplication::translate("MainWindowBase", "Font Substitution", 0, QApplication::UnicodeUTF8)); - famsubbuddy->setText(QApplication::translate("MainWindowBase", "S&elect or Enter a Family:", 0, QApplication::UnicodeUTF8)); - TextLabel5->setText(QApplication::translate("MainWindowBase", "Current Substitutions:", 0, QApplication::UnicodeUTF8)); - PushButton2->setText(QApplication::translate("MainWindowBase", "Up", 0, QApplication::UnicodeUTF8)); - PushButton3->setText(QApplication::translate("MainWindowBase", "Down", 0, QApplication::UnicodeUTF8)); - PushButton4->setText(QApplication::translate("MainWindowBase", "Remove", 0, QApplication::UnicodeUTF8)); - choosebuddy->setText(QApplication::translate("MainWindowBase", "Select s&ubstitute Family:", 0, QApplication::UnicodeUTF8)); - PushButton1->setText(QApplication::translate("MainWindowBase", "Add", 0, QApplication::UnicodeUTF8)); - TabWidget3->setTabText(TabWidget3->indexOf(tab2), QApplication::translate("MainWindowBase", "Fonts", 0, QApplication::UnicodeUTF8)); - GroupBox4->setTitle(QApplication::translate("MainWindowBase", "Feel Settings", 0, QApplication::UnicodeUTF8)); - dcispin->setSuffix(QApplication::translate("MainWindowBase", " ms", 0, QApplication::UnicodeUTF8)); - dcibuddy->setText(QApplication::translate("MainWindowBase", "&Double Click Interval:", 0, QApplication::UnicodeUTF8)); - cfispin->setSpecialValueText(QApplication::translate("MainWindowBase", "No blinking", 0, QApplication::UnicodeUTF8)); - cfispin->setSuffix(QApplication::translate("MainWindowBase", " ms", 0, QApplication::UnicodeUTF8)); - cfibuddy->setText(QApplication::translate("MainWindowBase", "&Cursor Flash Time:", 0, QApplication::UnicodeUTF8)); - wslspin->setSuffix(QApplication::translate("MainWindowBase", " lines", 0, QApplication::UnicodeUTF8)); - wslbuddy->setText(QApplication::translate("MainWindowBase", "Wheel &Scroll Lines:", 0, QApplication::UnicodeUTF8)); - resolvelinks->setText(QApplication::translate("MainWindowBase", "Resolve symlinks in URLs", 0, QApplication::UnicodeUTF8)); - GroupBox3->setTitle(QApplication::translate("MainWindowBase", "GUI Effects", 0, QApplication::UnicodeUTF8)); - effectcheckbox->setText(QApplication::translate("MainWindowBase", "&Enable", 0, QApplication::UnicodeUTF8)); - effectcheckbox->setShortcut(QApplication::translate("MainWindowBase", "Alt+E", 0, QApplication::UnicodeUTF8)); - meffectbuddy->setText(QApplication::translate("MainWindowBase", "&Menu Effect:", 0, QApplication::UnicodeUTF8)); - ceffectbuddy->setText(QApplication::translate("MainWindowBase", "C&omboBox Effect:", 0, QApplication::UnicodeUTF8)); - teffectbuddy->setText(QApplication::translate("MainWindowBase", "&ToolTip Effect:", 0, QApplication::UnicodeUTF8)); - beffectbuddy->setText(QApplication::translate("MainWindowBase", "Tool&Box Effect:", 0, QApplication::UnicodeUTF8)); - menueffect->clear(); - menueffect->insertItems(0, QStringList() - << QApplication::translate("MainWindowBase", "Disable", 0, QApplication::UnicodeUTF8) - << QApplication::translate("MainWindowBase", "Animate", 0, QApplication::UnicodeUTF8) - << QApplication::translate("MainWindowBase", "Fade", 0, QApplication::UnicodeUTF8) - ); - comboeffect->clear(); - comboeffect->insertItems(0, QStringList() - << QApplication::translate("MainWindowBase", "Disable", 0, QApplication::UnicodeUTF8) - << QApplication::translate("MainWindowBase", "Animate", 0, QApplication::UnicodeUTF8) - ); - tooltipeffect->clear(); - tooltipeffect->insertItems(0, QStringList() - << QApplication::translate("MainWindowBase", "Disable", 0, QApplication::UnicodeUTF8) - << QApplication::translate("MainWindowBase", "Animate", 0, QApplication::UnicodeUTF8) - << QApplication::translate("MainWindowBase", "Fade", 0, QApplication::UnicodeUTF8) - ); - toolboxeffect->clear(); - toolboxeffect->insertItems(0, QStringList() - << QApplication::translate("MainWindowBase", "Disable", 0, QApplication::UnicodeUTF8) - << QApplication::translate("MainWindowBase", "Animate", 0, QApplication::UnicodeUTF8) - ); - GroupBox5->setTitle(QApplication::translate("MainWindowBase", "Global Strut", 0, QApplication::UnicodeUTF8)); - swbuddy->setText(QApplication::translate("MainWindowBase", "Minimum &Width:", 0, QApplication::UnicodeUTF8)); - shbuddy->setText(QApplication::translate("MainWindowBase", "Minimum Hei&ght:", 0, QApplication::UnicodeUTF8)); - strutwidth->setSuffix(QApplication::translate("MainWindowBase", " pixels", 0, QApplication::UnicodeUTF8)); - strutheight->setSuffix(QApplication::translate("MainWindowBase", " pixels", 0, QApplication::UnicodeUTF8)); - rtlExtensions->setText(QApplication::translate("MainWindowBase", "Enhanced support for languages written right-to-left", 0, QApplication::UnicodeUTF8)); - inputStyleLabel->setText(QApplication::translate("MainWindowBase", "XIM Input Style:", 0, QApplication::UnicodeUTF8)); - inputStyle->clear(); - inputStyle->insertItems(0, QStringList() - << QApplication::translate("MainWindowBase", "On The Spot", 0, QApplication::UnicodeUTF8) - << QApplication::translate("MainWindowBase", "Over The Spot", 0, QApplication::UnicodeUTF8) - << QApplication::translate("MainWindowBase", "Off The Spot", 0, QApplication::UnicodeUTF8) - << QApplication::translate("MainWindowBase", "Root", 0, QApplication::UnicodeUTF8) - ); - TabWidget3->setTabText(TabWidget3->indexOf(tab), QApplication::translate("MainWindowBase", "Interface", 0, QApplication::UnicodeUTF8)); - fontembeddingcheckbox->setText(QApplication::translate("MainWindowBase", "Enable Font embedding", 0, QApplication::UnicodeUTF8)); - GroupBox10->setTitle(QApplication::translate("MainWindowBase", "Font Paths", 0, QApplication::UnicodeUTF8)); - PushButton11->setText(QApplication::translate("MainWindowBase", "Up", 0, QApplication::UnicodeUTF8)); - PushButton13->setText(QApplication::translate("MainWindowBase", "Remove", 0, QApplication::UnicodeUTF8)); - PushButton12->setText(QApplication::translate("MainWindowBase", "Down", 0, QApplication::UnicodeUTF8)); - PushButton15->setText(QApplication::translate("MainWindowBase", "Add", 0, QApplication::UnicodeUTF8)); - PushButton14->setText(QApplication::translate("MainWindowBase", "Browse...", 0, QApplication::UnicodeUTF8)); - TextLabel15_2->setText(QApplication::translate("MainWindowBase", "Press the Browse button or enter a directory and press Enter to add them to the list.", 0, QApplication::UnicodeUTF8)); - TabWidget3->setTabText(TabWidget3->indexOf(tab3), QApplication::translate("MainWindowBase", "Printer", 0, QApplication::UnicodeUTF8)); - PopupMenu->setTitle(QApplication::translate("MainWindowBase", "&File", 0, QApplication::UnicodeUTF8)); - PopupMenu_2->setTitle(QApplication::translate("MainWindowBase", "&Help", 0, QApplication::UnicodeUTF8)); - } // retranslateUi - -}; - -namespace Ui { - class MainWindowBase: public Ui_MainWindowBase {}; -} // namespace Ui - -QT_END_NAMESPACE - -#endif // MAINWINDOWBASE_H diff --git a/tests/auto/uic/baseline/mydialog.ui.h b/tests/auto/uic/baseline/mydialog.ui.h index 6114cc3807..474684988e 100644 --- a/tests/auto/uic/baseline/mydialog.ui.h +++ b/tests/auto/uic/baseline/mydialog.ui.h @@ -10,7 +10,6 @@ #ifndef MYDIALOG_H #define MYDIALOG_H -#include #include #include #include diff --git a/tests/auto/uic/baseline/paletteeditoradvancedbase.ui b/tests/auto/uic/baseline/paletteeditoradvancedbase.ui deleted file mode 100644 index a7055281d2..0000000000 --- a/tests/auto/uic/baseline/paletteeditoradvancedbase.ui +++ /dev/null @@ -1,617 +0,0 @@ - - - ********************************************************************* -** -** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the autotests of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** 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. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -********************************************************************* - - PaletteEditorAdvancedBase - - - PaletteEditorAdvancedBase - - - true - - - - 0 - 0 - 295 - 346 - - - - Tune Palette - - - true - - - <b>Edit Palette</b><p>Change the palette of the current widget or form.</p><p>Use a generated palette or select colors for each color group and each color role.</p><p>The palette can be tested with different widget layouts in the preview section.</p> - - - - unnamed - - - 11 - - - 6 - - - - - unnamed - - - 0 - - - 6 - - - - - TextLabel1 - - - Select &Palette: - - - paletteCombo - - - - - - - paletteCombo - - - - Active Palette - - - - - Inactive Palette - - - - - Disabled Palette - - - - - - - - - - ButtonGroup1 - - - - 5 - 4 - 0 - 0 - - - - Auto - - - - unnamed - - - 11 - - - 6 - - - - - checkBuildInactive - - - Build inactive palette from active - - - true - - - - - - - checkBuildDisabled - - - Build disabled palette from active - - - true - - - - - - - - - - groupCentral - - - Central color &roles - - - - unnamed - - - 11 - - - 6 - - - - - comboCentral - - - Choose central color role - - - <b>Select a color role.</b><p>Available central roles are: <ul> <li>Window - general background color.</li> <li>WindowText - general foreground color. </li> <li>Base - used as background color for e.g. text entry widgets, usually white or another light color. </li> <li>Text - the foreground color used with Base. Usually this is the same as WindowText, in what case it must provide good contrast both with Window and Base. </li> <li>Button - general button background color, where buttons need a background different from Window, as in the Macintosh style. </li> <li>ButtonText - a foreground color used with the Button color. </li> <li>Highlight - a color to indicate a selected or highlighted item. </li> <li>HighlightedText - a text color that contrasts to Highlight. </li> <li>BrightText - a text color that is very different from WindowText and contrasts well with e.g. black. </li> </ul> </p> - - - - Window - - - - - WindowText - - - - - Button - - - - - Base - - - - - Text - - - - - BrightText - - - - - ButtonText - - - - - Highlight - - - - - HighlightedText - - - - - - - - unnamed - - - 0 - - - 6 - - - - - - 20 - 20 - - - - Expanding - - - Horizontal - - - - - - - labelCentral - - - - 1 - 1 - 0 - 0 - - - - - 0 - 0 - - - - &Select Color: - - - buttonCentral - - - - - - - buttonCentral - - - - 0 - 0 - 0 - 0 - - - - Qt::TabFocus - - - Choose a color - - - Choose a color for the selected central color role. - - - - - - - - - - - - groupEffect - - - 3-D shadow &effects - - - - unnamed - - - 11 - - - 6 - - - - - unnamed - - - 0 - - - 6 - - - - - checkBuildEffect - - - Build &from button color - - - true - - - Generate shadings - - - Check to let 3D-effect colors be calculated from button-color. - - - - - - - comboEffect - - - Choose 3D-effect color role - - - <b>Select a color role.</b><p>Available effect roles are: <ul> <li>Light - lighter than Button color. </li> <li>Midlight - between Button and Light. </li> <li>Mid - between Button and Dark. </li> <li>Dark - darker than Button. </li> <li>Shadow - a very dark color. </li> </ul> - - - - Light - - - - - Midlight - - - - - Mid - - - - - Dark - - - - - Shadow - - - - - - - - - - unnamed - - - 0 - - - 6 - - - - - - 20 - 20 - - - - Expanding - - - Horizontal - - - - - - - labelEffect - - - - 1 - 1 - 0 - 0 - - - - - 0 - 0 - - - - Select Co&lor: - - - buttonEffect - - - - - - - buttonEffect - - - - 0 - 0 - 0 - 0 - - - - Qt::TabFocus - - - Choose a color - - - Choose a color for the selected effect color role. - - - - - - - - - - - - unnamed - - - 0 - - - 6 - - - - - - 20 - 20 - - - - Expanding - - - Horizontal - - - - - - - buttonOk - - - OK - - - true - - - true - - - Close dialog and apply all changes. - - - - - - - buttonCancel - - - Cancel - - - true - - - Close dialog and discard all changes. - - - - - - - - - - - ColorButton - -
colorbutton.h
- - 40 - 25 - - 0 - - 5 - 5 - - image0 - - color - pixmap - -
-
- - buttonOk - buttonCancel - paletteCombo - checkBuildInactive - checkBuildDisabled - comboCentral - buttonCentral - checkBuildEffect - comboEffect - buttonEffect - - - - 789c6dd2c10ac2300c00d07bbf2234b7229d1be245fc04c5a3201e4615f430059d0711ff5ddb2e6bb236ec90eed134cb5a19d8ef36602af5ecdbfeeac05dda0798d3abebde87e3faa374d3807fa0d633a52d38d8de6f679fe33fc776e196f53cd010188256a3600a292882096246517815ca99884606e18044a3a40d91824820924265a7923a2e8bcd05f33db1173e002913175f2a6be6d3294871a2d95fa00e8a94ee017b69d339d90df1e77c57ea072ede6758 - - -
diff --git a/tests/auto/uic/baseline/paletteeditoradvancedbase.ui.h b/tests/auto/uic/baseline/paletteeditoradvancedbase.ui.h deleted file mode 100644 index e6841cca49..0000000000 --- a/tests/auto/uic/baseline/paletteeditoradvancedbase.ui.h +++ /dev/null @@ -1,485 +0,0 @@ -/* -********************************************************************* -** -** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the autotests of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** 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. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -********************************************************************* -*/ - -/******************************************************************************** -** Form generated from reading UI file 'paletteeditoradvancedbase.ui' -** -** Created: Fri Sep 4 10:17:14 2009 -** by: Qt User Interface Compiler version 4.6.0 -** -** WARNING! All changes made in this file will be lost when recompiling UI file! -********************************************************************************/ - -#ifndef PALETTEEDITORADVANCEDBASE_H -#define PALETTEEDITORADVANCEDBASE_H - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "colorbutton.h" - -QT_BEGIN_NAMESPACE - -class Ui_PaletteEditorAdvancedBase -{ -public: - QVBoxLayout *vboxLayout; - QHBoxLayout *hboxLayout; - QLabel *TextLabel1; - QComboBox *paletteCombo; - Q3ButtonGroup *ButtonGroup1; - QVBoxLayout *vboxLayout1; - QCheckBox *checkBuildInactive; - QCheckBox *checkBuildDisabled; - Q3GroupBox *groupCentral; - QVBoxLayout *vboxLayout2; - QComboBox *comboCentral; - QHBoxLayout *hboxLayout1; - QSpacerItem *Horizontal_Spacing1; - QLabel *labelCentral; - ColorButton *buttonCentral; - Q3GroupBox *groupEffect; - QVBoxLayout *vboxLayout3; - QHBoxLayout *hboxLayout2; - QCheckBox *checkBuildEffect; - QComboBox *comboEffect; - QHBoxLayout *hboxLayout3; - QSpacerItem *Horizontal_Spacing3; - QLabel *labelEffect; - ColorButton *buttonEffect; - QHBoxLayout *hboxLayout4; - QSpacerItem *Horizontal_Spacing2; - QPushButton *buttonOk; - QPushButton *buttonCancel; - - void setupUi(QDialog *PaletteEditorAdvancedBase) - { - if (PaletteEditorAdvancedBase->objectName().isEmpty()) - PaletteEditorAdvancedBase->setObjectName(QString::fromUtf8("PaletteEditorAdvancedBase")); - PaletteEditorAdvancedBase->setEnabled(true); - PaletteEditorAdvancedBase->resize(295, 346); - PaletteEditorAdvancedBase->setSizeGripEnabled(true); - vboxLayout = new QVBoxLayout(PaletteEditorAdvancedBase); -#ifndef Q_OS_MAC - vboxLayout->setSpacing(6); -#endif - vboxLayout->setContentsMargins(11, 11, 11, 11); - vboxLayout->setObjectName(QString::fromUtf8("vboxLayout")); - vboxLayout->setObjectName(QString::fromUtf8("unnamed")); - hboxLayout = new QHBoxLayout(); -#ifndef Q_OS_MAC - hboxLayout->setSpacing(6); -#endif -#ifndef Q_OS_MAC - hboxLayout->setContentsMargins(0, 0, 0, 0); -#endif - hboxLayout->setObjectName(QString::fromUtf8("hboxLayout")); - hboxLayout->setObjectName(QString::fromUtf8("unnamed")); - TextLabel1 = new QLabel(PaletteEditorAdvancedBase); - TextLabel1->setObjectName(QString::fromUtf8("TextLabel1")); - - hboxLayout->addWidget(TextLabel1); - - paletteCombo = new QComboBox(PaletteEditorAdvancedBase); - paletteCombo->setObjectName(QString::fromUtf8("paletteCombo")); - - hboxLayout->addWidget(paletteCombo); - - - vboxLayout->addLayout(hboxLayout); - - ButtonGroup1 = new Q3ButtonGroup(PaletteEditorAdvancedBase); - ButtonGroup1->setObjectName(QString::fromUtf8("ButtonGroup1")); - QSizePolicy sizePolicy(static_cast(5), static_cast(4)); - sizePolicy.setHorizontalStretch(0); - sizePolicy.setVerticalStretch(0); - sizePolicy.setHeightForWidth(ButtonGroup1->sizePolicy().hasHeightForWidth()); - ButtonGroup1->setSizePolicy(sizePolicy); - ButtonGroup1->setColumnLayout(0, Qt::Vertical); -#ifndef Q_OS_MAC - ButtonGroup1->layout()->setSpacing(6); -#endif - ButtonGroup1->layout()->setContentsMargins(11, 11, 11, 11); - vboxLayout1 = new QVBoxLayout(); - QBoxLayout *boxlayout = qobject_cast(ButtonGroup1->layout()); - if (boxlayout) - boxlayout->addLayout(vboxLayout1); - vboxLayout1->setAlignment(Qt::AlignTop); - vboxLayout1->setObjectName(QString::fromUtf8("vboxLayout1")); - vboxLayout1->setObjectName(QString::fromUtf8("unnamed")); - checkBuildInactive = new QCheckBox(ButtonGroup1); - checkBuildInactive->setObjectName(QString::fromUtf8("checkBuildInactive")); - checkBuildInactive->setChecked(true); - - vboxLayout1->addWidget(checkBuildInactive); - - checkBuildDisabled = new QCheckBox(ButtonGroup1); - checkBuildDisabled->setObjectName(QString::fromUtf8("checkBuildDisabled")); - checkBuildDisabled->setChecked(true); - - vboxLayout1->addWidget(checkBuildDisabled); - - - vboxLayout->addWidget(ButtonGroup1); - - groupCentral = new Q3GroupBox(PaletteEditorAdvancedBase); - groupCentral->setObjectName(QString::fromUtf8("groupCentral")); - groupCentral->setColumnLayout(0, Qt::Vertical); -#ifndef Q_OS_MAC - groupCentral->layout()->setSpacing(6); -#endif - groupCentral->layout()->setContentsMargins(11, 11, 11, 11); - vboxLayout2 = new QVBoxLayout(); - QBoxLayout *boxlayout1 = qobject_cast(groupCentral->layout()); - if (boxlayout1) - boxlayout1->addLayout(vboxLayout2); - vboxLayout2->setAlignment(Qt::AlignTop); - vboxLayout2->setObjectName(QString::fromUtf8("vboxLayout2")); - vboxLayout2->setObjectName(QString::fromUtf8("unnamed")); - comboCentral = new QComboBox(groupCentral); - comboCentral->setObjectName(QString::fromUtf8("comboCentral")); - - vboxLayout2->addWidget(comboCentral); - - hboxLayout1 = new QHBoxLayout(); -#ifndef Q_OS_MAC - hboxLayout1->setSpacing(6); -#endif - hboxLayout1->setContentsMargins(0, 0, 0, 0); - hboxLayout1->setObjectName(QString::fromUtf8("hboxLayout1")); - hboxLayout1->setObjectName(QString::fromUtf8("unnamed")); - Horizontal_Spacing1 = new QSpacerItem(20, 20, QSizePolicy::Expanding, QSizePolicy::Minimum); - - hboxLayout1->addItem(Horizontal_Spacing1); - - labelCentral = new QLabel(groupCentral); - labelCentral->setObjectName(QString::fromUtf8("labelCentral")); - QSizePolicy sizePolicy1(static_cast(1), static_cast(1)); - sizePolicy1.setHorizontalStretch(0); - sizePolicy1.setVerticalStretch(0); - sizePolicy1.setHeightForWidth(labelCentral->sizePolicy().hasHeightForWidth()); - labelCentral->setSizePolicy(sizePolicy1); - labelCentral->setMinimumSize(QSize(0, 0)); - - hboxLayout1->addWidget(labelCentral); - - buttonCentral = new ColorButton(groupCentral); - buttonCentral->setObjectName(QString::fromUtf8("buttonCentral")); - QSizePolicy sizePolicy2(static_cast(0), static_cast(0)); - sizePolicy2.setHorizontalStretch(0); - sizePolicy2.setVerticalStretch(0); - sizePolicy2.setHeightForWidth(buttonCentral->sizePolicy().hasHeightForWidth()); - buttonCentral->setSizePolicy(sizePolicy2); - buttonCentral->setFocusPolicy(Qt::TabFocus); - - hboxLayout1->addWidget(buttonCentral); - - - vboxLayout2->addLayout(hboxLayout1); - - - vboxLayout->addWidget(groupCentral); - - groupEffect = new Q3GroupBox(PaletteEditorAdvancedBase); - groupEffect->setObjectName(QString::fromUtf8("groupEffect")); - groupEffect->setColumnLayout(0, Qt::Vertical); -#ifndef Q_OS_MAC - groupEffect->layout()->setSpacing(6); -#endif - groupEffect->layout()->setContentsMargins(11, 11, 11, 11); - vboxLayout3 = new QVBoxLayout(); - QBoxLayout *boxlayout2 = qobject_cast(groupEffect->layout()); - if (boxlayout2) - boxlayout2->addLayout(vboxLayout3); - vboxLayout3->setAlignment(Qt::AlignTop); - vboxLayout3->setObjectName(QString::fromUtf8("vboxLayout3")); - vboxLayout3->setObjectName(QString::fromUtf8("unnamed")); - hboxLayout2 = new QHBoxLayout(); -#ifndef Q_OS_MAC - hboxLayout2->setSpacing(6); -#endif -#ifndef Q_OS_MAC - hboxLayout2->setContentsMargins(0, 0, 0, 0); -#endif - hboxLayout2->setObjectName(QString::fromUtf8("hboxLayout2")); - hboxLayout2->setObjectName(QString::fromUtf8("unnamed")); - checkBuildEffect = new QCheckBox(groupEffect); - checkBuildEffect->setObjectName(QString::fromUtf8("checkBuildEffect")); - checkBuildEffect->setChecked(true); - - hboxLayout2->addWidget(checkBuildEffect); - - comboEffect = new QComboBox(groupEffect); - comboEffect->setObjectName(QString::fromUtf8("comboEffect")); - - hboxLayout2->addWidget(comboEffect); - - - vboxLayout3->addLayout(hboxLayout2); - - hboxLayout3 = new QHBoxLayout(); -#ifndef Q_OS_MAC - hboxLayout3->setSpacing(6); -#endif - hboxLayout3->setContentsMargins(0, 0, 0, 0); - hboxLayout3->setObjectName(QString::fromUtf8("hboxLayout3")); - hboxLayout3->setObjectName(QString::fromUtf8("unnamed")); - Horizontal_Spacing3 = new QSpacerItem(20, 20, QSizePolicy::Expanding, QSizePolicy::Minimum); - - hboxLayout3->addItem(Horizontal_Spacing3); - - labelEffect = new QLabel(groupEffect); - labelEffect->setObjectName(QString::fromUtf8("labelEffect")); - sizePolicy1.setHeightForWidth(labelEffect->sizePolicy().hasHeightForWidth()); - labelEffect->setSizePolicy(sizePolicy1); - labelEffect->setMinimumSize(QSize(0, 0)); - - hboxLayout3->addWidget(labelEffect); - - buttonEffect = new ColorButton(groupEffect); - buttonEffect->setObjectName(QString::fromUtf8("buttonEffect")); - sizePolicy2.setHeightForWidth(buttonEffect->sizePolicy().hasHeightForWidth()); - buttonEffect->setSizePolicy(sizePolicy2); - buttonEffect->setFocusPolicy(Qt::TabFocus); - - hboxLayout3->addWidget(buttonEffect); - - - vboxLayout3->addLayout(hboxLayout3); - - - vboxLayout->addWidget(groupEffect); - - hboxLayout4 = new QHBoxLayout(); -#ifndef Q_OS_MAC - hboxLayout4->setSpacing(6); -#endif - hboxLayout4->setContentsMargins(0, 0, 0, 0); - hboxLayout4->setObjectName(QString::fromUtf8("hboxLayout4")); - hboxLayout4->setObjectName(QString::fromUtf8("unnamed")); - Horizontal_Spacing2 = new QSpacerItem(20, 20, QSizePolicy::Expanding, QSizePolicy::Minimum); - - hboxLayout4->addItem(Horizontal_Spacing2); - - buttonOk = new QPushButton(PaletteEditorAdvancedBase); - buttonOk->setObjectName(QString::fromUtf8("buttonOk")); - buttonOk->setAutoDefault(true); - buttonOk->setDefault(true); - - hboxLayout4->addWidget(buttonOk); - - buttonCancel = new QPushButton(PaletteEditorAdvancedBase); - buttonCancel->setObjectName(QString::fromUtf8("buttonCancel")); - buttonCancel->setAutoDefault(true); - - hboxLayout4->addWidget(buttonCancel); - - - vboxLayout->addLayout(hboxLayout4); - -#ifndef QT_NO_SHORTCUT - TextLabel1->setBuddy(paletteCombo); - labelCentral->setBuddy(buttonCentral); - labelEffect->setBuddy(buttonEffect); -#endif // QT_NO_SHORTCUT - QWidget::setTabOrder(buttonOk, buttonCancel); - QWidget::setTabOrder(buttonCancel, paletteCombo); - QWidget::setTabOrder(paletteCombo, checkBuildInactive); - QWidget::setTabOrder(checkBuildInactive, checkBuildDisabled); - QWidget::setTabOrder(checkBuildDisabled, comboCentral); - QWidget::setTabOrder(comboCentral, buttonCentral); - QWidget::setTabOrder(buttonCentral, checkBuildEffect); - QWidget::setTabOrder(checkBuildEffect, comboEffect); - QWidget::setTabOrder(comboEffect, buttonEffect); - - retranslateUi(PaletteEditorAdvancedBase); - - QMetaObject::connectSlotsByName(PaletteEditorAdvancedBase); - } // setupUi - - void retranslateUi(QDialog *PaletteEditorAdvancedBase) - { - PaletteEditorAdvancedBase->setWindowTitle(QApplication::translate("PaletteEditorAdvancedBase", "Tune Palette", 0, QApplication::UnicodeUTF8)); -#ifndef QT_NO_WHATSTHIS - PaletteEditorAdvancedBase->setProperty("whatsThis", QVariant(QApplication::translate("PaletteEditorAdvancedBase", "Edit Palette

Change the palette of the current widget or form.

Use a generated palette or select colors for each color group and each color role.

The palette can be tested with different widget layouts in the preview section.

", 0, QApplication::UnicodeUTF8))); -#endif // QT_NO_WHATSTHIS - TextLabel1->setText(QApplication::translate("PaletteEditorAdvancedBase", "Select &Palette:", 0, QApplication::UnicodeUTF8)); - paletteCombo->clear(); - paletteCombo->insertItems(0, QStringList() - << QApplication::translate("PaletteEditorAdvancedBase", "Active Palette", 0, QApplication::UnicodeUTF8) - << QApplication::translate("PaletteEditorAdvancedBase", "Inactive Palette", 0, QApplication::UnicodeUTF8) - << QApplication::translate("PaletteEditorAdvancedBase", "Disabled Palette", 0, QApplication::UnicodeUTF8) - ); - ButtonGroup1->setTitle(QApplication::translate("PaletteEditorAdvancedBase", "Auto", 0, QApplication::UnicodeUTF8)); - checkBuildInactive->setText(QApplication::translate("PaletteEditorAdvancedBase", "Build inactive palette from active", 0, QApplication::UnicodeUTF8)); - checkBuildDisabled->setText(QApplication::translate("PaletteEditorAdvancedBase", "Build disabled palette from active", 0, QApplication::UnicodeUTF8)); - groupCentral->setTitle(QApplication::translate("PaletteEditorAdvancedBase", "Central color &roles", 0, QApplication::UnicodeUTF8)); - comboCentral->clear(); - comboCentral->insertItems(0, QStringList() - << QApplication::translate("PaletteEditorAdvancedBase", "Window", 0, QApplication::UnicodeUTF8) - << QApplication::translate("PaletteEditorAdvancedBase", "WindowText", 0, QApplication::UnicodeUTF8) - << QApplication::translate("PaletteEditorAdvancedBase", "Button", 0, QApplication::UnicodeUTF8) - << QApplication::translate("PaletteEditorAdvancedBase", "Base", 0, QApplication::UnicodeUTF8) - << QApplication::translate("PaletteEditorAdvancedBase", "Text", 0, QApplication::UnicodeUTF8) - << QApplication::translate("PaletteEditorAdvancedBase", "BrightText", 0, QApplication::UnicodeUTF8) - << QApplication::translate("PaletteEditorAdvancedBase", "ButtonText", 0, QApplication::UnicodeUTF8) - << QApplication::translate("PaletteEditorAdvancedBase", "Highlight", 0, QApplication::UnicodeUTF8) - << QApplication::translate("PaletteEditorAdvancedBase", "HighlightedText", 0, QApplication::UnicodeUTF8) - ); -#ifndef QT_NO_TOOLTIP - comboCentral->setProperty("toolTip", QVariant(QApplication::translate("PaletteEditorAdvancedBase", "Choose central color role", 0, QApplication::UnicodeUTF8))); -#endif // QT_NO_TOOLTIP -#ifndef QT_NO_WHATSTHIS - comboCentral->setProperty("whatsThis", QVariant(QApplication::translate("PaletteEditorAdvancedBase", "Select a color role.

Available central roles are:

  • Window - general background color.
  • WindowText - general foreground color.
  • Base - used as background color for e.g. text entry widgets, usually white or another light color.
  • Text - the foreground color used with Base. Usually this is the same as WindowText, in what case it must provide good contrast both with Window and Base.
  • Button - general button background color, where buttons need a background different from Window, as in the Macintosh style.
  • ButtonText - a foreground color used with the Button color.
  • Highlight - a color to indicate a selected or highlighted item.
  • HighlightedText - a text color that contrasts to Highlight.
  • BrightText - a text color that is very different from WindowText and contrasts well with e.g. black.

", 0, QApplication::UnicodeUTF8))); -#endif // QT_NO_WHATSTHIS - labelCentral->setText(QApplication::translate("PaletteEditorAdvancedBase", "&Select Color:", 0, QApplication::UnicodeUTF8)); -#ifndef QT_NO_TOOLTIP - buttonCentral->setProperty("toolTip", QVariant(QApplication::translate("PaletteEditorAdvancedBase", "Choose a color", 0, QApplication::UnicodeUTF8))); -#endif // QT_NO_TOOLTIP -#ifndef QT_NO_WHATSTHIS - buttonCentral->setProperty("whatsThis", QVariant(QApplication::translate("PaletteEditorAdvancedBase", "Choose a color for the selected central color role.", 0, QApplication::UnicodeUTF8))); -#endif // QT_NO_WHATSTHIS - groupEffect->setTitle(QApplication::translate("PaletteEditorAdvancedBase", "3-D shadow &effects", 0, QApplication::UnicodeUTF8)); - checkBuildEffect->setText(QApplication::translate("PaletteEditorAdvancedBase", "Build &from button color", 0, QApplication::UnicodeUTF8)); -#ifndef QT_NO_TOOLTIP - checkBuildEffect->setProperty("toolTip", QVariant(QApplication::translate("PaletteEditorAdvancedBase", "Generate shadings", 0, QApplication::UnicodeUTF8))); -#endif // QT_NO_TOOLTIP -#ifndef QT_NO_WHATSTHIS - checkBuildEffect->setProperty("whatsThis", QVariant(QApplication::translate("PaletteEditorAdvancedBase", "Check to let 3D-effect colors be calculated from button-color.", 0, QApplication::UnicodeUTF8))); -#endif // QT_NO_WHATSTHIS - comboEffect->clear(); - comboEffect->insertItems(0, QStringList() - << QApplication::translate("PaletteEditorAdvancedBase", "Light", 0, QApplication::UnicodeUTF8) - << QApplication::translate("PaletteEditorAdvancedBase", "Midlight", 0, QApplication::UnicodeUTF8) - << QApplication::translate("PaletteEditorAdvancedBase", "Mid", 0, QApplication::UnicodeUTF8) - << QApplication::translate("PaletteEditorAdvancedBase", "Dark", 0, QApplication::UnicodeUTF8) - << QApplication::translate("PaletteEditorAdvancedBase", "Shadow", 0, QApplication::UnicodeUTF8) - ); -#ifndef QT_NO_TOOLTIP - comboEffect->setProperty("toolTip", QVariant(QApplication::translate("PaletteEditorAdvancedBase", "Choose 3D-effect color role", 0, QApplication::UnicodeUTF8))); -#endif // QT_NO_TOOLTIP -#ifndef QT_NO_WHATSTHIS - comboEffect->setProperty("whatsThis", QVariant(QApplication::translate("PaletteEditorAdvancedBase", "Select a color role.

Available effect roles are:

  • Light - lighter than Button color.
  • Midlight - between Button and Light.
  • Mid - between Button and Dark.
  • Dark - darker than Button.
  • Shadow - a very dark color.
", 0, QApplication::UnicodeUTF8))); -#endif // QT_NO_WHATSTHIS - labelEffect->setText(QApplication::translate("PaletteEditorAdvancedBase", "Select Co&lor:", 0, QApplication::UnicodeUTF8)); -#ifndef QT_NO_TOOLTIP - buttonEffect->setProperty("toolTip", QVariant(QApplication::translate("PaletteEditorAdvancedBase", "Choose a color", 0, QApplication::UnicodeUTF8))); -#endif // QT_NO_TOOLTIP -#ifndef QT_NO_WHATSTHIS - buttonEffect->setProperty("whatsThis", QVariant(QApplication::translate("PaletteEditorAdvancedBase", "Choose a color for the selected effect color role.", 0, QApplication::UnicodeUTF8))); -#endif // QT_NO_WHATSTHIS - buttonOk->setText(QApplication::translate("PaletteEditorAdvancedBase", "OK", 0, QApplication::UnicodeUTF8)); -#ifndef QT_NO_WHATSTHIS - buttonOk->setProperty("whatsThis", QVariant(QApplication::translate("PaletteEditorAdvancedBase", "Close dialog and apply all changes.", 0, QApplication::UnicodeUTF8))); -#endif // QT_NO_WHATSTHIS - buttonCancel->setText(QApplication::translate("PaletteEditorAdvancedBase", "Cancel", 0, QApplication::UnicodeUTF8)); -#ifndef QT_NO_WHATSTHIS - buttonCancel->setProperty("whatsThis", QVariant(QApplication::translate("PaletteEditorAdvancedBase", "Close dialog and discard all changes.", 0, QApplication::UnicodeUTF8))); -#endif // QT_NO_WHATSTHIS - } // retranslateUi - - -protected: - enum IconID - { - image0_ID, - unknown_ID - }; - static QPixmap qt_get_icon(IconID id) - { - /* XPM */ - static const char* const image0_data[] = { -"22 22 2 1", -". c None", -"# c #a4c610", -"........######........", -".....###########......", -"....##############....", -"...################...", -"..######......######..", -"..#####........#####..", -".#####.......#..#####.", -".####.......###..####.", -"####.......#####..####", -"####......#####...####", -"####....#######...####", -"####....######....####", -"####...########...####", -".####.##########..####", -".####..####.#########.", -".#####..##...########.", -"..#####.......#######.", -"..######......######..", -"...###################", -"....##################", -"......###########.###.", -"........######.....#.."}; - - - switch (id) { - case image0_ID: return QPixmap((const char**)image0_data); - default: return QPixmap(); - } // switch - } // icon - -}; - -namespace Ui { - class PaletteEditorAdvancedBase: public Ui_PaletteEditorAdvancedBase {}; -} // namespace Ui - -QT_END_NAMESPACE - -#endif // PALETTEEDITORADVANCEDBASE_H diff --git a/tests/auto/uic/baseline/previewwidgetbase.ui b/tests/auto/uic/baseline/previewwidgetbase.ui deleted file mode 100644 index 5f36d49dbe..0000000000 --- a/tests/auto/uic/baseline/previewwidgetbase.ui +++ /dev/null @@ -1,340 +0,0 @@ - - - ********************************************************************* -** -** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the autotests of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** 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. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -********************************************************************* - - PreviewWidgetBase - - - PreviewWidgetBase - - - - 0 - 0 - 378 - 236 - - - - - 1 - 1 - 0 - 0 - - - - Preview Window - - - - unnamed - - - 11 - - - 6 - - - - - unnamed - - - 0 - - - 6 - - - - - unnamed - - - 0 - - - 6 - - - - - ButtonGroup1 - - - ButtonGroup - - - - unnamed - - - 11 - - - 6 - - - - - RadioButton1 - - - RadioButton1 - - - true - - - - - - - RadioButton2 - - - RadioButton2 - - - - - - - RadioButton3 - - - RadioButton3 - - - - - - - - - - ButtonGroup2 - - - ButtonGroup2 - - - - unnamed - - - 11 - - - 6 - - - - - CheckBox1 - - - CheckBox1 - - - true - - - - - - - CheckBox2 - - - CheckBox2 - - - - - - - - - - ProgressBar1 - - - 50 - - - - - - - - - unnamed - - - 0 - - - 6 - - - - - LineEdit1 - - - LineEdit - - - - - - - ComboBox1 - - - - ComboBox - - - - - - - - unnamed - - - 0 - - - 6 - - - - - SpinBox1 - - - - - - - PushButton1 - - - PushButton - - - - - - - - - ScrollBar1 - - - Qt::Horizontal - - - - - - - Slider1 - - - Qt::Horizontal - - - - - - - textView - - - - 32767 - 50 - - - - true - - - <p> -<a href="http://qt.nokia.com">http://qt.nokia.com</a> -</p> -<p> -<a href="http://www.kde.org">http://www.kde.org</a> -</p> - - - - - - - - - - - - 20 - 20 - - - - Expanding - - - Vertical - - - - - - qPixmapFromMimeSource - diff --git a/tests/auto/uic/baseline/previewwidgetbase.ui.h b/tests/auto/uic/baseline/previewwidgetbase.ui.h deleted file mode 100644 index ab118e02a0..0000000000 --- a/tests/auto/uic/baseline/previewwidgetbase.ui.h +++ /dev/null @@ -1,316 +0,0 @@ -/* -********************************************************************* -** -** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the autotests of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** 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. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -********************************************************************* -*/ - -/******************************************************************************** -** Form generated from reading UI file 'previewwidgetbase.ui' -** -** Created: Fri Sep 4 10:17:14 2009 -** by: Qt User Interface Compiler version 4.6.0 -** -** WARNING! All changes made in this file will be lost when recompiling UI file! -********************************************************************************/ - -#ifndef PREVIEWWIDGETBASE_H -#define PREVIEWWIDGETBASE_H - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -QT_BEGIN_NAMESPACE - -class Ui_PreviewWidgetBase -{ -public: - QVBoxLayout *vboxLayout; - QHBoxLayout *hboxLayout; - QVBoxLayout *vboxLayout1; - Q3ButtonGroup *ButtonGroup1; - QVBoxLayout *vboxLayout2; - QRadioButton *RadioButton1; - QRadioButton *RadioButton2; - QRadioButton *RadioButton3; - Q3ButtonGroup *ButtonGroup2; - QVBoxLayout *vboxLayout3; - QCheckBox *CheckBox1; - QCheckBox *CheckBox2; - QProgressBar *ProgressBar1; - QVBoxLayout *vboxLayout4; - QLineEdit *LineEdit1; - QComboBox *ComboBox1; - QHBoxLayout *hboxLayout1; - QSpinBox *SpinBox1; - QPushButton *PushButton1; - QScrollBar *ScrollBar1; - QSlider *Slider1; - QTextEdit *textView; - QSpacerItem *Spacer2; - - void setupUi(QWidget *PreviewWidgetBase) - { - if (PreviewWidgetBase->objectName().isEmpty()) - PreviewWidgetBase->setObjectName(QString::fromUtf8("PreviewWidgetBase")); - PreviewWidgetBase->resize(378, 236); - QSizePolicy sizePolicy(static_cast(1), static_cast(1)); - sizePolicy.setHorizontalStretch(0); - sizePolicy.setVerticalStretch(0); - sizePolicy.setHeightForWidth(PreviewWidgetBase->sizePolicy().hasHeightForWidth()); - PreviewWidgetBase->setSizePolicy(sizePolicy); - vboxLayout = new QVBoxLayout(PreviewWidgetBase); -#ifndef Q_OS_MAC - vboxLayout->setSpacing(6); -#endif - vboxLayout->setContentsMargins(11, 11, 11, 11); - vboxLayout->setObjectName(QString::fromUtf8("vboxLayout")); - vboxLayout->setObjectName(QString::fromUtf8("unnamed")); - hboxLayout = new QHBoxLayout(); -#ifndef Q_OS_MAC - hboxLayout->setSpacing(6); -#endif -#ifndef Q_OS_MAC - hboxLayout->setContentsMargins(0, 0, 0, 0); -#endif - hboxLayout->setObjectName(QString::fromUtf8("hboxLayout")); - hboxLayout->setObjectName(QString::fromUtf8("unnamed")); - vboxLayout1 = new QVBoxLayout(); -#ifndef Q_OS_MAC - vboxLayout1->setSpacing(6); -#endif -#ifndef Q_OS_MAC - vboxLayout1->setContentsMargins(0, 0, 0, 0); -#endif - vboxLayout1->setObjectName(QString::fromUtf8("vboxLayout1")); - vboxLayout1->setObjectName(QString::fromUtf8("unnamed")); - ButtonGroup1 = new Q3ButtonGroup(PreviewWidgetBase); - ButtonGroup1->setObjectName(QString::fromUtf8("ButtonGroup1")); - ButtonGroup1->setColumnLayout(0, Qt::Vertical); -#ifndef Q_OS_MAC - ButtonGroup1->layout()->setSpacing(6); -#endif - ButtonGroup1->layout()->setContentsMargins(11, 11, 11, 11); - vboxLayout2 = new QVBoxLayout(); - QBoxLayout *boxlayout = qobject_cast(ButtonGroup1->layout()); - if (boxlayout) - boxlayout->addLayout(vboxLayout2); - vboxLayout2->setAlignment(Qt::AlignTop); - vboxLayout2->setObjectName(QString::fromUtf8("vboxLayout2")); - vboxLayout2->setObjectName(QString::fromUtf8("unnamed")); - RadioButton1 = new QRadioButton(ButtonGroup1); - RadioButton1->setObjectName(QString::fromUtf8("RadioButton1")); - RadioButton1->setChecked(true); - - vboxLayout2->addWidget(RadioButton1); - - RadioButton2 = new QRadioButton(ButtonGroup1); - RadioButton2->setObjectName(QString::fromUtf8("RadioButton2")); - - vboxLayout2->addWidget(RadioButton2); - - RadioButton3 = new QRadioButton(ButtonGroup1); - RadioButton3->setObjectName(QString::fromUtf8("RadioButton3")); - - vboxLayout2->addWidget(RadioButton3); - - - vboxLayout1->addWidget(ButtonGroup1); - - ButtonGroup2 = new Q3ButtonGroup(PreviewWidgetBase); - ButtonGroup2->setObjectName(QString::fromUtf8("ButtonGroup2")); - ButtonGroup2->setColumnLayout(0, Qt::Vertical); -#ifndef Q_OS_MAC - ButtonGroup2->layout()->setSpacing(6); -#endif - ButtonGroup2->layout()->setContentsMargins(11, 11, 11, 11); - vboxLayout3 = new QVBoxLayout(); - QBoxLayout *boxlayout1 = qobject_cast(ButtonGroup2->layout()); - if (boxlayout1) - boxlayout1->addLayout(vboxLayout3); - vboxLayout3->setAlignment(Qt::AlignTop); - vboxLayout3->setObjectName(QString::fromUtf8("vboxLayout3")); - vboxLayout3->setObjectName(QString::fromUtf8("unnamed")); - CheckBox1 = new QCheckBox(ButtonGroup2); - CheckBox1->setObjectName(QString::fromUtf8("CheckBox1")); - CheckBox1->setChecked(true); - - vboxLayout3->addWidget(CheckBox1); - - CheckBox2 = new QCheckBox(ButtonGroup2); - CheckBox2->setObjectName(QString::fromUtf8("CheckBox2")); - - vboxLayout3->addWidget(CheckBox2); - - - vboxLayout1->addWidget(ButtonGroup2); - - ProgressBar1 = new QProgressBar(PreviewWidgetBase); - ProgressBar1->setObjectName(QString::fromUtf8("ProgressBar1")); - ProgressBar1->setValue(50); - - vboxLayout1->addWidget(ProgressBar1); - - - hboxLayout->addLayout(vboxLayout1); - - vboxLayout4 = new QVBoxLayout(); -#ifndef Q_OS_MAC - vboxLayout4->setSpacing(6); -#endif - vboxLayout4->setContentsMargins(0, 0, 0, 0); - vboxLayout4->setObjectName(QString::fromUtf8("vboxLayout4")); - vboxLayout4->setObjectName(QString::fromUtf8("unnamed")); - LineEdit1 = new QLineEdit(PreviewWidgetBase); - LineEdit1->setObjectName(QString::fromUtf8("LineEdit1")); - - vboxLayout4->addWidget(LineEdit1); - - ComboBox1 = new QComboBox(PreviewWidgetBase); - ComboBox1->setObjectName(QString::fromUtf8("ComboBox1")); - - vboxLayout4->addWidget(ComboBox1); - - hboxLayout1 = new QHBoxLayout(); -#ifndef Q_OS_MAC - hboxLayout1->setSpacing(6); -#endif - hboxLayout1->setContentsMargins(0, 0, 0, 0); - hboxLayout1->setObjectName(QString::fromUtf8("hboxLayout1")); - hboxLayout1->setObjectName(QString::fromUtf8("unnamed")); - SpinBox1 = new QSpinBox(PreviewWidgetBase); - SpinBox1->setObjectName(QString::fromUtf8("SpinBox1")); - - hboxLayout1->addWidget(SpinBox1); - - PushButton1 = new QPushButton(PreviewWidgetBase); - PushButton1->setObjectName(QString::fromUtf8("PushButton1")); - - hboxLayout1->addWidget(PushButton1); - - - vboxLayout4->addLayout(hboxLayout1); - - ScrollBar1 = new QScrollBar(PreviewWidgetBase); - ScrollBar1->setObjectName(QString::fromUtf8("ScrollBar1")); - ScrollBar1->setOrientation(Qt::Horizontal); - - vboxLayout4->addWidget(ScrollBar1); - - Slider1 = new QSlider(PreviewWidgetBase); - Slider1->setObjectName(QString::fromUtf8("Slider1")); - Slider1->setOrientation(Qt::Horizontal); - - vboxLayout4->addWidget(Slider1); - - textView = new QTextEdit(PreviewWidgetBase); - textView->setObjectName(QString::fromUtf8("textView")); - textView->setMaximumSize(QSize(32767, 50)); - textView->setReadOnly(true); - - vboxLayout4->addWidget(textView); - - - hboxLayout->addLayout(vboxLayout4); - - - vboxLayout->addLayout(hboxLayout); - - Spacer2 = new QSpacerItem(20, 20, QSizePolicy::Minimum, QSizePolicy::Expanding); - - vboxLayout->addItem(Spacer2); - - - retranslateUi(PreviewWidgetBase); - - QMetaObject::connectSlotsByName(PreviewWidgetBase); - } // setupUi - - void retranslateUi(QWidget *PreviewWidgetBase) - { - PreviewWidgetBase->setWindowTitle(QApplication::translate("PreviewWidgetBase", "Preview Window", 0, QApplication::UnicodeUTF8)); - ButtonGroup1->setTitle(QApplication::translate("PreviewWidgetBase", "ButtonGroup", 0, QApplication::UnicodeUTF8)); - RadioButton1->setText(QApplication::translate("PreviewWidgetBase", "RadioButton1", 0, QApplication::UnicodeUTF8)); - RadioButton2->setText(QApplication::translate("PreviewWidgetBase", "RadioButton2", 0, QApplication::UnicodeUTF8)); - RadioButton3->setText(QApplication::translate("PreviewWidgetBase", "RadioButton3", 0, QApplication::UnicodeUTF8)); - ButtonGroup2->setTitle(QApplication::translate("PreviewWidgetBase", "ButtonGroup2", 0, QApplication::UnicodeUTF8)); - CheckBox1->setText(QApplication::translate("PreviewWidgetBase", "CheckBox1", 0, QApplication::UnicodeUTF8)); - CheckBox2->setText(QApplication::translate("PreviewWidgetBase", "CheckBox2", 0, QApplication::UnicodeUTF8)); - LineEdit1->setText(QApplication::translate("PreviewWidgetBase", "LineEdit", 0, QApplication::UnicodeUTF8)); - ComboBox1->clear(); - ComboBox1->insertItems(0, QStringList() - << QApplication::translate("PreviewWidgetBase", "ComboBox", 0, QApplication::UnicodeUTF8) - ); - PushButton1->setText(QApplication::translate("PreviewWidgetBase", "PushButton", 0, QApplication::UnicodeUTF8)); - textView->setText(QApplication::translate("PreviewWidgetBase", "
\n" -"

\n" -"http://www.kde.org\n" -"

", 0, QApplication::UnicodeUTF8)); - } // retranslateUi - -}; - -namespace Ui { - class PreviewWidgetBase: public Ui_PreviewWidgetBase {}; -} // namespace Ui - -QT_END_NAMESPACE - -#endif // PREVIEWWIDGETBASE_H

\n" -"http://qt.nokia.com\n" -"