Warning, /education/gcompris/src/activities/letter-in-word/Card.qml is written in an unsupported language. File is not indexed.

0001 /* GCompris - Card.qml
0002  *
0003  * SPDX-FileCopyrightText: 2016 Akshat Tandon <akshat.tandon@research.iiit.ac.in>
0004  *               2020 Timothée Giet <animtim@gmail.com>
0005  *
0006  * Authors:
0007  *   Akshat Tandon <akshat.tandon@research.iiit.ac.in>
0008  *   Timothée Giet <animtim@gmail.com>
0009  *
0010  *   SPDX-License-Identifier: GPL-3.0-or-later
0011  */
0012 
0013 import QtQuick 2.12
0014 import GCompris 1.0
0015 import QtGraphicalEffects 1.0
0016 import "../../core"
0017 import "letter-in-word.js" as Activity
0018 
0019 Rectangle {
0020     id: cardItem
0021     property bool mouseActive: true
0022     color: "#01FFFFFF"  //setting the base as not totally transparent rectangle avoids the bug of randomly overlapping images when highlight moves
0023 
0024     Image {
0025         id: wordPic
0026         width: cardItem.width * 0.8
0027         height: width
0028         anchors.top: parent.top
0029         anchors.horizontalCenter: parent.horizontalCenter
0030         sourceSize.width: width
0031         fillMode: Image.PreserveAspectFit
0032         source: imgurl
0033     }
0034 
0035     Rectangle {
0036         width: cardBg.width + 10 * ApplicationInfo.ratio
0037         height: cardBg.height + 10 * ApplicationInfo.ratio
0038         radius: 15 * ApplicationInfo.ratio
0039         color: "#00000000"
0040         border.width: 5 * ApplicationInfo.ratio + 1 // +1 to avoid subpixel holes around cardBg
0041         border.color: "#E77936"
0042         anchors.centerIn: cardBg
0043         visible: selected
0044     }
0045 
0046     Rectangle {
0047         id: cardBg
0048         anchors.horizontalCenter: parent.horizontalCenter
0049         anchors.bottom: parent.bottom
0050         width: wordPic.width
0051         height: wordPic.height * 0.5
0052         radius: 10 * ApplicationInfo.ratio
0053         color: "#E0FFFFFF"
0054 
0055         GCText {
0056             id: textItem
0057             text: spelling
0058             font.pointSize: NaN  // need to clear font.pointSize explicitly
0059             fontSizeMode: Text.Fit
0060             minimumPixelSize: 10
0061             font.pixelSize: cardBg.width * 0.30
0062             font.bold: true
0063             style: Text.Outline
0064             width: cardBg.width
0065             height: cardBg.height
0066             wrapMode: spelling.indexOf(' ') === -1 ? Text.WrapAnywhere : Text.WordWrap
0067             verticalAlignment: Text.AlignVCenter
0068             horizontalAlignment: Text.AlignHCenter
0069             styleColor: "white"
0070         }
0071     }
0072 
0073     MouseArea {
0074         id: mouseArea
0075         anchors.fill: parent
0076         hoverEnabled: ApplicationInfo.isMobile ? false : true
0077         onClicked: {
0078             select();
0079         }
0080     }
0081 
0082     SequentialAnimation {
0083         id: selectAnimation
0084         NumberAnimation {
0085             target: cardItem
0086             easing.type: Easing.InOutQuad
0087             property: "rotation"
0088             to: 20; duration: 250
0089         }
0090         NumberAnimation {
0091             target: cardItem
0092             easing.type: Easing.InOutQuad
0093             property: "rotation"; to: -20
0094             duration: 500
0095         }
0096         NumberAnimation {
0097             target: cardItem
0098             easing.type: Easing.InOutQuad
0099             property: "rotation"
0100             to: 0
0101             duration: 250
0102         }
0103     }
0104 
0105     function playWord() {
0106         var locale = ApplicationInfo.getVoicesLocale(items.locale)
0107         activity.audioVoices.append(
0108              ApplicationInfo.getAudioFilePathForLocale(voice, locale))
0109     }
0110 
0111     function select() {
0112         if(mouseActive) {
0113             if(Activity.checkWord(index)) {
0114                 selectAnimation.restart();
0115                 if(selected)
0116                     playWord();
0117             }
0118         }
0119     }
0120 }