blob: 6586811fbe7ba24945b6ce18376a08a5652af0bc (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
|
import QtQuick 2.0
import QtQuick.Particles 2.0
Item {
id: root
width: 1280
height: 800
// Rectangle {
// anchors.fill: parent
// color: "black"
// }
Flickable {
id: flick
property real inertia: 0.4
property real cellWidth;
property real cellHeight;
width: parent.width
height: parent.height
anchors.horizontalCenter: parent.horizontalCenter
contentHeight: content.height
flickableDirection: Flickable.VerticalFlick
property real topOvershoot: Math.max(0, contentItem.y);
property real bottomOvershoot: Math.max(0, root.height - (contentItem.height + contentItem.y));
// onTopOvershootChanged: print("Top Overshoot:", topOvershoot);
// onBottomOvershootChanged: print("Bottom Overshoot:", bottomOvershoot);
Item {
id: shiftTrickery
width: flick.width
height: content.height
Column {
id: content;
y: -flick.contentItem.y + offsetY;
width: flick.width * 2 / 3
anchors.horizontalCenter: parent.horizontalCenter
property real offsetY: 0;
property real inertia: flick.inertia;
property real t;
NumberAnimation on t {
id: animation;
from: 0;
to: 1;
duration: 1000;
loops: Animation.Infinite
running: Math.abs(content.y) > 0.001 || Math.abs(content.x) > 0.001
}
onTChanged: {
offsetY += (flick.contentItem.y - offsetY) * inertia
}
spacing: engine.smallFontSize() * 2
Item { width: 1; height: engine.smallFontSize() }
AboutBoot2Qt { }
QtFramework { }
QtForAndroid { }
Image {
id: codeLessImage
source: "codeless.png"
anchors.horizontalCenter: parent.horizontalCenter
}
Item { width: 1; height: engine.smallFontSize() }
}
}
}
ParticleSystem {
anchors.fill: parent
ImageParticle {
id: imageParticle
source: "particle.png"
color: "#80c342"
alpha: 0
colorVariation: 0.3
entryEffect: ImageParticle.None
}
Emitter {
id: topEmitter
width: root.width
height: 1
x: 0
y: -1
shape: EllipseShape { fill: true }
emitRate: 300
lifeSpan: 1000
size: 20
sizeVariation: 4
endSize: 0
enabled: flick.topOvershoot > 0
velocity: PointDirection { xVariation: 10; yVariation: 50; y: Math.sqrt(flick.topOvershoot) * 10; }
acceleration: PointDirection { y: 50 }
}
Emitter {
id: bottomEmitter
width: root.width
height: 1
x: 0
y: root.height + 1
shape: EllipseShape { fill: true }
emitRate: 300
lifeSpan: 1000
size: 20
sizeVariation: 4
endSize: 0
enabled: flick.bottomOvershoot > 0
velocity: PointDirection { xVariation: 10; yVariation: -50; y: Math.sqrt(flick.bottomOvershoot) * -10; }
acceleration: PointDirection { y: -50 }
}
}
}
|