1 // Copyright (c) 2010 The Chromium OS Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include <gflags/gflags.h> 6 #include <stdio.h> 7 8 #include "base/logging.h" 9 10 #include "glinterface.h" 11 #include "main.h" 12 #include "xlib_window.h" 13 14 15 Display *g_xlib_display = NULL; 16 Window g_xlib_window = 0; 17 18 GLint g_width = WINDOW_WIDTH; 19 GLint g_height = WINDOW_HEIGHT; 20 DEFINE_bool(override_redirect, true, "Use an override redirect window"); 21 22 23 bool XlibInit() { 24 // Prevent multiple initializations. 25 if (g_xlib_window) 26 return true; 27 28 g_xlib_display = XOpenDisplay(0); 29 if (!g_xlib_display) { 30 printf("# Error: in xlib_window.cc::XlibInit() could not open " 31 "default display.\n"); 32 return false; 33 } 34 35 int screen = DefaultScreen(g_xlib_display); 36 Window root_window = RootWindow(g_xlib_display, screen); 37 38 XWindowAttributes attributes; 39 XGetWindowAttributes(g_xlib_display, root_window, &attributes); 40 41 g_width = g_width == -1 ? attributes.width : g_width; 42 g_height = g_height == -1 ? attributes.height : g_height; 43 XVisualInfo* xlib_visinfo = g_main_gl_interface->GetXVisual(); 44 45 unsigned long mask = CWBackPixel | CWBorderPixel | CWColormap | CWEventMask | 46 CWOverrideRedirect; 47 XSetWindowAttributes attr; 48 attr.background_pixel = 0; 49 attr.border_pixel = 0; 50 attr.colormap = XCreateColormap(g_xlib_display, root_window, 51 xlib_visinfo->visual, AllocNone); 52 attr.event_mask = StructureNotifyMask | ExposureMask | KeyPressMask; 53 attr.override_redirect = FLAGS_override_redirect ? True : False; 54 g_xlib_window = XCreateWindow(g_xlib_display, root_window, 55 0, 0, g_width, g_height, 0, 56 xlib_visinfo->depth, InputOutput, 57 xlib_visinfo->visual, mask, &attr); 58 59 XMapWindow(g_xlib_display, g_xlib_window); 60 XSync(g_xlib_display, True); 61 62 XGetWindowAttributes(g_xlib_display, g_xlib_window, &attributes); 63 g_width = attributes.width; 64 g_height = attributes.height; 65 66 XFree(xlib_visinfo); 67 68 return true; 69 } 70