コード例 #1
0
ファイル: X11.cpp プロジェクト: CastBart/AndroidTesting
////////////////////////////////////////////////////////////
/// Entry point of application
///
/// \return Error code
///
////////////////////////////////////////////////////////////
int main()
{
    // Open a connection with the X server
    Display* display = XOpenDisplay(NULL);
    if (!display)
        return EXIT_FAILURE;

    // Get the default screen
    int screen = DefaultScreen(display);

    // Let's create the main window
    XSetWindowAttributes attributes;
    attributes.background_pixel = BlackPixel(display, screen);
    attributes.event_mask       = KeyPressMask;
    Window window = XCreateWindow(display, RootWindow(display, screen),
                                  0, 0, 650, 330, 0,
                                  DefaultDepth(display, screen),
                                  InputOutput,
                                  DefaultVisual(display, screen),
                                  CWBackPixel | CWEventMask, &attributes);
    if (!window)
        return EXIT_FAILURE;

    // Set the window's name
    XStoreName(display, window , "SFML Window");

    // Let's create the windows which will serve as containers for our SFML views
    Window view1 = XCreateWindow(display, window,
                                 10, 10, 310, 310, 0,
                                 DefaultDepth(display, screen),
                                 InputOutput,
                                 DefaultVisual(display, screen),
                                 0, NULL);
    Window view2 = XCreateWindow(display, window,
                                 330, 10, 310, 310, 0,
                                 DefaultDepth(display, screen),
                                 InputOutput,
                                 DefaultVisual(display, screen),
                                 0, NULL);

    // Show our windows
    XMapWindow(display, window);
    XFlush(display);

    // Create our SFML views
    sf::Window sfmlView1(view1);
    sf::Window sfmlView2(view2);

    // Create a clock for measuring elapsed time
    sf::Clock clock;

    // Initialize our views
    initialize(sfmlView1);
    initialize(sfmlView2);

    // Start the event loop
    bool running = true;
    while (running)
    {
        while (XPending(display))
        {
            // Get the next pending event
            XEvent event;
            XNextEvent(display, &event);

            // Process it
            switch (event.type)
            {
                // Any key is pressed: quit
                case KeyPress:
                    running = false;
                    break;
            }
        }

        // Draw something into our views
        draw(sfmlView1, clock.getElapsedTime().asSeconds());
        draw(sfmlView2, clock.getElapsedTime().asSeconds() * 0.3f);

        // Display the views on screen
        sfmlView1.display();
        sfmlView2.display();
    }

    // Close the display
    XCloseDisplay(display);

    return EXIT_SUCCESS;
}
コード例 #2
0
ファイル: X11.cpp プロジェクト: MarioLiebisch/SFML
////////////////////////////////////////////////////////////
/// Entry point of application
///
/// \return Error code
///
////////////////////////////////////////////////////////////
int main()
{
    // Open a connection with the X server
    Display* display = XOpenDisplay(NULL);
    if (!display)
        return EXIT_FAILURE;

    // Get the XCB connection for the opened display.
    xcb_connection_t* xcbConnection = XGetXCBConnection(display);

    if (!xcbConnection)
    {
        sf::err() << "Failed to get the XCB connection for opened display." << std::endl;
        return EXIT_FAILURE;
    }

    // Get XCB screen.
    const xcb_setup_t* xcbSetup = xcb_get_setup(xcbConnection);
    xcb_screen_iterator_t xcbScreenIter = xcb_setup_roots_iterator(xcbSetup);
    xcb_screen_t* screen = xcbScreenIter.data;

    if (!screen)
    {
        sf::err() << "Failed to get the XCB screen." << std::endl;
        return EXIT_FAILURE;
    }

    // Generate the XCB window IDs.
    xcb_window_t rootWindowId = xcb_generate_id(xcbConnection);
    xcb_window_t view1WindowId = xcb_generate_id(xcbConnection);
    xcb_window_t view2WindowId = xcb_generate_id(xcbConnection);

    // Create the root window with a black background.
    uint32_t mask = XCB_CW_BACK_PIXEL | XCB_CW_EVENT_MASK;
    uint32_t attributes[2] = {screen->black_pixel, XCB_EVENT_MASK_KEY_PRESS};

    xcb_create_window(xcbConnection,
                      XCB_COPY_FROM_PARENT,
                      rootWindowId,
                      screen->root,
                      0, 0, 650, 330,
                      0,
                      XCB_WINDOW_CLASS_INPUT_OUTPUT,
                      screen->root_visual,
                      mask, attributes);

    // Create windows for the SFML views.
    xcb_create_window(xcbConnection,
                      XCB_COPY_FROM_PARENT,
                      view1WindowId,
                      rootWindowId,
                      10, 10, 310, 310,
                      0,
                      XCB_WINDOW_CLASS_INPUT_OUTPUT,
                      screen->root_visual,
                      mask, attributes);

    xcb_create_window(xcbConnection,
                      XCB_COPY_FROM_PARENT,
                      view2WindowId,
                      rootWindowId,
                      330, 10, 310, 310,
                      0,
                      XCB_WINDOW_CLASS_INPUT_OUTPUT,
                      screen->root_visual,
                      mask, attributes);

    // Map windows to screen.
    xcb_map_window(xcbConnection, rootWindowId);
    xcb_map_window(xcbConnection, view1WindowId);
    xcb_map_window(xcbConnection, view2WindowId);

    // Flush commands.
    xcb_flush(xcbConnection);

    // Create our SFML views
    sf::Window sfmlView1(view1WindowId);
    sf::Window sfmlView2(view2WindowId);

    // Create a clock for measuring elapsed time
    sf::Clock clock;

    // Initialize our views
    initialize(sfmlView1);
    initialize(sfmlView2);

    // Start the event loop
    bool running = true;
    xcb_generic_event_t* event = NULL;

    while (running)
    {
        while ((event = xcb_poll_for_event(xcbConnection)))
        {
            running = false;
        }

        // Draw something into our views
        draw(sfmlView1, clock.getElapsedTime().asSeconds());
        draw(sfmlView2, clock.getElapsedTime().asSeconds() * 0.3f);

        // Display the views on screen
        sfmlView1.display();
        sfmlView2.display();
    }

    return EXIT_SUCCESS;
}