Warning, /education/gcompris/src/core/ErrorRectangle.qml is written in an unsupported language. File is not indexed.
0001 /* GCompris - ErrorRectangle.qml 0002 * 0003 * SPDX-FileCopyrightText: 2024 Timothée Giet <animtim@gmail.com> 0004 * 0005 * Authors: 0006 * Timothée Giet <animtim@gmail.com> 0007 * 0008 * SPDX-License-Identifier: GPL-3.0-or-later 0009 */ 0010 import QtQuick 2.12 0011 import GCompris 1.0 0012 0013 /** 0014 * A QML component to give wrong answer visual feedback 0015 * 0016 * When using it, think about setting its position, size and radius depending on the context. 0017 * Also set the errorImage size if needed. 0018 * 0019 * Always add it after the components it should overlay in the qml file. 0020 * 0021 * Use startAnimation() to display it on wrong answer. 0022 * 0023 * Redefine locally releaseControls() depending on the variable used to lock controls in the activity. 0024 * 0025 * Redefine locally startAnimation() if you need more actions. 0026 * 0027 * Always call resetState() on level init to avoid issues. 0028 * 0029 * @inherit QtQuick.Rectangle 0030 */ 0031 Rectangle { 0032 id: errorRectangle 0033 width: 0 0034 height: 0 0035 radius: 0 0036 color: "#80808080" 0037 opacity: 0 0038 0039 property alias errorAnimation: errorAnimation 0040 property alias imageSize: errorImage.width 0041 0042 Image { 0043 id: errorImage 0044 anchors.centerIn: parent 0045 source: "qrc:/gcompris/src/core/resource/cross.svg" 0046 width: 30 * ApplicationInfo.ratio 0047 height: width 0048 sourceSize.width: width 0049 sourceSize.height: width 0050 } 0051 SequentialAnimation { 0052 id: errorAnimation 0053 running: false 0054 NumberAnimation { target: errorRectangle; property: "opacity"; to: 1; duration: 200 } 0055 PauseAnimation { duration: 1000 } 0056 NumberAnimation { target: errorRectangle; property: "opacity"; to: 0; duration: 200 } 0057 ScriptAction { script: releaseControls() } 0058 } 0059 function releaseControls() { 0060 return; 0061 } 0062 function startAnimation() { 0063 errorAnimation.restart(); 0064 } 0065 function resetState() { 0066 errorAnimation.stop(); 0067 errorRectangle.opacity = 0; 0068 } 0069 }