Skip to content

Commit 4632cfd

Browse files
committed
Allow modification of the color for the checkbox's checked and unchecked icons
Occasionally, the default white color for the icon does not meet our needs, and we would like to change it. However, the CheckBox does not currently have a mechanism to modify this color.
1 parent b9437c3 commit 4632cfd

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
@@ -127,9 +127,9 @@ void CheckBox::_notification(int p_what) {
127127
ofs.y = int((get_size().height - get_icon_size().height) / 2) + theme_cache.check_v_offset;
128128

129129
if (is_pressed()) {
130-
on_tex->draw_rect(ci, Rect2(ofs, _fit_icon_size(on_tex->get_size())));
130+
on_tex->draw_rect(ci, Rect2(ofs, _fit_icon_size(on_tex->get_size())), false, theme_cache.checkbox_checked_color);
131131
} else {
132-
off_tex->draw_rect(ci, Rect2(ofs, _fit_icon_size(off_tex->get_size())));
132+
off_tex->draw_rect(ci, Rect2(ofs, _fit_icon_size(off_tex->get_size())), false, theme_cache.checkbox_unchecked_color);
133133
}
134134
} break;
135135
}
@@ -152,6 +152,9 @@ void CheckBox::_bind_methods() {
152152
BIND_THEME_ITEM(Theme::DATA_TYPE_ICON, CheckBox, unchecked_disabled);
153153
BIND_THEME_ITEM(Theme::DATA_TYPE_ICON, CheckBox, radio_checked_disabled);
154154
BIND_THEME_ITEM(Theme::DATA_TYPE_ICON, CheckBox, radio_unchecked_disabled);
155+
156+
BIND_THEME_ITEM(Theme::DATA_TYPE_COLOR, CheckBox, checkbox_checked_color);
157+
BIND_THEME_ITEM(Theme::DATA_TYPE_COLOR, CheckBox, checkbox_unchecked_color);
155158
}
156159

157160
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
@@ -49,6 +49,9 @@ class CheckBox : public Button {
4949
Ref<Texture2D> unchecked_disabled;
5050
Ref<Texture2D> radio_checked_disabled;
5151
Ref<Texture2D> radio_unchecked_disabled;
52+
53+
Color checkbox_checked_color;
54+
Color checkbox_unchecked_color;
5255
} theme_cache;
5356

5457
protected:

scene/gui/check_button.cpp

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

136136
if (is_pressed()) {
137-
on_tex->draw_rect(ci, Rect2(ofs, _fit_icon_size(on_tex->get_size())));
137+
on_tex->draw_rect(ci, Rect2(ofs, _fit_icon_size(on_tex->get_size())), false, theme_cache.button_checked_color);
138138
} else {
139-
off_tex->draw_rect(ci, Rect2(ofs, _fit_icon_size(off_tex->get_size())));
139+
off_tex->draw_rect(ci, Rect2(ofs, _fit_icon_size(off_tex->get_size())), false, theme_cache.button_unchecked_color);
140140
}
141141
} break;
142142
}
@@ -155,6 +155,9 @@ void CheckButton::_bind_methods() {
155155
BIND_THEME_ITEM(Theme::DATA_TYPE_ICON, CheckButton, unchecked_mirrored);
156156
BIND_THEME_ITEM(Theme::DATA_TYPE_ICON, CheckButton, checked_disabled_mirrored);
157157
BIND_THEME_ITEM(Theme::DATA_TYPE_ICON, CheckButton, unchecked_disabled_mirrored);
158+
159+
BIND_THEME_ITEM(Theme::DATA_TYPE_COLOR, CheckButton, button_checked_color);
160+
BIND_THEME_ITEM(Theme::DATA_TYPE_COLOR, CheckButton, button_unchecked_color);
158161
}
159162

160163
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
@@ -49,6 +49,9 @@ class CheckButton : public Button {
4949
Ref<Texture2D> unchecked_mirrored;
5050
Ref<Texture2D> checked_disabled_mirrored;
5151
Ref<Texture2D> unchecked_disabled_mirrored;
52+
53+
Color button_checked_color;
54+
Color button_unchecked_color;
5255
} theme_cache;
5356

5457
protected:

scene/theme/default_theme.cpp

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

329+
theme->set_color("checkbox_checked_color", "CheckBox", Color(1, 1, 1));
330+
theme->set_color("checkbox_unchecked_color", "CheckBox", Color(1, 1, 1));
331+
329332
// CheckButton
330333

331334
Ref<StyleBox> cb_empty = memnew(StyleBoxEmpty);
@@ -363,6 +366,9 @@ void fill_default_theme(Ref<Theme> &theme, const Ref<Font> &default_font, const
363366
theme->set_constant("check_v_offset", "CheckButton", 0);
364367
theme->set_constant("outline_size", "CheckButton", 0);
365368

369+
theme->set_color("button_checked_color", "CheckButton", Color(1, 1, 1));
370+
theme->set_color("button_unchecked_color", "CheckButton", Color(1, 1, 1));
371+
366372
// Button variations
367373

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

0 commit comments

Comments
 (0)