Home | History | Annotate | Download | only in smoke
      1 /*
      2  * Copyright (C) 2016 Google, Inc.
      3  *
      4  * Permission is hereby granted, free of charge, to any person obtaining a
      5  * copy of this software and associated documentation files (the "Software"),
      6  * to deal in the Software without restriction, including without limitation
      7  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
      8  * and/or sell copies of the Software, and to permit persons to whom the
      9  * Software is furnished to do so, subject to the following conditions:
     10  *
     11  * The above copyright notice and this permission notice shall be included
     12  * in all copies or substantial portions of the Software.
     13  *
     14  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
     15  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
     16  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
     17  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
     18  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
     19  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
     20  * DEALINGS IN THE SOFTWARE.
     21  */
     22 
     23 #ifndef SHELL_XCB_H
     24 #define SHELL_XCB_H
     25 
     26 #include <xcb/xcb.h>
     27 #include "Shell.h"
     28 
     29 class ShellXcb : public Shell {
     30 public:
     31     ShellXcb(Game &game);
     32     ~ShellXcb();
     33 
     34     void run();
     35     void quit() { quit_ = true; }
     36 
     37 private:
     38     void init_connection();
     39 
     40     PFN_vkGetInstanceProcAddr load_vk();
     41     bool can_present(VkPhysicalDevice phy, uint32_t queue_family);
     42 
     43     void create_window();
     44     VkSurfaceKHR create_surface(VkInstance instance);
     45 
     46     void handle_event(const xcb_generic_event_t *ev);
     47     void loop_wait();
     48     void loop_poll();
     49 
     50     xcb_connection_t *c_;
     51     xcb_screen_t *scr_;
     52     xcb_window_t win_;
     53 
     54     xcb_atom_t wm_protocols_;
     55     xcb_atom_t wm_delete_window_;
     56 
     57     void *lib_handle_;
     58 
     59     bool quit_;
     60 };
     61 
     62 #endif // SHELL_XCB_H
     63