Changeset View
Changeset View
Standalone View
Standalone View
effects/fallapart/fallapart.cpp
Show First 20 Lines • Show All 68 Lines • ▼ Show 20 Line(s) | 59 | if (windows.contains(w) && isRealWindow(w)) { | |||
---|---|---|---|---|---|
69 | } | 69 | } | ||
70 | } | 70 | } | ||
71 | effects->prePaintWindow(w, data, time); | 71 | effects->prePaintWindow(w, data, time); | ||
72 | } | 72 | } | ||
73 | 73 | | |||
74 | void FallApartEffect::paintWindow(EffectWindow* w, int mask, QRegion region, WindowPaintData& data) | 74 | void FallApartEffect::paintWindow(EffectWindow* w, int mask, QRegion region, WindowPaintData& data) | ||
75 | { | 75 | { | ||
76 | if (windows.contains(w) && isRealWindow(w)) { | 76 | if (windows.contains(w) && isRealWindow(w)) { | ||
77 | const qreal t = windows[w]; | ||||
77 | WindowQuadList new_quads; | 78 | WindowQuadList new_quads; | ||
78 | int cnt = 0; | 79 | int cnt = 0; | ||
79 | foreach (WindowQuad quad, data.quads) { // krazy:exclude=foreach | 80 | foreach (WindowQuad quad, data.quads) { // krazy:exclude=foreach | ||
80 | // make fragments move in various directions, based on where | 81 | // make fragments move in various directions, based on where | ||
81 | // they are (left pieces generally move to the left, etc.) | 82 | // they are (left pieces generally move to the left, etc.) | ||
82 | QPointF p1(quad[ 0 ].x(), quad[ 0 ].y()); | 83 | QPointF p1(quad[ 0 ].x(), quad[ 0 ].y()); | ||
83 | double xdiff = 0; | 84 | double xdiff = 0; | ||
84 | if (p1.x() < w->width() / 2) | 85 | if (p1.x() < w->width() / 2) | ||
85 | xdiff = -(w->width() / 2 - p1.x()) / w->width() * 100; | 86 | xdiff = -(w->width() / 2 - p1.x()) / w->width() * 100; | ||
86 | if (p1.x() > w->width() / 2) | 87 | if (p1.x() > w->width() / 2) | ||
87 | xdiff = (p1.x() - w->width() / 2) / w->width() * 100; | 88 | xdiff = (p1.x() - w->width() / 2) / w->width() * 100; | ||
88 | double ydiff = 0; | 89 | double ydiff = 0; | ||
89 | if (p1.y() < w->height() / 2) | 90 | if (p1.y() < w->height() / 2) | ||
90 | ydiff = -(w->height() / 2 - p1.y()) / w->height() * 100; | 91 | ydiff = -(w->height() / 2 - p1.y()) / w->height() * 100; | ||
91 | if (p1.y() > w->height() / 2) | 92 | if (p1.y() > w->height() / 2) | ||
92 | ydiff = (p1.y() - w->height() / 2) / w->height() * 100; | 93 | ydiff = (p1.y() - w->height() / 2) / w->height() * 100; | ||
93 | double modif = windows[ w ] * windows[ w ] * 64; | 94 | double modif = t * t * 64; | ||
94 | srandom(cnt); // change direction randomly but consistently | 95 | srandom(cnt); // change direction randomly but consistently | ||
95 | xdiff += (rand() % 21 - 10); | 96 | xdiff += (rand() % 21 - 10); | ||
96 | ydiff += (rand() % 21 - 10); | 97 | ydiff += (rand() % 21 - 10); | ||
97 | for (int j = 0; | 98 | for (int j = 0; | ||
98 | j < 4; | 99 | j < 4; | ||
99 | ++j) { | 100 | ++j) { | ||
100 | quad[ j ].move(quad[ j ].x() + xdiff * modif, quad[ j ].y() + ydiff * modif); | 101 | quad[ j ].move(quad[ j ].x() + xdiff * modif, quad[ j ].y() + ydiff * modif); | ||
101 | } | 102 | } | ||
Show All 12 Lines | 107 | for (int j = 0; | |||
114 | x = dist * cos(angle); | 115 | x = dist * cos(angle); | ||
115 | y = dist * sin(angle); | 116 | y = dist * sin(angle); | ||
116 | quad[ j ].move(center.x() + x, center.y() + y); | 117 | quad[ j ].move(center.x() + x, center.y() + y); | ||
117 | } | 118 | } | ||
118 | new_quads.append(quad); | 119 | new_quads.append(quad); | ||
119 | ++cnt; | 120 | ++cnt; | ||
120 | } | 121 | } | ||
121 | data.quads = new_quads; | 122 | data.quads = new_quads; | ||
123 | data.multiplyOpacity(interpolate(1.0, 0.0, t)); | ||||
122 | } | 124 | } | ||
123 | effects->paintWindow(w, mask, region, data); | 125 | effects->paintWindow(w, mask, region, data); | ||
124 | } | 126 | } | ||
125 | 127 | | |||
126 | void FallApartEffect::postPaintScreen() | 128 | void FallApartEffect::postPaintScreen() | ||
127 | { | 129 | { | ||
128 | if (!windows.isEmpty()) | 130 | if (!windows.isEmpty()) | ||
129 | effects->addRepaintFull(); | 131 | effects->addRepaintFull(); | ||
▲ Show 20 Lines • Show All 66 Lines • Show Last 20 Lines |