effects.lua

main 70 lines · 1.8 KB Raw
Alex Alex Commit Client Upload Part 2 19/10/2026 00:06
1-- @docclass
2g_effects = {}
3
4function g_effects.fadeIn(widget, time, elapsed)
5 if not elapsed then elapsed = 0 end
6 if not time then time = 300 end
7 widget:setOpacity(math.min(elapsed/time, 1))
8 removeEvent(widget.fadeEvent)
9 if elapsed < time then
10 removeEvent(widget.fadeEvent)
11 widget.fadeEvent = scheduleEvent(function()
12 g_effects.fadeIn(widget, time, elapsed + 30)
13 end, 30)
14 else
15 widget.fadeEvent = nil
16 end
17end
18
19function g_effects.fadeOut(widget, time, elapsed)
20 if not elapsed then elapsed = 0 end
21 if not time then time = 300 end
22 elapsed = math.max((1 - widget:getOpacity()) * time, elapsed)
23 removeEvent(widget.fadeEvent)
24 widget:setOpacity(math.max((time - elapsed)/time, 0))
25 if elapsed < time then
26 widget.fadeEvent = scheduleEvent(function()
27 g_effects.fadeOut(widget, time, elapsed + 30)
28 end, 30)
29 else
30 widget.fadeEvent = nil
31 end
32end
33
34function g_effects.cancelFade(widget)
35 if widget then
36 removeEvent(widget.fadeEvent)
37 widget.fadeEvent = nil
38 end
39end
40
41function g_effects.startBlink(widget, duration, interval, clickCancel)
42 duration = duration or 0 -- until stop is called
43 interval = interval or 500
44 clickCancel = clickCancel or true
45
46 removeEvent(widget.blinkEvent)
47 removeEvent(widget.blinkStopEvent)
48
49 widget.blinkEvent = cycleEvent(function()
50 widget:setOn(not widget:isOn())
51 end, interval)
52
53 if duration > 0 then
54 widget.blinkStopEvent = scheduleEvent(function()
55 g_effects.stopBlink(widget)
56 end, duration)
57 end
58
59 connect(widget, { onClick = g_effects.stopBlink })
60end
61
62function g_effects.stopBlink(widget)
63 disconnect(widget, { onClick = g_effects.stopBlink })
64 removeEvent(widget.blinkEvent)
65 removeEvent(widget.blinkStopEvent)
66 widget.blinkEvent = nil
67 widget.blinkStopEvent = nil
68 widget:setOn(false)
69end
70
Top