Home | History | Annotate | Download | only in src
      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