1
0
mirror of https://github.com/godotengine/godot.git synced 2025-11-09 12:50:35 +00:00

Merge pull request #95736 from nongvantinh/checkbox-states-colors

Allow changing the color for the Checkbox's checked and unchecked icons
This commit is contained in:
Thaddeus Crews
2025-03-10 10:01:18 -05:00
7 changed files with 34 additions and 4 deletions

View File

@@ -15,6 +15,12 @@
<member name="toggle_mode" type="bool" setter="set_toggle_mode" getter="is_toggle_mode" overrides="BaseButton" default="true" /> <member name="toggle_mode" type="bool" setter="set_toggle_mode" getter="is_toggle_mode" overrides="BaseButton" default="true" />
</members> </members>
<theme_items> <theme_items>
<theme_item name="checkbox_checked_color" data_type="color" type="Color" default="Color(1, 1, 1, 1)">
The color of the checked icon when the checkbox is pressed.
</theme_item>
<theme_item name="checkbox_unchecked_color" data_type="color" type="Color" default="Color(1, 1, 1, 1)">
The color of the unchecked icon when the checkbox is not pressed.
</theme_item>
<theme_item name="check_v_offset" data_type="constant" type="int" default="0"> <theme_item name="check_v_offset" data_type="constant" type="int" default="0">
The vertical offset used when rendering the check icons (in pixels). The vertical offset used when rendering the check icons (in pixels).
</theme_item> </theme_item>

View File

@@ -14,6 +14,12 @@
<member name="toggle_mode" type="bool" setter="set_toggle_mode" getter="is_toggle_mode" overrides="BaseButton" default="true" /> <member name="toggle_mode" type="bool" setter="set_toggle_mode" getter="is_toggle_mode" overrides="BaseButton" default="true" />
</members> </members>
<theme_items> <theme_items>
<theme_item name="button_checked_color" data_type="color" type="Color" default="Color(1, 1, 1, 1)">
The color of the checked icon when the checkbox is pressed.
</theme_item>
<theme_item name="button_unchecked_color" data_type="color" type="Color" default="Color(1, 1, 1, 1)">
The color of the unchecked icon when the checkbox is not pressed.
</theme_item>
<theme_item name="check_v_offset" data_type="constant" type="int" default="0"> <theme_item name="check_v_offset" data_type="constant" type="int" default="0">
The vertical offset used when rendering the toggle icons (in pixels). The vertical offset used when rendering the toggle icons (in pixels).
</theme_item> </theme_item>

View File

@@ -126,9 +126,9 @@ void CheckBox::_notification(int p_what) {
ofs.y = int((get_size().height - get_icon_size().height) / 2) + theme_cache.check_v_offset; ofs.y = int((get_size().height - get_icon_size().height) / 2) + theme_cache.check_v_offset;
if (is_pressed()) { if (is_pressed()) {
on_tex->draw_rect(ci, Rect2(ofs, _fit_icon_size(on_tex->get_size()))); on_tex->draw_rect(ci, Rect2(ofs, _fit_icon_size(on_tex->get_size())), false, theme_cache.checkbox_checked_color);
} else { } else {
off_tex->draw_rect(ci, Rect2(ofs, _fit_icon_size(off_tex->get_size()))); off_tex->draw_rect(ci, Rect2(ofs, _fit_icon_size(off_tex->get_size())), false, theme_cache.checkbox_unchecked_color);
} }
} break; } break;
} }
@@ -151,6 +151,9 @@ void CheckBox::_bind_methods() {
BIND_THEME_ITEM(Theme::DATA_TYPE_ICON, CheckBox, unchecked_disabled); BIND_THEME_ITEM(Theme::DATA_TYPE_ICON, CheckBox, unchecked_disabled);
BIND_THEME_ITEM(Theme::DATA_TYPE_ICON, CheckBox, radio_checked_disabled); BIND_THEME_ITEM(Theme::DATA_TYPE_ICON, CheckBox, radio_checked_disabled);
BIND_THEME_ITEM(Theme::DATA_TYPE_ICON, CheckBox, radio_unchecked_disabled); BIND_THEME_ITEM(Theme::DATA_TYPE_ICON, CheckBox, radio_unchecked_disabled);
BIND_THEME_ITEM(Theme::DATA_TYPE_COLOR, CheckBox, checkbox_checked_color);
BIND_THEME_ITEM(Theme::DATA_TYPE_COLOR, CheckBox, checkbox_unchecked_color);
} }
CheckBox::CheckBox(const String &p_text) : CheckBox::CheckBox(const String &p_text) :

View File

