diff options
Diffstat (limited to 'libraries/elementary/src/examples/efl_thread_win32_2.c')
-rw-r--r-- | libraries/elementary/src/examples/efl_thread_win32_2.c | 100 |
1 files changed, 100 insertions, 0 deletions
diff --git a/libraries/elementary/src/examples/efl_thread_win32_2.c b/libraries/elementary/src/examples/efl_thread_win32_2.c new file mode 100644 index 0000000..d1cad15 --- /dev/null +++ b/libraries/elementary/src/examples/efl_thread_win32_2.c | |||
@@ -0,0 +1,100 @@ | |||
1 | //Compile with: | ||
2 | //gcc -o efl_thread_2 efl_thread_win32_2.c -g `pkg-config --cflags --libs elementary` | ||
3 | #include <Elementary.h> | ||
4 | #define WIN32_LEAN_AND_MEAN | ||
5 | #include <windows.h> | ||
6 | |||
7 | static Evas_Object *win = NULL; | ||
8 | static Evas_Object *rect = NULL; | ||
9 | |||
10 | struct info | ||
11 | { | ||
12 | double x, y; | ||
13 | }; | ||
14 | |||
15 | static void *my_thread_mainloop_code(void *data); | ||
16 | |||
17 | static HANDLE thread; | ||
18 | |||
19 | // BEGIN - code running in my custom win32 thread instance | ||
20 | // | ||
21 | static DWORD WINAPI | ||
22 | my_thread_run(LPVOID arg) | ||
23 | { | ||
24 | double t = 0.0; | ||
25 | |||
26 | for (;;) | ||
27 | { | ||
28 | struct info *inf = malloc(sizeof(struct info)); | ||
29 | |||
30 | if (inf) | ||
31 | { | ||
32 | inf->x = 200 + (200 * sin(t)); | ||
33 | inf->y = 200 + (200 * cos(t)); | ||
34 | ecore_main_loop_thread_safe_call_sync | ||
35 | (my_thread_mainloop_code, inf); | ||
36 | } | ||
37 | // and sleep and loop | ||
38 | usleep(1000); | ||
39 | t += 0.02; | ||
40 | } | ||
41 | return 0; | ||
42 | } | ||
43 | // | ||
44 | // END - code running in my custom win32 thread instance | ||
45 | static void | ||
46 | my_thread_new(void) | ||
47 | { | ||
48 | thread = CreateThread(NULL, 0, my_thread_run, NULL, 0, NULL); | ||
49 | if (!thread) | ||
50 | { | ||
51 | char *str = evil_last_error_get(); | ||
52 | if (str) | ||
53 | { | ||
54 | fprintf("thread creation failed: %s\n", str); | ||
55 | free(str); | ||
56 | } | ||
57 | } | ||
58 | } | ||
59 | |||
60 | static void * | ||
61 | my_thread_mainloop_code(void *data) | ||
62 | { | ||
63 | struct info *inf = data; | ||
64 | evas_object_move(rect, inf->x - 50, inf->y - 50); | ||
65 | free(inf); | ||
66 | return NULL; | ||
67 | } | ||
68 | |||
69 | EAPI_MAIN int | ||
70 | elm_main(int argc, char **argv) | ||
71 | { | ||
72 | Evas_Object *o, *bg; | ||
73 | |||
74 | win = elm_win_add(NULL, "efl-thread-2", ELM_WIN_BASIC); | ||
75 | elm_win_title_set(win, "EFL Thread 2"); | ||
76 | elm_win_autodel_set(win, EINA_TRUE); | ||
77 | elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED); | ||
78 | evas_object_resize(win, 400, 400); | ||
79 | evas_object_show(win); | ||
80 | |||
81 | bg = elm_bg_add(win); | ||
82 | evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); | ||
83 | elm_win_resize_object_add(win, bg); | ||
84 | evas_object_show(bg); | ||
85 | |||
86 | o = evas_object_rectangle_add(evas_object_evas_get(win)); | ||
87 | evas_object_color_set(o, 50, 80, 180, 255); | ||
88 | evas_object_resize(o, 100, 100); | ||
89 | evas_object_show(o); | ||
90 | rect = o; | ||
91 | |||
92 | // create custom thread to do some "work on the side" | ||
93 | my_thread_new(); | ||
94 | |||
95 | elm_run(); | ||
96 | elm_shutdown(); | ||
97 | |||
98 | return 0; | ||
99 | } | ||
100 | ELM_MAIN() | ||