summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--experimental/qt5-intro-android/Button.qml78
-rw-r--r--experimental/qt5-intro-android/CameraSlide.qml92
-rw-r--r--experimental/qt5-intro-android/CanvasSlide.qml161
-rw-r--r--experimental/qt5-intro-android/DemoMain.qml139
-rw-r--r--experimental/qt5-intro-android/EffectsSlide.qml203
-rw-r--r--experimental/qt5-intro-android/ExamplesSlide.qml93
-rw-r--r--experimental/qt5-intro-android/FontSlide.qml98
-rw-r--r--experimental/qt5-intro-android/NoisyGradient.qml92
-rw-r--r--experimental/qt5-intro-android/NormalMapGenerator.qml92
-rw-r--r--experimental/qt5-intro-android/OpacityTransitionPresentation.qml104
-rw-r--r--experimental/qt5-intro-android/ParticleSlide.qml86
-rw-r--r--experimental/qt5-intro-android/README51
-rw-r--r--experimental/qt5-intro-android/ShaderSlide.qml197
-rw-r--r--experimental/qt5-intro-android/SlideDeck.qml245
-rw-r--r--experimental/qt5-intro-android/Swirl.qml116
-rw-r--r--experimental/qt5-intro-android/VideoSlide.qml122
-rw-r--r--experimental/qt5-intro-android/WebKitSlideContent.qml84
-rw-r--r--experimental/qt5-intro-android/WebkitSlide.qml19
-rw-r--r--experimental/qt5-intro-android/WidgetsSlide.qml152
-rw-r--r--experimental/qt5-intro-android/android.pro154
-rw-r--r--experimental/qt5-intro-android/android/AndroidManifest.xml38
-rw-r--r--experimental/qt5-intro-android/android/res/drawable-hdpi/icon.pngbin0 -> 4627 bytes
-rw-r--r--experimental/qt5-intro-android/android/res/drawable-ldpi/icon.pngbin0 -> 2156 bytes
-rw-r--r--experimental/qt5-intro-android/android/res/drawable-mdpi/icon.pngbin0 -> 2464 bytes
-rw-r--r--experimental/qt5-intro-android/android/res/values/libs.xml13
-rw-r--r--experimental/qt5-intro-android/android/res/values/strings.xml7
-rw-r--r--experimental/qt5-intro-android/android/version.xml8
-rw-r--r--experimental/qt5-intro-android/calqlatr/Calqlatr.qml110
-rw-r--r--experimental/qt5-intro-android/calqlatr/content/Button.qml80
-rw-r--r--experimental/qt5-intro-android/calqlatr/content/Display.qml124
-rw-r--r--experimental/qt5-intro-android/calqlatr/content/NumberPad.qml69
-rw-r--r--experimental/qt5-intro-android/calqlatr/content/StyleLabel.qml50
-rw-r--r--experimental/qt5-intro-android/calqlatr/content/audio/touch.wavbin0 -> 950 bytes
-rw-r--r--experimental/qt5-intro-android/calqlatr/content/calculator.js143
-rw-r--r--experimental/qt5-intro-android/calqlatr/content/images/icon-back.pngbin0 -> 328 bytes
-rw-r--r--experimental/qt5-intro-android/calqlatr/content/images/icon-close.pngbin0 -> 488 bytes
-rw-r--r--experimental/qt5-intro-android/calqlatr/content/images/icon-settings.pngbin0 -> 503 bytes
-rw-r--r--experimental/qt5-intro-android/calqlatr/content/images/logo.pngbin0 -> 5950 bytes
-rw-r--r--experimental/qt5-intro-android/calqlatr/content/images/paper-edge-left.pngbin0 -> 12401 bytes
-rw-r--r--experimental/qt5-intro-android/calqlatr/content/images/paper-edge-right.pngbin0 -> 12967 bytes
-rw-r--r--experimental/qt5-intro-android/calqlatr/content/images/paper-grip.pngbin0 -> 298 bytes
-rw-r--r--experimental/qt5-intro-android/calqlatr/content/images/settings-selected-a.pngbin0 -> 2326 bytes
-rw-r--r--experimental/qt5-intro-android/calqlatr/content/images/settings-selected-b.pngbin0 -> 2334 bytes
-rw-r--r--experimental/qt5-intro-android/calqlatr/content/images/touch-green.pngbin0 -> 4808 bytes
-rw-r--r--experimental/qt5-intro-android/calqlatr/content/images/touch-white.pngbin0 -> 4601 bytes
-rw-r--r--experimental/qt5-intro-android/demo.qmlproject18
-rw-r--r--experimental/qt5-intro-android/description.txt6
-rw-r--r--experimental/qt5-intro-android/images/ally.pngbin0 -> 1907941 bytes
-rw-r--r--experimental/qt5-intro-android/images/butterfly.pngbin0 -> 18668 bytes
-rw-r--r--experimental/qt5-intro-android/images/displace.pngbin0 -> 20269 bytes
-rw-r--r--experimental/qt5-intro-android/images/fog.pngbin0 -> 225653 bytes
-rw-r--r--experimental/qt5-intro-android/images/particle.pngbin0 -> 861 bytes
-rw-r--r--experimental/qt5-intro-android/images/qt-logo-hdpi.pngbin0 -> 4627 bytes
-rw-r--r--experimental/qt5-intro-android/images/qt-logo-ldpi.pngbin0 -> 2156 bytes
-rw-r--r--experimental/qt5-intro-android/images/qt-logo-mdpi.pngbin0 -> 2464 bytes
-rw-r--r--experimental/qt5-intro-android/images/qt-logo.pngbin0 -> 34605 bytes
-rw-r--r--experimental/qt5-intro-android/images/widgets_boxes.pngbin0 -> 589779 bytes
-rw-r--r--experimental/qt5-intro-android/images/widgets_chips.pngbin0 -> 211342 bytes
-rw-r--r--experimental/qt5-intro-android/images/widgets_mainwindows.pngbin0 -> 95685 bytes
-rw-r--r--experimental/qt5-intro-android/images/widgets_styles_fusion.pngbin0 -> 65678 bytes
-rw-r--r--experimental/qt5-intro-android/images/widgets_styles_macstyle.pngbin0 -> 70514 bytes
-rw-r--r--experimental/qt5-intro-android/main.cpp33
-rw-r--r--experimental/qt5-intro-android/main.qml63
-rw-r--r--experimental/qt5-intro-android/main.qrc203
-rw-r--r--experimental/qt5-intro-android/main_hifi.qml43
-rw-r--r--experimental/qt5-intro-android/maroon/Maroon.qml233
-rw-r--r--experimental/qt5-intro-android/maroon/content/BuildButton.qml90
-rw-r--r--experimental/qt5-intro-android/maroon/content/GameCanvas.qml240
-rw-r--r--experimental/qt5-intro-android/maroon/content/GameOverScreen.qml115
-rw-r--r--experimental/qt5-intro-android/maroon/content/InfoBar.qml84
-rw-r--r--experimental/qt5-intro-android/maroon/content/NewGameScreen.qml111
-rw-r--r--experimental/qt5-intro-android/maroon/content/SoundEffect.qml53
-rw-r--r--experimental/qt5-intro-android/maroon/content/audio/bomb-action.wavbin0 -> 20972 bytes
-rw-r--r--experimental/qt5-intro-android/maroon/content/audio/catch-action.wavbin0 -> 13274 bytes
-rw-r--r--experimental/qt5-intro-android/maroon/content/audio/catch.wavbin0 -> 8638 bytes
-rw-r--r--experimental/qt5-intro-android/maroon/content/audio/currency.wavbin0 -> 15790 bytes
-rw-r--r--experimental/qt5-intro-android/maroon/content/audio/factory-action.wavbin0 -> 4936 bytes
-rw-r--r--experimental/qt5-intro-android/maroon/content/audio/melee-action.wavbin0 -> 17798 bytes
-rw-r--r--experimental/qt5-intro-android/maroon/content/audio/projectile-action.wavbin0 -> 2562 bytes
-rw-r--r--experimental/qt5-intro-android/maroon/content/audio/shooter-action.wavbin0 -> 27554 bytes
-rw-r--r--experimental/qt5-intro-android/maroon/content/gfx/background.pngbin0 -> 5802 bytes
-rw-r--r--experimental/qt5-intro-android/maroon/content/gfx/bomb-action.pngbin0 -> 23974 bytes
-rw-r--r--experimental/qt5-intro-android/maroon/content/gfx/bomb-idle.pngbin0 -> 12238 bytes
-rw-r--r--experimental/qt5-intro-android/maroon/content/gfx/bomb.pngbin0 -> 4067 bytes
-rw-r--r--experimental/qt5-intro-android/maroon/content/gfx/button-help.pngbin0 -> 8916 bytes
-rw-r--r--experimental/qt5-intro-android/maroon/content/gfx/button-play.pngbin0 -> 13945 bytes
-rw-r--r--experimental/qt5-intro-android/maroon/content/gfx/catch-action.pngbin0 -> 6760 bytes
-rw-r--r--experimental/qt5-intro-android/maroon/content/gfx/catch.pngbin0 -> 4771 bytes
-rw-r--r--experimental/qt5-intro-android/maroon/content/gfx/cloud.pngbin0 -> 3398 bytes
-rw-r--r--experimental/qt5-intro-android/maroon/content/gfx/currency.pngbin0 -> 1889 bytes
-rw-r--r--experimental/qt5-intro-android/maroon/content/gfx/dialog-bomb.pngbin0 -> 3751 bytes
-rw-r--r--experimental/qt5-intro-android/maroon/content/gfx/dialog-factory.pngbin0 -> 3946 bytes
-rw-r--r--experimental/qt5-intro-android/maroon/content/gfx/dialog-melee.pngbin0 -> 4392 bytes
-rw-r--r--experimental/qt5-intro-android/maroon/content/gfx/dialog-pointer.pngbin0 -> 911 bytes
-rw-r--r--experimental/qt5-intro-android/maroon/content/gfx/dialog-shooter.pngbin0 -> 3737 bytes
-rw-r--r--experimental/qt5-intro-android/maroon/content/gfx/dialog.pngbin0 -> 3362 bytes
-rw-r--r--experimental/qt5-intro-android/maroon/content/gfx/factory-action.pngbin0 -> 22440 bytes
-rw-r--r--experimental/qt5-intro-android/maroon/content/gfx/factory-idle.pngbin0 -> 12729 bytes
-rw-r--r--experimental/qt5-intro-android/maroon/content/gfx/factory.pngbin0 -> 4138 bytes
-rw-r--r--experimental/qt5-intro-android/maroon/content/gfx/grid.pngbin0 -> 2830 bytes
-rw-r--r--experimental/qt5-intro-android/maroon/content/gfx/help.pngbin0 -> 38255 bytes
-rw-r--r--experimental/qt5-intro-android/maroon/content/gfx/lifes.pngbin0 -> 1675 bytes
-rw-r--r--experimental/qt5-intro-android/maroon/content/gfx/logo-bubble.pngbin0 -> 7706 bytes
-rw-r--r--experimental/qt5-intro-android/maroon/content/gfx/logo-fish.pngbin0 -> 3477 bytes
-rw-r--r--experimental/qt5-intro-android/maroon/content/gfx/logo.pngbin0 -> 18332 bytes
-rw-r--r--experimental/qt5-intro-android/maroon/content/gfx/melee-action.pngbin0 -> 7797 bytes
-rw-r--r--experimental/qt5-intro-android/maroon/content/gfx/melee-idle.pngbin0 -> 22832 bytes
-rw-r--r--experimental/qt5-intro-android/maroon/content/gfx/melee.pngbin0 -> 4046 bytes
-rw-r--r--experimental/qt5-intro-android/maroon/content/gfx/mob-idle.pngbin0 -> 6181 bytes
-rw-r--r--experimental/qt5-intro-android/maroon/content/gfx/mob.pngbin0 -> 2391 bytes
-rw-r--r--experimental/qt5-intro-android/maroon/content/gfx/points.pngbin0 -> 1561 bytes
-rw-r--r--experimental/qt5-intro-android/maroon/content/gfx/projectile-action.pngbin0 -> 6257 bytes
-rw-r--r--experimental/qt5-intro-android/maroon/content/gfx/projectile.pngbin0 -> 801 bytes
-rw-r--r--experimental/qt5-intro-android/maroon/content/gfx/scores.pngbin0 -> 1535 bytes
-rw-r--r--experimental/qt5-intro-android/maroon/content/gfx/shooter-action.pngbin0 -> 18121 bytes
-rw-r--r--experimental/qt5-intro-android/maroon/content/gfx/shooter-idle.pngbin0 -> 11929 bytes
-rw-r--r--experimental/qt5-intro-android/maroon/content/gfx/shooter.pngbin0 -> 4137 bytes
-rw-r--r--experimental/qt5-intro-android/maroon/content/gfx/sunlight.pngbin0 -> 248412 bytes
-rw-r--r--experimental/qt5-intro-android/maroon/content/gfx/text-1.pngbin0 -> 2777 bytes
-rw-r--r--experimental/qt5-intro-android/maroon/content/gfx/text-2.pngbin0 -> 4959 bytes
-rw-r--r--experimental/qt5-intro-android/maroon/content/gfx/text-3.pngbin0 -> 5063 bytes
-rw-r--r--experimental/qt5-intro-android/maroon/content/gfx/text-blank.pngbin0 -> 1326 bytes
-rw-r--r--experimental/qt5-intro-android/maroon/content/gfx/text-gameover.pngbin0 -> 1515 bytes
-rw-r--r--experimental/qt5-intro-android/maroon/content/gfx/text-go.pngbin0 -> 4230 bytes
-rw-r--r--experimental/qt5-intro-android/maroon/content/gfx/wave.pngbin0 -> 2763 bytes
-rw-r--r--experimental/qt5-intro-android/maroon/content/logic.js264
-rw-r--r--experimental/qt5-intro-android/maroon/content/mobs/MobBase.qml262
-rw-r--r--experimental/qt5-intro-android/maroon/content/towers/Bomb.qml133
-rw-r--r--experimental/qt5-intro-android/maroon/content/towers/Factory.qml114
-rw-r--r--experimental/qt5-intro-android/maroon/content/towers/Melee.qml83
-rw-r--r--experimental/qt5-intro-android/maroon/content/towers/Ranged.qml128
-rw-r--r--experimental/qt5-intro-android/maroon/content/towers/TowerBase.qml72
-rw-r--r--experimental/qt5-intro-android/particles/customemitter.qml91
-rw-r--r--experimental/qt5-intro-android/particles/emitmask.qml76
-rw-r--r--experimental/qt5-intro-android/particles/particle.pngbin0 -> 861 bytes
-rw-r--r--experimental/qt5-intro-android/particles/particle4.pngbin0 -> 1799 bytes
-rw-r--r--experimental/qt5-intro-android/particles/star.pngbin0 -> 1550 bytes
-rw-r--r--experimental/qt5-intro-android/particles/starfish_mask.pngbin0 -> 11301 bytes
-rw-r--r--experimental/qt5-intro-android/particles/velocityfrommotion.qml305
-rw-r--r--experimental/qt5-intro-android/presentation/Clock.qml77
-rw-r--r--experimental/qt5-intro-android/presentation/CodeSlide.qml162
-rw-r--r--experimental/qt5-intro-android/presentation/Presentation.qml215
-rw-r--r--experimental/qt5-intro-android/presentation/Slide.qml192
-rw-r--r--experimental/qt5-intro-android/presentation/SlideCounter.qml61
-rw-r--r--experimental/qt5-intro-android/preview_l.jpgbin0 -> 16252 bytes
-rw-r--r--experimental/qt5-intro-android/samegame/Samegame.qml371
-rw-r--r--experimental/qt5-intro-android/samegame/content/Block.qml114
-rw-r--r--experimental/qt5-intro-android/samegame/content/BlockEmitter.qml57
-rw-r--r--experimental/qt5-intro-android/samegame/content/Button.qml70
-rw-r--r--experimental/qt5-intro-android/samegame/content/GameArea.qml226
-rw-r--r--experimental/qt5-intro-android/samegame/content/LogoAnimation.qml102
-rw-r--r--experimental/qt5-intro-android/samegame/content/MenuEmitter.qml53
-rw-r--r--experimental/qt5-intro-android/samegame/content/PaintEmitter.qml98
-rw-r--r--experimental/qt5-intro-android/samegame/content/PrimaryPack.qml122
-rw-r--r--experimental/qt5-intro-android/samegame/content/PuzzleBlock.qml111
-rw-r--r--experimental/qt5-intro-android/samegame/content/SamegameText.qml49
-rw-r--r--experimental/qt5-intro-android/samegame/content/SimpleBlock.qml108
-rw-r--r--experimental/qt5-intro-android/samegame/content/SmokeText.qml83
-rw-r--r--experimental/qt5-intro-android/samegame/content/gfx/background-puzzle.pngbin0 -> 86666 bytes
-rw-r--r--experimental/qt5-intro-android/samegame/content/gfx/background.pngbin0 -> 101018 bytes
-rw-r--r--experimental/qt5-intro-android/samegame/content/gfx/bar.pngbin0 -> 10970 bytes
-rw-r--r--experimental/qt5-intro-android/samegame/content/gfx/blue-puzzle.pngbin0 -> 2219 bytes
-rw-r--r--experimental/qt5-intro-android/samegame/content/gfx/blue.pngbin0 -> 1018 bytes
-rw-r--r--experimental/qt5-intro-android/samegame/content/gfx/bubble-highscore.pngbin0 -> 2276 bytes
-rw-r--r--experimental/qt5-intro-android/samegame/content/gfx/bubble-puzzle.pngbin0 -> 2811 bytes
-rw-r--r--experimental/qt5-intro-android/samegame/content/gfx/but-game-1.pngbin0 -> 2728 bytes
-rw-r--r--experimental/qt5-intro-android/samegame/content/gfx/but-game-2.pngbin0 -> 3378 bytes
-rw-r--r--experimental/qt5-intro-android/samegame/content/gfx/but-game-3.pngbin0 -> 1423 bytes
-rw-r--r--experimental/qt5-intro-android/samegame/content/gfx/but-game-4.pngbin0 -> 2096 bytes
-rw-r--r--experimental/qt5-intro-android/samegame/content/gfx/but-game-new.pngbin0 -> 3662 bytes
-rw-r--r--experimental/qt5-intro-android/samegame/content/gfx/but-menu.pngbin0 -> 2391 bytes
-rw-r--r--experimental/qt5-intro-android/samegame/content/gfx/but-puzzle-next.pngbin0 -> 3658 bytes
-rw-r--r--experimental/qt5-intro-android/samegame/content/gfx/but-quit.pngbin0 -> 2100 bytes
-rw-r--r--experimental/qt5-intro-android/samegame/content/gfx/green-puzzle.pngbin0 -> 2271 bytes
-rw-r--r--experimental/qt5-intro-android/samegame/content/gfx/green.pngbin0 -> 1024 bytes
-rw-r--r--experimental/qt5-intro-android/samegame/content/gfx/icon-fail.pngbin0 -> 6549 bytes
-rw-r--r--experimental/qt5-intro-android/samegame/content/gfx/icon-ok.pngbin0 -> 7190 bytes
-rw-r--r--experimental/qt5-intro-android/samegame/content/gfx/icon-time.pngbin0 -> 1159 bytes
-rw-r--r--experimental/qt5-intro-android/samegame/content/gfx/logo-a.pngbin0 -> 1814 bytes
-rw-r--r--experimental/qt5-intro-android/samegame/content/gfx/logo-e.pngbin0 -> 1725 bytes
-rw-r--r--experimental/qt5-intro-android/samegame/content/gfx/logo-g.pngbin0 -> 1765 bytes
-rw-r--r--experimental/qt5-intro-android/samegame/content/gfx/logo-m.pngbin0 -> 1743 bytes
-rw-r--r--experimental/qt5-intro-android/samegame/content/gfx/logo-s.pngbin0 -> 1791 bytes
-rw-r--r--experimental/qt5-intro-android/samegame/content/gfx/logo.pngbin0 -> 3608 bytes
-rw-r--r--experimental/qt5-intro-android/samegame/content/gfx/particle-brick.pngbin0 -> 861 bytes
-rw-r--r--experimental/qt5-intro-android/samegame/content/gfx/particle-paint.pngbin0 -> 714 bytes
-rw-r--r--experimental/qt5-intro-android/samegame/content/gfx/particle-smoke.pngbin0 -> 5409 bytes
-rw-r--r--experimental/qt5-intro-android/samegame/content/gfx/red-puzzle.pngbin0 -> 2218 bytes
-rw-r--r--experimental/qt5-intro-android/samegame/content/gfx/red.pngbin0 -> 1018 bytes
-rw-r--r--experimental/qt5-intro-android/samegame/content/gfx/text-highscore-new.pngbin0 -> 6767 bytes
-rw-r--r--experimental/qt5-intro-android/samegame/content/gfx/text-highscore.pngbin0 -> 3179 bytes
-rw-r--r--experimental/qt5-intro-android/samegame/content/gfx/text-no-winner.pngbin0 -> 6321 bytes
-rw-r--r--experimental/qt5-intro-android/samegame/content/gfx/text-p1-go.pngbin0 -> 5395 bytes
-rw-r--r--experimental/qt5-intro-android/samegame/content/gfx/text-p1-won.pngbin0 -> 5618 bytes
-rw-r--r--experimental/qt5-intro-android/samegame/content/gfx/text-p1.pngbin0 -> 1751 bytes
-rw-r--r--experimental/qt5-intro-android/samegame/content/gfx/text-p2-go.pngbin0 -> 5874 bytes
-rw-r--r--experimental/qt5-intro-android/samegame/content/gfx/text-p2-won.pngbin0 -> 6177 bytes
-rw-r--r--experimental/qt5-intro-android/samegame/content/gfx/text-p2.pngbin0 -> 2381 bytes
-rw-r--r--experimental/qt5-intro-android/samegame/content/gfx/yellow-puzzle.pngbin0 -> 2239 bytes
-rw-r--r--experimental/qt5-intro-android/samegame/content/gfx/yellow.pngbin0 -> 1008 bytes
-rw-r--r--experimental/qt5-intro-android/samegame/content/levels/TemplateBase.qml70
-rw-r--r--experimental/qt5-intro-android/samegame/content/levels/level0.qml59
-rw-r--r--experimental/qt5-intro-android/samegame/content/levels/level1.qml59
-rw-r--r--experimental/qt5-intro-android/samegame/content/levels/level2.qml61
-rw-r--r--experimental/qt5-intro-android/samegame/content/levels/level3.qml60
-rw-r--r--experimental/qt5-intro-android/samegame/content/levels/level4.qml58
-rw-r--r--experimental/qt5-intro-android/samegame/content/levels/level5.qml59
-rw-r--r--experimental/qt5-intro-android/samegame/content/levels/level6.qml60
-rw-r--r--experimental/qt5-intro-android/samegame/content/levels/level7.qml58
-rw-r--r--experimental/qt5-intro-android/samegame/content/levels/level8.qml59
-rw-r--r--experimental/qt5-intro-android/samegame/content/levels/level9.qml62
-rwxr-xr-xexperimental/qt5-intro-android/samegame/content/samegame.js581
-rw-r--r--experimental/qt5-intro-android/samegame/settings.js56
213 files changed, 9413 insertions, 0 deletions
diff --git a/experimental/qt5-intro-android/Button.qml b/experimental/qt5-intro-android/Button.qml
new file mode 100644
index 0000000..6d6bf6e
--- /dev/null
+++ b/experimental/qt5-intro-android/Button.qml
@@ -0,0 +1,78 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the Qt 5 launch demo.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+** of its contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.0
+
+Rectangle {
+
+ id: root;
+
+ border.width: (pressed ? 1.5 : 1) * height / 20;
+ border.color: Qt.rgba(1, 1, 1, 0.4);
+ radius: height / 4;
+
+ antialiasing: true
+
+ gradient: Gradient {
+ GradientStop { position: 0; color: Qt.rgba(0.5, 0.5, 0.5, pressed ? 0.7 : 0.5); }
+ GradientStop { position: 1; color: Qt.rgba(0.2, 0.2, 0.2, pressed ? 0.7 : 0.5); }
+ }
+
+ Behavior on color { ColorAnimation { duration: 100 } }
+
+ property bool pressed;
+ property alias label: textItem.text;
+
+ Text {
+ id: textItem
+ anchors.centerIn: parent
+ color: "white"
+ font.pixelSize: parent.height / 3;
+ font.bold: true
+ }
+
+ MouseArea {
+ id: mouse
+ anchors.fill: parent
+ onPressed: root.pressed = !root.pressed;
+
+ }
+
+}
diff --git a/experimental/qt5-intro-android/CameraSlide.qml b/experimental/qt5-intro-android/CameraSlide.qml
new file mode 100644
index 0000000..564b467
--- /dev/null
+++ b/experimental/qt5-intro-android/CameraSlide.qml
@@ -0,0 +1,92 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the Qt 5 launch demo.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+** of its contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.0
+import QtMultimedia 5
+import "presentation"
+
+import QtGraphicalEffects 1.0
+
+Slide {
+
+ id: slide
+
+ title: "Qt Multimedia - Camera"
+
+ Camera {
+ id: camera
+ Component.onCompleted: camera.stop();
+ }
+
+ VideoOutput {
+ id: videoOut
+ anchors.fill: parent
+ source: camera
+ layer.enabled: true;
+ layer.effect: ZoomBlur {
+ samples: 16
+ length: button.pressed ? parent.height / 5 : 0
+ Behavior on length {
+ NumberAnimation { duration: 250 }
+ }
+ }
+ }
+
+ onVisibleChanged: {
+ if (slide.visible)
+ camera.start();
+ else
+ camera.stop();
+ }
+
+ Button {
+ id: button
+ anchors.bottom: videoOut.bottom
+ anchors.horizontalCenter: videoOut.horizontalCenter
+ anchors.bottomMargin: height / 2;
+// anchors.bottom: slide.top;
+// anchors.right: slide.right;
+// anchors.bottomMargin: height;
+ label: pressed ? "Remove Effect" : "Zoom Effect";
+ width: height * 4;
+ height: parent.height * 0.1
+ }
+
+}
diff --git a/experimental/qt5-intro-android/CanvasSlide.qml b/experimental/qt5-intro-android/CanvasSlide.qml
new file mode 100644
index 0000000..d972b41
--- /dev/null
+++ b/experimental/qt5-intro-android/CanvasSlide.qml
@@ -0,0 +1,161 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the Qt 5 launch demo.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+** of its contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.0
+import QtQuick.Particles 2.0
+import "presentation"
+
+Slide {
+ id: slide
+
+ title: "Qt Quick - Canvas"
+
+
+
+ Rectangle {
+ height: parent.height
+ width: parent.width * 0.45
+ anchors.right: parent.right;
+ antialiasing: true
+ radius: slide.height * 0.03;
+ color: Qt.rgba(0.0, 0.0, 0.0, 0.2);
+ Canvas {
+ id:canvas
+ anchors.fill: parent;
+
+ renderTarget: Canvas.Image;
+ antialiasing: true;
+ onPaint: {
+ eval(editor.text);
+ }
+ }
+ }
+
+ Rectangle {
+ height: parent.height
+ width: parent.width * 0.45
+ anchors.left: parent.left
+ antialiasing: true
+ radius: slide.height * 0.03;
+ color: Qt.rgba(0.0, 0.0, 0.0, 0.2);
+
+ clip: true;
+
+ TextEdit {
+ id: editor
+ anchors.fill: parent;
+ anchors.margins: 10
+
+ font.pixelSize: 16
+ color: "white"
+ font.family: "courier"
+ font.bold: true
+
+ text:
+"var ctx = canvas.getContext('2d');
+ctx.save();
+ctx.clearRect(0, 0, canvas.width, canvas.height);
+ctx.strokeStyle = 'palegreen'
+ctx.fillStyle = 'limegreen';
+ctx.lineWidth = 5;
+
+ctx.beginPath();
+ctx.moveTo(100, 100);
+ctx.lineTo(300, 100);
+ctx.lineTo(100, 200);
+ctx.closePath();
+ctx.fill();
+ctx.stroke();
+
+ctx.fillStyle = 'aquamarine'
+ctx.font = '20px sansserif'
+ctx.fillText('HTML Canvas API!', 100, 300);
+ctx.fillText('Imperative Drawing!', 100, 340);
+
+ctx.restore();
+"
+ onTextChanged: canvas.requestPaint();
+
+ onCursorRectangleChanged: {
+ emitter.burst(10)
+
+ }
+
+ ParticleSystem {
+ id: sys1
+ running: slide.visible
+ }
+
+ ImageParticle {
+ system: sys1
+ source: "images/particle.png"
+ color: "white"
+ colorVariation: 0.2
+ alpha: 0
+ }
+
+ Emitter {
+ id: emitter
+ system: sys1
+
+ x: editor.cursorRectangle.x - editor.cursorRectangle.height / 2;
+ y: editor.cursorRectangle.y
+ width: editor.cursorRectangle.height
+ height: editor.cursorRectangle.height
+ enabled: false
+
+ lifeSpan: 1000
+
+ velocity: PointDirection { xVariation: 30; yVariation: 30; }
+ acceleration: PointDirection {xVariation: 30; yVariation: 30; y: 100 }
+
+ endSize: 0
+
+ size: 4
+ sizeVariation: 2
+ }
+
+ }
+
+
+
+
+ }
+}
diff --git a/experimental/qt5-intro-android/DemoMain.qml b/experimental/qt5-intro-android/DemoMain.qml
new file mode 100644
index 0000000..6c3ab5c
--- /dev/null
+++ b/experimental/qt5-intro-android/DemoMain.qml
@@ -0,0 +1,139 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the Qt 5 launch demo.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+** of its contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+
+import QtQuick 2.0
+import QtGraphicalEffects 1.0
+
+Item {
+ id: demoMain;
+
+ property bool useDropShadow: true;
+ property bool useSwirls: true;
+ property bool useSimpleGradient: false;
+ property bool autorun: false;
+
+ width: 1280
+ height: 720
+
+ NoisyGradient {
+ anchors.fill: parent;
+ gradient: Gradient {
+ GradientStop { position: 0.0; color: Qt.rgba(0.64 * 0.6, 0.82 * 0.6, 0.15 * 0.6) }
+ GradientStop { position: 1.0; color: "black" }
+ }
+ visible: !parent.useSimpleGradient
+ }
+
+ Rectangle {
+ anchors.fill: parent;
+ gradient: Gradient {
+ GradientStop { position: 0.0; color: Qt.rgba(0.64, 0.82, 0.15) }
+ GradientStop { position: 1.0; color: "black" }
+ }
+ visible: parent.useSimpleGradient;
+ }
+
+ Rectangle {
+ id: colorTable
+ width: 1
+ height: 46
+ color: "transparent"
+
+ Column {
+ spacing: 2
+ y: 1
+ Rectangle { width: 1; height: 10; color: "white" }
+ Rectangle { width: 1; height: 10; color: Qt.rgba(0.64 * 1.4, 0.82 * 1.4, 0.15 * 1.4, 1); }
+ Rectangle { width: 1; height: 10; color: Qt.rgba(0.64, 0.82, 0.15); }
+ Rectangle { width: 1; height: 10; color: Qt.rgba(0.64 * 0.7, 0.82 * 0.7, 0.15 * 0.7); }
+ }
+
+ layer.enabled: true
+ layer.smooth: true
+ visible: false;
+ }
+
+
+ Swirl
+ {
+ x: 0;
+ width: parent.width
+ height: Math.min(parent.height, parent.width) * 0.2
+ anchors.bottom: parent.bottom;
+ amplitude: height * 0.2;
+ colorTable: colorTable;
+ speed: 0.2;
+ opacity: 0.3
+ visible: parent.useSwirls;
+ }
+
+ Timer {
+ interval: 20000
+ running: parent.autorun
+ repeat: true
+
+ onTriggered: {
+ var from = slides.currentSlide;
+ var to = from == slides.slides.length - 1 ? 1 : from + 1;
+ slides.switchSlides(slides.slides[from], slides.slides[to], true);
+ slides.currentSlide = to;
+ }
+ }
+
+ SlideDeck {
+ id: slides
+ titleColor: "white"
+ textColor: "white"
+ anchors.fill: parent
+ layer.enabled: parent.useDropShadow
+ layer.effect: DropShadow {
+ horizontalOffset: slides.width * 0.005;
+ verticalOffset: slides.width * 0.005;
+ radius: 16.0
+ samples: 16
+ fast: true
+ color: Qt.rgba(0.0, 0.0, 0.0, 0.7);
+ }
+ }
+
+
+
+}
diff --git a/experimental/qt5-intro-android/EffectsSlide.qml b/experimental/qt5-intro-android/EffectsSlide.qml
new file mode 100644
index 0000000..0355284
--- /dev/null
+++ b/experimental/qt5-intro-android/EffectsSlide.qml
@@ -0,0 +1,203 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the Qt 5 launch demo.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+** of its contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+
+import QtQuick 2.0
+import QtGraphicalEffects 1.0
+
+import "presentation"
+
+Slide {
+ id: slide
+
+ title: "Qt Graphical Effects"
+ writeInText: "The Qt Graphical Effects module includes a wide range of effects:"
+
+ property real t;
+ SequentialAnimation on t {
+ NumberAnimation { from: 0; to: 1; duration: 5000; easing.type: Easing.InOutCubic }
+ NumberAnimation { from: 1; to: 0; duration: 5000; easing.type: Easing.InOutCubic }
+ loops: Animation.Infinite
+ running: slide.visible;
+ }
+
+ SequentialAnimation {
+ PropertyAction { target: grid; property: "opacity"; value: 0 }
+ PauseAnimation { duration: 1500 }
+ NumberAnimation { target: grid; property: "opacity"; to: 1; duration: 2000; easing.type: Easing.InOutCubic }
+ running: slide.visible;
+ }
+
+ Grid {
+ id: grid;
+
+ opacity: 0;
+
+ width: parent.width
+ height: parent.height * 0.84
+ anchors.bottom: parent.bottom;
+
+ property real cw: width / columns
+ property real ch: height / rows;
+
+ property int fontSize: slide.baseFontSize * 0.5
+
+ columns: 4
+ rows: 2
+
+ Item {
+ width: grid.cw
+ height: grid.ch
+ Text { text: "Original"; color: "white"; font.pixelSize: grid.fontSize; anchors.horizontalCenter: noEffect.horizontalCenter }
+ Image {
+ id: noEffect;
+ source: "images/butterfly.png"
+ width: grid.cw * 0.9
+ fillMode: Image.PreserveAspectFit
+ }
+ }
+
+ Column {
+ Glow {
+ id: glowEffect
+ radius: 4
+ samples: 4
+ spread: slide.t
+ source: noEffect
+ width: grid.cw * 0.9
+ height: width;
+ Text { text: "Glow"; color: "white"; font.pixelSize: grid.fontSize; anchors.top: parent.top; anchors.horizontalCenter: parent.horizontalCenter; }
+ }
+ }
+
+ Column {
+ InnerShadow {
+ id: innerShadowEffect
+ radius: slide.t * 16;
+ samples: 16
+ color: "black"
+ source: noEffect
+ width: grid.cw * 0.9
+ height: width;
+ Text { text: "InnerShadow"; color: "white"; font.pixelSize: grid.fontSize; anchors.top: parent.top; anchors.horizontalCenter: parent.horizontalCenter; }
+ }
+ }
+
+ Column {
+ GaussianBlur {
+ id: blurEffect
+ radius: slide.t * samples;
+ samples: 8
+ source: noEffect
+ width: grid.cw * 0.9
+ height: width;
+ Text { text: "GaussianBlur"; color: "white"; font.pixelSize: grid.fontSize; anchors.top: parent.top; anchors.horizontalCenter: parent.horizontalCenter; }
+ }
+ }
+
+ Column {
+ ThresholdMask {
+ id: thresholdEffect
+ maskSource: Image { source: "images/fog.png" }
+ threshold: slide.t * 0.5 + 0.2;
+ spread: 0.2
+ source: noEffect
+ width: grid.cw * 0.9
+ height: width;
+ Text { text: "ThresholdMask"; color: "white"; font.pixelSize: grid.fontSize; anchors.top: parent.top; anchors.horizontalCenter: parent.horizontalCenter; }
+ }
+ }
+
+ Column {
+ BrightnessContrast {
+ id: brightnessEffect
+ brightness: Math.sin(slide.t * 2 * Math.PI) * 0.5;
+ contrast: Math.sin(slide.t * 4 * Math.PI) * 0.5;
+ source: noEffect
+ width: grid.cw * 0.9
+ height: width;
+ Text { text: "BrightnessContrast"; color: "white"; font.pixelSize: grid.fontSize; anchors.top: parent.top; anchors.horizontalCenter: parent.horizontalCenter; }
+ }
+ }
+
+ Column {
+ Colorize {
+ id: colorizeEffect
+ hue: slide.t
+ source: noEffect
+ width: grid.cw * 0.9
+ height: width;
+ Text { text: "Colorize"; color: "white"; font.pixelSize: grid.fontSize; anchors.top: parent.top; anchors.horizontalCenter: parent.horizontalCenter; }
+ }
+ }
+
+ Column {
+ OpacityMask {
+
+ Item {
+ id: maskSource;
+ anchors.fill: parent;
+ Rectangle {
+ anchors.fill: parent;
+ opacity: slide.t;
+ }
+
+ Text {
+ text: "Qt 5"
+ font.pixelSize: parent.height * 0.15
+ font.bold: true;
+ font.underline: true;
+ anchors.centerIn: parent;
+ rotation: 70
+ }
+ visible: false;
+ }
+
+ id: opacityMaskEffect
+ source: noEffect
+ maskSource: maskSource;
+ width: grid.cw * 0.9
+ height: width;
+ Text { text: "OpacityMask"; color: "white"; font.pixelSize: grid.fontSize; anchors.top: parent.top; anchors.horizontalCenter: parent.horizontalCenter; }
+ }
+ }
+ }
+
+}
diff --git a/experimental/qt5-intro-android/ExamplesSlide.qml b/experimental/qt5-intro-android/ExamplesSlide.qml
new file mode 100644
index 0000000..373c564
--- /dev/null
+++ b/experimental/qt5-intro-android/ExamplesSlide.qml
@@ -0,0 +1,93 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the Qt 5 launch demo.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+** of its contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.0
+import "presentation"
+
+Slide
+{
+ id: slide
+
+ title: "Qt Quick 2"
+
+ Row {
+ anchors.fill: parent
+
+ spacing: Math.max(10, (width - 320 * 3) / 2)
+
+ Item {
+ id: item1
+ width: 320
+ height: 480
+ clip: true
+ Loader {
+ id: load1
+ }
+ }
+
+ Item {
+ id: item2
+ width: 320
+ height: 480
+ visible: item1.width + parent.spacing + width <= parent.width
+ clip: true;
+ Loader {
+ id: load2
+ }
+ }
+
+ Loader {
+ id: load3
+ visible: item1.width + item2.width + parent.spacing * 2 + width <= parent.width
+ }
+ }
+
+ onVisibleChanged: {
+ if (visible) {
+ load1.source = "maroon/Maroon.qml"
+ load2.source = "samegame/Samegame.qml"
+ load3.source = "calqlatr/Calqlatr.qml"
+ } else {
+ load1.source = ""
+ load2.source = ""
+ load3.source = ""
+ }
+ }
+}
diff --git a/experimental/qt5-intro-android/FontSlide.qml b/experimental/qt5-intro-android/FontSlide.qml
new file mode 100644
index 0000000..ce98779
--- /dev/null
+++ b/experimental/qt5-intro-android/FontSlide.qml
@@ -0,0 +1,98 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the Qt 5 launch demo.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+** of its contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.0
+import "presentation"
+
+Slide {
+ id: fontSlide;
+ title: "Qt Quick - Fonts"
+ writeInText: "The default font rendering in Qt Quick 2.0 uses distance fields, making\nit possible to do fully transformable text with subpixel positioning and\nsubpixel antialiasing.
+
+Native font rendering is also an option for applications that want to look native."
+
+ Rectangle {
+ id: textRoot
+ anchors.centerIn: parent
+ anchors.horizontalCenterOffset: parent.width * 0.2
+ anchors.verticalCenterOffset: parent.width * 0.1
+
+ width: 120
+ height: 40
+
+ color: "transparent"
+ border.color: "white"
+ border.width: 1
+
+ Text {
+ anchors.centerIn: parent
+
+ text: "Awesome!"
+ color: "white"
+
+ font.pixelSize: 20;
+
+ SequentialAnimation on scale {
+ NumberAnimation { to: 4; duration: 2508; easing.type: Easing.OutElastic }
+ NumberAnimation { to: 1; duration: 2508; easing.type: Easing.OutElastic }
+ PauseAnimation { duration: 1000 }
+ loops: Animation.Infinite
+ running: fontSlide.visible
+ }
+
+ NumberAnimation on rotation { from: 0; to: 360; duration: 10000; loops: Animation.Infinite; easing.type: Easing.InOutCubic; running: fontSlide.visible }
+ }
+ }
+
+ ShaderEffectSource {
+ width: textRoot.width
+ height: textRoot.height
+ sourceItem: textRoot
+ anchors.bottom: parent.bottom;
+ anchors.left: parent.left;
+ smooth: false
+ transformOrigin: Item.BottomLeft;
+
+ visible: true
+
+ scale: 4;
+ }
+
+}
diff --git a/experimental/qt5-intro-android/NoisyGradient.qml b/experimental/qt5-intro-android/NoisyGradient.qml
new file mode 100644
index 0000000..904f14e
--- /dev/null
+++ b/experimental/qt5-intro-android/NoisyGradient.qml
@@ -0,0 +1,92 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the Qt 5 launch demo.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+** of its contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.0
+
+ShaderEffect {
+
+ id: effectRoot;
+
+ width: 1280
+ height: 720
+
+ property Gradient gradient: Gradient {
+ GradientStop { position: 0; color: "white" }
+ GradientStop { position: 0.4; color: "blue" }
+ GradientStop { position: 1.0; color: "black" }
+ }
+
+ Rectangle {
+ id: colorTable
+ width: 1
+ height: 128;
+
+ gradient: effectRoot.gradient;
+
+ layer.enabled: true
+ layer.smooth: true
+
+ visible: false;
+ }
+
+ property variant source: colorTable;
+
+ blending: false;
+
+ fragmentShader:"
+ #ifdef GL_ES
+ precision lowp float;
+ #endif
+
+ uniform lowp sampler2D source;
+ uniform lowp float qt_Opacity;
+ varying highp vec2 qt_TexCoord0;
+
+ // Noise function from: http://stackoverflow.com/questions/4200224/random-noise-functions-for-glsl
+ float rand(vec2 n) {
+ return 0.5 + 0.5 * fract(sin(dot(n.xy, vec2(12.9898, 78.233))) * 43758.5453);
+ }
+
+ void main() {
+ lowp float len = clamp(length(vec2(0.5, 0.0) - qt_TexCoord0), 0.0, 1.0);
+ gl_FragColor = texture2D(source, vec2(0, len)) * qt_Opacity + rand(qt_TexCoord0) * 0.05;
+ }
+"
+}
diff --git a/experimental/qt5-intro-android/NormalMapGenerator.qml b/experimental/qt5-intro-android/NormalMapGenerator.qml
new file mode 100644
index 0000000..c6f55c7
--- /dev/null
+++ b/experimental/qt5-intro-android/NormalMapGenerator.qml
@@ -0,0 +1,92 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the Qt 5 launch demo.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+** of its contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.0
+import QtGraphicalEffects 1.0
+
+ShaderEffect {
+ id: effectRoot;
+
+ property alias source: blurShader.source;
+
+ GaussianBlur
+ {
+ id: blurShader;
+ width: source != undefined ? source.width : 0
+ height: source != undefined ? source.height : 0
+ samples: 8
+ radius: 8
+
+ layer.enabled: true;
+ layer.smooth: true;
+
+ visible: false;
+ }
+
+ width: 256
+ height: 128
+
+ property variant tex: blurShader;
+ property size pixelSize: Qt.size(1 / blurShader.width, 1 / blurShader.height);
+
+ fragmentShader: "
+ #ifdef GL_ES
+ precision lowp float;
+ #endif
+
+ uniform lowp float qt_Opacity;
+ uniform lowp sampler2D tex;
+ uniform highp vec2 pixelSize;
+ varying highp vec2 qt_TexCoord0;
+ void main() {
+
+ lowp vec2 xps = vec2(pixelSize.x, 0.0);
+ vec3 vx = vec3(1, 0, texture2D(tex, qt_TexCoord0 + xps).x - texture2D(tex, qt_TexCoord0 - xps).x);
+
+ lowp vec2 yps = vec2(0.0, pixelSize.y);
+ vec3 vy = vec3(0, 1, texture2D(tex, qt_TexCoord0 + yps).x - texture2D(tex, qt_TexCoord0 - yps).x);
+
+ vec3 n = normalize(cross(vx, vy)) * 0.5 + 0.5;
+
+ gl_FragColor = vec4(n, 1);
+ }
+ "
+
+}
diff --git a/experimental/qt5-intro-android/OpacityTransitionPresentation.qml b/experimental/qt5-intro-android/OpacityTransitionPresentation.qml
new file mode 100644
index 0000000..dc7cc02
--- /dev/null
+++ b/experimental/qt5-intro-android/OpacityTransitionPresentation.qml
@@ -0,0 +1,104 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the Qt 5 launch demo.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+** of its contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+
+import QtQuick 2.0
+import "presentation"
+
+Presentation {
+
+ id: deck
+
+ width: 1280
+ height: 720
+
+ property bool inTransition: false;
+
+ property variant fromSlide;
+ property variant toSlide;
+
+ property int transitionTime: 500;
+
+ SequentialAnimation {
+ id: forwardTransition
+ PropertyAction { target: deck; property: "inTransition"; value: true }
+ PropertyAction { target: toSlide; property: "visible"; value: true }
+ ParallelAnimation {
+ NumberAnimation { target: fromSlide; property: "opacity"; from: 1; to: 0; duration: deck.transitionTime; easing.type: Easing.OutQuart }
+ NumberAnimation { target: fromSlide; property: "scale"; from: 1; to: 1.1; duration: deck.transitionTime; easing.type: Easing.InOutQuart }
+ NumberAnimation { target: toSlide; property: "opacity"; from: 0; to: 1; duration: deck.transitionTime; easing.type: Easing.InQuart }
+ NumberAnimation { target: toSlide; property: "scale"; from: 0.7; to: 1; duration: deck.transitionTime; easing.type: Easing.InOutQuart }
+ }
+ PropertyAction { target: fromSlide; property: "visible"; value: false }
+ PropertyAction { target: fromSlide; property: "scale"; value: 1 }
+ PropertyAction { target: deck; property: "inTransition"; value: false }
+ }
+ SequentialAnimation {
+ id: backwardTransition
+ running: false
+ PropertyAction { target: deck; property: "inTransition"; value: true }
+ PropertyAction { target: toSlide; property: "visible"; value: true }
+ ParallelAnimation {
+ NumberAnimation { target: fromSlide; property: "opacity"; from: 1; to: 0; duration: deck.transitionTime; easing.type: Easing.OutQuart }
+ NumberAnimation { target: fromSlide; property: "scale"; from: 1; to: 0.7; duration: deck.transitionTime; easing.type: Easing.InOutQuart }
+ NumberAnimation { target: toSlide; property: "opacity"; from: 0; to: 1; duration: deck.transitionTime; easing.type: Easing.InQuart }
+ NumberAnimation { target: toSlide; property: "scale"; from: 1.1; to: 1; duration: deck.transitionTime; easing.type: Easing.InOutQuart }
+ }
+ PropertyAction { target: fromSlide; property: "visible"; value: false }
+ PropertyAction { target: fromSlide; property: "scale"; value: 1 }
+ PropertyAction { target: deck; property: "inTransition"; value: false }
+ }
+
+ function switchSlides(from, to, forward)
+ {
+ if (deck.inTransition)
+ return false
+
+ deck.fromSlide = from
+ deck.toSlide = to
+
+ if (forward)
+ forwardTransition.running = true
+ else
+ backwardTransition.running = true
+
+ return true
+ }
+}
diff --git a/experimental/qt5-intro-android/ParticleSlide.qml b/experimental/qt5-intro-android/ParticleSlide.qml
new file mode 100644
index 0000000..2569a17
--- /dev/null
+++ b/experimental/qt5-intro-android/ParticleSlide.qml
@@ -0,0 +1,86 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the Qt 5 launch demo.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+** of its contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.0
+import "presentation"
+
+Slide
+{
+ id: slide
+
+ title: "Qt Quick - Particle System"
+
+ Row {
+ anchors.fill: parent
+
+ SequentialAnimation on opacity {
+ running: slide.visible;
+ PropertyAction { value: 0 }
+ PauseAnimation { duration: 2000; }
+ NumberAnimation { to: 1; duration: 1000 }
+ }
+
+ spacing: (width - 320 * 3) / 2
+
+ Loader {
+ id: load1
+ }
+
+ Loader {
+ id: load2
+ }
+
+ Loader {
+ id: load3
+ }
+ }
+
+ onVisibleChanged: {
+ if (visible) {
+ load1.source = "particles/velocityfrommotion.qml"
+ load2.source = "particles/customemitter.qml"
+ load3.source = "particles/emitmask.qml"
+ } else {
+ load1.source = ""
+ load2.source = ""
+ load3.source = ""
+ }
+ }
+}
diff --git a/experimental/qt5-intro-android/README b/experimental/qt5-intro-android/README
new file mode 100644
index 0000000..6b3f927
--- /dev/null
+++ b/experimental/qt5-intro-android/README
@@ -0,0 +1,51 @@
+This project contains quick tour of Qt 5.0, primarily focusing on its
+graphical capabilities.
+
+
+
+------------------------------------------------------------------------
+ Requirements:
+
+ - Qt 5, including QtDeclarative, QtGraphicalEffects and QtMultimedia.
+ Commercial URL: http://qt.digia.com
+ Open Source URL: http://qt-project.org
+
+ - The QML Presentation System:
+ URL: https://qt.gitorious.org/qt-labs/qml-presentation-system
+ git: git clone https://git.gitorious.org/qt-labs/qml-presentation-system.git
+
+ - A movie file called 'bunny.mov' in the same directory as the
+ main.qml file. The demo will run without, but the Video slide will
+ not show anything.
+
+
+
+------------------------------------------------------------------------
+ Running:
+
+To run the demo, start it using the Qt Quick 2.0 'qmlscene' tool.
+
+> qmlscene main.qml
+
+The demo includes a slightly fancy fullscreen gradient and a rather
+computationally intensive drop shadow which can be too much for
+low-end GPUs. On these systems, one could try to use the 'lofi'
+launcher instead.
+
+> qmlscene main_lofi.qml
+
+It is possible to tweak the parameters of the main file also.
+
+
+
+------------------------------------------------------------------------
+ Troubleshooting:
+
+For a -developer-build of Qt, the webkit plugin and QtWebProcess will
+be located inside the qtwebkit module, rather than inside QtBase, the plugin
+must be added to the QML import path and the path to QtWebProcess must be
+added to PATH for the demo to run.
+
+The slides have been written for the resolution 1280x720. When resized
+some of the spacing and content will look a bit odd. Any patches to
+fix this will be welcomed :) \ No newline at end of file
diff --git a/experimental/qt5-intro-android/ShaderSlide.qml b/experimental/qt5-intro-android/ShaderSlide.qml
new file mode 100644
index 0000000..52a9247
--- /dev/null
+++ b/experimental/qt5-intro-android/ShaderSlide.qml
@@ -0,0 +1,197 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the Qt 5 launch demo.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+** of its contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.0
+import "presentation"
+
+
+Slide {
+ id: slide
+
+ title: "Qt Quick - ShaderEffect"
+
+ writeInText: "Harness the raw power of the graphics processor. The ShaderEffect\nelement lets you write GLSL inline in your QML files."
+
+ Image {
+ id: sourceItem
+ source: "images/ally.png"
+ visible: false
+ }
+
+ SequentialAnimation {
+ id: kickoffAnimation
+
+ // setup
+ PropertyAction { target: rotationAnimation; property: "running"; value: false }
+ PropertyAction { target: timeAnimation; property: "running"; value: false }
+ PropertyAction { target: shader; property: "amp"; value: 0 }
+ PropertyAction { target: shader; property: "xrot"; value: 0 }
+ PropertyAction { target: shader; property: "zrot"; value: 0 }
+ PropertyAction { target: shader; property: "time"; value: 0 }
+ PropertyAction { target: shader; property: "scale"; value: 1; }
+ PropertyAction { target: rotationAnimation; property: "running"; value: false }
+ PropertyAction { target: timeAnimation; property: "running"; value: false }
+ // short pause
+ PauseAnimation { duration: 2000 }
+ // get started...
+ ParallelAnimation {
+ NumberAnimation { target: shader; property: "xrot"; to: 2 * Math.PI / 8; duration: 1000; easing.type: Easing.InOutCubic }
+ NumberAnimation { target: shader; property: "amp"; to: 0.1; duration: 1000; easing.type: Easing.InOutCubic }
+// NumberAnimation { target: shader; property: "scale"; to: 1.5; duration: 1000; easing.type: Easing.InOutCubic }
+ PropertyAction { target: rotationAnimation; property: "running"; value: true }
+ PropertyAction { target: timeAnimation; property: "running"; value: true }
+ }
+
+ running: slide.visible;
+ }
+
+
+ ShaderEffect {
+ id: shader
+ width: height
+ height: Math.min(parent.height, parent.width)
+ anchors.centerIn: parent;
+ anchors.verticalCenterOffset: Math.min(slide.height, slide.width) * 0.1
+
+ blending: true
+
+ mesh: "50x50"
+
+ property variant size: Qt.size(width, height);
+
+ property variant source: sourceItem;
+
+ property real amp: 0
+
+ property real xrot: 0; // 2 * Math.PI / 8;
+// NumberAnimation on xrot { from: 0; to: Math.PI * 2; duration: 3000; loops: Animation.Infinite }
+
+ property real zrot: 0
+ NumberAnimation on zrot {
+ id: rotationAnimation
+ from: 0;
+ to: Math.PI * 2;
+ duration: 20000;
+ loops: Animation.Infinite
+ easing.type: Easing.InOutCubic
+ running: false;
+ }
+
+ property real time: 0
+ NumberAnimation on time {
+ id: timeAnimation
+ from: 0;
+ to: Math.PI * 2;
+ duration: 3457;
+ loops: Animation.Infinite
+ running: false;
+ }
+
+ vertexShader: "
+ attribute highp vec4 qt_Vertex;
+ attribute highp vec2 qt_MultiTexCoord0;
+ uniform highp mat4 qt_Matrix;
+ uniform highp float xrot;
+ uniform highp float zrot;
+ uniform highp vec2 size;
+ uniform highp float time;
+ uniform highp float amp;
+ varying lowp vec2 v_TexCoord;
+ varying lowp float v_light;
+ void main() {
+ highp float xcosa = cos(xrot);
+ highp float xsina = sin(xrot);
+
+ highp mat4 xrot = mat4(1, 0, 0, 0,
+ 0, xcosa, xsina, 0,
+ 0, -xsina, xcosa, 0,
+ 0, 0, 0, 1);
+
+ highp float zcosa = cos(zrot);
+ highp float zsina = sin(zrot);
+
+ highp mat4 zrot = mat4(zcosa, zsina, 0, 0,
+ -zsina, zcosa, 0, 0,
+ 0, 0, 1, 0,
+ 0, 0, 0, 1);
+
+ highp float near = 2.;
+ highp float far = 6.;
+ highp float fmn = far - near;
+
+ highp mat4 proj = mat4(near, 0, 0, 0,
+ 0, near, 0, 0,
+ 0, 0, -(far + near) / fmn, -1.,
+ 0, 0, -2. * far * near / fmn, 1);
+
+ highp mat4 model = mat4(2, 0, 0, 0,
+ 0, 2, 0, 0,
+ 0, 0, 2, 0,
+ 0, -.5, -4, 1);
+
+ vec4 nLocPos = vec4(qt_Vertex.xy * 2.0 / size - 1.0, 0, 1);
+ nLocPos.z = cos(nLocPos.x * 5. + time) * amp;
+
+ vec4 pos = proj * model * xrot * zrot * nLocPos;
+ pos = vec4(pos.xyx/pos.w, 1);
+
+ gl_Position = qt_Matrix * vec4((pos.xy + 1.0) / 2.0 * size , 0, 1);
+
+ v_TexCoord = qt_MultiTexCoord0;
+
+
+ v_light = dot(normalize(vec3(-sin(nLocPos.x * 5.0 + time) * 5.0 * amp, 0, -1)), vec3(0, 0, -1));
+ }
+ "
+
+ fragmentShader: "
+ uniform lowp sampler2D source;
+ uniform lowp float qt_Opacity;
+ varying highp vec2 v_TexCoord;
+ varying lowp float v_light;
+ void main() {
+ highp vec4 c = texture2D(source, v_TexCoord);
+ gl_FragColor = (vec4(pow(v_light, 16.0)) * 0.3 + c) * qt_Opacity;
+ }
+ "
+
+ }
+
+}
diff --git a/experimental/qt5-intro-android/SlideDeck.qml b/experimental/qt5-intro-android/SlideDeck.qml
new file mode 100644
index 0000000..5a32831
--- /dev/null
+++ b/experimental/qt5-intro-android/SlideDeck.qml
@@ -0,0 +1,245 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the Qt 5 launch demo.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+** of its contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+
+import QtQuick 2.0
+import QtGraphicalEffects 1.0
+
+import "presentation"
+
+OpacityTransitionPresentation {
+ id: presentation
+
+ width: 1280
+ height: 720
+
+ transitionTime: 1000
+
+
+ /********************************************************************************
+ *
+ * Introduction
+ *
+ */
+
+/*
+ Rectangle {
+ id: openingSlideBlackout
+ color: "black"
+ anchors.fill: parent;
+ Behavior on opacity { NumberAnimation { duration: 1000 } }
+ }
+
+ onCurrentSlideChanged: {
+ if (currentSlide < 2)
+ openingSlideBlackout.opacity = 1;
+ else
+ openingSlideBlackout.opacity = 0;
+ }
+
+
+ Slide {
+
+ }
+*/
+
+ Slide {
+ id: introSlide
+
+ writeInText: "The following is a quick tour of what is new in Qt 5.
+
+It is an application written with Qt Quick, based on Qt 5.
+
+We hope you will enjoy Qt 5 as much as we have enjoyed creating it.
+
+[tap to advance]"
+
+// Image {
+// source: "images/qt-logo.png"
+// opacity: 0.4
+// z: -1
+// anchors.centerIn: parent
+// }
+ }
+
+ Slide {
+ centeredText: "Introducing"
+ fontScale: 2
+ }
+
+ Slide {
+ centeredText: "Qt 5"
+ fontScale: 4;
+ }
+
+
+ Slide {
+ writeInText: "OpenGL-based scene graph for Qt Quick 2.0 - providing velvet animations, particles and impressive graphical effects
+
+Multimedia support
+
+Preliminary support for Android and iOS"
+ }
+
+ Slide {
+ writeInText: "C++ language features - template-based connect(), C++11 support
+
+Connectivity and Networking - DNS lookup, improved IPv6 support
+
+JSON Support - Fast parser and writer, binary format support"
+ }
+
+ Slide {
+ writeInText: "Modularization of the Qt libraries - sanitizing our codebase and simplifying deployment
+
+Qt Platform Abstraction - Unifying the Qt codebase across platforms, minimizing the porting effort for new platforms
+
+Wayland support - Wayland-compatible Qt backend and compositor framework"
+ }
+
+ Slide {
+ title: "Qt for Android"
+ writeInText:
+ "
+ Qt 5.1 allows you to write Android apps using Qt Quick or Qt Widgets.
+
+ We support QML media player functionality, as well as a set of commonly used sensors in QtSensors.
+
+ With Qt Creator you can develop your apps, deploy them directly to a device, and debug them on the device.
+ "
+ }
+
+ Slide {
+ writeInText:
+ "For this preliminary release, we are focusing on the developer experience, working to enable Qt developers to easily run and test their applications on Android devices.
+
+ You can easily deploy your app to an app store with Qt 5.1, but we recommend waiting until Qt 5.2 for an even smoother experience."
+ }
+
+
+ /********************************************************************************
+ *
+ * Qt Quick Graphics Stack
+ *
+ */
+ ExamplesSlide { }
+
+ FontSlide { }
+ CanvasSlide { }
+ ParticleSlide { }
+ ShaderSlide { }
+
+
+
+ /********************************************************************************
+ *
+ * Qt Graphical Effects
+ *
+ */
+
+ EffectsSlide {}
+
+// /********************************************************************************
+// *
+// * Multimedia
+// *
+// */
+
+// Slide {
+// title: "Qt Multimedia"
+// writeInText: "The Qt Multimedia module is implemented on all our major platforms, including Windows, Mac OS X and Linux.
+
+//It contains both a C++ API for use with existing Qt Widgets based applications and a QML API for use with Qt Quick 2.0.
+
+//The features include recording and playback of video and audio and also use of camera.
+
+//It also integrates nicely with the Qt Graphical Effects module."
+// }
+
+ VideoSlide { }
+// CameraSlide { }
+
+
+
+
+ /********************************************************************************
+ *
+ * WebKit
+ *
+ */
+
+// WebkitSlide { }
+
+
+
+ /********************************************************************************
+ *
+ * The End
+ *
+ */
+
+ Slide {
+ title: "Links"
+ contentFormat: Text.RichText
+ content: [
+ "Qt Project: <a href=\"http://qt-project.org\">qt-project.org</a>",
+ "Qt by Digia: <a href=\"http://qt.digia.com\">qt.digia.com</a>",
+ "Follow us on Twitter",
+ " <a href=\"https://twitter.com/qtproject\">@QtProject</a>",
+ " <a href=\"https://twitter.com/QtbyDigia\">@QtByDigia</a>",
+ "Find us on Facebook:",
+ " <a href=\"https://www.facebook.com/QtProject\">Qt Project</a>",
+ " <a href=\"https://www.facebook.com/Qt\">Qt by Digia</a>",
+ ];
+
+ Image {
+ z: -1
+ opacity: 0.7
+ source: "images/qt-logo.png"
+ width: parent.width / 3
+ anchors.top: parent.top
+ anchors.right: parent.right
+ anchors.rightMargin: parent.width * 0.15
+ fillMode: Image.PreserveAspectFit
+ }
+
+ }
+
+}
diff --git a/experimental/qt5-intro-android/Swirl.qml b/experimental/qt5-intro-android/Swirl.qml
new file mode 100644
index 0000000..710f04b
--- /dev/null
+++ b/experimental/qt5-intro-android/Swirl.qml
@@ -0,0 +1,116 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the Qt 5 launch demo.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+** of its contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.0
+
+ShaderEffect {
+ id: shader
+
+ width: 400
+ height: 300
+
+ property real speed: 1
+
+ property color d: Qt.rgba(Math.random() * 0.7,
+ Math.random() * 0.5,
+ Math.random() * 0.7,
+ Math.random() * 0.5)
+ property real tx
+ NumberAnimation on tx { from: 0; to: Math.PI * 2; duration: (Math.random() * 30 + 30) * 1000 / speed; loops: Animation.Infinite }
+ property real ty
+ NumberAnimation on ty { from: 0; to: Math.PI * 2; duration: (Math.random() * 30 + 30) * 1000 / speed; loops: Animation.Infinite }
+ property real tz
+ NumberAnimation on tz { from: 0; to: Math.PI * 2; duration: (Math.random() * 30 + 30) * 1000 / speed; loops: Animation.Infinite }
+ property real tw
+ NumberAnimation on tw { from: 0; to: Math.PI * 2; duration: (Math.random() * 30 + 30) * 1000 / speed; loops: Animation.Infinite }
+
+ property real amplitude: height / 2
+
+ property variant colorTable: ShaderEffectSource { sourceItem: Rectangle { width: 4; height: 4; color: "green" } }
+
+ fragmentShader: "
+ uniform lowp float qt_Opacity;
+ uniform lowp sampler2D colorTable;
+ varying highp vec2 qt_TexCoord0;
+ varying lowp float xx;
+
+ void main() {
+ gl_FragColor = texture2D(colorTable, qt_TexCoord0);
+ gl_FragColor.xyz += xx * 0.1;
+ gl_FragColor *= qt_Opacity;
+ }
+ "
+
+ vertexShader: "
+ uniform lowp vec4 d;
+ uniform highp float tx;
+ uniform highp float ty;
+ uniform highp float tz;
+ uniform highp float tw;
+ uniform highp float amplitude;
+ uniform highp mat4 qt_Matrix;
+ attribute highp vec4 qt_Vertex;
+ attribute highp vec2 qt_MultiTexCoord0;
+ varying highp vec2 qt_TexCoord0;
+ varying lowp float xx;
+ void main() {
+ highp vec4 pos = qt_Vertex;
+
+ highp float y = sin(-tx + d.x * qt_MultiTexCoord0.x * 57. + 12. * d.y)
+ + sin(ty * 2.0 + d.z * qt_MultiTexCoord0.x * 21. + 5. * d.w)
+ + sin(tz * 4.0 + d.y * qt_MultiTexCoord0.x * 13. + 7.0 * d.x)
+ + sin(-ty * 8.0 + d.w * qt_MultiTexCoord0.x * 29. + 15. * d.z);
+ highp float x = sin(-tx + d.x * qt_MultiTexCoord0.x * 213. + 15. * d.y)
+ + sin(ty * 2.0 + d.z * qt_MultiTexCoord0.x * 107. + 12. * d.w)
+ + sin(tz * 4.0 + d.y * qt_MultiTexCoord0.x * 13. + 5. * d.x)
+ + sin(-ty * 8.0 + d.w * qt_MultiTexCoord0.x * 15. + 7. * d.z);
+ xx = x;
+
+ pos.xy += vec2(x * sin(qt_MultiTexCoord0.x * 3.14152) * 0.3,
+ y * (1.0 - qt_MultiTexCoord0.y)) * amplitude;
+
+ gl_Position = qt_Matrix * pos;
+ qt_TexCoord0 = qt_MultiTexCoord0;
+ }
+ "
+
+ mesh: GridMesh { resolution: Qt.size(width / 10, 4) }
+
+}
diff --git a/experimental/qt5-intro-android/VideoSlide.qml b/experimental/qt5-intro-android/VideoSlide.qml
new file mode 100644
index 0000000..d0aca61
--- /dev/null
+++ b/experimental/qt5-intro-android/VideoSlide.qml
@@ -0,0 +1,122 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the Qt 5 launch demo.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+** of its contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.0
+import QtMultimedia 5
+import "presentation"
+
+import QtGraphicalEffects 1.0
+
+Slide {
+
+ id: slide
+
+ title: "Qt Multimedia - Video"
+ focus: true
+
+ Video {
+ id: video
+
+ anchors.fill: parent
+ source: videoPath
+ autoLoad: true
+ volume: presentation.masterVolume
+
+ layer.enabled: true;
+ layer.smooth: true;
+ layer.effect: Displace {
+ displacementSource: normalMap
+ displacement: button.pressed ? 1.0 : 0.0
+ Behavior on displacement {
+ NumberAnimation { duration: 1000 }
+ }
+ }
+ }
+
+ Rectangle {
+ id: theItem;
+ width: 256
+ height: 128
+ color: "transparent"
+ Text {
+ id: label
+ color: "white"
+ text: "Qt 5"
+// font.family: "Times New Roman"
+ font.bold: true;
+ font.pixelSize: 80
+ anchors.centerIn: parent
+ }
+ visible: false;
+ }
+
+ Keys.onPressed: {
+ console.debug("abc: " + event.key)
+ }
+
+ NormalMapGenerator {
+ anchors.left: theItem.right
+ width: 256
+ height: 128
+ id: normalMap
+ source: theItem;
+ visible: false
+ }
+
+ centeredText: video.hasVideo ? "" : "'" + video.source + "' is not found or cannot be played: " + video.errorString
+
+ onVisibleChanged: {
+ if (slide.visible)
+ video.play();
+ else
+ video.pause();
+ }
+
+ Button {
+ id: button
+ anchors.bottom: video.bottom
+ anchors.horizontalCenter: video.horizontalCenter
+ anchors.bottomMargin: height / 2;
+ label: pressed ? "Remove Effect" : "Displacement Effect";
+ width: height * 4;
+ height: parent.height * 0.1
+ }
+
+}
diff --git a/experimental/qt5-intro-android/WebKitSlideContent.qml b/experimental/qt5-intro-android/WebKitSlideContent.qml
new file mode 100644
index 0000000..ea5a364
--- /dev/null
+++ b/experimental/qt5-intro-android/WebKitSlideContent.qml
@@ -0,0 +1,84 @@
+import QtQuick 2.0
+import QtQuick.Particles 2.0
+import QtWebKit 3.0
+
+Item {
+ id: slide
+
+ anchors.fill: parent;
+
+ WebView {
+ id: browser
+ anchors.fill: parent
+ url: editor.text
+
+ // This works around rendering bugs in webkit. CSS animations
+ // and webGL content gets a bad offset, but this hack
+ // clips it so it is not visible. Not ideal, but it kinda works
+ // for now.
+ layer.enabled: true
+ layer.smooth: true
+ }
+
+ Rectangle {
+ border.width: 2
+ border.color: "black"
+ opacity: 0.5
+ color: "black"
+ anchors.fill: editor
+ anchors.margins: -editor.height * 0.2;
+
+ radius: -anchors.margins
+ antialiasing: true
+ }
+
+ TextInput {
+ id: editor
+ anchors.top: browser.bottom;
+ anchors.horizontalCenter: browser.horizontalCenter
+ font.pixelSize: slide.height * 0.05;
+ text: "http://qt.digia.com"
+ onAccepted: browser.reload();
+ color: "white"
+
+ onCursorPositionChanged: {
+ var rect = positionToRectangle(cursorPosition);
+ emitter.x = rect.x;
+ emitter.y = rect.y;
+ emitter.width = rect.width;
+ emitter.height = rect.height;
+ emitter.burst(10);
+ }
+
+ ParticleSystem {
+ id: sys1
+ running: slide.visible
+ }
+
+ ImageParticle {
+ system: sys1
+ source: "images/particle.png"
+ color: "white"
+ colorVariation: 0.2
+ alpha: 0
+ }
+
+ Emitter {
+ id: emitter
+ system: sys1
+
+ enabled: false
+
+ lifeSpan: 2000
+
+ velocity: PointDirection { xVariation: 30; yVariation: 30; }
+ acceleration: PointDirection {xVariation: 30; yVariation: 30; y: 100 }
+
+ endSize: 0
+
+ size: 8
+ sizeVariation: 2
+ }
+ }
+
+}
diff --git a/experimental/qt5-intro-android/WebkitSlide.qml b/experimental/qt5-intro-android/WebkitSlide.qml
new file mode 100644
index 0000000..edb8e4c
--- /dev/null
+++ b/experimental/qt5-intro-android/WebkitSlide.qml
@@ -0,0 +1,19 @@
+import QtQuick 2.0
+import "presentation"
+
+Slide {
+ id: slide
+
+ title: "Qt WebKit - WebView"
+
+ Loader {
+ id: webkitLoader
+
+ anchors.fill: parent
+
+ source: "WebKitSlideContent.qml"
+ }
+
+ centeredText: webkitLoader.status == Loader.Error ? "Qt WebKit not installed or otherwise failed to load" : ""
+}
+
diff --git a/experimental/qt5-intro-android/WidgetsSlide.qml b/experimental/qt5-intro-android/WidgetsSlide.qml
new file mode 100644
index 0000000..20f0770
--- /dev/null
+++ b/experimental/qt5-intro-android/WidgetsSlide.qml
@@ -0,0 +1,152 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the Qt 5 launch demo.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+** of its contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.0
+import "presentation"
+
+Slide {
+ id: slide
+
+ writeInText: "The Qt Widgets are working better than ever with accessibility\nimprovements and retina display support."
+
+ property int slamTime: 800;
+ property int waitTime: 500;
+
+ y: parent.height * 0.1
+
+ SequentialAnimation {
+ id: widgetAnimation
+ ScriptAction { script: {
+ boxesImage.opacity = 0;
+ mainwindowsImage.opacity = 0;
+ chipsWindow.opacity = 0;
+ stylesWindow.opacity = 0;
+ }
+ }
+ PauseAnimation { duration: 3000 }
+ ParallelAnimation {
+ NumberAnimation { target: boxesImage; property: "opacity"; from: 0; to: 1; duration: slide.slamTime; easing.type: Easing.OutBack }
+ NumberAnimation { target: boxesImage; property: "rotation"; from: 20; to: 10; duration: slide.slamTime; easing.type: Easing.OutBack }
+ NumberAnimation { target: boxesImage; property: "scale"; from: 2; to: 1.5; duration: slide.slamTime; easing.type: Easing.OutBack }
+ }
+ PauseAnimation { duration: slide.waitTime }
+ ParallelAnimation {
+ NumberAnimation { target: mainwindowsImage; property: "opacity"; from: 0; to: 1; duration: slide.slamTime; easing.type: Easing.OutBack }
+ NumberAnimation { target: mainwindowsImage; property: "rotation"; from: -35; to: -20; duration: slide.slamTime; easing.type: Easing.OutBack}
+ NumberAnimation { target: mainwindowsImage; property: "scale"; from: 2; to: 1.5; duration: slide.slamTime; easing.type: Easing.OutBack }
+ }
+ PauseAnimation { duration: slide.waitTime }
+ ParallelAnimation {
+ NumberAnimation { target: chipsWindow; property: "opacity"; from: 0; to: 1; duration: slide.slamTime; easing.type: Easing.InOutCubic }
+ NumberAnimation { target: chipsWindow; property: "rotation"; from: 10; to: 25; duration: slide.slamTime; easing.type: Easing.OutBack}
+ NumberAnimation { target: chipsWindow; property: "scale"; from: 2.5; to: 1.6; duration: slide.slamTime; easing.type: Easing.OutBack }
+ }
+ PauseAnimation { duration: slide.waitTime }
+ ParallelAnimation {
+ NumberAnimation { target: stylesWindow; property: "opacity"; from: 0; to: 1; duration: slide.slamTime; easing.type: Easing.InOutCubic }
+ NumberAnimation { target: stylesWindow; property: "rotation"; from: 30; to: -15; duration: slide.slamTime; easing.type: Easing.OutBack}
+ NumberAnimation { target: stylesWindow; property: "scale"; from: 1.8; to: 1.4; duration: slide.slamTime; easing.type: Easing.OutBack }
+ }
+ running: false
+ }
+
+ onVisibleChanged: {
+ widgetAnimation.running = slide.visible;
+ }
+
+ Row {
+ x: slide.width * 0.05
+ y: slide.height * 0.65;
+ width: parent.width
+ Image {
+ id: boxesImage;
+ source: "images/widgets_boxes.png"
+ fillMode: Image.PreserveAspectFit
+ width: slide.width * .2
+ antialiasing: true
+ opacity: 0;
+ y: -slide.height * 0.2
+ rotation: 10
+ scale: 1.5;
+ }
+ Image {
+ id: mainwindowsImage
+ source: "images/widgets_mainwindows.png"
+ fillMode: Image.PreserveAspectFit
+ width: slide.width * .2
+ antialiasing: true
+ opacity: 0
+ }
+ Image {
+ id: chipsWindow
+ source: "images/widgets_chips.png"
+ fillMode: Image.PreserveAspectFit
+ width: slide.width * .2
+ x: slide.width * -0.05
+ y: -slide.height * 0.2
+ antialiasing: true
+ opacity: 0
+ }
+
+ Image {
+ id: stylesWindow
+ source: "images/widgets_styles_fusion.png"
+ fillMode: Image.PreserveAspectFit
+ width: slide.width * .2
+
+ x: slide.width * 1
+ y: -slide.height * 0.1
+ antialiasing: true
+ opacity: 0
+
+ Image {
+ source: "images/widgets_styles_macstyle.png"
+ fillMode: Image.PreserveAspectFit
+ width: slide.width * .2
+
+ x: parent.width * 0.3
+ y: parent.width * 0.1
+ rotation: -20
+ antialiasing: true
+ }
+ }
+ }
+}
+
diff --git a/experimental/qt5-intro-android/android.pro b/experimental/qt5-intro-android/android.pro
new file mode 100644
index 0000000..118b121
--- /dev/null
+++ b/experimental/qt5-intro-android/android.pro
@@ -0,0 +1,154 @@
+TARGET = qt5launchdemo
+QT += quick multimedia sql
+
+SOURCES += \
+ main.cpp
+
+RESOURCES += \
+ main.qrc
+
+OTHER_FILES += \
+ calqlatr/Calqlatr.qml \
+ calqlatr/content/Button.qml \
+ calqlatr/content/StyleLabel.qml \
+ calqlatr/content/NumberPad.qml \
+ calqlatr/content/Display.qml \
+ calqlatr/content/calculator.js \
+ calqlatr/content/audio/touch.wav \
+ calqlatr/content/images/touch-white.png \
+ calqlatr/content/images/touch-green.png \
+ calqlatr/content/images/settings-selected-b.png \
+ calqlatr/content/images/settings-selected-a.png \
+ calqlatr/content/images/paper-grip.png \
+ calqlatr/content/images/paper-edge-right.png \
+ calqlatr/content/images/paper-edge-left.png \
+ calqlatr/content/images/logo.png \
+ calqlatr/content/images/icon-settings.png \
+ calqlatr/content/images/icon-close.png \
+ calqlatr/content/images/icon-back.png \
+ images/widgets_styles_macstyle.png \
+ images/widgets_styles_fusion.png \
+ images/widgets_mainwindows.png \
+ images/widgets_chips.png \
+ images/widgets_boxes.png \
+ images/qt-logo.png \
+ images/particle.png \
+ images/fog.png \
+ images/displace.png \
+ images/butterfly.png \
+ images/ally.png \
+ maroon/Maroon.qml \
+ maroon/content/SoundEffect.qml \
+ maroon/content/NewGameScreen.qml \
+ maroon/content/InfoBar.qml \
+ maroon/content/GameOverScreen.qml \
+ maroon/content/GameCanvas.qml \
+ maroon/content/BuildButton.qml \
+ maroon/content/logic.js \
+ android/res/values-zh-rTW/strings.xml \
+ android/res/values-et/strings.xml \
+ android/res/values-nb/strings.xml \
+ android/res/values-ro/strings.xml \
+ android/res/values/libs.xml \
+ android/res/values/strings.xml \
+ android/res/layout/splash.xml \
+ android/res/values-fr/strings.xml \
+ android/res/values-pl/strings.xml \
+ android/res/values-ja/strings.xml \
+ android/res/values-el/strings.xml \
+ android/res/values-pt-rBR/strings.xml \
+ android/res/values-es/strings.xml \
+ android/res/values-ms/strings.xml \
+ android/res/values-id/strings.xml \
+ android/res/values-fa/strings.xml \
+ android/res/values-zh-rCN/strings.xml \
+ android/res/values-de/strings.xml \
+ android/res/values-it/strings.xml \
+ android/res/values-rs/strings.xml \
+ android/res/values-ru/strings.xml \
+ android/res/values-nl/strings.xml \
+ android/version.xml \
+ android/AndroidManifest.xml \
+ android/src/org/qtproject/qt5/android/bindings/QtActivity.java \
+ android/src/org/qtproject/qt5/android/bindings/QtApplication.java \
+ android/src/org/kde/necessitas/ministro/IMinistro.aidl \
+ android/src/org/kde/necessitas/ministro/IMinistroCallback.aidl \
+ android/res/values-zh-rTW/strings.xml \
+ android/res/values-et/strings.xml \
+ android/res/values-nb/strings.xml \
+ android/res/values-ro/strings.xml \
+ android/res/values/libs.xml \
+ android/res/values/strings.xml \
+ android/res/layout/splash.xml \
+ android/res/values-fr/strings.xml \
+ android/res/values-pl/strings.xml \
+ android/res/values-ja/strings.xml \
+ android/res/values-el/strings.xml \
+ android/res/values-pt-rBR/strings.xml \
+ android/res/values-es/strings.xml \
+ android/res/values-ms/strings.xml \
+ android/res/values-id/strings.xml \
+ android/res/values-fa/strings.xml \
+ android/res/values-zh-rCN/strings.xml \
+ android/res/values-de/strings.xml \
+ android/res/values-it/strings.xml \
+ android/res/values-rs/strings.xml \
+ android/res/values-ru/strings.xml \
+ android/res/values-nl/strings.xml \
+ android/version.xml \
+ android/AndroidManifest.xml \
+ android/src/org/qtproject/qt5/android/bindings/QtActivity.java \
+ android/src/org/qtproject/qt5/android/bindings/QtApplication.java \
+ android/src/org/kde/necessitas/ministro/IMinistro.aidl \
+ android/src/org/kde/necessitas/ministro/IMinistroCallback.aidl \
+ android/res/values-zh-rTW/strings.xml \
+ android/res/values-et/strings.xml \
+ android/res/values-nb/strings.xml \
+ android/res/values-ro/strings.xml \
+ android/res/values/libs.xml \
+ android/res/values/strings.xml \
+ android/res/layout/splash.xml \
+ android/res/values-fr/strings.xml \
+ android/res/values-pl/strings.xml \
+ android/res/values-ja/strings.xml \
+ android/res/values-el/strings.xml \
+ android/res/values-pt-rBR/strings.xml \
+ android/res/values-es/strings.xml \
+ android/res/values-ms/strings.xml \
+ android/res/values-id/strings.xml \
+ android/res/values-fa/strings.xml \
+ android/res/values-zh-rCN/strings.xml \
+ android/res/values-de/strings.xml \
+ android/res/values-it/strings.xml \
+ android/res/values-rs/strings.xml \
+ android/res/values-ru/strings.xml \
+ android/res/values-nl/strings.xml \
+ android/version.xml \
+ android/AndroidManifest.xml \
+ android/src/org/qtproject/qt5/android/bindings/QtActivity.java \
+ android/src/org/qtproject/qt5/android/bindings/QtApplication.java \
+ android/src/org/kde/necessitas/ministro/IMinistro.aidl \
+ android/src/org/kde/necessitas/ministro/IMinistroCallback.aidl \
+ description.txt \
+ README \
+ preview_l.jpg \
+ WidgetsSlide.qml \
+ WebKitSlideContent.qml \
+ WebkitSlide.qml \
+ VideoSlide.qml \
+ Swirl.qml \
+ SlideDeck.qml \
+ ShaderSlide.qml \
+ ParticleSlide.qml \
+ OpacityTransitionPresentation.qml \
+ NormalMapGenerator.qml \
+ NoisyGradient.qml \
+ main.qml \
+ main_hifi.qml \
+ FontSlide.qml \
+ ExamplesSlide.qml \
+ EffectsSlide.qml \
+ DemoMain.qml \
+ CanvasSlide.qml \
+ CameraSlide.qml \
+ Button.qml
diff --git a/experimental/qt5-intro-android/android/AndroidManifest.xml b/experimental/qt5-intro-android/android/AndroidManifest.xml
new file mode 100644
index 0000000..82a50d3
--- /dev/null
+++ b/experimental/qt5-intro-android/android/AndroidManifest.xml
@@ -0,0 +1,38 @@
+<?xml version='1.0' encoding='utf-8'?>
+<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="2" android:versionName="1.0" package="com.digia.Qt5Intro" android:installLocation="preferExternal">
+ <application android:name="org.qtproject.qt5.android.bindings.QtApplication" android:label="@string/app_name" android:icon="@drawable/icon">
+ <activity android:name="org.qtproject.qt5.android.bindings.QtActivity" android:label="@string/app_name" android:configChanges="orientation|locale|fontScale|keyboard|keyboardHidden">
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN"/>
+ <category android:name="android.intent.category.LAUNCHER"/>
+ </intent-filter>
+ <meta-data android:resource="@array/qt_sources" android:name="android.app.qt_sources_resource_id"/>
+ <meta-data android:value="@string/repository" android:name="android.app.repository"/>
+ <meta-data android:resource="@array/qt_libs" android:name="android.app.qt_libs_resource_id"/>
+ <meta-data android:resource="@array/bundled_libs" android:name="android.app.bundled_libs_resource_id"/>
+ <meta-data android:value="qt5launchdemo" android:name="android.app.lib_name"/>
+ <!-- Deploy Qt libs as part of package -->
+ <meta-data android:value="1" android:name="android.app.bundle_local_qt_libs"/>
+ <meta-data android:resource="@array/bundled_in_lib" android:name="android.app.bundled_in_lib_resource_id"/>
+ <meta-data android:resource="@array/bundled_in_assets" android:name="android.app.bundled_in_assets_resource_id"/>
+ <!-- Run with local libs -->
+ <meta-data android:value="1" android:name="android.app.use_local_qt_libs"/>
+ <meta-data android:value="/data/local/tmp/qt/" android:name="android.app.libs_prefix"/>
+ <meta-data android:value="libs/libgnustl_shared.so:plugins/mediaservice/libandroidmediaplayer.so:lib/libQt5MultimediaQuick_p.so:lib/libQt5QuickParticles.so:plugins/platforms/android/libqtforandroidGL.so:" android:name="android.app.load_local_libs"/>
+ <meta-data android:value="jar/QtAndroid-bundled.jar:jar/QtMultimedia-bundled.jar:" android:name="android.app.load_local_jars"/>
+ <meta-data android:value="org.qtproject.qt5.android.multimedia.QtAndroidMediaPlayer:" android:name="android.app.static_init_classes"/>
+ <!-- Messages maps -->
+ <meta-data android:value="@string/ministro_not_found_msg" android:name="android.app.ministro_not_found_msg"/>
+ <meta-data android:value="@string/ministro_needed_msg" android:name="android.app.ministro_needed_msg"/>
+ <meta-data android:value="@string/fatal_error_msg" android:name="android.app.fatal_error_msg"/>
+ <!-- Messages maps -->
+ <!-- Splash screen -->
+ <meta-data android:resource="@layout/splash" android:name="android.app.splash_screen"/>
+ <!-- Splash screen -->
+ </activity>
+ </application>
+ <uses-sdk android:minSdkVersion="10"/>
+ <supports-screens android:largeScreens="true" android:anyDensity="true" android:normalScreens="true" android:smallScreens="true"/>
+ <uses-permission android:name="android.permission.INTERNET"/>
+ <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
+</manifest>
diff --git a/experimental/qt5-intro-android/android/res/drawable-hdpi/icon.png b/experimental/qt5-intro-android/android/res/drawable-hdpi/icon.png
new file mode 100644
index 0000000..379cfab
--- /dev/null
+++ b/experimental/qt5-intro-android/android/res/drawable-hdpi/icon.png
Binary files differ
diff --git a/experimental/qt5-intro-android/android/res/drawable-ldpi/icon.png b/experimental/qt5-intro-android/android/res/drawable-ldpi/icon.png
new file mode 100644
index 0000000..587c0ca
--- /dev/null
+++ b/experimental/qt5-intro-android/android/res/drawable-ldpi/icon.png
Binary files differ
diff --git a/experimental/qt5-intro-android/android/res/drawable-mdpi/icon.png b/experimental/qt5-intro-android/android/res/drawable-mdpi/icon.png
new file mode 100644
index 0000000..d93a564
--- /dev/null
+++ b/experimental/qt5-intro-android/android/res/drawable-mdpi/icon.png
Binary files differ
diff --git a/experimental/qt5-intro-android/android/res/values/libs.xml b/experimental/qt5-intro-android/android/res/values/libs.xml
new file mode 100644
index 0000000..44f5669
--- /dev/null
+++ b/experimental/qt5-intro-android/android/res/values/libs.xml
@@ -0,0 +1,13 @@
+<?xml version='1.0' encoding='utf-8'?>
+<resources>
+ <array name="qt_sources">
+ <item>https://download.qt-project.org/ministro/android/qt5/latest</item>
+ </array>
+ <string name="repository">default</string>
+ <array name="bundled_libs"/>
+ <array name="bundled_in_lib"/>
+ <array name="bundled_in_assets"/>
+ <array name="qt_libs">
+ <item>Qt5Core</item>
+ </array>
+</resources>
diff --git a/experimental/qt5-intro-android/android/res/values/strings.xml b/experimental/qt5-intro-android/android/res/values/strings.xml
new file mode 100644
index 0000000..7beee08
--- /dev/null
+++ b/experimental/qt5-intro-android/android/res/values/strings.xml
@@ -0,0 +1,7 @@
+<?xml version='1.0' encoding='utf-8'?>
+<resources>
+ <string name="app_name">Qt 5 Intro</string>
+ <string name="ministro_not_found_msg">Can\'t find Ministro service.\nThe application can\'t start.</string>
+ <string name="ministro_needed_msg">This application requires Ministro service. Would you like to install it?</string>
+ <string name="fatal_error_msg">Your application encountered a fatal error and cannot continue.</string>
+</resources>
diff --git a/experimental/qt5-intro-android/android/version.xml b/experimental/qt5-intro-android/android/version.xml
new file mode 100644
index 0000000..e709357
--- /dev/null
+++ b/experimental/qt5-intro-android/android/version.xml
@@ -0,0 +1,8 @@
+<version value="5">
+ <ignore>
+ <file>AndroidManifest.xml</file>
+ <file>libs.xml</file>
+ <file>logo.png</file>
+ <file>icon.png</file>
+ </ignore>
+</version>
diff --git a/experimental/qt5-intro-android/calqlatr/Calqlatr.qml b/experimental/qt5-intro-android/calqlatr/Calqlatr.qml
new file mode 100644
index 0000000..7640fbd
--- /dev/null
+++ b/experimental/qt5-intro-android/calqlatr/Calqlatr.qml
@@ -0,0 +1,110 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+** of its contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.0
+import "content"
+import "content/calculator.js" as CalcEngine
+
+
+Rectangle {
+ id: window
+ width: 320
+ height: 480
+ focus: true
+ color: "#272822"
+
+ onWidthChanged: controller.reload()
+
+ function operatorPressed(operator) { CalcEngine.operatorPressed(operator) }
+ function digitPressed(digit) { CalcEngine.digitPressed(digit) }
+
+ Item {
+ id: pad
+ width: window.width * 0.58
+ NumberPad { y: 10; anchors.horizontalCenter: parent.horizontalCenter }
+ }
+
+ AnimationController {
+ id: controller
+ animation: ParallelAnimation {
+ id: anim
+ NumberAnimation { target: display; property: "x"; duration: 400; from: -16; to: window.width - display.width; easing.type: Easing.InOutQuad }
+ NumberAnimation { target: pad; property: "x"; duration: 400; from: window.width - pad.width; to: 0; easing.type: Easing.InOutQuad }
+ SequentialAnimation {
+ NumberAnimation { target: pad; property: "scale"; duration: 200; from: 1; to: 0.97; easing.type: Easing.InOutQuad }
+ NumberAnimation { target: pad; property: "scale"; duration: 200; from: 0.97; to: 1; easing.type: Easing.InOutQuad }
+ }
+ }
+ }
+
+ Display {
+ id: display
+ x: -16
+ width: window.width * 0.42
+ height: parent.height
+
+ MouseArea {
+ property real startX: 0
+ property real oldP: 0
+ property bool rewind: false
+
+ anchors.fill: parent
+ onPositionChanged: {
+ var reverse = startX > window.width / 2
+ var mx = mapToItem(window, mouse.x).x
+ var p = Math.abs((mx - startX) / (window.width - display.width))
+ if (p < oldP)
+ rewind = reverse ? false : true
+ else
+ rewind = reverse ? true : false
+ controller.progress = reverse ? 1 - p : p
+ oldP = p
+ }
+ onPressed: startX = mapToItem(window, mouse.x).x
+ onReleased: {
+ if (rewind)
+ controller.completeToBeginning()
+ else
+ controller.completeToEnd()
+ }
+ }
+ }
+
+}
diff --git a/experimental/qt5-intro-android/calqlatr/content/Button.qml b/experimental/qt5-intro-android/calqlatr/content/Button.qml
new file mode 100644
index 0000000..c355c2d
--- /dev/null
+++ b/experimental/qt5-intro-android/calqlatr/content/Button.qml
@@ -0,0 +1,80 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+** of its contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.0
+
+Item {
+ property alias text: textItem.text
+ property alias color: textItem.color
+
+ property bool operator: false
+
+ signal clicked
+
+ width: 30
+ height: 50
+
+ Text {
+ id: textItem
+ font.pixelSize: 48
+ wrapMode: Text.WordWrap
+ lineHeight: 0.75
+ color: "white"
+ }
+
+// Rectangle {
+// color: "red"
+// opacity: 0.2
+// anchors.fill: mouse
+// }
+
+ MouseArea {
+ id: mouse
+ anchors.fill: parent
+ anchors.margins: -5
+ onClicked: {
+ //parent.clicked()
+ if (operator)
+ window.operatorPressed(parent.text)
+ else
+ window.digitPressed(parent.text)
+ }
+ }
+}
diff --git a/experimental/qt5-intro-android/calqlatr/content/Display.qml b/experimental/qt5-intro-android/calqlatr/content/Display.qml
new file mode 100644
index 0000000..3c1d9c0
--- /dev/null
+++ b/experimental/qt5-intro-android/calqlatr/content/Display.qml
@@ -0,0 +1,124 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+** of its contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.0
+
+Item {
+ id: display
+
+ function displayOperator(operator)
+ {
+ listView.model.append({ "operator": operator, "operand": "" })
+ }
+
+ function newLine(operator, operand)
+ {
+ listView.model.append({ "operator": operator, "operand": operand })
+ }
+
+ function appendDigit(digit)
+ {
+ if (!listView.model.count)
+ listView.model.append({ "operator": "", "operand": "" })
+ var i = listView.model.count - 1;
+ listView.model.get(i).operand = listView.model.get(i).operand + digit;
+ }
+
+ Item {
+ id: theItem
+ width: parent.width + 32
+ height: parent.height
+
+ Rectangle {
+ id: rect
+ x: 16
+ color: "white"
+ height: parent.height
+ width: display.width - 16
+ }
+ Image {
+ anchors.right: rect.left
+ source: "images/paper-edge-left.png"
+ height: parent.height
+ fillMode: Image.TileVertically
+ }
+ Image {
+ anchors.left: rect.right
+ source: "images/paper-edge-right.png"
+ height: parent.height
+ fillMode: Image.TileVertically
+ }
+
+ Image {
+ source: "images/paper-grip.png"
+ anchors.horizontalCenter: parent.horizontalCenter
+ anchors.bottom: parent.bottom
+ anchors.bottomMargin: 20
+ }
+
+ ListView {
+ id: listView
+ x: 16; y: 30
+ width: display.width
+ height: display.height
+ delegate: Item {
+ height: 20
+ width: parent.width
+ Text {
+ id: operator
+ x: 8
+ font.pixelSize: 18
+ color: "#6da43d"
+ text: model.operator
+ }
+ Text {
+ id: operand
+ font.pixelSize: 18
+ anchors.right: parent.right
+ anchors.rightMargin: 26
+ text: model.operand
+ }
+ }
+ model: ListModel { }
+ }
+
+ }
+
+}
diff --git a/experimental/qt5-intro-android/calqlatr/content/NumberPad.qml b/experimental/qt5-intro-android/calqlatr/content/NumberPad.qml
new file mode 100644
index 0000000..853c763
--- /dev/null
+++ b/experimental/qt5-intro-android/calqlatr/content/NumberPad.qml
@@ -0,0 +1,69 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+** of its contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.0
+
+Grid {
+ columns: 3
+ columnSpacing: 32
+ rowSpacing: 16
+
+ Button { text: "7" }
+ Button { text: "8" }
+ Button { text: "9" }
+ Button { text: "4" }
+ Button { text: "5" }
+ Button { text: "6" }
+ Button { text: "1" }
+ Button { text: "2" }
+ Button { text: "3" }
+ Button { text: "0" }
+ Button { text: "." }
+ Button { text: " " }
+ Button { text: "±"; color: "#6da43d"; operator: true }
+ Button { text: "−"; color: "#6da43d"; operator: true }
+ Button { text: "+"; color: "#6da43d"; operator: true }
+ Button { text: " "; color: "#6da43d"; operator: true }
+ Button { text: "÷"; color: "#6da43d"; operator: true }
+ Button { text: "×"; color: "#6da43d"; operator: true }
+ Button { text: "C"; color: "#6da43d"; operator: true }
+ Button { text: " "; color: "#6da43d"; operator: true }
+ Button { text: "="; color: "#6da43d"; operator: true }
+}
diff --git a/experimental/qt5-intro-android/calqlatr/content/StyleLabel.qml b/experimental/qt5-intro-android/calqlatr/content/StyleLabel.qml
new file mode 100644
index 0000000..3bdea86
--- /dev/null
+++ b/experimental/qt5-intro-android/calqlatr/content/StyleLabel.qml
@@ -0,0 +1,50 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+** of its contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.0
+
+Text {
+ width: 64
+ font.pixelSize: 14
+ font.bold: false
+ wrapMode: Text.WordWrap
+ lineHeight: 0.75
+ color: "#676764"
+}
diff --git a/experimental/qt5-intro-android/calqlatr/content/audio/touch.wav b/experimental/qt5-intro-android/calqlatr/content/audio/touch.wav
new file mode 100644
index 0000000..94cccb7
--- /dev/null
+++ b/experimental/qt5-intro-android/calqlatr/content/audio/touch.wav
Binary files differ
diff --git a/experimental/qt5-intro-android/calqlatr/content/calculator.js b/experimental/qt5-intro-android/calqlatr/content/calculator.js
new file mode 100644
index 0000000..843ef39
--- /dev/null
+++ b/experimental/qt5-intro-android/calqlatr/content/calculator.js
@@ -0,0 +1,143 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+** of its contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+
+var curVal = 0
+var memory = 0
+var lastOp = ""
+var previousOperator = ""
+var digits = ""
+
+function disabled(op) {
+ if (op == "." && digits.toString().search(/\./) != -1) {
+ return true
+ } else if (op == window.squareRoot && digits.toString().search(/-/) != -1) {
+ return true
+ } else {
+ return false
+ }
+}
+
+function digitPressed(op)
+{
+ if (disabled(op))
+ return
+ if (digits.toString().length >= 14)
+ return
+ if (lastOp.toString().length == 1 && ((lastOp >= "0" && lastOp <= "9") || lastOp == ".") ) {
+ digits = digits + op.toString()
+ display.appendDigit(op.toString())
+ } else {
+ digits = op
+ display.appendDigit(op.toString())
+ }
+ lastOp = op
+}
+
+function operatorPressed(op)
+{
+ if (disabled(op))
+ return
+ lastOp = op
+
+ if (previousOperator == "+") {
+ digits = Number(digits.valueOf()) + Number(curVal.valueOf())
+ } else if (previousOperator == "−") {
+ digits = Number(curVal) - Number(digits.valueOf())
+ } else if (previousOperator == "×") {
+ digits = Number(curVal) * Number(digits.valueOf())
+ } else if (previousOperator == "÷") {
+ digits = Number(Number(curVal) / Number(digits.valueOf())).toString()
+ } else if (previousOperator == "=") {
+ }
+
+ if (op == "+" || op == "−" || op == "×" || op == "÷") {
+ previousOperator = op
+ curVal = digits.valueOf()
+ display.displayOperator(previousOperator)
+ return
+ }
+
+ if (op == "=") {
+ display.newLine("=", digits.toString())
+ }
+
+ curVal = 0
+ previousOperator = ""
+
+ if (op == "1/x") {
+ digits = (1 / digits.valueOf()).toString()
+ } else if (op == "x^2") {
+ digits = (digits.valueOf() * digits.valueOf()).toString()
+ } else if (op == "Abs") {
+ digits = (Math.abs(digits.valueOf())).toString()
+ } else if (op == "Int") {
+ digits = (Math.floor(digits.valueOf())).toString()
+ } else if (op == window.plusminus) {
+ digits = (digits.valueOf() * -1).toString()
+ } else if (op == window.squareRoot) {
+ digits = (Math.sqrt(digits.valueOf())).toString()
+ } else if (op == "mc") {
+ memory = 0;
+ } else if (op == "m+") {
+ memory += digits.valueOf()
+ } else if (op == "mr") {
+ digits = memory.toString()
+ } else if (op == "m-") {
+ memory = digits.valueOf()
+ } else if (op == window.leftArrow) {
+ digits = digits.toString().slice(0, -1)
+ if (digits.length == 0) {
+ digits = "0"
+ }
+ } else if (op == "Off") {
+ Qt.quit();
+ } else if (op == "C") {
+ digits = "0"
+ } else if (op == "AC") {
+ curVal = 0
+ memory = 0
+ lastOp = ""
+ digits ="0"
+ }
+
+
+}
+
diff --git a/experimental/qt5-intro-android/calqlatr/content/images/icon-back.png b/experimental/qt5-intro-android/calqlatr/content/images/icon-back.png
new file mode 100644
index 0000000..2989ee2
--- /dev/null
+++ b/experimental/qt5-intro-android/calqlatr/content/images/icon-back.png
Binary files differ
diff --git a/experimental/qt5-intro-android/calqlatr/content/images/icon-close.png b/experimental/qt5-intro-android/calqlatr/content/images/icon-close.png
new file mode 100644
index 0000000..3e21248
--- /dev/null
+++ b/experimental/qt5-intro-android/calqlatr/content/images/icon-close.png
Binary files differ
diff --git a/experimental/qt5-intro-android/calqlatr/content/images/icon-settings.png b/experimental/qt5-intro-android/calqlatr/content/images/icon-settings.png
new file mode 100644
index 0000000..98e662f
--- /dev/null
+++ b/experimental/qt5-intro-android/calqlatr/content/images/icon-settings.png
Binary files differ
diff --git a/experimental/qt5-intro-android/calqlatr/content/images/logo.png b/experimental/qt5-intro-android/calqlatr/content/images/logo.png
new file mode 100644
index 0000000..6bc6561
--- /dev/null
+++ b/experimental/qt5-intro-android/calqlatr/content/images/logo.png
Binary files differ
diff --git a/experimental/qt5-intro-android/calqlatr/content/images/paper-edge-left.png b/experimental/qt5-intro-android/calqlatr/content/images/paper-edge-left.png
new file mode 100644
index 0000000..ca29a3a
--- /dev/null
+++ b/experimental/qt5-intro-android/calqlatr/content/images/paper-edge-left.png
Binary files differ
diff --git a/experimental/qt5-intro-android/calqlatr/content/images/paper-edge-right.png b/experimental/qt5-intro-android/calqlatr/content/images/paper-edge-right.png
new file mode 100644
index 0000000..7c2da7b
--- /dev/null
+++ b/experimental/qt5-intro-android/calqlatr/content/images/paper-edge-right.png
Binary files differ
diff --git a/experimental/qt5-intro-android/calqlatr/content/images/paper-grip.png b/experimental/qt5-intro-android/calqlatr/content/images/paper-grip.png
new file mode 100644
index 0000000..953c408
--- /dev/null
+++ b/experimental/qt5-intro-android/calqlatr/content/images/paper-grip.png
Binary files differ
diff --git a/experimental/qt5-intro-android/calqlatr/content/images/settings-selected-a.png b/experimental/qt5-intro-android/calqlatr/content/images/settings-selected-a.png
new file mode 100644
index 0000000..e08ddfa
--- /dev/null
+++ b/experimental/qt5-intro-android/calqlatr/content/images/settings-selected-a.png
Binary files differ
diff --git a/experimental/qt5-intro-android/calqlatr/content/images/settings-selected-b.png b/experimental/qt5-intro-android/calqlatr/content/images/settings-selected-b.png
new file mode 100644
index 0000000..d9aa7e3
--- /dev/null
+++ b/experimental/qt5-intro-android/calqlatr/content/images/settings-selected-b.png
Binary files differ
diff --git a/experimental/qt5-intro-android/calqlatr/content/images/touch-green.png b/experimental/qt5-intro-android/calqlatr/content/images/touch-green.png
new file mode 100644
index 0000000..64dbde6
--- /dev/null
+++ b/experimental/qt5-intro-android/calqlatr/content/images/touch-green.png
Binary files differ
diff --git a/experimental/qt5-intro-android/calqlatr/content/images/touch-white.png b/experimental/qt5-intro-android/calqlatr/content/images/touch-white.png
new file mode 100644
index 0000000..bb02b00
--- /dev/null
+++ b/experimental/qt5-intro-android/calqlatr/content/images/touch-white.png
Binary files differ
diff --git a/experimental/qt5-intro-android/demo.qmlproject b/experimental/qt5-intro-android/demo.qmlproject
new file mode 100644
index 0000000..eed1c97
--- /dev/null
+++ b/experimental/qt5-intro-android/demo.qmlproject
@@ -0,0 +1,18 @@
+/* File generated by Qt Creator, version 2.6.1 */
+
+import QmlProject 1.1
+
+Project {
+ mainFile: "main.qml"
+
+ /* Include .qml, .js, and image files from current directory and subdirectories */
+ QmlFiles {
+ directory: "."
+ }
+ JavaScriptFiles {
+ directory: "."
+ }
+ ImageFiles {
+ directory: "images"
+ }
+}
diff --git a/experimental/qt5-intro-android/description.txt b/experimental/qt5-intro-android/description.txt
new file mode 100644
index 0000000..48d03f3
--- /dev/null
+++ b/experimental/qt5-intro-android/description.txt
@@ -0,0 +1,6 @@
+The following is a quick tour of what is new in Qt 5.
+
+It is an application written with Qt Quick, based on Qt 5. The source code is available from: https://qt.gitorious.org/qt-labs/qt5-launch-demo
+The demo makes use of the QML Presentation System, available from: ssh://codereview.qt-project.org/qt-labs/qml-presentation-system.git
+
+The demo has been modified slightly to run in this launcher.
diff --git a/experimental/qt5-intro-android/images/ally.png b/experimental/qt5-intro-android/images/ally.png
new file mode 100644
index 0000000..05b405b
--- /dev/null
+++ b/experimental/qt5-intro-android/images/ally.png
Binary files differ
diff --git a/experimental/qt5-intro-android/images/butterfly.png b/experimental/qt5-intro-android/images/butterfly.png
new file mode 100644
index 0000000..b8cc35c
--- /dev/null
+++ b/experimental/qt5-intro-android/images/butterfly.png
Binary files differ
diff --git a/experimental/qt5-intro-android/images/displace.png b/experimental/qt5-intro-android/images/displace.png
new file mode 100644
index 0000000..440e8cb
--- /dev/null
+++ b/experimental/qt5-intro-android/images/displace.png
Binary files differ
diff --git a/experimental/qt5-intro-android/images/fog.png b/experimental/qt5-intro-android/images/fog.png
new file mode 100644
index 0000000..f462222
--- /dev/null
+++ b/experimental/qt5-intro-android/images/fog.png
Binary files differ
diff --git a/experimental/qt5-intro-android/images/particle.png b/experimental/qt5-intro-android/images/particle.png
new file mode 100644
index 0000000..5c83896
--- /dev/null
+++ b/experimental/qt5-intro-android/images/particle.png
Binary files differ
diff --git a/experimental/qt5-intro-android/images/qt-logo-hdpi.png b/experimental/qt5-intro-android/images/qt-logo-hdpi.png
new file mode 100644
index 0000000..379cfab
--- /dev/null
+++ b/experimental/qt5-intro-android/images/qt-logo-hdpi.png
Binary files differ
diff --git a/experimental/qt5-intro-android/images/qt-logo-ldpi.png b/experimental/qt5-intro-android/images/qt-logo-ldpi.png
new file mode 100644
index 0000000..587c0ca
--- /dev/null
+++ b/experimental/qt5-intro-android/images/qt-logo-ldpi.png
Binary files differ
diff --git a/experimental/qt5-intro-android/images/qt-logo-mdpi.png b/experimental/qt5-intro-android/images/qt-logo-mdpi.png
new file mode 100644
index 0000000..d93a564
--- /dev/null
+++ b/experimental/qt5-intro-android/images/qt-logo-mdpi.png
Binary files differ
diff --git a/experimental/qt5-intro-android/images/qt-logo.png b/experimental/qt5-intro-android/images/qt-logo.png
new file mode 100644
index 0000000..7b5c533
--- /dev/null
+++ b/experimental/qt5-intro-android/images/qt-logo.png
Binary files differ
diff --git a/experimental/qt5-intro-android/images/widgets_boxes.png b/experimental/qt5-intro-android/images/widgets_boxes.png
new file mode 100644
index 0000000..3115255
--- /dev/null
+++ b/experimental/qt5-intro-android/images/widgets_boxes.png
Binary files differ
diff --git a/experimental/qt5-intro-android/images/widgets_chips.png b/experimental/qt5-intro-android/images/widgets_chips.png
new file mode 100644
index 0000000..4ef1664
--- /dev/null
+++ b/experimental/qt5-intro-android/images/widgets_chips.png
Binary files differ
diff --git a/experimental/qt5-intro-android/images/widgets_mainwindows.png b/experimental/qt5-intro-android/images/widgets_mainwindows.png
new file mode 100644
index 0000000..5ce5416
--- /dev/null
+++ b/experimental/qt5-intro-android/images/widgets_mainwindows.png
Binary files differ
diff --git a/experimental/qt5-intro-android/images/widgets_styles_fusion.png b/experimental/qt5-intro-android/images/widgets_styles_fusion.png
new file mode 100644
index 0000000..d94f859
--- /dev/null
+++ b/experimental/qt5-intro-android/images/widgets_styles_fusion.png
Binary files differ
diff --git a/experimental/qt5-intro-android/images/widgets_styles_macstyle.png b/experimental/qt5-intro-android/images/widgets_styles_macstyle.png
new file mode 100644
index 0000000..033f43b
--- /dev/null
+++ b/experimental/qt5-intro-android/images/widgets_styles_macstyle.png
Binary files differ
diff --git a/experimental/qt5-intro-android/main.cpp b/experimental/qt5-intro-android/main.cpp
new file mode 100644
index 0000000..f68e26c
--- /dev/null
+++ b/experimental/qt5-intro-android/main.cpp
@@ -0,0 +1,33 @@
+#include <QtGui>
+#include <QtQuick>
+
+QtMessageHandler oldMessageHandler = 0;
+void messageHandler(QtMsgType type, const QMessageLogContext &ctx, const QString &msg)
+{
+ if (type == QtCriticalMsg || type == QtFatalMsg)
+ oldMessageHandler(type, ctx, msg);
+}
+
+int main(int argc, char **argv)
+{
+#if defined(QT_NO_DEBUG)
+ oldMessageHandler = qInstallMessageHandler(messageHandler);
+#endif
+
+ QGuiApplication app(argc, argv);
+
+ QString videoPath = QStandardPaths::writableLocation(QStandardPaths::MoviesLocation);
+ if (!QFile::exists(videoPath + QLatin1String("/Qt5_Animation_small.mp4"))) {
+ QDir().mkpath(videoPath);
+ if (!QFile::copy(QLatin1String("assets:/video/Qt5_Animation_small.mp4"), videoPath + QLatin1String("/Qt5_Animation_small.mp4")))
+ qWarning("main: Couldn't copy video.");
+ }
+
+ QQuickView view;
+ view.engine()->rootContext()->setContextProperty("videoPath", QLatin1String("file://") + videoPath + QLatin1String("/Qt5_Animation_small.mp4"));
+ view.setResizeMode(QQuickView::SizeRootObjectToView);
+ view.setSource(QUrl("qrc:/main.qml"));
+ view.show();
+
+ return app.exec();
+}
diff --git a/experimental/qt5-intro-android/main.qml b/experimental/qt5-intro-android/main.qml
new file mode 100644
index 0000000..bdf3990
--- /dev/null
+++ b/experimental/qt5-intro-android/main.qml
@@ -0,0 +1,63 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the Qt 5 launch demo.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+** of its contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.0
+
+Item {
+ id: root
+
+ width: 1280
+ height: 720
+
+ property real widthFactor: root.width / root.height;
+
+ DemoMain {
+ width: 720 * root.widthFactor
+ height: 720
+
+ anchors.centerIn: parent
+
+ scale: root.height / height
+
+ useDropShadow: false;
+ useSimpleGradient: false;
+ }
+
+}
diff --git a/experimental/qt5-intro-android/main.qrc b/experimental/qt5-intro-android/main.qrc
new file mode 100644
index 0000000..c825270
--- /dev/null
+++ b/experimental/qt5-intro-android/main.qrc
@@ -0,0 +1,203 @@
+<RCC>
+ <qresource prefix="/">
+ <file>Button.qml</file>
+ <file>CameraSlide.qml</file>
+ <file>CanvasSlide.qml</file>
+ <file>DemoMain.qml</file>
+ <file>EffectsSlide.qml</file>
+ <file>description.txt</file>
+ <file>ExamplesSlide.qml</file>
+ <file>FontSlide.qml</file>
+ <file>main_hifi.qml</file>
+ <file>main.qml</file>
+ <file>NoisyGradient.qml</file>
+ <file>NormalMapGenerator.qml</file>
+ <file>OpacityTransitionPresentation.qml</file>
+ <file>ParticleSlide.qml</file>
+ <file>preview_l.jpg</file>
+ <file>ShaderSlide.qml</file>
+ <file>SlideDeck.qml</file>
+ <file>Swirl.qml</file>
+ <file>VideoSlide.qml</file>
+ <file>WebkitSlide.qml</file>
+ <file>WebKitSlideContent.qml</file>
+ <file>WidgetsSlide.qml</file>
+ <file>README</file>
+ <file>calqlatr/Calqlatr.qml</file>
+ <file>calqlatr/content/Button.qml</file>
+ <file>calqlatr/content/calculator.js</file>
+ <file>calqlatr/content/Display.qml</file>
+ <file>calqlatr/content/NumberPad.qml</file>
+ <file>calqlatr/content/StyleLabel.qml</file>
+ <file>calqlatr/content/audio/touch.wav</file>
+ <file>calqlatr/content/images/icon-back.png</file>
+ <file>calqlatr/content/images/icon-close.png</file>
+ <file>calqlatr/content/images/icon-settings.png</file>
+ <file>calqlatr/content/images/logo.png</file>
+ <file>calqlatr/content/images/paper-edge-left.png</file>
+ <file>calqlatr/content/images/paper-edge-right.png</file>
+ <file>calqlatr/content/images/paper-grip.png</file>
+ <file>calqlatr/content/images/settings-selected-a.png</file>
+ <file>calqlatr/content/images/settings-selected-b.png</file>
+ <file>calqlatr/content/images/touch-green.png</file>
+ <file>calqlatr/content/images/touch-white.png</file>
+ <file>images/ally.png</file>
+ <file>images/butterfly.png</file>
+ <file>images/displace.png</file>
+ <file>images/fog.png</file>
+ <file>images/particle.png</file>
+ <file>images/qt-logo.png</file>
+ <file>images/widgets_boxes.png</file>
+ <file>images/widgets_chips.png</file>
+ <file>images/widgets_mainwindows.png</file>
+ <file>images/widgets_styles_fusion.png</file>
+ <file>images/widgets_styles_macstyle.png</file>
+ <file>maroon/Maroon.qml</file>
+ <file>maroon/content/GameCanvas.qml</file>
+ <file>maroon/content/BuildButton.qml</file>
+ <file>maroon/content/GameOverScreen.qml</file>
+ <file>maroon/content/InfoBar.qml</file>
+ <file>maroon/content/logic.js</file>
+ <file>maroon/content/NewGameScreen.qml</file>
+ <file>maroon/content/SoundEffect.qml</file>
+ <file>maroon/content/audio/bomb-action.wav</file>
+ <file>maroon/content/audio/catch-action.wav</file>
+ <file>maroon/content/audio/catch.wav</file>
+ <file>maroon/content/audio/currency.wav</file>
+ <file>maroon/content/audio/factory-action.wav</file>
+ <file>maroon/content/audio/melee-action.wav</file>
+ <file>maroon/content/audio/projectile-action.wav</file>
+ <file>maroon/content/audio/shooter-action.wav</file>
+ <file>maroon/content/gfx/background.png</file>
+ <file>maroon/content/gfx/bomb-action.png</file>
+ <file>maroon/content/gfx/bomb-idle.png</file>
+ <file>maroon/content/gfx/bomb.png</file>
+ <file>maroon/content/gfx/button-help.png</file>
+ <file>maroon/content/gfx/button-play.png</file>
+ <file>maroon/content/gfx/catch-action.png</file>
+ <file>maroon/content/gfx/catch.png</file>
+ <file>maroon/content/gfx/cloud.png</file>
+ <file>maroon/content/gfx/currency.png</file>
+ <file>maroon/content/gfx/dialog-bomb.png</file>
+ <file>maroon/content/gfx/dialog-factory.png</file>
+ <file>maroon/content/gfx/dialog-melee.png</file>
+ <file>maroon/content/gfx/dialog-pointer.png</file>
+ <file>maroon/content/gfx/dialog-shooter.png</file>
+ <file>maroon/content/gfx/dialog.png</file>
+ <file>maroon/content/gfx/factory-action.png</file>
+ <file>maroon/content/gfx/factory-idle.png</file>
+ <file>maroon/content/gfx/factory.png</file>
+ <file>maroon/content/gfx/grid.png</file>
+ <file>maroon/content/gfx/help.png</file>
+ <file>maroon/content/gfx/lifes.png</file>
+ <file>maroon/content/gfx/logo-bubble.png</file>
+ <file>maroon/content/gfx/logo-fish.png</file>
+ <file>maroon/content/gfx/logo.png</file>
+ <file>maroon/content/gfx/melee-action.png</file>
+ <file>maroon/content/gfx/melee-idle.png</file>
+ <file>maroon/content/gfx/melee.png</file>
+ <file>maroon/content/gfx/mob-idle.png</file>
+ <file>maroon/content/gfx/mob.png</file>
+ <file>maroon/content/gfx/points.png</file>
+ <file>maroon/content/gfx/projectile-action.png</file>
+ <file>maroon/content/gfx/projectile.png</file>
+ <file>maroon/content/gfx/scores.png</file>
+ <file>maroon/content/gfx/shooter-action.png</file>
+ <file>maroon/content/gfx/shooter-idle.png</file>
+ <file>maroon/content/gfx/shooter.png</file>
+ <file>maroon/content/gfx/sunlight.png</file>
+ <file>maroon/content/gfx/text-1.png</file>
+ <file>maroon/content/gfx/text-2.png</file>
+ <file>maroon/content/gfx/text-3.png</file>
+ <file>maroon/content/gfx/text-blank.png</file>
+ <file>maroon/content/gfx/text-gameover.png</file>
+ <file>maroon/content/gfx/text-go.png</file>
+ <file>maroon/content/gfx/wave.png</file>
+ <file>maroon/content/mobs/MobBase.qml</file>
+ <file>maroon/content/towers/Bomb.qml</file>
+ <file>maroon/content/towers/Factory.qml</file>
+ <file>maroon/content/towers/Melee.qml</file>
+ <file>maroon/content/towers/Ranged.qml</file>
+ <file>maroon/content/towers/TowerBase.qml</file>
+ <file>particles/customemitter.qml</file>
+ <file>particles/emitmask.qml</file>
+ <file>particles/particle.png</file>
+ <file>particles/particle4.png</file>
+ <file>particles/star.png</file>
+ <file>particles/starfish_mask.png</file>
+ <file>particles/velocityfrommotion.qml</file>
+ <file>presentation/Clock.qml</file>
+ <file>presentation/CodeSlide.qml</file>
+ <file>presentation/Presentation.qml</file>
+ <file>presentation/Slide.qml</file>
+ <file>presentation/SlideCounter.qml</file>
+ <file>samegame/Samegame.qml</file>
+ <file>samegame/settings.js</file>
+ <file>samegame/content/Block.qml</file>
+ <file>samegame/content/BlockEmitter.qml</file>
+ <file>samegame/content/Button.qml</file>
+ <file>samegame/content/GameArea.qml</file>
+ <file>samegame/content/LogoAnimation.qml</file>
+ <file>samegame/content/MenuEmitter.qml</file>
+ <file>samegame/content/PaintEmitter.qml</file>
+ <file>samegame/content/PrimaryPack.qml</file>
+ <file>samegame/content/PuzzleBlock.qml</file>
+ <file>samegame/content/samegame.js</file>
+ <file>samegame/content/SamegameText.qml</file>
+ <file>samegame/content/SimpleBlock.qml</file>
+ <file>samegame/content/SmokeText.qml</file>
+ <file>samegame/content/gfx/background-puzzle.png</file>
+ <file>samegame/content/gfx/background.png</file>
+ <file>samegame/content/gfx/bar.png</file>
+ <file>samegame/content/gfx/blue-puzzle.png</file>
+ <file>samegame/content/gfx/blue.png</file>
+ <file>samegame/content/gfx/bubble-highscore.png</file>
+ <file>samegame/content/gfx/bubble-puzzle.png</file>
+ <file>samegame/content/gfx/but-game-1.png</file>
+ <file>samegame/content/gfx/but-game-2.png</file>
+ <file>samegame/content/gfx/but-game-3.png</file>
+ <file>samegame/content/gfx/but-game-4.png</file>
+ <file>samegame/content/gfx/but-game-new.png</file>
+ <file>samegame/content/gfx/but-menu.png</file>
+ <file>samegame/content/gfx/but-puzzle-next.png</file>
+ <file>samegame/content/gfx/but-quit.png</file>
+ <file>samegame/content/gfx/green-puzzle.png</file>
+ <file>samegame/content/gfx/green.png</file>
+ <file>samegame/content/gfx/icon-fail.png</file>
+ <file>samegame/content/gfx/icon-ok.png</file>
+ <file>samegame/content/gfx/icon-time.png</file>
+ <file>samegame/content/gfx/logo-a.png</file>
+ <file>samegame/content/gfx/logo-e.png</file>
+ <file>samegame/content/gfx/logo-g.png</file>
+ <file>samegame/content/gfx/logo-m.png</file>
+ <file>samegame/content/gfx/logo-s.png</file>
+ <file>samegame/content/gfx/logo.png</file>
+ <file>samegame/content/gfx/particle-brick.png</file>
+ <file>samegame/content/gfx/particle-paint.png</file>
+ <file>samegame/content/gfx/particle-smoke.png</file>
+ <file>samegame/content/gfx/red-puzzle.png</file>
+ <file>samegame/content/gfx/red.png</file>
+ <file>samegame/content/gfx/text-highscore-new.png</file>
+ <file>samegame/content/gfx/text-highscore.png</file>
+ <file>samegame/content/gfx/text-no-winner.png</file>
+ <file>samegame/content/gfx/text-p1-go.png</file>
+ <file>samegame/content/gfx/text-p1-won.png</file>
+ <file>samegame/content/gfx/text-p1.png</file>
+ <file>samegame/content/gfx/text-p2-go.png</file>
+ <file>samegame/content/gfx/text-p2-won.png</file>
+ <file>samegame/content/gfx/text-p2.png</file>
+ <file>samegame/content/gfx/yellow-puzzle.png</file>
+ <file>samegame/content/gfx/yellow.png</file>
+ <file>samegame/content/levels/level0.qml</file>
+ <file>samegame/content/levels/level1.qml</file>
+ <file>samegame/content/levels/level2.qml</file>
+ <file>samegame/content/levels/level3.qml</file>
+ <file>samegame/content/levels/level4.qml</file>
+ <file>samegame/content/levels/level5.qml</file>
+ <file>samegame/content/levels/level6.qml</file>
+ <file>samegame/content/levels/level7.qml</file>
+ <file>samegame/content/levels/level8.qml</file>
+ <file>samegame/content/levels/level9.qml</file>
+ <file>samegame/content/levels/TemplateBase.qml</file>
+ </qresource>
+</RCC>
diff --git a/experimental/qt5-intro-android/main_hifi.qml b/experimental/qt5-intro-android/main_hifi.qml
new file mode 100644
index 0000000..19e006b
--- /dev/null
+++ b/experimental/qt5-intro-android/main_hifi.qml
@@ -0,0 +1,43 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the Qt 5 launch demo.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+** of its contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+DemoMain {
+ autorun: true
+}
diff --git a/experimental/qt5-intro-android/maroon/Maroon.qml b/experimental/qt5-intro-android/maroon/Maroon.qml
new file mode 100644
index 0000000..d7bfcb6
--- /dev/null
+++ b/experimental/qt5-intro-android/maroon/Maroon.qml
@@ -0,0 +1,233 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+** of its contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.0
+import QtQuick.Particles 2.0
+import "content"
+import "content/logic.js" as Logic
+
+Item {
+ id: root
+ width: 320
+ height: 480
+ property var gameState: Logic.newGameState(canvas);
+ property bool passedSplash: false
+
+ Image {
+ source:"content/gfx/background.png"
+ anchors.bottom: view.bottom
+
+ ParticleSystem {
+ id: particles
+ anchors.fill: parent
+
+ ImageParticle {
+ id: bubble
+ anchors.fill: parent
+ source: "content/gfx/catch.png"
+ opacity: 0.25
+ }
+
+ Wander {
+ xVariance: 25;
+ pace: 25;
+ }
+
+ Emitter {
+ width: parent.width
+ height: 150
+ anchors.bottom: parent.bottom
+ anchors.bottomMargin: 3
+ startTime: 15000
+
+ emitRate: 2
+ lifeSpan: 15000
+
+ acceleration: PointDirection{ y: -6; xVariation: 2; yVariation: 2 }
+
+ size: 24
+ sizeVariation: 16
+ }
+ }
+ }
+
+ Column {
+ id: view
+ y: -(height - 480)
+ width: 320
+
+ GameOverScreen { gameCanvas: canvas }
+
+ Item {
+ id: canvasArea
+ width: 320
+ height: 480
+
+ Row {
+ height: childrenRect.height
+ Image {
+ id: wave
+ y: 30
+ source:"content/gfx/wave.png"
+ }
+ Image {
+ y: 30
+ source:"content/gfx/wave.png"
+ }
+ NumberAnimation on x { from: 0; to: -(wave.width); duration: 16000; loops: Animation.Infinite }
+ SequentialAnimation on y {
+ loops: Animation.Infinite
+ NumberAnimation { from: y - 2; to: y + 2; duration: 1600; easing.type: Easing.InOutQuad }
+ NumberAnimation { from: y + 2; to: y - 2; duration: 1600; easing.type: Easing.InOutQuad }
+ }
+ }
+
+ Row {
+ opacity: 0.5
+ Image {
+ id: wave2
+ y: 25
+ source: "content/gfx/wave.png"
+ }
+ Image {
+ y: 25
+ source: "content/gfx/wave.png"
+ }
+ NumberAnimation on x { from: -(wave2.width); to: 0; duration: 32000; loops: Animation.Infinite }
+ SequentialAnimation on y {
+ loops: Animation.Infinite
+ NumberAnimation { from: y + 2; to: y - 2; duration: 1600; easing.type: Easing.InOutQuad }
+ NumberAnimation { from: y - 2; to: y + 2; duration: 1600; easing.type: Easing.InOutQuad }
+ }
+ }
+
+ Image {
+ source: "content/gfx/sunlight.png"
+ opacity: 0.02
+ y: 0
+ anchors.horizontalCenter: parent.horizontalCenter
+ transformOrigin: Item.Top
+ SequentialAnimation on rotation {
+ loops: Animation.Infinite
+ NumberAnimation { from: -10; to: 10; duration: 8000; easing.type: Easing.InOutSine }
+ NumberAnimation { from: 10; to: -10; duration: 8000; easing.type: Easing.InOutSine }
+ }
+ }
+
+ Image {
+ source: "content/gfx/sunlight.png"
+ opacity: 0.04
+ y: 20
+ anchors.horizontalCenter: parent.horizontalCenter
+ transformOrigin: Item.Top
+ SequentialAnimation on rotation {
+ loops: Animation.Infinite
+ NumberAnimation { from: 10; to: -10; duration: 8000; easing.type: Easing.InOutSine }
+ NumberAnimation { from: -10; to: 10; duration: 8000; easing.type: Easing.InOutSine }
+ }
+ }
+
+ Image {
+ source: "content/gfx/grid.png"
+ opacity: 0.5
+ }
+
+ GameCanvas {
+ id: canvas
+ anchors.bottom: parent.bottom
+ anchors.bottomMargin: 20
+ x: 32
+ focus: true
+ }
+
+ InfoBar { anchors.bottom: canvas.top; anchors.bottomMargin: 6; width: parent.width }
+
+ //3..2..1..go
+ Timer {
+ id: countdownTimer
+ interval: 1000
+ running: root.countdown < 5
+ repeat: true
+ onTriggered: root.countdown++
+ }
+ Repeater {
+ model: ["content/gfx/text-blank.png", "content/gfx/text-3.png", "content/gfx/text-2.png", "content/gfx/text-1.png", "content/gfx/text-go.png"]
+ delegate: Image {
+ visible: root.countdown <= index
+ opacity: root.countdown == index ? 0.5 : 0.1
+ scale: root.countdown >= index ? 1.0 : 0.0
+ source: modelData
+ Behavior on opacity { NumberAnimation {} }
+ Behavior on scale { NumberAnimation {} }
+ }
+ }
+ }
+
+ NewGameScreen {
+ onStartButtonClicked: root.passedSplash = true
+ }
+ }
+
+ property int countdown: 10
+ Timer {
+ id: gameStarter
+ interval: 4000
+ running: false
+ repeat: false
+ onTriggered: Logic.startGame(canvas);
+ }
+
+ states: [
+ State {
+ name: "gameOn"; when: gameState.gameOver == false && passedSplash
+ PropertyChanges { target: view; y: -(height - 960) }
+ StateChangeScript { script: root.countdown = 0; }
+ PropertyChanges { target: gameStarter; running: true }
+ },
+ State {
+ name: "gameOver"; when: gameState.gameOver == true
+ PropertyChanges { target: view; y: 0 }
+ }
+ ]
+
+ transitions: Transition {
+ NumberAnimation { properties: "x,y"; duration: 1200; easing.type: Easing.OutQuad }
+ }
+}
diff --git a/experimental/qt5-intro-android/maroon/content/BuildButton.qml b/experimental/qt5-intro-android/maroon/content/BuildButton.qml
new file mode 100644
index 0000000..49641fc
--- /dev/null
+++ b/experimental/qt5-intro-android/maroon/content/BuildButton.qml
@@ -0,0 +1,90 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+** of its contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.0
+import "logic.js" as Logic
+
+Item {
+ id: container
+ width: 64
+ height: 64
+ property alias source: img.source
+ property int index
+ property int row: 0
+ property int col: 0
+ property int towerType
+ property bool canBuild: true
+ property Item gameCanvas: parent.parent.parent
+ signal clicked()
+
+ Image {
+ id: img
+ opacity: (canBuild && gameCanvas.coins >= Logic.towerData[towerType-1].cost) ? 1.0 : 0.4
+ }
+ Text {
+ anchors.right: parent.right
+ font.pointSize: 14
+ font.bold: true
+ color: "#ffffff"
+ text: Logic.towerData[towerType - 1].cost
+ }
+ MouseArea {
+ anchors.fill: parent
+ onClicked: {
+ Logic.buildTower(towerType, col, row)
+ container.clicked()
+ }
+ }
+ Image {
+ visible: col == index && row != 0
+ source: "gfx/dialog-pointer.png"
+ anchors.top: parent.bottom
+ anchors.topMargin: 4
+ anchors.horizontalCenter: parent.horizontalCenter
+ }
+ Image {
+ visible: col == index && row == 0
+ source: "gfx/dialog-pointer.png"
+ rotation: 180
+ anchors.bottom: parent.top
+ anchors.bottomMargin: 6
+ anchors.horizontalCenter: parent.horizontalCenter
+ }
+}
diff --git a/experimental/qt5-intro-android/maroon/content/GameCanvas.qml b/experimental/qt5-intro-android/maroon/content/GameCanvas.qml
new file mode 100644
index 0000000..5e6e963
--- /dev/null
+++ b/experimental/qt5-intro-android/maroon/content/GameCanvas.qml
@@ -0,0 +1,240 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+** of its contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.0
+import "logic.js" as Logic
+import "towers" as Towers
+
+Item {
+ id: grid
+
+ property int squareSize: 64
+ property int rows: 6
+ property int cols: 4
+ property Item canvas: grid
+ property int score: 0
+ property int coins: 100
+ property int lives: 3
+ property int waveNumber: 0
+ property int waveProgress: 0
+ property var towers
+ property var mobs
+ property bool gameRunning: false
+ property bool gameOver: false
+ property bool errored: false
+ property string errorString: ""
+
+ width: cols * squareSize
+ height: rows * squareSize
+
+ function freshState() {
+ lives = 3
+ coins = 100
+ score = 0
+ waveNumber = 0
+ waveProgress = 0
+ gameOver = false
+ gameRunning = false
+ towerMenu.shown = false
+ helpButton.comeBack();
+ }
+
+ Text {
+ id: errorText // Mostly for debug purposes
+ text: errorString
+ visible: errored
+ color: "red"
+ font.pixelSize: 18
+ wrapMode: Text.WordWrap
+ width: parent.width / 1.2
+ height: parent.height / 1.2
+ anchors.centerIn: parent
+ z: 1000
+ }
+
+ Timer {
+ interval: 16
+ running: true
+ repeat: true
+ onTriggered: Logic.tick()
+ }
+
+ MouseArea {
+ id: ma
+ anchors.fill: parent
+ onClicked: {
+ if (towerMenu.visible)
+ towerMenu.finish()
+ else
+ towerMenu.open(mouse.x, mouse.y)
+ }
+ }
+
+ Image {
+ id: towerMenu
+ visible: false
+ z: 1500
+ scale: 0.9
+ opacity: 0.7
+ property int dragDistance: 16
+ property int targetRow: 0
+ property int targetCol: 0
+ property bool shown: false
+ property bool towerExists: false
+
+ function finish() {
+ shown = false
+ }
+
+ function open(xp,yp) {
+ if (!grid.gameRunning)
+ return
+ targetRow = Logic.row(yp)
+ targetCol = Logic.col(xp)
+ if (targetRow == 0)
+ towerMenu.y = (targetRow + 1) * grid.squareSize
+ else
+ towerMenu.y = (targetRow - 1) * grid.squareSize
+ towerExists = (grid.towers[Logic.towerIdx(targetCol, targetRow)] != null)
+ shown = true
+ helpButton.goAway();
+ }
+
+ states: State {
+ name: "shown"; when: towerMenu.shown && !grid.gameOver
+ PropertyChanges { target: towerMenu; visible: true; scale: 1; opacity: 1 }
+ }
+
+ transitions: Transition {
+ PropertyAction { property: "visible" }
+ NumberAnimation { properties: "opacity,scale"; duration: 500; easing.type: Easing.OutElastic }
+ }
+
+ x: -32
+ source: "gfx/dialog.png"
+ Row {
+ id: buttonRow
+ height: 100
+ anchors.centerIn: parent
+ spacing: 8
+ BuildButton {
+ row: towerMenu.targetRow; col: towerMenu.targetCol
+ anchors.verticalCenter: parent.verticalCenter
+ towerType: 1; index: 0
+ canBuild: !towerMenu.towerExists
+ source: "gfx/dialog-melee.png"
+ onClicked: towerMenu.finish()
+ }
+ BuildButton {
+ row: towerMenu.targetRow; col: towerMenu.targetCol
+ anchors.verticalCenter: parent.verticalCenter
+ towerType: 2; index: 1
+ canBuild: !towerMenu.towerExists
+ source: "gfx/dialog-shooter.png"
+ onClicked: towerMenu.finish()
+ }
+ BuildButton {
+ row: towerMenu.targetRow; col: towerMenu.targetCol
+ anchors.verticalCenter: parent.verticalCenter
+ towerType: 3; index: 2
+ canBuild: !towerMenu.towerExists
+ source: "gfx/dialog-bomb.png"
+ onClicked: towerMenu.finish()
+ }
+ BuildButton {
+ row: towerMenu.targetRow; col: towerMenu.targetCol
+ anchors.verticalCenter: parent.verticalCenter
+ towerType: 4; index: 3
+ canBuild: !towerMenu.towerExists
+ source: "gfx/dialog-factory.png"
+ onClicked: towerMenu.finish()
+ }
+ }
+ }
+
+
+ Keys.onPressed: { // Cheat Codes while Testing
+ if (event.key == Qt.Key_Up && (event.modifiers & Qt.ShiftModifier))
+ grid.coins += 10;
+ if (event.key == Qt.Key_Left && (event.modifiers & Qt.ShiftModifier))
+ grid.lives += 1;
+ if (event.key == Qt.Key_Down && (event.modifiers & Qt.ShiftModifier))
+ Logic.gameState.waveProgress += 1000;
+ if (event.key == Qt.Key_Right && (event.modifiers & Qt.ShiftModifier))
+ Logic.endGame();
+ }
+
+ Image {
+ id: helpButton
+ z: 1010
+ source: "gfx/button-help.png"
+ function goAway() {
+ helpMA.enabled = false;
+ helpButton.opacity = 0;
+ }
+ function comeBack() {
+ helpMA.enabled = true;
+ helpButton.opacity = 1;
+ }
+ Behavior on opacity { NumberAnimation {} }
+ MouseArea {
+ id: helpMA
+ anchors.fill: parent
+ onClicked: {helpImage.visible = true; helpButton.visible = false;}
+ }
+
+ anchors.horizontalCenter: parent.horizontalCenter
+ anchors.bottom: parent.bottom
+ anchors.bottomMargin: 0
+ }
+
+ Image {
+ id: helpImage
+ z: 1010
+ source: "gfx/help.png"
+ anchors.fill: parent
+ visible: false
+ MouseArea {
+ anchors.fill: parent
+ onClicked: helpImage.visible = false;
+ }
+ }
+
+}
diff --git a/experimental/qt5-intro-android/maroon/content/GameOverScreen.qml b/experimental/qt5-intro-android/maroon/content/GameOverScreen.qml
new file mode 100644
index 0000000..dfb439f
--- /dev/null
+++ b/experimental/qt5-intro-android/maroon/content/GameOverScreen.qml
@@ -0,0 +1,115 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+** of its contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.0
+import QtQuick.Particles 2.0
+import "logic.js" as Logic
+
+Item {
+ id: gameOverScreen
+ width: 320
+ height: 400
+ property GameCanvas gameCanvas
+
+ Image {
+ id: img
+ source: "gfx/text-gameover.png"
+ anchors.centerIn: parent
+ }
+
+ ParticleSystem {
+ anchors.fill: parent
+ ImageParticle {
+ id: cloud
+ source: "gfx/cloud.png"
+ alphaVariation: 0.25
+ opacity: 0.25
+ }
+
+ Wander {
+ xVariance: 100;
+ pace: 1;
+ }
+
+ Emitter {
+ id: cloudLeft
+ width: 160
+ height: 160
+ anchors.right: parent.left
+ emitRate: 0.5
+ lifeSpan: 12000
+ velocity: PointDirection{ x: 64; xVariation: 2; yVariation: 2 }
+ size: 160
+ }
+
+ Emitter {
+ id: cloudRight
+ width: 160
+ height: 160
+ anchors.left: parent.right
+ emitRate: 0.5
+ lifeSpan: 12000
+ velocity: PointDirection{ x: -64; xVariation: 2; yVariation: 2 }
+ size: 160
+ }
+ }
+
+
+ Text {
+ visible: gameCanvas != undefined
+ text: "You saved " + gameCanvas.score + " fishes!"
+ anchors.top: img.bottom
+ anchors.topMargin: 12
+ anchors.horizontalCenter: parent.horizontalCenter
+ font.bold: true
+ color: "#000000"
+ opacity: 0.5
+ }
+
+ Image {
+ source: "gfx/button-play.png"
+ anchors.bottom: parent.bottom
+ anchors.bottomMargin: 0
+ MouseArea {
+ anchors.fill: parent
+ onClicked: gameCanvas.gameOver = false//This will actually trigger the state change in main.qml
+ }
+ }
+}
diff --git a/experimental/qt5-intro-android/maroon/content/InfoBar.qml b/experimental/qt5-intro-android/maroon/content/InfoBar.qml
new file mode 100644
index 0000000..36303fc
--- /dev/null
+++ b/experimental/qt5-intro-android/maroon/content/InfoBar.qml
@@ -0,0 +1,84 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+** of its contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.0
+
+Item {
+ height: childrenRect.height
+
+ // Display the number of lives
+ Row {
+ anchors.left: parent.left
+ anchors.leftMargin: 10
+ spacing: 5
+ Repeater {
+ id: rep
+ model: Math.min(10, canvas.lives)
+ delegate: Image { source: "gfx/lifes.png" }
+ }
+ }
+
+ // Display the number of fishes saved
+ Row {
+ anchors.right: points.left
+ anchors.rightMargin: 20
+ spacing: 5
+ Image { source: "gfx/scores.png" }
+ Text {
+ text: canvas.score
+ font.bold: true
+ }
+ }
+
+ // Display the number of coins
+ Row {
+ id: points
+ anchors.right: parent.right
+ anchors.rightMargin: 10
+ spacing: 5
+ Image { source: "gfx/points.png" }
+ Text {
+ id: pointsLabel
+ text: canvas.coins
+ font.bold: true
+ }
+ }
+}
+
diff --git a/experimental/qt5-intro-android/maroon/content/NewGameScreen.qml b/experimental/qt5-intro-android/maroon/content/NewGameScreen.qml
new file mode 100644
index 0000000..495e3aa
--- /dev/null
+++ b/experimental/qt5-intro-android/maroon/content/NewGameScreen.qml
@@ -0,0 +1,111 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+** of its contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.0
+
+// This is the first screen.
+// It shows the logo and emit a startButtonClicked signal
+// when the user press the "PLAY" button.
+
+Item {
+ id: newGameScreen
+ width: 320
+ height: 480
+
+ signal startButtonClicked
+
+ Image {
+ source: "gfx/logo.png"
+ anchors.top: parent.top
+ anchors.topMargin: 60
+ }
+
+ Image {
+ source: "gfx/logo-fish.png"
+ anchors.top: parent.top
+
+ SequentialAnimation on x {
+ loops: Animation.Infinite
+ NumberAnimation { from: x + 148; to: x + 25; duration: 2000; easing.type: Easing.InOutQuad }
+ NumberAnimation { from: x + 25; to: x + 148; duration: 1600; easing.type: Easing.InOutQuad }
+ }
+ SequentialAnimation on anchors.topMargin {
+ loops: Animation.Infinite
+ NumberAnimation { from: 100; to: 60; duration: 1600; easing.type: Easing.InOutQuad }
+ NumberAnimation { from: 60; to: 100; duration: 2000; easing.type: Easing.InOutQuad }
+ }
+ }
+
+ Image {
+ source: "gfx/logo-bubble.png"
+ anchors.top: parent.top
+
+ SequentialAnimation on x {
+ loops: Animation.Infinite
+ NumberAnimation { from: x + 140; to: x + 40; duration: 2000; easing.type: Easing.InOutQuad }
+ NumberAnimation { from: x + 40; to: x + 140; duration: 1600; easing.type: Easing.InOutQuad }
+ }
+ SequentialAnimation on anchors.topMargin {
+ loops: Animation.Infinite
+ NumberAnimation { from: 100; to: 60; duration: 1600; easing.type: Easing.InOutQuad }
+ NumberAnimation { from: 60; to: 100; duration: 2000; easing.type: Easing.InOutQuad }
+ }
+ SequentialAnimation on width {
+ loops: Animation.Infinite
+ NumberAnimation { from: 140; to: 160; duration: 1000; easing.type: Easing.InOutQuad }
+ NumberAnimation { from: 160; to: 140; duration: 800; easing.type: Easing.InOutQuad }
+ }
+ SequentialAnimation on height {
+ loops: Animation.Infinite
+ NumberAnimation { from: 150; to: 140; duration: 800; easing.type: Easing.InOutQuad }
+ NumberAnimation { from: 140; to: 150; duration: 1000; easing.type: Easing.InOutQuad }
+ }
+ }
+
+ Image {
+ source: "gfx/button-play.png"
+ anchors.bottom: parent.bottom
+ anchors.bottomMargin: 60
+ MouseArea {
+ anchors.fill: parent
+ onClicked: newGameScreen.startButtonClicked()
+ }
+ }
+}
diff --git a/experimental/qt5-intro-android/maroon/content/SoundEffect.qml b/experimental/qt5-intro-android/maroon/content/SoundEffect.qml
new file mode 100644
index 0000000..d286a39
--- /dev/null
+++ b/experimental/qt5-intro-android/maroon/content/SoundEffect.qml
@@ -0,0 +1,53 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+** of its contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.0
+//Proxies a SoundEffect if QtMultimedia is installed
+Item {
+ id: container
+ property QtObject effect: Qt.createQmlObject("import QtMultimedia 5.0; SoundEffect{ source: '" + container.source + "' }", container);
+ property url source: ""
+ onSourceChanged: if (effect != null) effect.source = source;
+ function play() {
+ if (effect != null)
+ effect.play();
+ }
+
+}
diff --git a/experimental/qt5-intro-android/maroon/content/audio/bomb-action.wav b/experimental/qt5-intro-android/maroon/content/audio/bomb-action.wav
new file mode 100644
index 0000000..b334dc1
--- /dev/null
+++ b/experimental/qt5-intro-android/maroon/content/audio/bomb-action.wav
Binary files differ
diff --git a/experimental/qt5-intro-android/maroon/content/audio/catch-action.wav b/experimental/qt5-intro-android/maroon/content/audio/catch-action.wav
new file mode 100644
index 0000000..3e22124
--- /dev/null
+++ b/experimental/qt5-intro-android/maroon/content/audio/catch-action.wav
Binary files differ
diff --git a/experimental/qt5-intro-android/maroon/content/audio/catch.wav b/experimental/qt5-intro-android/maroon/content/audio/catch.wav
new file mode 100644
index 0000000..d3eade8
--- /dev/null
+++ b/experimental/qt5-intro-android/maroon/content/audio/catch.wav
Binary files differ
diff --git a/experimental/qt5-intro-android/maroon/content/audio/currency.wav b/experimental/qt5-intro-android/maroon/content/audio/currency.wav
new file mode 100644
index 0000000..0d9ef2c
--- /dev/null
+++ b/experimental/qt5-intro-android/maroon/content/audio/currency.wav
Binary files differ
diff --git a/experimental/qt5-intro-android/maroon/content/audio/factory-action.wav b/experimental/qt5-intro-android/maroon/content/audio/factory-action.wav
new file mode 100644
index 0000000..a2ace6c
--- /dev/null
+++ b/experimental/qt5-intro-android/maroon/content/audio/factory-action.wav
Binary files differ
diff --git a/experimental/qt5-intro-android/maroon/content/audio/melee-action.wav b/experimental/qt5-intro-android/maroon/content/audio/melee-action.wav
new file mode 100644
index 0000000..d325af4
--- /dev/null
+++ b/experimental/qt5-intro-android/maroon/content/audio/melee-action.wav
Binary files differ
diff --git a/experimental/qt5-intro-android/maroon/content/audio/projectile-action.wav b/experimental/qt5-intro-android/maroon/content/audio/projectile-action.wav
new file mode 100644
index 0000000..4e2284f
--- /dev/null
+++ b/experimental/qt5-intro-android/maroon/content/audio/projectile-action.wav
Binary files differ
diff --git a/experimental/qt5-intro-android/maroon/content/audio/shooter-action.wav b/experimental/qt5-intro-android/maroon/content/audio/shooter-action.wav
new file mode 100644
index 0000000..3e12b94
--- /dev/null
+++ b/experimental/qt5-intro-android/maroon/content/audio/shooter-action.wav
Binary files differ
diff --git a/experimental/qt5-intro-android/maroon/content/gfx/background.png b/experimental/qt5-intro-android/maroon/content/gfx/background.png
new file mode 100644
index 0000000..d548b93
--- /dev/null
+++ b/experimental/qt5-intro-android/maroon/content/gfx/background.png
Binary files differ
diff --git a/experimental/qt5-intro-android/maroon/content/gfx/bomb-action.png b/experimental/qt5-intro-android/maroon/content/gfx/bomb-action.png
new file mode 100644
index 0000000..42da5d7
--- /dev/null
+++ b/experimental/qt5-intro-android/maroon/content/gfx/bomb-action.png
Binary files differ
diff --git a/experimental/qt5-intro-android/maroon/content/gfx/bomb-idle.png b/experimental/qt5-intro-android/maroon/content/gfx/bomb-idle.png
new file mode 100644
index 0000000..3bd62e2
--- /dev/null
+++ b/experimental/qt5-intro-android/maroon/content/gfx/bomb-idle.png
Binary files differ
diff --git a/experimental/qt5-intro-android/maroon/content/gfx/bomb.png b/experimental/qt5-intro-android/maroon/content/gfx/bomb.png
new file mode 100644
index 0000000..380da7d
--- /dev/null
+++ b/experimental/qt5-intro-android/maroon/content/gfx/bomb.png
Binary files differ
diff --git a/experimental/qt5-intro-android/maroon/content/gfx/button-help.png b/experimental/qt5-intro-android/maroon/content/gfx/button-help.png
new file mode 100644
index 0000000..aecebc1
--- /dev/null
+++ b/experimental/qt5-intro-android/maroon/content/gfx/button-help.png
Binary files differ
diff --git a/experimental/qt5-intro-android/maroon/content/gfx/button-play.png b/experimental/qt5-intro-android/maroon/content/gfx/button-play.png
new file mode 100644
index 0000000..6cdad6c
--- /dev/null
+++ b/experimental/qt5-intro-android/maroon/content/gfx/button-play.png
Binary files differ
diff --git a/experimental/qt5-intro-android/maroon/content/gfx/catch-action.png b/experimental/qt5-intro-android/maroon/content/gfx/catch-action.png
new file mode 100644
index 0000000..78ca9fe
--- /dev/null
+++ b/experimental/qt5-intro-android/maroon/content/gfx/catch-action.png
Binary files differ
diff --git a/experimental/qt5-intro-android/maroon/content/gfx/catch.png b/experimental/qt5-intro-android/maroon/content/gfx/catch.png
new file mode 100644
index 0000000..b7620fe
--- /dev/null
+++ b/experimental/qt5-intro-android/maroon/content/gfx/catch.png
Binary files differ
diff --git a/experimental/qt5-intro-android/maroon/content/gfx/cloud.png b/experimental/qt5-intro-android/maroon/content/gfx/cloud.png
new file mode 100644
index 0000000..d7c35f8
--- /dev/null
+++ b/experimental/qt5-intro-android/maroon/content/gfx/cloud.png
Binary files differ
diff --git a/experimental/qt5-intro-android/maroon/content/gfx/currency.png b/experimental/qt5-intro-android/maroon/content/gfx/currency.png
new file mode 100644
index 0000000..1571341
--- /dev/null
+++ b/experimental/qt5-intro-android/maroon/content/gfx/currency.png
Binary files differ
diff --git a/experimental/qt5-intro-android/maroon/content/gfx/dialog-bomb.png b/experimental/qt5-intro-android/maroon/content/gfx/dialog-bomb.png
new file mode 100644
index 0000000..708d916
--- /dev/null
+++ b/experimental/qt5-intro-android/maroon/content/gfx/dialog-bomb.png
Binary files differ
diff --git a/experimental/qt5-intro-android/maroon/content/gfx/dialog-factory.png b/experimental/qt5-intro-android/maroon/content/gfx/dialog-factory.png
new file mode 100644
index 0000000..d2e2a48
--- /dev/null
+++ b/experimental/qt5-intro-android/maroon/content/gfx/dialog-factory.png
Binary files differ
diff --git a/experimental/qt5-intro-android/maroon/content/gfx/dialog-melee.png b/experimental/qt5-intro-android/maroon/content/gfx/dialog-melee.png
new file mode 100644
index 0000000..069d18d
--- /dev/null
+++ b/experimental/qt5-intro-android/maroon/content/gfx/dialog-melee.png
Binary files differ
diff --git a/experimental/qt5-intro-android/maroon/content/gfx/dialog-pointer.png b/experimental/qt5-intro-android/maroon/content/gfx/dialog-pointer.png
new file mode 100644
index 0000000..9b51a09
--- /dev/null
+++ b/experimental/qt5-intro-android/maroon/content/gfx/dialog-pointer.png
Binary files differ
diff --git a/experimental/qt5-intro-android/maroon/content/gfx/dialog-shooter.png b/experimental/qt5-intro-android/maroon/content/gfx/dialog-shooter.png
new file mode 100644
index 0000000..af980ca
--- /dev/null
+++ b/experimental/qt5-intro-android/maroon/content/gfx/dialog-shooter.png
Binary files differ
diff --git a/experimental/qt5-intro-android/maroon/content/gfx/dialog.png b/experimental/qt5-intro-android/maroon/content/gfx/dialog.png
new file mode 100644
index 0000000..d528ba7
--- /dev/null
+++ b/experimental/qt5-intro-android/maroon/content/gfx/dialog.png
Binary files differ
diff --git a/experimental/qt5-intro-android/maroon/content/gfx/factory-action.png b/experimental/qt5-intro-android/maroon/content/gfx/factory-action.png
new file mode 100644
index 0000000..8981678
--- /dev/null
+++ b/experimental/qt5-intro-android/maroon/content/gfx/factory-action.png
Binary files differ
diff --git a/experimental/qt5-intro-android/maroon/content/gfx/factory-idle.png b/experimental/qt5-intro-android/maroon/content/gfx/factory-idle.png
new file mode 100644
index 0000000..a145582
--- /dev/null
+++ b/experimental/qt5-intro-android/maroon/content/gfx/factory-idle.png
Binary files differ
diff --git a/experimental/qt5-intro-android/maroon/content/gfx/factory.png b/experimental/qt5-intro-android/maroon/content/gfx/factory.png
new file mode 100644
index 0000000..bfb9f3f
--- /dev/null
+++ b/experimental/qt5-intro-android/maroon/content/gfx/factory.png
Binary files differ
diff --git a/experimental/qt5-intro-android/maroon/content/gfx/grid.png b/experimental/qt5-intro-android/maroon/content/gfx/grid.png
new file mode 100644
index 0000000..b595552
--- /dev/null
+++ b/experimental/qt5-intro-android/maroon/content/gfx/grid.png
Binary files differ
diff --git a/experimental/qt5-intro-android/maroon/content/gfx/help.png b/experimental/qt5-intro-android/maroon/content/gfx/help.png
new file mode 100644
index 0000000..4654e4c
--- /dev/null
+++ b/experimental/qt5-intro-android/maroon/content/gfx/help.png
Binary files differ
diff --git a/experimental/qt5-intro-android/maroon/content/gfx/lifes.png b/experimental/qt5-intro-android/maroon/content/gfx/lifes.png
new file mode 100644
index 0000000..135310b
--- /dev/null
+++ b/experimental/qt5-intro-android/maroon/content/gfx/lifes.png
Binary files differ
diff --git a/experimental/qt5-intro-android/maroon/content/gfx/logo-bubble.png b/experimental/qt5-intro-android/maroon/content/gfx/logo-bubble.png
new file mode 100644
index 0000000..136151c
--- /dev/null
+++ b/experimental/qt5-intro-android/maroon/content/gfx/logo-bubble.png
Binary files differ
diff --git a/experimental/qt5-intro-android/maroon/content/gfx/logo-fish.png b/experimental/qt5-intro-android/maroon/content/gfx/logo-fish.png
new file mode 100644
index 0000000..c41833a
--- /dev/null
+++ b/experimental/qt5-intro-android/maroon/content/gfx/logo-fish.png
Binary files differ
diff --git a/experimental/qt5-intro-android/maroon/content/gfx/logo.png b/experimental/qt5-intro-android/maroon/content/gfx/logo.png
new file mode 100644
index 0000000..787ac99
--- /dev/null
+++ b/experimental/qt5-intro-android/maroon/content/gfx/logo.png
Binary files differ
diff --git a/experimental/qt5-intro-android/maroon/content/gfx/melee-action.png b/experimental/qt5-intro-android/maroon/content/gfx/melee-action.png
new file mode 100644
index 0000000..c53873b
--- /dev/null
+++ b/experimental/qt5-intro-android/maroon/content/gfx/melee-action.png
Binary files differ
diff --git a/experimental/qt5-intro-android/maroon/content/gfx/melee-idle.png b/experimental/qt5-intro-android/maroon/content/gfx/melee-idle.png
new file mode 100644
index 0000000..621d9df
--- /dev/null
+++ b/experimental/qt5-intro-android/maroon/content/gfx/melee-idle.png
Binary files differ
diff --git a/experimental/qt5-intro-android/maroon/content/gfx/melee.png b/experimental/qt5-intro-android/maroon/content/gfx/melee.png
new file mode 100644
index 0000000..ab24015
--- /dev/null
+++ b/experimental/qt5-intro-android/maroon/content/gfx/melee.png
Binary files differ
diff --git a/experimental/qt5-intro-android/maroon/content/gfx/mob-idle.png b/experimental/qt5-intro-android/maroon/content/gfx/mob-idle.png
new file mode 100644
index 0000000..dedacc7
--- /dev/null
+++ b/experimental/qt5-intro-android/maroon/content/gfx/mob-idle.png
Binary files differ
diff --git a/experimental/qt5-intro-android/maroon/content/gfx/mob.png b/experimental/qt5-intro-android/maroon/content/gfx/mob.png
new file mode 100644
index 0000000..7569c35
--- /dev/null
+++ b/experimental/qt5-intro-android/maroon/content/gfx/mob.png
Binary files differ
diff --git a/experimental/qt5-intro-android/maroon/content/gfx/points.png b/experimental/qt5-intro-android/maroon/content/gfx/points.png
new file mode 100644
index 0000000..1d2386d
--- /dev/null
+++ b/experimental/qt5-intro-android/maroon/content/gfx/points.png
Binary files differ
diff --git a/experimental/qt5-intro-android/maroon/content/gfx/projectile-action.png b/experimental/qt5-intro-android/maroon/content/gfx/projectile-action.png
new file mode 100644
index 0000000..aa2e650
--- /dev/null
+++ b/experimental/qt5-intro-android/maroon/content/gfx/projectile-action.png
Binary files differ
diff --git a/experimental/qt5-intro-android/maroon/content/gfx/projectile.png b/experimental/qt5-intro-android/maroon/content/gfx/projectile.png
new file mode 100644
index 0000000..c25a0c3
--- /dev/null
+++ b/experimental/qt5-intro-android/maroon/content/gfx/projectile.png
Binary files differ
diff --git a/experimental/qt5-intro-android/maroon/content/gfx/scores.png b/experimental/qt5-intro-android/maroon/content/gfx/scores.png
new file mode 100644
index 0000000..af757fe
--- /dev/null
+++ b/experimental/qt5-intro-android/maroon/content/gfx/scores.png
Binary files differ
diff --git a/experimental/qt5-intro-android/maroon/content/gfx/shooter-action.png b/experimental/qt5-intro-android/maroon/content/gfx/shooter-action.png
new file mode 100644
index 0000000..08e7e30
--- /dev/null
+++ b/experimental/qt5-intro-android/maroon/content/gfx/shooter-action.png
Binary files differ
diff --git a/experimental/qt5-intro-android/maroon/content/gfx/shooter-idle.png b/experimental/qt5-intro-android/maroon/content/gfx/shooter-idle.png
new file mode 100644
index 0000000..663098d
--- /dev/null
+++ b/experimental/qt5-intro-android/maroon/content/gfx/shooter-idle.png
Binary files differ
diff --git a/experimental/qt5-intro-android/maroon/content/gfx/shooter.png b/experimental/qt5-intro-android/maroon/content/gfx/shooter.png
new file mode 100644
index 0000000..d44401e
--- /dev/null
+++ b/experimental/qt5-intro-android/maroon/content/gfx/shooter.png
Binary files differ
diff --git a/experimental/qt5-intro-android/maroon/content/gfx/sunlight.png b/experimental/qt5-intro-android/maroon/content/gfx/sunlight.png
new file mode 100644
index 0000000..d1c7042
--- /dev/null
+++ b/experimental/qt5-intro-android/maroon/content/gfx/sunlight.png
Binary files differ
diff --git a/experimental/qt5-intro-android/maroon/content/gfx/text-1.png b/experimental/qt5-intro-android/maroon/content/gfx/text-1.png
new file mode 100644
index 0000000..3ea399c
--- /dev/null
+++ b/experimental/qt5-intro-android/maroon/content/gfx/text-1.png
Binary files differ
diff --git a/experimental/qt5-intro-android/maroon/content/gfx/text-2.png b/experimental/qt5-intro-android/maroon/content/gfx/text-2.png
new file mode 100644
index 0000000..934a481
--- /dev/null
+++ b/experimental/qt5-intro-android/maroon/content/gfx/text-2.png
Binary files differ
diff --git a/experimental/qt5-intro-android/maroon/content/gfx/text-3.png b/experimental/qt5-intro-android/maroon/content/gfx/text-3.png
new file mode 100644
index 0000000..47523f5
--- /dev/null
+++ b/experimental/qt5-intro-android/maroon/content/gfx/text-3.png
Binary files differ
diff --git a/experimental/qt5-intro-android/maroon/content/gfx/text-blank.png b/experimental/qt5-intro-android/maroon/content/gfx/text-blank.png
new file mode 100644
index 0000000..4a687b2
--- /dev/null
+++ b/experimental/qt5-intro-android/maroon/content/gfx/text-blank.png
Binary files differ
diff --git a/experimental/qt5-intro-android/maroon/content/gfx/text-gameover.png b/experimental/qt5-intro-android/maroon/content/gfx/text-gameover.png
new file mode 100644
index 0000000..4f53ef0
--- /dev/null
+++ b/experimental/qt5-intro-android/maroon/content/gfx/text-gameover.png
Binary files differ
diff --git a/experimental/qt5-intro-android/maroon/content/gfx/text-go.png b/experimental/qt5-intro-android/maroon/content/gfx/text-go.png
new file mode 100644
index 0000000..bfc26f7
--- /dev/null
+++ b/experimental/qt5-intro-android/maroon/content/gfx/text-go.png
Binary files differ
diff --git a/experimental/qt5-intro-android/maroon/content/gfx/wave.png b/experimental/qt5-intro-android/maroon/content/gfx/wave.png
new file mode 100644
index 0000000..f97426c
--- /dev/null
+++ b/experimental/qt5-intro-android/maroon/content/gfx/wave.png
Binary files differ
diff --git a/experimental/qt5-intro-android/maroon/content/logic.js b/experimental/qt5-intro-android/maroon/content/logic.js
new file mode 100644
index 0000000..dd76b7e
--- /dev/null
+++ b/experimental/qt5-intro-android/maroon/content/logic.js
@@ -0,0 +1,264 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+** of its contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+.pragma library // Shared game state
+.import QtQuick 2.0 as QQ
+
+// Game Stuff
+var gameState // Local reference
+function getGameState() { return gameState; }
+
+var towerData = [ // Name and cost, stats are in the delegate per instance
+ { "name": "Melee", "cost": 20 },
+ { "name": "Ranged", "cost": 50 },
+ { "name": "Bomb", "cost": 75 },
+ { "name": "Factory", "cost": 25 }
+]
+
+var waveBaseData = [300, 290, 280, 270, 220, 180, 160, 80, 80, 80, 30, 30, 30, 30];
+var waveData = [];
+
+var towerComponents = new Array(towerData.length);
+var mobComponent = Qt.createComponent("mobs/MobBase.qml");
+
+function endGame()
+{
+ gameState.gameRunning = false;
+ gameState.gameOver = true;
+ for (var i = 0; i < gameState.cols; i++) {
+ for (var j = 0; j < gameState.rows; j++) {
+ if (gameState.towers[towerIdx(i, j)]) {
+ gameState.towers[towerIdx(i, j)].destroy();
+ gameState.towers[towerIdx(i, j)] = null;
+ }
+ }
+ for (var j in gameState.mobs[i])
+ gameState.mobs[i][j].destroy();
+ gameState.mobs[i].splice(0,gameState.mobs[i].length); //Leaves queue reusable
+ }
+}
+
+function startGame(gameCanvas)
+{
+ waveData = new Array();
+ for (var i in waveBaseData)
+ waveData[i] = waveBaseData[i];
+ gameState.freshState();
+ for (var i = 0; i < gameCanvas.cols; i++) {
+ for (var j = 0; j < gameCanvas.rows; j++)
+ gameState.towers[towerIdx(i, j)] = null;
+ gameState.mobs[i] = new Array();
+ }
+ gameState.towers[towerIdx(0, 0)] = newTower(3, 0, 0);//Start with a starfish in the corner
+ gameState.gameRunning = true;
+ gameState.gameOver = false;
+}
+
+function newGameState(gameCanvas)
+{
+ for (var i = 0; i < towerComponents.length; i++) {
+ towerComponents[i] = Qt.createComponent("towers/" + towerData[i].name + ".qml");
+ if (towerComponents[i].status == QQ.Component.Error) {
+ gameCanvas.errored = true;
+ gameCanvas.errorString += "Loading Tower " + towerData[i].name + "\n" + (towerComponents[i].errorString());
+ console.log(towerComponents[i].errorString());
+ }
+ }
+ gameState = gameCanvas;
+ gameState.freshState();
+ gameState.towers = new Array(gameCanvas.rows * gameCanvas.cols);
+ gameState.mobs = new Array(gameCanvas.cols);
+ return gameState;
+}
+
+function row(y)
+{
+ return Math.floor(y / gameState.squareSize);
+}
+
+function col(x)
+{
+ return Math.floor(x / gameState.squareSize);
+}
+
+function towerIdx(x, y)
+{
+ return y + (x * gameState.rows);
+}
+
+function newMob(col)
+{
+ var ret = mobComponent.createObject(gameState.canvas,
+ { "col" : col,
+ "speed" : (Math.min(2.0, 0.10 * (gameState.waveNumber + 1))),
+ "y" : gameState.canvas.height });
+ gameState.mobs[col].push(ret);
+ return ret;
+}
+
+function newTower(type, row, col)
+{
+ var ret = towerComponents[type].createObject(gameState.canvas);
+ ret.row = row;
+ ret.col = col;
+ ret.fireCounter = ret.rof;
+ ret.spawn();
+ return ret;
+}
+
+function buildTower(type, x, y)
+{
+ if (gameState.towers[towerIdx(x,y)] != null) {
+ if (type <= 0) {
+ gameState.towers[towerIdx(x,y)].sell();
+ gameState.towers[towerIdx(x,y)] = null;
+ }
+ } else {
+ if (gameState.coins < towerData[type - 1].cost)
+ return;
+ gameState.towers[towerIdx(x, y)] = newTower(type - 1, y, x);
+ gameState.coins -= towerData[type - 1].cost;
+ }
+}
+
+function killMob(col, mob)
+{
+ if (!mob)
+ return;
+ var idx = gameState.mobs[col].indexOf(mob);
+ if (idx == -1 || !mob.hp)
+ return;
+ mob.hp = 0;
+ mob.die();
+ gameState.mobs[col].splice(idx,1);
+}
+
+function killTower(row, col)
+{
+ var tower = gameState.towers[towerIdx(col, row)];
+ if (!tower)
+ return;
+ tower.hp = 0;
+ tower.die();
+ gameState.towers[towerIdx(col, row)] = null;
+}
+
+function tick()
+{
+ if (!gameState.gameRunning)
+ return;
+
+ // Spawn
+ gameState.waveProgress += 1;
+ var i = gameState.waveProgress;
+ var j = 0;
+ while (i > 0 && j < waveData.length)
+ i -= waveData[j++];
+ if ( i == 0 ) // Spawn a mob
+ newMob(Math.floor(Math.random() * gameState.cols));
+ if ( j == waveData.length ) { // Next Wave
+ gameState.waveNumber += 1;
+ gameState.waveProgress = 0;
+ var waveModifier = 10; // Constant governing how much faster the next wave is to spawn (not fish speed)
+ for (var k in waveData ) // Slightly faster
+ if (waveData[k] > waveModifier)
+ waveData[k] -= waveModifier;
+ }
+
+ // Towers Attack
+ for (var j in gameState.towers) {
+ var tower = gameState.towers[j];
+ if (tower == null)
+ continue;
+ if (tower.fireCounter > 0) {
+ tower.fireCounter -= 1;
+ continue;
+ }
+ var column = tower.col;
+ for (var k in gameState.mobs[column]) {
+ var conflict = gameState.mobs[column][k];
+ if (conflict.y <= gameState.canvas.height && conflict.y + conflict.height > tower.y
+ && conflict.y - ((tower.row + 1) * gameState.squareSize) < gameState.squareSize * tower.range) { // In Range
+ tower.fire();
+ tower.fireCounter = tower.rof;
+ conflict.hit(tower.damage);
+ }
+ }
+
+ // Income
+ if (tower.income) {
+ gameState.coins += tower.income;
+ tower.fire();
+ tower.fireCounter = tower.rof;
+ }
+ }
+
+ // Mobs move
+ for (var i = 0; i < gameState.cols; i++) {
+ for (var j = 0; j < gameState.mobs[i].length; j++) {
+ var mob = gameState.mobs[i][j];
+ var newPos = gameState.mobs[i][j].y - gameState.mobs[i][j].speed;
+ if (newPos < 0) {
+ gameState.lives -= 1;
+ killMob(i, mob);
+ if (gameState.lives <= 0)
+ endGame();
+ continue;
+ }
+ var conflict = gameState.towers[towerIdx(i, row(newPos))];
+ if (conflict != null) {
+ if (mob.y < conflict.y + gameState.squareSize)
+ gameState.mobs[i][j].y += gameState.mobs[i][j].speed * 10; // Moved inside tower, now hurry back out
+ if (mob.fireCounter > 0) {
+ mob.fireCounter--;
+ } else {
+ gameState.mobs[i][j].fire();
+ conflict.hp -= mob.damage;
+ if (conflict.hp <= 0)
+ killTower(conflict.row, conflict.col);
+ mob.fireCounter = mob.rof;
+ }
+ } else {
+ gameState.mobs[i][j].y = newPos;
+ }
+ }
+ }
+
+}
diff --git a/experimental/qt5-intro-android/maroon/content/mobs/MobBase.qml b/experimental/qt5-intro-android/maroon/content/mobs/MobBase.qml
new file mode 100644
index 0000000..d4ece66
--- /dev/null
+++ b/experimental/qt5-intro-android/maroon/content/mobs/MobBase.qml
@@ -0,0 +1,262 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+** of its contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.0
+import "../logic.js" as Logic
+import ".."
+
+Item {
+ id: container
+ property string name: "Fish"
+ property int col: 0
+ property real hp: 3
+ property real damage: 1
+ property real speed: 0.25
+ property int rof: 30 //In ticks
+ property int fireCounter: 0
+ property bool dying: false
+ width: parent ? parent.squareSize : 0
+ height: parent ? parent.squareSize : 0
+ x: col * width
+ z: 1001
+ function fire() { }
+
+ function die() {
+ if (dying)
+ return;
+ dying = true;
+ bubble.jumpTo("burst");
+ if (fishSprite.currentSprite == "front")
+ fishSprite.jumpTo(Math.random() > 0.5 ? "left" : "right" );
+ fishSwim.start();
+ Logic.gameState.score += 1;
+ killedSound.play();
+ bubble.scale = 0.9
+ destroy(350);
+ }
+
+ function inked() {
+ if (hp > 0)
+ ink.jumpTo("dirty");
+ }
+
+ function hit(dmg) {
+ hp -= dmg;
+
+ if (hp <= 0)
+ Logic.killMob(col, container);
+ }
+
+ Component.onCompleted: spawnSound.play()
+
+ SoundEffect {
+ id: spawnSound
+ source: "../audio/catch.wav"
+ }
+ SoundEffect {
+ id: killedSound
+ source: "../audio/catch-action.wav"
+ }
+
+ SpriteSequence {
+ id: fishSprite
+ width: 64
+ height: 64
+ interpolate: false
+ goalSprite: ""
+
+ Sprite {
+ name: "left"
+ source: "../gfx/mob-idle.png"
+ frameWidth: 64
+ frameHeight: 64
+ frameCount: 1
+ frameDuration: 800
+ frameDurationVariation: 400
+ to: { "front" : 1 }
+ }
+
+ Sprite {
+ name: "front"
+ source: "../gfx/mob-idle.png"
+ frameCount: 1
+ frameX: 64
+ frameWidth: 64
+ frameHeight: 64
+ frameDuration: 800
+ frameDurationVariation: 400
+ to: { "left" : 1, "right" : 1 }
+ }
+
+ Sprite {
+ name: "right"
+ source: "../gfx/mob-idle.png"
+ frameCount: 1
+ frameX: 128
+ frameWidth: 64
+ frameHeight: 64
+ frameDuration: 800
+ frameDurationVariation: 400
+ to: { "front" : 1 }
+ }
+
+
+ Sprite { //WORKAROUND: This prevents the triggering of a rendering error which is currently under investigation.
+ name: "dummy"
+ source: "../gfx/melee-idle.png"
+ frameCount: 8
+ frameWidth: 64
+ frameHeight: 64
+ frameX: 0
+ frameDuration: 200
+ }
+
+ NumberAnimation on x {
+ id: fishSwim
+ running: false
+ property bool goingLeft: fishSprite.currentSprite == "right"
+ to: goingLeft ? -360 : 360
+ duration: 300
+ }
+ }
+
+ SpriteSequence {
+ id: bubble
+ width: 64
+ height: 64
+ scale: 0.4 + (0.2 * hp)
+ interpolate: false
+ goalSprite: ""
+
+ Behavior on scale {
+ NumberAnimation { duration: 150; easing.type: Easing.OutBack }
+ }
+
+ Sprite {
+ name: "big"
+ source: "../gfx/catch.png"
+ frameCount: 1
+ to: { "burst" : 0 }
+ }
+
+ Sprite {
+ name: "burst"
+ source: "../gfx/catch-action.png"
+ frameCount: 3
+ frameX: 64
+ frameDuration: 200
+ }
+
+ Sprite { //WORKAROUND: This prevents the triggering of a rendering error which is currently under investigation.
+ name: "dummy"
+ source: "../gfx/melee-idle.png"
+ frameCount: 8
+ frameWidth: 64
+ frameHeight: 64
+ frameX: 0
+ frameDuration: 200
+ }
+ SequentialAnimation on width {
+ loops: Animation.Infinite
+ NumberAnimation { from: width * 1; to: width * 1.1; duration: 800; easing.type: Easing.InOutQuad }
+ NumberAnimation { from: width * 1.1; to: width * 1; duration: 1000; easing.type: Easing.InOutQuad }
+ }
+ SequentialAnimation on height {
+ loops: Animation.Infinite
+ NumberAnimation { from: height * 1; to: height * 1.15; duration: 1200; easing.type: Easing.InOutQuad }
+ NumberAnimation { from: height * 1.15; to: height * 1; duration: 1000; easing.type: Easing.InOutQuad }
+ }
+ }
+
+ SpriteSequence {
+ id: ink
+ width: 64
+ height: 64
+ scale: bubble.scale
+ goalSprite: ""
+
+ Sprite {
+ name: "clean"
+ source: "../gfx/projectile-action.png"
+ frameCount: 1
+ frameX: 0
+ frameWidth: 64
+ frameHeight: 64
+ }
+ Sprite {
+ name: "dirty"
+ source: "../gfx/projectile-action.png"
+ frameCount: 3
+ frameX: 64
+ frameWidth: 64
+ frameHeight: 64
+ frameDuration: 150
+ to: {"clean":1}
+ }
+
+ Sprite { //WORKAROUND: This prevents the triggering of a rendering error which is currently under investigation.
+ name: "dummy"
+ source: "../gfx/melee-idle.png"
+ frameCount: 8
+ frameWidth: 64
+ frameHeight: 64
+ frameX: 0
+ frameDuration: 200
+ }
+ SequentialAnimation on width {
+ loops: Animation.Infinite
+ NumberAnimation { from: width * 1; to: width * 1.1; duration: 800; easing.type: Easing.InOutQuad }
+ NumberAnimation { from: width * 1.1; to: width * 1; duration: 1000; easing.type: Easing.InOutQuad }
+ }
+ SequentialAnimation on height {
+ loops: Animation.Infinite
+ NumberAnimation { from: height * 1; to: height * 1.15; duration: 1200; easing.type: Easing.InOutQuad }
+ NumberAnimation { from: height * 1.15; to: height * 1; duration: 1000; easing.type: Easing.InOutQuad }
+ }
+
+ }
+
+ SequentialAnimation on x {
+ loops: Animation.Infinite
+ NumberAnimation { from: x; to: x - 5; duration: 900; easing.type: Easing.InOutQuad }
+ NumberAnimation { from: x - 5; to: x; duration: 900; easing.type: Easing.InOutQuad }
+ }
+}
+
diff --git a/experimental/qt5-intro-android/maroon/content/towers/Bomb.qml b/experimental/qt5-intro-android/maroon/content/towers/Bomb.qml
new file mode 100644
index 0000000..00437f4
--- /dev/null
+++ b/experimental/qt5-intro-android/maroon/content/towers/Bomb.qml
@@ -0,0 +1,133 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+** of its contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.0
+import "../logic.js" as Logic
+import ".."
+
+TowerBase {
+ id: container
+ hp: 10
+ range: 0.4
+ rof: 10
+ property real detonationRange: 2.5
+
+ function fire() {
+ sound.play()
+ sprite.jumpTo("shoot")
+ animDelay.start()
+ }
+
+ function finishFire() {
+ var sCol = Math.max(0, col - 1)
+ var eCol = Math.min(Logic.gameState.cols - 1, col + 1)
+ var killList = new Array()
+ for (var i = sCol; i <= eCol; i++) {
+ for (var j = 0; j < Logic.gameState.mobs[i].length; j++)
+ if (Math.abs(Logic.gameState.mobs[i][j].y - container.y) < Logic.gameState.squareSize * detonationRange)
+ killList.push(Logic.gameState.mobs[i][j])
+ while (killList.length > 0)
+ Logic.killMob(i, killList.pop())
+ }
+ Logic.killTower(row, col);
+ }
+
+ Timer {
+ id: animDelay
+ running: false
+ interval: shootState.frameCount * shootState.frameDuration
+ onTriggered: finishFire()
+ }
+
+ function die()
+ {
+ destroy() // No blink, because we usually meant to die
+ }
+
+ SoundEffect {
+ id: sound
+ source: "../audio/bomb-action.wav"
+ }
+
+ SpriteSequence {
+ id: sprite
+ width: 64
+ height: 64
+ interpolate: false
+ goalSprite: ""
+
+ Sprite {
+ name: "idle"
+ source: "../gfx/bomb-idle.png"
+ frameCount: 4
+ frameDuration: 800
+ }
+
+ Sprite {
+ id: shootState
+ name: "shoot"
+ source: "../gfx/bomb-action.png"
+ frameCount: 6
+ frameDuration: 155
+ to: { "dying" : 1 } // So that if it takes a frame to clean up, it is on the last frame of the explosion
+ }
+
+ Sprite {
+ name: "dying"
+ source: "../gfx/bomb-action.png"
+ frameCount: 1
+ frameX: 64 * 5
+ frameWidth: 64
+ frameHeight: 64
+ frameDuration: 155
+ }
+
+ SequentialAnimation on x {
+ loops: Animation.Infinite
+ NumberAnimation { from: x; to: x + 4; duration: 900; easing.type: Easing.InOutQuad }
+ NumberAnimation { from: x + 4; to: x; duration: 900; easing.type: Easing.InOutQuad }
+ }
+ SequentialAnimation on y {
+ loops: Animation.Infinite
+ NumberAnimation { from: y; to: y - 4; duration: 900; easing.type: Easing.InOutQuad }
+ NumberAnimation { from: y - 4; to: y; duration: 900; easing.type: Easing.InOutQuad }
+ }
+ }
+}
diff --git a/experimental/qt5-intro-android/maroon/content/towers/Factory.qml b/experimental/qt5-intro-android/maroon/content/towers/Factory.qml
new file mode 100644
index 0000000..b34a184
--- /dev/null
+++ b/experimental/qt5-intro-android/maroon/content/towers/Factory.qml
@@ -0,0 +1,114 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+** of its contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.0
+import "../logic.js" as Logic
+import ".."
+
+TowerBase {
+ id: container
+ rof: 160
+ income: 5
+ SpriteSequence {
+ id: sprite
+ width: 64
+ height: 64
+ interpolate: false
+ goalSprite: ""
+
+ Sprite {
+ name: "idle"
+ source: "../gfx/factory-idle.png"
+ frameCount: 4
+ frameDuration: 200
+ }
+
+ Sprite {
+ name: "action"
+ source: "../gfx/factory-action.png"
+ frameCount: 4
+ frameDuration: 90
+ to: { "idle" : 1 }
+ }
+
+ SequentialAnimation on x {
+ loops: Animation.Infinite
+ NumberAnimation { from: x; to: x + 4; duration: 900; easing.type: Easing.InOutQuad }
+ NumberAnimation { from: x + 4; to: x; duration: 900; easing.type: Easing.InOutQuad }
+ }
+ SequentialAnimation on y {
+ loops: Animation.Infinite
+ NumberAnimation { from: y; to: y - 4; duration: 900; easing.type: Easing.InOutQuad }
+ NumberAnimation { from: y - 4; to: y; duration: 900; easing.type: Easing.InOutQuad }
+ }
+ }
+
+ SoundEffect {
+ id: actionSound
+ source: "../audio/factory-action.wav"
+ }
+
+ function fire() {
+ actionSound.play()
+ sprite.jumpTo("action")
+ coinLaunch.start()
+ }
+
+ function spawn() {
+ coin.target = Logic.gameState.mapToItem(container, 240, -32)
+ }
+
+ Image {
+ id: coin
+ property var target: { "x" : 0, "y" : 0 }
+ source: "../gfx/currency.png"
+ visible: false
+ }
+
+ SequentialAnimation {
+ id: coinLaunch
+ PropertyAction { target: coin; property: "visible"; value: true }
+ ParallelAnimation {
+ NumberAnimation { target: coin; property: "x"; from: 16; to: coin.target.x }
+ NumberAnimation { target: coin; property: "y"; from: 16; to: coin.target.y }
+ }
+ PropertyAction { target: coin; property: "visible"; value: false }
+ }
+}
diff --git a/experimental/qt5-intro-android/maroon/content/towers/Melee.qml b/experimental/qt5-intro-android/maroon/content/towers/Melee.qml
new file mode 100644
index 0000000..1b49a45
--- /dev/null
+++ b/experimental/qt5-intro-android/maroon/content/towers/Melee.qml
@@ -0,0 +1,83 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+** of its contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.0
+import ".."
+
+TowerBase {
+ hp: 4
+ range: 0.1
+ damage: 1
+ rof: 40
+ income: 0
+
+ SpriteSequence {
+ id: sprite
+ width: 64
+ height: 64
+ interpolate: false
+ goalSprite: ""
+
+ Sprite {
+ name: "idle"
+ source: "../gfx/melee-idle.png"
+ frameCount: 8
+ frameDuration: 250
+ }
+
+ Sprite {
+ name: "shoot"
+ source: "../gfx/melee-action.png"
+ frameCount: 2
+ frameDuration: 200
+ to: { "idle" : 1 }
+ }
+ }
+
+ function fire() {
+ shootSound.play()
+ sprite.jumpTo("shoot")
+ }
+
+ SoundEffect {
+ id: shootSound
+ source: "../audio/melee-action.wav"
+ }
+}
diff --git a/experimental/qt5-intro-android/maroon/content/towers/Ranged.qml b/experimental/qt5-intro-android/maroon/content/towers/Ranged.qml
new file mode 100644
index 0000000..33f3354
--- /dev/null
+++ b/experimental/qt5-intro-android/maroon/content/towers/Ranged.qml
@@ -0,0 +1,128 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+** of its contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.0
+import "../logic.js" as Logic
+import ".."
+
+TowerBase {
+ id: container
+ hp: 2
+ range: 6
+ damage: 0 // By projectile
+ rof: 40
+ income: 0
+ property var targetMob
+ property real realDamage: 1
+ function fire() {
+ proj.x = 32 - proj.width / 2
+ proj.y = 0
+ targetMob = Logic.gameState.mobs[col][0]
+ projAnim.to = targetMob.y - container.y -10
+ projAnim.start()
+ shootSound.play()
+ sprite.jumpTo("shoot")
+ }
+
+ Image {
+ id: proj
+ y: 1000
+ SequentialAnimation on y {
+ id: projAnim
+ running: false
+ property real to: 1000
+ SmoothedAnimation {
+ to: projAnim.to
+ velocity: 400
+ }
+ ScriptAction {
+ script: {
+ if (targetMob && targetMob.hit) {
+ targetMob.hit(realDamage)
+ targetMob.inked()
+ projSound.play()
+ }
+ }
+ }
+ PropertyAction {
+ value: 1000;
+ }
+ }
+ source: "../gfx/projectile.png"
+ }
+
+ SoundEffect {
+ id: shootSound
+ source: "../audio/shooter-action.wav"
+ }
+ SoundEffect {
+ id: projSound
+ source: "../audio/projectile-action.wav"
+ }
+
+ SpriteSequence {
+ id: sprite
+ width: 64
+ height: 64
+ interpolate: false
+ goalSprite: ""
+
+ Sprite {
+ name: "idle"
+ source: "../gfx/shooter-idle.png"
+ frameCount: 4
+ frameDuration: 250
+ }
+
+ Sprite {
+ name: "shoot"
+ source: "../gfx/shooter-action.png"
+ frameCount: 5
+ frameDuration: 90
+ to: { "idle" : 1 }
+ }
+
+ SequentialAnimation on x {
+ loops: Animation.Infinite
+ NumberAnimation { from: x; to: x - 4; duration: 900; easing.type: Easing.InOutQuad }
+ NumberAnimation { from: x - 4; to: x; duration: 900; easing.type: Easing.InOutQuad }
+ }
+ }
+}
diff --git a/experimental/qt5-intro-android/maroon/content/towers/TowerBase.qml b/experimental/qt5-intro-android/maroon/content/towers/TowerBase.qml
new file mode 100644
index 0000000..5c71cb0
--- /dev/null
+++ b/experimental/qt5-intro-android/maroon/content/towers/TowerBase.qml
@@ -0,0 +1,72 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+** of its contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.0
+
+Item {
+ property real hp: 1
+ property real range: 0
+ property real damage: 0
+ property int rof: 100
+ property int fireCounter: 0
+ property int income: 0
+ property int row: 0
+ property int col: 0
+
+ width: parent ? parent.squareSize : 0
+ height: parent ? parent.squareSize : 0
+ //This is how it is placed on the gameboard, do not modify/animate the X/Y/Z of a TowerBase please
+ x: col * width
+ y: row * height
+ z: 1000
+
+ function fire() { }
+ function spawn() { } //After all game properties are set
+ function die() { stdDeath.start(); destroy(1000); }
+ function sell() { destroy(); }
+
+ SequentialAnimation on opacity {
+ id: stdDeath
+ running: false
+ loops: 2
+ NumberAnimation { from: 1; to: 0; }
+ NumberAnimation { from: 0; to: 1; }
+ }
+}
diff --git a/experimental/qt5-intro-android/particles/customemitter.qml b/experimental/qt5-intro-android/particles/customemitter.qml
new file mode 100644
index 0000000..270935d
--- /dev/null
+++ b/experimental/qt5-intro-android/particles/customemitter.qml
@@ -0,0 +1,91 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+** of its contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.0
+import QtQuick.Particles 2.0
+
+ParticleSystem {
+ id: sys
+ width: 320
+ height: 480
+ running: true
+
+ property real petalLength: 180
+ property real petalRotation: 0
+ NumberAnimation on petalRotation {
+ from: 0;
+ to: 360;
+ loops: -1;
+ running: true
+ duration: 24000
+ }
+
+ function convert(a) {return a*(Math.PI/180);}
+ Emitter {
+ lifeSpan: 4000
+ emitRate: 120
+ size: 12
+ anchors.centerIn: parent
+ //! [0]
+ onEmitParticles: {
+ for (var i=0; i<particles.length; i++) {
+ var particle = particles[i];
+ particle.startSize = Math.max(02,Math.min(492,Math.tan(particle.t/2)*24));
+ var theta = Math.floor(Math.random() * 6.0);
+ particle.red = theta == 0 || theta == 1 || theta == 2 ? 0.2 : 1;
+ particle.green = theta == 2 || theta == 3 || theta == 4 ? 0.2 : 1;
+ particle.blue = theta == 4 || theta == 5 || theta == 0 ? 0.2 : 1;
+ theta /= 6.0;
+ theta *= 2.0*Math.PI;
+ theta += sys.convert(sys.petalRotation);//Convert from degrees to radians
+ particle.initialVX = petalLength * Math.cos(theta);
+ particle.initialVY = petalLength * Math.sin(theta);
+ particle.initialAX = particle.initialVX * -0.5;
+ particle.initialAY = particle.initialVY * -0.5;
+ }
+ }
+ //! [0]
+ }
+
+ ImageParticle {
+ source: "particle4.png"
+ alpha: 0.0
+ }
+}
diff --git a/experimental/qt5-intro-android/particles/emitmask.qml b/experimental/qt5-intro-android/particles/emitmask.qml
new file mode 100644
index 0000000..1c3bade
--- /dev/null
+++ b/experimental/qt5-intro-android/particles/emitmask.qml
@@ -0,0 +1,76 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+** of its contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.0
+import QtQuick.Particles 2.0
+
+Item {
+
+ width: 320
+ height: 480
+
+ ParticleSystem {
+ width: 300
+ height: 300
+ anchors.centerIn: parent
+
+ ImageParticle {
+ source: "particle.png"
+ z: 2
+ anchors.fill: parent
+ color: "#4040ff"
+ alpha: 0
+ colorVariation: 0.1
+ }
+
+ Emitter {
+ anchors.fill: parent
+ emitRate: 6000
+ lifeSpan: 720
+ size: 10
+ //! [0]
+ shape: MaskShape {
+ source: "starfish_mask.png"
+ }
+ //! [0]
+ }
+
+ }
+}
diff --git a/experimental/qt5-intro-android/particles/particle.png b/experimental/qt5-intro-android/particles/particle.png
new file mode 100644
index 0000000..5c83896
--- /dev/null
+++ b/experimental/qt5-intro-android/particles/particle.png
Binary files differ
diff --git a/experimental/qt5-intro-android/particles/particle4.png b/experimental/qt5-intro-android/particles/particle4.png
new file mode 100644
index 0000000..bc95b70
--- /dev/null
+++ b/experimental/qt5-intro-android/particles/particle4.png
Binary files differ
diff --git a/experimental/qt5-intro-android/particles/star.png b/experimental/qt5-intro-android/particles/star.png
new file mode 100644
index 0000000..0d592cf
--- /dev/null
+++ b/experimental/qt5-intro-android/particles/star.png
Binary files differ
diff --git a/experimental/qt5-intro-android/particles/starfish_mask.png b/experimental/qt5-intro-android/particles/starfish_mask.png
new file mode 100644
index 0000000..2ef74f9
--- /dev/null
+++ b/experimental/qt5-intro-android/particles/starfish_mask.png
Binary files differ
diff --git a/experimental/qt5-intro-android/particles/velocityfrommotion.qml b/experimental/qt5-intro-android/particles/velocityfrommotion.qml
new file mode 100644
index 0000000..2aa3617
--- /dev/null
+++ b/experimental/qt5-intro-android/particles/velocityfrommotion.qml
@@ -0,0 +1,305 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+** of its contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.0
+import QtQuick.Particles 2.0
+
+Item {
+
+ id: root
+
+ height: 480
+ width: 320
+
+ MouseArea {
+ id: mouseArea
+ anchors.fill: root
+ }
+
+ ParticleSystem { id: sys1 }
+ ImageParticle {
+ system: sys1
+ source: "particle.png"
+ color: "cyan"
+ alpha: 0
+ SequentialAnimation on color {
+ loops: Animation.Infinite
+ ColorAnimation {
+ from: "cyan"
+ to: "magenta"
+ duration: 1000
+ }
+ ColorAnimation {
+ from: "magenta"
+ to: "blue"
+ duration: 2000
+ }
+ ColorAnimation {
+ from: "blue"
+ to: "violet"
+ duration: 2000
+ }
+ ColorAnimation {
+ from: "violet"
+ to: "cyan"
+ duration: 2000
+ }
+ }
+ colorVariation: 0.3
+ }
+ //! [0]
+ Emitter {
+ id: trailsNormal
+ system: sys1
+
+ emitRate: 500
+ lifeSpan: 2000
+
+ y: mouseArea.pressed ? mouseArea.mouseY : circle.cy
+ x: mouseArea.pressed ? mouseArea.mouseX : circle.cx
+
+ velocity: PointDirection {xVariation: 4; yVariation: 4;}
+ acceleration: PointDirection {xVariation: 10; yVariation: 10;}
+ velocityFromMovement: 8
+
+ size: 8
+ sizeVariation: 4
+ }
+ //! [0]
+ ParticleSystem { id: sys2 }
+ ImageParticle {
+ color: "cyan"
+ system: sys2
+ alpha: 0
+ SequentialAnimation on color {
+ loops: Animation.Infinite
+ ColorAnimation {
+ from: "magenta"
+ to: "cyan"
+ duration: 1000
+ }
+ ColorAnimation {
+ from: "cyan"
+ to: "magenta"
+ duration: 2000
+ }
+ }
+ colorVariation: 0.5
+ source: "star.png"
+ }
+ Emitter {
+ id: trailsStars
+ system: sys2
+
+ emitRate: 100
+ lifeSpan: 2200
+
+
+ y: mouseArea.pressed ? mouseArea.mouseY : circle.cy
+ x: mouseArea.pressed ? mouseArea.mouseX : circle.cx
+
+ velocity: PointDirection {xVariation: 4; yVariation: 4;}
+ acceleration: PointDirection {xVariation: 10; yVariation: 10;}
+ velocityFromMovement: 8
+
+ size: 22
+ sizeVariation: 4
+ }
+ ParticleSystem { id: sys3; }
+ ImageParticle {
+ source: "particle.png"
+ system: sys3
+ color: "orange"
+ alpha: 0
+ SequentialAnimation on color {
+ loops: Animation.Infinite
+ ColorAnimation {
+ from: "red"
+ to: "green"
+ duration: 2000
+ }
+ ColorAnimation {
+ from: "green"
+ to: "red"
+ duration: 2000
+ }
+ }
+
+ colorVariation: 0.2
+
+ }
+ Emitter {
+ id: trailsNormal2
+ system: sys3
+
+ emitRate: 300
+ lifeSpan: 2000
+
+ y: mouseArea.pressed ? mouseArea.mouseY : circle2.cy
+ x: mouseArea.pressed ? mouseArea.mouseX : circle2.cx
+
+ velocityFromMovement: 16
+
+ velocity: PointDirection {xVariation: 4; yVariation: 4;}
+ acceleration: PointDirection {xVariation: 10; yVariation: 10;}
+
+ size: 12
+ sizeVariation: 4
+ }
+ ParticleSystem { id: sys4; }
+ ImageParticle {
+ system: sys4
+ source: "star.png"
+ color: "green"
+ alpha: 0
+ SequentialAnimation on color {
+ loops: Animation.Infinite
+ ColorAnimation {
+ from: "green"
+ to: "red"
+ duration: 2000
+ }
+ ColorAnimation {
+ from: "red"
+ to: "green"
+ duration: 2000
+ }
+ }
+
+ colorVariation: 0.5
+ }
+ Emitter {
+ id: trailsStars2
+ system: sys4
+
+ emitRate: 50
+ lifeSpan: 2200
+
+
+ y: mouseArea.pressed ? mouseArea.mouseY : circle2.cy
+ x: mouseArea.pressed ? mouseArea.mouseX : circle2.cx
+
+ velocityFromMovement: 16
+ velocity: PointDirection {xVariation: 2; yVariation: 2;}
+ acceleration: PointDirection {xVariation: 10; yVariation: 10;}
+
+ size: 22
+ sizeVariation: 4
+ }
+
+
+
+ Item {
+ id: circle
+ //anchors.fill: parent
+ property real radius: 0
+ property real dx: root.width / 2
+ property real dy: root.height / 2
+ property real cx: radius * Math.sin(percent*6.283185307179) + dx
+ property real cy: radius * Math.cos(percent*6.283185307179) + dy
+ property real percent: 0
+
+ SequentialAnimation on percent {
+ loops: Animation.Infinite
+ running: true
+ NumberAnimation {
+ duration: 1000
+ from: 1
+ to: 0
+ loops: 8
+ }
+ NumberAnimation {
+ duration: 1000
+ from: 0
+ to: 1
+ loops: 8
+ }
+
+ }
+
+ SequentialAnimation on radius {
+ loops: Animation.Infinite
+ running: true
+ NumberAnimation {
+ duration: 4000
+ from: 0
+ to: 100
+ }
+ NumberAnimation {
+ duration: 4000
+ from: 100
+ to: 0
+ }
+ }
+ }
+
+ Item {
+ id: circle3
+ property real radius: 100
+ property real dx: root.width / 2
+ property real dy: root.height / 2
+ property real cx: radius * Math.sin(percent*6.283185307179) + dx
+ property real cy: radius * Math.cos(percent*6.283185307179) + dy
+ property real percent: 0
+
+ SequentialAnimation on percent {
+ loops: Animation.Infinite
+ running: true
+ NumberAnimation { from: 0.0; to: 1 ; duration: 10000; }
+ }
+ }
+
+ Item {
+ id: circle2
+ property real radius: 30
+ property real dx: circle3.cx
+ property real dy: circle3.cy
+ property real cx: radius * Math.sin(percent*6.283185307179) + dx
+ property real cy: radius * Math.cos(percent*6.283185307179) + dy
+ property real percent: 0
+
+ SequentialAnimation on percent {
+ loops: Animation.Infinite
+ running: true
+ NumberAnimation { from: 0.0; to: 1 ; duration: 1000; }
+ }
+ }
+
+}
diff --git a/experimental/qt5-intro-android/presentation/Clock.qml b/experimental/qt5-intro-android/presentation/Clock.qml
new file mode 100644
index 0000000..d4c97ce
--- /dev/null
+++ b/experimental/qt5-intro-android/presentation/Clock.qml
@@ -0,0 +1,77 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/
+**
+** This file is part of the QML Presentation System.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** GNU Lesser General Public License Usage
+** This file may be used under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation and
+** appearing in the file LICENSE.LGPL included in the packaging of this
+** file. Please review the following information to ensure the GNU Lesser
+** General Public License version 2.1 requirements will be met:
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU General
+** Public License version 3.0 as published by the Free Software Foundation
+** and appearing in the file LICENSE.GPL included in the packaging of this
+** file. Please review the following information to ensure the GNU General
+** Public License version 3.0 requirements will be met:
+** http://www.gnu.org/copyleft/gpl.html.
+**
+** Other Usage
+** Alternatively, this file may be used in accordance with the terms and
+** conditions contained in a signed written agreement between you and Digia.
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+
+
+import QtQuick 2.0
+
+Text {
+ id: clock
+
+ property real fontSize: parent.height * 0.05
+ property real fontScale: 0.5
+ property color textColor: parent.textColor != undefined ? parent.textColor : "black"
+ property string fontFamily: parent.fontFamily != undefined ? parent.fontFamily : "Helvetica"
+
+ text: currentTime();
+
+ function currentTime() {
+ var d = new Date();
+ var m = d.getMinutes();
+ if (m < 10) m = "0" + m;
+ return d.getHours() + ":" + m;
+ }
+
+ color: textColor;
+ font.family: fontFamily;
+ font.pixelSize: fontSize * fontScale;
+
+ anchors.bottom: parent.bottom;
+ anchors.left: parent.left;
+ anchors.margins: font.pixelSize;
+
+ Timer {
+ interval: 60000;
+ repeat: true;
+ running: true
+ onTriggered: clock.text = clock.currentTime();
+ }
+}
diff --git a/experimental/qt5-intro-android/presentation/CodeSlide.qml b/experimental/qt5-intro-android/presentation/CodeSlide.qml
new file mode 100644
index 0000000..ba8626b
--- /dev/null
+++ b/experimental/qt5-intro-android/presentation/CodeSlide.qml
@@ -0,0 +1,162 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/
+**
+** This file is part of the QML Presentation System.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** GNU Lesser General Public License Usage
+** This file may be used under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation and
+** appearing in the file LICENSE.LGPL included in the packaging of this
+** file. Please review the following information to ensure the GNU Lesser
+** General Public License version 2.1 requirements will be met:
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU General
+** Public License version 3.0 as published by the Free Software Foundation
+** and appearing in the file LICENSE.GPL included in the packaging of this
+** file. Please review the following information to ensure the GNU General
+** Public License version 3.0 requirements will be met:
+** http://www.gnu.org/copyleft/gpl.html.
+**
+** Other Usage
+** Alternatively, this file may be used in accordance with the terms and
+** conditions contained in a signed written agreement between you and Digia.
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+
+import QtQuick 2.0
+
+Slide {
+ id: slide;
+
+ property string codeFontFamily: parent.codeFontFamily;
+ property string code;
+ property real codeFontSize: baseFontSize * 0.6;
+
+
+
+ Rectangle {
+ id: background
+ anchors.fill: parent
+ radius: height / 10;
+ gradient: Gradient {
+ GradientStop { position: 0; color: Qt.rgba(0.8, 0.8, 0.8, 0.5); }
+ GradientStop { position: 1; color: Qt.rgba(0.2, 0.2, 0.2, 0.5); }
+ }
+ border.color: slide.textColor;
+ border.width: height / 250;
+ antialiasing: true
+ }
+
+ onCodeChanged: {
+ listModel.clear();
+ var codeLines = slide.code.split("\n");
+ for (var i=0; i<codeLines.length; ++i) {
+ listModel.append({
+ line: i,
+ code: codeLines[i]
+ });
+ }
+ }
+
+
+
+ ListModel {
+ id: listModel
+ }
+
+
+ onVisibleChanged: {
+ listView.focus = slide.visible;
+ listView.currentIndex = -1;
+ }
+
+ ListView {
+ id: listView;
+
+ anchors.fill: parent;
+ anchors.margins: background.radius / 2
+ clip: true
+
+ model: listModel;
+ focus: true;
+
+ MouseArea {
+ anchors.fill: parent
+ onClicked: {
+ listView.focus = true;
+ listView.currentIndex = listView.indexAt(mouse.x, mouse.y + listView.contentY);
+ }
+
+ }
+
+ delegate: Item {
+
+ id: itemDelegate
+
+ height: lineLabel.height
+ width: parent.width
+
+ Rectangle {
+ id: lineLabelBackground
+ width: lineLabel.height * 3;
+ height: lineLabel.height;
+ color: slide.textColor;
+ opacity: 0.1;
+ }
+
+ Text {
+ id: lineLabel
+ anchors.right: lineLabelBackground.right;
+ text: (line+1) + ":"
+ color: slide.textColor;
+ font.family: slide.codeFontFamily
+ font.pixelSize: slide.codeFontSize
+ font.bold: itemDelegate.ListView.isCurrentItem;
+ opacity: itemDelegate.ListView.isCurrentItem ? 1 : 0.9;
+
+ }
+
+ Rectangle {
+ id: lineContentBackground
+ anchors.fill: lineContent;
+ anchors.leftMargin: -height / 2;
+ color: slide.textColor
+ opacity: 0.2
+ visible: itemDelegate.ListView.isCurrentItem;
+ }
+
+ Text {
+ id: lineContent
+ anchors.left: lineLabelBackground.right
+ anchors.leftMargin: lineContent.height;
+ anchors.right: parent.right;
+ color: slide.textColor;
+ text: code;
+ font.family: slide.codeFontFamily
+ font.pixelSize: slide.codeFontSize
+ font.bold: itemDelegate.ListView.isCurrentItem;
+ opacity: itemDelegate.ListView.isCurrentItem ? 1 : 0.9;
+ }
+ }
+ }
+
+
+
+}
diff --git a/experimental/qt5-intro-android/presentation/Presentation.qml b/experimental/qt5-intro-android/presentation/Presentation.qml
new file mode 100644
index 0000000..81e5773
--- /dev/null
+++ b/experimental/qt5-intro-android/presentation/Presentation.qml
@@ -0,0 +1,215 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/
+**
+** This file is part of the QML Presentation System.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** GNU Lesser General Public License Usage
+** This file may be used under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation and
+** appearing in the file LICENSE.LGPL included in the packaging of this
+** file. Please review the following information to ensure the GNU Lesser
+** General Public License version 2.1 requirements will be met:
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU General
+** Public License version 3.0 as published by the Free Software Foundation
+** and appearing in the file LICENSE.GPL included in the packaging of this
+** file. Please review the following information to ensure the GNU General
+** Public License version 3.0 requirements will be met:
+** http://www.gnu.org/copyleft/gpl.html.
+**
+** Other Usage
+** Alternatively, this file may be used in accordance with the terms and
+** conditions contained in a signed written agreement between you and Digia.
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+
+import QtQuick 2.0
+import QtQuick.Window 2.0
+
+Item {
+ id: root
+
+ property variant slides: []
+ property int currentSlide;
+
+ property bool showNotes: false;
+
+ property color titleColor: textColor;
+ property color textColor: "black"
+ property string fontFamily: "Helvetica"
+ property string codeFontFamily: "Courier New"
+
+ property real masterVolume: 0.5
+
+ // Private API
+ property bool _faded: false
+ property int _userNum;
+
+ Component.onCompleted: {
+ var slideCount = 0;
+ var slides = [];
+ for (var i=0; i<root.children.length; ++i) {
+ var r = root.children[i];
+ if (r.isSlide) {
+ slides.push(r);
+ }
+ }
+
+ root.slides = slides;
+ root._userNum = 0;
+
+ // Make first slide visible...
+ if (root.slides.length > 0) {
+ root.currentSlide = 0;
+ root.slides[root.currentSlide].visible = true;
+ }
+ }
+
+ function switchSlides(from, to, forward) {
+ from.visible = false
+ to.visible = true
+ return true
+ }
+
+ function goToNextSlide() {
+ root._userNum = 0
+ if (_faded)
+ return
+ if (root.currentSlide + 1 < root.slides.length) {
+ var from = slides[currentSlide]
+ var to = slides[currentSlide + 1]
+ to.textAnimating = true
+ if (switchSlides(from, to, true)) {
+ currentSlide = currentSlide + 1;
+ root.focus = true;
+ }
+ }
+ }
+
+ function goToPreviousSlide() {
+ root._userNum = 0
+ if (root._faded)
+ return
+ if (root.currentSlide - 1 >= 0) {
+ var from = slides[currentSlide]
+ var to = slides[currentSlide - 1]
+ to.textAnimating = false
+ if (switchSlides(from, to, false)) {
+ currentSlide = currentSlide - 1;
+ root.focus = true;
+ }
+ }
+ }
+
+ function goToUserSlide() {
+ --_userNum;
+ if (root._faded || _userNum >= root.slides.length)
+ return
+ if (_userNum < 0)
+ goToNextSlide()
+ else if (root.currentSlide != _userNum) {
+ var from = slides[currentSlide]
+ var to = slides[_userNum]
+ if (switchSlides(from, to, _userNum > currentSlide)) {
+ currentSlide = _userNum;
+ root.focus = true;
+ }
+ }
+ }
+
+ focus: true
+
+
+ Keys.onSpacePressed: goToNextSlide()
+ Keys.onRightPressed: goToNextSlide()
+ Keys.onDownPressed: goToNextSlide()
+ Keys.onLeftPressed: goToPreviousSlide()
+ Keys.onUpPressed: goToPreviousSlide()
+ Keys.onEscapePressed: Qt.quit()
+ Keys.onPressed: {
+ if (event.key >= Qt.Key_0 && event.key <= Qt.Key_9)
+ _userNum = 10 * _userNum + (event.key - Qt.Key_0)
+ else {
+ if (event.key === Qt.Key_Return || event.key === Qt.Key_Enter)
+ goToUserSlide();
+ else if (event.key === Qt.Key_VolumeUp)
+ root.masterVolume = Math.min(1.0, root.masterVolume + 0.1)
+ else if (event.key === Qt.Key_VolumeDown)
+ root.masterVolume = Math.max(0.0, root.masterVolume - 0.1)
+ else if (event.key === Qt.Key_VolumeMute)
+ root.masterVolume = 0.0
+ else if (event.key === Qt.Key_Backspace)
+ goToPreviousSlide();
+ else if (event.key === Qt.Key_C)
+ root._faded = !root._faded;
+ _userNum = 0;
+ }
+ }
+ Keys.onReleased: {
+ if (event.key === Qt.Key_Back) {
+ if (root.currentSlide > 0) {
+ goToPreviousSlide()
+ event.accepted = true
+ }
+ }
+ }
+
+ Rectangle {
+ z: 1000
+ color: "black"
+ anchors.fill: parent
+ opacity: root._faded ? 1 : 0
+ Behavior on opacity { NumberAnimation { duration: 250 } }
+ }
+
+ MouseArea {
+ id: mouseArea
+ anchors.fill: parent
+ acceptedButtons: Qt.LeftButton | Qt.RightButton
+ onClicked: {
+ if (mouse.button == Qt.RightButton)
+ goToPreviousSlide()
+ else
+ goToNextSlide()
+ }
+ onPressAndHold: goToPreviousSlide(); //A back mechanism for touch only devices
+ }
+
+ Window {
+ id: notesWindow;
+ width: 400
+ height: 300
+
+ title: "QML Presentation: Notes"
+ visible: root.showNotes
+
+ Text {
+ anchors.fill: parent
+ anchors.margins: parent.height * 0.1;
+
+ font.pixelSize: 16
+ wrapMode: Text.WordWrap
+
+ property string notes: root.slides[root.currentSlide].notes;
+ text: notes == "" ? "Slide has no notes..." : notes;
+ font.italic: notes == "";
+ }
+ }
+}
diff --git a/experimental/qt5-intro-android/presentation/Slide.qml b/experimental/qt5-intro-android/presentation/Slide.qml
new file mode 100644
index 0000000..039c3a3
--- /dev/null
+++ b/experimental/qt5-intro-android/presentation/Slide.qml
@@ -0,0 +1,192 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/
+**
+** This file is part of the QML Presentation System.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** GNU Lesser General Public License Usage
+** This file may be used under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation and
+** appearing in the file LICENSE.LGPL included in the packaging of this
+** file. Please review the following information to ensure the GNU Lesser
+** General Public License version 2.1 requirements will be met:
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU General
+** Public License version 3.0 as published by the Free Software Foundation
+** and appearing in the file LICENSE.GPL included in the packaging of this
+** file. Please review the following information to ensure the GNU General
+** Public License version 3.0 requirements will be met:
+** http://www.gnu.org/copyleft/gpl.html.
+**
+** Other Usage
+** Alternatively, this file may be used in accordance with the terms and
+** conditions contained in a signed written agreement between you and Digia.
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+
+import QtQuick 2.0
+
+Item {
+ /*
+ Slides can only be instantiated as a direct child of a Presentation {} as they rely on
+ several properties there.
+ */
+
+ id: slide
+
+ property bool isSlide: true;
+
+ property string title;
+ property variant content: []
+ property string centeredText
+ property string writeInText;
+ property string notes;
+
+ property real fontSize: Math.min(parent.height, parent.width) * 0.05
+ property real fontScale: 1
+
+ property real baseFontSize: fontSize * fontScale
+ property real titleFontSize: fontSize * 1.2 * fontScale
+ property real bulletSpacing: 1
+
+ property real contentWidth: width
+
+ property bool textAnimating: true
+
+ // Define the slide to be the "content area"
+ x: parent.width * 0.05
+ y: parent.height * 0.2
+ width: parent.width * 0.9
+ height: parent.height * 0.7
+
+ property real masterWidth: parent.width
+ property real masterHeight: parent.height
+
+ property color titleColor: parent.titleColor;
+ property color textColor: parent.textColor;
+ property string fontFamily: parent.fontFamily;
+
+ property variant contentFormat: Text.PlainText
+
+ visible: false
+
+ Text {
+ id: titleText
+ font.pixelSize: titleFontSize
+ text: title;
+ anchors.horizontalCenter: parent.horizontalCenter
+ anchors.bottom: parent.top
+ anchors.bottomMargin: parent.fontSize * 1.5
+ font.bold: true;
+ font.family: slide.fontFamily
+ color: slide.titleColor
+ horizontalAlignment: Text.Center
+ z: 1
+ }
+
+ Text {
+ id: centeredId
+ width: parent.width
+ anchors.centerIn: parent
+ anchors.verticalCenterOffset: - parent.y / 3
+ text: centeredText
+ horizontalAlignment: Text.Center
+ font.pixelSize: baseFontSize
+ font.family: slide.fontFamily
+ color: slide.textColor
+ wrapMode: Text.Wrap
+ }
+
+ Text {
+ id: writeInTextId
+ property int length;
+ font.family: slide.fontFamily
+ font.pixelSize: baseFontSize
+ color: slide.textColor
+
+ anchors.fill: parent;
+ wrapMode: Text.Wrap
+
+ text: slide.writeInText.substring(0, length);
+
+ NumberAnimation on length {
+ from: 0;
+ to: slide.writeInText.length;
+ duration: slide.textAnimating ? slide.writeInText.length * 30 : 1;
+ running: slide.visible && parent.visible && slide.writeInText.length > 0
+ }
+
+ visible: slide.writeInText != undefined;
+ }
+
+
+ Column {
+ id: contentId
+ anchors.fill: parent
+
+ Repeater {
+ model: content.length
+
+ Row {
+ id: row
+
+ function decideIndentLevel(s) { return s.charAt(0) == " " ? 1 + decideIndentLevel(s.substring(1)) : 0 }
+ property int indentLevel: decideIndentLevel(content[index])
+ property int nextIndentLevel: index < content.length - 1 ? decideIndentLevel(content[index+1]) : 0
+ property real indentFactor: (10 - row.indentLevel * 2) / 10;
+
+ height: text.height + (nextIndentLevel == 0 ? 1 : 0.3) * slide.baseFontSize * slide.bulletSpacing
+ x: slide.baseFontSize * indentLevel
+
+ Rectangle {
+ id: dot
+ y: baseFontSize * row.indentFactor / 2
+ width: baseFontSize / 4
+ height: baseFontSize / 4
+ color: slide.textColor
+ radius: width / 2
+ smooth: true
+ opacity: text.text.length == 0 ? 0 : 1
+ }
+
+ Rectangle {
+ id: space
+ width: dot.width * 2
+ height: 1
+ color: "#00ffffff"
+ }
+
+ Text {
+ id: text
+ width: slide.contentWidth - parent.x - dot.width - space.width
+ font.pixelSize: baseFontSize * row.indentFactor
+ text: content[index]
+ textFormat: contentFormat
+ wrapMode: Text.WordWrap
+ color: slide.textColor
+ horizontalAlignment: Text.AlignLeft
+ font.family: slide.fontFamily
+
+ onLinkActivated: Qt.openUrlExternally(link)
+ }
+ }
+ }
+ }
+
+}
diff --git a/experimental/qt5-intro-android/presentation/SlideCounter.qml b/experimental/qt5-intro-android/presentation/SlideCounter.qml
new file mode 100644
index 0000000..06e7542
--- /dev/null
+++ b/experimental/qt5-intro-android/presentation/SlideCounter.qml
@@ -0,0 +1,61 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/
+**
+** This file is part of the QML Presentation System.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** GNU Lesser General Public License Usage
+** This file may be used under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation and
+** appearing in the file LICENSE.LGPL included in the packaging of this
+** file. Please review the following information to ensure the GNU Lesser
+** General Public License version 2.1 requirements will be met:
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU General
+** Public License version 3.0 as published by the Free Software Foundation
+** and appearing in the file LICENSE.GPL included in the packaging of this
+** file. Please review the following information to ensure the GNU General
+** Public License version 3.0 requirements will be met:
+** http://www.gnu.org/copyleft/gpl.html.
+**
+** Other Usage
+** Alternatively, this file may be used in accordance with the terms and
+** conditions contained in a signed written agreement between you and Digia.
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+
+import QtQuick 2.0
+
+Text {
+ id: counter;
+
+ property real fontSize: parent.height * 0.05
+ property real fontScale: 0.5;
+ property color textColor: parent.textColor != undefined ? parent.textColor : "black"
+ property string fontFamily: parent.fontFamily != undefined ? parent.fontFamily : "Helvetica"
+
+ text: "# " + (parent.currentSlide + 1) + " / " + parent.slides.length;
+ color: counter.textColor;
+ font.family: counter.fontFamily;
+ font.pixelSize: fontSize * fontScale;
+
+ anchors.right: parent.right;
+ anchors.bottom: parent.bottom;
+ anchors.margins: font.pixelSize;
+}
diff --git a/experimental/qt5-intro-android/preview_l.jpg b/experimental/qt5-intro-android/preview_l.jpg
new file mode 100644
index 0000000..8decd76
--- /dev/null
+++ b/experimental/qt5-intro-android/preview_l.jpg
Binary files differ
diff --git a/experimental/qt5-intro-android/samegame/Samegame.qml b/experimental/qt5-intro-android/samegame/Samegame.qml
new file mode 100644
index 0000000..2b0b82a
--- /dev/null
+++ b/experimental/qt5-intro-android/samegame/Samegame.qml
@@ -0,0 +1,371 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+** of its contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.0
+import QtQuick.Particles 2.0
+import "content/samegame.js" as Logic
+import "settings.js" as Settings
+import "content"
+
+Rectangle {
+ id: root
+ width: 320; height: 480
+ property int acc: 0
+
+
+ function loadPuzzle() {
+ if (gameCanvas.mode != "")
+ Logic.cleanUp();
+ Logic.startNewGame(gameCanvas,"puzzle","levels/level"+acc+".qml")
+ }
+ function nextPuzzle() {
+ acc = (acc + 1) % 10;
+ loadPuzzle();
+ }
+ Timer {
+ id: gameOverTimer
+ interval: 1500
+ running : gameCanvas.gameOver && gameCanvas.mode == "puzzle" //mode will be reset by cleanUp();
+ repeat : false
+ onTriggered: {
+ Logic.cleanUp();
+ nextPuzzle();
+ }
+ }
+
+ Image {
+ source: "content/gfx/background.png"
+ anchors.fill: parent
+ }
+
+ GameArea {
+ id: gameCanvas
+ z: 1
+ y: Settings.headerHeight
+
+ width: parent.width
+ height: parent.height - Settings.headerHeight - Settings.footerHeight
+
+ backgroundVisible: root.state == "in-game"
+ onModeChanged: if (gameCanvas.mode != "puzzle") puzzleWon = false; //UI has stricter constraints on this variable than the game does
+ Age {
+ groups: ["redspots", "greenspots", "bluespots", "yellowspots"]
+ enabled: root.state == ""
+ system: gameCanvas.ps
+ }
+
+ onPuzzleLost: acc--;//So that nextPuzzle() reloads the current one
+
+ }
+
+ Item {
+ id: menu
+ z: 2
+ width: parent.width;
+ anchors.top: parent.top
+ anchors.bottom: bottomBar.top
+
+ LogoAnimation {
+ x: 64
+ y: Settings.headerHeight
+ particleSystem: gameCanvas.ps
+ running: root.state == ""
+ }
+ Row {
+ x: 112
+ y: 20
+ Image { source: "content/gfx/logo-a.png" }
+ Image { source: "content/gfx/logo-m.png" }
+ Image { source: "content/gfx/logo-e.png" }
+ }
+
+ Column {
+ y: 100 + 40
+ spacing: Settings.menuButtonSpacing
+
+ Button {
+ width: root.width
+ rotatedButton: true
+ imgSrc: "content/gfx/but-game-1.png"
+ onClicked: {
+ if (root.state == "in-game")
+ return //Prevent double clicking
+ root.state = "in-game"
+ gameCanvas.blockFile = "Block.qml"
+ gameCanvas.background = "gfx/background.png"
+ arcadeTimer.start();
+ }
+ //Emitted particles don't fade out, because ImageParticle is on the GameArea
+ system: gameCanvas.ps
+ group: "green"
+ Timer {
+ id: arcadeTimer
+ interval: Settings.menuDelay
+ running : false
+ repeat : false
+ onTriggered: Logic.startNewGame(gameCanvas)
+ }
+ }
+
+ Button {
+ width: root.width
+ rotatedButton: true
+ imgSrc: "content/gfx/but-game-2.png"
+ onClicked: {
+ if (root.state == "in-game")
+ return
+ root.state = "in-game"
+ gameCanvas.blockFile = "Block.qml"
+ gameCanvas.background = "gfx/background.png"
+ twopTimer.start();
+ }
+ system: gameCanvas.ps
+ group: "green"
+ Timer {
+ id: twopTimer
+ interval: Settings.menuDelay
+ running : false
+ repeat : false
+ onTriggered: Logic.startNewGame(gameCanvas, "multiplayer")
+ }
+ }
+
+ Button {
+ width: root.width
+ rotatedButton: true
+ imgSrc: "content/gfx/but-game-3.png"
+ onClicked: {
+ if (root.state == "in-game")
+ return
+ root.state = "in-game"
+ gameCanvas.blockFile = "SimpleBlock.qml"
+ gameCanvas.background = "gfx/background.png"
+ endlessTimer.start();
+ }
+ system: gameCanvas.ps
+ group: "blue"
+ Timer {
+ id: endlessTimer
+ interval: Settings.menuDelay
+ running : false
+ repeat : false
+ onTriggered: Logic.startNewGame(gameCanvas, "endless")
+ }
+ }
+
+ Button {
+ width: root.width
+ rotatedButton: true
+ imgSrc: "content/gfx/but-game-4.png"
+ group: "yellow"
+ onClicked: {
+ if (root.state == "in-game")
+ return
+ root.state = "in-game"
+ gameCanvas.blockFile = "PuzzleBlock.qml"
+ gameCanvas.background = "gfx/background.png"
+ puzzleTimer.start();
+ }
+ Timer {
+ id: puzzleTimer
+ interval: Settings.menuDelay
+ running : false
+ repeat : false
+ onTriggered: loadPuzzle();
+ }
+ system: gameCanvas.ps
+ }
+ }
+ }
+
+ Image {
+ id: scoreBar
+ source: "content/gfx/bar.png"
+ width: parent.width
+ z: 6
+ y: -Settings.headerHeight
+ height: Settings.headerHeight
+ Behavior on opacity { NumberAnimation {} }
+ SamegameText {
+ id: arcadeScore
+ anchors { right: parent.right; topMargin: 3; rightMargin: 11; top: parent.top}
+ text: '<font color="#f7d303">P1:</font> ' + gameCanvas.score
+ font.pixelSize: Settings.fontPixelSize
+ textFormat: Text.StyledText
+ color: "white"
+ opacity: gameCanvas.mode == "arcade" ? 1 : 0
+ Behavior on opacity { NumberAnimation {} }
+ }
+ SamegameText {
+ id: arcadeHighScore
+ anchors { left: parent.left; topMargin: 3; leftMargin: 11; top: parent.top}
+ text: '<font color="#f7d303">Highscore:</font> ' + gameCanvas.highScore
+ opacity: gameCanvas.mode == "arcade" ? 1 : 0
+ }
+ SamegameText {
+ id: p1Score
+ anchors { right: parent.right; topMargin: 3; rightMargin: 11; top: parent.top}
+ text: '<font color="#f7d303">P1:</font> ' + gameCanvas.score
+ opacity: gameCanvas.mode == "multiplayer" ? 1 : 0
+ }
+ SamegameText {
+ id: p2Score
+ anchors { left: parent.left; topMargin: 3; leftMargin: 11; top: parent.top}
+ text: '<font color="#f7d303">P2:</font> ' + gameCanvas.score2
+ opacity: gameCanvas.mode == "multiplayer" ? 1 : 0
+ rotation: 180
+ }
+ SamegameText {
+ id: puzzleMoves
+ anchors { left: parent.left; topMargin: 3; leftMargin: 11; top: parent.top}
+ text: '<font color="#f7d303">Moves:</font> ' + gameCanvas.moves
+ opacity: gameCanvas.mode == "puzzle" ? 1 : 0
+ }
+ SamegameText {
+ Image {
+ source: "content/gfx/icon-time.png"
+ x: -20
+ }
+ id: puzzleTime
+ anchors { topMargin: 3; top: parent.top; horizontalCenter: parent.horizontalCenter; horizontalCenterOffset: 20}
+ text: "00:00"
+ opacity: gameCanvas.mode == "puzzle" ? 1 : 0
+ Timer {
+ interval: 1000
+ repeat: true
+ running: gameCanvas.mode == "puzzle" && !gameCanvas.gameOver
+ onTriggered: {
+ var elapsed = Math.floor((new Date() - Logic.gameDuration)/ 1000.0);
+ var mins = Math.floor(elapsed/60.0);
+ var secs = (elapsed % 60);
+ puzzleTime.text = (mins < 10 ? "0" : "") + mins + ":" + (secs < 10 ? "0" : "") + secs;
+ }
+ }
+ }
+ SamegameText {
+ id: puzzleScore
+ anchors { right: parent.right; topMargin: 3; rightMargin: 11; top: parent.top}
+ text: '<font color="#f7d303">Score:</font> ' + gameCanvas.score
+ opacity: gameCanvas.mode == "puzzle" ? 1 : 0
+ }
+ }
+
+ Image {
+ id: bottomBar
+ width: parent.width
+ height: Settings.footerHeight
+ source: "content/gfx/bar.png"
+ y: parent.height - Settings.footerHeight;
+ z: 2
+ Button {
+ id: quitButton
+ height: Settings.toolButtonHeight
+ imgSrc: "content/gfx/but-quit.png"
+ onClicked: {Qt.quit(); }
+ anchors { left: parent.left; verticalCenter: parent.verticalCenter; leftMargin: 11 }
+ }
+ Button {
+ id: menuButton
+ height: Settings.toolButtonHeight
+ imgSrc: "content/gfx/but-menu.png"
+ visible: (root.state == "in-game");
+ onClicked: {root.state = ""; Logic.cleanUp(); gameCanvas.mode = ""}
+ anchors { left: quitButton.right; verticalCenter: parent.verticalCenter; leftMargin: 0 }
+ }
+ Button {
+ id: againButton
+ height: Settings.toolButtonHeight
+ imgSrc: "content/gfx/but-game-new.png"
+ visible: (root.state == "in-game");
+ opacity: gameCanvas.gameOver && (gameCanvas.mode == "arcade" || gameCanvas.mode == "multiplayer")
+ Behavior on opacity{ NumberAnimation {} }
+ onClicked: {if (gameCanvas.gameOver) { Logic.startNewGame(gameCanvas, gameCanvas.mode);}}
+ anchors { right: parent.right; verticalCenter: parent.verticalCenter; rightMargin: 11 }
+ }
+ Button {
+ id: nextButton
+ height: Settings.toolButtonHeight
+ imgSrc: "content/gfx/but-puzzle-next.png"
+ visible: (root.state == "in-game") && gameCanvas.mode == "puzzle" && gameCanvas.puzzleWon
+ opacity: gameCanvas.puzzleWon ? 1 : 0
+ Behavior on opacity{ NumberAnimation {} }
+ onClicked: {if (gameCanvas.puzzleWon) nextPuzzle();}
+ anchors { right: parent.right; verticalCenter: parent.verticalCenter; rightMargin: 11 }
+ }
+ }
+
+ Connections {
+ target: root
+ onStateChanged: stateChangeAnim.running = true
+ }
+ SequentialAnimation {
+ id: stateChangeAnim
+ ParallelAnimation {
+ NumberAnimation { target: bottomBar; property: "y"; to: root.height; duration: Settings.menuDelay/2; easing.type: Easing.OutQuad }
+ NumberAnimation { target: scoreBar; property: "y"; to: -Settings.headerHeight; duration: Settings.menuDelay/2; easing.type: Easing.OutQuad }
+ }
+ ParallelAnimation {
+ NumberAnimation { target: bottomBar; property: "y"; to: root.height - Settings.footerHeight; duration: Settings.menuDelay/2; easing.type: Easing.OutBounce}
+ NumberAnimation { target: scoreBar; property: "y"; to: root.state == "" ? -Settings.headerHeight : 0; duration: Settings.menuDelay/2; easing.type: Easing.OutBounce}
+ }
+ }
+
+ states: [
+ State {
+ name: "in-game"
+ PropertyChanges {
+ target: menu
+ opacity: 0
+ visible: false
+ }
+ }
+ ]
+
+ transitions: [
+ Transition {
+ NumberAnimation {properties: "x,y,opacity"}
+ }
+ ]
+
+ //"Debug mode"
+ focus: true
+ Keys.onAsteriskPressed: Logic.nuke();
+ Keys.onSpacePressed: gameCanvas.puzzleWon = true;
+}
diff --git a/experimental/qt5-intro-android/samegame/content/Block.qml b/experimental/qt5-intro-android/samegame/content/Block.qml
new file mode 100644
index 0000000..85f2e27
--- /dev/null
+++ b/experimental/qt5-intro-android/samegame/content/Block.qml
@@ -0,0 +1,114 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+** of its contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.0
+import QtQuick.Particles 2.0
+
+Item {
+ id: block
+ property bool dying: false
+ property bool spawned: false
+ property int type: 0
+ property ParticleSystem particleSystem
+
+ Behavior on x {
+ enabled: spawned;
+ SpringAnimation{ spring: 2; damping: 0.2 }
+ }
+ Behavior on y {
+ SpringAnimation{ spring: 2; damping: 0.2 }
+ }
+
+ Image {
+ id: img
+ source: {
+ if (type == 0){
+ "gfx/red.png";
+ } else if (type == 1) {
+ "gfx/blue.png";
+ } else if (type == 2) {
+ "gfx/green.png";
+ } else {
+ "gfx/yellow.png";
+ }
+ }
+ opacity: 0
+ Behavior on opacity { NumberAnimation { duration: 200 } }
+ anchors.fill: parent
+ }
+
+ //Foreground particles
+ BlockEmitter {
+ id: particles
+ system: particleSystem
+ group: {
+ if (type == 0){
+ "red";
+ } else if (type == 1) {
+ "blue";
+ } else if (type == 2) {
+ "green";
+ } else {
+ "yellow";
+ }
+ }
+ anchors.fill: parent
+ }
+
+ //Paint particles on the background
+ PaintEmitter {
+ id: particles2
+ system: particleSystem
+ }
+
+ states: [
+ State {
+ name: "AliveState"; when: spawned == true && dying == false
+ PropertyChanges { target: img; opacity: 1 }
+ },
+
+ State {
+ name: "DeathState"; when: dying == true
+ StateChangeScript { script: {particleSystem.paused = false; particles.pulse(100); particles2.pulse(100);} }
+ PropertyChanges { target: img; opacity: 0 }
+ StateChangeScript { script: block.destroy(1000); }
+ }
+ ]
+}
diff --git a/experimental/qt5-intro-android/samegame/content/BlockEmitter.qml b/experimental/qt5-intro-android/samegame/content/BlockEmitter.qml
new file mode 100644
index 0000000..7dad509
--- /dev/null
+++ b/experimental/qt5-intro-android/samegame/content/BlockEmitter.qml
@@ -0,0 +1,57 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+** of its contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.0
+import QtQuick.Particles 2.0
+
+import "../settings.js" as Settings
+
+Emitter {
+ property Item block: parent
+ velocity: TargetDirection{targetX: block.width/2; targetY: block.height/2; magnitude: -40; magnitudeVariation: 40}
+ acceleration: TargetDirection{targetX: block.width/2; targetY: block.height/2; magnitude: -100;}
+ shape: EllipseShape{fill:true}
+ enabled: false;
+ lifeSpan: 700; lifeSpanVariation: 100
+ emitRate: 1000
+ maximumEmitted: 100 //only fires 0.1s bursts (still 2x old number)
+ size: Settings.blockSize * 0.85
+ endSize: Settings.blockSize * 0.85 /2
+}
diff --git a/experimental/qt5-intro-android/samegame/content/Button.qml b/experimental/qt5-intro-android/samegame/content/Button.qml
new file mode 100644
index 0000000..aab21ec
--- /dev/null
+++ b/experimental/qt5-intro-android/samegame/content/Button.qml
@@ -0,0 +1,70 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+** of its contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.0
+import QtQuick.Particles 2.0
+
+Item {
+ property alias imgSrc: image.source
+ property alias system: emitter.system
+ property alias group: emitter.group
+ signal clicked
+ property bool rotatedButton: false
+
+ width: image.width
+ height: image.sourceSize.height
+ Image {
+ id: image
+ height: parent.height
+ width: height/sourceSize.height * sourceSize.width
+
+ anchors.horizontalCenter: parent.horizontalCenter
+ rotation: rotatedButton ? ((Math.random() * 3 + 2) * (Math.random() <= 0.5 ? -1 : 1)) : 0
+ MenuEmitter {
+ id: emitter
+ anchors.fill: parent
+ //shape: MaskShape {source: image.source}
+ }
+ }
+ MouseArea {
+ anchors.fill: parent
+ onClicked: {parent.clicked(); emitter.burst(400);}
+ }
+}
diff --git a/experimental/qt5-intro-android/samegame/content/GameArea.qml b/experimental/qt5-intro-android/samegame/content/GameArea.qml
new file mode 100644
index 0000000..f3ca98d
--- /dev/null
+++ b/experimental/qt5-intro-android/samegame/content/GameArea.qml
@@ -0,0 +1,226 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+** of its contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.0
+import QtQuick.Particles 2.0
+import "samegame.js" as Logic
+
+Item {
+ id: gameCanvas
+ property bool gameOver: true
+ property int score: 0
+ property int highScore: 0
+ property int moves: 0
+ property string mode: ""
+ property ParticleSystem ps: particleSystem
+ //For easy theming
+ property alias backgroundVisible: bg.visible
+ property string background: "gfx/background.png"
+ property string blockFile: "Block.qml"
+ onBlockFileChanged: Logic.changeBlock(blockFile);
+ property alias particlePack: auxLoader.source
+ //For multiplayer
+ property int score2: 0
+ property int curTurn: 1
+ property bool autoTurnChange: false
+ signal swapPlayers
+ property bool swapping: false
+ //onSwapPlayers: if (autoTurnChange) Logic.turnChange();//Now implemented below
+ //For puzzle
+ property url level
+ property bool puzzleWon: false
+ signal puzzleLost //Since root is tracking the puzzle progress
+ function showPuzzleEnd (won) {
+ if (won) {
+ smokeParticle.color = Qt.rgba(0,1,0,0);
+ puzzleWin.play();
+ } else {
+ smokeParticle.color = Qt.rgba(1,0,0,0);
+ puzzleFail.play();
+ puzzleLost();
+ }
+ }
+ function showPuzzleGoal (str) {
+ puzzleTextBubble.opacity = 1;
+ puzzleTextLabel.text = str;
+ }
+ Image {
+ id: bg
+ z: -1
+ anchors.fill: parent
+ source: background;
+ fillMode: Image.PreserveAspectCrop
+ }
+
+ MouseArea {
+ anchors.fill: parent; onClicked: {
+ if (puzzleTextBubble.opacity == 1) {
+ puzzleTextBubble.opacity = 0;
+ Logic.finishLoadingMap();
+ } else if (!swapping) {
+ Logic.handleClick(mouse.x,mouse.y);
+ }
+ }
+ }
+
+ Image {
+ id: highScoreTextBubble
+ opacity: mode == "arcade" && gameOver && gameCanvas.score == gameCanvas.highScore ? 1 : 0
+ Behavior on opacity { NumberAnimation {} }
+ anchors.centerIn: parent
+ z: 10
+ source: "gfx/bubble-highscore.png"
+ Image {
+ anchors.centerIn: parent
+ source: "gfx/text-highscore-new.png"
+ rotation: -10
+ }
+ }
+
+ Image {
+ id: puzzleTextBubble
+ anchors.centerIn: parent
+ opacity: 0
+ Behavior on opacity { NumberAnimation {} }
+ z: 10
+ source: "gfx/bubble-puzzle.png"
+ Connections {
+ target: gameCanvas
+ onModeChanged: if (mode != "puzzle" && puzzleTextBubble.opacity > 0) puzzleTextBubble.opacity = 0;
+ }
+ Text {
+ id: puzzleTextLabel
+ width: parent.width - 24
+ anchors.centerIn: parent
+ horizontalAlignment: Text.AlignHCenter
+ color: "white"
+ font.pixelSize: 24
+ font.bold: true
+ wrapMode: Text.WordWrap
+ }
+ }
+ onModeChanged: {
+ p1WonImg.opacity = 0;
+ p2WonImg.opacity = 0;
+ }
+ SmokeText { id: puzzleWin; source: "gfx/icon-ok.png"; system: particleSystem }
+ SmokeText { id: puzzleFail; source: "gfx/icon-fail.png"; system: particleSystem }
+
+ onSwapPlayers: {
+ smokeParticle.color = "yellow"
+ Logic.turnChange();
+ if (curTurn == 1) {
+ p1Text.play();
+ } else {
+ p2Text.play();
+ }
+ clickDelay.running = true;
+ }
+ SequentialAnimation {
+ id: clickDelay
+ ScriptAction { script: gameCanvas.swapping = true; }
+ PauseAnimation { duration: 750 }
+ ScriptAction { script: gameCanvas.swapping = false; }
+ }
+
+ SmokeText {
+ id: p1Text; source: "gfx/text-p1-go.png";
+ system: particleSystem; playerNum: 1
+ opacity: p1WonImg.opacity + p2WonImg.opacity > 0 ? 0 : 1
+ }
+
+ SmokeText {
+ id: p2Text; source: "gfx/text-p2-go.png";
+ system: particleSystem; playerNum: 2
+ opacity: p1WonImg.opacity + p2WonImg.opacity > 0 ? 0 : 1
+ }
+
+ onGameOverChanged: {
+ if (gameCanvas.mode == "multiplayer") {
+ if (gameCanvas.score >= gameCanvas.score2) {
+ p1WonImg.opacity = 1;
+ } else {
+ p2WonImg.opacity = 1;
+ }
+ }
+ }
+ Image {
+ id: p1WonImg
+ source: "gfx/text-p1-won.png"
+ anchors.centerIn: parent
+ opacity: 0
+ Behavior on opacity { NumberAnimation {} }
+ z: 10
+ }
+ Image {
+ id: p2WonImg
+ source: "gfx/text-p2-won.png"
+ anchors.centerIn: parent
+ opacity: 0
+ Behavior on opacity { NumberAnimation {} }
+ z: 10
+ }
+
+ ParticleSystem{
+ id: particleSystem;
+ anchors.fill: parent
+ z: 5
+ ImageParticle {
+ id: smokeParticle
+ groups: ["smoke"]
+ source: "gfx/particle-smoke.png"
+ alpha: 0.1
+ alphaVariation: 0.1
+ color: "yellow"
+ }
+ Loader {
+ id: auxLoader
+ anchors.fill: parent
+ source: "PrimaryPack.qml"
+ onItemChanged: {
+ if (item && "particleSystem" in item)
+ item.particleSystem = particleSystem
+ if (item && "gameArea" in item)
+ item.gameArea = gameCanvas
+ }
+ }
+ }
+}
+
diff --git a/experimental/qt5-intro-android/samegame/content/LogoAnimation.qml b/experimental/qt5-intro-android/samegame/content/LogoAnimation.qml
new file mode 100644
index 0000000..c879893
--- /dev/null
+++ b/experimental/qt5-intro-android/samegame/content/LogoAnimation.qml
@@ -0,0 +1,102 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+** of its contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.0
+import QtQuick.Particles 2.0
+
+Item {
+ id: container //Positioned where the 48x48 S/G should be
+ property alias running: mainAnim.running
+ property ParticleSystem particleSystem
+ property int dur: 500
+ signal boomTime
+ Image {
+ id: s1
+ source: "gfx/logo-s.png"
+ y: 0
+ }
+ Image {
+ id: g1
+ source: "gfx/logo-g.png"
+ y: -128
+ }
+ Column {
+ Repeater {
+ model: 2
+ Item {
+ width: 48
+ height: 48
+ BlockEmitter {
+ id: emitter
+ anchors.fill: parent
+ group: "red"
+ system: particleSystem
+ Connections {
+ target: container
+ onBoomTime: emitter.pulse(100);
+ }
+ }
+ }
+ }
+ }
+ SequentialAnimation {
+ id: mainAnim
+ running: true
+ loops: -1
+ PropertyAction { target: g1; property: "y"; value: -128}
+ PropertyAction { target: g1; property: "opacity"; value: 1}
+ PropertyAction { target: s1; property: "y"; value: 0}
+ PropertyAction { target: s1; property: "opacity"; value: 1}
+ NumberAnimation { target: g1; property: "y"; from: -96; to: -48; duration: dur}
+ ParallelAnimation {
+ NumberAnimation { target: g1; property: "y"; from: -48; to: 0; duration: dur}
+ NumberAnimation { target: s1; property: "y"; from: 0; to: 48; duration: dur }
+ }
+ PauseAnimation { duration: dur }
+ ScriptAction { script: container.boomTime(); }
+ ParallelAnimation {
+ NumberAnimation { target: g1; property: "opacity"; to: 0; duration: dur }
+ NumberAnimation { target: s1; property: "opacity"; to: 0; duration: dur }
+ }
+ PropertyAction { target: s1; property: "y"; value: -128}
+ PropertyAction { target: s1; property: "opacity"; value: 1}
+ NumberAnimation { target: s1; property: "y"; from: -96; to: 0; duration: dur * 2}
+ }
+}
diff --git a/experimental/qt5-intro-android/samegame/content/MenuEmitter.qml b/experimental/qt5-intro-android/samegame/content/MenuEmitter.qml
new file mode 100644
index 0000000..16c7660
--- /dev/null
+++ b/experimental/qt5-intro-android/samegame/content/MenuEmitter.qml
@@ -0,0 +1,53 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+** of its contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.0
+import QtQuick.Particles 2.0
+
+Emitter {
+ anchors.fill: parent
+ velocity: AngleDirection{angleVariation: 360; magnitude: 140; magnitudeVariation: 40}
+ enabled: false;
+ lifeSpan: 500;
+ emitRate: 1
+ size: 28
+ endSize: 14
+ group: "yellow"
+}
diff --git a/experimental/qt5-intro-android/samegame/content/PaintEmitter.qml b/experimental/qt5-intro-android/samegame/content/PaintEmitter.qml
new file mode 100644
index 0000000..4a67c4a
--- /dev/null
+++ b/experimental/qt5-intro-android/samegame/content/PaintEmitter.qml
@@ -0,0 +1,98 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+** of its contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.0
+import QtQuick.Particles 2.0
+import "../settings.js" as Settings
+
+Emitter {
+ property Item block: parent
+ anchors.fill: parent
+ shape: EllipseShape { fill: true }
+ group: {
+ if (block.type == 0){
+ "redspots";
+ } else if (block.type == 1) {
+ "bluespots";
+ } else if (block.type == 2) {
+ "greenspots";
+ } else {
+ "yellowspots";
+ }
+ }
+ size: Settings.blockSize * 2
+ endSize: Settings.blockSize/2
+ lifeSpan: 30000
+ enabled: false
+ emitRate: 60
+ maximumEmitted: 60
+ velocity: PointDirection{ y: 4; yVariation: 4 }
+ /* Possibly better, but dependent on gerrit change,28212
+ property real mainIntensity: 0.8
+ property real subIntensity: 0.1
+ property real colorVariation: 0.005
+ onEmitParticles: {//One group, many colors, for better stacking
+ for (var i=0; i<particles.length; i++) {
+ var particle = particles[i];
+ if (block.type == 0) {
+ particle.red = mainIntensity + (Math.random() * colorVariation * 2 - colorVariation);
+ particle.green = subIntensity + (Math.random() * colorVariation * 2 - colorVariation);
+ particle.blue = subIntensity + (Math.random() * colorVariation * 2 - colorVariation);
+ } else if (block.type == 1) {
+ particle.red = subIntensity + (Math.random() * colorVariation * 2 - colorVariation);
+ particle.green = subIntensity + (Math.random() * colorVariation * 2 - colorVariation);
+ particle.blue = mainIntensity + (Math.random() * colorVariation * 2 - colorVariation);
+ } else if (block.type == 2) {
+ particle.red = subIntensity + (Math.random() * colorVariation * 2 - colorVariation);
+ particle.green = mainIntensity + (Math.random() * colorVariation * 2 - colorVariation);
+ particle.blue = subIntensity + (Math.random() * colorVariation * 2 - colorVariation);
+ } else if (block.type == 3) {
+ particle.red = mainIntensity + (Math.random() * colorVariation * 2 - colorVariation);
+ particle.green = mainIntensity + (Math.random() * colorVariation * 2 - colorVariation);
+ particle.blue = subIntensity + (Math.random() * colorVariation * 2 - colorVariation);
+ } else {
+ particle.red = mainIntensity + (Math.random() * colorVariation * 2 - colorVariation);
+ particle.green = mainIntensity + (Math.random() * colorVariation * 2 - colorVariation);
+ particle.blue = mainIntensity + (Math.random() * colorVariation * 2 - colorVariation);
+ }
+ }
+ }
+ */
+}
diff --git a/experimental/qt5-intro-android/samegame/content/PrimaryPack.qml b/experimental/qt5-intro-android/samegame/content/PrimaryPack.qml
new file mode 100644
index 0000000..278ed0e
--- /dev/null
+++ b/experimental/qt5-intro-android/samegame/content/PrimaryPack.qml
@@ -0,0 +1,122 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+** of its contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+
+import QtQuick 2.0
+import QtQuick.Particles 2.0
+
+Item {
+ id: container
+ property ParticleSystem particleSystem
+ property GameArea gameArea
+ onGameAreaChanged: bgstacker.parent = gameArea;//Move to direct child of game canvas
+ Item {
+ id: bgstacker
+ z: 0
+ ImageParticle {
+ groups: ["yellowspots"]
+ color: Qt.darker("yellow");//Actually want desaturated...
+ system: particleSystem
+ source: "gfx/particle-paint.png"
+ colorVariation: 0.2
+ alpha: 0.2
+ entryEffect: ImageParticle.None
+ }
+ ImageParticle {
+ groups: ["redspots"]
+ system: particleSystem
+ color: Qt.darker("red");//Actually want desaturated...
+ source: "gfx/particle-paint.png"
+ colorVariation: 0.2
+ alpha: 0.2
+ entryEffect: ImageParticle.None
+ }
+ ImageParticle {
+ groups: ["greenspots"]
+ system: particleSystem
+ color: Qt.darker("green");//Actually want desaturated...
+ source: "gfx/particle-paint.png"
+ colorVariation: 0.2
+ alpha: 0.2
+ entryEffect: ImageParticle.None
+ }
+ ImageParticle {
+ groups: ["bluespots"]
+ system: particleSystem
+ color: Qt.darker("blue");//Actually want desaturated...
+ source: "gfx/particle-paint.png"
+ colorVariation: 0.2
+ alpha: 0.2
+ entryEffect: ImageParticle.None
+ }
+ }
+ ImageParticle {
+ groups: ["yellow"]
+ system: particleSystem
+ color: Qt.darker("yellow");//Actually want desaturated...
+ source: "gfx/particle-brick.png"
+ colorVariation: 0.4
+ alpha: 0.1
+ }
+ ImageParticle {
+ groups: ["red"]
+ system: particleSystem
+ color: Qt.darker("red");//Actually want desaturated...
+ source: "gfx/particle-brick.png"
+ colorVariation: 0.4
+ alpha: 0.1
+ }
+ ImageParticle {
+ groups: ["green"]
+ system: particleSystem
+ color: Qt.darker("green");//Actually want desaturated...
+ source: "gfx/particle-brick.png"
+ colorVariation: 0.4
+ alpha: 0.1
+ }
+ ImageParticle {
+ groups: ["blue"]
+ system: particleSystem
+ color: Qt.darker("blue");//Actually want desaturated...
+ source: "gfx/particle-brick.png"
+ colorVariation: 0.4
+ alpha: 0.1
+ }
+}
diff --git a/experimental/qt5-intro-android/samegame/content/PuzzleBlock.qml b/experimental/qt5-intro-android/samegame/content/PuzzleBlock.qml
new file mode 100644
index 0000000..8a0e725
--- /dev/null
+++ b/experimental/qt5-intro-android/samegame/content/PuzzleBlock.qml
@@ -0,0 +1,111 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+** of its contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.0
+import QtQuick.Particles 2.0
+
+Item {
+ id: block
+ property bool dying: false
+ property bool spawned: false
+ property int type: 0
+ property ParticleSystem particleSystem
+
+ Behavior on x {
+ enabled: spawned;
+ NumberAnimation{ easing.type: Easing.OutBounce }
+ }
+ Behavior on y {
+ NumberAnimation{ easing.type: Easing.InQuad }
+ }
+
+ Image {
+ id: img
+ source: {
+ if (type == 0){
+ "gfx/red-puzzle.png";
+ } else if (type == 1) {
+ "gfx/blue-puzzle.png";
+ } else if (type == 2) {
+ "gfx/green-puzzle.png";
+ } else {
+ "gfx/yellow-puzzle.png";
+ }
+ }
+ opacity: 0
+ Behavior on opacity { NumberAnimation { duration: 200 } }
+ anchors.centerIn: parent
+ anchors.verticalCenterOffset: -4
+ anchors.horizontalCenterOffset: 4
+ }
+
+ //Foreground particles
+ BlockEmitter {
+ id: particles
+ system: particleSystem
+ group: {
+ if (type == 0){
+ "red";
+ } else if (type == 1) {
+ "blue";
+ } else if (type == 2) {
+ "green";
+ } else {
+ "yellow";
+ }
+ }
+ anchors.fill: parent
+ }
+
+ states: [
+ State {
+ name: "AliveState"; when: spawned == true && dying == false
+ PropertyChanges { target: img; opacity: 1 }
+ },
+
+ State {
+ name: "DeathState"; when: dying == true
+ PropertyChanges { target: img; scale: 2 }
+ StateChangeScript { script: particles.pulse(200); }
+ PropertyChanges { target: img; opacity: 0 }
+ StateChangeScript { script: block.destroy(1000); }
+ }
+ ]
+}
diff --git a/experimental/qt5-intro-android/samegame/content/SamegameText.qml b/experimental/qt5-intro-android/samegame/content/SamegameText.qml
new file mode 100644
index 0000000..28c85f9
--- /dev/null
+++ b/experimental/qt5-intro-android/samegame/content/SamegameText.qml
@@ -0,0 +1,49 @@
+/***************************************************************************
+**
+** Copyright (C) 2012 Research In Motion
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+** of its contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.0
+import "../settings.js" as Settings
+
+Text {
+ font.pixelSize: Settings.fontPixelSize;
+ color: "white";
+ textFormat: Text.StyledText;
+ Behavior on opacity { NumberAnimation {} }
+}
diff --git a/experimental/qt5-intro-android/samegame/content/SimpleBlock.qml b/experimental/qt5-intro-android/samegame/content/SimpleBlock.qml
new file mode 100644
index 0000000..22a1fa3
--- /dev/null
+++ b/experimental/qt5-intro-android/samegame/content/SimpleBlock.qml
@@ -0,0 +1,108 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+** of its contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.0
+import QtQuick.Particles 2.0
+
+Item {
+ id: block
+ property bool dying: false
+ property bool spawned: false
+ property int type: 0
+ property ParticleSystem particleSystem
+
+ Behavior on x {
+ enabled: spawned;
+ SpringAnimation{ spring: 2; damping: 0.2 }
+ }
+ Behavior on y {
+ SpringAnimation{ spring: 2; damping: 0.2 }
+ }
+
+ Image {
+ id: img
+ source: {
+ if (type == 0){
+ "gfx/red.png";
+ } else if (type == 1) {
+ "gfx/blue.png";
+ } else if (type == 2) {
+ "gfx/green.png";
+ } else {
+ "gfx/yellow.png";
+ }
+ }
+ opacity: 0
+ Behavior on opacity { NumberAnimation { duration: 200 } }
+ anchors.fill: parent
+ }
+
+ //Foreground particles
+ BlockEmitter {
+ id: particles
+ system: particleSystem
+ group: {
+ if (type == 0){
+ "red";
+ } else if (type == 1) {
+ "blue";
+ } else if (type == 2) {
+ "green";
+ } else {
+ "yellow";
+ }
+ }
+ anchors.fill: parent
+ }
+
+ states: [
+ State {
+ name: "AliveState"; when: spawned == true && dying == false
+ PropertyChanges { target: img; opacity: 1 }
+ },
+
+ State {
+ name: "DeathState"; when: dying == true
+ StateChangeScript { script: {particleSystem.paused = false; particles.pulse(100); } }
+ PropertyChanges { target: img; opacity: 0 }
+ StateChangeScript { script: block.destroy(1000); }
+ }
+ ]
+}
diff --git a/experimental/qt5-intro-android/samegame/content/SmokeText.qml b/experimental/qt5-intro-android/samegame/content/SmokeText.qml
new file mode 100644
index 0000000..73d9ae4
--- /dev/null
+++ b/experimental/qt5-intro-android/samegame/content/SmokeText.qml
@@ -0,0 +1,83 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+** of its contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.0
+import QtQuick.Particles 2.0
+
+Item {
+ z: 10
+ property alias source: img.source
+ property alias system: emitter.system
+ property int playerNum: 1
+ function play() {
+ anim.running = true;
+ }
+ anchors.centerIn: parent
+ Image {
+ opacity: 0
+ id: img
+ anchors.centerIn: parent
+ rotation: playerNum == 1 ? -8 : -5
+ Emitter {
+ id: emitter
+ group: "smoke"
+ anchors.fill: parent
+ shape: MaskShape { source: img.source }
+ enabled: false
+ emitRate: 1000
+ lifeSpan: 600
+ size: 64
+ endSize: 32
+ velocity: AngleDirection { angleVariation: 360; magnitudeVariation: 160 }
+ }
+ }
+ SequentialAnimation {
+ id: anim
+ running: false
+ PauseAnimation { duration: 500}
+ ParallelAnimation {
+ NumberAnimation { target: img; property: "opacity"; from: 0.1; to: 1.0 }
+ NumberAnimation { target: img; property: "scale"; from: 0.1; to: 1.0 }
+ }
+ PauseAnimation { duration: 250}
+ ScriptAction { script: emitter.pulse(100); }
+ NumberAnimation { target: img; property: "opacity"; from: 1.0; to: 0.0 }
+ }
+}
diff --git a/experimental/qt5-intro-android/samegame/content/gfx/background-puzzle.png b/experimental/qt5-intro-android/samegame/content/gfx/background-puzzle.png
new file mode 100644
index 0000000..c2eca5f
--- /dev/null
+++ b/experimental/qt5-intro-android/samegame/content/gfx/background-puzzle.png
Binary files differ
diff --git a/experimental/qt5-intro-android/samegame/content/gfx/background.png b/experimental/qt5-intro-android/samegame/content/gfx/background.png
new file mode 100644
index 0000000..60f57b6
--- /dev/null
+++ b/experimental/qt5-intro-android/samegame/content/gfx/background.png
Binary files differ
diff --git a/experimental/qt5-intro-android/samegame/content/gfx/bar.png b/experimental/qt5-intro-android/samegame/content/gfx/bar.png
new file mode 100644
index 0000000..4953cd6
--- /dev/null
+++ b/experimental/qt5-intro-android/samegame/content/gfx/bar.png
Binary files differ
diff --git a/experimental/qt5-intro-android/samegame/content/gfx/blue-puzzle.png b/experimental/qt5-intro-android/samegame/content/gfx/blue-puzzle.png
new file mode 100644
index 0000000..e550d59
--- /dev/null
+++ b/experimental/qt5-intro-android/samegame/content/gfx/blue-puzzle.png
Binary files differ
diff --git a/experimental/qt5-intro-android/samegame/content/gfx/blue.png b/experimental/qt5-intro-android/samegame/content/gfx/blue.png
new file mode 100644
index 0000000..b8161c0
--- /dev/null
+++ b/experimental/qt5-intro-android/samegame/content/gfx/blue.png
Binary files differ
diff --git a/experimental/qt5-intro-android/samegame/content/gfx/bubble-highscore.png b/experimental/qt5-intro-android/samegame/content/gfx/bubble-highscore.png
new file mode 100644
index 0000000..c4e38df
--- /dev/null
+++ b/experimental/qt5-intro-android/samegame/content/gfx/bubble-highscore.png
Binary files differ
diff --git a/experimental/qt5-intro-android/samegame/content/gfx/bubble-puzzle.png b/experimental/qt5-intro-android/samegame/content/gfx/bubble-puzzle.png
new file mode 100644
index 0000000..278556b
--- /dev/null
+++ b/experimental/qt5-intro-android/samegame/content/gfx/bubble-puzzle.png
Binary files differ
diff --git a/experimental/qt5-intro-android/samegame/content/gfx/but-game-1.png b/experimental/qt5-intro-android/samegame/content/gfx/but-game-1.png
new file mode 100644
index 0000000..3343b7f
--- /dev/null
+++ b/experimental/qt5-intro-android/samegame/content/gfx/but-game-1.png
Binary files differ
diff --git a/experimental/qt5-intro-android/samegame/content/gfx/but-game-2.png b/experimental/qt5-intro-android/samegame/content/gfx/but-game-2.png
new file mode 100644
index 0000000..afba106
--- /dev/null
+++ b/experimental/qt5-intro-android/samegame/content/gfx/but-game-2.png
Binary files differ
diff --git a/experimental/qt5-intro-android/samegame/content/gfx/but-game-3.png b/experimental/qt5-intro-android/samegame/content/gfx/but-game-3.png
new file mode 100644
index 0000000..adea77a
--- /dev/null
+++ b/experimental/qt5-intro-android/samegame/content/gfx/but-game-3.png
Binary files differ
diff --git a/experimental/qt5-intro-android/samegame/content/gfx/but-game-4.png b/experimental/qt5-intro-android/samegame/content/gfx/but-game-4.png
new file mode 100644
index 0000000..18c922b
--- /dev/null
+++ b/experimental/qt5-intro-android/samegame/content/gfx/but-game-4.png
Binary files differ
diff --git a/experimental/qt5-intro-android/samegame/content/gfx/but-game-new.png b/experimental/qt5-intro-android/samegame/content/gfx/but-game-new.png
new file mode 100644
index 0000000..257e182
--- /dev/null
+++ b/experimental/qt5-intro-android/samegame/content/gfx/but-game-new.png
Binary files differ
diff --git a/experimental/qt5-intro-android/samegame/content/gfx/but-menu.png b/experimental/qt5-intro-android/samegame/content/gfx/but-menu.png
new file mode 100644
index 0000000..8440e87
--- /dev/null
+++ b/experimental/qt5-intro-android/samegame/content/gfx/but-menu.png
Binary files differ
diff --git a/experimental/qt5-intro-android/samegame/content/gfx/but-puzzle-next.png b/experimental/qt5-intro-android/samegame/content/gfx/but-puzzle-next.png
new file mode 100644
index 0000000..7e3ed41
--- /dev/null
+++ b/experimental/qt5-intro-android/samegame/content/gfx/but-puzzle-next.png
Binary files differ
diff --git a/experimental/qt5-intro-android/samegame/content/gfx/but-quit.png b/experimental/qt5-intro-android/samegame/content/gfx/but-quit.png
new file mode 100644
index 0000000..95c77ce
--- /dev/null
+++ b/experimental/qt5-intro-android/samegame/content/gfx/but-quit.png
Binary files differ
diff --git a/experimental/qt5-intro-android/samegame/content/gfx/green-puzzle.png b/experimental/qt5-intro-android/samegame/content/gfx/green-puzzle.png
new file mode 100644
index 0000000..581f76f
--- /dev/null
+++ b/experimental/qt5-intro-android/samegame/content/gfx/green-puzzle.png
Binary files differ
diff --git a/experimental/qt5-intro-android/samegame/content/gfx/green.png b/experimental/qt5-intro-android/samegame/content/gfx/green.png
new file mode 100644
index 0000000..da4cca5
--- /dev/null
+++ b/experimental/qt5-intro-android/samegame/content/gfx/green.png
Binary files differ
diff --git a/experimental/qt5-intro-android/samegame/content/gfx/icon-fail.png b/experimental/qt5-intro-android/samegame/content/gfx/icon-fail.png
new file mode 100644
index 0000000..4072611
--- /dev/null
+++ b/experimental/qt5-intro-android/samegame/content/gfx/icon-fail.png
Binary files differ
diff --git a/experimental/qt5-intro-android/samegame/content/gfx/icon-ok.png b/experimental/qt5-intro-android/samegame/content/gfx/icon-ok.png
new file mode 100644
index 0000000..15a8442
--- /dev/null
+++ b/experimental/qt5-intro-android/samegame/content/gfx/icon-ok.png
Binary files differ
diff --git a/experimental/qt5-intro-android/samegame/content/gfx/icon-time.png b/experimental/qt5-intro-android/samegame/content/gfx/icon-time.png
new file mode 100644
index 0000000..9490e49
--- /dev/null
+++ b/experimental/qt5-intro-android/samegame/content/gfx/icon-time.png
Binary files differ
diff --git a/experimental/qt5-intro-android/samegame/content/gfx/logo-a.png b/experimental/qt5-intro-android/samegame/content/gfx/logo-a.png
new file mode 100644
index 0000000..20c20ba
--- /dev/null
+++ b/experimental/qt5-intro-android/samegame/content/gfx/logo-a.png
Binary files differ
diff --git a/experimental/qt5-intro-android/samegame/content/gfx/logo-e.png b/experimental/qt5-intro-android/samegame/content/gfx/logo-e.png
new file mode 100644
index 0000000..dd663f1
--- /dev/null
+++ b/experimental/qt5-intro-android/samegame/content/gfx/logo-e.png
Binary files differ
diff --git a/experimental/qt5-intro-android/samegame/content/gfx/logo-g.png b/experimental/qt5-intro-android/samegame/content/gfx/logo-g.png
new file mode 100644
index 0000000..a319bf9
--- /dev/null
+++ b/experimental/qt5-intro-android/samegame/content/gfx/logo-g.png
Binary files differ
diff --git a/experimental/qt5-intro-android/samegame/content/gfx/logo-m.png b/experimental/qt5-intro-android/samegame/content/gfx/logo-m.png
new file mode 100644
index 0000000..6a029b3
--- /dev/null
+++ b/experimental/qt5-intro-android/samegame/content/gfx/logo-m.png
Binary files differ
diff --git a/experimental/qt5-intro-android/samegame/content/gfx/logo-s.png b/experimental/qt5-intro-android/samegame/content/gfx/logo-s.png
new file mode 100644
index 0000000..963b175
--- /dev/null
+++ b/experimental/qt5-intro-android/samegame/content/gfx/logo-s.png
Binary files differ
diff --git a/experimental/qt5-intro-android/samegame/content/gfx/logo.png b/experimental/qt5-intro-android/samegame/content/gfx/logo.png
new file mode 100644
index 0000000..e900edd
--- /dev/null
+++ b/experimental/qt5-intro-android/samegame/content/gfx/logo.png
Binary files differ
diff --git a/experimental/qt5-intro-android/samegame/content/gfx/particle-brick.png b/experimental/qt5-intro-android/samegame/content/gfx/particle-brick.png
new file mode 100644
index 0000000..5c83896
--- /dev/null
+++ b/experimental/qt5-intro-android/samegame/content/gfx/particle-brick.png
Binary files differ
diff --git a/experimental/qt5-intro-android/samegame/content/gfx/particle-paint.png b/experimental/qt5-intro-android/samegame/content/gfx/particle-paint.png
new file mode 100644
index 0000000..9bd0a2a
--- /dev/null
+++ b/experimental/qt5-intro-android/samegame/content/gfx/particle-paint.png
Binary files differ
diff --git a/experimental/qt5-intro-android/samegame/content/gfx/particle-smoke.png b/experimental/qt5-intro-android/samegame/content/gfx/particle-smoke.png
new file mode 100644
index 0000000..b27f954
--- /dev/null
+++ b/experimental/qt5-intro-android/samegame/content/gfx/particle-smoke.png
Binary files differ
diff --git a/experimental/qt5-intro-android/samegame/content/gfx/red-puzzle.png b/experimental/qt5-intro-android/samegame/content/gfx/red-puzzle.png
new file mode 100644
index 0000000..9ceb17e
--- /dev/null
+++ b/experimental/qt5-intro-android/samegame/content/gfx/red-puzzle.png
Binary files differ
diff --git a/experimental/qt5-intro-android/samegame/content/gfx/red.png b/experimental/qt5-intro-android/samegame/content/gfx/red.png
new file mode 100644
index 0000000..681810f
--- /dev/null
+++ b/experimental/qt5-intro-android/samegame/content/gfx/red.png
Binary files differ
diff --git a/experimental/qt5-intro-android/samegame/content/gfx/text-highscore-new.png b/experimental/qt5-intro-android/samegame/content/gfx/text-highscore-new.png
new file mode 100644
index 0000000..50f7fcd
--- /dev/null
+++ b/experimental/qt5-intro-android/samegame/content/gfx/text-highscore-new.png
Binary files differ
diff --git a/experimental/qt5-intro-android/samegame/content/gfx/text-highscore.png b/experimental/qt5-intro-android/samegame/content/gfx/text-highscore.png
new file mode 100644
index 0000000..7198c27
--- /dev/null
+++ b/experimental/qt5-intro-android/samegame/content/gfx/text-highscore.png
Binary files differ
diff --git a/experimental/qt5-intro-android/samegame/content/gfx/text-no-winner.png b/experimental/qt5-intro-android/samegame/content/gfx/text-no-winner.png
new file mode 100644
index 0000000..b4a6685
--- /dev/null
+++ b/experimental/qt5-intro-android/samegame/content/gfx/text-no-winner.png
Binary files differ
diff --git a/experimental/qt5-intro-android/samegame/content/gfx/text-p1-go.png b/experimental/qt5-intro-android/samegame/content/gfx/text-p1-go.png
new file mode 100644
index 0000000..c7bd2a5
--- /dev/null
+++ b/experimental/qt5-intro-android/samegame/content/gfx/text-p1-go.png
Binary files differ
diff --git a/experimental/qt5-intro-android/samegame/content/gfx/text-p1-won.png b/experimental/qt5-intro-android/samegame/content/gfx/text-p1-won.png
new file mode 100644
index 0000000..41c2eb7
--- /dev/null
+++ b/experimental/qt5-intro-android/samegame/content/gfx/text-p1-won.png
Binary files differ
diff --git a/experimental/qt5-intro-android/samegame/content/gfx/text-p1.png b/experimental/qt5-intro-android/samegame/content/gfx/text-p1.png
new file mode 100644
index 0000000..b59c87b
--- /dev/null
+++ b/experimental/qt5-intro-android/samegame/content/gfx/text-p1.png
Binary files differ
diff --git a/experimental/qt5-intro-android/samegame/content/gfx/text-p2-go.png b/experimental/qt5-intro-android/samegame/content/gfx/text-p2-go.png
new file mode 100644
index 0000000..f03cd93
--- /dev/null
+++ b/experimental/qt5-intro-android/samegame/content/gfx/text-p2-go.png
Binary files differ
diff --git a/experimental/qt5-intro-android/samegame/content/gfx/text-p2-won.png b/experimental/qt5-intro-android/samegame/content/gfx/text-p2-won.png
new file mode 100644
index 0000000..116b7f2
--- /dev/null
+++ b/experimental/qt5-intro-android/samegame/content/gfx/text-p2-won.png
Binary files differ
diff --git a/experimental/qt5-intro-android/samegame/content/gfx/text-p2.png b/experimental/qt5-intro-android/samegame/content/gfx/text-p2.png
new file mode 100644
index 0000000..d4f2bc7
--- /dev/null
+++ b/experimental/qt5-intro-android/samegame/content/gfx/text-p2.png
Binary files differ
diff --git a/experimental/qt5-intro-android/samegame/content/gfx/yellow-puzzle.png b/experimental/qt5-intro-android/samegame/content/gfx/yellow-puzzle.png
new file mode 100644
index 0000000..66044c8
--- /dev/null
+++ b/experimental/qt5-intro-android/samegame/content/gfx/yellow-puzzle.png
Binary files differ
diff --git a/experimental/qt5-intro-android/samegame/content/gfx/yellow.png b/experimental/qt5-intro-android/samegame/content/gfx/yellow.png
new file mode 100644
index 0000000..6bc5d38
--- /dev/null
+++ b/experimental/qt5-intro-android/samegame/content/gfx/yellow.png
Binary files differ
diff --git a/experimental/qt5-intro-android/samegame/content/levels/TemplateBase.qml b/experimental/qt5-intro-android/samegame/content/levels/TemplateBase.qml
new file mode 100644
index 0000000..f0832d4
--- /dev/null
+++ b/experimental/qt5-intro-android/samegame/content/levels/TemplateBase.qml
@@ -0,0 +1,70 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+** of its contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.0
+
+Rectangle{
+ id: control
+ property int scoreTarget: -1
+ property int timeTarget: -1
+ property int moveTarget: -1
+ property bool mustClear: true
+ property string goalText: "Clear the level..."
+
+ property var startingGrid //If this isn't an array of ints, we will refuse to load the level.
+ /* Ints are 0-4. If not enough ints are there it will be prepadded with 0s to fill the grid
+ (which ruins everything if you have the wrong number of rows).
+ 0 - No block
+ 1 - Red
+ 2 - Blue
+ 3 - Green
+ 4 - Yellow
+ Ideas for future colors, but not supported in this version:
+ 5 - Purple
+ 6 - Cyan
+ 7 - Gray
+ 8 - Black
+ 9 - White
+ */
+
+ width: 320
+ height: 416
+ color: "white" //TODO: Theme support for both setting themes per level, and seeing it in the control!
+}
diff --git a/experimental/qt5-intro-android/samegame/content/levels/level0.qml b/experimental/qt5-intro-android/samegame/content/levels/level0.qml
new file mode 100644
index 0000000..5d2fa4f
--- /dev/null
+++ b/experimental/qt5-intro-android/samegame/content/levels/level0.qml
@@ -0,0 +1,59 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+** of its contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.0
+
+TemplateBase{
+ moveTarget: 3
+ goalText: "1 of 10<br><br>Clear in three moves..."
+ startingGrid: [ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 1 , 1 ,
+ 0 , 0 , 0 , 0 , 0 , 1 , 1 , 2 , 1 , 1 ,
+ 0 , 0 , 0 , 1 , 1 , 3 , 3 , 3 , 3 , 3 ,
+ 0 , 1 , 1 , 3 , 3 , 3 , 1 , 3 , 1 , 1 ,
+ 1 , 2 , 3 , 3 , 1 , 1 , 3 , 3 , 3 , 3 ,
+ 1 , 3 , 3 , 2 , 3 , 3 , 3 , 3 , 1 , 1 ,
+ 1 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 ]
+}
diff --git a/experimental/qt5-intro-android/samegame/content/levels/level1.qml b/experimental/qt5-intro-android/samegame/content/levels/level1.qml
new file mode 100644
index 0000000..4bb15cb
--- /dev/null
+++ b/experimental/qt5-intro-android/samegame/content/levels/level1.qml
@@ -0,0 +1,59 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+** of its contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.0
+
+TemplateBase{
+ timeTarget: 10
+ goalText: "2 of 10<br><br>Clear in 10 seconds..."
+ startingGrid: [ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 1 , 3 , 3 , 3 , 1 , 1 , 1 , 1 , 2 , 2 ,
+ 1 , 2 , 3 , 3 , 3 , 1 , 1 , 1 , 1 , 2 ,
+ 2 , 2 , 1 , 3 , 3 , 3 , 1 , 1 , 1 , 2 ,
+ 2 , 1 , 1 , 1 , 3 , 3 , 3 , 1 , 2 , 2 ,
+ 1 , 1 , 1 , 1 , 1 , 3 , 3 , 3 , 2 , 1 ]
+}
diff --git a/experimental/qt5-intro-android/samegame/content/levels/level2.qml b/experimental/qt5-intro-android/samegame/content/levels/level2.qml
new file mode 100644
index 0000000..a319479
--- /dev/null
+++ b/experimental/qt5-intro-android/samegame/content/levels/level2.qml
@@ -0,0 +1,61 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+** of its contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.0
+
+TemplateBase{
+ scoreTarget: 1200
+ timeTarget: 60
+ goalText: "3 of 10<br><br>Score over 1200 points in one minute..."
+ mustClear: false
+ startingGrid: [ 3 , 1 , 2 , 1 , 1 , 2 , 1 , 1 , 3 , 3 ,
+ 1 , 3 , 3 , 2 , 3 , 3 , 1 , 1 , 3 , 1 ,
+ 3 , 1 , 3 , 3 , 2 , 3 , 3 , 3 , 1 , 2 ,
+ 3 , 2 , 2 , 1 , 3 , 3 , 2 , 1 , 1 , 2 ,
+ 3 , 1 , 2 , 2 , 2 , 2 , 2 , 1 , 3 , 1 ,
+ 2 , 3 , 1 , 2 , 2 , 3 , 3 , 1 , 3 , 2 ,
+ 3 , 2 , 1 , 1 , 3 , 3 , 3 , 2 , 2 , 1 ,
+ 1 , 2 , 2 , 3 , 2 , 3 , 3 , 3 , 1 , 1 ,
+ 1 , 3 , 3 , 3 , 1 , 2 , 2 , 3 , 3 , 1 ,
+ 3 , 3 , 2 , 1 , 2 , 2 , 1 , 1 , 1 , 3 ,
+ 2 , 1 , 3 , 2 , 3 , 2 , 3 , 2 , 2 , 1 ,
+ 1 , 3 , 1 , 2 , 1 , 2 , 3 , 1 , 2 , 2 ,
+ 1 , 2 , 2 , 2 , 1 , 1 , 2 , 3 , 1 , 2 ]
+}
diff --git a/experimental/qt5-intro-android/samegame/content/levels/level3.qml b/experimental/qt5-intro-android/samegame/content/levels/level3.qml
new file mode 100644
index 0000000..43e82d7
--- /dev/null
+++ b/experimental/qt5-intro-android/samegame/content/levels/level3.qml
@@ -0,0 +1,60 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+** of its contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.0
+
+TemplateBase{
+ scoreTarget: 3000
+ timeTarget: 60
+ goalText: "4 of 10<br>Clear the board with over 3000 points in under a minute..."
+ startingGrid: [ 3 , 3 , 1 , 1 , 1 , 2 , 2 , 4 , 3 , 3 ,
+ 4 , 3 , 1 , 4 , 2 , 2 , 2 , 4 , 3 , 4 ,
+ 4 , 3 , 3 , 4 , 1 , 1 , 3 , 3 , 4 , 4 ,
+ 3 , 3 , 3 , 3 , 3 , 1 , 3 , 2 , 2 , 4 ,
+ 4 , 4 , 3 , 4 , 3 , 1 , 4 , 4 , 4 , 4 ,
+ 4 , 4 , 3 , 4 , 1 , 1 , 4 , 4 , 3 , 3 ,
+ 4 , 2 , 2 , 2 , 2 , 2 , 4 , 4 , 4 , 1 ,
+ 4 , 4 , 2 , 4 , 2 , 2 , 1 , 1 , 1 , 1 ,
+ 4 , 4 , 2 , 4 , 2 , 2 , 1 , 4 , 4 , 1 ,
+ 4 , 1 , 1 , 4 , 3 , 3 , 4 , 2 , 4 , 1 ,
+ 4 , 1 , 1 , 2 , 3 , 3 , 4 , 2 , 2 , 1 ,
+ 1 , 1 , 2 , 2 , 2 , 3 , 3 , 3 , 2 , 1 ,
+ 4 , 1 , 1 , 2 , 2 , 3 , 4 , 3 , 4 , 4 ]
+}
diff --git a/experimental/qt5-intro-android/samegame/content/levels/level4.qml b/experimental/qt5-intro-android/samegame/content/levels/level4.qml
new file mode 100644
index 0000000..46ad42f
--- /dev/null
+++ b/experimental/qt5-intro-android/samegame/content/levels/level4.qml
@@ -0,0 +1,58 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+** of its contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.0
+
+TemplateBase{
+ goalText: "5 of 10<br><br>Clear the level..."
+ startingGrid: [ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 1 , 3 , 2 , 1 , 1 , 1 , 1 , 3 , 2 , 3 ,
+ 1 , 2 , 3 , 1 , 3 , 2 , 2 , 1 , 1 , 2 ,
+ 3 , 2 , 2 , 2 , 1 , 1 , 1 , 1 , 3 , 3 ,
+ 2 , 1 , 1 , 3 , 2 , 1 , 1 , 2 , 1 , 3 ,
+ 1 , 3 , 3 , 1 , 2 , 1 , 2 , 1 , 3 , 3 ,
+ 1 , 3 , 2 , 2 , 2 , 1 , 1 , 3 , 2 , 3 ,
+ 1 , 1 , 3 , 2 , 3 , 3 , 2 , 1 , 1 , 1 ,
+ 1 , 2 , 2 , 3 , 2 , 2 , 1 , 3 , 1 , 3 ]
+}
diff --git a/experimental/qt5-intro-android/samegame/content/levels/level5.qml b/experimental/qt5-intro-android/samegame/content/levels/level5.qml
new file mode 100644
index 0000000..3716264
--- /dev/null
+++ b/experimental/qt5-intro-android/samegame/content/levels/level5.qml
@@ -0,0 +1,59 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+** of its contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.0
+
+TemplateBase{
+ moveTarget: 4
+ goalText: "6 of 10<br><br>Clear in four or less moves..."
+ startingGrid: [ 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 ,
+ 4 , 2 , 2 , 2 , 4 , 3 , 3 , 3 , 4 , 4 ,
+ 4 , 2 , 4 , 4 , 4 , 3 , 2 , 3 , 4 , 4 ,
+ 4 , 2 , 2 , 2 , 4 , 3 , 3 , 3 , 4 , 4 ,
+ 4 , 4 , 4 , 2 , 4 , 3 , 4 , 3 , 4 , 4 ,
+ 4 , 2 , 2 , 2 , 4 , 3 , 4 , 3 , 4 , 4 ,
+ 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 ,
+ 4 , 3 , 4 , 3 , 4 , 2 , 2 , 2 , 4 , 3 ,
+ 4 , 3 , 3 , 3 , 4 , 2 , 4 , 4 , 4 , 3 ,
+ 4 , 3 , 3 , 3 , 4 , 2 , 2 , 2 , 4 , 3 ,
+ 4 , 3 , 4 , 3 , 4 , 2 , 4 , 4 , 4 , 4 ,
+ 4 , 3 , 4 , 3 , 4 , 2 , 2 , 2 , 4 , 3 ,
+ 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 ]
+}
diff --git a/experimental/qt5-intro-android/samegame/content/levels/level6.qml b/experimental/qt5-intro-android/samegame/content/levels/level6.qml
new file mode 100644
index 0000000..4547b75
--- /dev/null
+++ b/experimental/qt5-intro-android/samegame/content/levels/level6.qml
@@ -0,0 +1,60 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+** of its contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.0
+
+TemplateBase{
+ moveTarget: 20
+ timeTarget: 40
+ goalText: "7 of 10<br><br>Clear with 20 moves in 40 seconds (or better)."
+ startingGrid: [ 1 , 3 , 1 , 1 , 1 , 1 , 2 , 1 , 2 , 2 ,
+ 2 , 1 , 2 , 3 , 3 , 1 , 3 , 1 , 1 , 3 ,
+ 3 , 1 , 1 , 1 , 2 , 2 , 3 , 2 , 3 , 1 ,
+ 1 , 3 , 1 , 1 , 3 , 1 , 1 , 1 , 2 , 3 ,
+ 2 , 1 , 1 , 1 , 3 , 2 , 3 , 3 , 2 , 3 ,
+ 3 , 3 , 3 , 3 , 2 , 2 , 3 , 1 , 3 , 2 ,
+ 2 , 2 , 3 , 2 , 2 , 3 , 2 , 2 , 2 , 2 ,
+ 1 , 2 , 1 , 2 , 1 , 3 , 2 , 3 , 2 , 3 ,
+ 1 , 1 , 2 , 3 , 3 , 3 , 3 , 1 , 1 , 2 ,
+ 3 , 3 , 2 , 2 , 2 , 2 , 3 , 1 , 3 , 1 ,
+ 1 , 2 , 3 , 3 , 3 , 1 , 3 , 2 , 1 , 2 ,
+ 1 , 2 , 1 , 1 , 2 , 3 , 1 , 2 , 1 , 3 ,
+ 3 , 1 , 2 , 2 , 1 , 3 , 3 , 1 , 3 , 2 ]
+}
diff --git a/experimental/qt5-intro-android/samegame/content/levels/level7.qml b/experimental/qt5-intro-android/samegame/content/levels/level7.qml
new file mode 100644
index 0000000..5d71d7c
--- /dev/null
+++ b/experimental/qt5-intro-android/samegame/content/levels/level7.qml
@@ -0,0 +1,58 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+** of its contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.0
+
+TemplateBase{
+ goalText: "8 of 10<br><br>Clear the grid."
+ startingGrid: [ 2 , 4 , 3 , 2 , 3 , 2 , 3 , 3 , 4 , 3 ,
+ 2 , 2 , 3 , 3 , 1 , 4 , 3 , 3 , 3 , 2 ,
+ 1 , 4 , 2 , 3 , 4 , 3 , 3 , 1 , 1 , 1 ,
+ 2 , 1 , 2 , 4 , 4 , 2 , 2 , 3 , 2 , 1 ,
+ 3 , 4 , 4 , 1 , 3 , 2 , 4 , 2 , 1 , 1 ,
+ 2 , 2 , 3 , 1 , 2 , 4 , 1 , 2 , 1 , 2 ,
+ 1 , 2 , 3 , 2 , 4 , 4 , 3 , 1 , 1 , 2 ,
+ 4 , 4 , 2 , 1 , 2 , 4 , 2 , 2 , 4 , 3 ,
+ 4 , 2 , 4 , 1 , 3 , 4 , 1 , 4 , 2 , 4 ,
+ 4 , 3 , 4 , 1 , 4 , 3 , 1 , 3 , 1 , 1 ,
+ 3 , 3 , 2 , 3 , 2 , 4 , 1 , 2 , 4 , 4 ,
+ 3 , 4 , 2 , 2 , 4 , 3 , 4 , 1 , 3 , 2 ,
+ 4 , 3 , 3 , 4 , 2 , 4 , 1 , 2 , 3 , 2 ]
+}
diff --git a/experimental/qt5-intro-android/samegame/content/levels/level8.qml b/experimental/qt5-intro-android/samegame/content/levels/level8.qml
new file mode 100644
index 0000000..9dbb8c2
--- /dev/null
+++ b/experimental/qt5-intro-android/samegame/content/levels/level8.qml
@@ -0,0 +1,59 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+** of its contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.0
+
+TemplateBase{
+ scoreTarget: 1000
+ goalText: "9 of 10<br><br>Score over 1000 points"
+ startingGrid: [ 1 , 4 , 4 , 3 , 2 , 1 , 4 , 2 , 4 , 2 ,
+ 2 , 3 , 4 , 4 , 1 , 1 , 1 , 4 , 4 , 4 ,
+ 1 , 3 , 1 , 2 , 2 , 1 , 2 , 1 , 4 , 2 ,
+ 4 , 3 , 4 , 2 , 1 , 4 , 1 , 2 , 2 , 3 ,
+ 3 , 4 , 2 , 4 , 4 , 3 , 2 , 2 , 2 , 1 ,
+ 4 , 4 , 3 , 2 , 4 , 4 , 2 , 1 , 1 , 1 ,
+ 1 , 2 , 1 , 3 , 4 , 1 , 1 , 3 , 2 , 3 ,
+ 3 , 4 , 2 , 2 , 1 , 3 , 2 , 2 , 4 , 2 ,
+ 2 , 4 , 1 , 2 , 2 , 4 , 3 , 3 , 3 , 1 ,
+ 1 , 2 , 2 , 4 , 1 , 2 , 2 , 3 , 3 , 3 ,
+ 4 , 4 , 1 , 4 , 3 , 1 , 3 , 3 , 3 , 4 ,
+ 1 , 2 , 4 , 1 , 2 , 1 , 1 , 4 , 2 , 1 ,
+ 1 , 2 , 3 , 4 , 2 , 4 , 4 , 2 , 1 , 3 ]
+}
diff --git a/experimental/qt5-intro-android/samegame/content/levels/level9.qml b/experimental/qt5-intro-android/samegame/content/levels/level9.qml
new file mode 100644
index 0000000..4e8bf19
--- /dev/null
+++ b/experimental/qt5-intro-android/samegame/content/levels/level9.qml
@@ -0,0 +1,62 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+** of its contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.0
+
+TemplateBase{
+ scoreTarget: 2000
+ timeTarget: 60
+ moveTarget: 20
+ mustClear: false
+ goalText: "10 of 10<br><br>Score 2000 in one minute with less than 20 moves!"
+ startingGrid: [ 3 , 2 , 3 , 1 , 3 , 3 , 4 , 1 , 3 , 3 ,
+ 2 , 3 , 2 , 1 , 1 , 2 , 2 , 2 , 4 , 1 ,
+ 2 , 4 , 4 , 4 , 3 , 1 , 4 , 4 , 4 , 1 ,
+ 3 , 1 , 3 , 4 , 4 , 2 , 2 , 2 , 2 , 3 ,
+ 2 , 1 , 4 , 4 , 3 , 3 , 1 , 1 , 3 , 2 ,
+ 3 , 2 , 1 , 4 , 3 , 4 , 1 , 3 , 4 , 2 ,
+ 3 , 3 , 1 , 4 , 4 , 4 , 2 , 1 , 2 , 3 ,
+ 2 , 3 , 4 , 3 , 4 , 1 , 1 , 3 , 2 , 4 ,
+ 4 , 4 , 1 , 2 , 4 , 3 , 2 , 2 , 2 , 4 ,
+ 1 , 4 , 2 , 2 , 1 , 1 , 2 , 1 , 1 , 4 ,
+ 1 , 4 , 3 , 3 , 3 , 1 , 3 , 4 , 4 , 2 ,
+ 3 , 4 , 1 , 1 , 2 , 2 , 2 , 3 , 2 , 1 ,
+ 3 , 3 , 4 , 3 , 1 , 1 , 1 , 4 , 4 , 3 ]
+}
diff --git a/experimental/qt5-intro-android/samegame/content/samegame.js b/experimental/qt5-intro-android/samegame/content/samegame.js
new file mode 100755
index 0000000..7b226cb
--- /dev/null
+++ b/experimental/qt5-intro-android/samegame/content/samegame.js
@@ -0,0 +1,581 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+** of its contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+/* This script file handles the game logic */
+.pragma library
+.import QtQuick.LocalStorage 2.0 as Sql
+.import "../settings.js" as Settings
+
+var maxColumn = 10;
+var maxRow = 13;
+var types = 3;
+var maxIndex = maxColumn*maxRow;
+var board = new Array(maxIndex);
+var blockSrc = "Block.qml";
+var gameDuration;
+var component = Qt.createComponent(blockSrc);
+var gameCanvas;
+var betweenTurns = false;
+
+var puzzleLevel = null;
+var puzzlePath = "";
+
+var gameMode = "arcade"; //Set in new game, then tweaks behaviour of other functions
+var gameOver = false;
+
+function changeBlock(src)
+{
+ blockSrc = src;
+ component = Qt.createComponent(blockSrc);
+}
+
+// Index function used instead of a 2D array
+function index(column, row)
+{
+ return column + row * maxColumn;
+}
+
+function timeStr(msecs)
+{
+ var secs = Math.floor(msecs/1000);
+ var m = Math.floor(secs/60);
+ var ret = "" + m + "m " + (secs%60) + "s";
+ return ret;
+}
+
+function cleanUp()
+{
+ if (gameCanvas == undefined)
+ return;
+ // Delete blocks from previous game
+ for (var i = 0; i < maxIndex; i++) {
+ if (board[i] != null)
+ board[i].destroy();
+ board[i] = null;
+ }
+ if (puzzleLevel != null){
+ puzzleLevel.destroy();
+ puzzleLevel = null;
+ }
+ gameCanvas.mode = ""
+}
+
+function startNewGame(gc, mode, map)
+{
+ gameCanvas = gc;
+ if (mode == undefined)
+ gameMode = "arcade";
+ else
+ gameMode = mode;
+ gameOver = false;
+
+ cleanUp();
+
+ gc.gameOver = false;
+ gc.mode = gameMode;
+ // Calculate board size
+ maxColumn = Math.floor(gameCanvas.width/Settings.blockSize);
+ maxRow = Math.floor(gameCanvas.height/Settings.blockSize);
+ maxIndex = maxRow * maxColumn;
+ if (gameMode == "arcade") //Needs to be after board sizing
+ getHighScore();
+
+
+ // Initialize Board
+ board = new Array(maxIndex);
+ gameCanvas.score = 0;
+ gameCanvas.score2 = 0;
+ gameCanvas.moves = 0;
+ gameCanvas.curTurn = 1;
+ if (gameMode == "puzzle")
+ loadMap(map);
+ else//Note that we load them in reverse order for correct visual stacking
+ for (var column = maxColumn - 1; column >= 0; column--)
+ for (var row = maxRow - 1; row >= 0; row--)
+ createBlock(column, row);
+ if (gameMode == "puzzle")
+ getLevelHistory();//Needs to be after map load
+ gameDuration = new Date();
+}
+
+var fillFound; // Set after a floodFill call to the number of blocks found
+var floodBoard; // Set to 1 if the floodFill reaches off that node
+
+// NOTE: Be careful with vars named x,y, as the calling object's x,y are still in scope
+function handleClick(x,y)
+{
+ if (betweenTurns || gameOver || gameCanvas == undefined)
+ return;
+ var column = Math.floor(x/Settings.blockSize);
+ var row = Math.floor(y/Settings.blockSize);
+ if (column >= maxColumn || column < 0 || row >= maxRow || row < 0)
+ return;
+ if (board[index(column, row)] == null)
+ return;
+ // If it's a valid block, remove it and all connected (does nothing if it's not connected)
+ floodFill(column,row, -1);
+ if (fillFound <= 0)
+ return;
+ if (gameMode == "multiplayer" && gameCanvas.curTurn == 2)
+ gameCanvas.score2 += (fillFound - 1) * (fillFound - 1);
+ else
+ gameCanvas.score += (fillFound - 1) * (fillFound - 1);
+ if (gameMode == "multiplayer" && gameCanvas.curTurn == 2)
+ shuffleUp();
+ else
+ shuffleDown();
+ gameCanvas.moves += 1;
+ if (gameMode == "endless")
+ refill();
+ else if (gameMode != "multiplayer")
+ victoryCheck();
+ if (gameMode == "multiplayer" && !gc.gameOver){
+ betweenTurns = true;
+ gameCanvas.swapPlayers();//signal, animate and call turnChange() when ready
+ }
+}
+
+function floodFill(column,row,type)
+{
+ if (board[index(column, row)] == null)
+ return;
+ var first = false;
+ if (type == -1) {
+ first = true;
+ type = board[index(column,row)].type;
+
+ // Flood fill initialization
+ fillFound = 0;
+ floodBoard = new Array(maxIndex);
+ }
+ if (column >= maxColumn || column < 0 || row >= maxRow || row < 0)
+ return;
+ if (floodBoard[index(column, row)] == 1 || (!first && type != board[index(column, row)].type))
+ return;
+ floodBoard[index(column, row)] = 1;
+ floodFill(column + 1, row, type);
+ floodFill(column - 1, row, type);
+ floodFill(column, row + 1, type);
+ floodFill(column, row - 1, type);
+ if (first == true && fillFound == 0)
+ return; // Can't remove single blocks
+ board[index(column, row)].dying = true;
+ board[index(column, row)] = null;
+ fillFound += 1;
+}
+
+function shuffleDown()
+{
+ // Fall down
+ for (var column = 0; column < maxColumn; column++) {
+ var fallDist = 0;
+ for (var row = maxRow - 1; row >= 0; row--) {
+ if (board[index(column,row)] == null) {
+ fallDist += 1;
+ } else {
+ if (fallDist > 0) {
+ var obj = board[index(column, row)];
+ obj.y = (row + fallDist) * Settings.blockSize;
+ board[index(column, row + fallDist)] = obj;
+ board[index(column, row)] = null;
+ }
+ }
+ }
+ }
+ // Fall to the left
+ fallDist = 0;
+ for (column = 0; column < maxColumn; column++) {
+ if (board[index(column, maxRow - 1)] == null) {
+ fallDist += 1;
+ } else {
+ if (fallDist > 0) {
+ for (row = 0; row < maxRow; row++) {
+ obj = board[index(column, row)];
+ if (obj == null)
+ continue;
+ obj.x = (column - fallDist) * Settings.blockSize;
+ board[index(column - fallDist,row)] = obj;
+ board[index(column, row)] = null;
+ }
+ }
+ }
+ }
+}
+
+
+function shuffleUp()
+{
+ // Fall up
+ for (var column = 0; column < maxColumn; column++) {
+ var fallDist = 0;
+ for (var row = 0; row < maxRow; row++) {
+ if (board[index(column,row)] == null) {
+ fallDist += 1;
+ } else {
+ if (fallDist > 0) {
+ var obj = board[index(column, row)];
+ obj.y = (row - fallDist) * Settings.blockSize;
+ board[index(column, row - fallDist)] = obj;
+ board[index(column, row)] = null;
+ }
+ }
+ }
+ }
+ // Fall to the left (or should it be right, so as to be left for P2?)
+ fallDist = 0;
+ for (column = 0; column < maxColumn; column++) {
+ if (board[index(column, 0)] == null) {
+ fallDist += 1;
+ } else {
+ if (fallDist > 0) {
+ for (row = 0; row < maxRow; row++) {
+ obj = board[index(column, row)];
+ if (obj == null)
+ continue;
+ obj.x = (column - fallDist) * Settings.blockSize;
+ board[index(column - fallDist,row)] = obj;
+ board[index(column, row)] = null;
+ }
+ }
+ }
+ }
+}
+
+function turnChange()//called by ui outside
+{
+ betweenTurns = false;
+ if (gameCanvas.curTurn == 1){
+ shuffleUp();
+ gameCanvas.curTurn = 2;
+ victoryCheck();
+ }else{
+ shuffleDown();
+ gameCanvas.curTurn = 1;
+ victoryCheck();
+ }
+}
+
+function refill()
+{
+ for (var column = 0; column < maxColumn; column++) {
+ for (var row = 0; row < maxRow; row++) {
+ if (board[index(column, row)] == null)
+ createBlock(column, row);
+ }
+ }
+}
+
+function victoryCheck()
+{
+ // Awards bonuses for no blocks left
+ var deservesBonus = true;
+ if (board[index(0,maxRow - 1)] != null || board[index(0,0)] != null)
+ deservesBonus = false;
+ // Checks for game over
+ if (deservesBonus){
+ if (gameCanvas.curTurn = 1)
+ gameCanvas.score += 1000;
+ else
+ gameCanvas.score2 += 1000;
+ }
+ gameOver = deservesBonus;
+ if (gameCanvas.curTurn == 1){
+ if (!(floodMoveCheck(0, maxRow - 1, -1)))
+ gameOver = true;
+ }else{
+ if (!(floodMoveCheck(0, 0, -1, true)))
+ gameOver = true;
+ }
+ if (gameMode == "puzzle"){
+ puzzleVictoryCheck(deservesBonus);//Takes it from here
+ return;
+ }
+ if (gameOver) {
+ var winnerScore = Math.max(gameCanvas.score, gameCanvas.score2);
+ if (gameMode == "multiplayer"){
+ gameCanvas.score = winnerScore;
+ saveHighScore(gameCanvas.score2);
+ }
+ saveHighScore(gameCanvas.score);
+ gameDuration = new Date() - gameDuration;
+ gameCanvas.gameOver = true;
+ }
+}
+
+// Only floods up and right, to see if it can find adjacent same-typed blocks
+function floodMoveCheck(column, row, type, goDownInstead)
+{
+ if (column >= maxColumn || column < 0 || row >= maxRow || row < 0)
+ return false;
+ if (board[index(column, row)] == null)
+ return false;
+ var myType = board[index(column, row)].type;
+ if (type == myType)
+ return true;
+ if (goDownInstead)
+ return floodMoveCheck(column + 1, row, myType, goDownInstead) ||
+ floodMoveCheck(column, row + 1, myType, goDownInstead);
+ else
+ return floodMoveCheck(column + 1, row, myType) ||
+ floodMoveCheck(column, row - 1, myType);
+}
+
+function createBlock(column,row,type)
+{
+ // Note that we don't wait for the component to become ready. This will
+ // only work if the block QML is a local file. Otherwise the component will
+ // not be ready immediately. There is a statusChanged signal on the
+ // component you could use if you want to wait to load remote files.
+ if (component.status == 1){
+ if (type == undefined)
+ type = Math.floor(Math.random() * types);
+ if (type < 0 || type > 4) {
+ console.log("Invalid type requested");//TODO: Is this triggered by custom levels much?
+ return;
+ }
+ var dynamicObject = component.createObject(gameCanvas,
+ {"type": type,
+ "x": column*Settings.blockSize,
+ "y": -1*Settings.blockSize,
+ "width": Settings.blockSize,
+ "height": Settings.blockSize,
+ "particleSystem": gameCanvas.ps});
+ if (dynamicObject == null){
+ console.log("error creating block");
+ console.log(component.errorString());
+ return false;
+ }
+ dynamicObject.y = row*Settings.blockSize;
+ dynamicObject.spawned = true;
+
+ board[index(column,row)] = dynamicObject;
+ }else{
+ console.log("error loading block component");
+ console.log(component.errorString());
+ return false;
+ }
+ return true;
+}
+
+function showPuzzleError(str)
+{
+ //TODO: Nice user visible UI?
+ console.log(str);
+}
+
+function loadMap(map)
+{
+ puzzlePath = map;
+ var levelComp = Qt.createComponent(puzzlePath);
+ if (levelComp.status != 1){
+ console.log("Error loading level");
+ showPuzzleError(levelComp.errorString());
+ return;
+ }
+ puzzleLevel = levelComp.createObject();
+ if (puzzleLevel == null || !puzzleLevel.startingGrid instanceof Array) {
+ showPuzzleError("Bugger!");
+ return;
+ }
+ gameCanvas.showPuzzleGoal(puzzleLevel.goalText);
+ //showPuzzleGoal should call finishLoadingMap as the next thing it does, before handling more events
+}
+
+function finishLoadingMap()
+{
+ for (var i in puzzleLevel.startingGrid)
+ if (! (puzzleLevel.startingGrid[i] >= 0 && puzzleLevel.startingGrid[i] <= 9) )
+ puzzleLevel.startingGrid[i] = 0;
+ //TODO: Don't allow loading larger levels, leads to cheating
+ while (puzzleLevel.startingGrid.length > maxIndex) puzzleLevel.startingGrid.shift();
+ while (puzzleLevel.startingGrid.length < maxIndex) puzzleLevel.startingGrid.unshift(0);
+ for (var i in puzzleLevel.startingGrid)
+ if (puzzleLevel.startingGrid[i] > 0)
+ createBlock(i % maxColumn, Math.floor(i / maxColumn), puzzleLevel.startingGrid[i] - 1);
+
+ //### Experimental feature - allow levels to contain arbitrary QML scenes as well!
+ //while (puzzleLevel.children.length)
+ // puzzleLevel.children[0].parent = gameCanvas;
+ gameDuration = new Date(); //Don't start until we finish loading
+}
+
+function puzzleVictoryCheck(clearedAll)//gameOver has also been set if no more moves
+{
+ var won = true;
+ var soFar = new Date() - gameDuration;
+ if (puzzleLevel.scoreTarget != -1 && gameCanvas.score < puzzleLevel.scoreTarget){
+ won = false;
+ } if (puzzleLevel.scoreTarget != -1 && gameCanvas.score >= puzzleLevel.scoreTarget && !puzzleLevel.mustClear){
+ gameOver = true;
+ } if (puzzleLevel.timeTarget != -1 && soFar/1000.0 > puzzleLevel.timeTarget){
+ gameOver = true;
+ } if (puzzleLevel.moveTarget != -1 && gameCanvas.moves >= puzzleLevel.moveTarget){
+ gameOver = true;
+ } if (puzzleLevel.mustClear && gameOver && !clearedAll) {
+ won = false;
+ }
+
+ if (gameOver) {
+ gameCanvas.gameOver = true;
+ gameCanvas.showPuzzleEnd(won);
+
+ if (won) {
+ // Store progress
+ saveLevelHistory();
+ }
+ }
+}
+
+function getHighScore()
+{
+ var db = Sql.LocalStorage.openDatabaseSync(
+ "SameGame",
+ "2.0",
+ "SameGame Local Data",
+ 100
+ );
+ db.transaction(
+ function(tx) {
+ tx.executeSql('CREATE TABLE IF NOT EXISTS Scores(game TEXT, score NUMBER, gridSize TEXT, time NUMBER)');
+ // Only show results for the current grid size
+ var rs = tx.executeSql('SELECT * FROM Scores WHERE gridSize = "'
+ + maxColumn + "x" + maxRow + '" AND game = "' + gameMode + '" ORDER BY score desc');
+ if (rs.rows.length > 0)
+ gameCanvas.highScore = rs.rows.item(0).score;
+ else
+ gameCanvas.highScore = 0;
+ }
+ );
+}
+
+function saveHighScore(score)
+{
+ // Offline storage
+ var db = Sql.LocalStorage.openDatabaseSync(
+ "SameGame",
+ "2.0",
+ "SameGame Local Data",
+ 100
+ );
+ var dataStr = "INSERT INTO Scores VALUES(?, ?, ?, ?)";
+ var data = [
+ gameMode,
+ score,
+ maxColumn + "x" + maxRow,
+ Math.floor(gameDuration / 1000)
+ ];
+ if (score >= gameCanvas.highScore)//Update UI field
+ gameCanvas.highScore = score;
+
+ db.transaction(
+ function(tx) {
+ tx.executeSql('CREATE TABLE IF NOT EXISTS Scores(game TEXT, score NUMBER, gridSize TEXT, time NUMBER)');
+ tx.executeSql(dataStr, data);
+ }
+ );
+}
+
+function getLevelHistory()
+{
+ var db = Sql.LocalStorage.openDatabaseSync(
+ "SameGame",
+ "2.0",
+ "SameGame Local Data",
+ 100
+ );
+ db.transaction(
+ function(tx) {
+ tx.executeSql('CREATE TABLE IF NOT EXISTS Puzzle(level TEXT, score NUMBER, moves NUMBER, time NUMBER)');
+ var rs = tx.executeSql('SELECT * FROM Puzzle WHERE level = "' + puzzlePath + '" ORDER BY score desc');
+ if (rs.rows.length > 0) {
+ gameCanvas.puzzleWon = true;
+ gameCanvas.highScore = rs.rows.item(0).score;
+ } else {
+ gameCanvas.puzzleWon = false;
+ gameCanvas.highScore = 0;
+ }
+ }
+ );
+}
+
+function saveLevelHistory()
+{
+ var db = Sql.LocalStorage.openDatabaseSync(
+ "SameGame",
+ "2.0",
+ "SameGame Local Data",
+ 100
+ );
+ var dataStr = "INSERT INTO Puzzle VALUES(?, ?, ?, ?)";
+ var data = [
+ puzzlePath,
+ gameCanvas.score,
+ gameCanvas.moves,
+ Math.floor(gameDuration / 1000)
+ ];
+ gameCanvas.puzzleWon = true;
+
+ db.transaction(
+ function(tx) {
+ tx.executeSql('CREATE TABLE IF NOT EXISTS Puzzle(level TEXT, score NUMBER, moves NUMBER, time NUMBER)');
+ tx.executeSql(dataStr, data);
+ }
+ );
+}
+
+function nuke() //For "Debug mode"
+{
+ for (var row = 1; row <= 5; row++) {
+ for (var col = 0; col < 5; col++) {
+ if (board[index(col, maxRow - row)] != null) {
+ board[index(col, maxRow - row)].dying = true;
+ board[index(col, maxRow - row)] = null;
+ }
+ }
+ }
+ if (gameMode == "multiplayer" && gameCanvas.curTurn == 2)
+ shuffleUp();
+ else
+ shuffleDown();
+ if (gameMode == "endless")
+ refill();
+ else
+ victoryCheck();
+}
diff --git a/experimental/qt5-intro-android/samegame/settings.js b/experimental/qt5-intro-android/samegame/settings.js
new file mode 100644
index 0000000..e09dee9
--- /dev/null
+++ b/experimental/qt5-intro-android/samegame/settings.js
@@ -0,0 +1,56 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Research In Motion
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+** of its contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+.pragma library
+
+//This should be switched over once a proper QML settings API exists
+
+var menuDelay = 500
+
+var headerHeight = 20 // 70 on BB10
+var footerHeight = 44 // 100 on BB10
+
+var fontPixelSize = 14 // 55 on BB10
+
+var blockSize = 32 // 64 on BB10
+
+var toolButtonHeight = 32 // 64 on BB10
+
+var menuButtonSpacing = 0 // 15 on BB10