[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    branches/KDE/4.3/kdebase/workspace/plasma/containments/desktop
From:       Ambroz Bizjak <ambrop7 () gmail ! com>
Date:       2010-03-19 19:25:50
Message-ID: 20100319192551.AE6D1AC85D () svn ! kde ! org
[Download RAW message or body]

SVN commit 1105294 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.3/kdebase/workspace/plasma/containments/desktop/desktoplayout.cpp \
#1105293:1105294 @@ -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.3/kdebase/workspace/plasma/containments/desktop/desktoplayout.h \
#1105293:1105294 @@ -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