@@ -48,6 +48,9 @@ class CheckBox : public Button {
Ref<Texture2D> unchecked_disabled; Ref<Texture2D> unchecked_disabled;
Ref<Texture2D> radio_checked_disabled; Ref<Texture2D> radio_checked_disabled;
Ref<Texture2D> radio_unchecked_disabled; Ref<Texture2D> radio_unchecked_disabled;
Color checkbox_checked_color;
Color checkbox_unchecked_color;
} theme_cache; } theme_cache;
protected: protected:

View File

@@ -133,9 +133,9 @@ void CheckButton::_notification(int p_what) {
ofs.y = (get_size().height - tex_size.height) / 2 + theme_cache.check_v_offset; ofs.y = (get_size().height - tex_size.height) / 2 + theme_cache.check_v_offset;
if (is_pressed()) { if (is_pressed()) {
on_tex->draw_rect(ci, Rect2(ofs, _fit_icon_size(on_tex->get_size()))); on_tex->draw_rect(ci, Rect2(ofs, _fit_icon_size(on_tex->get_size())), false, theme_cache.button_checked_color);
} else { } else {
off_tex->draw_rect(ci, Rect2(ofs, _fit_icon_size(off_tex->get_size()))); off_tex->draw_rect(ci, Rect2(ofs, _fit_icon_size(off_tex->get_size())), false, theme_cache.button_unchecked_color);
} }
} break; } break;
} }
@@ -154,6 +154,9 @@ void CheckButton::_bind_methods() {
BIND_THEME_ITEM(Theme::DATA_TYPE_ICON, CheckButton, unchecked_mirrored); BIND_THEME_ITEM(Theme::DATA_TYPE_ICON, CheckButton, unchecked_mirrored);
BIND_THEME_ITEM(Theme::DATA_TYPE_ICON, CheckButton, checked_disabled_mirrored); BIND_THEME_ITEM(Theme::DATA_TYPE_ICON, CheckButton, checked_disabled_mirrored);
BIND_THEME_ITEM(Theme::DATA_TYPE_ICON, CheckButton, unchecked_disabled_mirrored); BIND_THEME_ITEM(Theme::DATA_TYPE_ICON, CheckButton, unchecked_disabled_mirrored);
BIND_THEME_ITEM(Theme::DATA_TYPE_COLOR, CheckButton, button_checked_color);
BIND_THEME_ITEM(Theme::DATA_TYPE_COLOR, CheckButton, button_unchecked_color);
} }
CheckButton::CheckButton(const String &p_text) : CheckButton::CheckButton(const String &p_text) :

View File

@@ -48,6 +48,9 @@ class CheckButton : public Button {
Ref<Texture2D> unchecked_mirrored; Ref<Texture2D> unchecked_mirrored;
Ref<Texture2D> checked_disabled_mirrored; Ref<Texture2D> checked_disabled_mirrored;
Ref<Texture2D> unchecked_disabled_mirrored; Ref<Texture2D> unchecked_disabled_mirrored;
Color button_checked_color;
Color button_unchecked_color;
} theme_cache; } theme_cache;
protected: protected:

View File

@@ -328,6 +328,9 @@ void fill_default_theme(Ref<Theme> &theme, const Ref<Font> &default_font, const
theme->set_constant("check_v_offset", "CheckBox", 0); theme->set_constant("check_v_offset", "CheckBox", 0);
theme->set_constant("outline_size", "CheckBox", 0); theme->set_constant("outline_size", "CheckBox", 0);
theme->set_color("checkbox_checked_color", "CheckBox", Color(1, 1, 1));
theme->set_color("checkbox_unchecked_color", "CheckBox", Color(1, 1, 1));
// CheckButton // CheckButton
Ref<StyleBox> cb_empty = memnew(StyleBoxEmpty); Ref<StyleBox> cb_empty = memnew(StyleBoxEmpty);
@@ -365,6 +368,9 @@ void fill_default_theme(Ref<Theme> &theme, const Ref<Font> &default_font, const
theme->set_constant("check_v_offset", "CheckButton", 0); theme->set_constant("check_v_offset", "CheckButton", 0);
theme->set_constant("outline_size", "CheckButton", 0); theme->set_constant("outline_size", "CheckButton", 0);
theme->set_color("button_checked_color", "CheckButton", Color(1, 1, 1));
theme->set_color("button_unchecked_color", "CheckButton", Color(1, 1, 1));
// Button variations // Button variations
theme->set_type_variation(SceneStringName(FlatButton), "Button"); theme->set_type_variation(SceneStringName(FlatButton), "Button");