Пример #1
0
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;
}
Пример #2
0
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;
}
Пример #3
0
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;
}
Пример #4
0
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 );
	}
}
Пример #5
0
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;
}