C

Qt Quick Ultralite perspective_transforms Example

// Copyright (C) 2024 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial

import QtQuick 2.12
import Constants 1.0

Item {
    // Canvas parameters
    property int screenWidth: 800
    property int screenHeight: 480

    // Cover flow (x, y, w, h) on the screen
    property real coverFlowW: screenWidth * 0.75
    property real coverFlowH: screenHeight * 0.75
    property real coverFlowX: (screenWidth - coverFlowW) / 2
    property real coverFlowY: (screenHeight - coverFlowH) / 2

    // Properties related to covers: which one is selected,
    // how many covers are in the model and how big is texture
    property real selectedCover: 0
    property int numberOfCovers: 5
    readonly property int maximumNumberofCovers: 10
    property real coverSize: 128

    // viewDistance, fov, showReflection and reflectionDistance are
    // used in each view
    property real viewDistance: 6
    property real fov: 45
    property bool showReflection: true
    property real reflectionDistance: 270

    // viewAngle, cameraHeight and coverScaling are used in all views
    // except perspective view
    property real viewAngle: -21.0
    property real cameraHeight: -1.2
    property real coverScaling: 0.8

    // Circle view related parameters
    property real circleRadius:  2.5

    // Carousel view related parameters
    property real carouselZ: 3

    // Perspective view related parameters
    property real perspectiveViewCenterZ: 1.0
    property real perspectiveViewCoverDist: 0.3
    property real perspectiveViewCenterDist: 1.4
    property real perspectiveViewMaxRot: 80.0

    // View type and type transition related parameters
    // Morph ratio is used to morph from the
    // previous view (0.0) to the current (new) view (1.0)
    property real morphRatio: 1
    property int currentViewType: CoverFlowType.Carousel
    property int previousViewType: CoverFlowType.Carousel

    NumberAnimation on morphRatio {
        id: morphAnimation
        from: 0.0
        to: 1.0
        duration: 200
    }

    function switchViewType(newType : int){
         previousViewType = currentViewType
         currentViewType = newType
         morphAnimation.start()
    }

    Behavior on selectedCover {
        NumberAnimation { duration: 500 }
    }

    Behavior on cameraHeight {
        NumberAnimation { duration: 200 }
    }

    Behavior on viewAngle {
        NumberAnimation { duration: 200 }
    }
}