5 #include <Evas_Engine_GL_X11.h>
7 static Display *disp = NULL;
9 static int first_expose = 0;
12 engine_gl_x11_args(const char *engine, int width, int height)
14 XSetWindowAttributes attr;
17 Evas_Engine_Info_GL_X11 *einfo;
20 disp = XOpenDisplay(NULL);
21 if (!disp) return EINA_FALSE;
23 evas_output_method_set(evas, evas_render_method_lookup("gl_x11"));
24 einfo = (Evas_Engine_Info_GL_X11 *)evas_engine_info_get(evas);
27 printf("Evas does not support the OpenGL X11 Engine\n");
31 einfo->info.display = disp;
32 einfo->info.screen = DefaultScreen(einfo->info.display);
33 einfo->info.visual = einfo->func.best_visual_get(einfo);
34 einfo->info.colormap = einfo->func.best_colormap_get(einfo);
35 einfo->info.depth = einfo->func.best_depth_get(einfo);
36 attr.backing_store = NotUseful;
37 attr.colormap = einfo->info.colormap;
38 attr.border_pixel = 0;
39 attr.background_pixmap = None;
41 ExposureMask | ButtonPressMask | ButtonReleaseMask | PointerMotionMask |
42 StructureNotifyMask | EnterWindowMask | LeaveWindowMask |
43 KeyPressMask | KeyReleaseMask;
44 attr.bit_gravity = ForgetGravity;
45 win = XCreateWindow(disp, DefaultRootWindow(disp),
46 0, 0, width, height, 0,
47 einfo->info.depth, InputOutput,
49 CWBackingStore | CWColormap |
50 CWBackPixmap | CWBorderPixel |
51 CWBitGravity | CWEventMask,
56 einfo->info.drawable = win;
57 if (!evas_engine_info_set(evas, (Evas_Engine_Info *) einfo))
59 printf("Evas can not setup the informations of the OpenGL X11 Engine\n");
63 XStoreName(disp, win, "Expedite - Evas Test Suite");
64 chint.res_name = "expedite";
65 chint.res_class = "Expedite";
66 XSetClassHint(disp, win, &chint);
67 szhints.flags = PMinSize | PMaxSize | PSize | USSize;
68 szhints.min_width = szhints.max_width = width;
69 szhints.min_height = szhints.max_height = height;
70 XSetWMNormalHints(disp, win, &szhints);
71 XMapWindow(disp, win);
78 XDestroyWindow(disp, win);
86 engine_gl_x11_loop(void)
93 if (!XCheckMaskEvent(disp,
102 LeaveWindowMask, &ev))
107 evas_event_feed_mouse_move(evas, ev.xbutton.x, ev.xbutton.y, 0, NULL);
108 evas_event_feed_mouse_down(evas, ev.xbutton.button, EVAS_BUTTON_NONE, 0, NULL);
111 evas_event_feed_mouse_move(evas, ev.xbutton.x, ev.xbutton.y, 0, NULL);
112 evas_event_feed_mouse_up(evas, ev.xbutton.button, EVAS_BUTTON_NONE, 0, NULL);
115 evas_event_feed_mouse_move(evas, ev.xmotion.x, ev.xmotion.y, 0, NULL);
119 evas_damage_rectangle_add(evas,
125 case ConfigureNotify:
126 evas_output_viewport_set(evas, 0, 0,
128 ev.xconfigure.height);
129 evas_output_size_set(evas,
131 ev.xconfigure.height);
132 win_w = ev.xconfigure.width;
133 win_h = ev.xconfigure.height;
136 evas_event_feed_mouse_in(evas, 0, NULL);
139 evas_event_feed_mouse_out(evas, 0, NULL);
142 ks = XKeycodeToKeysym(ev.xkey.display, ev.xkey.keycode, 0);
143 kstr = XKeysymToString(ks);
146 if ((!strcmp(kstr, "Shift_L")) ||
147 (!strcmp(kstr, "Shift_R")))
148 evas_key_modifier_on(evas, "Shift");
149 if ((!strcmp(kstr, "Control_L")) ||
150 (!strcmp(kstr, "Control_R")))
151 evas_key_modifier_on(evas, "Control");
152 if ((!strcmp(kstr, "Alt_L")) ||
153 (!strcmp(kstr, "Alt_R")))
154 evas_key_modifier_on(evas, "Alt");
155 if ((!strcmp(kstr, "Super_L")) ||
156 (!strcmp(kstr, "Super_R")))
157 evas_key_modifier_on(evas, "Super");
158 if (!strcmp(kstr, "Caps_Lock"))
160 if (evas_key_lock_is_set(evas_key_lock_get(evas), "Caps_Lock"))
161 evas_key_lock_off(evas, "Caps_Lock");
163 evas_key_lock_on(evas, "Caps_Lock");
165 if (!strcmp(kstr, "Num_Lock"))
167 if (evas_key_lock_is_set(evas_key_lock_get(evas), "Num_Lock"))
168 evas_key_lock_off(evas, "Num_Lock");
170 evas_key_lock_on(evas, "Num_Lock");
172 if (!strcmp(kstr, "Scroll_Lock"))
174 if (evas_key_lock_is_set(evas_key_lock_get(evas), "Scroll_Lock"))
175 evas_key_lock_off(evas, "Scroll_Lock");
177 evas_key_lock_on(evas, "Scroll_Lock");
179 if (kstr) evas_event_feed_key_down(evas, kstr, kstr, NULL, NULL, 0, NULL);
183 ks = XKeycodeToKeysym(ev.xkey.display, ev.xkey.keycode, 0);
184 kstr = XKeysymToString(ks);
187 if ((!strcmp(kstr, "Shift_L")) ||
188 (!strcmp(kstr, "Shift_R")))
189 evas_key_modifier_off(evas, "Shift");
190 if ((!strcmp(kstr, "Control_L")) ||
191 (!strcmp(kstr, "Control_R")))
192 evas_key_modifier_off(evas, "Control");
193 if ((!strcmp(kstr, "Alt_L")) ||
194 (!strcmp(kstr, "Alt_R")))
195 evas_key_modifier_off(evas, "Alt");
196 if ((!strcmp(kstr, "Super_L")) ||
197 (!strcmp(kstr, "Super_R")))
198 evas_key_modifier_off(evas, "Super");
199 evas_event_feed_key_up(evas, kstr, kstr, NULL, NULL, 0, NULL);
209 engine_gl_x11_shutdown(void)
211 XDestroyWindow(disp, win);