summaryrefslogtreecommitdiffstats
path: root/mazescene.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'mazescene.cpp')
-rw-r--r--mazescene.cpp32
1 files changed, 32 insertions, 0 deletions
diff --git a/mazescene.cpp b/mazescene.cpp
index fec21f2..11fbfcb 100644
--- a/mazescene.cpp
+++ b/mazescene.cpp
@@ -278,6 +278,8 @@ WallItem::WallItem(MazeScene *scene, const QPointF &a, const QPointF &b, int typ
if (!childWidget)
return;
+ childWidget->installEventFilter(scene);
+
m_childItem = new QGraphicsProxyWidget(this);
m_childItem->setWidget(childWidget);
m_childItem->setCacheMode(QGraphicsItem::ItemCoordinateCache);
@@ -291,6 +293,36 @@ WallItem::WallItem(MazeScene *scene, const QPointF &a, const QPointF &b, int typ
m_childItem->translate(-center.x(), -center.y());
}
+bool MazeScene::eventFilter(QObject *target, QEvent *event)
+{
+ QWidget *widget = qobject_cast<QWidget *>(target);
+ if (!widget || event->type() != QEvent::Resize)
+ return false;
+
+ foreach (WallItem *item, m_walls) {
+ QGraphicsProxyWidget *proxy = item->childItem();
+ if (!proxy)
+ continue;
+ if (proxy->widget() == widget) {
+ QRectF rect = proxy->boundingRect();
+
+ if (QRectF(-0.5, -0.5, 1, 1).contains(proxy->mapToParent(rect).boundingRect()))
+ continue;
+
+ QPointF center = rect.center();
+
+ qreal scale = qMin(0.8 / rect.width(), 0.8 / rect.height());
+ proxy->resetMatrix();
+ proxy->translate(0, -0.05);
+ proxy->scale(scale, scale);
+ proxy->translate(-center.x(), -center.y());
+ break;
+ }
+ }
+
+ return false;
+}
+
void ProjectedItem::setDepths(qreal za, qreal zb)
{
if (!m_shadowItem)