Add a h_separation
between icons in CheckButton
/CheckBox
Previously, the `h_separation` between internal elements and custom elements was added when `text` was not empty. That is, this `h_separation` does not exist when there is a valid custom `icon` but `text` is empty. Now, the `h_separation` between the internal element and the custom element is added when the internal element and any custom element exist (both width are greater than `0`).
This commit is contained in:
parent
652438a395
commit
5de496d3b0
5 changed files with 27 additions and 26 deletions
|
@ -50,10 +50,6 @@ void Button::_set_internal_margin(Side p_side, float p_value) {
|
||||||
void Button::_queue_update_size_cache() {
|
void Button::_queue_update_size_cache() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void Button::_set_h_separation_is_valid_when_no_text(bool p_h_separation_is_valid_when_no_text) {
|
|
||||||
h_separation_is_valid_when_no_text = p_h_separation_is_valid_when_no_text;
|
|
||||||
}
|
|
||||||
|
|
||||||
Ref<StyleBox> Button::_get_current_stylebox() const {
|
Ref<StyleBox> Button::_get_current_stylebox() const {
|
||||||
Ref<StyleBox> stylebox = theme_cache.normal;
|
Ref<StyleBox> stylebox = theme_cache.normal;
|
||||||
const bool rtl = is_layout_rtl();
|
const bool rtl = is_layout_rtl();
|
||||||
|
@ -171,7 +167,6 @@ void Button::_notification(int p_what) {
|
||||||
float right_internal_margin_with_h_separation = _internal_margin[SIDE_RIGHT];
|
float right_internal_margin_with_h_separation = _internal_margin[SIDE_RIGHT];
|
||||||
{ // The width reserved for internal element in derived classes (and h_separation if need).
|
{ // The width reserved for internal element in derived classes (and h_separation if need).
|
||||||
|
|
||||||
if (!xl_text.is_empty() || h_separation_is_valid_when_no_text) {
|
|
||||||
if (_internal_margin[SIDE_LEFT] > 0.0f) {
|
if (_internal_margin[SIDE_LEFT] > 0.0f) {
|
||||||
left_internal_margin_with_h_separation += h_separation;
|
left_internal_margin_with_h_separation += h_separation;
|
||||||
}
|
}
|
||||||
|
@ -179,7 +174,6 @@ void Button::_notification(int p_what) {
|
||||||
if (_internal_margin[SIDE_RIGHT] > 0.0f) {
|
if (_internal_margin[SIDE_RIGHT] > 0.0f) {
|
||||||
right_internal_margin_with_h_separation += h_separation;
|
right_internal_margin_with_h_separation += h_separation;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
drawable_size_remained.width -= left_internal_margin_with_h_separation + right_internal_margin_with_h_separation; // The size after the internal element is stripped.
|
drawable_size_remained.width -= left_internal_margin_with_h_separation + right_internal_margin_with_h_separation; // The size after the internal element is stripped.
|
||||||
}
|
}
|
||||||
|
|
|
@ -55,8 +55,6 @@ private:
|
||||||
VerticalAlignment vertical_icon_alignment = VERTICAL_ALIGNMENT_CENTER;
|
VerticalAlignment vertical_icon_alignment = VERTICAL_ALIGNMENT_CENTER;
|
||||||
float _internal_margin[4] = {};
|
float _internal_margin[4] = {};
|
||||||
|
|
||||||
bool h_separation_is_valid_when_no_text = false;
|
|
||||||
|
|
||||||
struct ThemeCache {
|
struct ThemeCache {
|
||||||
Ref<StyleBox> normal;
|
Ref<StyleBox> normal;
|
||||||
Ref<StyleBox> normal_mirrored;
|
Ref<StyleBox> normal_mirrored;
|
||||||
|
@ -104,7 +102,6 @@ protected:
|
||||||
void _set_internal_margin(Side p_side, float p_value);
|
void _set_internal_margin(Side p_side, float p_value);
|
||||||
virtual void _queue_update_size_cache();
|
virtual void _queue_update_size_cache();
|
||||||
|
|
||||||
void _set_h_separation_is_valid_when_no_text(bool p_h_separation_is_valid_when_no_text);
|
|
||||||
Ref<StyleBox> _get_current_stylebox() const;
|
Ref<StyleBox> _get_current_stylebox() const;
|
||||||
void _notification(int p_what);
|
void _notification(int p_what);
|
||||||
static void _bind_methods();
|
static void _bind_methods();
|
||||||
|
|
|
@ -64,12 +64,18 @@ Size2 CheckBox::get_icon_size() const {
|
||||||
|
|
||||||
Size2 CheckBox::get_minimum_size() const {
|
Size2 CheckBox::get_minimum_size() const {
|
||||||
Size2 minsize = Button::get_minimum_size();
|
Size2 minsize = Button::get_minimum_size();
|
||||||
Size2 tex_size = get_icon_size();
|
const Size2 tex_size = get_icon_size();
|
||||||
minsize.width += tex_size.width;
|
if (tex_size.width > 0 || tex_size.height > 0) {
|
||||||
if (get_text().length() > 0) {
|
const Size2 padding = _get_current_stylebox()->get_minimum_size();
|
||||||
minsize.width += MAX(0, theme_cache.h_separation);
|
Size2 content_size = minsize - padding;
|
||||||
|
if (content_size.width > 0 && tex_size.width > 0) {
|
||||||
|
content_size.width += MAX(0, theme_cache.h_separation);
|
||||||
|
}
|
||||||
|
content_size.width += tex_size.width;
|
||||||
|
content_size.height = MAX(content_size.height, tex_size.height);
|
||||||
|
|
||||||
|
minsize = content_size + padding;
|
||||||
}
|
}
|
||||||
minsize.height = MAX(minsize.height, tex_size.height + theme_cache.normal_style->get_margin(SIDE_TOP) + theme_cache.normal_style->get_margin(SIDE_BOTTOM));
|
|
||||||
|
|
||||||
return minsize;
|
return minsize;
|
||||||
}
|
}
|
||||||
|
|
|
@ -68,12 +68,18 @@ Size2 CheckButton::get_icon_size() const {
|
||||||
|
|
||||||
Size2 CheckButton::get_minimum_size() const {
|
Size2 CheckButton::get_minimum_size() const {
|
||||||
Size2 minsize = Button::get_minimum_size();
|
Size2 minsize = Button::get_minimum_size();
|
||||||
Size2 tex_size = get_icon_size();
|
const Size2 tex_size = get_icon_size();
|
||||||
minsize.width += tex_size.width;
|
if (tex_size.width > 0 || tex_size.height > 0) {
|
||||||
if (get_text().length() > 0) {
|
const Size2 padding = _get_current_stylebox()->get_minimum_size();
|
||||||
minsize.width += MAX(0, theme_cache.h_separation);
|
Size2 content_size = minsize - padding;
|
||||||
|
if (content_size.width > 0 && tex_size.width > 0) {
|
||||||
|
content_size.width += MAX(0, theme_cache.h_separation);
|
||||||
|
}
|
||||||
|
content_size.width += tex_size.width;
|
||||||
|
content_size.height = MAX(content_size.height, tex_size.height);
|
||||||
|
|
||||||
|
minsize = content_size + padding;
|
||||||
}
|
}
|
||||||
minsize.height = MAX(minsize.height, tex_size.height + theme_cache.normal_style->get_margin(SIDE_TOP) + theme_cache.normal_style->get_margin(SIDE_BOTTOM));
|
|
||||||
|
|
||||||
return minsize;
|
return minsize;
|
||||||
}
|
}
|
||||||
|
|
|
@ -614,8 +614,6 @@ void OptionButton::set_disable_shortcuts(bool p_disabled) {
|
||||||
|
|
||||||
OptionButton::OptionButton(const String &p_text) :
|
OptionButton::OptionButton(const String &p_text) :
|
||||||
Button(p_text) {
|
Button(p_text) {
|
||||||
_set_h_separation_is_valid_when_no_text(true);
|
|
||||||
|
|
||||||
set_toggle_mode(true);
|
set_toggle_mode(true);
|
||||||
set_process_shortcut_input(true);
|
set_process_shortcut_input(true);
|
||||||
set_text_alignment(HORIZONTAL_ALIGNMENT_LEFT);
|
set_text_alignment(HORIZONTAL_ALIGNMENT_LEFT);
|
||||||
|
|
Loading…
Reference in a new issue