2023-11-14 19:33:02 +00:00
|
|
|
// Copyright (C) 2023 The Qt Company Ltd.
|
2024-02-22 14:51:16 +00:00
|
|
|
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
|
2023-11-14 19:33:02 +00:00
|
|
|
|
|
|
|
import QtQuick
|
|
|
|
import QtQuick.Window
|
|
|
|
import QtQuick.Controls
|
|
|
|
|
|
|
|
Window {
|
|
|
|
id: window
|
|
|
|
width: 640
|
|
|
|
height: 480
|
|
|
|
visible: true
|
|
|
|
|
|
|
|
Rectangle {
|
|
|
|
anchors.fill: parent
|
|
|
|
gradient: Gradient {
|
|
|
|
GradientStop { position: 0.0; color: "white" }
|
|
|
|
GradientStop { position: 1.0; color: "black" }
|
|
|
|
}
|
|
|
|
Text {
|
|
|
|
anchors.centerIn: parent
|
|
|
|
text: "Screen orientation: " + orientationName(Screen.orientation) + "\n" +
|
|
|
|
"Content orientation: " + orientationName(window.contentOrientation)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
Row {
|
|
|
|
Button {
|
|
|
|
text: "Toggle"
|
|
|
|
onClicked: popup.visible ? popup.close() : popup.open()
|
|
|
|
focus: true
|
|
|
|
}
|
|
|
|
ComboBox {
|
|
|
|
id: orientationSelection
|
|
|
|
model: ListModel {
|
|
|
|
ListElement {
|
|
|
|
name: "Primary"
|
|
|
|
value: Qt.PrimaryOrientation
|
|
|
|
}
|
|
|
|
ListElement {
|
|
|
|
name: "Portrait"
|
|
|
|
value: Qt.PortraitOrientation
|
|
|
|
}
|
|
|
|
ListElement {
|
|
|
|
name: "Landscape"
|
|
|
|
value: Qt.LandscapeOrientation
|
|
|
|
}
|
|
|
|
ListElement {
|
|
|
|
name: "Inverted Portrait"
|
|
|
|
value: Qt.InvertedPortraitOrientation
|
|
|
|
}
|
|
|
|
ListElement {
|
|
|
|
name: "Inverted Landscape"
|
|
|
|
value: Qt.InvertedLandscapeOrientation
|
|
|
|
}
|
|
|
|
}
|
|
|
|
textRole: "name"
|
|
|
|
valueRole: "value"
|
|
|
|
|
|
|
|
onActivated: updateOrientation()
|
|
|
|
}
|
|
|
|
Keys.onLeftPressed: (event) => {
|
|
|
|
window.contentItem.rotation -= event.modifiers & Qt.ShiftModifier ? 10 : 1;
|
|
|
|
}
|
|
|
|
Keys.onRightPressed: (event) => {
|
|
|
|
window.contentItem.rotation += event.modifiers & Qt.ShiftModifier ? 10 : 1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
Popup {
|
|
|
|
id: popup
|
|
|
|
anchors.centerIn: parent
|
|
|
|
width: 320
|
|
|
|
height: 240
|
|
|
|
modal: false
|
|
|
|
dim: true
|
|
|
|
Text {
|
|
|
|
text: "Hello Popup"
|
|
|
|
anchors.fill: parent
|
|
|
|
}
|
|
|
|
|
|
|
|
Overlay.modeless: Rectangle {
|
|
|
|
opacity: 0.5
|
|
|
|
color: "blue"
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
Drawer {
|
|
|
|
Text {
|
|
|
|
anchors.centerIn: parent
|
|
|
|
text: "Hello Left Drawer"
|
|
|
|
}
|
|
|
|
edge: Qt.LeftEdge
|
|
|
|
height: parent.height
|
|
|
|
}
|
|
|
|
Drawer {
|
|
|
|
Text {
|
|
|
|
anchors.centerIn: parent
|
|
|
|
text: "Hello Right Drawer"
|
|
|
|
}
|
|
|
|
edge: Qt.RightEdge
|
|
|
|
height: parent.height
|
|
|
|
}
|
|
|
|
|
|
|
|
function updateOrientation() {
|
|
|
|
window.contentOrientation = orientationSelection.currentValue;
|
|
|
|
let angle = Screen.angleBetween(Screen.orientation, window.contentOrientation);
|
|
|
|
console.log("Rotation between " + Screen.orientation + " and " + window.contentOrientation + " should be " + angle);
|
|
|
|
window.contentItem.rotation = angle;
|
|
|
|
}
|
|
|
|
|
|
|
|
function orientationName(orientation) {
|
|
|
|
for (let i = 0; i < orientationSelection.model.count; i++) {
|
|
|
|
let entry = orientationSelection.model.get(i);
|
|
|
|
if (entry.value === orientation)
|
|
|
|
return entry.name
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
Component.onCompleted: {
|
|
|
|
Screen.orientationChanged.connect(updateOrientation);
|
|
|
|
updateOrientation();
|
|
|
|
}
|
|
|
|
}
|