Skip to content

Commit c42fe6f

Browse files
committed
Merge pull request #95736 from nongvantinh/checkbox-states-colors
Allow changing the color for the Checkbox's checked and unchecked icons
2 parents 9ef22c2 + 4632cfd commit c42fe6f

File tree

7 files changed

+34
-4
lines changed

7 files changed

+34
-4
lines changed

doc/classes/CheckBox.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,12 @@
1515
<member name="toggle_mode" type="bool" setter="set_toggle_mode" getter="is_toggle_mode" overrides="BaseButton" default="true" />
1616
</members>
1717
<theme_items>
18+
<theme_item name="checkbox_checked_color" data_type="color" type="Color" default="Color(1, 1, 1, 1)">
19+
The color of the checked icon when the checkbox is pressed.
20+
</theme_item>
21+
<theme_item name="checkbox_unchecked_color" data_type="color" type="Color" default="Color(1, 1, 1, 1)">
22+
The color of the unchecked icon when the checkbox is not pressed.
23+
</theme_item>
1824
<theme_item name="check_v_offset" data_type="constant" type="int" default="0">
1925
The vertical offset used when rendering the check icons (in pixels).
2026
</theme_item>

doc/classes/CheckButton.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,12 @@
1414
<member name="toggle_mode" type="bool" setter="set_toggle_mode" getter="is_toggle_mode" overrides="BaseButton" default="true" />
1515
</members>
1616
<theme_items>
17+
<theme_item name="button_checked_color" data_type="color" type="Color" default="Color(1, 1, 1, 1)">
18+
The color of the checked icon when the checkbox is pressed.
19+
</theme_item>
20+
<theme_item name="button_unchecked_color" data_type="color" type="Color" default="Color(1, 1, 1, 1)">
21+
The color of the unchecked icon when the checkbox is not pressed.
22+
</theme_item>
1723
<theme_item name="check_v_offset" data_type="constant" type="int" default="0">
1824
The vertical offset used when rendering the toggle icons (in pixels).
1925
</theme_item>

scene/gui/check_box.cpp

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -126,9 +126,9 @@ void CheckBox::_notification(int p_what) {
126126
ofs.y = int((get_size().height - get_icon_size().height) / 2) + theme_cache.check_v_offset;
127127

128128
if (is_pressed()) {
129-
on_tex->draw_rect(ci, Rect2(ofs, _fit_icon_size(on_tex->get_size())));
129+
on_tex->draw_rect(ci, Rect2(ofs, _fit_icon_size(on_tex->get_size())), false, theme_cache.checkbox_checked_color);
130130
} else {
131-
off_tex->draw_rect(ci, Rect2(ofs, _fit_icon_size(off_tex->get_size())));
131+
off_tex->draw_rect(ci, Rect2(ofs, _fit_icon_size(off_tex->get_size())), false, theme_cache.checkbox_unchecked_color);
132132
}
133133
} break;
134134
}
@@ -151,6 +151,9 @@ void CheckBox::_bind_methods() {
151151
BIND_THEME_ITEM(Theme::DATA_TYPE_ICON, CheckBox, unchecked_disabled);
152152
BIND_THEME_ITEM(Theme::DATA_TYPE_ICON, CheckBox, radio_checked_disabled);
153153
BIND_THEME_ITEM(Theme::DATA_TYPE_ICON, CheckBox, radio_unchecked_disabled);
154+
155+
BIND_THEME_ITEM(Theme::DATA_TYPE_COLOR, CheckBox, checkbox_checked_color);
156+
BIND_THEME_ITEM(Theme::DATA_TYPE_COLOR, CheckBox, checkbox_unchecked_color);
154157
}
155158

156159
CheckBox::CheckBox(const String &p_text) :

scene/gui/check_box.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,9 @@ class CheckBox : public Button {
4848
Ref<Texture2D> unchecked_disabled;
4949
Ref<Texture2D> radio_checked_disabled;
5050
Ref<Texture2D> radio_unchecked_disabled;
51+
52+
Color checkbox_checked_color;
53+
Color checkbox_unchecked_color;
5154
} theme_cache;
5255

5356
protected:

scene/gui/check_button.cpp

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -133,9 +133,9 @@ void CheckButton::_notification(int p_what) {
133133
ofs.y = (get_size().height - tex_size.height) / 2 + theme_cache.check_v_offset;
134134

135135
if (is_pressed()) {
136-
on_tex->draw_rect(ci, Rect2(ofs, _fit_icon_size(on_tex->get_size())));
136+
on_tex->draw_rect(ci, Rect2(ofs, _fit_icon_size(on_tex->get_size())), false, theme_cache.button_checked_color);
137137
} else {
138-
off_tex->draw_rect(ci, Rect2(ofs, _fit_icon_size(off_tex->get_size())));
138+
off_tex->draw_rect(ci, Rect2(ofs, _fit_icon_size(off_tex->get_size())), false, theme_cache.button_unchecked_color);
139139
}
140140
} break;
141141
}
@@ -154,6 +154,9 @@ void CheckButton::_bind_methods() {
154154
BIND_THEME_ITEM(Theme::DATA_TYPE_ICON, CheckButton, unchecked_mirrored);
155155
BIND_THEME_ITEM(Theme::DATA_TYPE_ICON, CheckButton, checked_disabled_mirrored);
156156
BIND_THEME_ITEM(Theme::DATA_TYPE_ICON, CheckButton, unchecked_disabled_mirrored);
157+
158+
BIND_THEME_ITEM(Theme::DATA_TYPE_COLOR, CheckButton, button_checked_color);
159+
BIND_THEME_ITEM(Theme::DATA_TYPE_COLOR, CheckButton, button_unchecked_color);
157160
}
158161

159162
CheckButton::CheckButton(const String &p_text) :

scene/gui/check_button.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,9 @@ class CheckButton : public Button {
4848
Ref<Texture2D> unchecked_mirrored;
4949
Ref<Texture2D> checked_disabled_mirrored;
5050
Ref<Texture2D> unchecked_disabled_mirrored;
51+
52+
Color button_checked_color;
53+
Color button_unchecked_color;
5154
} theme_cache;
5255

5356
protected:

scene/theme/default_theme.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -328,6 +328,9 @@ void fill_default_theme(Ref<Theme> &theme, const Ref<Font> &default_font, const
328328
theme->set_constant("check_v_offset", "CheckBox", 0);
329329
theme->set_constant("outline_size", "CheckBox", 0);
330330

331+
theme->set_color("checkbox_checked_color", "CheckBox", Color(1, 1, 1));
332+
theme->set_color("checkbox_unchecked_color", "CheckBox", Color(1, 1, 1));
333+
331334
// CheckButton
332335

333336
Ref<StyleBox> cb_empty = memnew(StyleBoxEmpty);
@@ -365,6 +368,9 @@ void fill_default_theme(Ref<Theme> &theme, const Ref<Font> &default_font, const
365368
theme->set_constant("check_v_offset", "CheckButton", 0);
366369
theme->set_constant("outline_size", "CheckButton", 0);
367370

371+
theme->set_color("button_checked_color", "CheckButton", Color(1, 1, 1));
372+
theme->set_color("button_unchecked_color", "CheckButton", Color(1, 1, 1));
373+
368374
// Button variations
369375

370376
theme->set_type_variation(SceneStringName(FlatButton), "Button");

0 commit comments

Comments
 (0)