1 | #include "idle.hpp" |
---|
2 | #include "jwindow.hpp" |
---|
3 | |
---|
4 | extern window_manager *eh; |
---|
5 | |
---|
6 | idle_manager *idle_man=0; |
---|
7 | |
---|
8 | idle_manager::~idle_manager() |
---|
9 | { |
---|
10 | idle_reset(); |
---|
11 | int i; |
---|
12 | for (i=0;i<total_wait_frames;i++) |
---|
13 | delete wait_cursors[i]; |
---|
14 | } |
---|
15 | |
---|
16 | idle_manager::idle_manager() |
---|
17 | { |
---|
18 | cursor_frame_on=-1; |
---|
19 | first=last=0; |
---|
20 | |
---|
21 | bFILE *fp=open_file("art/wait.spe","rb"); |
---|
22 | char name[20]; |
---|
23 | spec_directory sd(fp); |
---|
24 | |
---|
25 | for (int i=0;i<total_wait_frames;i++) |
---|
26 | { |
---|
27 | sprintf(name,"watch_%d",i+1); |
---|
28 | spec_entry *se=sd.find(name); |
---|
29 | if (!se) |
---|
30 | { |
---|
31 | lbreak("could not find %s in %s\n",name,"art/wait.spe"); |
---|
32 | exit(0); |
---|
33 | } |
---|
34 | |
---|
35 | wait_cursors[i]=new image(se,fp); |
---|
36 | } |
---|
37 | delete fp; |
---|
38 | } |
---|
39 | |
---|
40 | void idle_manager::idle_reset() |
---|
41 | { |
---|
42 | last_idle.get_time(); |
---|
43 | if (cursor_frame_on!=-1) |
---|
44 | { |
---|
45 | eh->set_mouse_shape(old,old_cx,old_cy); |
---|
46 | cursor_frame_on=-1; |
---|
47 | |
---|
48 | while (first) |
---|
49 | { |
---|
50 | eh->push_event(first->ev); |
---|
51 | event_holder *l=first; |
---|
52 | first=first->next; |
---|
53 | delete l; |
---|
54 | } |
---|
55 | last=0; |
---|
56 | } |
---|
57 | } |
---|
58 | |
---|
59 | void idle_manager::idle() |
---|
60 | { |
---|
61 | time_marker now; |
---|
62 | |
---|
63 | if (cursor_frame_on==-1) |
---|
64 | { |
---|
65 | if (now.diff_time(&last_idle)>0.5) |
---|
66 | { |
---|
67 | old=eh->eh->mouse->mouse_sprite()->visual->copy(); |
---|
68 | old_cx=eh->eh->mouse->center_x(); |
---|
69 | old_cy=eh->eh->mouse->center_y(); |
---|
70 | cursor_frame_on=0; |
---|
71 | eh->set_mouse_shape(wait_cursors[cursor_frame_on]->copy(),0,0); |
---|
72 | eh->flush_screen(); |
---|
73 | } |
---|
74 | } else if (now.diff_time(&last_animate)>0.1) |
---|
75 | { |
---|
76 | cursor_frame_on++; |
---|
77 | if (cursor_frame_on>=total_wait_frames) |
---|
78 | cursor_frame_on=0; |
---|
79 | |
---|
80 | eh->set_mouse_shape(wait_cursors[cursor_frame_on]->copy(),0,0); |
---|
81 | last_animate.get_time(); |
---|
82 | eh->flush_screen(); |
---|
83 | } else |
---|
84 | { |
---|
85 | event ev; |
---|
86 | while (eh->event_waiting()) |
---|
87 | { |
---|
88 | eh->get_event(ev); |
---|
89 | if (ev.type!=EV_MOUSE_MOVE) |
---|
90 | que_event(ev); |
---|
91 | eh->flush_screen(); |
---|
92 | } |
---|
93 | } |
---|
94 | } |
---|
95 | |
---|
96 | |
---|