From 72874c0ebf2b5c8ba993ea7ecac6df407b57363f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20R=C3=B8dal?= Date: Fri, 28 Nov 2008 12:54:06 +0100 Subject: Better resizing of widgets. --- mazescene.cpp | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) (limited to 'mazescene.cpp') 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(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) -- cgit v1.2.3