void styled_widget::request_reduce_width(const unsigned maximum_width) { assert(config_); if(!label_.empty() && can_wrap()) { point size = get_best_text_size( point(), point(maximum_width - config_->text_extra_width, 0)); size.x += config_->text_extra_width; size.y += config_->text_extra_height; set_layout_size(size); DBG_GUI_L << LOG_HEADER << " label '" << debug_truncate(label_) << "' maximum_width " << maximum_width << " result " << size << ".\n"; } else if(label_.empty()) { point size = get_best_size(); point min_size = get_config_minimum_size(); size.x = std::min(size.x, std::max<int>(maximum_width, min_size.x)); set_layout_size(size); DBG_GUI_L << LOG_HEADER << " styled_widget " << id() << " maximum_width " << maximum_width << " result " << size << ".\n"; } else { DBG_GUI_L << LOG_HEADER << " label '" << debug_truncate(label_) << "' failed; either no label or wrapping not allowed.\n"; } }
tpoint tcontainer_::calculate_best_size() const { log_scope2(log_gui_layout, LOG_SCOPE_HEADER); tpoint result(grid_.get_best_size()); const tpoint border_size = border_space(); const tpoint minimum_size = get_config_minimum_size(); // If the best size has a value of 0 it's means no limit so don't // add the border_size might set a very small best size. if(result.x) { result.x += border_size.x; } if(minimum_size.x != 0 && result.x < minimum_size.x) { result.x = minimum_size.x; } if(result.y) { result.y += border_size.y; } if(minimum_size.y != 0 && result.y < minimum_size.y) { result.y = minimum_size.y; } DBG_GUI_L << LOG_HEADER << " border size " << border_size << " returning " << result << ".\n"; return result; }
void styled_widget::request_reduce_height(const unsigned maximum_height) { if(!label_.empty()) { // Do nothing } else { point size = get_best_size(); point min_size = get_config_minimum_size(); size.y = std::min(size.y, std::max<int>(maximum_height, min_size.y)); set_layout_size(size); DBG_GUI_L << LOG_HEADER << " styled_widget " << id() << " maximum_height " << maximum_height << " result " << size << ".\n"; } }