void GuessMyNumber::Run() { sf::RenderWindow render_window( sf::VideoMode( 1024, 768, 32 ), TITLE, sf::Style::Titlebar | sf::Style::Close ); sf::Event event; // We have to do this because we don't use SFML to draw. render_window.resetGLStates(); // Create widgets. sfg::Window::Ptr window( sfg::Window::Create() ); window->SetTitle( TITLE ); sfg::Button::Ptr new_game_button( sfg::Button::Create( "New game" ) ); new_game_button->GetSignal( sfg::Widget::OnLeftClick ).Connect( &GuessMyNumber::OnNewGameClick, this ); m_guess_button->SetId( "guess" ); m_guess_button->GetSignal( sfg::Widget::OnLeftClick ).Connect( &GuessMyNumber::OnGuessClick, this ); // Layout. sfg::Table::Ptr table( sfg::Table::Create() ); table->Attach( sfg::Label::Create( "Your guess:" ), sf::Rect<sf::Uint32>( 0, 0, 1, 1 ), sfg::Table::FILL, sfg::Table::FILL ); table->Attach( m_number_entry, sf::Rect<sf::Uint32>( 1, 0, 1, 1 ) ); table->Attach( sfg::Label::Create( "Tries:" ), sf::Rect<sf::Uint32>( 0, 1, 1, 1 ), sfg::Table::FILL, sfg::Table::FILL ); table->Attach( m_tries_label, sf::Rect<sf::Uint32>( 1, 1, 1, 1 ) ); table->Attach( sfg::Label::Create( "Hint:" ), sf::Rect<sf::Uint32>( 0, 2, 1, 1 ), sfg::Table::FILL, sfg::Table::FILL ); table->Attach( m_hint_label, sf::Rect<sf::Uint32>( 1, 2, 1, 1 ) ); table->SetColumnSpacings( 5.f ); table->SetRowSpacings( 5.f ); sfg::Box::Ptr buttons_box( sfg::Box::Create( sfg::Box::HORIZONTAL, 5.f ) ); buttons_box->Pack( new_game_button ); buttons_box->Pack( m_guess_button ); sfg::Box::Ptr content_vbox( sfg::Box::Create( sfg::Box::VERTICAL, 5.f ) ); content_vbox->Pack( sfg::Label::Create( "Guess my number, it's from 1 to 100!" ) ); content_vbox->Pack( table ); content_vbox->Pack( buttons_box ); window->Add( content_vbox ); ResetGame(); window->SetPosition( sf::Vector2f( static_cast<float>( render_window.getSize().x / 2 ) - window->GetAllocation().width / 2.f, static_cast<float>( render_window.getSize().y / 2 ) - window->GetAllocation().height / 2.f ) ); // Custom properties. sfg::Context::Get().GetEngine().SetProperty( "Button#guess", "BackgroundColor", sf::Color( 0, 100, 0 ) ); sfg::Context::Get().GetEngine().SetProperty( "Button#guess", "BorderColor", sf::Color( 0, 100, 0 ) ); sfg::Context::Get().GetEngine().SetProperty( "Button#guess:Prelight", "BackgroundColor", sf::Color( 0, 130, 0 ) ); sfg::Context::Get().GetEngine().SetProperty( "Button#guess:Prelight", "BorderColor", sf::Color( 0, 130, 0 ) ); sfg::Context::Get().GetEngine().SetProperty( "Button#guess > Label", "FontSize", 20.f ); // Make sure all properties are applied. window->Refresh(); while( render_window.isOpen() ) { while( render_window.pollEvent( event ) ) { if( (event.type == sf::Event::KeyPressed && event.key.code == sf::Keyboard::Escape) || event.type == sf::Event::Closed ) { render_window.close(); } window->HandleEvent( event ); } window->Update( 0.f ); render_window.clear(); m_sfgui.Display( render_window ); render_window.display(); } }