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

List:       kde-panel-devel
Subject:    Change in plasma-framework[master]: Consider visualParent rotation in popupPosition
From:       "Marco Martin (Code Review)" <noreply () kde ! org>
Date:       2015-04-02 14:52:24
Message-ID: gerrit.1427986342717.I13a5509d95a7498382155abf3c3d195708de56a6 () gerrit ! vesnicky ! cesnet ! cz
[Download RAW message or body]

Marco Martin has uploaded a new change for review.

  https://gerrit.vesnicky.cesnet.cz/r/438

Change subject: Consider visualParent rotation in popupPosition
......................................................................

Consider visualParent rotation in popupPosition

if there are transforms in the scene, to correctly compute the position the
transform is needed to be accounter for.
QQuickITem::mapRectToScene does consider tranforms.
this adresses bug 345787 where the toolbox may be rotated.

BUG:345787
Change-Id: I13a5509d95a7498382155abf3c3d195708de56a6
---
M src/plasmaquick/dialog.cpp
A tests/dialog_positioning_parentrotated.qml
2 files changed, 102 insertions(+), 5 deletions(-)


  git pull ssh://gerrit.vesnicky.cesnet.cz:29418/plasma-framework \
refs/changes/38/438/1

diff --git a/src/plasmaquick/dialog.cpp b/src/plasmaquick/dialog.cpp
index cdf78eb..2166880 100644
--- a/src/plasmaquick/dialog.cpp
+++ b/src/plasmaquick/dialog.cpp
@@ -829,19 +829,23 @@
     if (outsideParentWindow) {
         parentGeometryBounds = item->window()->geometry();
     } else {
-        parentGeometryBounds = QRect(pos.toPoint(), QSize(item->width(), \
item->height())); +        parentGeometryBounds = \
item->mapRectToScene(item->boundingRect()).toRect(); +        if (item->window()) {
+            parentGeometryBounds.moveTopLeft(item->window()->mapToGlobal(parentGeometryBounds.topLeft()));
 +            pos = parentGeometryBounds.topLeft();
+        }
     }
 
-    const QPoint topPoint(pos.x() + (item->boundingRect().width() - size.width()) / \
2, +    const QPoint topPoint(pos.x() + \
(item->mapRectToScene(item->boundingRect()).width() - size.width()) / 2,  \
                parentGeometryBounds.top() - size.height());
-    const QPoint bottomPoint(pos.x() + (item->boundingRect().width() - size.width()) \
/ 2, +    const QPoint bottomPoint(pos.x() + \
(item->mapRectToScene(item->boundingRect()).width() - size.width()) / 2,  \
parentGeometryBounds.bottom());  
     const QPoint leftPoint(parentGeometryBounds.left() - size.width(),
-                           pos.y() + (item->boundingRect().height() - size.height()) \
/ 2); +                           pos.y() + \
(item->mapRectToScene(item->boundingRect()).height() - size.height()) / 2);  
     const QPoint rightPoint(parentGeometryBounds.right(),
-                            pos.y() + (item->boundingRect().height() - \
size.height()) / 2); +                            pos.y() + \
(item->mapRectToScene(item->boundingRect()).height() - size.height()) / 2);  
     QPoint dialogPos;
     if (d->location == Plasma::Types::TopEdge) {
diff --git a/tests/dialog_positioning_parentrotated.qml \
b/tests/dialog_positioning_parentrotated.qml new file mode 100644
index 0000000..34e95c7
--- /dev/null
+++ b/tests/dialog_positioning_parentrotated.qml
@@ -0,0 +1,93 @@
+/*
+ *   Copyright 2014 Vishesh Handa <vhanda@kde.org>
+ *   Copyright 2015 Marco Martin <mart@kde.org>
+ *
+ *   This program is free software; you can redistribute it and/or modify
+ *   it under the terms of the GNU General Public License as
+ *   published by the Free Software Foundation; either version 2,
+ *   or (at your option) any later version.
+ *
+ *   This program is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details
+ *
+ *   You should have received a copy of the GNU Library General Public
+ *   License along with this program; if not, write to the
+ *   Free Software Foundation, Inc.,
+ *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ */
+
+import QtQuick 2.0
+
+import QtQuick.Controls 1.1 as Controls
+import QtQuick.Layouts 1.1
+
+import org.kde.plasma.core 2.0 as PlasmaCore
+import org.kde.plasma.components 2.0 as PlasmaComponents
+import org.kde.plasma.extras 2.0 as PlasmaExtras
+
+ColumnLayout
+{
+    height: units.gridUnit * 20
+    Controls.Label {
+        id: label
+        text: "Press the buttom and make sure the popup is on the correct place"
+        wrapMode: Text.WordWrap
+    }
+    PlasmaComponents.Button {
+        id: settingsButton
+        iconSource: "configure"
+        text: "Press Me"
+        Layout.alignment: Qt.AlignHCenter
+        rotation: 90
+
+        onClicked: {
+            contextMenu.visible = !contextMenu.visible;
+        }
+    }
+
+    PlasmaCore.Dialog {
+        id: contextMenu
+        visualParent: settingsButton
+
+        location: PlasmaCore.Types.BottomEdge
+        type: PlasmaCore.Dialog.PopupMenu
+        flags: Qt.Popup | Qt.FramelessWindowHint | Qt.WindowDoesNotAcceptFocus
+
+        mainItem: ColumnLayout {
+            id: menuColumn
+            Layout.minimumWidth: menuColumn.implicitWidth
+            Layout.minimumHeight: menuColumn.implicitHeight
+            spacing: units.smallSpacing
+
+            PlasmaExtras.Heading {
+                level: 3
+                text: "Panel Alignment"
+            }
+
+            PlasmaComponents.ButtonColumn {
+                spacing: 0
+                Layout.fillWidth: true
+                PlasmaComponents.ToolButton {
+                    anchors {
+                        left: parent.left
+                        right: parent.right
+                    }
+                    text: "Left"
+                    checkable: true
+                    flat: false
+                }
+                PlasmaComponents.ToolButton {
+                    anchors {
+                        left: parent.left
+                        right: parent.right
+                    }
+                    text: "Center"
+                    checkable: true
+                    flat: false
+                }
+            }
+        }
+    }
+}

-- 
To view, visit https://gerrit.vesnicky.cesnet.cz/r/438
To unsubscribe, visit https://gerrit.vesnicky.cesnet.cz/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I13a5509d95a7498382155abf3c3d195708de56a6
Gerrit-PatchSet: 1
Gerrit-Project: plasma-framework
Gerrit-Branch: master
Gerrit-Owner: Marco Martin <notmart@gmail.com>
Gerrit-Reviewer: David Edmundson <david@davidedmundson.co.uk>
Gerrit-Reviewer: Kevin Ottens <ervin@kde.org>
_______________________________________________
Plasma-devel mailing list
Plasma-devel@kde.org
https://mail.kde.org/mailman/listinfo/plasma-devel


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

Configure | About | News | Add a list | Sponsored by KoreLogic