diff options
-rw-r--r-- | examples/controls/gallery/gallery.qml | 1 | ||||
-rw-r--r-- | src/imports/controls/doc/images/qtlabscontrols-popup-transformorigin.png | bin | 0 -> 8927 bytes | |||
-rw-r--r-- | src/imports/controls/material/ComboBox.qml | 2 | ||||
-rw-r--r-- | src/imports/controls/material/Menu.qml | 3 | ||||
-rw-r--r-- | src/templates/qquickpopup.cpp | 27 | ||||
-rw-r--r-- | src/templates/qquickpopup_p.h | 12 |
6 files changed, 40 insertions, 5 deletions
diff --git a/examples/controls/gallery/gallery.qml b/examples/controls/gallery/gallery.qml index d40e7f9b..7ccadd06 100644 --- a/examples/controls/gallery/gallery.qml +++ b/examples/controls/gallery/gallery.qml @@ -90,6 +90,7 @@ ApplicationWindow { Menu { id: optionsMenu x: parent.width - width + transformOrigin: Menu.TopRight MenuItem { text: "Settings" diff --git a/src/imports/controls/doc/images/qtlabscontrols-popup-transformorigin.png b/src/imports/controls/doc/images/qtlabscontrols-popup-transformorigin.png Binary files differnew file mode 100644 index 00000000..4af320fb --- /dev/null +++ b/src/imports/controls/doc/images/qtlabscontrols-popup-transformorigin.png diff --git a/src/imports/controls/material/ComboBox.qml b/src/imports/controls/material/ComboBox.qml index b19901fb..2d1e2899 100644 --- a/src/imports/controls/material/ComboBox.qml +++ b/src/imports/controls/material/ComboBox.qml @@ -117,6 +117,7 @@ T.ComboBox { y: control.height implicitWidth: control.width implicitHeight: Math.min(200, listview.contentHeight) + transformOrigin: Item.Top enter: Transition { // grow_fade_in @@ -135,7 +136,6 @@ T.ComboBox { clip: true model: control.delegateModel currentIndex: control.highlightedIndex - transformOrigin: popup.showAbove ? Item.Bottom : Item.Top // ScrollIndicator.vertical: ScrollIndicator { } } diff --git a/src/imports/controls/material/Menu.qml b/src/imports/controls/material/Menu.qml index 6a5c6f61..6dc645a9 100644 --- a/src/imports/controls/material/Menu.qml +++ b/src/imports/controls/material/Menu.qml @@ -48,6 +48,8 @@ T.Menu { implicitHeight: Math.min(background ? background.implicitHeight : 0, contentItem ? contentItem.implicitHeight + topPadding + bottomPadding : 0) + transformOrigin: Item.Top + enter: Transition { // grow_fade_in NumberAnimation { property: "scale"; from: 0.9; to: 1.0; easing.type: Easing.OutQuint; duration: 220 } @@ -63,7 +65,6 @@ T.Menu { //! [contentItem] contentItem: ListView { implicitHeight: contentHeight - transformOrigin: Item.Top model: control.contentModel // TODO: improve this? diff --git a/src/templates/qquickpopup.cpp b/src/templates/qquickpopup.cpp index e613adec..6b226ae8 100644 --- a/src/templates/qquickpopup.cpp +++ b/src/templates/qquickpopup.cpp @@ -545,9 +545,6 @@ void QQuickPopup::open() d->overlay = static_cast<QQuickOverlay *>(applicationWindow->overlay()); d->popupItem->setParentItem(d->overlay); d->positioner.setParentItem(d->parentItem); - // TODO: add Popup::transformOrigin? - if (d->contentItem) - d->popupItem->setTransformOrigin(d->contentItem->transformOrigin()); emit aboutToShow(); d->transitionManager.transitionEnter(); emit visibleChanged(); @@ -1094,6 +1091,30 @@ void QQuickPopup::setVisible(bool visible) } /*! + \qmlproperty enumeration Qt.labs.controls::Popup::transformOrigin + + This property holds the origin point for transformations in enter and exit transitions. + + Nine transform origins are available, as shown in the image below. + The default transform origin is \c Popup.Center. + + \image qtlabscontrols-popup-transformorigin.png + + \sa enter, exit, Item::transformOrigin +*/ +QQuickPopup::TransformOrigin QQuickPopup::transformOrigin() const +{ + Q_D(const QQuickPopup); + return static_cast<TransformOrigin>(d->popupItem->transformOrigin()); +} + +void QQuickPopup::setTransformOrigin(TransformOrigin origin) +{ + Q_D(QQuickPopup); + d->popupItem->setTransformOrigin(static_cast<QQuickItem::TransformOrigin>(origin)); +} + +/*! \qmlproperty Transition Qt.labs.controls::Popup::enter This property holds the transition that is applied to the content item diff --git a/src/templates/qquickpopup_p.h b/src/templates/qquickpopup_p.h index a9094f92..66eae777 100644 --- a/src/templates/qquickpopup_p.h +++ b/src/templates/qquickpopup_p.h @@ -90,6 +90,7 @@ class Q_LABSTEMPLATES_EXPORT QQuickPopup : public QObject, public QQmlParserStat Q_PROPERTY(bool focus READ hasFocus WRITE setFocus NOTIFY focusChanged) Q_PROPERTY(bool modal READ isModal WRITE setModal NOTIFY modalChanged) Q_PROPERTY(bool visible READ isVisible WRITE setVisible NOTIFY visibleChanged) + Q_PROPERTY(TransformOrigin transformOrigin READ transformOrigin WRITE setTransformOrigin) Q_PROPERTY(QQuickTransition *enter READ enter WRITE setEnter NOTIFY enterChanged FINAL) Q_PROPERTY(QQuickTransition *exit READ exit WRITE setExit NOTIFY exitChanged FINAL) Q_CLASSINFO("DefaultProperty", "contentData") @@ -168,6 +169,17 @@ public: bool isVisible() const; void setVisible(bool visible); + // keep in sync with Item.TransformOrigin + enum TransformOrigin { + TopLeft, Top, TopRight, + Left, Center, Right, + BottomLeft, Bottom, BottomRight + }; + Q_ENUM(TransformOrigin) + + TransformOrigin transformOrigin() const; + void setTransformOrigin(TransformOrigin); + QQuickTransition *enter() const; void setEnter(QQuickTransition *transition); |