linphone-desktop/linphone-app/ui/modules/Linphone/Sticker/Sticker.qml

120 lines
3.3 KiB
QML

import QtQuick 2.7
import QtQuick.Layouts 1.3
import QtGraphicalEffects 1.12
import App.Styles 1.0
import Common 1.0
import Common.Styles 1.0
import Linphone 1.0
import Linphone.Styles 1.0
import 'qrc:/ui/scripts/Utils/utils.js' as Utils
import UtilsCpp 1.0
// A sticker display the avatar or its camera view
// =============================================================================
Item{
id: mainItem
property bool flipped : !deactivateCamera && camera.isReady
property bool showCustomButton: false
property bool showUsername: true
property bool customButtonToggled: false
property QtObject customButtonColorSet: StickerStyle.custom
property alias currentDevice: camera.currentDevice
property alias callModel: camera.callModel
property alias isPaused: camera.isPaused
property alias isPreview: camera.isPreview
property alias showCloseButton: camera.showCloseButton
property alias showActiveSpeakerOverlay: camera.showActiveSpeakerOverlay
property alias isCameraFromDevice: camera.isCameraFromDevice
property alias deactivateCamera: camera.deactivateCamera
property alias image: avatar.image
property alias avatarBackgroundColor: avatar.avatarBackgroundColor
property alias avatarStickerBackgroundColor: avatar.color
property alias avatarRatio: avatar.avatarRatio
property alias showAvatarBorder: avatar.showAvatarBorder
property alias avatarUsername: avatar.avatarUsername
property alias conferenceInfoModel: avatar.conferenceInfoModel
signal videoDefinitionChanged()
signal customButtonClicked()
property alias username: avatar.username
function resetCamera(){
camera.resetCamera()
}
clip:false
state: mainItem.flipped ? 'back' : 'front'
states: [State {
name: "front"
}, State {
name: "back"
}
]
property bool quickTransition : false
property alias cameraOpacity: camera.opacity
transitions: [Transition {
from: 'front'
to: 'back'
SequentialAnimation {
NumberAnimation { target: mainItem; duration: quickTransition ? 0 : 400 }
NumberAnimation { target: camera; property: 'opacity'; to:1.0; duration: 100;}
}
},
Transition {
from: 'back'
to: 'front'
SequentialAnimation {
NumberAnimation { target: mainItem; duration: 0 }
NumberAnimation { target: camera; property: 'opacity'; to:0.0; duration: 100;}
}
}
]
AvatarSticker{
id: avatar
currentDevice: mainItem.currentDevice
callModel: mainItem.callModel
isPaused: mainItem.isPaused
isPreview: mainItem.isPreview
showCloseButton: mainItem.showCloseButton
showActiveSpeakerOverlay: mainItem.showActiveSpeakerOverlay
showUsername: mainItem.showUsername
showCustomButton: mainItem.showCustomButton
customButtonToggled: mainItem.customButtonToggled
customButtonColorSet: mainItem.customButtonColorSet
height: mainItem.height
width: mainItem.width
onCustomButtonClicked: mainItem.customButtonClicked()
}
CameraSticker{
id: camera
height: mainItem.height
width: mainItem.width
opacity: 0.0
username: mainItem.username
showUsername: mainItem.showUsername
showCustomButton: mainItem.showCustomButton
customButtonToggled: mainItem.customButtonToggled
customButtonColorSet: mainItem.customButtonColorSet
onVideoDefinitionChanged: mainItem.videoDefinitionChanged()
onCustomButtonClicked: mainItem.customButtonClicked()
}
}