Change in plasma-framework[master]: Consider visualParent rotation in popupPosition
Marco Martin (Code Review)
noreply at kde.org
Thu Apr 2 14:52:24 UTC 2015
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 at kde.org>
+ * Copyright 2015 Marco Martin <mart at 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 at gmail.com>
Gerrit-Reviewer: David Edmundson <david at davidedmundson.co.uk>
Gerrit-Reviewer: Kevin Ottens <ervin at kde.org>
More information about the Plasma-devel
mailing list