diff options
Diffstat (limited to 'demos/boxes')
-rw-r--r-- | demos/boxes/qtbox.cpp | 18 | ||||
-rw-r--r-- | demos/boxes/qtbox.h | 6 | ||||
-rw-r--r-- | demos/boxes/scene.cpp | 3 | ||||
-rw-r--r-- | demos/boxes/scene.h | 2 |
4 files changed, 23 insertions, 6 deletions
diff --git a/demos/boxes/qtbox.cpp b/demos/boxes/qtbox.cpp index 015bc95..7134d63 100644 --- a/demos/boxes/qtbox.cpp +++ b/demos/boxes/qtbox.cpp @@ -122,7 +122,7 @@ void ItemBase::duplicateSelectedItems(QGraphicsScene *scene) selected = scene->selectedItems(); foreach (QGraphicsItem *item, selected) { - ItemBase *itemBase = dynamic_cast<ItemBase *>(item); + ItemBase *itemBase = qgraphicsitem_cast<ItemBase *>(item); if (itemBase) scene->addItem(itemBase->createNew(itemBase->m_size, itemBase->pos().x() + itemBase->m_size, itemBase->pos().y())); } @@ -137,7 +137,7 @@ void ItemBase::deleteSelectedItems(QGraphicsScene *scene) selected = scene->selectedItems(); foreach (QGraphicsItem *item, selected) { - ItemBase *itemBase = dynamic_cast<ItemBase *>(item); + ItemBase *itemBase = qgraphicsitem_cast<ItemBase *>(item); if (itemBase) delete itemBase; } @@ -152,7 +152,7 @@ void ItemBase::growSelectedItems(QGraphicsScene *scene) selected = scene->selectedItems(); foreach (QGraphicsItem *item, selected) { - ItemBase *itemBase = dynamic_cast<ItemBase *>(item); + ItemBase *itemBase = qgraphicsitem_cast<ItemBase *>(item); if (itemBase) { itemBase->prepareGeometryChange(); itemBase->m_size *= 2; @@ -171,7 +171,7 @@ void ItemBase::shrinkSelectedItems(QGraphicsScene *scene) selected = scene->selectedItems(); foreach (QGraphicsItem *item, selected) { - ItemBase *itemBase = dynamic_cast<ItemBase *>(item); + ItemBase *itemBase = qgraphicsitem_cast<ItemBase *>(item); if (itemBase) { itemBase->prepareGeometryChange(); itemBase->m_size /= 2; @@ -257,6 +257,12 @@ void ItemBase::wheelEvent(QGraphicsSceneWheelEvent *event) m_size = MIN_ITEM_SIZE; } +int ItemBase::type() const +{ + return Type; +} + + bool ItemBase::isInResizeArea(const QPointF &pos) { return (-pos.y() < pos.x() - m_size + 9); @@ -313,6 +319,8 @@ void QtBox::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWi 0.5f * (right + left), 0.5f * (bottom + top), 0.0f, 1.0f }; + painter->beginNativePainting(); + glMatrixMode(GL_PROJECTION); glPushMatrix(); glLoadMatrixf(moveToRectMatrix); @@ -386,6 +394,8 @@ void QtBox::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWi glMatrixMode(GL_PROJECTION); glPopMatrix(); + painter->endNativePainting(); + ItemBase::paint(painter, option, widget); } diff --git a/demos/boxes/qtbox.h b/demos/boxes/qtbox.h index 6f39b0d..9465911 100644 --- a/demos/boxes/qtbox.h +++ b/demos/boxes/qtbox.h @@ -47,10 +47,11 @@ #include <QtGui/qvector3d.h> #include "glbuffers.h" -class ItemBase : public QObject, public QGraphicsItem +class ItemBase : public QGraphicsItem { - Q_OBJECT public: + enum { Type = UserType + 1 }; + ItemBase(int size, int x, int y); virtual ~ItemBase(); virtual QRectF boundingRect() const; @@ -64,6 +65,7 @@ protected: virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent *event); virtual void keyPressEvent(QKeyEvent *event); virtual void wheelEvent(QGraphicsSceneWheelEvent *event); + virtual int type() const; bool isInResizeArea(const QPointF &pos); static void duplicateSelectedItems(QGraphicsScene *scene); diff --git a/demos/boxes/scene.cpp b/demos/boxes/scene.cpp index 016ba17..2a7ca0e 100644 --- a/demos/boxes/scene.cpp +++ b/demos/boxes/scene.cpp @@ -894,6 +894,7 @@ void Scene::drawBackground(QPainter *painter, const QRectF &) float width = float(painter->device()->width()); float height = float(painter->device()->height()); + painter->beginNativePainting(); setStates(); if (m_dynamicCubemap) @@ -913,6 +914,8 @@ void Scene::drawBackground(QPainter *painter, const QRectF &) defaultStates(); ++m_frame; + + painter->endNativePainting(); } QPointF Scene::pixelPosToViewPos(const QPointF& p) diff --git a/demos/boxes/scene.h b/demos/boxes/scene.h index efe1e3f..23f17e5 100644 --- a/demos/boxes/scene.h +++ b/demos/boxes/scene.h @@ -108,6 +108,8 @@ private: class GraphicsWidget : public QGraphicsProxyWidget { +public: + GraphicsWidget() : QGraphicsProxyWidget(0, Qt::Window) {} protected: virtual QVariant itemChange(GraphicsItemChange change, const QVariant &value); virtual void resizeEvent(QGraphicsSceneResizeEvent *event); |