[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: KDE/kdeedu/step/step
From: Sebastian Voecking <kde () voecking ! net>
Date: 2011-02-07 13:36:48
Message-ID: 20110207133648.60676AC8CC () svn ! kde ! org
[Download RAW message or body]
SVN commit 1219246 by voecking:
Reimplement coordinate transforms for embedded widgets, fixes problems with IBeam cursor
BUG: 220831
FIXED-IN: 4.6.1
M +17 -16 toolgraphics.cc
--- trunk/KDE/kdeedu/step/step/toolgraphics.cc #1219245:1219246
@@ -197,26 +197,32 @@
{
if(!scene() || scene()->views().isEmpty()) return;
QGraphicsView* activeView = scene()->views().first();
- QTransform viewportTransform = activeView->viewportTransform();
QPointF position = vectorToPoint(_item->metaObject()->property("position")->
readVariant(_item).value<StepCore::Vector2d>());
- position = viewportTransform.inverted().map(QPointF(viewportTransform.map(position).toPoint()));
- setPos(position);
- double s = currentViewScale();
- QTransform itemTransform = activeView->transform() * deviceTransform(viewportTransform);
+ // Move item to the closest pixel position
+ QPoint viewPosition = activeView->mapFromScene(position);
+ setPos(activeView->mapToScene(viewPosition));
StepCore::Vector2d size = _item->metaObject()->property("size")->
readVariant(_item).value<StepCore::Vector2d>();
- QRectF irect(-(size[0]+2)/s/2, -(size[1]+2)/s/2, (size[0]+2)/s, (size[1]+2)/s);
- QRect viewportRect = itemTransform.mapRect(irect).toRect();
- irect = itemTransform.inverted().mapRect(QRectF(viewportRect));
+ QSize viewSize(qRound(size[0]), qRound(size[1]));
+ QPoint viewTopLeft =
+ viewPosition - QPoint(viewSize.width() / 2, viewSize.height() / 2);
+ QRect viewRect(viewTopLeft, viewSize);
- if(irect != _boundingRect) {
+ QRectF sceneRect =
+ activeView->mapToScene(viewRect.adjusted(0, 0, 1, 1)).boundingRect();
+ QRectF boundingRect = mapRectFromScene(sceneRect);
+ double s = currentViewScale();
+ boundingRect.adjust(-SELECTION_MARGIN/s, -SELECTION_MARGIN/s,
+ SELECTION_MARGIN/s, SELECTION_MARGIN/s);
+
+ if(boundingRect != _boundingRect) {
prepareGeometryChange();
- _boundingRect = irect;
+ _boundingRect = boundingRect;
update();
}
@@ -226,12 +232,7 @@
_centralWidget->show();
}
- viewportRect = viewportRect.adjusted(1,1,-1,-1).normalized();
- if(_centralWidget->pos() != viewportRect.topLeft())
- _centralWidget->move(viewportRect.topLeft());
-
- if(_centralWidget->size() != viewportRect.size())
- _centralWidget->resize(viewportRect.size());
+ _centralWidget->setGeometry(viewRect.adjusted(0, 0, 1, 1));
}
void WidgetGraphicsItem::stateChanged()
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic