summaryrefslogtreecommitdiffstats
path: root/src/gui
diff options
context:
space:
mode:
Diffstat (limited to 'src/gui')
-rw-r--r--src/gui/dialogs/qdialog_p.h2
-rw-r--r--src/gui/dialogs/qfiledialog_embedded.ui1
-rw-r--r--src/gui/dialogs/qprintdialog_unix.cpp8
-rw-r--r--src/gui/effects/qgraphicseffect.h2
-rw-r--r--src/gui/graphicsview/qgraphicsanchorlayout_p.h4
-rw-r--r--src/gui/graphicsview/qgraphicsitem.cpp18
-rw-r--r--src/gui/graphicsview/qgraphicsscene.cpp15
-rw-r--r--src/gui/graphicsview/qsimplex_p.h4
-rw-r--r--src/gui/gui.pro5
-rw-r--r--src/gui/image/qiconloader_p.h2
-rw-r--r--src/gui/itemviews/qcolumnview_p.h4
-rw-r--r--src/gui/kernel/qapplication.h2
-rw-r--r--src/gui/kernel/qapplication_s60.cpp34
-rw-r--r--src/gui/kernel/qapplication_win.cpp1
-rw-r--r--src/gui/kernel/qevent.cpp4
-rw-r--r--src/gui/kernel/qt_s60_p.h1
-rw-r--r--src/gui/kernel/qwidget.h2
-rw-r--r--src/gui/kernel/qwidget_s60.cpp4
-rw-r--r--src/gui/math3d/qgenericmatrix.cpp53
-rw-r--r--src/gui/math3d/qgenericmatrix.h209
-rw-r--r--src/gui/math3d/qmatrix4x4.cpp298
-rw-r--r--src/gui/math3d/qmatrix4x4.h232
-rw-r--r--src/gui/math3d/qquaternion.cpp17
-rw-r--r--src/gui/math3d/qquaternion.h60
-rw-r--r--src/gui/math3d/qvector3d.h3
-rw-r--r--src/gui/math3d/qvector4d.h3
-rw-r--r--src/gui/painting/qoutlinemapper.cpp2
-rw-r--r--src/gui/painting/qpaintengine_mac.cpp8
-rw-r--r--src/gui/s60framework/qs60mainapplication.cpp102
-rw-r--r--src/gui/s60framework/qs60mainapplication_p.h112
-rw-r--r--src/gui/s60framework/qs60mainappui.cpp183
-rw-r--r--src/gui/s60framework/qs60mainappui_p.h130
-rw-r--r--src/gui/s60framework/qs60maindocument.cpp121
-rw-r--r--src/gui/s60framework/qs60maindocument_p.h139
-rw-r--r--src/gui/s60framework/s60framework.pri7
-rw-r--r--src/gui/styles/qcommonstyle.cpp1
-rw-r--r--src/gui/styles/qstylesheetstyle.cpp11
-rw-r--r--src/gui/text/qcssscanner.cpp2
-rw-r--r--src/gui/text/qfontdatabase.cpp2
-rw-r--r--src/gui/widgets/qdatetimeedit_p.h2
-rw-r--r--src/gui/widgets/qmenu_symbian.cpp1
41 files changed, 1307 insertions, 504 deletions
diff --git a/src/gui/dialogs/qdialog_p.h b/src/gui/dialogs/qdialog_p.h
index 5239d09..a90d6e6 100644
--- a/src/gui/dialogs/qdialog_p.h
+++ b/src/gui/dialogs/qdialog_p.h
@@ -98,7 +98,7 @@ public:
#endif
#ifdef Q_WS_MAC
- virtual void mac_nativeDialogModalHelp(){};
+ virtual void mac_nativeDialogModalHelp() {}
#endif
int rescode;
diff --git a/src/gui/dialogs/qfiledialog_embedded.ui b/src/gui/dialogs/qfiledialog_embedded.ui
index 1bd189e..f134f64 100644
--- a/src/gui/dialogs/qfiledialog_embedded.ui
+++ b/src/gui/dialogs/qfiledialog_embedded.ui
@@ -2,6 +2,7 @@
<comment>*********************************************************************
**
** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: Nokia Corporation (qt-info@nokia.com)
**
** This file is part of the QtGui module of the Qt Toolkit.
**
diff --git a/src/gui/dialogs/qprintdialog_unix.cpp b/src/gui/dialogs/qprintdialog_unix.cpp
index 54e0046..cb19511 100644
--- a/src/gui/dialogs/qprintdialog_unix.cpp
+++ b/src/gui/dialogs/qprintdialog_unix.cpp
@@ -193,12 +193,12 @@ public:
description(desc),
selected(-1),
selDescription(0),
- parentItem(pi) {};
+ parentItem(pi) {}
~QOptionTreeItem() {
while (!childItems.isEmpty())
delete childItems.takeFirst();
- };
+ }
ItemType type;
int index;
@@ -238,8 +238,8 @@ class QPPDOptionsEditor : public QStyledItemDelegate
{
Q_OBJECT
public:
- QPPDOptionsEditor(QObject* parent = 0) : QStyledItemDelegate(parent) {};
- ~QPPDOptionsEditor() {};
+ QPPDOptionsEditor(QObject* parent = 0) : QStyledItemDelegate(parent) {}
+ ~QPPDOptionsEditor() {}
QWidget* createEditor(QWidget* parent, const QStyleOptionViewItem& option, const QModelIndex& index) const;
void setEditorData(QWidget* editor, const QModelIndex& index) const;
diff --git a/src/gui/effects/qgraphicseffect.h b/src/gui/effects/qgraphicseffect.h
index aee7834..61aa21a 100644
--- a/src/gui/effects/qgraphicseffect.h
+++ b/src/gui/effects/qgraphicseffect.h
@@ -292,7 +292,7 @@ class QGraphicsOpacityEffectPrivate;
class Q_GUI_EXPORT QGraphicsOpacityEffect: public QGraphicsEffect
{
Q_OBJECT
- Q_PROPERTY(int opacity READ opacity WRITE setOpacity NOTIFY opacityChanged)
+ Q_PROPERTY(qreal opacity READ opacity WRITE setOpacity NOTIFY opacityChanged)
Q_PROPERTY(QBrush opacityMask READ opacityMask WRITE setOpacityMask NOTIFY opacityMaskChanged)
public:
QGraphicsOpacityEffect(QObject *parent = 0);
diff --git a/src/gui/graphicsview/qgraphicsanchorlayout_p.h b/src/gui/graphicsview/qgraphicsanchorlayout_p.h
index b64f787..098407c 100644
--- a/src/gui/graphicsview/qgraphicsanchorlayout_p.h
+++ b/src/gui/graphicsview/qgraphicsanchorlayout_p.h
@@ -170,7 +170,7 @@ struct AnchorData : public QSimplexVariable {
skipInPreferred(0), type(Normal), hasSize(false),
isLayoutAnchor(false) {}
- virtual void updateChildrenSizes() { };
+ virtual void updateChildrenSizes() {}
virtual void refreshSizeHints(qreal effectiveSpacing);
virtual ~AnchorData() {}
@@ -299,7 +299,7 @@ struct ParallelAnchorData : public AnchorData
class GraphPath
{
public:
- GraphPath() {};
+ GraphPath() {}
QSimplexConstraint *constraint(const GraphPath &path) const;
#ifdef QT_DEBUG
diff --git a/src/gui/graphicsview/qgraphicsitem.cpp b/src/gui/graphicsview/qgraphicsitem.cpp
index b7c2e26..cdcb0c4 100644
--- a/src/gui/graphicsview/qgraphicsitem.cpp
+++ b/src/gui/graphicsview/qgraphicsitem.cpp
@@ -303,13 +303,17 @@
drop shadow effects and for decoration objects that follow the parent
item's geometry without drawing on top of it.
- \value ItemUsesExtendedStyleOption The item makes use of either the
- exposedRect or matrix member of the QStyleOptionGraphicsItem. Implementers
- of QGraphicsItem subclasses should set that flag if this data is required.
- By default, the exposedRect is initialized to the item's boundingRect and
- the matrix is untransformed. Enable this flag for more fine-grained values.
- Use QStyleOptionGraphicsItem::levelOfDetailFromTransform() for a more
- fine-grained value.
+ \value ItemUsesExtendedStyleOption The item makes use of either
+ \l{QStyleOptionGraphicsItem::}{exposedRect} or
+ \l{QStyleOptionGraphicsItem::}{matrix} in QStyleOptionGraphicsItem. By default,
+ the \l{QStyleOptionGraphicsItem::}{exposedRect} is initialized to the item's
+ boundingRect() and the \l{QStyleOptionGraphicsItem::}{matrix} is untransformed.
+ You can enable this flag for the style options to be set up with more
+ fine-grained values.
+ Note that QStyleOptionGraphicsItem::levelOfDetail is unaffected by this flag
+ and always initialized to 1. Use
+ QStyleOptionGraphicsItem::levelOfDetailFromTransform() if you need a higher
+ value.
\value ItemHasNoContents The item does not paint anything (i.e., calling
paint() on the item has no effect). You should set this flag on items that
diff --git a/src/gui/graphicsview/qgraphicsscene.cpp b/src/gui/graphicsview/qgraphicsscene.cpp
index 2ac1dca..5dd71e2 100644
--- a/src/gui/graphicsview/qgraphicsscene.cpp
+++ b/src/gui/graphicsview/qgraphicsscene.cpp
@@ -4616,7 +4616,8 @@ void QGraphicsScenePrivate::markDirty(QGraphicsItem *item, const QRectF &rect, b
return;
}
- bool hasNoContents = item->d_ptr->flags & QGraphicsItem::ItemHasNoContents;
+ bool hasNoContents = item->d_ptr->flags & QGraphicsItem::ItemHasNoContents
+ && !item->d_ptr->graphicsEffect;
if (!hasNoContents) {
item->d_ptr->dirty = 1;
if (fullItemUpdate)
@@ -4706,11 +4707,15 @@ void QGraphicsScenePrivate::processDirtyItemsRecursive(QGraphicsItem *item, bool
return;
}
- const bool itemHasContents = !(item->d_ptr->flags & QGraphicsItem::ItemHasNoContents);
+ bool itemHasContents = !(item->d_ptr->flags & QGraphicsItem::ItemHasNoContents);
const bool itemHasChildren = !item->d_ptr->children.isEmpty();
- if (!itemHasContents && !itemHasChildren) {
- resetDirtyItem(item);
- return; // Item has neither contents nor children!(?)
+ if (!itemHasContents) {
+ if (!itemHasChildren) {
+ resetDirtyItem(item);
+ return; // Item has neither contents nor children!(?)
+ }
+ if (item->d_ptr->graphicsEffect)
+ itemHasContents = true;
}
const qreal opacity = item->d_ptr->combineOpacityFromParent(parentOpacity);
diff --git a/src/gui/graphicsview/qsimplex_p.h b/src/gui/graphicsview/qsimplex_p.h
index 9ee3863..eac74ac 100644
--- a/src/gui/graphicsview/qsimplex_p.h
+++ b/src/gui/graphicsview/qsimplex_p.h
@@ -60,7 +60,7 @@ QT_BEGIN_NAMESPACE
struct QSimplexVariable
{
- QSimplexVariable() : result(0), index(0) {};
+ QSimplexVariable() : result(0), index(0) {}
qreal result;
uint index;
@@ -80,7 +80,7 @@ struct QSimplexVariable
*/
struct QSimplexConstraint
{
- QSimplexConstraint() : constant(0), ratio(Equal), artificial(0) {};
+ QSimplexConstraint() : constant(0), ratio(Equal), artificial(0) {}
enum Ratio {
LessOrEqual = 0,
diff --git a/src/gui/gui.pro b/src/gui/gui.pro
index eb3a33f..7c24002 100644
--- a/src/gui/gui.pro
+++ b/src/gui/gui.pro
@@ -17,7 +17,10 @@ x11:include(kernel/x11.pri)
mac:include(kernel/mac.pri)
win32:include(kernel/win.pri)
embedded:include(embedded/embedded.pri)
-symbian:include(kernel/symbian.pri)
+symbian {
+ include(kernel/symbian.pri)
+ include(s60framework/s60framework.pri)
+}
#modules
include(animation/animation.pri)
diff --git a/src/gui/image/qiconloader_p.h b/src/gui/image/qiconloader_p.h
index ba05a54..8c1cd4e 100644
--- a/src/gui/image/qiconloader_p.h
+++ b/src/gui/image/qiconloader_p.h
@@ -139,7 +139,7 @@ class QIconTheme
{
public:
QIconTheme(const QString &name);
- QIconTheme() : m_valid(false) {};
+ QIconTheme() : m_valid(false) {}
QStringList parents() { return m_parents; }
QList <QIconDirInfo> keyList() { return m_keyList; }
QString contentDir() { return m_contentDir; }
diff --git a/src/gui/itemviews/qcolumnview_p.h b/src/gui/itemviews/qcolumnview_p.h
index 97def07..ca1d334 100644
--- a/src/gui/itemviews/qcolumnview_p.h
+++ b/src/gui/itemviews/qcolumnview_p.h
@@ -174,8 +174,8 @@ class QColumnViewDelegate : public QItemDelegate
{
public:
- explicit QColumnViewDelegate(QObject *parent = 0) : QItemDelegate(parent) {};
- ~QColumnViewDelegate() {};
+ explicit QColumnViewDelegate(QObject *parent = 0) : QItemDelegate(parent) {}
+ ~QColumnViewDelegate() {}
void paint(QPainter *painter,
const QStyleOptionViewItem &option,
diff --git a/src/gui/kernel/qapplication.h b/src/gui/kernel/qapplication.h
index 92cf0f8..f1e3cb0 100644
--- a/src/gui/kernel/qapplication.h
+++ b/src/gui/kernel/qapplication.h
@@ -327,7 +327,7 @@ public:
{ if (replace) changeOverrideCursor(cursor); else setOverrideCursor(cursor); }
# endif
inline static QT3_SUPPORT bool hasGlobalMouseTracking() {return true;}
- inline static QT3_SUPPORT void setGlobalMouseTracking(bool) {};
+ inline static QT3_SUPPORT void setGlobalMouseTracking(bool) {}
inline static QT3_SUPPORT void flushX() { flush(); }
static inline QT3_SUPPORT void setWinStyleHighlightColor(const QColor &c) {
QPalette p(palette());
diff --git a/src/gui/kernel/qapplication_s60.cpp b/src/gui/kernel/qapplication_s60.cpp
index 8561045..220b222 100644
--- a/src/gui/kernel/qapplication_s60.cpp
+++ b/src/gui/kernel/qapplication_s60.cpp
@@ -63,10 +63,13 @@
#include "apgwgnam.h" // For CApaWindowGroupName
#include <MdaAudioTonePlayer.h> // For CMdaAudioToneUtility
-#if !defined(QT_NO_IM) && defined(Q_WS_S60)
-#include "qinputcontext.h"
-#include <private/qcoefepinputcontext_p.h>
-#endif // !defined(QT_NO_IM) && defined(Q_WS_S60)
+#if defined(Q_WS_S60)
+# if !defined(QT_NO_IM)
+# include "qinputcontext.h"
+# include <private/qcoefepinputcontext_p.h>
+# endif
+# include <private/qs60mainapplication_p.h>
+#endif
#include "private/qstylesheetstyle_p.h"
@@ -715,6 +718,22 @@ TTypeUid::Ptr QSymbianControl::MopSupplyObject(TTypeUid id)
void qt_init(QApplicationPrivate * /* priv */, int)
{
+ if (!CCoeEnv::Static()) {
+ // The S60 framework has not been initalized. We need to do it.
+ TApaApplicationFactory factory(NewApplication);
+ CApaCommandLine* commandLine = 0;
+ TInt err = CApaCommandLine::GetCommandLineFromProcessEnvironment(commandLine);
+ // After this construction, CEikonEnv will be available from CEikonEnv::Static().
+ // (much like our qApp).
+ CEikonEnv* coe = new CEikonEnv;
+ QT_TRAP_THROWING(coe->ConstructAppFromCommandLineL(factory,*commandLine));
+ delete commandLine;
+
+ S60->qtOwnsS60Environment = true;
+ } else {
+ S60->qtOwnsS60Environment = false;
+ }
+
#ifdef QT_NO_DEBUG
if (!qgetenv("QT_S60_AUTO_FLUSH_WSERV").isEmpty())
#endif
@@ -766,6 +785,13 @@ void qt_cleanup()
// it dies.
delete QApplicationPrivate::inputContext;
QApplicationPrivate::inputContext = 0;
+
+ if (S60->qtOwnsS60Environment) {
+ CEikonEnv* coe = CEikonEnv::Static();
+ coe->PrepareToExit();
+ // The CEikonEnv itself is destroyed in here.
+ coe->DestroyEnvironment();
+ }
}
void QApplicationPrivate::initializeWidgetPaletteHash()
diff --git a/src/gui/kernel/qapplication_win.cpp b/src/gui/kernel/qapplication_win.cpp
index 84edf1f..729b791 100644
--- a/src/gui/kernel/qapplication_win.cpp
+++ b/src/gui/kernel/qapplication_win.cpp
@@ -2035,7 +2035,6 @@ LRESULT CALLBACK QtWndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam
#endif
// Ignore the activate message send by WindowsXP to a minimized window
#ifdef Q_WS_WINCE_WM
- {
if (widget->windowState() & Qt::WindowFullScreen)
qt_wince_hide_taskbar(widget->winId());
#endif
diff --git a/src/gui/kernel/qevent.cpp b/src/gui/kernel/qevent.cpp
index a61b6fa..0b282bc 100644
--- a/src/gui/kernel/qevent.cpp
+++ b/src/gui/kernel/qevent.cpp
@@ -3648,13 +3648,13 @@ QMenubarUpdatedEvent::QMenubarUpdatedEvent(QMenuBar * const menuBar)
\i As mentioned above, enabling touch events means multiple widgets can be receiving touch
events simultaneously. Combined with the default QWidget::event() handling for QTouchEvents,
this gives you great flexibility in designing multi-touch user interfaces. Be aware of the
- implications. For example, is is possible that the user is moving a QSlider with one finger and
+ implications. For example, it is possible that the user is moving a QSlider with one finger and
pressing a QPushButton with another. The signals emitted by these widgets will be
interleaved.
\i Recursion into the event loop using one of the exec() methods (e.g., QDialog::exec() or
QMenu::exec()) in a QTouchEvent event handler is not supported. Since there are multiple event
- recipients, unexpected recursion may cause problems, including but not limited to lost events
+ recipients, recursion may cause problems, including but not limited to lost events
and unexpected infinite recursion.
\i QTouchEvents are not affected by a \l{QWidget::grabMouse()}{mouse grab} or an
diff --git a/src/gui/kernel/qt_s60_p.h b/src/gui/kernel/qt_s60_p.h
index 78301af..ea1ca69 100644
--- a/src/gui/kernel/qt_s60_p.h
+++ b/src/gui/kernel/qt_s60_p.h
@@ -95,6 +95,7 @@ public:
int screenHeightInTwips;
int defaultDpiX;
int defaultDpiY;
+ int qtOwnsS60Environment : 1;
static inline void updateScreenSize();
static inline RWsSession& wsSession();
static inline RWindowGroup& windowGroup();
diff --git a/src/gui/kernel/qwidget.h b/src/gui/kernel/qwidget.h
index f398dbd..284558f 100644
--- a/src/gui/kernel/qwidget.h
+++ b/src/gui/kernel/qwidget.h
@@ -830,7 +830,7 @@ public:
inline QT3_SUPPORT void setFont(const QFont &f, bool) { setFont(f); }
inline QT3_SUPPORT void setPalette(const QPalette &p, bool) { setPalette(p); }
enum BackgroundOrigin { WidgetOrigin, ParentOrigin, WindowOrigin, AncestorOrigin };
- inline QT3_SUPPORT void setBackgroundOrigin(BackgroundOrigin){};
+ inline QT3_SUPPORT void setBackgroundOrigin(BackgroundOrigin) {}
inline QT3_SUPPORT BackgroundOrigin backgroundOrigin() const { return WindowOrigin; }
inline QT3_SUPPORT QPoint backgroundOffset() const { return QPoint(); }
inline QT3_SUPPORT void repaint(bool) { repaint(); }
diff --git a/src/gui/kernel/qwidget_s60.cpp b/src/gui/kernel/qwidget_s60.cpp
index 6da35d8..d630143 100644
--- a/src/gui/kernel/qwidget_s60.cpp
+++ b/src/gui/kernel/qwidget_s60.cpp
@@ -722,7 +722,9 @@ void QWidgetPrivate::setWindowIcon_sys(bool forceReset)
// The API to get title_pane graphics size is not public -> assume square space based
// on titlebar font height. CAknBitmap would be optimum, wihtout setting the size, since
// then title pane would automatically scale the bitmap. Unfortunately it is not public API
- const CFont * font = AknLayoutUtils::FontFromId(EAknLogicalFontTitleFont);
+ // Also this function is leaving, although it is not named as such.
+ const CFont * font;
+ QT_TRAP_THROWING(font = AknLayoutUtils::FontFromId(EAknLogicalFontTitleFont));
TSize iconSize(font->HeightInPixels(), font->HeightInPixels());
QIcon icon = q->windowIcon();
diff --git a/src/gui/math3d/qgenericmatrix.cpp b/src/gui/math3d/qgenericmatrix.cpp
index 290c9c2..b5d8824 100644
--- a/src/gui/math3d/qgenericmatrix.cpp
+++ b/src/gui/math3d/qgenericmatrix.cpp
@@ -50,19 +50,14 @@ QT_BEGIN_NAMESPACE
\ingroup painting
\ingroup painting-3D
- The QGenericMatrix template has four parameters:
+ The QGenericMatrix template has three parameters:
\table
\row \i N \i Number of columns.
\row \i M \i Number of rows.
\row \i T \i Element type that is visible to users of the class.
- \row \i InnerT \i Element type that is used inside the class.
\endtable
- Normally T and InnerT are the same type; e.g. float or double.
- But they can be different if the user wants to store elements
- internally in a fixed-point format for the underlying hardware.
-
\sa QMatrix4x4
*/
@@ -73,7 +68,7 @@ QT_BEGIN_NAMESPACE
*/
/*!
- \fn QGenericMatrix::QGenericMatrix(const QGenericMatrix<N, M, T, InnerT>& other)
+ \fn QGenericMatrix::QGenericMatrix(const QGenericMatrix<N, M, T>& other)
Constructs a copy of \a other.
*/
@@ -89,13 +84,14 @@ QT_BEGIN_NAMESPACE
*/
/*!
- \fn T QGenericMatrix::operator()(int row, int column) const
+ \fn const T& QGenericMatrix::operator()(int row, int column) const
- Returns the element at position (\a row, \a column) in this matrix.
+ Returns a constant reference to the element at position
+ (\a row, \a column) in this matrix.
*/
/*!
- \fn InnerT& QGenericMatrix::operator()(int row, int column)
+ \fn T& QGenericMatrix::operator()(int row, int column)
Returns a reference to the element at position (\a row, \a column)
in this matrix so that the element can be assigned to.
@@ -130,57 +126,57 @@ QT_BEGIN_NAMESPACE
*/
/*!
- \fn QGenericMatrix<N, M, T, InnerT>& QGenericMatrix::operator+=(const QGenericMatrix<N, M, T, InnerT>& other)
+ \fn QGenericMatrix<N, M, T>& QGenericMatrix::operator+=(const QGenericMatrix<N, M, T>& other)
Adds the contents of \a other to this matrix.
*/
/*!
- \fn QGenericMatrix<N, M, T, InnerT>& QGenericMatrix::operator-=(const QGenericMatrix<N, M, T, InnerT>& other)
+ \fn QGenericMatrix<N, M, T>& QGenericMatrix::operator-=(const QGenericMatrix<N, M, T>& other)
Subtracts the contents of \a other from this matrix.
*/
/*!
- \fn QGenericMatrix<N, M, T, InnerT>& QGenericMatrix::operator*=(T factor)
+ \fn QGenericMatrix<N, M, T>& QGenericMatrix::operator*=(T factor)
Multiplies all elements of this matrix by \a factor.
*/
/*!
- \fn QGenericMatrix<N, M, T, InnerT>& QGenericMatrix::operator/=(T divisor)
+ \fn QGenericMatrix<N, M, T>& QGenericMatrix::operator/=(T divisor)
Divides all elements of this matrix by \a divisor.
*/
/*!
- \fn bool QGenericMatrix::operator==(const QGenericMatrix<N, M, T, InnerT>& other) const
+ \fn bool QGenericMatrix::operator==(const QGenericMatrix<N, M, T>& other) const
Returns true if this matrix is identical to \a other; false otherwise.
*/
/*!
- \fn bool QGenericMatrix::operator!=(const QGenericMatrix<N, M, T, InnerT>& other) const
+ \fn bool QGenericMatrix::operator!=(const QGenericMatrix<N, M, T>& other) const
Returns true if this matrix is not identical to \a other; false otherwise.
*/
/*!
- \fn QGenericMatrix<N, M, T, InnerT> operator+(const QGenericMatrix<N, M, T, InnerT>& m1, const QGenericMatrix<N, M, T, InnerT>& m2)
+ \fn QGenericMatrix<N, M, T> operator+(const QGenericMatrix<N, M, T>& m1, const QGenericMatrix<N, M, T>& m2)
\relates QGenericMatrix
Returns the sum of \a m1 and \a m2.
*/
/*!
- \fn QGenericMatrix<N, M, T, InnerT> operator-(const QGenericMatrix<N, M, T, InnerT>& m1, const QGenericMatrix<N, M, T, InnerT>& m2)
+ \fn QGenericMatrix<N, M, T> operator-(const QGenericMatrix<N, M, T>& m1, const QGenericMatrix<N, M, T>& m2)
\relates QGenericMatrix
Returns the difference of \a m1 and \a m2.
*/
/*!
- \fn QGenericMatrix<M1, M2, T, InnerT> operator*(const QGenericMatrix<N, M2, T, InnerT>& m1, const QGenericMatrix<M1, N, T, InnerT>& m2)
+ \fn QGenericMatrix<M1, M2, T> operator*(const QGenericMatrix<N, M2, T>& m1, const QGenericMatrix<M1, N, T>& m2)
\relates QGenericMatrix
Returns the product of the NxM2 matrix \a m1 and the M1xN matrix \a m2
@@ -188,7 +184,7 @@ QT_BEGIN_NAMESPACE
*/
/*!
- \fn QGenericMatrix<N, M, T, InnerT> operator-(const QGenericMatrix<N, M, T, InnerT>& matrix)
+ \fn QGenericMatrix<N, M, T> operator-(const QGenericMatrix<N, M, T>& matrix)
\overload
\relates QGenericMatrix
@@ -196,21 +192,21 @@ QT_BEGIN_NAMESPACE
*/
/*!
- \fn QGenericMatrix<N, M, T, InnerT> operator*(T factor, const QGenericMatrix<N, M, T, InnerT>& matrix)
+ \fn QGenericMatrix<N, M, T> operator*(T factor, const QGenericMatrix<N, M, T>& matrix)
\relates QGenericMatrix
Returns the result of multiplying all elements of \a matrix by \a factor.
*/
/*!
- \fn QGenericMatrix<N, M, T, InnerT> operator*(const QGenericMatrix<N, M, T, InnerT>& matrix, T factor)
+ \fn QGenericMatrix<N, M, T> operator*(const QGenericMatrix<N, M, T>& matrix, T factor)
\relates QGenericMatrix
Returns the result of multiplying all elements of \a matrix by \a factor.
*/
/*!
- \fn QGenericMatrix<N, M, T, InnerT> operator/(const QGenericMatrix<N, M, T, InnerT>& matrix, T divisor)
+ \fn QGenericMatrix<N, M, T> operator/(const QGenericMatrix<N, M, T>& matrix, T divisor)
\relates QGenericMatrix
Returns the result of dividing all elements of \a matrix by \a divisor.
@@ -224,28 +220,25 @@ QT_BEGIN_NAMESPACE
*/
/*!
- \fn InnerT *QGenericMatrix::data()
+ \fn T *QGenericMatrix::data()
- Returns a pointer to the raw data of this matrix. This is intended
- for use with raw GL functions.
+ Returns a pointer to the raw data of this matrix.
\sa constData()
*/
/*!
- \fn const InnerT *QGenericMatrix::data() const
+ \fn const T *QGenericMatrix::data() const
Returns a constant pointer to the raw data of this matrix.
- This is intended for use with raw GL functions.
\sa constData()
*/
/*!
- \fn const InnerT *QGenericMatrix::constData() const
+ \fn const T *QGenericMatrix::constData() const
Returns a constant pointer to the raw data of this matrix.
- This is intended for use with raw GL functions.
\sa data()
*/
diff --git a/src/gui/math3d/qgenericmatrix.h b/src/gui/math3d/qgenericmatrix.h
index fe7ba5f..39c4ed8 100644
--- a/src/gui/math3d/qgenericmatrix.h
+++ b/src/gui/math3d/qgenericmatrix.h
@@ -51,103 +51,103 @@ QT_BEGIN_NAMESPACE
QT_MODULE(Gui)
-template <int N, int M, typename T, typename InnerT = T>
+template <int N, int M, typename T>
class QGenericMatrix
{
public:
QGenericMatrix();
- QGenericMatrix(const QGenericMatrix<N, M, T, InnerT>& other);
+ QGenericMatrix(const QGenericMatrix<N, M, T>& other);
explicit QGenericMatrix(const T *values);
- T operator()(int row, int column) const;
- InnerT& operator()(int row, int column);
+ const T& operator()(int row, int column) const;
+ T& operator()(int row, int column);
bool isIdentity() const;
void setIdentity();
void fill(T value);
- QGenericMatrix<M, N, T, InnerT> transposed() const;
+ QGenericMatrix<M, N, T> transposed() const;
- QGenericMatrix<N, M, T, InnerT>& operator+=(const QGenericMatrix<N, M, T, InnerT>& other);
- QGenericMatrix<N, M, T, InnerT>& operator-=(const QGenericMatrix<N, M, T, InnerT>& other);
- QGenericMatrix<N, M, T, InnerT>& operator*=(T factor);
- QGenericMatrix<N, M, T, InnerT>& operator/=(T divisor);
- bool operator==(const QGenericMatrix<N, M, T, InnerT>& other) const;
- bool operator!=(const QGenericMatrix<N, M, T, InnerT>& other) const;
+ QGenericMatrix<N, M, T>& operator+=(const QGenericMatrix<N, M, T>& other);
+ QGenericMatrix<N, M, T>& operator-=(const QGenericMatrix<N, M, T>& other);
+ QGenericMatrix<N, M, T>& operator*=(T factor);
+ QGenericMatrix<N, M, T>& operator/=(T divisor);
+ bool operator==(const QGenericMatrix<N, M, T>& other) const;
+ bool operator!=(const QGenericMatrix<N, M, T>& other) const;
void toValueArray(T *values);
- InnerT *data() { return m[0]; }
- const InnerT *data() const { return m[0]; }
- const InnerT *constData() const { return m[0]; }
+ T *data() { return m[0]; }
+ const T *data() const { return m[0]; }
+ const T *constData() const { return m[0]; }
#if !defined(Q_NO_TEMPLATE_FRIENDS)
- template<int NN, int MM, typename TT, typename ITT>
- friend QGenericMatrix<NN, MM, TT, ITT> operator+(const QGenericMatrix<NN, MM, TT, ITT>& m1, const QGenericMatrix<NN, MM, TT, ITT>& m2);
- template<int NN, int MM, typename TT, typename ITT>
- friend QGenericMatrix<NN, MM, TT, ITT> operator-(const QGenericMatrix<NN, MM, TT, ITT>& m1, const QGenericMatrix<NN, MM, TT, ITT>& m2);
- template<int NN, int M1, int M2, typename TT, typename ITT>
- friend QGenericMatrix<M1, M2, TT, ITT> operator*(const QGenericMatrix<NN, M2, TT, ITT>& m1, const QGenericMatrix<M1, NN, TT, ITT>& m2);
- template<int NN, int MM, typename TT, typename ITT>
- friend QGenericMatrix<NN, MM, TT, ITT> operator-(const QGenericMatrix<NN, MM, TT, ITT>& matrix);
- template<int NN, int MM, typename TT, typename ITT>
- friend QGenericMatrix<NN, MM, TT, ITT> operator*(TT factor, const QGenericMatrix<NN, MM, TT, ITT>& matrix);
- template<int NN, int MM, typename TT, typename ITT>
- friend QGenericMatrix<NN, MM, TT, ITT> operator*(const QGenericMatrix<NN, MM, TT, ITT>& matrix, TT factor);
- template<int NN, int MM, typename TT, typename ITT>
- friend QGenericMatrix<NN, MM, TT, ITT> operator/(const QGenericMatrix<NN, MM, TT, ITT>& matrix, TT divisor);
+ template<int NN, int MM, typename TT>
+ friend QGenericMatrix<NN, MM, TT> operator+(const QGenericMatrix<NN, MM, TT>& m1, const QGenericMatrix<NN, MM, TT>& m2);
+ template<int NN, int MM, typename TT>
+ friend QGenericMatrix<NN, MM, TT> operator-(const QGenericMatrix<NN, MM, TT>& m1, const QGenericMatrix<NN, MM, TT>& m2);
+ template<int NN, int M1, int M2, typename TT>
+ friend QGenericMatrix<M1, M2, TT> operator*(const QGenericMatrix<NN, M2, TT>& m1, const QGenericMatrix<M1, NN, TT>& m2);
+ template<int NN, int MM, typename TT>
+ friend QGenericMatrix<NN, MM, TT> operator-(const QGenericMatrix<NN, MM, TT>& matrix);
+ template<int NN, int MM, typename TT>
+ friend QGenericMatrix<NN, MM, TT> operator*(TT factor, const QGenericMatrix<NN, MM, TT>& matrix);
+ template<int NN, int MM, typename TT>
+ friend QGenericMatrix<NN, MM, TT> operator*(const QGenericMatrix<NN, MM, TT>& matrix, TT factor);
+ template<int NN, int MM, typename TT>
+ friend QGenericMatrix<NN, MM, TT> operator/(const QGenericMatrix<NN, MM, TT>& matrix, TT divisor);
private:
#endif
- InnerT m[N][M]; // Column-major order to match OpenGL.
+ T m[N][M]; // Column-major order to match OpenGL.
QGenericMatrix(int) {} // Construct without initializing identity matrix.
#if !defined(Q_NO_TEMPLATE_FRIENDS)
- template <int NN, int MM, typename TT, typename ITT>
+ template <int NN, int MM, typename TT>
friend class QGenericMatrix;
#endif
};
-template <int N, int M, typename T, typename InnerT>
-Q_INLINE_TEMPLATE QGenericMatrix<N, M, T, InnerT>::QGenericMatrix()
+template <int N, int M, typename T>
+Q_INLINE_TEMPLATE QGenericMatrix<N, M, T>::QGenericMatrix()
{
setIdentity();
}
-template <int N, int M, typename T, typename InnerT>
-Q_INLINE_TEMPLATE QGenericMatrix<N, M, T, InnerT>::QGenericMatrix(const QGenericMatrix<N, M, T, InnerT>& other)
+template <int N, int M, typename T>
+Q_INLINE_TEMPLATE QGenericMatrix<N, M, T>::QGenericMatrix(const QGenericMatrix<N, M, T>& other)
{
for (int col = 0; col < N; ++col)
for (int row = 0; row < M; ++row)
m[col][row] = other.m[col][row];
}
-template <int N, int M, typename T, typename InnerT>
-Q_OUTOFLINE_TEMPLATE QGenericMatrix<N, M, T, InnerT>::QGenericMatrix(const T *values)
+template <int N, int M, typename T>
+Q_OUTOFLINE_TEMPLATE QGenericMatrix<N, M, T>::QGenericMatrix(const T *values)
{
for (int col = 0; col < N; ++col)
for (int row = 0; row < M; ++row)
m[col][row] = values[row * N + col];
}
-template <int N, int M, typename T, typename InnerT>
-Q_INLINE_TEMPLATE T QGenericMatrix<N, M, T, InnerT>::operator()(int row, int column) const
+template <int N, int M, typename T>
+Q_INLINE_TEMPLATE const T& QGenericMatrix<N, M, T>::operator()(int row, int column) const
{
Q_ASSERT(row >= 0 && row < M && column >= 0 && column < N);
- return T(m[column][row]);
+ return m[column][row];
}
-template <int N, int M, typename T, typename InnerT>
-Q_INLINE_TEMPLATE InnerT& QGenericMatrix<N, M, T, InnerT>::operator()(int row, int column)
+template <int N, int M, typename T>
+Q_INLINE_TEMPLATE T& QGenericMatrix<N, M, T>::operator()(int row, int column)
{
Q_ASSERT(row >= 0 && row < M && column >= 0 && column < N);
return m[column][row];
}
-template <int N, int M, typename T, typename InnerT>
-Q_OUTOFLINE_TEMPLATE bool QGenericMatrix<N, M, T, InnerT>::isIdentity() const
+template <int N, int M, typename T>
+Q_OUTOFLINE_TEMPLATE bool QGenericMatrix<N, M, T>::isIdentity() const
{
for (int col = 0; col < N; ++col) {
for (int row = 0; row < M; ++row) {
@@ -163,8 +163,8 @@ Q_OUTOFLINE_TEMPLATE bool QGenericMatrix<N, M, T, InnerT>::isIdentity() const
return true;
}
-template <int N, int M, typename T, typename InnerT>
-Q_OUTOFLINE_TEMPLATE void QGenericMatrix<N, M, T, InnerT>::setIdentity()
+template <int N, int M, typename T>
+Q_OUTOFLINE_TEMPLATE void QGenericMatrix<N, M, T>::setIdentity()
{
for (int col = 0; col < N; ++col) {
for (int row = 0; row < M; ++row) {
@@ -176,51 +176,50 @@ Q_OUTOFLINE_TEMPLATE void QGenericMatrix<N, M, T, InnerT>::setIdentity()
}
}
-template <int N, int M, typename T, typename InnerT>
-Q_OUTOFLINE_TEMPLATE void QGenericMatrix<N, M, T, InnerT>::fill(T value)
+template <int N, int M, typename T>
+Q_OUTOFLINE_TEMPLATE void QGenericMatrix<N, M, T>::fill(T value)
{
for (int col = 0; col < N; ++col)
for (int row = 0; row < M; ++row)
m[col][row] = value;
}
-template <int N, int M, typename T, typename InnerT>
-Q_OUTOFLINE_TEMPLATE QGenericMatrix<M, N, T, InnerT> QGenericMatrix<N, M, T, InnerT>::transposed() const
+template <int N, int M, typename T>
+Q_OUTOFLINE_TEMPLATE QGenericMatrix<M, N, T> QGenericMatrix<N, M, T>::transposed() const
{
- QGenericMatrix<M, N, T, InnerT> result(1);
+ QGenericMatrix<M, N, T> result(1);
for (int row = 0; row < M; ++row)
for (int col = 0; col < N; ++col)
result.m[row][col] = m[col][row];
return result;
}
-template <int N, int M, typename T, typename InnerT>
-Q_OUTOFLINE_TEMPLATE QGenericMatrix<N, M, T, InnerT>& QGenericMatrix<N, M, T, InnerT>::operator+=(const QGenericMatrix<N, M, T, InnerT>& other)
+template <int N, int M, typename T>
+Q_OUTOFLINE_TEMPLATE QGenericMatrix<N, M, T>& QGenericMatrix<N, M, T>::operator+=(const QGenericMatrix<N, M, T>& other)
{
for (int index = 0; index < N * M; ++index)
m[0][index] += other.m[0][index];
return *this;
}
-template <int N, int M, typename T, typename InnerT>
-Q_OUTOFLINE_TEMPLATE QGenericMatrix<N, M, T, InnerT>& QGenericMatrix<N, M, T, InnerT>::operator-=(const QGenericMatrix<N, M, T, InnerT>& other)
+template <int N, int M, typename T>
+Q_OUTOFLINE_TEMPLATE QGenericMatrix<N, M, T>& QGenericMatrix<N, M, T>::operator-=(const QGenericMatrix<N, M, T>& other)
{
for (int index = 0; index < N * M; ++index)
m[0][index] -= other.m[0][index];
return *this;
}
-template <int N, int M, typename T, typename InnerT>
-Q_OUTOFLINE_TEMPLATE QGenericMatrix<N, M, T, InnerT>& QGenericMatrix<N, M, T, InnerT>::operator*=(T factor)
+template <int N, int M, typename T>
+Q_OUTOFLINE_TEMPLATE QGenericMatrix<N, M, T>& QGenericMatrix<N, M, T>::operator*=(T factor)
{
- InnerT f(factor);
for (int index = 0; index < N * M; ++index)
- m[0][index] *= f;
+ m[0][index] *= factor;
return *this;
}
-template <int N, int M, typename T, typename InnerT>
-Q_OUTOFLINE_TEMPLATE bool QGenericMatrix<N, M, T, InnerT>::operator==(const QGenericMatrix<N, M, T, InnerT>& other) const
+template <int N, int M, typename T>
+Q_OUTOFLINE_TEMPLATE bool QGenericMatrix<N, M, T>::operator==(const QGenericMatrix<N, M, T>& other) const
{
for (int index = 0; index < N * M; ++index) {
if (m[0][index] != other.m[0][index])
@@ -229,8 +228,8 @@ Q_OUTOFLINE_TEMPLATE bool QGenericMatrix<N, M, T, InnerT>::operator==(const QGen
return true;
}
-template <int N, int M, typename T, typename InnerT>
-Q_OUTOFLINE_TEMPLATE bool QGenericMatrix<N, M, T, InnerT>::operator!=(const QGenericMatrix<N, M, T, InnerT>& other) const
+template <int N, int M, typename T>
+Q_OUTOFLINE_TEMPLATE bool QGenericMatrix<N, M, T>::operator!=(const QGenericMatrix<N, M, T>& other) const
{
for (int index = 0; index < N * M; ++index) {
if (m[0][index] != other.m[0][index])
@@ -239,40 +238,39 @@ Q_OUTOFLINE_TEMPLATE bool QGenericMatrix<N, M, T, InnerT>::operator!=(const QGen
return false;
}
-template <int N, int M, typename T, typename InnerT>
-Q_OUTOFLINE_TEMPLATE QGenericMatrix<N, M, T, InnerT>& QGenericMatrix<N, M, T, InnerT>::operator/=(T divisor)
+template <int N, int M, typename T>
+Q_OUTOFLINE_TEMPLATE QGenericMatrix<N, M, T>& QGenericMatrix<N, M, T>::operator/=(T divisor)
{
- InnerT d(divisor);
for (int index = 0; index < N * M; ++index)
- m[0][index] /= d;
+ m[0][index] /= divisor;
return *this;
}
-template <int N, int M, typename T, typename InnerT>
-Q_OUTOFLINE_TEMPLATE QGenericMatrix<N, M, T, InnerT> operator+(const QGenericMatrix<N, M, T, InnerT>& m1, const QGenericMatrix<N, M, T, InnerT>& m2)
+template <int N, int M, typename T>
+Q_OUTOFLINE_TEMPLATE QGenericMatrix<N, M, T> operator+(const QGenericMatrix<N, M, T>& m1, const QGenericMatrix<N, M, T>& m2)
{
- QGenericMatrix<N, M, T, InnerT> result(1);
+ QGenericMatrix<N, M, T> result(1);
for (int index = 0; index < N * M; ++index)
result.m[0][index] = m1.m[0][index] + m2.m[0][index];
return result;
}
-template <int N, int M, typename T, typename InnerT>
-Q_OUTOFLINE_TEMPLATE QGenericMatrix<N, M, T, InnerT> operator-(const QGenericMatrix<N, M, T, InnerT>& m1, const QGenericMatrix<N, M, T, InnerT>& m2)
+template <int N, int M, typename T>
+Q_OUTOFLINE_TEMPLATE QGenericMatrix<N, M, T> operator-(const QGenericMatrix<N, M, T>& m1, const QGenericMatrix<N, M, T>& m2)
{
- QGenericMatrix<N, M, T, InnerT> result(1);
+ QGenericMatrix<N, M, T> result(1);
for (int index = 0; index < N * M; ++index)
result.m[0][index] = m1.m[0][index] - m2.m[0][index];
return result;
}
-template <int N, int M1, int M2, typename T, typename InnerT>
-Q_OUTOFLINE_TEMPLATE QGenericMatrix<M1, M2, T, InnerT> operator*(const QGenericMatrix<N, M2, T, InnerT>& m1, const QGenericMatrix<M1, N, T, InnerT>& m2)
+template <int N, int M1, int M2, typename T>
+Q_OUTOFLINE_TEMPLATE QGenericMatrix<M1, M2, T> operator*(const QGenericMatrix<N, M2, T>& m1, const QGenericMatrix<M1, N, T>& m2)
{
- QGenericMatrix<M1, M2, T, InnerT> result(1);
+ QGenericMatrix<M1, M2, T> result(1);
for (int row = 0; row < M2; ++row) {
for (int col = 0; col < M1; ++col) {
- InnerT sum(0.0f);
+ T sum(0.0f);
for (int j = 0; j < N; ++j)
sum += m1.m[j][row] * m2.m[col][j];
result.m[col][row] = sum;
@@ -281,47 +279,44 @@ Q_OUTOFLINE_TEMPLATE QGenericMatrix<M1, M2, T, InnerT> operator*(const QGenericM
return result;
}
-template <int N, int M, typename T, typename InnerT>
-Q_OUTOFLINE_TEMPLATE QGenericMatrix<N, M, T, InnerT> operator-(const QGenericMatrix<N, M, T, InnerT>& matrix)
+template <int N, int M, typename T>
+Q_OUTOFLINE_TEMPLATE QGenericMatrix<N, M, T> operator-(const QGenericMatrix<N, M, T>& matrix)
{
- QGenericMatrix<N, M, T, InnerT> result(1);
+ QGenericMatrix<N, M, T> result(1);
for (int index = 0; index < N * M; ++index)
result.m[0][index] = -matrix.m[0][index];
return result;
}
-template <int N, int M, typename T, typename InnerT>
-Q_OUTOFLINE_TEMPLATE QGenericMatrix<N, M, T, InnerT> operator*(T factor, const QGenericMatrix<N, M, T, InnerT>& matrix)
+template <int N, int M, typename T>
+Q_OUTOFLINE_TEMPLATE QGenericMatrix<N, M, T> operator*(T factor, const QGenericMatrix<N, M, T>& matrix)
{
- InnerT f(factor);
- QGenericMatrix<N, M, T, InnerT> result(1);
+ QGenericMatrix<N, M, T> result(1);
for (int index = 0; index < N * M; ++index)
- result.m[0][index] = matrix.m[0][index] * f;
+ result.m[0][index] = matrix.m[0][index] * factor;
return result;
}
-template <int N, int M, typename T, typename InnerT>
-Q_OUTOFLINE_TEMPLATE QGenericMatrix<N, M, T, InnerT> operator*(const QGenericMatrix<N, M, T, InnerT>& matrix, T factor)
+template <int N, int M, typename T>
+Q_OUTOFLINE_TEMPLATE QGenericMatrix<N, M, T> operator*(const QGenericMatrix<N, M, T>& matrix, T factor)
{
- InnerT f(factor);
- QGenericMatrix<N, M, T, InnerT> result(1);
+ QGenericMatrix<N, M, T> result(1);
for (int index = 0; index < N * M; ++index)
- result.m[0][index] = matrix.m[0][index] * f;
+ result.m[0][index] = matrix.m[0][index] * factor;
return result;
}
-template <int N, int M, typename T, typename InnerT>
-Q_OUTOFLINE_TEMPLATE QGenericMatrix<N, M, T, InnerT> operator/(const QGenericMatrix<N, M, T, InnerT>& matrix, T divisor)
+template <int N, int M, typename T>
+Q_OUTOFLINE_TEMPLATE QGenericMatrix<N, M, T> operator/(const QGenericMatrix<N, M, T>& matrix, T divisor)
{
- InnerT d(divisor);
- QGenericMatrix<N, M, T, InnerT> result(1);
+ QGenericMatrix<N, M, T> result(1);
for (int index = 0; index < N * M; ++index)
- result.m[0][index] = matrix.m[0][index] / d;
+ result.m[0][index] = matrix.m[0][index] / divisor;
return result;
}
-template <int N, int M, typename T, typename InnerT>
-Q_OUTOFLINE_TEMPLATE void QGenericMatrix<N, M, T, InnerT>::toValueArray(T *values)
+template <int N, int M, typename T>
+Q_OUTOFLINE_TEMPLATE void QGenericMatrix<N, M, T>::toValueArray(T *values)
{
for (int col = 0; col < N; ++col)
for (int row = 0; row < M; ++row)
@@ -329,22 +324,22 @@ Q_OUTOFLINE_TEMPLATE void QGenericMatrix<N, M, T, InnerT>::toValueArray(T *value
}
// Define aliases for the useful variants of QGenericMatrix.
-typedef QGenericMatrix<2, 2, qreal, float> QMatrix2x2;
-typedef QGenericMatrix<2, 3, qreal, float> QMatrix2x3;
-typedef QGenericMatrix<2, 4, qreal, float> QMatrix2x4;
-typedef QGenericMatrix<3, 2, qreal, float> QMatrix3x2;
-typedef QGenericMatrix<3, 3, qreal, float> QMatrix3x3;
-typedef QGenericMatrix<3, 4, qreal, float> QMatrix3x4;
-typedef QGenericMatrix<4, 2, qreal, float> QMatrix4x2;
-typedef QGenericMatrix<4, 3, qreal, float> QMatrix4x3;
+typedef QGenericMatrix<2, 2, qreal> QMatrix2x2;
+typedef QGenericMatrix<2, 3, qreal> QMatrix2x3;
+typedef QGenericMatrix<2, 4, qreal> QMatrix2x4;
+typedef QGenericMatrix<3, 2, qreal> QMatrix3x2;
+typedef QGenericMatrix<3, 3, qreal> QMatrix3x3;
+typedef QGenericMatrix<3, 4, qreal> QMatrix3x4;
+typedef QGenericMatrix<4, 2, qreal> QMatrix4x2;
+typedef QGenericMatrix<4, 3, qreal> QMatrix4x3;
#ifndef QT_NO_DEBUG_STREAM
-template <int N, int M, typename T, typename InnerT>
-QDebug operator<<(QDebug dbg, const QGenericMatrix<N, M, T, InnerT> &m)
+template <int N, int M, typename T>
+QDebug operator<<(QDebug dbg, const QGenericMatrix<N, M, T> &m)
{
dbg.nospace() << "QGenericMatrix<" << N << ", " << M
- << ", " << QTypeInfo<T>::name() << ", " << QTypeInfo<InnerT>::name()
+ << ", " << QTypeInfo<T>::name()
<< ">(" << endl << qSetFieldWidth(10);
for (int row = 0; row < M; ++row) {
for (int col = 0; col < N; ++col)
diff --git a/src/gui/math3d/qmatrix4x4.cpp b/src/gui/math3d/qmatrix4x4.cpp
index eb5858c..2164aca 100644
--- a/src/gui/math3d/qmatrix4x4.cpp
+++ b/src/gui/math3d/qmatrix4x4.cpp
@@ -103,7 +103,7 @@ QMatrix4x4::QMatrix4x4(const qreal *values)
#if !defined(QT_NO_MEMBER_TEMPLATES) || defined(Q_QDOC)
/*!
- \fn QMatrix4x4::QMatrix4x4(const QGenericMatrix<N, M, qreal, float>& matrix)
+ \fn QMatrix4x4::QMatrix4x4(const QGenericMatrix<N, M, qreal>& matrix)
Constructs a 4x4 matrix from the left-most 4 columns and top-most
4 rows of \a matrix. If \a matrix has less than 4 columns or rows,
@@ -114,7 +114,7 @@ QMatrix4x4::QMatrix4x4(const qreal *values)
*/
/*!
- \fn QGenericMatrix<N, M, qreal, float> QMatrix4x4::toGenericMatrix() const
+ \fn QGenericMatrix<N, M, qreal> QMatrix4x4::toGenericMatrix() const
Constructs a NxM generic matrix from the left-most N columns and
top-most M rows of this 4x4 matrix. If N or M is greater than 4,
@@ -127,7 +127,7 @@ QMatrix4x4::QMatrix4x4(const qreal *values)
#endif
/*!
- \fn QMatrix4x4 qGenericMatrixToMatrix4x4(const QGenericMatrix<N, M, qreal, float>& matrix)
+ \fn QMatrix4x4 qGenericMatrixToMatrix4x4(const QGenericMatrix<N, M, qreal>& matrix)
\relates QMatrix4x4
Returns a 4x4 matrix constructed from the left-most 4 columns and
@@ -139,7 +139,7 @@ QMatrix4x4::QMatrix4x4(const qreal *values)
*/
/*!
- \fn QGenericMatrix<N, M, qreal, float> qGenericMatrixFromMatrix4x4(const QMatrix4x4& matrix)
+ \fn QGenericMatrix<N, M, qreal> qGenericMatrixFromMatrix4x4(const QMatrix4x4& matrix)
\relates QMatrix4x4
Returns a NxM generic matrix constructed from the left-most N columns
@@ -153,7 +153,7 @@ QMatrix4x4::QMatrix4x4(const qreal *values)
/*!
\internal
*/
-QMatrix4x4::QMatrix4x4(const float *values, int cols, int rows)
+QMatrix4x4::QMatrix4x4(const qreal *values, int cols, int rows)
{
for (int col = 0; col < 4; ++col) {
for (int row = 0; row < 4; ++row) {
@@ -233,15 +233,16 @@ QMatrix4x4::QMatrix4x4(const QTransform& transform)
}
/*!
- \fn qreal QMatrix4x4::operator()(int row, int column) const
+ \fn const qreal& QMatrix4x4::operator()(int row, int column) const
- Returns the element at position (\a row, \a column) in this matrix.
+ Returns a constant reference to the element at position
+ (\a row, \a column) in this matrix.
\sa column(), row()
*/
/*!
- \fn float& QMatrix4x4::operator()(int row, int column)
+ \fn qreal& QMatrix4x4::operator()(int row, int column)
Returns a reference to the element at position (\a row, \a column)
in this matrix so that the element can be assigned to.
@@ -312,8 +313,8 @@ QMatrix4x4::QMatrix4x4(const QTransform& transform)
// | A B C |
// M = | D E F | det(M) = A * (EI - HF) - B * (DI - GF) + C * (DH - GE)
// | G H I |
-static inline float matrixDet3
- (const float m[4][4], int col0, int col1, int col2,
+static inline qreal matrixDet3
+ (const qreal m[4][4], int col0, int col1, int col2,
int row0, int row1, int row2)
{
return m[col0][row0] *
@@ -328,9 +329,9 @@ static inline float matrixDet3
}
// Calculate the determinant of a 4x4 matrix.
-static inline float matrixDet4(const float m[4][4])
+static inline qreal matrixDet4(const qreal m[4][4])
{
- float det;
+ qreal det;
det = m[0][0] * matrixDet3(m, 1, 2, 3, 1, 2, 3);
det -= m[1][0] * matrixDet3(m, 0, 2, 3, 1, 2, 3);
det += m[2][0] * matrixDet3(m, 0, 1, 3, 1, 2, 3);
@@ -382,7 +383,7 @@ QMatrix4x4 QMatrix4x4::inverted(bool *invertible) const
QMatrix4x4 inv(1); // The "1" says to not load the identity.
- float det = matrixDet4(m);
+ qreal det = matrixDet4(m);
if (det == 0.0f) {
if (invertible)
*invertible = false;
@@ -436,12 +437,12 @@ QMatrix3x3 QMatrix4x4::normalMatrix() const
return inv;
}
- float det = matrixDet3(m, 0, 1, 2, 0, 1, 2);
+ qreal det = matrixDet3(m, 0, 1, 2, 0, 1, 2);
if (det == 0.0f)
return inv;
det = 1.0f / det;
- float *invm = inv.data();
+ qreal *invm = inv.data();
// Invert and transpose in a single step.
invm[0 + 0 * 3] = (m[1][1] * m[2][2] - m[2][1] * m[1][2]) * det;
@@ -697,9 +698,9 @@ QMatrix4x4 operator/(const QMatrix4x4& matrix, qreal divisor)
*/
QMatrix4x4& QMatrix4x4::scale(const QVector3D& vector)
{
- float vx = vector.xp;
- float vy = vector.yp;
- float vz = vector.zp;
+ qreal vx = vector.x();
+ qreal vy = vector.y();
+ qreal vz = vector.z();
if (flagBits == Identity) {
m[0][0] = vx;
m[1][1] = vy;
@@ -743,28 +744,26 @@ QMatrix4x4& QMatrix4x4::scale(const QVector3D& vector)
*/
QMatrix4x4& QMatrix4x4::scale(qreal x, qreal y)
{
- float vx(x);
- float vy(y);
if (flagBits == Identity) {
- m[0][0] = vx;
- m[1][1] = vy;
+ m[0][0] = x;
+ m[1][1] = y;
flagBits = Scale;
} else if (flagBits == Scale || flagBits == (Scale | Translation)) {
- m[0][0] *= vx;
- m[1][1] *= vy;
+ m[0][0] *= x;
+ m[1][1] *= y;
} else if (flagBits == Translation) {
- m[0][0] = vx;
- m[1][1] = vy;
+ m[0][0] = x;
+ m[1][1] = y;
flagBits |= Scale;
} else {
- m[0][0] *= vx;
- m[0][1] *= vx;
- m[0][2] *= vx;
- m[0][3] *= vx;
- m[1][0] *= vy;
- m[1][1] *= vy;
- m[1][2] *= vy;
- m[1][3] *= vy;
+ m[0][0] *= x;
+ m[0][1] *= x;
+ m[0][2] *= x;
+ m[0][3] *= x;
+ m[1][0] *= y;
+ m[1][1] *= y;
+ m[1][2] *= y;
+ m[1][3] *= y;
flagBits = General;
}
return *this;
@@ -780,36 +779,33 @@ QMatrix4x4& QMatrix4x4::scale(qreal x, qreal y)
*/
QMatrix4x4& QMatrix4x4::scale(qreal x, qreal y, qreal z)
{
- float vx(x);
- float vy(y);
- float vz(z);
if (flagBits == Identity) {
- m[0][0] = vx;
- m[1][1] = vy;
- m[2][2] = vz;
+ m[0][0] = x;
+ m[1][1] = y;
+ m[2][2] = z;
flagBits = Scale;
} else if (flagBits == Scale || flagBits == (Scale | Translation)) {
- m[0][0] *= vx;
- m[1][1] *= vy;
- m[2][2] *= vz;
+ m[0][0] *= x;
+ m[1][1] *= y;
+ m[2][2] *= z;
} else if (flagBits == Translation) {
- m[0][0] = vx;
- m[1][1] = vy;
- m[2][2] = vz;
+ m[0][0] = x;
+ m[1][1] = y;
+ m[2][2] = z;
flagBits |= Scale;
} else {
- m[0][0] *= vx;
- m[0][1] *= vx;
- m[0][2] *= vx;
- m[0][3] *= vx;
- m[1][0] *= vy;
- m[1][1] *= vy;
- m[1][2] *= vy;
- m[1][3] *= vy;
- m[2][0] *= vz;
- m[2][1] *= vz;
- m[2][2] *= vz;
- m[2][3] *= vz;
+ m[0][0] *= x;
+ m[0][1] *= x;
+ m[0][2] *= x;
+ m[0][3] *= x;
+ m[1][0] *= y;
+ m[1][1] *= y;
+ m[1][2] *= y;
+ m[1][3] *= y;
+ m[2][0] *= z;
+ m[2][1] *= z;
+ m[2][2] *= z;
+ m[2][3] *= z;
flagBits = General;
}
return *this;
@@ -866,9 +862,9 @@ QMatrix4x4& QMatrix4x4::scale(qreal factor)
*/
QMatrix4x4& QMatrix4x4::translate(const QVector3D& vector)
{
- float vx = vector.xp;
- float vy = vector.yp;
- float vz = vector.zp;
+ qreal vx = vector.x();
+ qreal vy = vector.y();
+ qreal vz = vector.z();
if (flagBits == Identity) {
m[3][0] = vx;
m[3][1] = vy;
@@ -912,28 +908,26 @@ QMatrix4x4& QMatrix4x4::translate(const QVector3D& vector)
*/
QMatrix4x4& QMatrix4x4::translate(qreal x, qreal y)
{
- float vx(x);
- float vy(y);
if (flagBits == Identity) {
- m[3][0] = vx;
- m[3][1] = vy;
+ m[3][0] = x;
+ m[3][1] = y;
flagBits = Translation;
} else if (flagBits == Translation) {
- m[3][0] += vx;
- m[3][1] += vy;
+ m[3][0] += x;
+ m[3][1] += y;
} else if (flagBits == Scale) {
- m[3][0] = m[0][0] * vx;
- m[3][1] = m[1][1] * vy;
+ m[3][0] = m[0][0] * x;
+ m[3][1] = m[1][1] * y;
m[3][2] = 0.;
flagBits |= Translation;
} else if (flagBits == (Scale | Translation)) {
- m[3][0] += m[0][0] * vx;
- m[3][1] += m[1][1] * vy;
+ m[3][0] += m[0][0] * x;
+ m[3][1] += m[1][1] * y;
} else {
- m[3][0] += m[0][0] * vx + m[1][0] * vy;
- m[3][1] += m[0][1] * vx + m[1][1] * vy;
- m[3][2] += m[0][2] * vx + m[1][2] * vy;
- m[3][3] += m[0][3] * vx + m[1][3] * vy;
+ m[3][0] += m[0][0] * x + m[1][0] * y;
+ m[3][1] += m[0][1] * x + m[1][1] * y;
+ m[3][2] += m[0][2] * x + m[1][2] * y;
+ m[3][3] += m[0][3] * x + m[1][3] * y;
if (flagBits == Rotation)
flagBits |= Translation;
else if (flagBits != (Rotation | Translation))
@@ -952,32 +946,29 @@ QMatrix4x4& QMatrix4x4::translate(qreal x, qreal y)
*/
QMatrix4x4& QMatrix4x4::translate(qreal x, qreal y, qreal z)
{
- float vx(x);
- float vy(y);
- float vz(z);
if (flagBits == Identity) {
- m[3][0] = vx;
- m[3][1] = vy;
- m[3][2] = vz;
+ m[3][0] = x;
+ m[3][1] = y;
+ m[3][2] = z;
flagBits = Translation;
} else if (flagBits == Translation) {
- m[3][0] += vx;
- m[3][1] += vy;
- m[3][2] += vz;
+ m[3][0] += x;
+ m[3][1] += y;
+ m[3][2] += z;
} else if (flagBits == Scale) {
- m[3][0] = m[0][0] * vx;
- m[3][1] = m[1][1] * vy;
- m[3][2] = m[2][2] * vz;
+ m[3][0] = m[0][0] * x;
+ m[3][1] = m[1][1] * y;
+ m[3][2] = m[2][2] * z;
flagBits |= Translation;
} else if (flagBits == (Scale | Translation)) {
- m[3][0] += m[0][0] * vx;
- m[3][1] += m[1][1] * vy;
- m[3][2] += m[2][2] * vz;
+ m[3][0] += m[0][0] * x;
+ m[3][1] += m[1][1] * y;
+ m[3][2] += m[2][2] * z;
} else {
- m[3][0] += m[0][0] * vx + m[1][0] * vy + m[2][0] * vz;
- m[3][1] += m[0][1] * vx + m[1][1] * vy + m[2][1] * vz;
- m[3][2] += m[0][2] * vx + m[1][2] * vy + m[2][2] * vz;
- m[3][3] += m[0][3] * vx + m[1][3] * vy + m[2][3] * vz;
+ m[3][0] += m[0][0] * x + m[1][0] * y + m[2][0] * z;
+ m[3][1] += m[0][1] * x + m[1][1] * y + m[2][1] * z;
+ m[3][2] += m[0][2] * x + m[1][2] * y + m[2][2] * z;
+ m[3][3] += m[0][3] * x + m[1][3] * y + m[2][3] * z;
if (flagBits == Rotation)
flagBits |= Translation;
else if (flagBits != (Rotation | Translation))
@@ -1126,15 +1117,15 @@ QMatrix4x4& QMatrix4x4::rotate(const QQuaternion& quaternion)
// Algorithm from:
// http://www.j3d.org/matrix_faq/matrfaq_latest.html#Q54
QMatrix4x4 m(1);
- float xx = quaternion.xp * quaternion.xp;
- float xy = quaternion.xp * quaternion.yp;
- float xz = quaternion.xp * quaternion.zp;
- float xw = quaternion.xp * quaternion.wp;
- float yy = quaternion.yp * quaternion.yp;
- float yz = quaternion.yp * quaternion.zp;
- float yw = quaternion.yp * quaternion.wp;
- float zz = quaternion.zp * quaternion.zp;
- float zw = quaternion.zp * quaternion.wp;
+ qreal xx = quaternion.x() * quaternion.x();
+ qreal xy = quaternion.x() * quaternion.y();
+ qreal xz = quaternion.x() * quaternion.z();
+ qreal xw = quaternion.x() * quaternion.scalar();
+ qreal yy = quaternion.y() * quaternion.y();
+ qreal yz = quaternion.y() * quaternion.z();
+ qreal yw = quaternion.y() * quaternion.scalar();
+ qreal zz = quaternion.z() * quaternion.z();
+ qreal zw = quaternion.z() * quaternion.scalar();
m.m[0][0] = 1.0f - 2 * (yy + zz);
m.m[1][0] = 2 * (xy - zw);
m.m[2][0] = 2 * (xz + yw);
@@ -1222,11 +1213,11 @@ QMatrix4x4& QMatrix4x4::ortho(qreal left, qreal right, qreal bottom, qreal top,
translate(QVector3D
(-(left + right) / width,
-(top + bottom) / invheight,
- 0.0f, 1));
+ 0.0f));
scale(QVector3D
(2.0f / width,
2.0f / invheight,
- -1.0f, 1));
+ -1.0f));
return *this;
}
#endif
@@ -1356,17 +1347,17 @@ QMatrix4x4& QMatrix4x4::lookAt(const QVector3D& eye, const QVector3D& center, co
QMatrix4x4 m(1);
- m.m[0][0] = side.xp;
- m.m[1][0] = side.yp;
- m.m[2][0] = side.zp;
+ m.m[0][0] = side.x();
+ m.m[1][0] = side.y();
+ m.m[2][0] = side.z();
m.m[3][0] = 0.0f;
- m.m[0][1] = upVector.xp;
- m.m[1][1] = upVector.yp;
- m.m[2][1] = upVector.zp;
+ m.m[0][1] = upVector.x();
+ m.m[1][1] = upVector.y();
+ m.m[2][1] = upVector.z();
m.m[3][1] = 0.0f;
- m.m[0][2] = -forward.xp;
- m.m[1][2] = -forward.yp;
- m.m[2][2] = -forward.zp;
+ m.m[0][2] = -forward.x();
+ m.m[1][2] = -forward.y();
+ m.m[2][2] = -forward.z();
m.m[3][2] = 0.0f;
m.m[0][3] = 0.0f;
m.m[1][3] = 0.0f;
@@ -1434,9 +1425,9 @@ void QMatrix4x4::toValueArray(qreal *values) const
*/
QMatrix QMatrix4x4::toAffine() const
{
- return QMatrix(qreal(m[0][0]), qreal(m[0][1]),
- qreal(m[1][0]), qreal(m[1][1]),
- qreal(m[3][0]), qreal(m[3][1]));
+ return QMatrix(m[0][0], m[0][1],
+ m[1][0], m[1][1],
+ m[3][0], m[3][1]);
}
static const qreal inv_dist_to_plane = 1. / 1024.;
@@ -1462,15 +1453,12 @@ QTransform QMatrix4x4::toTransform(qreal distanceToPlane) const
{
if (distanceToPlane == 1024.0f) {
// Optimize the common case with constants.
- return QTransform(qreal(m[0][0]), qreal(m[0][1]),
- qreal(m[0][3]) - qreal(m[0][2]) *
- inv_dist_to_plane,
- qreal(m[1][0]), qreal(m[1][1]),
- qreal(m[1][3]) - qreal(m[1][2]) *
- inv_dist_to_plane,
- qreal(m[3][0]), qreal(m[3][1]),
- qreal(m[3][3]) - qreal(m[3][2]) *
- inv_dist_to_plane);
+ return QTransform(m[0][0], m[0][1],
+ m[0][3] - m[0][2] * inv_dist_to_plane,
+ m[1][0], m[1][1],
+ m[1][3] - m[1][2] * inv_dist_to_plane,
+ m[3][0], m[3][1],
+ m[3][3] - m[3][2] * inv_dist_to_plane);
} else if (distanceToPlane != 0.0f) {
// The following projection matrix is pre-multiplied with "matrix":
// | 1 0 0 0 |
@@ -1480,17 +1468,14 @@ QTransform QMatrix4x4::toTransform(qreal distanceToPlane) const
// where d = -1 / distanceToPlane. After projection, row 3 and
// column 3 are dropped to form the final QTransform.
qreal d = 1.0f / distanceToPlane;
- return QTransform(qreal(m[0][0]), qreal(m[0][1]),
- qreal(m[0][3]) - qreal(m[0][2]) * d,
- qreal(m[1][0]), qreal(m[1][1]),
- qreal(m[1][3]) - qreal(m[1][2]) * d,
- qreal(m[3][0]), qreal(m[3][1]),
- qreal(m[3][3]) - qreal(m[3][2]) * d);
+ return QTransform(m[0][0], m[0][1], m[0][3] - m[0][2] * d,
+ m[1][0], m[1][1], m[1][3] - m[1][2] * d,
+ m[3][0], m[3][1], m[3][3] - m[3][2] * d);
} else {
// Orthographic projection: drop row 3 and column 3.
- return QTransform(qreal(m[0][0]), qreal(m[0][1]), qreal(m[0][3]),
- qreal(m[1][0]), qreal(m[1][1]), qreal(m[1][3]),
- qreal(m[3][0]), qreal(m[3][1]), qreal(m[3][3]));
+ return QTransform(m[0][0], m[0][1], m[0][3],
+ m[1][0], m[1][1], m[1][3],
+ m[3][0], m[3][1], m[3][3]);
}
}
@@ -1618,28 +1603,25 @@ QRectF QMatrix4x4::mapRect(const QRectF& rect) const
}
/*!
- \fn float *QMatrix4x4::data()
+ \fn qreal *QMatrix4x4::data()
- Returns a pointer to the raw data of this matrix. This is intended
- for use with raw GL functions.
+ Returns a pointer to the raw data of this matrix.
\sa constData(), inferSpecialType()
*/
/*!
- \fn const float *QMatrix4x4::data() const
+ \fn const qreal *QMatrix4x4::data() const
Returns a constant pointer to the raw data of this matrix.
- This is intended for use with raw GL functions.
\sa constData()
*/
/*!
- \fn const float *QMatrix4x4::constData() const
+ \fn const qreal *QMatrix4x4::constData() const
Returns a constant pointer to the raw data of this matrix.
- This is intended for use with raw GL functions.
\sa data()
*/
@@ -1695,7 +1677,7 @@ void QMatrix4x4::extractAxisRotation(qreal &angle, QVector3D &axis) const
{
// Orientation is dependent on the upper 3x3 matrix; subtract the
// homogeneous scaling element from the trace of the 4x4 matrix
- float tr = m[0][0] + m[1][1] + m[2][2];
+ qreal tr = m[0][0] + m[1][1] + m[2][2];
qreal cosa = qreal(0.5f * (tr - 1.0f));
angle = acos(cosa) * 180.0f / M_PI;
@@ -1708,38 +1690,38 @@ void QMatrix4x4::extractAxisRotation(qreal &angle, QVector3D &axis) const
}
if (angle < 180.0f) {
- axis.xp = m[1][2] - m[2][1];
- axis.yp = m[2][0] - m[0][2];
- axis.zp = m[0][1] - m[1][0];
+ axis.setX(m[1][2] - m[2][1]);
+ axis.setY(m[2][0] - m[0][2]);
+ axis.setZ(m[0][1] - m[1][0]);
axis.normalize();
return;
}
// rads == PI
- float tmp;
+ qreal tmp;
// r00 is maximum
if ((m[0][0] >= m[2][2]) && (m[0][0] >= m[1][1])) {
- axis.xp = 0.5f * qSqrt(m[0][0] - m[1][1] - m[2][2] + 1.0f);
+ axis.setX(0.5f * qSqrt(m[0][0] - m[1][1] - m[2][2] + 1.0f));
tmp = 0.5f / axis.x();
- axis.yp = m[1][0] * tmp;
- axis.zp = m[2][0] * tmp;
+ axis.setY(m[1][0] * tmp);
+ axis.setZ(m[2][0] * tmp);
}
// r11 is maximum
if ((m[1][1] >= m[2][2]) && (m[1][1] >= m[0][0])) {
- axis.yp = 0.5f * qSqrt(m[1][1] - m[0][0] - m[2][2] + 1.0f);
+ axis.setY(0.5f * qSqrt(m[1][1] - m[0][0] - m[2][2] + 1.0f));
tmp = 0.5f / axis.y();
- axis.xp = tmp * m[1][0];
- axis.zp = tmp * m[2][1];
+ axis.setX(tmp * m[1][0]);
+ axis.setZ(tmp * m[2][1]);
}
// r22 is maximum
if ((m[2][2] >= m[1][1]) && (m[2][2] >= m[0][0])) {
- axis.zp = 0.5f * qSqrt(m[2][2] - m[0][0] - m[1][1] + 1.0f);
+ axis.setZ(0.5f * qSqrt(m[2][2] - m[0][0] - m[1][1] + 1.0f));
tmp = 0.5f / axis.z();
- axis.xp = m[2][0]*tmp;
- axis.yp = m[2][1]*tmp;
+ axis.setX(m[2][0]*tmp);
+ axis.setY(m[2][1]*tmp);
}
}
@@ -1756,7 +1738,7 @@ QVector3D QMatrix4x4::extractTranslation() const
return QVector3D
(m[0][0] * m[3][0] + m[0][1] * m[3][1] + m[0][2] * m[3][2],
m[1][0] * m[3][0] + m[1][1] * m[3][1] + m[1][2] * m[3][2],
- m[2][0] * m[3][0] + m[2][1] * m[3][1] + m[2][2] * m[3][2], 1);
+ m[2][0] * m[3][0] + m[2][1] * m[3][1] + m[2][2] * m[3][2]);
}
#endif
@@ -1894,7 +1876,7 @@ QDataStream &operator>>(QDataStream &stream, QMatrix4x4 &matrix)
for (int row = 0; row < 4; ++row) {
for (int col = 0; col < 4; ++col) {
stream >> x;
- matrix(row, col) = float(x);
+ matrix(row, col) = qreal(x);
}
}
matrix.inferSpecialType();
diff --git a/src/gui/math3d/qmatrix4x4.h b/src/gui/math3d/qmatrix4x4.h
index 4207bdf..8811027 100644
--- a/src/gui/math3d/qmatrix4x4.h
+++ b/src/gui/math3d/qmatrix4x4.h
@@ -71,14 +71,14 @@ public:
qreal m41, qreal m42, qreal m43, qreal m44);
#if !defined(QT_NO_MEMBER_TEMPLATES) || defined(Q_QDOC)
template <int N, int M>
- explicit QMatrix4x4(const QGenericMatrix<N, M, qreal, float>& matrix);
+ explicit QMatrix4x4(const QGenericMatrix<N, M, qreal>& matrix);
#endif
- QMatrix4x4(const float *values, int cols, int rows);
+ QMatrix4x4(const qreal *values, int cols, int rows);
QMatrix4x4(const QTransform& transform);
QMatrix4x4(const QMatrix& matrix);
- inline qreal operator()(int row, int column) const;
- inline float& operator()(int row, int column);
+ inline const qreal& operator()(int row, int column) const;
+ inline qreal& operator()(int row, int column);
inline QVector4D column(int index) const;
inline void setColumn(int index, const QVector4D& value);
@@ -174,12 +174,12 @@ public:
#if !defined(QT_NO_MEMBER_TEMPLATES) || defined(Q_QDOC)
template <int N, int M>
- QGenericMatrix<N, M, qreal, float> toGenericMatrix() const;
+ QGenericMatrix<N, M, qreal> toGenericMatrix() const;
#endif
- inline float *data();
- inline const float *data() const { return m[0]; }
- inline const float *constData() const { return m[0]; }
+ inline qreal *data();
+ inline const qreal *data() const { return m[0]; }
+ inline const qreal *constData() const { return m[0]; }
void inferSpecialType();
@@ -190,7 +190,7 @@ public:
#endif
private:
- float m[4][4]; // Column-major order to match OpenGL.
+ qreal m[4][4]; // Column-major order to match OpenGL.
int flagBits; // Flag bits from the enum below.
enum {
@@ -224,9 +224,9 @@ inline QMatrix4x4::QMatrix4x4
template <int N, int M>
Q_INLINE_TEMPLATE QMatrix4x4::QMatrix4x4
- (const QGenericMatrix<N, M, qreal, float>& matrix)
+ (const QGenericMatrix<N, M, qreal>& matrix)
{
- const float *values = matrix.constData();
+ const qreal *values = matrix.constData();
for (int col = 0; col < 4; ++col) {
for (int row = 0; row < 4; ++row) {
if (col < N && row < M)
@@ -241,10 +241,10 @@ Q_INLINE_TEMPLATE QMatrix4x4::QMatrix4x4
}
template <int N, int M>
-QGenericMatrix<N, M, qreal, float> QMatrix4x4::toGenericMatrix() const
+QGenericMatrix<N, M, qreal> QMatrix4x4::toGenericMatrix() const
{
- QGenericMatrix<N, M, qreal, float> result;
- float *values = result.data();
+ QGenericMatrix<N, M, qreal> result;
+ qreal *values = result.data();
for (int col = 0; col < N; ++col) {
for (int row = 0; row < M; ++row) {
if (col < 4 && row < 4)
@@ -260,13 +260,13 @@ QGenericMatrix<N, M, qreal, float> QMatrix4x4::toGenericMatrix() const
#endif
-inline qreal QMatrix4x4::operator()(int row, int column) const
+inline const qreal& QMatrix4x4::operator()(int row, int column) const
{
Q_ASSERT(row >= 0 && row < 4 && column >= 0 && column < 4);
- return qreal(m[column][row]);
+ return m[column][row];
}
-inline float& QMatrix4x4::operator()(int row, int column)
+inline qreal& QMatrix4x4::operator()(int row, int column)
{
Q_ASSERT(row >= 0 && row < 4 && column >= 0 && column < 4);
flagBits = General;
@@ -276,32 +276,32 @@ inline float& QMatrix4x4::operator()(int row, int column)
inline QVector4D QMatrix4x4::column(int index) const
{
Q_ASSERT(index >= 0 && index < 4);
- return QVector4D(m[index][0], m[index][1], m[index][2], m[index][3], 1);
+ return QVector4D(m[index][0], m[index][1], m[index][2], m[index][3]);
}
inline void QMatrix4x4::setColumn(int index, const QVector4D& value)
{
Q_ASSERT(index >= 0 && index < 4);
- m[index][0] = value.xp;
- m[index][1] = value.yp;
- m[index][2] = value.zp;
- m[index][3] = value.wp;
+ m[index][0] = value.x();
+ m[index][1] = value.y();
+ m[index][2] = value.z();
+ m[index][3] = value.w();
flagBits = General;
}
inline QVector4D QMatrix4x4::row(int index) const
{
Q_ASSERT(index >= 0 && index < 4);
- return QVector4D(m[0][index], m[1][index], m[2][index], m[3][index], 1);
+ return QVector4D(m[0][index], m[1][index], m[2][index], m[3][index]);
}
inline void QMatrix4x4::setRow(int index, const QVector4D& value)
{
Q_ASSERT(index >= 0 && index < 4);
- m[0][index] = value.xp;
- m[1][index] = value.yp;
- m[2][index] = value.zp;
- m[3][index] = value.wp;
+ m[0][index] = value.x();
+ m[1][index] = value.y();
+ m[2][index] = value.z();
+ m[3][index] = value.w();
flagBits = General;
}
@@ -608,68 +608,68 @@ inline QMatrix4x4 operator*(const QMatrix4x4& m1, const QMatrix4x4& m2)
inline QVector3D operator*(const QVector3D& vector, const QMatrix4x4& matrix)
{
- float x, y, z, w;
- x = vector.xp * matrix.m[0][0] +
- vector.yp * matrix.m[0][1] +
- vector.zp * matrix.m[0][2] +
+ qreal x, y, z, w;
+ x = vector.x() * matrix.m[0][0] +
+ vector.y() * matrix.m[0][1] +
+ vector.z() * matrix.m[0][2] +
matrix.m[0][3];
- y = vector.xp * matrix.m[1][0] +
- vector.yp * matrix.m[1][1] +
- vector.zp * matrix.m[1][2] +
+ y = vector.x() * matrix.m[1][0] +
+ vector.y() * matrix.m[1][1] +
+ vector.z() * matrix.m[1][2] +
matrix.m[1][3];
- z = vector.xp * matrix.m[2][0] +
- vector.yp * matrix.m[2][1] +
- vector.zp * matrix.m[2][2] +
+ z = vector.x() * matrix.m[2][0] +
+ vector.y() * matrix.m[2][1] +
+ vector.z() * matrix.m[2][2] +
matrix.m[2][3];
- w = vector.xp * matrix.m[3][0] +
- vector.yp * matrix.m[3][1] +
- vector.zp * matrix.m[3][2] +
+ w = vector.x() * matrix.m[3][0] +
+ vector.y() * matrix.m[3][1] +
+ vector.z() * matrix.m[3][2] +
matrix.m[3][3];
if (w == 1.0f)
- return QVector3D(x, y, z, 1);
+ return QVector3D(x, y, z);
else
- return QVector3D(x / w, y / w, z / w, 1);
+ return QVector3D(x / w, y / w, z / w);
}
inline QVector3D operator*(const QMatrix4x4& matrix, const QVector3D& vector)
{
- float x, y, z, w;
+ qreal x, y, z, w;
if (matrix.flagBits == QMatrix4x4::Identity) {
return vector;
} else if (matrix.flagBits == QMatrix4x4::Translation) {
- return QVector3D(vector.xp + matrix.m[3][0],
- vector.yp + matrix.m[3][1],
- vector.zp + matrix.m[3][2], 1);
+ return QVector3D(vector.x() + matrix.m[3][0],
+ vector.y() + matrix.m[3][1],
+ vector.z() + matrix.m[3][2]);
} else if (matrix.flagBits ==
(QMatrix4x4::Translation | QMatrix4x4::Scale)) {
- return QVector3D(vector.xp * matrix.m[0][0] + matrix.m[3][0],
- vector.yp * matrix.m[1][1] + matrix.m[3][1],
- vector.zp * matrix.m[2][2] + matrix.m[3][2], 1);
+ return QVector3D(vector.x() * matrix.m[0][0] + matrix.m[3][0],
+ vector.y() * matrix.m[1][1] + matrix.m[3][1],
+ vector.z() * matrix.m[2][2] + matrix.m[3][2]);
} else if (matrix.flagBits == QMatrix4x4::Scale) {
- return QVector3D(vector.xp * matrix.m[0][0],
- vector.yp * matrix.m[1][1],
- vector.zp * matrix.m[2][2], 1);
+ return QVector3D(vector.x() * matrix.m[0][0],
+ vector.y() * matrix.m[1][1],
+ vector.z() * matrix.m[2][2]);
} else {
- x = vector.xp * matrix.m[0][0] +
- vector.yp * matrix.m[1][0] +
- vector.zp * matrix.m[2][0] +
+ x = vector.x() * matrix.m[0][0] +
+ vector.y() * matrix.m[1][0] +
+ vector.z() * matrix.m[2][0] +
matrix.m[3][0];
- y = vector.xp * matrix.m[0][1] +
- vector.yp * matrix.m[1][1] +
- vector.zp * matrix.m[2][1] +
+ y = vector.x() * matrix.m[0][1] +
+ vector.y() * matrix.m[1][1] +
+ vector.z() * matrix.m[2][1] +
matrix.m[3][1];
- z = vector.xp * matrix.m[0][2] +
- vector.yp * matrix.m[1][2] +
- vector.zp * matrix.m[2][2] +
+ z = vector.x() * matrix.m[0][2] +
+ vector.y() * matrix.m[1][2] +
+ vector.z() * matrix.m[2][2] +
matrix.m[3][2];
- w = vector.xp * matrix.m[0][3] +
- vector.yp * matrix.m[1][3] +
- vector.zp * matrix.m[2][3] +
+ w = vector.x() * matrix.m[0][3] +
+ vector.y() * matrix.m[1][3] +
+ vector.z() * matrix.m[2][3] +
matrix.m[3][3];
if (w == 1.0f)
- return QVector3D(x, y, z, 1);
+ return QVector3D(x, y, z);
else
- return QVector3D(x / w, y / w, z / w, 1);
+ return QVector3D(x / w, y / w, z / w);
}
}
@@ -679,54 +679,54 @@ inline QVector3D operator*(const QMatrix4x4& matrix, const QVector3D& vector)
inline QVector4D operator*(const QVector4D& vector, const QMatrix4x4& matrix)
{
- float x, y, z, w;
- x = vector.xp * matrix.m[0][0] +
- vector.yp * matrix.m[0][1] +
- vector.zp * matrix.m[0][2] +
- vector.wp * matrix.m[0][3];
- y = vector.xp * matrix.m[1][0] +
- vector.yp * matrix.m[1][1] +
- vector.zp * matrix.m[1][2] +
- vector.wp * matrix.m[1][3];
- z = vector.xp * matrix.m[2][0] +
- vector.yp * matrix.m[2][1] +
- vector.zp * matrix.m[2][2] +
- vector.wp * matrix.m[2][3];
- w = vector.xp * matrix.m[3][0] +
- vector.yp * matrix.m[3][1] +
- vector.zp * matrix.m[3][2] +
- vector.wp * matrix.m[3][3];
- return QVector4D(x, y, z, w, 1);
+ qreal x, y, z, w;
+ x = vector.x() * matrix.m[0][0] +
+ vector.y() * matrix.m[0][1] +
+ vector.z() * matrix.m[0][2] +
+ vector.w() * matrix.m[0][3];
+ y = vector.x() * matrix.m[1][0] +
+ vector.y() * matrix.m[1][1] +
+ vector.z() * matrix.m[1][2] +
+ vector.w() * matrix.m[1][3];
+ z = vector.x() * matrix.m[2][0] +
+ vector.y() * matrix.m[2][1] +
+ vector.z() * matrix.m[2][2] +
+ vector.w() * matrix.m[2][3];
+ w = vector.x() * matrix.m[3][0] +
+ vector.y() * matrix.m[3][1] +
+ vector.z() * matrix.m[3][2] +
+ vector.w() * matrix.m[3][3];
+ return QVector4D(x, y, z, w);
}
inline QVector4D operator*(const QMatrix4x4& matrix, const QVector4D& vector)
{
- float x, y, z, w;
- x = vector.xp * matrix.m[0][0] +
- vector.yp * matrix.m[1][0] +
- vector.zp * matrix.m[2][0] +
- vector.wp * matrix.m[3][0];
- y = vector.xp * matrix.m[0][1] +
- vector.yp * matrix.m[1][1] +
- vector.zp * matrix.m[2][1] +
- vector.wp * matrix.m[3][1];
- z = vector.xp * matrix.m[0][2] +
- vector.yp * matrix.m[1][2] +
- vector.zp * matrix.m[2][2] +
- vector.wp * matrix.m[3][2];
- w = vector.xp * matrix.m[0][3] +
- vector.yp * matrix.m[1][3] +
- vector.zp * matrix.m[2][3] +
- vector.wp * matrix.m[3][3];
- return QVector4D(x, y, z, w, 1);
+ qreal x, y, z, w;
+ x = vector.x() * matrix.m[0][0] +
+ vector.y() * matrix.m[1][0] +
+ vector.z() * matrix.m[2][0] +
+ vector.w() * matrix.m[3][0];
+ y = vector.x() * matrix.m[0][1] +
+ vector.y() * matrix.m[1][1] +
+ vector.z() * matrix.m[2][1] +
+ vector.w() * matrix.m[3][1];
+ z = vector.x() * matrix.m[0][2] +
+ vector.y() * matrix.m[1][2] +
+ vector.z() * matrix.m[2][2] +
+ vector.w() * matrix.m[3][2];
+ w = vector.x() * matrix.m[0][3] +
+ vector.y() * matrix.m[1][3] +
+ vector.z() * matrix.m[2][3] +
+ vector.w() * matrix.m[3][3];
+ return QVector4D(x, y, z, w);
}
#endif
inline QPoint operator*(const QPoint& point, const QMatrix4x4& matrix)
{
- float xin, yin;
- float x, y, w;
+ qreal xin, yin;
+ qreal x, y, w;
xin = point.x();
yin = point.y();
x = xin * matrix.m[0][0] +
@@ -746,8 +746,8 @@ inline QPoint operator*(const QPoint& point, const QMatrix4x4& matrix)
inline QPointF operator*(const QPointF& point, const QMatrix4x4& matrix)
{
- float xin, yin;
- float x, y, w;
+ qreal xin, yin;
+ qreal x, y, w;
xin = point.x();
yin = point.y();
x = xin * matrix.m[0][0] +
@@ -768,8 +768,8 @@ inline QPointF operator*(const QPointF& point, const QMatrix4x4& matrix)
inline QPoint operator*(const QMatrix4x4& matrix, const QPoint& point)
{
- float xin, yin;
- float x, y, w;
+ qreal xin, yin;
+ qreal x, y, w;
xin = point.x();
yin = point.y();
if (matrix.flagBits == QMatrix4x4::Identity) {
@@ -803,8 +803,8 @@ inline QPoint operator*(const QMatrix4x4& matrix, const QPoint& point)
inline QPointF operator*(const QMatrix4x4& matrix, const QPointF& point)
{
- float xin, yin;
- float x, y, w;
+ qreal xin, yin;
+ qreal x, y, w;
xin = point.x();
yin = point.y();
if (matrix.flagBits == QMatrix4x4::Identity) {
@@ -951,7 +951,7 @@ inline QVector4D QMatrix4x4::map(const QVector4D& point) const
#endif
-inline float *QMatrix4x4::data()
+inline qreal *QMatrix4x4::data()
{
// We have to assume that the caller will modify the matrix elements,
// so we flip it over to "General" mode.
@@ -969,17 +969,17 @@ Q_GUI_EXPORT QDataStream &operator>>(QDataStream &, QMatrix4x4 &);
#endif
template <int N, int M>
-QMatrix4x4 qGenericMatrixToMatrix4x4(const QGenericMatrix<N, M, qreal, float>& matrix)
+QMatrix4x4 qGenericMatrixToMatrix4x4(const QGenericMatrix<N, M, qreal>& matrix)
{
return QMatrix4x4(matrix.constData(), N, M);
}
template <int N, int M>
-QGenericMatrix<N, M, qreal, float> qGenericMatrixFromMatrix4x4(const QMatrix4x4& matrix)
+QGenericMatrix<N, M, qreal> qGenericMatrixFromMatrix4x4(const QMatrix4x4& matrix)
{
- QGenericMatrix<N, M, qreal, float> result;
- const float *m = matrix.constData();
- float *values = result.data();
+ QGenericMatrix<N, M, qreal> result;
+ const qreal *m = matrix.constData();
+ qreal *values = result.data();
for (int col = 0; col < N; ++col) {
for (int row = 0; row < M; ++row) {
if (col < 4 && row < 4)
diff --git a/src/gui/math3d/qquaternion.cpp b/src/gui/math3d/qquaternion.cpp
index ece4482..7206e9a 100644
--- a/src/gui/math3d/qquaternion.cpp
+++ b/src/gui/math3d/qquaternion.cpp
@@ -353,7 +353,7 @@ QQuaternion QQuaternion::fromAxisAndAngle(const QVector3D& axis, qreal angle)
qreal s = qSin(a);
qreal c = qCos(a);
QVector3D ax = axis.normalized();
- return QQuaternion(c, ax.xp * s, ax.yp * s, ax.zp * s, 1).normalized();
+ return QQuaternion(c, ax.x() * s, ax.y() * s, ax.z() * s).normalized();
}
#endif
@@ -365,19 +365,16 @@ QQuaternion QQuaternion::fromAxisAndAngle(const QVector3D& axis, qreal angle)
QQuaternion QQuaternion::fromAxisAndAngle
(qreal x, qreal y, qreal z, qreal angle)
{
- float xp = x;
- float yp = y;
- float zp = z;
- qreal length = qSqrt(xp * xp + yp * yp + zp * zp);
- if (!qIsNull(length)) {
- xp /= length;
- yp /= length;
- zp /= length;
+ qreal length = qSqrt(x * x + y * y + z * z);
+ if (!qFuzzyIsNull(length - 1.0f) && !qFuzzyIsNull(length)) {
+ x /= length;
+ y /= length;
+ z /= length;
}
qreal a = (angle / 2.0f) * M_PI / 180.0f;
qreal s = qSin(a);
qreal c = qCos(a);
- return QQuaternion(c, xp * s, yp * s, zp * s, 1).normalized();
+ return QQuaternion(c, x * s, y * s, z * s).normalized();
}
/*!
diff --git a/src/gui/math3d/qquaternion.h b/src/gui/math3d/qquaternion.h
index 12576d2..f243c42 100644
--- a/src/gui/math3d/qquaternion.h
+++ b/src/gui/math3d/qquaternion.h
@@ -133,11 +133,7 @@ public:
(const QQuaternion& q1, const QQuaternion& q2, qreal t);
private:
- float wp, xp, yp, zp;
-
- friend class QMatrix4x4;
-
- QQuaternion(float scalar, float xpos, float ypos, float zpos, int dummy);
+ qreal wp, xp, yp, zp;
};
inline QQuaternion::QQuaternion() : wp(1.0f), xp(0.0f), yp(0.0f), zp(0.0f) {}
@@ -145,8 +141,6 @@ inline QQuaternion::QQuaternion() : wp(1.0f), xp(0.0f), yp(0.0f), zp(0.0f) {}
inline QQuaternion::QQuaternion(qreal scalar, qreal xpos, qreal ypos, qreal zpos) : wp(scalar), xp(xpos), yp(ypos), zp(zpos) {}
-inline QQuaternion::QQuaternion(float scalar, float xpos, float ypos, float zpos, int) : wp(scalar), xp(xpos), yp(ypos), zp(zpos) {}
-
inline bool QQuaternion::isNull() const
{
return qIsNull(xp) && qIsNull(yp) && qIsNull(zp) && qIsNull(wp);
@@ -169,7 +163,7 @@ inline void QQuaternion::setScalar(qreal scalar) { wp = scalar; }
inline QQuaternion QQuaternion::conjugate() const
{
- return QQuaternion(wp, -xp, -yp, -zp, 1);
+ return QQuaternion(wp, -xp, -yp, -zp);
}
inline QQuaternion &QQuaternion::operator+=(const QQuaternion &quaternion)
@@ -201,18 +195,18 @@ inline QQuaternion &QQuaternion::operator*=(qreal factor)
inline const QQuaternion operator*(const QQuaternion &q1, const QQuaternion& q2)
{
- float ww = (q1.zp + q1.xp) * (q2.xp + q2.yp);
- float yy = (q1.wp - q1.yp) * (q2.wp + q2.zp);
- float zz = (q1.wp + q1.yp) * (q2.wp - q2.zp);
- float xx = ww + yy + zz;
- float qq = 0.5 * (xx + (q1.zp - q1.xp) * (q2.xp - q2.yp));
-
- float w = qq - ww + (q1.zp - q1.yp) * (q2.yp - q2.zp);
- float x = qq - xx + (q1.xp + q1.wp) * (q2.xp + q2.wp);
- float y = qq - yy + (q1.wp - q1.xp) * (q2.yp + q2.zp);
- float z = qq - zz + (q1.zp + q1.yp) * (q2.wp - q2.xp);
-
- return QQuaternion(w, x, y, z, 1);
+ qreal ww = (q1.zp + q1.xp) * (q2.xp + q2.yp);
+ qreal yy = (q1.wp - q1.yp) * (q2.wp + q2.zp);
+ qreal zz = (q1.wp + q1.yp) * (q2.wp - q2.zp);
+ qreal xx = ww + yy + zz;
+ qreal qq = 0.5 * (xx + (q1.zp - q1.xp) * (q2.xp - q2.yp));
+
+ qreal w = qq - ww + (q1.zp - q1.yp) * (q2.yp - q2.zp);
+ qreal x = qq - xx + (q1.xp + q1.wp) * (q2.xp + q2.wp);
+ qreal y = qq - yy + (q1.wp - q1.xp) * (q2.yp + q2.zp);
+ qreal z = qq - zz + (q1.zp + q1.yp) * (q2.wp - q2.xp);
+
+ return QQuaternion(w, x, y, z);
}
inline QQuaternion &QQuaternion::operator*=(const QQuaternion &quaternion)
@@ -242,32 +236,32 @@ inline bool operator!=(const QQuaternion &q1, const QQuaternion &q2)
inline const QQuaternion operator+(const QQuaternion &q1, const QQuaternion &q2)
{
- return QQuaternion(q1.wp + q2.wp, q1.xp + q2.xp, q1.yp + q2.yp, q1.zp + q2.zp, 1);
+ return QQuaternion(q1.wp + q2.wp, q1.xp + q2.xp, q1.yp + q2.yp, q1.zp + q2.zp);
}
inline const QQuaternion operator-(const QQuaternion &q1, const QQuaternion &q2)
{
- return QQuaternion(q1.wp - q2.wp, q1.xp - q2.xp, q1.yp - q2.yp, q1.zp - q2.zp, 1);
+ return QQuaternion(q1.wp - q2.wp, q1.xp - q2.xp, q1.yp - q2.yp, q1.zp - q2.zp);
}
inline const QQuaternion operator*(qreal factor, const QQuaternion &quaternion)
{
- return QQuaternion(quaternion.wp * factor, quaternion.xp * factor, quaternion.yp * factor, quaternion.zp * factor, 1);
+ return QQuaternion(quaternion.wp * factor, quaternion.xp * factor, quaternion.yp * factor, quaternion.zp * factor);
}
inline const QQuaternion operator*(const QQuaternion &quaternion, qreal factor)
{
- return QQuaternion(quaternion.wp * factor, quaternion.xp * factor, quaternion.yp * factor, quaternion.zp * factor, 1);
+ return QQuaternion(quaternion.wp * factor, quaternion.xp * factor, quaternion.yp * factor, quaternion.zp * factor);
}
inline const QQuaternion operator-(const QQuaternion &quaternion)
{
- return QQuaternion(-quaternion.wp, -quaternion.xp, -quaternion.yp, -quaternion.zp, 1);
+ return QQuaternion(-quaternion.wp, -quaternion.xp, -quaternion.yp, -quaternion.zp);
}
inline const QQuaternion operator/(const QQuaternion &quaternion, qreal divisor)
{
- return QQuaternion(quaternion.wp / divisor, quaternion.xp / divisor, quaternion.yp / divisor, quaternion.zp / divisor, 1);
+ return QQuaternion(quaternion.wp / divisor, quaternion.xp / divisor, quaternion.yp / divisor, quaternion.zp / divisor);
}
inline bool qFuzzyCompare(const QQuaternion& q1, const QQuaternion& q2)
@@ -281,18 +275,18 @@ inline bool qFuzzyCompare(const QQuaternion& q1, const QQuaternion& q2)
#ifndef QT_NO_VECTOR3D
inline QQuaternion::QQuaternion(qreal scalar, const QVector3D& vector)
- : wp(scalar), xp(vector.xp), yp(vector.yp), zp(vector.zp) {}
+ : wp(scalar), xp(vector.x()), yp(vector.y()), zp(vector.z()) {}
inline void QQuaternion::setVector(const QVector3D& vector)
{
- xp = vector.xp;
- yp = vector.yp;
- zp = vector.zp;
+ xp = vector.x();
+ yp = vector.y();
+ zp = vector.z();
}
inline QVector3D QQuaternion::vector() const
{
- return QVector3D(xp, yp, zp, 1);
+ return QVector3D(xp, yp, zp);
}
#endif
@@ -307,11 +301,11 @@ inline void QQuaternion::setVector(qreal x, qreal y, qreal z)
#ifndef QT_NO_VECTOR4D
inline QQuaternion::QQuaternion(const QVector4D& vector)
- : wp(vector.wp), xp(vector.xp), yp(vector.yp), zp(vector.zp) {}
+ : wp(vector.w()), xp(vector.x()), yp(vector.y()), zp(vector.z()) {}
inline QVector4D QQuaternion::toVector4D() const
{
- return QVector4D(xp, yp, zp, wp, 1);
+ return QVector4D(xp, yp, zp, wp);
}
#endif
diff --git a/src/gui/math3d/qvector3d.h b/src/gui/math3d/qvector3d.h
index 767517e..1e95865 100644
--- a/src/gui/math3d/qvector3d.h
+++ b/src/gui/math3d/qvector3d.h
@@ -54,7 +54,6 @@ QT_MODULE(Gui)
class QMatrix4x4;
class QVector2D;
class QVector4D;
-class QQuaternion;
#ifndef QT_NO_VECTOR3D
@@ -136,8 +135,6 @@ private:
friend class QVector2D;
friend class QVector4D;
- friend class QQuaternion;
- friend class QMatrix4x4;
#ifndef QT_NO_MATRIX4X4
friend QVector3D operator*(const QVector3D& vector, const QMatrix4x4& matrix);
friend QVector3D operator*(const QMatrix4x4& matrix, const QVector3D& vector);
diff --git a/src/gui/math3d/qvector4d.h b/src/gui/math3d/qvector4d.h
index 4bd6639..520319a 100644
--- a/src/gui/math3d/qvector4d.h
+++ b/src/gui/math3d/qvector4d.h
@@ -54,7 +54,6 @@ QT_MODULE(Gui)
class QMatrix4x4;
class QVector2D;
class QVector3D;
-class QQuaternion;
#ifndef QT_NO_VECTOR4D
@@ -133,8 +132,6 @@ private:
friend class QVector2D;
friend class QVector3D;
- friend class QQuaternion;
- friend class QMatrix4x4;
#ifndef QT_NO_MATRIX4X4
friend QVector4D operator*(const QVector4D& vector, const QMatrix4x4& matrix);
friend QVector4D operator*(const QMatrix4x4& matrix, const QVector4D& vector);
diff --git a/src/gui/painting/qoutlinemapper.cpp b/src/gui/painting/qoutlinemapper.cpp
index 216b8c6..8d04a84 100644
--- a/src/gui/painting/qoutlinemapper.cpp
+++ b/src/gui/painting/qoutlinemapper.cpp
@@ -40,7 +40,7 @@
****************************************************************************/
#include "qoutlinemapper_p.h"
-
+#include <private/qpainterpath_p.h>
#include "qmath.h"
#include <stdlib.h>
diff --git a/src/gui/painting/qpaintengine_mac.cpp b/src/gui/painting/qpaintengine_mac.cpp
index 934b385..249bcfa 100644
--- a/src/gui/painting/qpaintengine_mac.cpp
+++ b/src/gui/painting/qpaintengine_mac.cpp
@@ -116,11 +116,15 @@ QMacCGContext::QMacCGContext(QPainter *p)
if (devType == QInternal::Widget) {
QRegion clip = p->paintEngine()->systemClip();
+ QTransform native = p->deviceTransform();
+ QTransform logical = p->combinedTransform();
if (p->hasClipping()) {
+ QRegion r = p->clipRegion();
+ r.translate(native.dx() - logical.dx(), native.dy() - logical.dy());
if (clip.isEmpty())
- clip = p->clipRegion();
+ clip = r;
else
- clip &= p->clipRegion();
+ clip &= r;
}
qt_mac_clip_cg(context, clip, 0);
diff --git a/src/gui/s60framework/qs60mainapplication.cpp b/src/gui/s60framework/qs60mainapplication.cpp
new file mode 100644
index 0000000..45a1a3d
--- /dev/null
+++ b/src/gui/s60framework/qs60mainapplication.cpp
@@ -0,0 +1,102 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the Symbian application wrapper 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 FILES
+#include <exception>
+#include "qs60maindocument_p.h"
+#include "qs60mainapplication_p.h"
+#include <bautils.h>
+#include <coemain.h>
+
+QT_BEGIN_NAMESPACE
+
+/**
+ * factory function to create the QtS60Main application class
+ */
+CApaApplication* NewApplication()
+{
+ return new QS60MainApplication;
+}
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+
+_LIT(KQtWrapperResourceFile, "\\resource\\apps\\s60main.rsc");
+
+// -----------------------------------------------------------------------------
+// QS60MainApplication::CreateDocumentL()
+// Creates CApaDocument object
+// -----------------------------------------------------------------------------
+//
+CApaDocument* QS60MainApplication::CreateDocumentL()
+{
+ // Create an QtS60Main document, and return a pointer to it
+ return (static_cast<CApaDocument*>(QS60MainDocument::NewL(*this)));
+}
+
+// -----------------------------------------------------------------------------
+// QS60MainApplication::AppDllUid()
+// Returns application UID
+// -----------------------------------------------------------------------------
+//
+TUid QS60MainApplication::AppDllUid() const
+{
+ // Return the UID for the QtS60Main application
+ return ProcessUid();
+}
+
+// -----------------------------------------------------------------------------
+// QS60MainApplication::ResourceFileName()
+// Returns application resource filename
+// -----------------------------------------------------------------------------
+//
+TFileName QS60MainApplication::ResourceFileName() const
+{
+ TFindFile finder(iCoeEnv->FsSession());
+ TInt err = finder.FindByDir(KQtWrapperResourceFile, KNullDesC);
+ if (err == KErrNone)
+ return finder.File();
+ return KNullDesC();
+}
+
+QT_END_NAMESPACE
+
+// End of File
diff --git a/src/gui/s60framework/qs60mainapplication_p.h b/src/gui/s60framework/qs60mainapplication_p.h
new file mode 100644
index 0000000..572bbd3
--- /dev/null
+++ b/src/gui/s60framework/qs60mainapplication_p.h
@@ -0,0 +1,112 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the Symbian application wrapper 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 QS60MAINAPPLICATION_P_H
+#define QS60MAINAPPLICATION_P_H
+
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the Qt API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+// INCLUDES
+#include <aknapp.h>
+
+#include <qglobal.h>
+
+// CLASS DECLARATION
+
+QT_BEGIN_NAMESPACE
+
+CApaApplication* NewApplication();
+
+static TUid ProcessUid()
+{
+ RProcess me;
+ TSecureId securId = me.SecureId();
+ me.Close();
+ return securId.operator TUid();
+}
+
+/**
+* QS60MainApplication application class.
+* Provides factory to create concrete document object.
+* An instance of QS60MainApplication is the application part of the
+* AVKON application framework for the QtS60Main example application.
+*/
+class QS60MainApplication : public CAknApplication
+{
+public: // Functions from base classes
+
+ /**
+ * From CApaApplication, AppDllUid.
+ * @return Application's UID (KUidQtS60MainApp).
+ */
+ TUid AppDllUid() const;
+
+ /**
+ * From CApaApplication, ResourceFileName
+ * @return Application's resource filename (KUidQtS60MainApp).
+ */
+ TFileName ResourceFileName() const;
+
+protected: // Functions from base classes
+
+ /**
+ * From CApaApplication, CreateDocumentL.
+ * Creates QS60MainDocument document object. The returned
+ * pointer in not owned by the QS60MainApplication object.
+ * @return A pointer to the created document object.
+ */
+ CApaDocument* CreateDocumentL();
+};
+
+QT_END_NAMESPACE
+
+#endif // QS60MAINAPPLICATION_P_H
+
+// End of File
diff --git a/src/gui/s60framework/qs60mainappui.cpp b/src/gui/s60framework/qs60mainappui.cpp
new file mode 100644
index 0000000..7b5ea1d
--- /dev/null
+++ b/src/gui/s60framework/qs60mainappui.cpp
@@ -0,0 +1,183 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the Symbian application wrapper 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 FILES
+#include <exception>
+#include <avkon.hrh>
+#include <eikmenub.h>
+#include <eikmenup.h>
+#include <barsread.h>
+#include <s60main.rsg>
+#include <avkon.rsg>
+
+#include "qs60mainappui_p.h"
+#include <QtGui/qapplication.h>
+#include <QtGui/qmenu.h>
+#include <QtGui/private/qt_s60_p.h>
+
+QT_BEGIN_NAMESPACE
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+
+// -----------------------------------------------------------------------------
+// QS60MainAppUi::ConstructL()
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void QS60MainAppUi::ConstructL()
+{
+ // Cone's heap and handle checks on app destruction are not suitable for Qt apps, as many
+ // objects can still exist in static data at that point. Instead we will print relevant information
+ // so that comparative checks may be made for memory leaks, using ~SPrintExitInfo in corelib.
+ iEikonEnv->DisableExitChecks(ETrue);
+
+ // Initialise app UI with standard value.
+ // ENoAppResourceFile and ENonStandardResourceFile makes UI to work without
+ // resource files in most SDKs. S60 3rd FP1 public seems to require resource file
+ // even these flags are defined
+ BaseConstructL(CAknAppUi::EAknEnableSkin);
+
+ CEikButtonGroupContainer* nativeContainer = Cba();
+ nativeContainer->SetCommandSetL(R_AVKON_SOFTKEYS_EMPTY_WITH_IDS);
+}
+
+// -----------------------------------------------------------------------------
+// QS60MainAppUi::QS60MainAppUi()
+// C++ default constructor can NOT contain any code, that might leave.
+// -----------------------------------------------------------------------------
+//
+QS60MainAppUi::QS60MainAppUi()
+{
+ // No implementation required
+}
+
+// -----------------------------------------------------------------------------
+// QS60MainAppUi::~QS60MainAppUi()
+// Destructor.
+// -----------------------------------------------------------------------------
+//
+QS60MainAppUi::~QS60MainAppUi()
+{
+}
+
+// -----------------------------------------------------------------------------
+// QS60MainAppUi::HandleCommandL()
+// Takes care of command handling.
+// -----------------------------------------------------------------------------
+//
+void QS60MainAppUi::HandleCommandL(TInt aCommand)
+{
+ if (qApp)
+ qApp->symbianHandleCommand(aCommand);
+}
+
+// -----------------------------------------------------------------------------
+// QS60MainAppUi::HandleResourceChangeL()
+// Takes care of event handling.
+// -----------------------------------------------------------------------------
+//
+void QS60MainAppUi::HandleResourceChangeL(TInt aType)
+{
+ CAknAppUi::HandleResourceChangeL(aType);
+
+ if (qApp)
+ qApp->symbianResourceChange(aType);
+}
+
+void QS60MainAppUi::HandleWsEventL(const TWsEvent& aEvent, CCoeControl *control)
+{
+ int result = 0;
+ if (qApp)
+ QT_TRYCATCH_LEAVING(
+ result = qApp->s60ProcessEvent(const_cast<TWsEvent*>(&aEvent))
+ );
+
+ if (result <= 0)
+ CAknAppUi::HandleWsEventL(aEvent, control);
+}
+
+
+// -----------------------------------------------------------------------------
+// Called by the framework when the application status pane
+// size is changed. Passes the new client rectangle to the
+// AppView
+// -----------------------------------------------------------------------------
+//
+void QS60MainAppUi::HandleStatusPaneSizeChange()
+{
+ HandleResourceChangeL(KInternalStatusPaneChange);
+ HandleStackedControlsResourceChange(KInternalStatusPaneChange);
+}
+
+void QS60MainAppUi::DynInitMenuBarL(TInt, CEikMenuBar *)
+{
+}
+
+void QS60MainAppUi::DynInitMenuPaneL(TInt aResourceId, CEikMenuPane *aMenuPane)
+{
+ if (aResourceId == R_QT_WRAPPERAPP_MENU) {
+ if (aMenuPane->NumberOfItemsInPane() <= 1)
+ qt_symbian_show_toplevel(aMenuPane);
+
+ } else if (aResourceId != R_AVKON_MENUPANE_FEP_DEFAULT && aResourceId != R_AVKON_MENUPANE_EDITTEXT_DEFAULT && aResourceId != R_AVKON_MENUPANE_LANGUAGE_DEFAULT) {
+ qt_symbian_show_submenu(aMenuPane, aResourceId);
+ }
+}
+
+void QS60MainAppUi::RestoreMenuL(CCoeControl* aMenuWindow, TInt aMenuId, TMenuType aMenuType)
+{
+ if ((aMenuId == R_QT_WRAPPERAPP_MENUBAR) || (aMenuId == R_AVKON_MENUPANE_FEP_DEFAULT)) {
+ TResourceReader reader;
+ iCoeEnv->CreateResourceReaderLC(reader, aMenuId);
+ aMenuWindow->ConstructFromResourceL(reader);
+ CleanupStack::PopAndDestroy();
+ }
+
+ if (aMenuType == EMenuPane)
+ DynInitMenuPaneL(aMenuId, (CEikMenuPane*)aMenuWindow);
+ else
+ DynInitMenuBarL(aMenuId, (CEikMenuBar*)aMenuWindow);
+}
+
+QT_END_NAMESPACE
+
+// End of File
diff --git a/src/gui/s60framework/qs60mainappui_p.h b/src/gui/s60framework/qs60mainappui_p.h
new file mode 100644
index 0000000..ef2de27
--- /dev/null
+++ b/src/gui/s60framework/qs60mainappui_p.h
@@ -0,0 +1,130 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the Symbian application wrapper 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 QS60MAINAPPUI_P_H
+#define QS60MAINAPPUI_P_H
+
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the Qt API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+// INCLUDES
+#include <aknappui.h>
+
+#include <qglobal.h>
+
+QT_BEGIN_NAMESPACE
+
+// FORWARD DECLARATIONS
+
+// CLASS DECLARATION
+/**
+* QS60MainAppUi application UI class.
+* Interacts with the user through the UI and request message processing
+* from the handler class
+*/
+class QS60MainAppUi : public CAknAppUi
+{
+public: // Constructors and destructor
+
+ /**
+ * ConstructL.
+ * 2nd phase constructor.
+ */
+ void ConstructL();
+
+ /**
+ * QS60MainAppUi.
+ * C++ default constructor. This needs to be public due to
+ * the way the framework constructs the AppUi
+ */
+ QS60MainAppUi();
+
+ /**
+ * ~QS60MainAppUi.
+ * Virtual Destructor.
+ */
+ virtual ~QS60MainAppUi();
+
+protected:
+ void RestoreMenuL(CCoeControl* aMenuWindow,TInt aMenuId,TMenuType aMenuType);
+ void DynInitMenuBarL(TInt aResourceId, CEikMenuBar *aMenuBar);
+ void DynInitMenuPaneL(TInt aResourceId, CEikMenuPane *aMenuPane);
+
+private: // Functions from base classes
+
+ /**
+ * From CEikAppUi, HandleCommandL.
+ * Takes care of command handling.
+ * @param aCommand Command to be handled.
+ */
+ void HandleCommandL( TInt aCommand );
+
+ /**
+ * From CAknAppUi, HandleResourceChangeL
+ * Handles resource change events such as layout switches in global level.
+ * @param aType event type.
+ */
+ void HandleResourceChangeL(TInt aType);
+
+ /**
+ * HandleStatusPaneSizeChange.
+ * Called by the framework when the application status pane
+ * size is changed.
+ */
+ void HandleStatusPaneSizeChange();
+
+protected:
+ void HandleWsEventL(const TWsEvent& aEvent, CCoeControl* aDestination);
+};
+
+QT_END_NAMESPACE
+
+#endif // QS60MAINAPPUI_P_H
+
+// End of File
diff --git a/src/gui/s60framework/qs60maindocument.cpp b/src/gui/s60framework/qs60maindocument.cpp
new file mode 100644
index 0000000..5a34a14
--- /dev/null
+++ b/src/gui/s60framework/qs60maindocument.cpp
@@ -0,0 +1,121 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the Symbian application wrapper 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 FILES
+#include <exception>
+#include "qs60mainappui_p.h"
+#include "qs60maindocument_p.h"
+
+QT_BEGIN_NAMESPACE
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// QS60MainDocument::NewL()
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+QS60MainDocument* QS60MainDocument::NewL(CEikApplication& aApp)
+{
+ QS60MainDocument* self = NewLC(aApp);
+ CleanupStack::Pop(self);
+ return self;
+}
+
+// -----------------------------------------------------------------------------
+// QS60MainDocument::NewLC()
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+QS60MainDocument* QS60MainDocument::NewLC(CEikApplication& aApp)
+{
+ QS60MainDocument* self = new(ELeave) QS60MainDocument(aApp);
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ return self;
+}
+
+// -----------------------------------------------------------------------------
+// QS60MainDocument::ConstructL()
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void QS60MainDocument::ConstructL()
+{
+ // No implementation required
+}
+
+// -----------------------------------------------------------------------------
+// QS60MainDocument::QS60MainDocument()
+// C++ default constructor can NOT contain any code, that might leave.
+// -----------------------------------------------------------------------------
+//
+QS60MainDocument::QS60MainDocument(CEikApplication& aApp)
+ : CAknDocument(aApp)
+{
+ // No implementation required
+}
+
+// ---------------------------------------------------------------------------
+// QS60MainDocument::~QS60MainDocument()
+// Destructor.
+// ---------------------------------------------------------------------------
+//
+QS60MainDocument::~QS60MainDocument()
+{
+ // No implementation required
+}
+
+// ---------------------------------------------------------------------------
+// QS60MainDocument::CreateAppUiL()
+// Constructs CreateAppUi.
+// ---------------------------------------------------------------------------
+//
+CEikAppUi* QS60MainDocument::CreateAppUiL()
+{
+ // Create the application user interface, and return a pointer to it;
+ // the framework takes ownership of this object
+ return (static_cast <CEikAppUi*>(new(ELeave)QS60MainAppUi));
+}
+
+QT_END_NAMESPACE
+
+// End of File
diff --git a/src/gui/s60framework/qs60maindocument_p.h b/src/gui/s60framework/qs60maindocument_p.h
new file mode 100644
index 0000000..dfb439f
--- /dev/null
+++ b/src/gui/s60framework/qs60maindocument_p.h
@@ -0,0 +1,139 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the Symbian application wrapper 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 QS60MAINDOCUMENT_P_H
+#define QS60MAINDOCUMENT_P_H
+
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the Qt API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+// INCLUDES
+#include <akndoc.h>
+
+#include <qglobal.h>
+
+class CEikApplication;
+
+QT_BEGIN_NAMESPACE
+
+// FORWARD DECLARATIONS
+class QS60MainAppUi;
+
+// CLASS DECLARATION
+
+/**
+* QS60MainDocument application class.
+* An instance of class QS60MainDocument is the Document part of the
+* AVKON application framework for the QtS60Main application.
+*/
+class QS60MainDocument : public CAknDocument
+{
+public: // Constructors and destructor
+
+ /**
+ * NewL.
+ * Two-phased constructor.
+ * Construct a QS60MainDocument for the AVKON application aApp
+ * using two phase construction, and return a pointer
+ * to the created object.
+ * @param aApp Application creating this document.
+ * @return A pointer to the created instance of QS60MainDocument.
+ */
+ static QS60MainDocument* NewL( CEikApplication& aApp );
+
+ /**
+ * NewLC.
+ * Two-phased constructor.
+ * Construct a QS60MainDocument for the AVKON application aApp
+ * using two phase construction, and return a pointer
+ * to the created object.
+ * @param aApp Application creating this document.
+ * @return A pointer to the created instance of QS60MainDocument.
+ */
+ static QS60MainDocument* NewLC( CEikApplication& aApp );
+
+ /**
+ * ~QS60MainDocument
+ * Virtual Destructor.
+ */
+ virtual ~QS60MainDocument();
+
+public: // Functions from base classes
+
+ /**
+ * CreateAppUiL
+ * From CEikDocument, CreateAppUiL.
+ * Create a QS60MainAppUi object and return a pointer to it.
+ * The object returned is owned by the Uikon framework.
+ * @return Pointer to created instance of AppUi.
+ */
+ CEikAppUi* CreateAppUiL();
+
+private: // Constructors
+
+ /**
+ * ConstructL
+ * 2nd phase constructor.
+ */
+ void ConstructL();
+
+ /**
+ * QS60MainDocument.
+ * C++ default constructor.
+ * @param aApp Application creating this document.
+ */
+ QS60MainDocument( CEikApplication& aApp );
+
+};
+
+QT_END_NAMESPACE
+
+#endif // QS60MAINDOCUMENT_P_H
+
+// End of File
diff --git a/src/gui/s60framework/s60framework.pri b/src/gui/s60framework/s60framework.pri
new file mode 100644
index 0000000..f9a6d95
--- /dev/null
+++ b/src/gui/s60framework/s60framework.pri
@@ -0,0 +1,7 @@
+SOURCES += s60framework/qs60mainapplication.cpp \
+ s60framework/qs60mainappui.cpp \
+ s60framework/qs60maindocument.cpp
+
+HEADERS += s60framework/qs60mainapplication_p.h \
+ s60framework/qs60mainappui_p.h \
+ s60framework/qs60maindocument_p.h
diff --git a/src/gui/styles/qcommonstyle.cpp b/src/gui/styles/qcommonstyle.cpp
index 41f9ec0..7fefb19 100644
--- a/src/gui/styles/qcommonstyle.cpp
+++ b/src/gui/styles/qcommonstyle.cpp
@@ -1882,7 +1882,6 @@ void QCommonStyle::drawControl(ControlElement element, const QStyleOption *opt,
break;
case CE_TabBarTabLabel:
if (const QStyleOptionTab *tab = qstyleoption_cast<const QStyleOptionTab *>(opt)) {
- // ### consider merging this with SE_TabBarTabText
QStyleOptionTabV3 tabV2(*tab);
QRect tr = tabV2.rect;
bool verticalTabs = tabV2.shape == QTabBar::RoundedEast
diff --git a/src/gui/styles/qstylesheetstyle.cpp b/src/gui/styles/qstylesheetstyle.cpp
index cead2ac..3d8dec6 100644
--- a/src/gui/styles/qstylesheetstyle.cpp
+++ b/src/gui/styles/qstylesheetstyle.cpp
@@ -3948,7 +3948,7 @@ void QStyleSheetStyle::drawControl(ControlElement ce, const QStyleOption *opt, Q
QFont oldFont = p->font();
if (subRule.hasFont)
p->setFont(subRule.font);
- if (subRule.hasBox()) {
+ if (subRule.hasBox() || !subRule.hasNativeBorder()) {
tabCopy.rect = ce == CE_TabBarTabShape ? subRule.borderRect(r)
: subRule.contentsRect(r);
QWindowsStyle::drawControl(ce, &tabCopy, p, w);
@@ -5702,6 +5702,15 @@ QRect QStyleSheetStyle::subElementRect(SubElement se, const QStyleOption *opt, c
}
break;
}
+ case SE_TabBarTabText:
+ case SE_TabBarTabLeftButton:
+ case SE_TabBarTabRightButton: {
+ QRenderRule subRule = renderRule(w, opt, PseudoElement_TabBarTab);
+ if (subRule.hasBox() || !subRule.hasNativeBorder()) {
+ return ParentStyle::subElementRect(se, opt, w);
+ }
+ break;
+ }
#endif // QT_NO_TABBAR
case SE_DockWidgetCloseButton:
diff --git a/src/gui/text/qcssscanner.cpp b/src/gui/text/qcssscanner.cpp
index 06a13de..5bbf638 100644
--- a/src/gui/text/qcssscanner.cpp
+++ b/src/gui/text/qcssscanner.cpp
@@ -46,7 +46,7 @@ public:
QCssScanner_Generated(const QString &inp);
inline QChar next() {
- return (pos < input.length()) ? input.at(pos++).toLower() : QChar();
+ return (pos < input.length()) ? input.at(pos++) : QChar();
}
int handleCommentStart();
int lex();
diff --git a/src/gui/text/qfontdatabase.cpp b/src/gui/text/qfontdatabase.cpp
index 0e2dc31..78847ef 100644
--- a/src/gui/text/qfontdatabase.cpp
+++ b/src/gui/text/qfontdatabase.cpp
@@ -595,7 +595,7 @@ static QList<QFontDatabase::WritingSystem> determineWritingSystemsFromTrueTypeBi
class QFontDatabaseS60Store
{
public:
- virtual ~QFontDatabaseS60Store() {};
+ virtual ~QFontDatabaseS60Store() {}
};
#endif
diff --git a/src/gui/widgets/qdatetimeedit_p.h b/src/gui/widgets/qdatetimeedit_p.h
index 7e1c24d..689b508 100644
--- a/src/gui/widgets/qdatetimeedit_p.h
+++ b/src/gui/widgets/qdatetimeedit_p.h
@@ -89,7 +89,7 @@ public:
QDateTime validateAndInterpret(QString &input, int &, QValidator::State &state,
bool fixup = false) const;
void clearSection(int index);
- virtual QString displayText() const { return edit->displayText(); } // this is from QDateTimeParser
+ virtual QString displayText() const { return edit->text(); } // this is from QDateTimeParser
int absoluteIndex(QDateTimeEdit::Section s, int index) const;
int absoluteIndex(const SectionNode &s) const;
diff --git a/src/gui/widgets/qmenu_symbian.cpp b/src/gui/widgets/qmenu_symbian.cpp
index 7ae799c..c5953af 100644
--- a/src/gui/widgets/qmenu_symbian.cpp
+++ b/src/gui/widgets/qmenu_symbian.cpp
@@ -3,6 +3,7 @@
** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
** Contact: Nokia Corporation (qt-info@nokia.com)
**
+** This file is part of the S60 port of the Qt toolkit.
**
** $QT_BEGIN_LICENSE:LGPL$
** No Commercial Usage