5 #include <Evas_Engine_Software_X11.h>
7 static Display *disp = NULL;
9 static int first_expose = 0;
12 engine_software_xlib_args(const char *engine, int width, int height)
14 XSetWindowAttributes attr;
17 Evas_Engine_Info_Software_X11 *einfo;
20 disp = XOpenDisplay(NULL);
21 if (!disp) return EINA_FALSE;
23 evas_output_method_set(evas, evas_render_method_lookup("software_x11"));
24 einfo = (Evas_Engine_Info_Software_X11 *)evas_engine_info_get(evas);
27 printf("Evas does not support the Software Xlib Engine\n");
31 einfo->info.backend = EVAS_ENGINE_INFO_SOFTWARE_X11_BACKEND_XLIB;
32 einfo->info.connection = disp;
33 einfo->info.screen = NULL;
34 einfo->info.visual = einfo->func.best_visual_get(0, disp, DefaultScreen(disp));
35 einfo->info.colormap = einfo->func.best_colormap_get(0, disp, DefaultScreen(disp));
36 einfo->info.depth = einfo->func.best_depth_get(0, disp, DefaultScreen(disp));
37 einfo->info.rotation = 0;
38 einfo->info.debug = 0;
39 attr.backing_store = NotUseful;
40 attr.colormap = einfo->info.colormap;
41 attr.border_pixel = 0;
42 attr.background_pixmap = None;
44 ExposureMask | ButtonPressMask | ButtonReleaseMask | PointerMotionMask |
45 StructureNotifyMask | EnterWindowMask | LeaveWindowMask |
46 KeyPressMask | KeyReleaseMask;
47 attr.bit_gravity = ForgetGravity;
48 win = XCreateWindow(disp, DefaultRootWindow(disp),
49 0, 0, width, height, 0,
50 einfo->info.depth, InputOutput,
52 CWBackingStore | CWColormap |
53 CWBackPixmap | CWBorderPixel |
54 CWBitGravity | CWEventMask,
59 einfo->info.drawable = win;
60 if (!evas_engine_info_set(evas, (Evas_Engine_Info *) einfo))
62 printf("Evas can not setup the informations of the Software Xlib Engine\n");
66 XStoreName(disp, win, "Expedite - Evas Test Suite");
67 chint.res_name = "expedite";
68 chint.res_class = "Expedite";
69 XSetClassHint(disp, win, &chint);
70 szhints.flags = PMinSize | PMaxSize | PSize | USSize;
71 szhints.min_width = szhints.max_width = width;
72 szhints.min_height = szhints.max_height = height;
73 XSetWMNormalHints(disp, win, &szhints);
74 XMapWindow(disp, win);
77 engine_software_xlib_loop();
81 XDestroyWindow(disp, win);
89 engine_software_xlib_loop(void)
96 if (!XCheckMaskEvent(disp,
105 LeaveWindowMask, &ev))
110 evas_event_feed_mouse_move(evas, ev.xbutton.x, ev.xbutton.y, 0, NULL);
111 evas_event_feed_mouse_down(evas, ev.xbutton.button, EVAS_BUTTON_NONE, 0, NULL);
114 evas_event_feed_mouse_move(evas, ev.xbutton.x, ev.xbutton.y, 0, NULL);
115 evas_event_feed_mouse_up(evas, ev.xbutton.button, EVAS_BUTTON_NONE, 0, NULL);
118 evas_event_feed_mouse_move(evas, ev.xmotion.x, ev.xmotion.y, 0, NULL);
122 evas_damage_rectangle_add(evas,
128 case ConfigureNotify:
129 evas_output_viewport_set(evas, 0, 0,
131 ev.xconfigure.height);
132 evas_output_size_set(evas,
134 ev.xconfigure.height);
135 win_w = ev.xconfigure.width;
136 win_h = ev.xconfigure.height;
139 evas_event_feed_mouse_in(evas, 0, NULL);
142 evas_event_feed_mouse_out(evas, 0, NULL);
145 ks = XKeycodeToKeysym(ev.xkey.display, ev.xkey.keycode, 0);
146 kstr = XKeysymToString(ks);
149 if ((!strcmp(kstr, "Shift_L")) ||
150 (!strcmp(kstr, "Shift_R")))
151 evas_key_modifier_on(evas, "Shift");
152 if ((!strcmp(kstr, "Control_L")) ||
153 (!strcmp(kstr, "Control_R")))
154 evas_key_modifier_on(evas, "Control");
155 if ((!strcmp(kstr, "Alt_L")) ||
156 (!strcmp(kstr, "Alt_R")))
157 evas_key_modifier_on(evas, "Alt");
158 if ((!strcmp(kstr, "Super_L")) ||
159 (!strcmp(kstr, "Super_R")))
160 evas_key_modifier_on(evas, "Super");
161 if (!strcmp(kstr, "Caps_Lock"))
163 if (evas_key_lock_is_set(evas_key_lock_get(evas), "Caps_Lock"))
164 evas_key_lock_off(evas, "Caps_Lock");
166 evas_key_lock_on(evas, "Caps_Lock");
168 if (!strcmp(kstr, "Num_Lock"))
170 if (evas_key_lock_is_set(evas_key_lock_get(evas), "Num_Lock"))
171 evas_key_lock_off(evas, "Num_Lock");
173 evas_key_lock_on(evas, "Num_Lock");
175 if (!strcmp(kstr, "Scroll_Lock"))
177 if (evas_key_lock_is_set(evas_key_lock_get(evas), "Scroll_Lock"))
178 evas_key_lock_off(evas, "Scroll_Lock");
180 evas_key_lock_on(evas, "Scroll_Lock");
182 if (kstr) evas_event_feed_key_down(evas, kstr, kstr, NULL, NULL, 0, NULL);
186 ks = XKeycodeToKeysym(ev.xkey.display, ev.xkey.keycode, 0);
187 kstr = XKeysymToString(ks);
190 if ((!strcmp(kstr, "Shift_L")) ||
191 (!strcmp(kstr, "Shift_R")))
192 evas_key_modifier_off(evas, "Shift");
193 if ((!strcmp(kstr, "Control_L")) ||
194 (!strcmp(kstr, "Control_R")))
195 evas_key_modifier_off(evas, "Control");
196 if ((!strcmp(kstr, "Alt_L")) ||
197 (!strcmp(kstr, "Alt_R")))
198 evas_key_modifier_off(evas, "Alt");
199 if ((!strcmp(kstr, "Super_L")) ||
200 (!strcmp(kstr, "Super_R")))
201 evas_key_modifier_off(evas, "Super");
202 evas_event_feed_key_up(evas, kstr, kstr, NULL, NULL, 0, NULL);
212 engine_software_xlib_shutdown(void)
214 XDestroyWindow(disp, win);