12f18b292ff155af7df35930474857b507dbf18feTony Barbour/*
22f18b292ff155af7df35930474857b507dbf18feTony Barbour * Copyright (C) 2016 Google, Inc.
32f18b292ff155af7df35930474857b507dbf18feTony Barbour *
443b53e83705f02245da6ae61e31273866a35b833Jon Ashburn * Licensed under the Apache License, Version 2.0 (the "License");
543b53e83705f02245da6ae61e31273866a35b833Jon Ashburn * you may not use this file except in compliance with the License.
643b53e83705f02245da6ae61e31273866a35b833Jon Ashburn * You may obtain a copy of the License at
72f18b292ff155af7df35930474857b507dbf18feTony Barbour *
843b53e83705f02245da6ae61e31273866a35b833Jon Ashburn *     http://www.apache.org/licenses/LICENSE-2.0
92f18b292ff155af7df35930474857b507dbf18feTony Barbour *
1043b53e83705f02245da6ae61e31273866a35b833Jon Ashburn * Unless required by applicable law or agreed to in writing, software
1143b53e83705f02245da6ae61e31273866a35b833Jon Ashburn * distributed under the License is distributed on an "AS IS" BASIS,
1243b53e83705f02245da6ae61e31273866a35b833Jon Ashburn * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1343b53e83705f02245da6ae61e31273866a35b833Jon Ashburn * See the License for the specific language governing permissions and
1443b53e83705f02245da6ae61e31273866a35b833Jon Ashburn * limitations under the License.
152f18b292ff155af7df35930474857b507dbf18feTony Barbour */
162f18b292ff155af7df35930474857b507dbf18feTony Barbour
172f18b292ff155af7df35930474857b507dbf18feTony Barbour#ifndef SHELL_XCB_H
182f18b292ff155af7df35930474857b507dbf18feTony Barbour#define SHELL_XCB_H
192f18b292ff155af7df35930474857b507dbf18feTony Barbour
202f18b292ff155af7df35930474857b507dbf18feTony Barbour#include <xcb/xcb.h>
212f18b292ff155af7df35930474857b507dbf18feTony Barbour#include "Shell.h"
222f18b292ff155af7df35930474857b507dbf18feTony Barbour
232f18b292ff155af7df35930474857b507dbf18feTony Barbourclass ShellXcb : public Shell {
242f18b292ff155af7df35930474857b507dbf18feTony Barbourpublic:
252f18b292ff155af7df35930474857b507dbf18feTony Barbour    ShellXcb(Game &game);
262f18b292ff155af7df35930474857b507dbf18feTony Barbour    ~ShellXcb();
272f18b292ff155af7df35930474857b507dbf18feTony Barbour
282f18b292ff155af7df35930474857b507dbf18feTony Barbour    void run();
292f18b292ff155af7df35930474857b507dbf18feTony Barbour    void quit() { quit_ = true; }
302f18b292ff155af7df35930474857b507dbf18feTony Barbour
312f18b292ff155af7df35930474857b507dbf18feTony Barbourprivate:
322f18b292ff155af7df35930474857b507dbf18feTony Barbour    void init_connection();
332f18b292ff155af7df35930474857b507dbf18feTony Barbour
342f18b292ff155af7df35930474857b507dbf18feTony Barbour    PFN_vkGetInstanceProcAddr load_vk();
352f18b292ff155af7df35930474857b507dbf18feTony Barbour    bool can_present(VkPhysicalDevice phy, uint32_t queue_family);
362f18b292ff155af7df35930474857b507dbf18feTony Barbour
372f18b292ff155af7df35930474857b507dbf18feTony Barbour    void create_window();
382f18b292ff155af7df35930474857b507dbf18feTony Barbour    VkSurfaceKHR create_surface(VkInstance instance);
392f18b292ff155af7df35930474857b507dbf18feTony Barbour
402f18b292ff155af7df35930474857b507dbf18feTony Barbour    void handle_event(const xcb_generic_event_t *ev);
412f18b292ff155af7df35930474857b507dbf18feTony Barbour    void loop_wait();
422f18b292ff155af7df35930474857b507dbf18feTony Barbour    void loop_poll();
432f18b292ff155af7df35930474857b507dbf18feTony Barbour
442f18b292ff155af7df35930474857b507dbf18feTony Barbour    xcb_connection_t *c_;
452f18b292ff155af7df35930474857b507dbf18feTony Barbour    xcb_screen_t *scr_;
462f18b292ff155af7df35930474857b507dbf18feTony Barbour    xcb_window_t win_;
472f18b292ff155af7df35930474857b507dbf18feTony Barbour
482f18b292ff155af7df35930474857b507dbf18feTony Barbour    xcb_atom_t wm_protocols_;
492f18b292ff155af7df35930474857b507dbf18feTony Barbour    xcb_atom_t wm_delete_window_;
502f18b292ff155af7df35930474857b507dbf18feTony Barbour
512f18b292ff155af7df35930474857b507dbf18feTony Barbour    void *lib_handle_;
522f18b292ff155af7df35930474857b507dbf18feTony Barbour
532f18b292ff155af7df35930474857b507dbf18feTony Barbour    bool quit_;
542f18b292ff155af7df35930474857b507dbf18feTony Barbour};
552f18b292ff155af7df35930474857b507dbf18feTony Barbour
562f18b292ff155af7df35930474857b507dbf18feTony Barbour#endif // SHELL_XCB_H
57