Changing mouse cursor on button hover

TGUI 0.7 is no longer supported, use a newer TGUI version instead.

This codes how to easily change the cursor image when hovering over a button.

#include <TGUI/TGUI.hpp>

int main()
{
    sf::RenderWindow window{sf::VideoMode{300, 400}, "TGUI window"};
    tgui::Gui gui{window};

    // Make the real cursor invisible inside the application
    window.setMouseCursorVisible(false);

    // Load the texture that will be used as cursor
    sf::Texture textureCursorNormal;
    textureCursorNormal.loadFromFile("CursorNormal.png");

    // Load the texture that will be used as cursor when the mouse is on top of one of the buttons
    sf::Texture textureCursorHover;
    textureCursorHover.loadFromFile("CursorHover.png");

    // Show the normal cursor by default
    sf::Sprite sprite(textureCursorNormal);

    auto play = tgui::Button::create();
    play->setPosition(tgui::bindWidth(gui)*0.15, tgui::bindHeight(gui)*0.125);
    play->setSize(tgui::bindWidth(gui)*0.7, tgui::bindHeight(gui)*0.15);
    play->setText("Play");
    gui.add(play);

    // When the mouse enters or leaves the button, the mouse cursor should change.
    // We only have to do this for one button, since the others will be copies of this one.
    play->connect("MouseEntered", [&](){ sprite.setTexture(textureCursorHover); });
    play->connect("MouseLeft", [&](){ sprite.setTexture(textureCursorNormal); });

    auto load = tgui::Button::copy(play);
    load->setPosition(tgui::bindWidth(gui)*0.15, tgui::bindHeight(gui)*0.425);
    load->setText("Load");
    gui.add(load);

    auto exit = tgui::Button::copy(play);
    exit->setPosition(tgui::bindWidth(gui)*0.15, tgui::bindHeight(gui)*0.725);
    exit->setText("Exit");
    gui.add(exit);

    while (window.isOpen())
    {
        sf::Event event;
        while (window.pollEvent(event))
        {
            // Reposition the sprite when the mouse moves
            if (event.type == sf::Event::MouseMoved)
                sprite.setPosition(window.mapPixelToCoords({event.mouseMove.x, event.mouseMove.y}));

            else if (event.type == sf::Event::Closed)
                window.close();

            gui.handleEvent(event);
        }

        window.clear();

        // Draw the buttons
        gui.draw();

        // Draw the cursor
        window.draw(sprite);

        window.display();
    }

    return EXIT_SUCCESS;
}