Warning, /education/gcompris/src/activities/color_mix/ColorMix.qml is written in an unsupported language. File is not indexed.
0001 /* GCompris - colormix.qml 0002 * 0003 * SPDX-FileCopyrightText: 2014 Stephane Mankowski <stephane@mankowski.fr> 0004 * 0005 * Authors: 0006 * Matilda Bernard <serah4291@gmail.com> (GTK+ version) 0007 * Stephane Mankowski <stephane@mankowski.fr> (Qt Quick port) 0008 * 0009 * SPDX-License-Identifier: GPL-3.0-or-later 0010 */ 0011 import QtQuick 2.12 0012 import GCompris 1.0 0013 0014 import "../../core" 0015 import "colormix.js" as Activity 0016 0017 ActivityBase { 0018 id: activity 0019 0020 property bool modeRGB: false 0021 0022 onStart: focus = true 0023 onStop: { 0024 0025 } 0026 0027 pageComponent: Image { 0028 id: background 0029 source: Activity.url + (modeRGB ? "background.svg" : "background2.svg") 0030 sourceSize.width: width 0031 sourceSize.height: height 0032 anchors.fill: parent 0033 fillMode: Image.PreserveAspectCrop 0034 0035 signal start 0036 signal stop 0037 0038 Component.onCompleted: { 0039 activity.start.connect(start) 0040 activity.stop.connect(stop) 0041 } 0042 0043 // Add here the QML items you need to access in javascript 0044 QtObject { 0045 id: items 0046 property Item main: activity.main 0047 property alias background: background 0048 property int currentLevel: activity.currentLevel 0049 property alias bonus: bonus 0050 property alias score: score 0051 property bool buttonsBlocked: false 0052 property int maxSteps: 1 0053 property int targetColor1: 0 0054 property int targetColor2: 0 0055 property int targetColor3: 0 0056 property alias currentColor1: color1.currentStep 0057 property alias currentColor2: color2.currentStep 0058 property alias currentColor3: color3.currentStep 0059 property int margins: 20 0060 property int chooserHeight: Math.min(background.height * 0.2, 0061 background.width * 0.2) 0062 } 0063 0064 onStart: { 0065 Activity.start(items) 0066 } 0067 onStop: { 0068 Activity.stop() 0069 } 0070 0071 Rectangle { 0072 id: target 0073 height: width / 2.5 0074 width: parent.width / 5 0075 radius: height / 10 0076 anchors { 0077 top: parent.top 0078 topMargin: items.margins 0079 horizontalCenter: parent.horizontalCenter 0080 } 0081 border.color: "#2a2a2a" 0082 border.width: 0 0083 color: Activity.getColor(items.targetColor1, items.targetColor2, 0084 items.targetColor3) 0085 } 0086 0087 GCText { 0088 text: qsTr("Match the color") 0089 color: "#2a2a2a" 0090 horizontalAlignment: Text.AlignRight 0091 wrapMode: Text.WordWrap 0092 fontSizeMode: Text.Fit 0093 anchors { 0094 top: target.top 0095 right: target.left 0096 left: parent.left 0097 rightMargin: items.margins 0098 } 0099 } 0100 0101 GCText { 0102 id: helpMessage 0103 text: "" 0104 fontSizeMode: Text.Fit 0105 horizontalAlignment: Text.AlignLeft 0106 wrapMode: Text.WordWrap 0107 anchors { 0108 top: target.top 0109 left: target.right 0110 right: parent.right 0111 leftMargin: items.margins 0112 bottom: result.top 0113 } 0114 } 0115 Rectangle { 0116 id: result 0117 height: width 0118 width: Math.min(target.width * 0.75, 90 * ApplicationInfo.ratio) 0119 radius: height / 2 0120 0121 anchors { 0122 horizontalCenter: parent.horizontalCenter 0123 top: target.bottom 0124 topMargin: (background.height - items.chooserHeight * 4) / 3 0125 } 0126 border.color: "#2a2a2a" 0127 border.width: 0 0128 color: Activity.getColor(items.currentColor1, items.currentColor2, 0129 items.currentColor3) 0130 } 0131 0132 ColorChooser { 0133 id: color1 0134 brushHue: activity.modeRGB ? "-r" : "-m" /* red / magenta */ 0135 source: Activity.url + (activity.modeRGB ? "flashlight-red.svg" : "tube-magenta.svg") 0136 sourceSize.height: items.chooserHeight 0137 maxSteps: items.maxSteps 0138 anchors { 0139 right: result.left 0140 rightMargin: items.margins 0141 verticalCenter: result.verticalCenter 0142 } 0143 } 0144 0145 ColorChooser { 0146 id: color2 0147 brushHue: activity.modeRGB ? "-g" : "-y" /* green / yellow */ 0148 source: Activity.url + (activity.modeRGB ? "flashlight-green.svg" : "tube-yellow.svg") 0149 sourceSize.height: items.chooserHeight 0150 maxSteps: items.maxSteps 0151 anchors { 0152 horizontalCenter: result.horizontalCenter 0153 top: result.bottom 0154 topMargin: items.margins + width / 2 - height / 2 0155 } 0156 rotation: -90 0157 } 0158 0159 ColorChooser { 0160 id: color3 0161 brushHue: activity.modeRGB ? "-b" : "-c" /* blue / cyan */ 0162 source: Activity.url + (activity.modeRGB ? "flashlight-blue.svg" : "tube-cyan.svg") 0163 sourceSize.height: items.chooserHeight 0164 maxSteps: items.maxSteps 0165 anchors { 0166 left: result.right 0167 leftMargin: items.margins 0168 verticalCenter: result.verticalCenter 0169 } 0170 rotation: 180 0171 } 0172 0173 Score { 0174 id: score 0175 y: parent.height * 0.65 0176 anchors.left: parent.left 0177 anchors.right: undefined 0178 anchors.bottom: undefined 0179 currentSubLevel: 0 0180 numberOfSubLevels: 10 0181 onStop: Activity.nextSubLevel() 0182 } 0183 0184 BarButton { 0185 id: validate 0186 source: "qrc:/gcompris/src/core/resource/bar_ok.svg" 0187 sourceSize.width: 66 * bar.barZoom 0188 visible: true 0189 enabled: !items.buttonsBlocked 0190 anchors { 0191 right: parent.right 0192 rightMargin: items.margins 0193 top: color3.bottom 0194 topMargin: items.margins 0195 } 0196 onClicked: { 0197 var message = "" 0198 if (activity.modeRGB) { 0199 /* check RGB */ 0200 if (items.currentColor1 < items.targetColor1) 0201 message += qsTr("Not enough red") + "\n" 0202 else if (items.currentColor1 > items.targetColor1) 0203 message += qsTr("Too much red") + "\n" 0204 0205 if (items.currentColor2 < items.targetColor2) 0206 message += qsTr("Not enough green") + "\n" 0207 else if (items.currentColor2 > items.targetColor2) 0208 message += qsTr("Too much green") + "\n" 0209 0210 if (items.currentColor3 < items.targetColor3) 0211 message += qsTr("Not enough blue") + "\n" 0212 else if (items.currentColor3 > items.targetColor3) 0213 message += qsTr("Too much blue") + "\n" 0214 } else { 0215 /* check MCY */ 0216 if (items.currentColor1 < items.targetColor1) 0217 message += qsTr("Not enough magenta") + "\n" 0218 else if (items.currentColor1 > items.targetColor1) 0219 message += qsTr("Too much magenta") + "\n" 0220 0221 if (items.currentColor2 < items.targetColor2) 0222 message += qsTr("Not enough yellow") + "\n" 0223 else if (items.currentColor2 > items.targetColor2) 0224 message += qsTr("Too much yellow") + "\n" 0225 0226 if (items.currentColor3 < items.targetColor3) 0227 message += qsTr("Not enough cyan") + "\n" 0228 else if (items.currentColor3 > items.targetColor3) 0229 message += qsTr("Too much cyan") + "\n" 0230 } 0231 helpMessage.text = message 0232 0233 if (message === "") { 0234 items.buttonsBlocked = true 0235 items.score.currentSubLevel += 1 0236 items.score.playWinAnimation() 0237 activity.audioEffects.play("qrc:/gcompris/src/core/resource/sounds/completetask.wav") 0238 helpMessage.text = "" 0239 } 0240 } 0241 } 0242 0243 DialogHelp { 0244 id: dialogHelp 0245 onClose: home() 0246 } 0247 0248 Bar { 0249 id: bar 0250 level: items.currentLevel + 1 0251 content: BarEnumContent { 0252 value: help | home | level 0253 } 0254 onHelpClicked: { 0255 displayDialog(dialogHelp) 0256 } 0257 onPreviousLevelClicked: Activity.previousLevel() 0258 onNextLevelClicked: Activity.nextLevel() 0259 onHomeClicked: activity.home() 0260 } 0261 0262 Bonus { 0263 id: bonus 0264 Component.onCompleted: win.connect(Activity.nextLevel) 0265 } 0266 } 0267 }