[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: branches/KDE/4.4/kdebase/workspace/plasma/desktop/containments/desktop
From: Ambroz Bizjak <ambrop7 () gmail ! com>
Date: 2010-03-19 19:20:45
Message-ID: 20100319192045.725A8AC85F () svn ! kde ! org
[Download RAW message or body]
SVN commit 1105290 by abizjak:
backport revision 1105289
Before adding an item to a requested position. check if it would meet the visibility \
criterion. If not, use the positioning algorithm instead.
BUG: 229616
M +23 -22 desktoplayout.cpp
M +1 -0 desktoplayout.h
--- branches/KDE/4.4/kdebase/workspace/plasma/desktop/containments/desktop/desktoplayout.cpp \
#1105289:1105290 @@ -41,6 +41,10 @@
if (position) {
logicalGeom = positionNewItem(logicalGeom.size());
+ } else {
+ if (itemSpace.positionVisibility(predictNewItemGeometry(logicalGeom)) < 1.0 \
- visibilityTolerance) { + logicalGeom = \
positionNewItem(logicalGeom.size()); + }
}
ItemSpace::ItemSpaceItem spaceItem;
@@ -80,28 +84,7 @@
QPointF bestPosition = QPointF();
qreal bestVisibility = 0;
foreach (const QPointF &position, possiblePositions) {
- // see how much the item can be pushed into the working area:
- // copy our ItemSpace, add the item to the copy
- // and check the resulting position's visibility
-
- ItemSpace tempItemSpace(itemSpace);
-
- ItemSpace::ItemSpaceItem spaceItem;
- spaceItem.pushBack = false;
- spaceItem.animateMovement = false;
- spaceItem.preferredPosition = position;
- spaceItem.lastGeometry = QRectF(position, itemSize);
- spaceItem.user = QVariant(-1);
-
- tempItemSpace.addItem(spaceItem);
- int tempGroup, tempItem;
- tempItemSpace.locateItemByUser(QVariant(-1), &tempGroup, &tempItem);
-
- QRectF resultingGeom = \
tempItemSpace.m_groups[tempGroup].m_groupItems[tempItem].lastGeometry;
- qreal visibility = tempItemSpace.positionVisibility(resultingGeom);
-
- //kDebug() << "Trying " << position << " visibility " << visibility;
-
+ qreal visibility = \
itemSpace.positionVisibility(predictNewItemGeometry(QRectF(position, itemSize))); if \
(visibility > bestVisibility) { bestPosition = position;
bestVisibility = visibility;
@@ -286,6 +269,24 @@
return detransformed;
}
+QRectF DesktopLayout::predictNewItemGeometry(const QRectF &logicalGeom)
+{
+ ItemSpace tempItemSpace(itemSpace);
+
+ ItemSpace::ItemSpaceItem spaceItem;
+ spaceItem.pushBack = false;
+ spaceItem.animateMovement = false;
+ spaceItem.preferredPosition = logicalGeom.topLeft();
+ spaceItem.lastGeometry = logicalGeom;
+ spaceItem.user = QVariant(-1);
+
+ tempItemSpace.addItem(spaceItem);
+ int tempGroup, tempItem;
+ tempItemSpace.locateItemByUser(QVariant(-1), &tempGroup, &tempItem);
+
+ return tempItemSpace.m_groups[tempGroup].m_groupItems[tempItem].lastGeometry;
+}
+
void DesktopLayout::adjustPhysicalPositions()
{
for (int groupId = 0; groupId < itemSpace.m_groups.size(); groupId++) {
--- branches/KDE/4.4/kdebase/workspace/plasma/desktop/containments/desktop/desktoplayout.h \
#1105289:1105290 @@ -127,6 +127,7 @@
QRectF transformRect(const QRectF &rect, const QTransform &transform);
void getItemInstantRelativeGeometry(QGraphicsWidget *item, QRectF &outGeometry, \
QTransform &outRevertTransform);
QRectF geometryRelativeToAbsolute(int itemKey, const QRectF &relative);
+ QRectF predictNewItemGeometry(const QRectF &logicalGeom);
class DesktopLayoutItem
{
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic