sf::Vector2f Window::CalculateRequisition() { float visual_border_width( Context::Get().GetEngine().GetProperty<float>( "BorderWidth", shared_from_this() ) ); float gap( Context::Get().GetEngine().GetProperty<float>( "Gap", shared_from_this() ) ); sf::Vector2f requisition( 2 * visual_border_width + 2 * gap, 2 * visual_border_width + 2 * gap ); if( HasStyle( TITLEBAR ) ) { unsigned int title_font_size( Context::Get().GetEngine().GetProperty<unsigned int>( "FontSize", shared_from_this() ) ); const sf::Font& title_font( *Context::Get().GetEngine().GetResourceManager().GetFont( Context::Get().GetEngine().GetProperty<std::string>( "FontName", shared_from_this() ) ) ); float title_height( Context::Get().GetEngine().GetFontLineHeight( title_font, title_font_size ) + 2 * Context::Get().GetEngine().GetProperty<float>( "TitlePadding", shared_from_this() ) ); requisition.y += title_height; } if( GetChild() ) { requisition += GetChild()->GetRequisition(); } else { requisition.x = std::max( 50.f, requisition.x ); requisition.y = std::max( 50.f, requisition.y * 2.f ); } return requisition; }
sf::Vector2f Window::GetRequisitionImpl() const { sf::Vector2f requisition( 2 * GetBorderWidth(), 2 * GetBorderWidth() ); if( HasStyle( Titlebar ) ) { float visual_border_width( Context::Get().GetEngine().GetProperty<float>( "BorderWidth", shared_from_this() ) ); float title_height( Context::Get().GetEngine().GetProperty<float>( "TitleHeight", shared_from_this() ) ); requisition.x += visual_border_width; requisition.y += visual_border_width + title_height; } if( GetChild() ) { requisition += GetChild()->GetRequisition(); } else { requisition.x = std::max( 50.f, requisition.x ); requisition.y = std::max( 50.f, requisition.y * 2.f ); } return requisition; }
sf::Vector2f Box::CalculateRequisition() { sf::Vector2f requisition( 0.f, 0.f ); unsigned int num_visible( 0 ); ChildrenCont::const_iterator iter( m_children.begin() ); ChildrenCont::const_iterator iterend( m_children.end() ); for( ; iter != iterend; ++iter ) { if( !IsChildInteresting( iter->widget ) ) { continue; } ++num_visible; sf::Vector2f child_requisition( iter->widget->GetRequisition() ); if( m_orientation == HORIZONTAL ) { requisition.x += child_requisition.x; requisition.y = std::max( requisition.y, child_requisition.y ); } else { requisition.x = std::max( requisition.x, child_requisition.x ); requisition.y += child_requisition.y; } } if( num_visible > 1 ) { if( m_orientation == HORIZONTAL ) { requisition.x += static_cast<float>( num_visible - 1 ) * GetSpacing(); } else { requisition.y += static_cast<float>( num_visible - 1 ) * GetSpacing(); } } float gap( Context::Get().GetEngine().GetProperty<float>( "Gap", shared_from_this() ) ); requisition.x += 2 * gap; requisition.y += 2 * gap; return requisition; }
void Widget::RequestSize() const { m_recalc_requisition = true; Container::Ptr parent = m_parent.lock(); // Notify observers. OnSizeRequest(); if( parent ) { parent->RequestSize(); } else { sf::Vector2f requisition( GetRequisition() ); sf::FloatRect allocation( GetAllocation().Left, GetAllocation().Top, std::max( GetAllocation().Width, requisition.x ), std::max( GetAllocation().Height, requisition.y ) ); AllocateSize( allocation ); } }
sf::Vector2f ComboBox::CalculateRequisition() { float padding( Context::Get().GetEngine().GetProperty<float>( "ItemPadding", shared_from_this() ) ); const std::string& font_name( Context::Get().GetEngine().GetProperty<std::string>( "FontName", shared_from_this() ) ); unsigned int font_size( Context::Get().GetEngine().GetProperty<unsigned int>( "FontSize", shared_from_this() ) ); const sf::Font& font( *Context::Get().GetEngine().GetResourceManager().GetFont( font_name ) ); // Determine highest needed width of all items. sf::Vector2f metrics( 0.f, 0.f ); for ( IndexType item = 0; item < GetItemCount(); ++item ) { metrics.x = std::max( metrics.x, Context::Get().GetEngine().GetTextStringMetrics( m_entries[static_cast<std::size_t>( item )], font, font_size ).x ); } metrics.y = Context::Get().GetEngine().GetFontLineHeight( font, font_size ); // This is needed for the arrow. metrics.x += metrics.y; sf::Vector2f requisition( metrics.x + 3 * padding, metrics.y + 2 * padding ); return requisition; }