Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
godotengine
GitHub Repository: godotengine/godot
Path: blob/master/scene/theme/default_theme.cpp
20871 views
1
/**************************************************************************/
2
/* default_theme.cpp */
3
/**************************************************************************/
4
/* This file is part of: */
5
/* GODOT ENGINE */
6
/* https://godotengine.org */
7
/**************************************************************************/
8
/* Copyright (c) 2014-present Godot Engine contributors (see AUTHORS.md). */
9
/* Copyright (c) 2007-2014 Juan Linietsky, Ariel Manzur. */
10
/* */
11
/* Permission is hereby granted, free of charge, to any person obtaining */
12
/* a copy of this software and associated documentation files (the */
13
/* "Software"), to deal in the Software without restriction, including */
14
/* without limitation the rights to use, copy, modify, merge, publish, */
15
/* distribute, sublicense, and/or sell copies of the Software, and to */
16
/* permit persons to whom the Software is furnished to do so, subject to */
17
/* the following conditions: */
18
/* */
19
/* The above copyright notice and this permission notice shall be */
20
/* included in all copies or substantial portions of the Software. */
21
/* */
22
/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
23
/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
24
/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. */
25
/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
26
/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
27
/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
28
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
29
/**************************************************************************/
30
31
#include "default_theme.h"
32
33
#include "core/io/image.h"
34
#include "scene/resources/dpi_texture.h"
35
#include "scene/resources/font.h"
36
#include "scene/resources/gradient_texture.h"
37
#include "scene/resources/image_texture.h"
38
#include "scene/resources/style_box_flat.h"
39
#include "scene/resources/style_box_line.h"
40
#include "scene/resources/theme.h"
41
#include "scene/scene_string_names.h"
42
#include "scene/theme/default_theme_icons.gen.h"
43
#include "scene/theme/theme_db.h"
44
#include "servers/text/text_server.h"
45
46
#ifdef BROTLI_ENABLED
47
#include "scene/theme/default_font.gen.h"
48
#endif
49
50
static const int default_font_size = 16;
51
52
static float scale = 1.0;
53
54
static const int default_margin = 4;
55
static const int default_corner_radius = 3;
56
57
static Ref<StyleBoxFlat> make_flat_stylebox(Color p_color, float p_margin_left = default_margin, float p_margin_top = default_margin, float p_margin_right = default_margin, float p_margin_bottom = default_margin, int p_corner_radius = default_corner_radius, bool p_draw_center = true, int p_border_width = 0) {
58
Ref<StyleBoxFlat> style(memnew(StyleBoxFlat));
59
style->set_bg_color(p_color);
60
style->set_content_margin_individual(Math::round(p_margin_left * scale), Math::round(p_margin_top * scale), Math::round(p_margin_right * scale), Math::round(p_margin_bottom * scale));
61
62
style->set_corner_radius_all(Math::round(p_corner_radius * scale));
63
style->set_anti_aliased(true);
64
// Adjust level of detail based on the corners' effective sizes.
65
style->set_corner_detail(MIN(Math::ceil(1.5 * p_corner_radius), 6) * scale);
66
67
style->set_draw_center(p_draw_center);
68
style->set_border_width_all(Math::round(p_border_width * scale));
69
70
return style;
71
}
72
73
static Ref<StyleBoxFlat> sb_expand(Ref<StyleBoxFlat> p_sbox, float p_left, float p_top, float p_right, float p_bottom) {
74
p_sbox->set_expand_margin(SIDE_LEFT, Math::round(p_left * scale));
75
p_sbox->set_expand_margin(SIDE_TOP, Math::round(p_top * scale));
76
p_sbox->set_expand_margin(SIDE_RIGHT, Math::round(p_right * scale));
77
p_sbox->set_expand_margin(SIDE_BOTTOM, Math::round(p_bottom * scale));
78
return p_sbox;
79
}
80
81
// See also `editor_generate_icon()` in `editor/themes/editor_icons.cpp`.
82
static Ref<DPITexture> generate_icon(int p_index) {
83
return DPITexture::create_from_string(default_theme_icons_sources[p_index], scale);
84
}
85
86
static Ref<StyleBox> make_empty_stylebox(float p_margin_left = -1, float p_margin_top = -1, float p_margin_right = -1, float p_margin_bottom = -1) {
87
Ref<StyleBox> style(memnew(StyleBoxEmpty));
88
style->set_content_margin_individual(Math::round(p_margin_left * scale), Math::round(p_margin_top * scale), Math::round(p_margin_right * scale), Math::round(p_margin_bottom * scale));
89
return style;
90
}
91
92
void fill_default_theme(Ref<Theme> &theme, const Ref<Font> &default_font, const Ref<Font> &bold_font, const Ref<Font> &bold_italics_font, const Ref<Font> &italics_font, Ref<Texture2D> &default_icon, Ref<StyleBox> &default_style, float p_scale) {
93
scale = p_scale;
94
95
// Default theme properties.
96
theme->set_default_font(default_font);
97
theme->set_default_font_size(Math::round(default_font_size * scale));
98
theme->set_default_base_scale(scale);
99
100
// Font colors
101
const Color control_font_color = Color(0.875, 0.875, 0.875);
102
const Color control_font_low_color = Color(0.7, 0.7, 0.7);
103
const Color control_font_lower_color = Color(0.65, 0.65, 0.65);
104
const Color control_font_hover_color = Color(0.95, 0.95, 0.95);
105
const Color control_font_focus_color = Color(0.95, 0.95, 0.95);
106
const Color control_font_disabled_color = control_font_color * Color(1, 1, 1, 0.5);
107
const Color control_font_placeholder_color = Color(control_font_color.r, control_font_color.g, control_font_color.b, 0.6f);
108
const Color control_font_pressed_color = Color(1, 1, 1);
109
const Color control_selection_color = Color(0.5, 0.5, 0.5);
110
111
// StyleBox colors
112
const Color style_normal_color = Color(0.1, 0.1, 0.1, 0.6);
113
const Color style_hover_color = Color(0.225, 0.225, 0.225, 0.6);
114
const Color style_hover_selected_color = Color(1, 1, 1, 0.4);
115
const Color style_pressed_color = Color(0, 0, 0, 0.6);
116
const Color style_disabled_color = Color(0.1, 0.1, 0.1, 0.3);
117
const Color style_focus_color = Color(1, 1, 1, 0.75);
118
const Color style_popup_color = Color(0.25, 0.25, 0.25, 1);
119
const Color style_popup_border_color = Color(0.175, 0.175, 0.175, 1);
120
const Color style_popup_hover_color = Color(0.4, 0.4, 0.4, 1);
121
const Color style_selected_color = Color(1, 1, 1, 0.3);
122
// Don't use a color too bright to keep the percentage readable.
123
const Color style_progress_color = Color(1, 1, 1, 0.4);
124
const Color style_separator_color = Color(0.5, 0.5, 0.5);
125
126
// Convert the generated icon sources to a dictionary for easier access.
127
// Unlike the editor icons, there is no central repository of icons in the Theme resource itself to keep it tidy.
128
Dictionary icons;
129
for (int i = 0; i < default_theme_icons_count; i++) {
130
icons[default_theme_icons_names[i]] = generate_icon(i);
131
}
132
133
// Panel
134
theme->set_stylebox(SceneStringName(panel), "Panel", make_flat_stylebox(style_normal_color, 0, 0, 0, 0));
135
136
// Button
137
138
const Ref<StyleBoxFlat> button_normal = make_flat_stylebox(style_normal_color);
139
const Ref<StyleBoxFlat> button_hover = make_flat_stylebox(style_hover_color);
140
const Ref<StyleBoxFlat> button_pressed = make_flat_stylebox(style_pressed_color);
141
const Ref<StyleBoxFlat> button_disabled = make_flat_stylebox(style_disabled_color);
142
Ref<StyleBoxFlat> focus = make_flat_stylebox(style_focus_color, default_margin, default_margin, default_margin, default_margin, default_corner_radius, false, 2);
143
// Make the focus outline appear to be flush with the buttons it's focusing, so not draw on top of the content.
144
focus->set_expand_margin_all(Math::round(2 * scale));
145
146
theme->set_stylebox(CoreStringName(normal), "Button", button_normal);
147
theme->set_stylebox(SceneStringName(hover), "Button", button_hover);
148
theme->set_stylebox(SceneStringName(pressed), "Button", button_pressed);
149
theme->set_stylebox("disabled", "Button", button_disabled);
150
theme->set_stylebox("focus", "Button", focus);
151
152
theme->set_font(SceneStringName(font), "Button", Ref<Font>());
153
theme->set_font_size(SceneStringName(font_size), "Button", -1);
154
theme->set_constant("outline_size", "Button", 0);
155
156
theme->set_color(SceneStringName(font_color), "Button", control_font_color);
157
theme->set_color("font_pressed_color", "Button", control_font_pressed_color);
158
theme->set_color("font_hover_color", "Button", control_font_hover_color);
159
theme->set_color("font_focus_color", "Button", control_font_focus_color);
160
theme->set_color("font_hover_pressed_color", "Button", control_font_pressed_color);
161
theme->set_color("font_disabled_color", "Button", control_font_disabled_color);
162
theme->set_color("font_outline_color", "Button", Color(0, 0, 0));
163
164
theme->set_color("icon_normal_color", "Button", Color(1, 1, 1, 1));
165
theme->set_color("icon_pressed_color", "Button", Color(1, 1, 1, 1));
166
theme->set_color("icon_hover_color", "Button", Color(1, 1, 1, 1));
167
theme->set_color("icon_hover_pressed_color", "Button", Color(1, 1, 1, 1));
168
theme->set_color("icon_focus_color", "Button", Color(1, 1, 1, 1));
169
theme->set_color("icon_disabled_color", "Button", Color(1, 1, 1, 0.4));
170
171
theme->set_constant("h_separation", "Button", Math::round(4 * scale));
172
theme->set_constant("icon_max_width", "Button", 0);
173
174
theme->set_constant("align_to_largest_stylebox", "Button", 0); // Disabled.
175
176
// MenuBar
177
theme->set_stylebox(CoreStringName(normal), "MenuBar", button_normal);
178
theme->set_stylebox(SceneStringName(hover), "MenuBar", button_hover);
179
theme->set_stylebox(SceneStringName(pressed), "MenuBar", button_pressed);
180
theme->set_stylebox("disabled", "MenuBar", button_disabled);
181
182
theme->set_font(SceneStringName(font), "MenuBar", Ref<Font>());
183
theme->set_font_size(SceneStringName(font_size), "MenuBar", -1);
184
theme->set_constant("outline_size", "MenuBar", 0);
185
186
theme->set_color(SceneStringName(font_color), "MenuBar", control_font_color);
187
theme->set_color("font_pressed_color", "MenuBar", control_font_pressed_color);
188
theme->set_color("font_hover_color", "MenuBar", control_font_hover_color);
189
theme->set_color("font_focus_color", "MenuBar", control_font_focus_color);
190
theme->set_color("font_hover_pressed_color", "MenuBar", control_font_pressed_color);
191
theme->set_color("font_disabled_color", "MenuBar", control_font_disabled_color);
192
theme->set_color("font_outline_color", "MenuBar", Color(0, 0, 0));
193
194
theme->set_constant("h_separation", "MenuBar", Math::round(4 * scale));
195
196
// LinkButton
197
198
theme->set_stylebox("focus", "LinkButton", focus);
199
200
theme->set_font(SceneStringName(font), "LinkButton", Ref<Font>());
201
theme->set_font_size(SceneStringName(font_size), "LinkButton", -1);
202
203
theme->set_color(SceneStringName(font_color), "LinkButton", control_font_color);
204
theme->set_color("font_pressed_color", "LinkButton", control_font_pressed_color);
205
theme->set_color("font_hover_color", "LinkButton", control_font_hover_color);
206
theme->set_color("font_focus_color", "LinkButton", control_font_focus_color);
207
theme->set_color("font_outline_color", "LinkButton", Color(0, 0, 0));
208
209
theme->set_constant("outline_size", "LinkButton", 0);
210
theme->set_constant("underline_spacing", "LinkButton", Math::round(2 * scale));
211
212
// OptionButton
213
theme->set_stylebox("focus", "OptionButton", focus);
214
215
Ref<StyleBox> sb_optbutton_normal = make_flat_stylebox(style_normal_color, 2 * default_margin, default_margin, 2 * default_margin, default_margin);
216
Ref<StyleBox> sb_optbutton_hover = make_flat_stylebox(style_hover_color, 2 * default_margin, default_margin, 2 * default_margin, default_margin);
217
Ref<StyleBox> sb_optbutton_pressed = make_flat_stylebox(style_pressed_color, 2 * default_margin, default_margin, 2 * default_margin, default_margin);
218
Ref<StyleBox> sb_optbutton_disabled = make_flat_stylebox(style_disabled_color, 2 * default_margin, default_margin, 2 * default_margin, default_margin);
219
220
theme->set_stylebox(CoreStringName(normal), "OptionButton", sb_optbutton_normal);
221
theme->set_stylebox(SceneStringName(hover), "OptionButton", sb_optbutton_hover);
222
theme->set_stylebox(SceneStringName(pressed), "OptionButton", sb_optbutton_pressed);
223
theme->set_stylebox("disabled", "OptionButton", sb_optbutton_disabled);
224
225
Ref<StyleBox> sb_optbutton_normal_mirrored = make_flat_stylebox(style_normal_color, 2 * default_margin, default_margin, 2 * default_margin, default_margin);
226
Ref<StyleBox> sb_optbutton_hover_mirrored = make_flat_stylebox(style_hover_color, 2 * default_margin, default_margin, 2 * default_margin, default_margin);
227
Ref<StyleBox> sb_optbutton_pressed_mirrored = make_flat_stylebox(style_pressed_color, 2 * default_margin, default_margin, 2 * default_margin, default_margin);
228
Ref<StyleBox> sb_optbutton_disabled_mirrored = make_flat_stylebox(style_disabled_color, 2 * default_margin, default_margin, 2 * default_margin, default_margin);
229
230
theme->set_stylebox("normal_mirrored", "OptionButton", sb_optbutton_normal_mirrored);
231
theme->set_stylebox("hover_mirrored", "OptionButton", sb_optbutton_hover_mirrored);
232
theme->set_stylebox("pressed_mirrored", "OptionButton", sb_optbutton_pressed_mirrored);
233
theme->set_stylebox("disabled_mirrored", "OptionButton", sb_optbutton_disabled_mirrored);
234
235
theme->set_icon("arrow", "OptionButton", icons["option_button_arrow"]);
236
237
theme->set_font(SceneStringName(font), "OptionButton", Ref<Font>());
238
theme->set_font_size(SceneStringName(font_size), "OptionButton", -1);
239
240
theme->set_color(SceneStringName(font_color), "OptionButton", control_font_color);
241
theme->set_color("font_pressed_color", "OptionButton", control_font_pressed_color);
242
theme->set_color("font_hover_color", "OptionButton", control_font_hover_color);
243
theme->set_color("font_hover_pressed_color", "OptionButton", control_font_pressed_color);
244
theme->set_color("font_focus_color", "OptionButton", control_font_focus_color);
245
theme->set_color("font_disabled_color", "OptionButton", control_font_disabled_color);
246
theme->set_color("font_outline_color", "OptionButton", Color(0, 0, 0));
247
248
theme->set_constant("h_separation", "OptionButton", Math::round(4 * scale));
249
theme->set_constant("arrow_margin", "OptionButton", Math::round(4 * scale));
250
theme->set_constant("outline_size", "OptionButton", 0);
251
theme->set_constant("modulate_arrow", "OptionButton", false);
252
253
// MenuButton
254
255
theme->set_stylebox(CoreStringName(normal), "MenuButton", button_normal);
256
theme->set_stylebox(SceneStringName(pressed), "MenuButton", button_pressed);
257
theme->set_stylebox(SceneStringName(hover), "MenuButton", button_hover);
258
theme->set_stylebox("disabled", "MenuButton", button_disabled);
259
theme->set_stylebox("focus", "MenuButton", focus);
260
261
theme->set_font(SceneStringName(font), "MenuButton", Ref<Font>());
262
theme->set_font_size(SceneStringName(font_size), "MenuButton", -1);
263
264
theme->set_color(SceneStringName(font_color), "MenuButton", control_font_color);
265
theme->set_color("font_pressed_color", "MenuButton", control_font_pressed_color);
266
theme->set_color("font_hover_color", "MenuButton", control_font_hover_color);
267
theme->set_color("font_focus_color", "MenuButton", control_font_focus_color);
268
theme->set_color("font_disabled_color", "MenuButton", Color(1, 1, 1, 0.3));
269
theme->set_color("font_outline_color", "MenuButton", Color(0, 0, 0));
270
271
theme->set_constant("h_separation", "MenuButton", Math::round(4 * scale));
272
theme->set_constant("outline_size", "MenuButton", 0);
273
274
// CheckBox
275
276
Ref<StyleBox> cbx_empty = memnew(StyleBoxEmpty);
277
cbx_empty->set_content_margin_all(Math::round(4 * scale));
278
Ref<StyleBox> cbx_focus = focus;
279
cbx_focus->set_content_margin_all(Math::round(4 * scale));
280
281
theme->set_stylebox(CoreStringName(normal), "CheckBox", cbx_empty);
282
theme->set_stylebox(SceneStringName(pressed), "CheckBox", cbx_empty);
283
theme->set_stylebox("disabled", "CheckBox", cbx_empty);
284
theme->set_stylebox(SceneStringName(hover), "CheckBox", cbx_empty);
285
theme->set_stylebox("hover_pressed", "CheckBox", cbx_empty);
286
theme->set_stylebox("focus", "CheckBox", cbx_focus);
287
288
theme->set_icon("checked", "CheckBox", icons["checked"]);
289
theme->set_icon("checked_disabled", "CheckBox", icons["checked_disabled"]);
290
theme->set_icon("unchecked", "CheckBox", icons["unchecked"]);
291
theme->set_icon("unchecked_disabled", "CheckBox", icons["unchecked_disabled"]);
292
theme->set_icon("radio_checked", "CheckBox", icons["radio_checked"]);
293
theme->set_icon("radio_checked_disabled", "CheckBox", icons["radio_checked_disabled"]);
294
theme->set_icon("radio_unchecked", "CheckBox", icons["radio_unchecked"]);
295
theme->set_icon("radio_unchecked_disabled", "CheckBox", icons["radio_unchecked_disabled"]);
296
297
theme->set_font(SceneStringName(font), "CheckBox", Ref<Font>());
298
theme->set_font_size(SceneStringName(font_size), "CheckBox", -1);
299
300
theme->set_color(SceneStringName(font_color), "CheckBox", control_font_color);
301
theme->set_color("font_pressed_color", "CheckBox", control_font_pressed_color);
302
theme->set_color("font_hover_color", "CheckBox", control_font_hover_color);
303
theme->set_color("font_hover_pressed_color", "CheckBox", control_font_pressed_color);
304
theme->set_color("font_focus_color", "CheckBox", control_font_focus_color);
305
theme->set_color("font_disabled_color", "CheckBox", control_font_disabled_color);
306
theme->set_color("font_outline_color", "CheckBox", Color(0, 0, 0));
307
308
theme->set_constant("h_separation", "CheckBox", Math::round(4 * scale));
309
theme->set_constant("check_v_offset", "CheckBox", 0);
310
theme->set_constant("outline_size", "CheckBox", 0);
311
312
theme->set_color("checkbox_checked_color", "CheckBox", Color(1, 1, 1));
313
theme->set_color("checkbox_unchecked_color", "CheckBox", Color(1, 1, 1));
314
315
// CheckButton
316
317
Ref<StyleBox> cb_empty = memnew(StyleBoxEmpty);
318
cb_empty->set_content_margin_individual(Math::round(6 * scale), Math::round(4 * scale), Math::round(6 * scale), Math::round(4 * scale));
319
320
theme->set_stylebox(CoreStringName(normal), "CheckButton", cb_empty);
321
theme->set_stylebox(SceneStringName(pressed), "CheckButton", cb_empty);
322
theme->set_stylebox("disabled", "CheckButton", cb_empty);
323
theme->set_stylebox(SceneStringName(hover), "CheckButton", cb_empty);
324
theme->set_stylebox("hover_pressed", "CheckButton", cb_empty);
325
theme->set_stylebox("focus", "CheckButton", focus);
326
327
theme->set_icon("checked", "CheckButton", icons["toggle_on"]);
328
theme->set_icon("checked_disabled", "CheckButton", icons["toggle_on_disabled"]);
329
theme->set_icon("unchecked", "CheckButton", icons["toggle_off"]);
330
theme->set_icon("unchecked_disabled", "CheckButton", icons["toggle_off_disabled"]);
331
332
theme->set_icon("checked_mirrored", "CheckButton", icons["toggle_on_mirrored"]);
333
theme->set_icon("checked_disabled_mirrored", "CheckButton", icons["toggle_on_disabled_mirrored"]);
334
theme->set_icon("unchecked_mirrored", "CheckButton", icons["toggle_off_mirrored"]);
335
theme->set_icon("unchecked_disabled_mirrored", "CheckButton", icons["toggle_off_disabled_mirrored"]);
336
337
theme->set_font(SceneStringName(font), "CheckButton", Ref<Font>());
338
theme->set_font_size(SceneStringName(font_size), "CheckButton", -1);
339
340
theme->set_color(SceneStringName(font_color), "CheckButton", control_font_color);
341
theme->set_color("font_pressed_color", "CheckButton", control_font_pressed_color);
342
theme->set_color("font_hover_color", "CheckButton", control_font_hover_color);
343
theme->set_color("font_hover_pressed_color", "CheckButton", control_font_pressed_color);
344
theme->set_color("font_focus_color", "CheckButton", control_font_focus_color);
345
theme->set_color("font_disabled_color", "CheckButton", control_font_disabled_color);
346
theme->set_color("font_outline_color", "CheckButton", Color(0, 0, 0));
347
348
theme->set_constant("h_separation", "CheckButton", Math::round(4 * scale));
349
theme->set_constant("check_v_offset", "CheckButton", 0);
350
theme->set_constant("outline_size", "CheckButton", 0);
351
352
theme->set_color("button_checked_color", "CheckButton", Color(1, 1, 1));
353
theme->set_color("button_unchecked_color", "CheckButton", Color(1, 1, 1));
354
355
// Button variations
356
357
theme->set_type_variation(SceneStringName(FlatButton), "Button");
358
theme->set_type_variation("FlatMenuButton", "MenuButton");
359
360
Ref<StyleBoxEmpty> flat_button_normal = make_empty_stylebox();
361
for (int i = 0; i < 4; i++) {
362
flat_button_normal->set_content_margin((Side)i, button_normal->get_margin((Side)i) + button_normal->get_border_width((Side)i));
363
}
364
Ref<StyleBoxFlat> flat_button_pressed = button_pressed->duplicate();
365
flat_button_pressed->set_bg_color(style_pressed_color * Color(1, 1, 1, 0.85));
366
367
theme->set_stylebox(CoreStringName(normal), SceneStringName(FlatButton), flat_button_normal);
368
theme->set_stylebox(SceneStringName(hover), SceneStringName(FlatButton), flat_button_normal);
369
theme->set_stylebox(SceneStringName(pressed), SceneStringName(FlatButton), flat_button_pressed);
370
theme->set_stylebox("disabled", SceneStringName(FlatButton), flat_button_normal);
371
372
theme->set_stylebox(CoreStringName(normal), "FlatMenuButton", flat_button_normal);
373
theme->set_stylebox(SceneStringName(hover), "FlatMenuButton", flat_button_normal);
374
theme->set_stylebox(SceneStringName(pressed), "FlatMenuButton", flat_button_pressed);
375
theme->set_stylebox("disabled", "FlatMenuButton", flat_button_normal);
376
377
// Label
378
379
theme->set_stylebox(CoreStringName(normal), "Label", memnew(StyleBoxEmpty));
380
theme->set_stylebox("focus", "Label", focus);
381
theme->set_font(SceneStringName(font), "Label", Ref<Font>());
382
theme->set_font_size(SceneStringName(font_size), "Label", -1);
383
384
theme->set_color(SceneStringName(font_color), "Label", Color(1, 1, 1));
385
theme->set_color("font_shadow_color", "Label", Color(0, 0, 0, 0));
386
theme->set_color("font_outline_color", "Label", Color(0, 0, 0));
387
388
theme->set_constant("shadow_offset_x", "Label", Math::round(1 * scale));
389
theme->set_constant("shadow_offset_y", "Label", Math::round(1 * scale));
390
theme->set_constant("outline_size", "Label", 0);
391
theme->set_constant("shadow_outline_size", "Label", Math::round(1 * scale));
392
theme->set_constant("line_spacing", "Label", Math::round(3 * scale));
393
394
theme->set_type_variation("HeaderSmall", "Label");
395
theme->set_font_size(SceneStringName(font_size), "HeaderSmall", default_font_size + 4);
396
397
theme->set_type_variation("HeaderMedium", "Label");
398
theme->set_font_size(SceneStringName(font_size), "HeaderMedium", default_font_size + 8);
399
400
theme->set_type_variation("HeaderLarge", "Label");
401
theme->set_font_size(SceneStringName(font_size), "HeaderLarge", default_font_size + 12);
402
403
// LineEdit
404
405
Ref<StyleBoxFlat> style_line_edit = make_flat_stylebox(style_normal_color);
406
// Add a line at the bottom to make LineEdits distinguishable from Buttons.
407
style_line_edit->set_border_width(SIDE_BOTTOM, 2);
408
style_line_edit->set_border_color(style_pressed_color);
409
theme->set_stylebox(CoreStringName(normal), "LineEdit", style_line_edit);
410
411
theme->set_stylebox("focus", "LineEdit", focus);
412
413
Ref<StyleBoxFlat> style_line_edit_read_only = make_flat_stylebox(style_disabled_color);
414
// Add a line at the bottom to make LineEdits distinguishable from Buttons.
415
style_line_edit_read_only->set_border_width(SIDE_BOTTOM, 2);
416
style_line_edit_read_only->set_border_color(style_pressed_color * Color(1, 1, 1, 0.5));
417
theme->set_stylebox("read_only", "LineEdit", style_line_edit_read_only);
418
419
theme->set_font(SceneStringName(font), "LineEdit", Ref<Font>());
420
theme->set_font_size(SceneStringName(font_size), "LineEdit", -1);
421
422
theme->set_color(SceneStringName(font_color), "LineEdit", control_font_color);
423
theme->set_color("font_selected_color", "LineEdit", control_font_pressed_color);
424
theme->set_color("font_uneditable_color", "LineEdit", control_font_disabled_color);
425
theme->set_color("font_placeholder_color", "LineEdit", control_font_placeholder_color);
426
theme->set_color("font_outline_color", "LineEdit", Color(0, 0, 0));
427
theme->set_color("caret_color", "LineEdit", control_font_hover_color);
428
theme->set_color("selection_color", "LineEdit", control_selection_color);
429
theme->set_color("clear_button_color", "LineEdit", control_font_color);
430
theme->set_color("clear_button_color_pressed", "LineEdit", control_font_pressed_color);
431
432
theme->set_constant("minimum_character_width", "LineEdit", 4);
433
theme->set_constant("outline_size", "LineEdit", 0);
434
theme->set_constant("caret_width", "LineEdit", 1);
435
436
theme->set_icon("clear", "LineEdit", icons["line_edit_clear"]);
437
438
// ProgressBar
439
440
theme->set_stylebox("background", "ProgressBar", make_flat_stylebox(style_disabled_color, 2, 2, 2, 2, 6));
441
theme->set_stylebox("fill", "ProgressBar", make_flat_stylebox(style_progress_color, 2, 2, 2, 2, 6));
442
443
theme->set_font(SceneStringName(font), "ProgressBar", Ref<Font>());
444
theme->set_font_size(SceneStringName(font_size), "ProgressBar", -1);
445
446
theme->set_color(SceneStringName(font_color), "ProgressBar", control_font_hover_color);
447
theme->set_color("font_outline_color", "ProgressBar", Color(0, 0, 0));
448
449
theme->set_constant("outline_size", "ProgressBar", 0);
450
451
// TextEdit
452
453
theme->set_stylebox(CoreStringName(normal), "TextEdit", style_line_edit);
454
theme->set_stylebox("focus", "TextEdit", focus);
455
theme->set_stylebox("read_only", "TextEdit", style_line_edit_read_only);
456
457
theme->set_icon("tab", "TextEdit", icons["text_edit_tab"]);
458
theme->set_icon("space", "TextEdit", icons["text_edit_space"]);
459
460
theme->set_font(SceneStringName(font), "TextEdit", Ref<Font>());
461
theme->set_font_size(SceneStringName(font_size), "TextEdit", -1);
462
463
#ifndef DISABLE_DEPRECATED
464
theme->set_color("background_color", "TextEdit", Color(0, 0, 0, 0));
465
#endif // DISABLE_DEPRECATED
466
theme->set_color(SceneStringName(font_color), "TextEdit", control_font_color);
467
theme->set_color("font_selected_color", "TextEdit", Color(0, 0, 0, 0));
468
theme->set_color("font_readonly_color", "TextEdit", control_font_disabled_color);
469
theme->set_color("font_placeholder_color", "TextEdit", control_font_placeholder_color);
470
theme->set_color("font_outline_color", "TextEdit", Color(0, 0, 0));
471
theme->set_color("selection_color", "TextEdit", control_selection_color);
472
theme->set_color("current_line_color", "TextEdit", Color(0.25, 0.25, 0.26, 0.8));
473
theme->set_color("caret_color", "TextEdit", control_font_color);
474
theme->set_color("caret_background_color", "TextEdit", Color(0, 0, 0));
475
theme->set_color("word_highlighted_color", "TextEdit", Color(0.5, 0.5, 0.5, 0.25));
476
theme->set_color("search_result_color", "TextEdit", Color(0.3, 0.3, 0.3));
477
theme->set_color("search_result_border_color", "TextEdit", Color(0.3, 0.3, 0.3, 0.4));
478
479
theme->set_constant("line_spacing", "TextEdit", Math::round(4 * scale));
480
theme->set_constant("outline_size", "TextEdit", 0);
481
theme->set_constant("caret_width", "TextEdit", 1);
482
theme->set_constant("wrap_offset", "TextEdit", 10);
483
484
// CodeEdit
485
486
theme->set_stylebox(CoreStringName(normal), "CodeEdit", style_line_edit);
487
theme->set_stylebox("focus", "CodeEdit", focus);
488
theme->set_stylebox("read_only", "CodeEdit", style_line_edit_read_only);
489
theme->set_stylebox("completion", "CodeEdit", make_flat_stylebox(style_normal_color, 0, 0, 0, 0));
490
491
theme->set_icon("tab", "CodeEdit", icons["text_edit_tab"]);
492
theme->set_icon("space", "CodeEdit", icons["text_edit_space"]);
493
theme->set_icon("breakpoint", "CodeEdit", icons["breakpoint"]);
494
theme->set_icon("bookmark", "CodeEdit", icons["bookmark"]);
495
theme->set_icon("executing_line", "CodeEdit", icons["arrow_right"]);
496
theme->set_icon("can_fold", "CodeEdit", icons["arrow_down"]);
497
theme->set_icon("folded", "CodeEdit", icons["arrow_right"]);
498
theme->set_icon("can_fold_code_region", "CodeEdit", icons["region_unfolded"]);
499
theme->set_icon("folded_code_region", "CodeEdit", icons["region_folded"]);
500
theme->set_icon("folded_eol_icon", "CodeEdit", icons["text_edit_ellipsis"]);
501
theme->set_icon("completion_color_bg", "CodeEdit", icons["mini_checkerboard"]);
502
503
theme->set_font(SceneStringName(font), "CodeEdit", Ref<Font>());
504
theme->set_font_size(SceneStringName(font_size), "CodeEdit", -1);
505
506
#ifndef DISABLE_DEPRECATED
507
theme->set_color("background_color", "CodeEdit", Color(0, 0, 0, 0));
508
#endif // DISABLE_DEPRECATED
509
theme->set_color("completion_background_color", "CodeEdit", Color(0.17, 0.16, 0.2));
510
theme->set_color("completion_selected_color", "CodeEdit", Color(0.26, 0.26, 0.27));
511
theme->set_color("completion_existing_color", "CodeEdit", Color(0.87, 0.87, 0.87, 0.13));
512
theme->set_color("completion_scroll_color", "CodeEdit", control_font_pressed_color * Color(1, 1, 1, 0.29));
513
theme->set_color("completion_scroll_hovered_color", "CodeEdit", control_font_pressed_color * Color(1, 1, 1, 0.4));
514
theme->set_color(SceneStringName(font_color), "CodeEdit", control_font_color);
515
theme->set_color("font_selected_color", "CodeEdit", Color(0, 0, 0, 0));
516
theme->set_color("font_readonly_color", "CodeEdit", Color(control_font_color.r, control_font_color.g, control_font_color.b, 0.5f));
517
theme->set_color("font_placeholder_color", "CodeEdit", control_font_placeholder_color);
518
theme->set_color("font_outline_color", "CodeEdit", Color(0, 0, 0));
519
theme->set_color("selection_color", "CodeEdit", control_selection_color);
520
theme->set_color("bookmark_color", "CodeEdit", Color(0.5, 0.64, 1, 0.8));
521
theme->set_color("breakpoint_color", "CodeEdit", Color(0.9, 0.29, 0.3));
522
theme->set_color("executing_line_color", "CodeEdit", Color(0.98, 0.89, 0.27));
523
theme->set_color("current_line_color", "CodeEdit", Color(0.25, 0.25, 0.26, 0.8));
524
theme->set_color("code_folding_color", "CodeEdit", Color(0.8, 0.8, 0.8, 0.8));
525
theme->set_color("folded_code_region_color", "CodeEdit", Color(0.68, 0.46, 0.77, 0.2));
526
theme->set_color("caret_color", "CodeEdit", control_font_color);
527
theme->set_color("caret_background_color", "CodeEdit", Color(0, 0, 0));
528
theme->set_color("brace_mismatch_color", "CodeEdit", Color(1, 0.2, 0.2));
529
theme->set_color("line_number_color", "CodeEdit", Color(0.67, 0.67, 0.67, 0.4));
530
theme->set_color("word_highlighted_color", "CodeEdit", Color(0.8, 0.9, 0.9, 0.15));
531
theme->set_color("line_length_guideline_color", "CodeEdit", Color(0.3, 0.5, 0.8, 0.1));
532
theme->set_color("search_result_color", "CodeEdit", Color(0.3, 0.3, 0.3));
533
theme->set_color("search_result_border_color", "CodeEdit", Color(0.3, 0.3, 0.3, 0.4));
534
535
theme->set_constant("completion_lines", "CodeEdit", 7);
536
theme->set_constant("completion_max_width", "CodeEdit", 50);
537
theme->set_constant("completion_scroll_width", "CodeEdit", 6);
538
theme->set_constant("line_spacing", "CodeEdit", Math::round(4 * scale));
539
theme->set_constant("outline_size", "CodeEdit", 0);
540
541
Ref<Texture2D> empty_icon = memnew(ImageTexture);
542
543
const Ref<StyleBoxFlat> style_h_scrollbar = make_flat_stylebox(style_normal_color, 0, 4, 0, 4, 10);
544
const Ref<StyleBoxFlat> style_v_scrollbar = make_flat_stylebox(style_normal_color, 4, 0, 4, 0, 10);
545
Ref<StyleBoxFlat> style_scrollbar_grabber = make_flat_stylebox(style_progress_color, 4, 4, 4, 4, 10);
546
Ref<StyleBoxFlat> style_scrollbar_grabber_highlight = make_flat_stylebox(style_focus_color, 4, 4, 4, 4, 10);
547
Ref<StyleBoxFlat> style_scrollbar_grabber_pressed = make_flat_stylebox(style_focus_color * Color(0.75, 0.75, 0.75), 4, 4, 4, 4, 10);
548
549
// HScrollBar
550
551
theme->set_stylebox("scroll", "HScrollBar", style_h_scrollbar);
552
theme->set_stylebox("scroll_focus", "HScrollBar", focus);
553
theme->set_stylebox("grabber", "HScrollBar", style_scrollbar_grabber);
554
theme->set_stylebox("grabber_highlight", "HScrollBar", style_scrollbar_grabber_highlight);
555
theme->set_stylebox("grabber_pressed", "HScrollBar", style_scrollbar_grabber_pressed);
556
557
theme->set_icon("increment", "HScrollBar", empty_icon);
558
theme->set_icon("increment_highlight", "HScrollBar", empty_icon);
559
theme->set_icon("increment_pressed", "HScrollBar", empty_icon);
560
theme->set_icon("decrement", "HScrollBar", empty_icon);
561
theme->set_icon("decrement_highlight", "HScrollBar", empty_icon);
562
theme->set_icon("decrement_pressed", "HScrollBar", empty_icon);
563
564
// VScrollBar
565
566
theme->set_stylebox("scroll", "VScrollBar", style_v_scrollbar);
567
theme->set_stylebox("scroll_focus", "VScrollBar", focus);
568
theme->set_stylebox("grabber", "VScrollBar", style_scrollbar_grabber);
569
theme->set_stylebox("grabber_highlight", "VScrollBar", style_scrollbar_grabber_highlight);
570
theme->set_stylebox("grabber_pressed", "VScrollBar", style_scrollbar_grabber_pressed);
571
572
theme->set_icon("increment", "VScrollBar", empty_icon);
573
theme->set_icon("increment_highlight", "VScrollBar", empty_icon);
574
theme->set_icon("increment_pressed", "VScrollBar", empty_icon);
575
theme->set_icon("decrement", "VScrollBar", empty_icon);
576
theme->set_icon("decrement_highlight", "VScrollBar", empty_icon);
577
theme->set_icon("decrement_pressed", "VScrollBar", empty_icon);
578
579
const Ref<StyleBoxFlat> style_slider = make_flat_stylebox(style_normal_color, 4, 4, 4, 4, 4);
580
const Ref<StyleBoxFlat> style_slider_grabber = make_flat_stylebox(style_progress_color, 4, 4, 4, 4, 4);
581
const Ref<StyleBoxFlat> style_slider_grabber_highlight = make_flat_stylebox(style_focus_color, 4, 4, 4, 4, 4);
582
583
// HSlider
584
585
theme->set_stylebox("slider", "HSlider", style_slider);
586
theme->set_stylebox("grabber_area", "HSlider", style_slider_grabber);
587
theme->set_stylebox("grabber_area_highlight", "HSlider", style_slider_grabber_highlight);
588
589
theme->set_icon("grabber", "HSlider", icons["slider_grabber"]);
590
theme->set_icon("grabber_highlight", "HSlider", icons["slider_grabber_hl"]);
591
theme->set_icon("grabber_disabled", "HSlider", icons["slider_grabber_disabled"]);
592
theme->set_icon("tick", "HSlider", icons["hslider_tick"]);
593
594
theme->set_constant("center_grabber", "HSlider", 0);
595
theme->set_constant("grabber_offset", "HSlider", 0);
596
theme->set_constant("tick_offset", "HSlider", 0);
597
598
// VSlider
599
600
theme->set_stylebox("slider", "VSlider", style_slider);
601
theme->set_stylebox("grabber_area", "VSlider", style_slider_grabber);
602
theme->set_stylebox("grabber_area_highlight", "VSlider", style_slider_grabber_highlight);
603
604
theme->set_icon("grabber", "VSlider", icons["slider_grabber"]);
605
theme->set_icon("grabber_highlight", "VSlider", icons["slider_grabber_hl"]);
606
theme->set_icon("grabber_disabled", "VSlider", icons["slider_grabber_disabled"]);
607
theme->set_icon("tick", "VSlider", icons["vslider_tick"]);
608
609
theme->set_constant("center_grabber", "VSlider", 0);
610
theme->set_constant("grabber_offset", "VSlider", 0);
611
theme->set_constant("tick_offset", "VSlider", 0);
612
613
// SpinBox
614
615
theme->set_icon("updown", "SpinBox", empty_icon);
616
theme->set_icon("up", "SpinBox", icons["value_up"]);
617
theme->set_icon("up_hover", "SpinBox", icons["value_up"]);
618
theme->set_icon("up_pressed", "SpinBox", icons["value_up"]);
619
theme->set_icon("up_disabled", "SpinBox", icons["value_up"]);
620
theme->set_icon("down", "SpinBox", icons["value_down"]);
621
theme->set_icon("down_hover", "SpinBox", icons["value_down"]);
622
theme->set_icon("down_pressed", "SpinBox", icons["value_down"]);
623
theme->set_icon("down_disabled", "SpinBox", icons["value_down"]);
624
625
theme->set_stylebox("up_background", "SpinBox", make_empty_stylebox());
626
theme->set_stylebox("up_background_hovered", "SpinBox", button_hover);
627
theme->set_stylebox("up_background_pressed", "SpinBox", button_pressed);
628
theme->set_stylebox("up_background_disabled", "SpinBox", make_empty_stylebox());
629
theme->set_stylebox("down_background", "SpinBox", make_empty_stylebox());
630
theme->set_stylebox("down_background_hovered", "SpinBox", button_hover);
631
theme->set_stylebox("down_background_pressed", "SpinBox", button_pressed);
632
theme->set_stylebox("down_background_disabled", "SpinBox", make_empty_stylebox());
633
634
theme->set_color("up_icon_modulate", "SpinBox", control_font_color);
635
theme->set_color("up_hover_icon_modulate", "SpinBox", control_font_hover_color);
636
theme->set_color("up_pressed_icon_modulate", "SpinBox", control_font_hover_color);
637
theme->set_color("up_disabled_icon_modulate", "SpinBox", control_font_disabled_color);
638
theme->set_color("down_icon_modulate", "SpinBox", control_font_color);
639
theme->set_color("down_hover_icon_modulate", "SpinBox", control_font_hover_color);
640
theme->set_color("down_pressed_icon_modulate", "SpinBox", control_font_hover_color);
641
theme->set_color("down_disabled_icon_modulate", "SpinBox", control_font_disabled_color);
642
643
theme->set_stylebox("field_and_buttons_separator", "SpinBox", make_empty_stylebox());
644
theme->set_stylebox("up_down_buttons_separator", "SpinBox", make_empty_stylebox());
645
646
theme->set_constant("buttons_vertical_separation", "SpinBox", 0);
647
theme->set_constant("field_and_buttons_separation", "SpinBox", 2);
648
theme->set_constant("buttons_width", "SpinBox", 16);
649
#ifndef DISABLE_DEPRECATED
650
theme->set_constant("set_min_buttons_width_from_icons", "SpinBox", 1);
651
#endif
652
653
// ScrollContainer
654
655
Ref<StyleBoxEmpty> empty;
656
empty.instantiate();
657
theme->set_stylebox(SceneStringName(panel), "ScrollContainer", empty);
658
659
const Ref<StyleBoxFlat> focus_style = make_flat_stylebox(style_focus_color);
660
// Make the focus outline appear to be flush with the buttons it's focusing, so not draw on top of the content.
661
sb_expand(focus_style, 4, 4, 4, 4);
662
focus_style->set_border_width_all(Math::round(2 * scale));
663
focus_style->set_draw_center(false);
664
focus_style->set_border_color(style_focus_color);
665
theme->set_stylebox("focus", "ScrollContainer", focus_style);
666
667
theme->set_icon("scroll_hint_vertical", "ScrollContainer", icons["scroll_hint_vertical"]);
668
theme->set_icon("scroll_hint_horizontal", "ScrollContainer", icons["scroll_hint_horizontal"]);
669
theme->set_color("scroll_hint_vertical_color", "ScrollContainer", Color(0, 0, 0));
670
theme->set_color("scroll_hint_horizontal_color", "ScrollContainer", Color(0, 0, 0));
671
672
// Window
673
674
theme->set_stylebox("embedded_border", "Window", sb_expand(make_flat_stylebox(style_popup_color, 10, 28, 10, 8), 8, 32, 8, 6));
675
theme->set_stylebox("embedded_unfocused_border", "Window", sb_expand(make_flat_stylebox(style_popup_hover_color, 10, 28, 10, 8), 8, 32, 8, 6));
676
677
theme->set_font("title_font", "Window", Ref<Font>());
678
theme->set_font_size("title_font_size", "Window", -1);
679
theme->set_color("title_color", "Window", control_font_color);
680
theme->set_color("title_outline_modulate", "Window", Color(0, 0, 0));
681
theme->set_constant("title_outline_size", "Window", 0);
682
theme->set_constant("title_height", "Window", 36 * scale);
683
theme->set_constant("resize_margin", "Window", Math::round(4 * scale));
684
685
theme->set_icon("close", "Window", icons["close"]);
686
theme->set_icon("close_pressed", "Window", icons["close_hl"]);
687
theme->set_constant("close_h_offset", "Window", 18 * scale);
688
theme->set_constant("close_v_offset", "Window", 24 * scale);
689
690
// Dialogs
691
692
// AcceptDialog is currently the base dialog, so this defines styles for all extending nodes.
693
theme->set_stylebox(SceneStringName(panel), "AcceptDialog", make_flat_stylebox(style_popup_color, Math::round(8 * scale), Math::round(8 * scale), Math::round(8 * scale), Math::round(8 * scale), 0));
694
theme->set_constant("buttons_separation", "AcceptDialog", Math::round(10 * scale));
695
696
// File Dialog
697
698
theme->set_constant("thumbnail_size", "FileDialog", 64);
699
theme->set_icon("load", "FileDialog", icons["load"]);
700
theme->set_icon("save", "FileDialog", icons["save"]);
701
theme->set_icon("clear", "FileDialog", icons["clear"]);
702
theme->set_icon("parent_folder", "FileDialog", icons["folder_up"]);
703
theme->set_icon("back_folder", "FileDialog", icons["arrow_left"]);
704
theme->set_icon("forward_folder", "FileDialog", icons["arrow_right"]);
705
theme->set_icon("reload", "FileDialog", icons["reload"]);
706
theme->set_icon("favorite", "FileDialog", icons["favorite"]);
707
theme->set_icon("toggle_hidden", "FileDialog", icons["visibility_visible"]);
708
theme->set_icon("toggle_filename_filter", "FileDialog", icons["toggle_filename_filter"]);
709
theme->set_icon("folder", "FileDialog", icons["folder"]);
710
theme->set_icon("file", "FileDialog", icons["file"]);
711
theme->set_icon("thumbnail_mode", "FileDialog", icons["file_mode_thumbnail"]);
712
theme->set_icon("list_mode", "FileDialog", icons["file_mode_list"]);
713
theme->set_icon("create_folder", "FileDialog", icons["folder_create"]);
714
theme->set_icon("sort", "FileDialog", icons["sort"]);
715
theme->set_icon("favorite_up", "FileDialog", icons["move_up"]);
716
theme->set_icon("favorite_down", "FileDialog", icons["move_down"]);
717
718
theme->set_icon("file_thumbnail", "FileDialog", icons["file_thumbnail"]);
719
theme->set_icon("folder_thumbnail", "FileDialog", icons["folder_thumbnail"]);
720
theme->set_color("folder_icon_color", "FileDialog", Color(1, 1, 1));
721
theme->set_color("file_icon_color", "FileDialog", Color(1, 1, 1));
722
theme->set_color("file_disabled_color", "FileDialog", Color(1, 1, 1, 0.25));
723
724
// Popup
725
726
theme->set_stylebox(SceneStringName(panel), "PopupPanel", make_flat_stylebox(style_normal_color));
727
728
// PopupDialog
729
730
theme->set_stylebox(SceneStringName(panel), "PopupDialog", make_flat_stylebox(style_normal_color));
731
732
// PopupMenu
733
734
Ref<StyleBoxLine> separator_horizontal = memnew(StyleBoxLine);
735
separator_horizontal->set_thickness(Math::round(scale));
736
separator_horizontal->set_color(style_separator_color);
737
separator_horizontal->set_content_margin_individual(default_margin, 0, default_margin, 0);
738
Ref<StyleBoxLine> separator_vertical = separator_horizontal->duplicate();
739
separator_vertical->set_vertical(true);
740
separator_vertical->set_content_margin_individual(0, default_margin, 0, default_margin);
741
742
// Always display a border for PopupMenus so they can be distinguished from their background.
743
Ref<StyleBoxFlat> style_popup_panel = make_flat_stylebox(style_popup_color);
744
style_popup_panel->set_border_width_all(2);
745
style_popup_panel->set_border_color(style_popup_border_color);
746
747
theme->set_stylebox(SceneStringName(panel), "PopupMenu", style_popup_panel);
748
theme->set_stylebox(SceneStringName(hover), "PopupMenu", make_flat_stylebox(style_popup_hover_color));
749
theme->set_stylebox("separator", "PopupMenu", separator_horizontal);
750
theme->set_stylebox("labeled_separator_left", "PopupMenu", separator_horizontal);
751
theme->set_stylebox("labeled_separator_right", "PopupMenu", separator_horizontal);
752
753
theme->set_icon("checked", "PopupMenu", icons["checked"]);
754
theme->set_icon("checked_disabled", "PopupMenu", icons["checked_disabled"]);
755
theme->set_icon("unchecked", "PopupMenu", icons["unchecked"]);
756
theme->set_icon("unchecked_disabled", "PopupMenu", icons["unchecked_disabled"]);
757
theme->set_icon("radio_checked", "PopupMenu", icons["radio_checked"]);
758
theme->set_icon("radio_checked_disabled", "PopupMenu", icons["radio_checked_disabled"]);
759
theme->set_icon("radio_unchecked", "PopupMenu", icons["radio_unchecked"]);
760
theme->set_icon("radio_unchecked_disabled", "PopupMenu", icons["radio_unchecked_disabled"]);
761
theme->set_icon("submenu", "PopupMenu", icons["popup_menu_arrow_right"]);
762
theme->set_icon("submenu_mirrored", "PopupMenu", icons["popup_menu_arrow_left"]);
763
764
theme->set_font(SceneStringName(font), "PopupMenu", Ref<Font>());
765
theme->set_font("font_separator", "PopupMenu", Ref<Font>());
766
theme->set_font_size(SceneStringName(font_size), "PopupMenu", -1);
767
theme->set_font_size("font_separator_size", "PopupMenu", -1);
768
769
theme->set_color(SceneStringName(font_color), "PopupMenu", control_font_color);
770
theme->set_color("font_accelerator_color", "PopupMenu", Color(0.7, 0.7, 0.7, 0.8));
771
theme->set_color("font_disabled_color", "PopupMenu", Color(0.4, 0.4, 0.4, 0.8));
772
theme->set_color("font_hover_color", "PopupMenu", control_font_color);
773
theme->set_color("font_separator_color", "PopupMenu", control_font_color);
774
theme->set_color("font_outline_color", "PopupMenu", Color(0, 0, 0));
775
theme->set_color("font_separator_outline_color", "PopupMenu", Color(0, 0, 0));
776
777
theme->set_constant("indent", "PopupMenu", Math::round(10 * scale));
778
theme->set_constant("h_separation", "PopupMenu", Math::round(4 * scale));
779
theme->set_constant("v_separation", "PopupMenu", Math::round(4 * scale));
780
theme->set_constant("outline_size", "PopupMenu", 0);
781
theme->set_constant("separator_outline_size", "PopupMenu", 0);
782
theme->set_constant("item_start_padding", "PopupMenu", Math::round(2 * scale));
783
theme->set_constant("item_end_padding", "PopupMenu", Math::round(2 * scale));
784
theme->set_constant("icon_max_width", "PopupMenu", 0);
785
theme->set_constant("gutter_compact", "PopupMenu", 1);
786
787
// GraphNode
788
789
Ref<StyleBoxFlat> graphnode_normal = make_flat_stylebox(style_normal_color, 18, 12, 18, 12);
790
graphnode_normal->set_border_color(Color(0.325, 0.325, 0.325, 0.6));
791
Ref<StyleBoxFlat> graphnode_selected = graphnode_normal->duplicate();
792
graphnode_selected->set_border_color(Color(0.625, 0.625, 0.625, 0.6));
793
794
Ref<StyleBoxFlat> graphn_sb_titlebar = make_flat_stylebox(style_normal_color.lightened(0.3), 4, 4, 4, 4);
795
Ref<StyleBoxFlat> graphn_sb_titlebar_selected = graphnode_normal->duplicate();
796
graphn_sb_titlebar_selected->set_bg_color(Color(1.0, 0.625, 0.625, 0.6));
797
Ref<StyleBoxEmpty> graphnode_slot = make_empty_stylebox(0, 0, 0, 0);
798
799
theme->set_stylebox(SceneStringName(panel), "GraphNode", graphnode_normal);
800
theme->set_stylebox("panel_selected", "GraphNode", graphnode_selected);
801
theme->set_stylebox("panel_focus", "GraphNode", focus);
802
theme->set_stylebox("titlebar", "GraphNode", graphn_sb_titlebar);
803
theme->set_stylebox("titlebar_selected", "GraphNode", graphn_sb_titlebar_selected);
804
theme->set_stylebox("slot", "GraphNode", graphnode_slot);
805
theme->set_stylebox("slot_selected", "GraphNode", focus);
806
theme->set_icon("port", "GraphNode", icons["graph_port"]);
807
theme->set_icon("resizer", "GraphNode", icons["resizer_se"]);
808
theme->set_color("resizer_color", "GraphNode", control_font_color);
809
theme->set_constant("separation", "GraphNode", Math::round(2 * scale));
810
theme->set_constant("port_h_offset", "GraphNode", 0);
811
812
// GraphNodes's title Label.
813
814
theme->set_type_variation("GraphNodeTitleLabel", "Label");
815
816
theme->set_stylebox(CoreStringName(normal), "GraphNodeTitleLabel", make_empty_stylebox(0, 0, 0, 0));
817
theme->set_font(SceneStringName(font), "GraphNodeTitleLabel", Ref<Font>());
818
theme->set_font_size(SceneStringName(font_size), "GraphNodeTitleLabel", -1);
819
theme->set_color(SceneStringName(font_color), "GraphNodeTitleLabel", control_font_color);
820
theme->set_color("font_shadow_color", "GraphNodeTitleLabel", Color(0, 0, 0, 0));
821
theme->set_color("font_outline_color", "GraphNodeTitleLabel", Color(0, 0, 0));
822
theme->set_constant("shadow_offset_x", "GraphNodeTitleLabel", Math::round(1 * scale));
823
theme->set_constant("shadow_offset_y", "GraphNodeTitleLabel", Math::round(1 * scale));
824
theme->set_constant("outline_size", "GraphNodeTitleLabel", 0);
825
theme->set_constant("shadow_outline_size", "GraphNodeTitleLabel", Math::round(1 * scale));
826
theme->set_constant("line_spacing", "GraphNodeTitleLabel", Math::round(3 * scale));
827
828
// GraphFrame
829
830
Ref<StyleBoxFlat> graphframe_sb = make_flat_stylebox(style_pressed_color, 18, 12, 18, 12, 3, true, 2);
831
graphframe_sb->set_expand_margin(SIDE_TOP, 38 * scale);
832
graphframe_sb->set_border_color(style_pressed_color);
833
Ref<StyleBoxFlat> graphframe_sb_selected = graphframe_sb->duplicate();
834
graphframe_sb_selected->set_border_color(style_hover_color);
835
836
theme->set_stylebox(SceneStringName(panel), "GraphFrame", graphframe_sb);
837
theme->set_stylebox("panel_selected", "GraphFrame", graphframe_sb_selected);
838
theme->set_stylebox("titlebar", "GraphFrame", make_empty_stylebox(4, 4, 4, 4));
839
theme->set_stylebox("titlebar_selected", "GraphFrame", make_empty_stylebox(4, 4, 4, 4));
840
theme->set_icon("resizer", "GraphFrame", icons["resizer_se"]);
841
theme->set_color("resizer_color", "GraphFrame", control_font_color);
842
843
// GraphFrame's title Label
844
845
theme->set_type_variation("GraphFrameTitleLabel", "Label");
846
847
theme->set_stylebox(CoreStringName(normal), "GraphFrameTitleLabel", memnew(StyleBoxEmpty));
848
theme->set_font_size(SceneStringName(font_size), "GraphFrameTitleLabel", 22);
849
theme->set_color(SceneStringName(font_color), "GraphFrameTitleLabel", Color(1, 1, 1));
850
theme->set_color("font_shadow_color", "GraphFrameTitleLabel", Color(0, 0, 0, 0));
851
theme->set_color("font_outline_color", "GraphFrameTitleLabel", Color(1, 1, 1));
852
theme->set_constant("shadow_offset_x", "GraphFrameTitleLabel", 1 * scale);
853
theme->set_constant("shadow_offset_y", "GraphFrameTitleLabel", 1 * scale);
854
theme->set_constant("outline_size", "GraphFrameTitleLabel", 0);
855
theme->set_constant("shadow_outline_size", "GraphFrameTitleLabel", 1 * scale);
856
theme->set_constant("line_spacing", "GraphFrameTitleLabel", 3 * scale);
857
858
// Tree
859
860
theme->set_stylebox(SceneStringName(panel), "Tree", make_flat_stylebox(style_normal_color, 4, 4, 4, 5));
861
theme->set_stylebox("focus", "Tree", focus);
862
theme->set_stylebox("hovered", "Tree", make_flat_stylebox(Color(1, 1, 1, 0.07)));
863
theme->set_stylebox("hovered_dimmed", "Tree", make_flat_stylebox(Color(1, 1, 1, 0.03)));
864
theme->set_stylebox("hovered_selected", "Tree", make_flat_stylebox(style_hover_selected_color));
865
theme->set_stylebox("hovered_selected_focus", "Tree", make_flat_stylebox(style_hover_selected_color));
866
theme->set_stylebox("selected", "Tree", make_flat_stylebox(style_selected_color));
867
theme->set_stylebox("selected_focus", "Tree", make_flat_stylebox(style_selected_color));
868
theme->set_stylebox("cursor", "Tree", focus);
869
theme->set_stylebox("cursor_unfocused", "Tree", focus);
870
theme->set_stylebox("button_hover", "Tree", make_flat_stylebox(Color(1, 1, 1, 0.07)));
871
theme->set_stylebox("button_pressed", "Tree", button_pressed);
872
theme->set_stylebox("button_hover", "Tree", button_hover);
873
theme->set_stylebox("title_button_normal", "Tree", make_flat_stylebox(style_pressed_color, 4, 4, 4, 4));
874
theme->set_stylebox("title_button_pressed", "Tree", make_flat_stylebox(style_hover_color, 4, 4, 4, 4));
875
theme->set_stylebox("title_button_hover", "Tree", make_flat_stylebox(style_normal_color, 4, 4, 4, 4));
876
theme->set_stylebox("custom_button", "Tree", button_normal);
877
theme->set_stylebox("custom_button_pressed", "Tree", button_pressed);
878
theme->set_stylebox("custom_button_hover", "Tree", button_hover);
879
880
theme->set_icon("checked", "Tree", icons["checked"]);
881
theme->set_icon("checked_disabled", "Tree", icons["checked_disabled"]);
882
theme->set_icon("unchecked", "Tree", icons["unchecked"]);
883
theme->set_icon("unchecked_disabled", "Tree", icons["unchecked_disabled"]);
884
theme->set_icon("indeterminate", "Tree", icons["indeterminate"]);
885
theme->set_icon("indeterminate_disabled", "Tree", icons["indeterminate_disabled"]);
886
theme->set_icon("updown", "Tree", icons["updown"]);
887
theme->set_icon("select_arrow", "Tree", icons["option_button_arrow"]);
888
theme->set_icon("arrow", "Tree", icons["arrow_down"]);
889
theme->set_icon("arrow_collapsed", "Tree", icons["arrow_right"]);
890
theme->set_icon("arrow_collapsed_mirrored", "Tree", icons["arrow_left"]);
891
theme->set_icon("scroll_hint", "Tree", icons["scroll_hint_vertical"]);
892
893
theme->set_font("title_button_font", "Tree", Ref<Font>());
894
theme->set_font(SceneStringName(font), "Tree", Ref<Font>());
895
theme->set_font_size(SceneStringName(font_size), "Tree", -1);
896
theme->set_font_size("title_button_font_size", "Tree", -1);
897
898
theme->set_color("title_button_color", "Tree", control_font_color);
899
theme->set_color(SceneStringName(font_color), "Tree", control_font_low_color);
900
theme->set_color("font_hovered_color", "Tree", control_font_hover_color);
901
theme->set_color("font_hovered_dimmed_color", "Tree", control_font_color);
902
theme->set_color("font_hovered_selected_color", "Tree", control_font_pressed_color);
903
theme->set_color("font_selected_color", "Tree", control_font_pressed_color);
904
theme->set_color("font_disabled_color", "Tree", control_font_disabled_color);
905
theme->set_color("font_outline_color", "Tree", Color(0, 0, 0));
906
theme->set_color("guide_color", "Tree", Color(0.7, 0.7, 0.7, 0.25));
907
theme->set_color("drop_position_color", "Tree", Color(1, 1, 1));
908
theme->set_color("relationship_line_color", "Tree", Color(0.27, 0.27, 0.27));
909
theme->set_color("parent_hl_line_color", "Tree", Color(0.27, 0.27, 0.27));
910
theme->set_color("children_hl_line_color", "Tree", Color(0.27, 0.27, 0.27));
911
theme->set_color("custom_button_font_highlight", "Tree", control_font_hover_color);
912
theme->set_color("scroll_hint_color", "Tree", Color(0, 0, 0));
913
914
theme->set_constant("h_separation", "Tree", Math::round(4 * scale));
915
theme->set_constant("v_separation", "Tree", Math::round(4 * scale));
916
theme->set_constant("item_margin", "Tree", Math::round(16 * scale));
917
theme->set_constant("inner_item_margin_bottom", "Tree", 0);
918
theme->set_constant("inner_item_margin_left", "Tree", 0);
919
theme->set_constant("inner_item_margin_right", "Tree", 0);
920
theme->set_constant("inner_item_margin_top", "Tree", 0);
921
theme->set_constant("check_h_separation", "Tree", Math::round(4 * scale));
922
theme->set_constant("icon_h_separation", "Tree", Math::round(4 * scale));
923
theme->set_constant("button_margin", "Tree", Math::round(4 * scale));
924
theme->set_constant("draw_relationship_lines", "Tree", 0);
925
theme->set_constant("relationship_line_width", "Tree", 1);
926
theme->set_constant("parent_hl_line_width", "Tree", 1);
927
theme->set_constant("children_hl_line_width", "Tree", 1);
928
theme->set_constant("parent_hl_line_margin", "Tree", 0);
929
theme->set_constant("draw_guides", "Tree", 1);
930
theme->set_constant("dragging_unfold_wait_msec", "Tree", 500);
931
theme->set_constant("scroll_border", "Tree", Math::round(4 * scale));
932
theme->set_constant("scroll_speed", "Tree", 12);
933
theme->set_constant("outline_size", "Tree", 0);
934
theme->set_constant("icon_max_width", "Tree", 0);
935
theme->set_constant("scrollbar_margin_left", "Tree", -1);
936
theme->set_constant("scrollbar_margin_top", "Tree", -1);
937
theme->set_constant("scrollbar_margin_right", "Tree", -1);
938
theme->set_constant("scrollbar_margin_bottom", "Tree", -1);
939
theme->set_constant("scrollbar_h_separation", "Tree", Math::round(4 * scale));
940
theme->set_constant("scrollbar_v_separation", "Tree", Math::round(4 * scale));
941
942
// ItemList
943
944
theme->set_stylebox(SceneStringName(panel), "ItemList", make_flat_stylebox(style_normal_color));
945
theme->set_stylebox("focus", "ItemList", focus);
946
theme->set_constant("h_separation", "ItemList", Math::round(4 * scale));
947
theme->set_constant("v_separation", "ItemList", Math::round(4 * scale));
948
theme->set_constant("icon_margin", "ItemList", Math::round(4 * scale));
949
theme->set_constant(SceneStringName(line_separation), "ItemList", Math::round(2 * scale));
950
951
theme->set_font(SceneStringName(font), "ItemList", Ref<Font>());
952
theme->set_font_size(SceneStringName(font_size), "ItemList", -1);
953
954
theme->set_color(SceneStringName(font_color), "ItemList", control_font_lower_color);
955
theme->set_color("font_hovered_color", "ItemList", control_font_hover_color);
956
theme->set_color("font_hovered_selected_color", "ItemList", control_font_pressed_color);
957
theme->set_color("font_selected_color", "ItemList", control_font_pressed_color);
958
theme->set_color("font_outline_color", "ItemList", Color(0, 0, 0));
959
theme->set_color("guide_color", "ItemList", Color(0.7, 0.7, 0.7, 0.25));
960
theme->set_color("scroll_hint_color", "ItemList", Color(0, 0, 0));
961
theme->set_stylebox("hovered", "ItemList", make_flat_stylebox(Color(1, 1, 1, 0.07)));
962
theme->set_stylebox("hovered_selected", "ItemList", make_flat_stylebox(style_hover_selected_color));
963
theme->set_stylebox("hovered_selected_focus", "ItemList", make_flat_stylebox(style_hover_selected_color));
964
theme->set_stylebox("selected", "ItemList", make_flat_stylebox(style_selected_color));
965
theme->set_stylebox("selected_focus", "ItemList", make_flat_stylebox(style_selected_color));
966
theme->set_stylebox("cursor", "ItemList", focus);
967
theme->set_stylebox("cursor_unfocused", "ItemList", focus);
968
theme->set_icon("scroll_hint", "ItemList", icons["scroll_hint_vertical"]);
969
970
theme->set_constant("outline_size", "ItemList", 0);
971
972
// TabContainer
973
974
Ref<StyleBoxFlat> style_tab_selected = make_flat_stylebox(style_normal_color, 10, 4, 10, 4, 0);
975
style_tab_selected->set_border_width(SIDE_TOP, Math::round(2 * scale));
976
style_tab_selected->set_border_color(style_focus_color);
977
Ref<StyleBoxFlat> style_tab_unselected = make_flat_stylebox(style_pressed_color, 10, 4, 10, 4, 0);
978
// Add some spacing between unselected tabs to make them easier to distinguish from each other.
979
style_tab_unselected->set_border_width(SIDE_LEFT, Math::round(scale));
980
style_tab_unselected->set_border_width(SIDE_RIGHT, Math::round(scale));
981
style_tab_unselected->set_border_color(style_popup_border_color);
982
Ref<StyleBoxFlat> style_tab_disabled = style_tab_unselected->duplicate();
983
style_tab_disabled->set_bg_color(style_disabled_color);
984
Ref<StyleBoxFlat> style_tab_hovered = style_tab_unselected->duplicate();
985
style_tab_hovered->set_bg_color(Color(0.1, 0.1, 0.1, 0.3));
986
Ref<StyleBoxFlat> style_tab_focus = focus->duplicate();
987
988
theme->set_stylebox("tab_selected", "TabContainer", style_tab_selected);
989
theme->set_stylebox("tab_hovered", "TabContainer", style_tab_hovered);
990
theme->set_stylebox("tab_unselected", "TabContainer", style_tab_unselected);
991
theme->set_stylebox("tab_disabled", "TabContainer", style_tab_disabled);
992
theme->set_stylebox("tab_focus", "TabContainer", style_tab_focus);
993
theme->set_stylebox(SceneStringName(panel), "TabContainer", make_flat_stylebox(style_normal_color, 0, 0, 0, 0));
994
theme->set_stylebox("tabbar_background", "TabContainer", make_empty_stylebox(0, 0, 0, 0));
995
996
theme->set_icon("increment", "TabContainer", icons["scroll_button_right"]);
997
theme->set_icon("increment_highlight", "TabContainer", icons["scroll_button_right_hl"]);
998
theme->set_icon("decrement", "TabContainer", icons["scroll_button_left"]);
999
theme->set_icon("decrement_highlight", "TabContainer", icons["scroll_button_left_hl"]);
1000
theme->set_icon("drop_mark", "TabContainer", icons["tabs_drop_mark"]);
1001
theme->set_icon("menu", "TabContainer", icons["tabs_menu"]);
1002
theme->set_icon("menu_highlight", "TabContainer", icons["tabs_menu_hl"]);
1003
1004
theme->set_font(SceneStringName(font), "TabContainer", Ref<Font>());
1005
theme->set_font_size(SceneStringName(font_size), "TabContainer", -1);
1006
1007
theme->set_color("font_selected_color", "TabContainer", control_font_hover_color);
1008
theme->set_color("font_hovered_color", "TabContainer", control_font_hover_color);
1009
theme->set_color("font_unselected_color", "TabContainer", control_font_low_color);
1010
theme->set_color("font_disabled_color", "TabContainer", control_font_disabled_color);
1011
theme->set_color("font_outline_color", "TabContainer", Color(0, 0, 0));
1012
theme->set_color("drop_mark_color", "TabContainer", Color(1, 1, 1));
1013
1014
theme->set_color("icon_selected_color", "TabContainer", Color(1, 1, 1, 1));
1015
theme->set_color("icon_hovered_color", "TabContainer", Color(1, 1, 1, 1));
1016
theme->set_color("icon_unselected_color", "TabContainer", Color(1, 1, 1, 1));
1017
theme->set_color("icon_disabled_color", "TabContainer", Color(1, 1, 1, 1));
1018
1019
theme->set_constant("side_margin", "TabContainer", Math::round(8 * scale));
1020
theme->set_constant("icon_separation", "TabContainer", Math::round(4 * scale));
1021
theme->set_constant("icon_max_width", "TabContainer", 0);
1022
theme->set_constant("outline_size", "TabContainer", 0);
1023
1024
// TabBar
1025
1026
theme->set_stylebox("tab_selected", "TabBar", style_tab_selected);
1027
theme->set_stylebox("tab_hovered", "TabBar", style_tab_hovered);
1028
theme->set_stylebox("tab_unselected", "TabBar", style_tab_unselected);
1029
theme->set_stylebox("tab_disabled", "TabBar", style_tab_disabled);
1030
theme->set_stylebox("tab_focus", "TabBar", style_tab_focus);
1031
theme->set_stylebox("button_pressed", "TabBar", button_pressed);
1032
theme->set_stylebox("button_highlight", "TabBar", button_normal);
1033
1034
theme->set_icon("increment", "TabBar", icons["scroll_button_right"]);
1035
theme->set_icon("increment_highlight", "TabBar", icons["scroll_button_right_hl"]);
1036
theme->set_icon("decrement", "TabBar", icons["scroll_button_left"]);
1037
theme->set_icon("decrement_highlight", "TabBar", icons["scroll_button_left_hl"]);
1038
theme->set_icon("drop_mark", "TabBar", icons["tabs_drop_mark"]);
1039
theme->set_icon("close", "TabBar", icons["close"]);
1040
1041
theme->set_font(SceneStringName(font), "TabBar", Ref<Font>());
1042
theme->set_font_size(SceneStringName(font_size), "TabBar", -1);
1043
1044
theme->set_color("font_selected_color", "TabBar", control_font_hover_color);
1045
theme->set_color("font_hovered_color", "TabBar", control_font_hover_color);
1046
theme->set_color("font_unselected_color", "TabBar", control_font_low_color);
1047
theme->set_color("font_disabled_color", "TabBar", control_font_disabled_color);
1048
theme->set_color("font_outline_color", "TabBar", Color(0, 0, 0));
1049
theme->set_color("drop_mark_color", "TabBar", Color(1, 1, 1));
1050
1051
theme->set_color("icon_selected_color", "TabBar", Color(1, 1, 1, 1));
1052
theme->set_color("icon_hovered_color", "TabBar", Color(1, 1, 1, 1));
1053
theme->set_color("icon_unselected_color", "TabBar", Color(1, 1, 1, 1));
1054
theme->set_color("icon_disabled_color", "TabBar", Color(1, 1, 1, 1));
1055
1056
theme->set_constant("h_separation", "TabBar", Math::round(4 * scale));
1057
theme->set_constant("icon_max_width", "TabBar", 0);
1058
theme->set_constant("outline_size", "TabBar", 0);
1059
theme->set_constant("hover_switch_wait_msec", "TabBar", 500);
1060
1061
// Separators
1062
1063
theme->set_stylebox("separator", "HSeparator", separator_horizontal);
1064
theme->set_stylebox("separator", "VSeparator", separator_vertical);
1065
1066
theme->set_icon("close", "Icons", icons["close"]);
1067
1068
theme->set_constant("separation", "HSeparator", Math::round(4 * scale));
1069
theme->set_constant("separation", "VSeparator", Math::round(4 * scale));
1070
1071
// ColorPicker
1072
Ref<StyleBoxFlat> focus_circle = make_flat_stylebox(style_focus_color, default_margin, default_margin, default_margin, default_margin, default_corner_radius, false, 2);
1073
focus_circle->set_corner_radius_all(Math::round(256 * scale));
1074
focus_circle->set_corner_detail(Math::round(32 * scale));
1075
1076
theme->set_constant("margin", "ColorPicker", Math::round(4 * scale));
1077
theme->set_constant("sv_width", "ColorPicker", Math::round(256 * scale));
1078
theme->set_constant("sv_height", "ColorPicker", Math::round(256 * scale));
1079
theme->set_constant("h_width", "ColorPicker", Math::round(30 * scale));
1080
theme->set_constant("label_width", "ColorPicker", Math::round(10 * scale));
1081
theme->set_constant("center_slider_grabbers", "ColorPicker", 1);
1082
1083
theme->set_stylebox("sample_focus", "ColorPicker", focus);
1084
theme->set_stylebox("picker_focus_rectangle", "ColorPicker", focus);
1085
theme->set_stylebox("picker_focus_circle", "ColorPicker", focus_circle);
1086
theme->set_color("focused_not_editing_cursor_color", "ColorPicker", Color(1, 1, 1, 0.275f));
1087
1088
theme->set_icon("menu_option", "ColorPicker", icons["tabs_menu_hl"]);
1089
theme->set_icon("folded_arrow", "ColorPicker", icons["arrow_right"]);
1090
theme->set_icon("expanded_arrow", "ColorPicker", icons["arrow_down"]);
1091
theme->set_icon("screen_picker", "ColorPicker", icons["color_picker_pipette"]);
1092
theme->set_icon("shape_circle", "ColorPicker", icons["picker_shape_circle"]);
1093
theme->set_icon("shape_rect", "ColorPicker", icons["picker_shape_rectangle"]);
1094
theme->set_icon("shape_rect_wheel", "ColorPicker", icons["picker_shape_rectangle_wheel"]);
1095
theme->set_icon("add_preset", "ColorPicker", icons["add"]);
1096
theme->set_icon("sample_bg", "ColorPicker", icons["mini_checkerboard"]);
1097
theme->set_icon("sample_revert", "ColorPicker", icons["reload"]);
1098
theme->set_icon("overbright_indicator", "ColorPicker", icons["color_picker_overbright"]);
1099
theme->set_icon("bar_arrow", "ColorPicker", icons["color_picker_bar_arrow"]);
1100
theme->set_icon("picker_cursor", "ColorPicker", icons["color_picker_cursor"]);
1101
theme->set_icon("picker_cursor_bg", "ColorPicker", icons["color_picker_cursor_bg"]);
1102
theme->set_icon("color_script", "ColorPicker", icons["script"]);
1103
theme->set_icon("color_copy", "ColorPicker", icons["action_copy"]);
1104
1105
{
1106
const int precision = 7;
1107
1108
Ref<Gradient> hue_gradient;
1109
hue_gradient.instantiate();
1110
PackedFloat32Array offsets;
1111
offsets.resize(precision);
1112
PackedColorArray colors;
1113
colors.resize(precision);
1114
1115
for (int i = 0; i < precision; i++) {
1116
float h = i / float(precision - 1);
1117
offsets.write[i] = h;
1118
colors.write[i] = Color::from_hsv(h, 1, 1);
1119
}
1120
hue_gradient->set_offsets(offsets);
1121
hue_gradient->set_colors(colors);
1122
1123
Ref<GradientTexture2D> hue_texture;
1124
hue_texture.instantiate();
1125
hue_texture->set_width(800);
1126
hue_texture->set_height(6);
1127
hue_texture->set_gradient(hue_gradient);
1128
1129
theme->set_icon("color_hue", "ColorPicker", hue_texture);
1130
}
1131
1132
// ColorPickerButton
1133
1134
theme->set_icon("bg", "ColorPickerButton", icons["mini_checkerboard"]);
1135
theme->set_stylebox(CoreStringName(normal), "ColorPickerButton", button_normal);
1136
theme->set_stylebox(SceneStringName(pressed), "ColorPickerButton", button_pressed);
1137
theme->set_stylebox(SceneStringName(hover), "ColorPickerButton", button_hover);
1138
theme->set_stylebox("disabled", "ColorPickerButton", button_disabled);
1139
theme->set_stylebox("focus", "ColorPickerButton", focus);
1140
1141
theme->set_font(SceneStringName(font), "ColorPickerButton", Ref<Font>());
1142
theme->set_font_size(SceneStringName(font_size), "ColorPickerButton", -1);
1143
1144
theme->set_color(SceneStringName(font_color), "ColorPickerButton", Color(1, 1, 1, 1));
1145
theme->set_color("font_pressed_color", "ColorPickerButton", Color(0.8, 0.8, 0.8, 1));
1146
theme->set_color("font_hover_color", "ColorPickerButton", Color(1, 1, 1, 1));
1147
theme->set_color("font_focus_color", "ColorPickerButton", Color(1, 1, 1, 1));
1148
theme->set_color("font_disabled_color", "ColorPickerButton", Color(0.9, 0.9, 0.9, 0.3));
1149
theme->set_color("font_outline_color", "ColorPickerButton", Color(0, 0, 0));
1150
1151
theme->set_constant("h_separation", "ColorPickerButton", Math::round(4 * scale));
1152
theme->set_constant("outline_size", "ColorPickerButton", 0);
1153
1154
// ColorPresetButton
1155
1156
Ref<StyleBoxFlat> preset_sb = make_flat_stylebox(Color(1, 1, 1), 2, 2, 2, 2);
1157
preset_sb->set_corner_radius_all(Math::round(2 * scale));
1158
preset_sb->set_corner_detail(Math::round(2 * scale));
1159
preset_sb->set_anti_aliased(false);
1160
1161
theme->set_stylebox("preset_fg", "ColorPresetButton", preset_sb);
1162
theme->set_stylebox("preset_focus", "ColorPresetButton", focus);
1163
theme->set_icon("preset_bg", "ColorPresetButton", icons["mini_checkerboard"]);
1164
theme->set_icon("overbright_indicator", "ColorPresetButton", icons["color_picker_overbright"]);
1165
1166
// TooltipPanel + TooltipLabel
1167
1168
theme->set_type_variation("TooltipPanel", "PopupPanel");
1169
theme->set_stylebox(SceneStringName(panel), "TooltipPanel",
1170
make_flat_stylebox(Color(0, 0, 0, 0.5), 2 * default_margin, 0.5 * default_margin, 2 * default_margin, 0.5 * default_margin));
1171
1172
theme->set_type_variation("TooltipLabel", "Label");
1173
theme->set_font_size(SceneStringName(font_size), "TooltipLabel", -1);
1174
theme->set_font(SceneStringName(font), "TooltipLabel", Ref<Font>());
1175
1176
theme->set_color(SceneStringName(font_color), "TooltipLabel", control_font_color);
1177
theme->set_color("font_shadow_color", "TooltipLabel", Color(0, 0, 0, 0));
1178
theme->set_color("font_outline_color", "TooltipLabel", Color(0, 0, 0));
1179
1180
theme->set_constant("shadow_offset_x", "TooltipLabel", 1);
1181
theme->set_constant("shadow_offset_y", "TooltipLabel", 1);
1182
theme->set_constant("outline_size", "TooltipLabel", 0);
1183
1184
// RichTextLabel
1185
1186
theme->set_stylebox("focus", "RichTextLabel", focus);
1187
theme->set_stylebox(CoreStringName(normal), "RichTextLabel", make_empty_stylebox(0, 0, 0, 0));
1188
1189
Ref<Image> solid_img = Image::create_empty(2, 2, false, Image::FORMAT_RGBA8);
1190
solid_img->fill(Color(1, 1, 1, 1));
1191
Ref<Texture2D> solid_icon = ImageTexture::create_from_image(solid_img);
1192
1193
theme->set_icon("horizontal_rule", "RichTextLabel", solid_icon);
1194
1195
theme->set_font("normal_font", "RichTextLabel", Ref<Font>());
1196
theme->set_font("bold_font", "RichTextLabel", bold_font);
1197
theme->set_font("italics_font", "RichTextLabel", italics_font);
1198
theme->set_font("bold_italics_font", "RichTextLabel", bold_italics_font);
1199
theme->set_font("mono_font", "RichTextLabel", Ref<Font>());
1200
theme->set_font_size("normal_font_size", "RichTextLabel", -1);
1201
theme->set_font_size("bold_font_size", "RichTextLabel", -1);
1202
theme->set_font_size("italics_font_size", "RichTextLabel", -1);
1203
theme->set_font_size("bold_italics_font_size", "RichTextLabel", -1);
1204
theme->set_font_size("mono_font_size", "RichTextLabel", -1);
1205
1206
theme->set_color("default_color", "RichTextLabel", Color(1, 1, 1));
1207
theme->set_color("font_selected_color", "RichTextLabel", Color(0, 0, 0, 0));
1208
theme->set_color("selection_color", "RichTextLabel", Color(0.1, 0.1, 1, 0.8));
1209
1210
theme->set_color("font_shadow_color", "RichTextLabel", Color(0, 0, 0, 0));
1211
1212
theme->set_color("font_outline_color", "RichTextLabel", Color(0, 0, 0));
1213
1214
theme->set_constant("shadow_offset_x", "RichTextLabel", Math::round(1 * scale));
1215
theme->set_constant("shadow_offset_y", "RichTextLabel", Math::round(1 * scale));
1216
theme->set_constant("shadow_outline_size", "RichTextLabel", Math::round(1 * scale));
1217
1218
theme->set_constant(SceneStringName(line_separation), "RichTextLabel", 0);
1219
theme->set_constant(SceneStringName(paragraph_separation), "RichTextLabel", 0);
1220
theme->set_constant("table_h_separation", "RichTextLabel", Math::round(3 * scale));
1221
theme->set_constant("table_v_separation", "RichTextLabel", Math::round(3 * scale));
1222
1223
theme->set_constant("outline_size", "RichTextLabel", 0);
1224
1225
theme->set_color("table_odd_row_bg", "RichTextLabel", Color(0, 0, 0, 0));
1226
theme->set_color("table_even_row_bg", "RichTextLabel", Color(0, 0, 0, 0));
1227
theme->set_color("table_border", "RichTextLabel", Color(0, 0, 0, 0));
1228
1229
theme->set_constant("text_highlight_h_padding", "RichTextLabel", Math::round(3 * scale));
1230
theme->set_constant("text_highlight_v_padding", "RichTextLabel", Math::round(3 * scale));
1231
1232
theme->set_constant("underline_alpha", "RichTextLabel", 50);
1233
theme->set_constant("strikethrough_alpha", "RichTextLabel", 50);
1234
1235
// Containers
1236
1237
theme->set_color("touch_dragger_color", "SplitContainer", Color(1, 1, 1, 0.3));
1238
theme->set_color("touch_dragger_pressed_color", "SplitContainer", Color(1, 1, 1, 1));
1239
theme->set_color("touch_dragger_hover_color", "SplitContainer", Color(1, 1, 1, 0.6));
1240
1241
theme->set_icon("h_touch_dragger", "SplitContainer", icons["h_dragger"]);
1242
theme->set_icon("v_touch_dragger", "SplitContainer", icons["v_dragger"]);
1243
theme->set_icon("touch_dragger", "VSplitContainer", icons["v_dragger"]);
1244
theme->set_icon("touch_dragger", "HSplitContainer", icons["h_dragger"]);
1245
theme->set_icon("h_grabber", "SplitContainer", icons["hsplitter"]);
1246
theme->set_icon("v_grabber", "SplitContainer", icons["vsplitter"]);
1247
theme->set_icon("grabber", "VSplitContainer", icons["vsplitter"]);
1248
theme->set_icon("grabber", "HSplitContainer", icons["hsplitter"]);
1249
1250
theme->set_constant("separation", "BoxContainer", Math::round(4 * scale));
1251
theme->set_constant("separation", "HBoxContainer", Math::round(4 * scale));
1252
theme->set_constant("separation", "VBoxContainer", Math::round(4 * scale));
1253
theme->set_constant("margin_left", "MarginContainer", 0);
1254
theme->set_constant("margin_top", "MarginContainer", 0);
1255
theme->set_constant("margin_right", "MarginContainer", 0);
1256
theme->set_constant("margin_bottom", "MarginContainer", 0);
1257
theme->set_constant("h_separation", "GridContainer", Math::round(4 * scale));
1258
theme->set_constant("v_separation", "GridContainer", Math::round(4 * scale));
1259
theme->set_constant("separation", "SplitContainer", Math::round(12 * scale));
1260
theme->set_constant("separation", "HSplitContainer", Math::round(12 * scale));
1261
theme->set_constant("separation", "VSplitContainer", Math::round(12 * scale));
1262
theme->set_constant("minimum_grab_thickness", "SplitContainer", Math::round(6 * scale));
1263
theme->set_constant("minimum_grab_thickness", "HSplitContainer", Math::round(6 * scale));
1264
theme->set_constant("minimum_grab_thickness", "VSplitContainer", Math::round(6 * scale));
1265
theme->set_constant("autohide", "SplitContainer", 1);
1266
theme->set_constant("autohide", "HSplitContainer", 1);
1267
theme->set_constant("autohide", "VSplitContainer", 1);
1268
theme->set_constant("h_separation", "FlowContainer", Math::round(4 * scale));
1269
theme->set_constant("v_separation", "FlowContainer", Math::round(4 * scale));
1270
theme->set_constant("h_separation", "HFlowContainer", Math::round(4 * scale));
1271
theme->set_constant("v_separation", "HFlowContainer", Math::round(4 * scale));
1272
theme->set_constant("h_separation", "VFlowContainer", Math::round(4 * scale));
1273
theme->set_constant("v_separation", "VFlowContainer", Math::round(4 * scale));
1274
1275
theme->set_stylebox(SceneStringName(panel), "PanelContainer", make_flat_stylebox(style_normal_color, 0, 0, 0, 0));
1276
theme->set_stylebox("split_bar_background", "SplitContainer", make_empty_stylebox(0, 0, 0, 0));
1277
theme->set_stylebox("split_bar_background", "VSplitContainer", make_empty_stylebox(0, 0, 0, 0));
1278
theme->set_stylebox("split_bar_background", "HSplitContainer", make_empty_stylebox(0, 0, 0, 0));
1279
1280
theme->set_icon("zoom_out", "GraphEdit", icons["zoom_less"]);
1281
theme->set_icon("zoom_in", "GraphEdit", icons["zoom_more"]);
1282
theme->set_icon("zoom_reset", "GraphEdit", icons["zoom_reset"]);
1283
theme->set_icon("grid_toggle", "GraphEdit", icons["grid_toggle"]);
1284
theme->set_icon("minimap_toggle", "GraphEdit", icons["grid_minimap"]);
1285
theme->set_icon("snapping_toggle", "GraphEdit", icons["grid_snap"]);
1286
theme->set_icon("layout", "GraphEdit", icons["grid_layout"]);
1287
1288
theme->set_stylebox(SceneStringName(panel), "GraphEdit", make_flat_stylebox(style_normal_color, 4, 4, 4, 5));
1289
theme->set_stylebox("panel_focus", "GraphEdit", focus);
1290
1291
Ref<StyleBoxFlat> graph_toolbar_style = make_flat_stylebox(Color(0.24, 0.24, 0.24, 0.6), 4, 2, 4, 2);
1292
theme->set_stylebox("menu_panel", "GraphEdit", graph_toolbar_style);
1293
1294
theme->set_color("grid_minor", "GraphEdit", Color(1, 1, 1, 0.05));
1295
theme->set_color("grid_major", "GraphEdit", Color(1, 1, 1, 0.2));
1296
theme->set_color("selection_fill", "GraphEdit", Color(1, 1, 1, 0.3));
1297
theme->set_color("selection_stroke", "GraphEdit", Color(1, 1, 1, 0.8));
1298
theme->set_color("activity", "GraphEdit", Color(1, 1, 1));
1299
theme->set_color("connection_hover_tint_color", "GraphEdit", Color(0, 0, 0, 0.3));
1300
theme->set_constant("connection_hover_thickness", "GraphEdit", 0);
1301
theme->set_color("connection_valid_target_tint_color", "GraphEdit", Color(1, 1, 1, 0.4));
1302
theme->set_color("connection_rim_color", "GraphEdit", style_normal_color);
1303
1304
Ref<StyleBoxFlat> foldable_container_title = make_flat_stylebox(style_pressed_color);
1305
foldable_container_title->set_corner_radius(CORNER_BOTTOM_LEFT, 0);
1306
foldable_container_title->set_corner_radius(CORNER_BOTTOM_RIGHT, 0);
1307
theme->set_stylebox("title_panel", "FoldableContainer", foldable_container_title);
1308
Ref<StyleBoxFlat> foldable_container_hover = make_flat_stylebox(style_hover_color);
1309
foldable_container_hover->set_corner_radius(CORNER_BOTTOM_LEFT, 0);
1310
foldable_container_hover->set_corner_radius(CORNER_BOTTOM_RIGHT, 0);
1311
theme->set_stylebox("title_hover_panel", "FoldableContainer", foldable_container_hover);
1312
theme->set_stylebox("title_collapsed_panel", "FoldableContainer", make_flat_stylebox(style_pressed_color));
1313
theme->set_stylebox("title_collapsed_hover_panel", "FoldableContainer", make_flat_stylebox(style_hover_color));
1314
Ref<StyleBoxFlat> foldable_container_panel = make_flat_stylebox(style_normal_color);
1315
foldable_container_panel->set_content_margin_all(default_margin);
1316
foldable_container_panel->set_corner_radius(CORNER_TOP_LEFT, 0);
1317
foldable_container_panel->set_corner_radius(CORNER_TOP_RIGHT, 0);
1318
theme->set_stylebox(SceneStringName(panel), "FoldableContainer", foldable_container_panel);
1319
Ref<StyleBoxFlat> foldable_focus_style = make_flat_stylebox(style_focus_color, default_margin, default_margin, default_margin, default_margin, default_corner_radius, false, 2);
1320
theme->set_stylebox("focus", "FoldableContainer", foldable_focus_style);
1321
1322
theme->set_font(SceneStringName(font), "FoldableContainer", Ref<Font>());
1323
theme->set_font_size(SceneStringName(font_size), "FoldableContainer", default_font_size);
1324
1325
theme->set_color(SceneStringName(font_color), "FoldableContainer", control_font_color);
1326
theme->set_color("hover_font_color", "FoldableContainer", control_font_hover_color);
1327
theme->set_color("collapsed_font_color", "FoldableContainer", control_font_pressed_color);
1328
theme->set_color("font_outline_color", "FoldableContainer", Color(1, 1, 1));
1329
1330
theme->set_icon("expanded_arrow", "FoldableContainer", icons["arrow_down"]);
1331
theme->set_icon("expanded_arrow_mirrored", "FoldableContainer", icons["arrow_up"]);
1332
theme->set_icon("folded_arrow", "FoldableContainer", icons["arrow_right"]);
1333
theme->set_icon("folded_arrow_mirrored", "FoldableContainer", icons["arrow_left"]);
1334
1335
theme->set_constant("outline_size", "FoldableContainer", 0);
1336
theme->set_constant("h_separation", "FoldableContainer", Math::round(2 * scale));
1337
1338
// Visual Node Ports
1339
1340
theme->set_constant("port_hotzone_inner_extent", "GraphEdit", 22 * scale);
1341
theme->set_constant("port_hotzone_outer_extent", "GraphEdit", 26 * scale);
1342
1343
theme->set_stylebox(SceneStringName(panel), "GraphEditMinimap", make_flat_stylebox(Color(0.24, 0.24, 0.24), 0, 0, 0, 0));
1344
Ref<StyleBoxFlat> style_minimap_camera = make_flat_stylebox(Color(0.65, 0.65, 0.65, 0.2), 0, 0, 0, 0, 0);
1345
style_minimap_camera->set_border_color(Color(0.65, 0.65, 0.65, 0.45));
1346
style_minimap_camera->set_border_width_all(1);
1347
theme->set_stylebox("camera", "GraphEditMinimap", style_minimap_camera);
1348
theme->set_stylebox("node", "GraphEditMinimap", make_flat_stylebox(Color(1, 1, 1), 0, 0, 0, 0, 2));
1349
1350
theme->set_icon("resizer", "GraphEditMinimap", icons["resizer_nw"]);
1351
theme->set_color("resizer_color", "GraphEditMinimap", Color(1, 1, 1, 0.85));
1352
1353
// Theme
1354
1355
default_icon = icons["error_icon"];
1356
// Same color as the error icon.
1357
default_style = make_flat_stylebox(Color(1, 0.365, 0.365), 4, 4, 4, 4, 0, false, 2);
1358
}
1359
1360
void make_default_theme(float p_scale, Ref<Font> p_font, TextServer::SubpixelPositioning p_font_subpixel, TextServer::Hinting p_font_hinting, TextServer::FontAntialiasing p_font_antialiasing, bool p_font_msdf, bool p_font_generate_mipmaps) {
1361
Ref<Theme> t;
1362
t.instantiate();
1363
1364
Ref<StyleBox> default_style;
1365
Ref<Texture2D> default_icon;
1366
Ref<Font> default_font;
1367
Ref<FontVariation> bold_font;
1368
Ref<FontVariation> bold_italics_font;
1369
Ref<FontVariation> italics_font;
1370
float default_scale = CLAMP(p_scale, 0.5, 8.0);
1371
1372
if (p_font.is_valid()) {
1373
// Use the custom font defined in the Project Settings.
1374
default_font = p_font;
1375
} else {
1376
// Use the default DynamicFont (separate from the editor font).
1377
// The default DynamicFont is chosen to have a small file size since it's
1378
// embedded in both editor and export template binaries.
1379
Ref<FontFile> dynamic_font;
1380
dynamic_font.instantiate();
1381
#ifdef BROTLI_ENABLED
1382
dynamic_font->set_data_ptr(_font_OpenSans_SemiBold, _font_OpenSans_SemiBold_size);
1383
dynamic_font->set_subpixel_positioning(p_font_subpixel);
1384
dynamic_font->set_hinting(p_font_hinting);
1385
dynamic_font->set_antialiasing(p_font_antialiasing);
1386
dynamic_font->set_multichannel_signed_distance_field(p_font_msdf);
1387
dynamic_font->set_generate_mipmaps(p_font_generate_mipmaps);
1388
#endif
1389
default_font = dynamic_font;
1390
}
1391
1392
if (default_font.is_valid()) {
1393
bold_font.instantiate();
1394
bold_font->set_base_font(default_font);
1395
bold_font->set_variation_embolden(1.2);
1396
1397
bold_italics_font.instantiate();
1398
bold_italics_font->set_base_font(default_font);
1399
bold_italics_font->set_variation_embolden(1.2);
1400
bold_italics_font->set_variation_transform(Transform2D(1.0, 0.2, 0.0, 1.0, 0.0, 0.0));
1401
1402
italics_font.instantiate();
1403
italics_font->set_base_font(default_font);
1404
italics_font->set_variation_transform(Transform2D(1.0, 0.2, 0.0, 1.0, 0.0, 0.0));
1405
}
1406
1407
fill_default_theme(t, default_font, bold_font, bold_italics_font, italics_font, default_icon, default_style, default_scale);
1408
1409
ThemeDB::get_singleton()->set_default_theme(t);
1410
1411
ThemeDB::get_singleton()->set_fallback_base_scale(default_scale);
1412
ThemeDB::get_singleton()->set_fallback_icon(default_icon);
1413
ThemeDB::get_singleton()->set_fallback_stylebox(default_style);
1414
ThemeDB::get_singleton()->set_fallback_font(default_font);
1415
ThemeDB::get_singleton()->set_fallback_font_size(default_font_size * default_scale);
1416
}
1417
1418