Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
godotengine
GitHub Repository: godotengine/godot
Path: blob/master/scene/theme/default_theme.cpp
9898 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_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
theme->set_color("background_color", "TextEdit", Color(0, 0, 0, 0));
464
theme->set_color(SceneStringName(font_color), "TextEdit", control_font_color);
465
theme->set_color("font_selected_color", "TextEdit", Color(0, 0, 0, 0));
466
theme->set_color("font_readonly_color", "TextEdit", control_font_disabled_color);
467
theme->set_color("font_placeholder_color", "TextEdit", control_font_placeholder_color);
468
theme->set_color("font_outline_color", "TextEdit", Color(0, 0, 0));
469
theme->set_color("selection_color", "TextEdit", control_selection_color);
470
theme->set_color("current_line_color", "TextEdit", Color(0.25, 0.25, 0.26, 0.8));
471
theme->set_color("caret_color", "TextEdit", control_font_color);
472
theme->set_color("caret_background_color", "TextEdit", Color(0, 0, 0));
473
theme->set_color("word_highlighted_color", "TextEdit", Color(0.5, 0.5, 0.5, 0.25));
474
theme->set_color("search_result_color", "TextEdit", Color(0.3, 0.3, 0.3));
475
theme->set_color("search_result_border_color", "TextEdit", Color(0.3, 0.3, 0.3, 0.4));
476
477
theme->set_constant("line_spacing", "TextEdit", Math::round(4 * scale));
478
theme->set_constant("outline_size", "TextEdit", 0);
479
theme->set_constant("caret_width", "TextEdit", 1);
480
481
// CodeEdit
482
483
theme->set_stylebox(CoreStringName(normal), "CodeEdit", style_line_edit);
484
theme->set_stylebox("focus", "CodeEdit", focus);
485
theme->set_stylebox("read_only", "CodeEdit", style_line_edit_read_only);
486
theme->set_stylebox("completion", "CodeEdit", make_flat_stylebox(style_normal_color, 0, 0, 0, 0));
487
488
theme->set_icon("tab", "CodeEdit", icons["text_edit_tab"]);
489
theme->set_icon("space", "CodeEdit", icons["text_edit_space"]);
490
theme->set_icon("breakpoint", "CodeEdit", icons["breakpoint"]);
491
theme->set_icon("bookmark", "CodeEdit", icons["bookmark"]);
492
theme->set_icon("executing_line", "CodeEdit", icons["arrow_right"]);
493
theme->set_icon("can_fold", "CodeEdit", icons["arrow_down"]);
494
theme->set_icon("folded", "CodeEdit", icons["arrow_right"]);
495
theme->set_icon("can_fold_code_region", "CodeEdit", icons["region_unfolded"]);
496
theme->set_icon("folded_code_region", "CodeEdit", icons["region_folded"]);
497
theme->set_icon("folded_eol_icon", "CodeEdit", icons["text_edit_ellipsis"]);
498
theme->set_icon("completion_color_bg", "CodeEdit", icons["mini_checkerboard"]);
499
500
theme->set_font(SceneStringName(font), "CodeEdit", Ref<Font>());
501
theme->set_font_size(SceneStringName(font_size), "CodeEdit", -1);
502
503
theme->set_color("background_color", "CodeEdit", Color(0, 0, 0, 0));
504
theme->set_color("completion_background_color", "CodeEdit", Color(0.17, 0.16, 0.2));
505
theme->set_color("completion_selected_color", "CodeEdit", Color(0.26, 0.26, 0.27));
506
theme->set_color("completion_existing_color", "CodeEdit", Color(0.87, 0.87, 0.87, 0.13));
507
theme->set_color("completion_scroll_color", "CodeEdit", control_font_pressed_color * Color(1, 1, 1, 0.29));
508
theme->set_color("completion_scroll_hovered_color", "CodeEdit", control_font_pressed_color * Color(1, 1, 1, 0.4));
509
theme->set_color(SceneStringName(font_color), "CodeEdit", control_font_color);
510
theme->set_color("font_selected_color", "CodeEdit", Color(0, 0, 0, 0));
511
theme->set_color("font_readonly_color", "CodeEdit", Color(control_font_color.r, control_font_color.g, control_font_color.b, 0.5f));
512
theme->set_color("font_placeholder_color", "CodeEdit", control_font_placeholder_color);
513
theme->set_color("font_outline_color", "CodeEdit", Color(0, 0, 0));
514
theme->set_color("selection_color", "CodeEdit", control_selection_color);
515
theme->set_color("bookmark_color", "CodeEdit", Color(0.5, 0.64, 1, 0.8));
516
theme->set_color("breakpoint_color", "CodeEdit", Color(0.9, 0.29, 0.3));
517
theme->set_color("executing_line_color", "CodeEdit", Color(0.98, 0.89, 0.27));
518
theme->set_color("current_line_color", "CodeEdit", Color(0.25, 0.25, 0.26, 0.8));
519
theme->set_color("code_folding_color", "CodeEdit", Color(0.8, 0.8, 0.8, 0.8));
520
theme->set_color("folded_code_region_color", "CodeEdit", Color(0.68, 0.46, 0.77, 0.2));
521
theme->set_color("caret_color", "CodeEdit", control_font_color);
522
theme->set_color("caret_background_color", "CodeEdit", Color(0, 0, 0));
523
theme->set_color("brace_mismatch_color", "CodeEdit", Color(1, 0.2, 0.2));
524
theme->set_color("line_number_color", "CodeEdit", Color(0.67, 0.67, 0.67, 0.4));
525
theme->set_color("word_highlighted_color", "CodeEdit", Color(0.8, 0.9, 0.9, 0.15));
526
theme->set_color("line_length_guideline_color", "CodeEdit", Color(0.3, 0.5, 0.8, 0.1));
527
theme->set_color("search_result_color", "CodeEdit", Color(0.3, 0.3, 0.3));
528
theme->set_color("search_result_border_color", "CodeEdit", Color(0.3, 0.3, 0.3, 0.4));
529
530
theme->set_constant("completion_lines", "CodeEdit", 7);
531
theme->set_constant("completion_max_width", "CodeEdit", 50);
532
theme->set_constant("completion_scroll_width", "CodeEdit", 6);
533
theme->set_constant("line_spacing", "CodeEdit", Math::round(4 * scale));
534
theme->set_constant("outline_size", "CodeEdit", 0);
535
536
Ref<Texture2D> empty_icon = memnew(ImageTexture);
537
538
const Ref<StyleBoxFlat> style_h_scrollbar = make_flat_stylebox(style_normal_color, 0, 4, 0, 4, 10);
539
const Ref<StyleBoxFlat> style_v_scrollbar = make_flat_stylebox(style_normal_color, 4, 0, 4, 0, 10);
540
Ref<StyleBoxFlat> style_scrollbar_grabber = make_flat_stylebox(style_progress_color, 4, 4, 4, 4, 10);
541
Ref<StyleBoxFlat> style_scrollbar_grabber_highlight = make_flat_stylebox(style_focus_color, 4, 4, 4, 4, 10);
542
Ref<StyleBoxFlat> style_scrollbar_grabber_pressed = make_flat_stylebox(style_focus_color * Color(0.75, 0.75, 0.75), 4, 4, 4, 4, 10);
543
544
// HScrollBar
545
546
theme->set_stylebox("scroll", "HScrollBar", style_h_scrollbar);
547
theme->set_stylebox("scroll_focus", "HScrollBar", focus);
548
theme->set_stylebox("grabber", "HScrollBar", style_scrollbar_grabber);
549
theme->set_stylebox("grabber_highlight", "HScrollBar", style_scrollbar_grabber_highlight);
550
theme->set_stylebox("grabber_pressed", "HScrollBar", style_scrollbar_grabber_pressed);
551
552
theme->set_icon("increment", "HScrollBar", empty_icon);
553
theme->set_icon("increment_highlight", "HScrollBar", empty_icon);
554
theme->set_icon("increment_pressed", "HScrollBar", empty_icon);
555
theme->set_icon("decrement", "HScrollBar", empty_icon);
556
theme->set_icon("decrement_highlight", "HScrollBar", empty_icon);
557
theme->set_icon("decrement_pressed", "HScrollBar", empty_icon);
558
559
// VScrollBar
560
561
theme->set_stylebox("scroll", "VScrollBar", style_v_scrollbar);
562
theme->set_stylebox("scroll_focus", "VScrollBar", focus);
563
theme->set_stylebox("grabber", "VScrollBar", style_scrollbar_grabber);
564
theme->set_stylebox("grabber_highlight", "VScrollBar", style_scrollbar_grabber_highlight);
565
theme->set_stylebox("grabber_pressed", "VScrollBar", style_scrollbar_grabber_pressed);
566
567
theme->set_icon("increment", "VScrollBar", empty_icon);
568
theme->set_icon("increment_highlight", "VScrollBar", empty_icon);
569
theme->set_icon("increment_pressed", "VScrollBar", empty_icon);
570
theme->set_icon("decrement", "VScrollBar", empty_icon);
571
theme->set_icon("decrement_highlight", "VScrollBar", empty_icon);
572
theme->set_icon("decrement_pressed", "VScrollBar", empty_icon);
573
574
const Ref<StyleBoxFlat> style_slider = make_flat_stylebox(style_normal_color, 4, 4, 4, 4, 4);
575
const Ref<StyleBoxFlat> style_slider_grabber = make_flat_stylebox(style_progress_color, 4, 4, 4, 4, 4);
576
const Ref<StyleBoxFlat> style_slider_grabber_highlight = make_flat_stylebox(style_focus_color, 4, 4, 4, 4, 4);
577
578
// HSlider
579
580
theme->set_stylebox("slider", "HSlider", style_slider);
581
theme->set_stylebox("grabber_area", "HSlider", style_slider_grabber);
582
theme->set_stylebox("grabber_area_highlight", "HSlider", style_slider_grabber_highlight);
583
584
theme->set_icon("grabber", "HSlider", icons["slider_grabber"]);
585
theme->set_icon("grabber_highlight", "HSlider", icons["slider_grabber_hl"]);
586
theme->set_icon("grabber_disabled", "HSlider", icons["slider_grabber_disabled"]);
587
theme->set_icon("tick", "HSlider", icons["hslider_tick"]);
588
589
theme->set_constant("center_grabber", "HSlider", 0);
590
theme->set_constant("grabber_offset", "HSlider", 0);
591
theme->set_constant("tick_offset", "HSlider", 0);
592
593
// VSlider
594
595
theme->set_stylebox("slider", "VSlider", style_slider);
596
theme->set_stylebox("grabber_area", "VSlider", style_slider_grabber);
597
theme->set_stylebox("grabber_area_highlight", "VSlider", style_slider_grabber_highlight);
598
599
theme->set_icon("grabber", "VSlider", icons["slider_grabber"]);
600
theme->set_icon("grabber_highlight", "VSlider", icons["slider_grabber_hl"]);
601
theme->set_icon("grabber_disabled", "VSlider", icons["slider_grabber_disabled"]);
602
theme->set_icon("tick", "VSlider", icons["vslider_tick"]);
603
604
theme->set_constant("center_grabber", "VSlider", 0);
605
theme->set_constant("grabber_offset", "VSlider", 0);
606
theme->set_constant("tick_offset", "VSlider", 0);
607
608
// SpinBox
609
610
theme->set_icon("updown", "SpinBox", empty_icon);
611
theme->set_icon("up", "SpinBox", icons["value_up"]);
612
theme->set_icon("up_hover", "SpinBox", icons["value_up"]);
613
theme->set_icon("up_pressed", "SpinBox", icons["value_up"]);
614
theme->set_icon("up_disabled", "SpinBox", icons["value_up"]);
615
theme->set_icon("down", "SpinBox", icons["value_down"]);
616
theme->set_icon("down_hover", "SpinBox", icons["value_down"]);
617
theme->set_icon("down_pressed", "SpinBox", icons["value_down"]);
618
theme->set_icon("down_disabled", "SpinBox", icons["value_down"]);
619
620
theme->set_stylebox("up_background", "SpinBox", make_empty_stylebox());
621
theme->set_stylebox("up_background_hovered", "SpinBox", button_hover);
622
theme->set_stylebox("up_background_pressed", "SpinBox", button_pressed);
623
theme->set_stylebox("up_background_disabled", "SpinBox", make_empty_stylebox());
624
theme->set_stylebox("down_background", "SpinBox", make_empty_stylebox());
625
theme->set_stylebox("down_background_hovered", "SpinBox", button_hover);
626
theme->set_stylebox("down_background_pressed", "SpinBox", button_pressed);
627
theme->set_stylebox("down_background_disabled", "SpinBox", make_empty_stylebox());
628
629
theme->set_color("up_icon_modulate", "SpinBox", control_font_color);
630
theme->set_color("up_hover_icon_modulate", "SpinBox", control_font_hover_color);
631
theme->set_color("up_pressed_icon_modulate", "SpinBox", control_font_hover_color);
632
theme->set_color("up_disabled_icon_modulate", "SpinBox", control_font_disabled_color);
633
theme->set_color("down_icon_modulate", "SpinBox", control_font_color);
634
theme->set_color("down_hover_icon_modulate", "SpinBox", control_font_hover_color);
635
theme->set_color("down_pressed_icon_modulate", "SpinBox", control_font_hover_color);
636
theme->set_color("down_disabled_icon_modulate", "SpinBox", control_font_disabled_color);
637
638
theme->set_stylebox("field_and_buttons_separator", "SpinBox", make_empty_stylebox());
639
theme->set_stylebox("up_down_buttons_separator", "SpinBox", make_empty_stylebox());
640
641
theme->set_constant("buttons_vertical_separation", "SpinBox", 0);
642
theme->set_constant("field_and_buttons_separation", "SpinBox", 2);
643
theme->set_constant("buttons_width", "SpinBox", 16);
644
#ifndef DISABLE_DEPRECATED
645
theme->set_constant("set_min_buttons_width_from_icons", "SpinBox", 1);
646
#endif
647
648
// ScrollContainer
649
650
Ref<StyleBoxEmpty> empty;
651
empty.instantiate();
652
theme->set_stylebox(SceneStringName(panel), "ScrollContainer", empty);
653
654
const Ref<StyleBoxFlat> focus_style = make_flat_stylebox(style_focus_color);
655
// Make the focus outline appear to be flush with the buttons it's focusing, so not draw on top of the content.
656
sb_expand(focus_style, 4, 4, 4, 4);
657
focus_style->set_border_width_all(Math::round(2 * scale));
658
focus_style->set_draw_center(false);
659
focus_style->set_border_color(style_focus_color);
660
theme->set_stylebox("focus", "ScrollContainer", focus_style);
661
662
// Window
663
664
theme->set_stylebox("embedded_border", "Window", sb_expand(make_flat_stylebox(style_popup_color, 10, 28, 10, 8), 8, 32, 8, 6));
665
theme->set_stylebox("embedded_unfocused_border", "Window", sb_expand(make_flat_stylebox(style_popup_hover_color, 10, 28, 10, 8), 8, 32, 8, 6));
666
667
theme->set_font("title_font", "Window", Ref<Font>());
668
theme->set_font_size("title_font_size", "Window", -1);
669
theme->set_color("title_color", "Window", control_font_color);
670
theme->set_color("title_outline_modulate", "Window", Color(0, 0, 0));
671
theme->set_constant("title_outline_size", "Window", 0);
672
theme->set_constant("title_height", "Window", 36 * scale);
673
theme->set_constant("resize_margin", "Window", Math::round(4 * scale));
674
675
theme->set_icon("close", "Window", icons["close"]);
676
theme->set_icon("close_pressed", "Window", icons["close_hl"]);
677
theme->set_constant("close_h_offset", "Window", 18 * scale);
678
theme->set_constant("close_v_offset", "Window", 24 * scale);
679
680
// Dialogs
681
682
// AcceptDialog is currently the base dialog, so this defines styles for all extending nodes.
683
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));
684
theme->set_constant("buttons_separation", "AcceptDialog", Math::round(10 * scale));
685
686
// File Dialog
687
688
theme->set_constant("thumbnail_size", "FileDialog", 64);
689
theme->set_icon("load", "FileDialog", icons["load"]);
690
theme->set_icon("save", "FileDialog", icons["save"]);
691
theme->set_icon("clear", "FileDialog", icons["clear"]);
692
theme->set_icon("parent_folder", "FileDialog", icons["folder_up"]);
693
theme->set_icon("back_folder", "FileDialog", icons["arrow_left"]);
694
theme->set_icon("forward_folder", "FileDialog", icons["arrow_right"]);
695
theme->set_icon("reload", "FileDialog", icons["reload"]);
696
theme->set_icon("favorite", "FileDialog", icons["favorite"]);
697
theme->set_icon("toggle_hidden", "FileDialog", icons["visibility_visible"]);
698
theme->set_icon("toggle_filename_filter", "FileDialog", icons["toggle_filename_filter"]);
699
theme->set_icon("folder", "FileDialog", icons["folder"]);
700
theme->set_icon("file", "FileDialog", icons["file"]);
701
theme->set_icon("thumbnail_mode", "FileDialog", icons["file_mode_thumbnail"]);
702
theme->set_icon("list_mode", "FileDialog", icons["file_mode_list"]);
703
theme->set_icon("create_folder", "FileDialog", icons["folder_create"]);
704
theme->set_icon("sort", "FileDialog", icons["sort"]);
705
theme->set_icon("favorite_up", "FileDialog", icons["move_up"]);
706
theme->set_icon("favorite_down", "FileDialog", icons["move_down"]);
707
708
theme->set_icon("file_thumbnail", "FileDialog", icons["file_thumbnail"]);
709
theme->set_icon("folder_thumbnail", "FileDialog", icons["folder_thumbnail"]);
710
theme->set_color("folder_icon_color", "FileDialog", Color(1, 1, 1));
711
theme->set_color("file_icon_color", "FileDialog", Color(1, 1, 1));
712
theme->set_color("file_disabled_color", "FileDialog", Color(1, 1, 1, 0.25));
713
714
// Popup
715
716
theme->set_stylebox(SceneStringName(panel), "PopupPanel", make_flat_stylebox(style_normal_color));
717
718
// PopupDialog
719
720
theme->set_stylebox(SceneStringName(panel), "PopupDialog", make_flat_stylebox(style_normal_color));
721
722
// PopupMenu
723
724
Ref<StyleBoxLine> separator_horizontal = memnew(StyleBoxLine);
725
separator_horizontal->set_thickness(Math::round(scale));
726
separator_horizontal->set_color(style_separator_color);
727
separator_horizontal->set_content_margin_individual(default_margin, 0, default_margin, 0);
728
Ref<StyleBoxLine> separator_vertical = separator_horizontal->duplicate();
729
separator_vertical->set_vertical(true);
730
separator_vertical->set_content_margin_individual(0, default_margin, 0, default_margin);
731
732
// Always display a border for PopupMenus so they can be distinguished from their background.
733
Ref<StyleBoxFlat> style_popup_panel = make_flat_stylebox(style_popup_color);
734
style_popup_panel->set_border_width_all(2);
735
style_popup_panel->set_border_color(style_popup_border_color);
736
737
theme->set_stylebox(SceneStringName(panel), "PopupMenu", style_popup_panel);
738
theme->set_stylebox(SceneStringName(hover), "PopupMenu", make_flat_stylebox(style_popup_hover_color));
739
theme->set_stylebox("separator", "PopupMenu", separator_horizontal);
740
theme->set_stylebox("labeled_separator_left", "PopupMenu", separator_horizontal);
741
theme->set_stylebox("labeled_separator_right", "PopupMenu", separator_horizontal);
742
743
theme->set_icon("checked", "PopupMenu", icons["checked"]);
744
theme->set_icon("checked_disabled", "PopupMenu", icons["checked_disabled"]);
745
theme->set_icon("unchecked", "PopupMenu", icons["unchecked"]);
746
theme->set_icon("unchecked_disabled", "PopupMenu", icons["unchecked_disabled"]);
747
theme->set_icon("radio_checked", "PopupMenu", icons["radio_checked"]);
748
theme->set_icon("radio_checked_disabled", "PopupMenu", icons["radio_checked_disabled"]);
749
theme->set_icon("radio_unchecked", "PopupMenu", icons["radio_unchecked"]);
750
theme->set_icon("radio_unchecked_disabled", "PopupMenu", icons["radio_unchecked_disabled"]);
751
theme->set_icon("submenu", "PopupMenu", icons["popup_menu_arrow_right"]);
752
theme->set_icon("submenu_mirrored", "PopupMenu", icons["popup_menu_arrow_left"]);
753
754
theme->set_font(SceneStringName(font), "PopupMenu", Ref<Font>());
755
theme->set_font("font_separator", "PopupMenu", Ref<Font>());
756
theme->set_font_size(SceneStringName(font_size), "PopupMenu", -1);
757
theme->set_font_size("font_separator_size", "PopupMenu", -1);
758
759
theme->set_color(SceneStringName(font_color), "PopupMenu", control_font_color);
760
theme->set_color("font_accelerator_color", "PopupMenu", Color(0.7, 0.7, 0.7, 0.8));
761
theme->set_color("font_disabled_color", "PopupMenu", Color(0.4, 0.4, 0.4, 0.8));
762
theme->set_color("font_hover_color", "PopupMenu", control_font_color);
763
theme->set_color("font_separator_color", "PopupMenu", control_font_color);
764
theme->set_color("font_outline_color", "PopupMenu", Color(0, 0, 0));
765
theme->set_color("font_separator_outline_color", "PopupMenu", Color(0, 0, 0));
766
767
theme->set_constant("indent", "PopupMenu", Math::round(10 * scale));
768
theme->set_constant("h_separation", "PopupMenu", Math::round(4 * scale));
769
theme->set_constant("v_separation", "PopupMenu", Math::round(4 * scale));
770
theme->set_constant("outline_size", "PopupMenu", 0);
771
theme->set_constant("separator_outline_size", "PopupMenu", 0);
772
theme->set_constant("item_start_padding", "PopupMenu", Math::round(2 * scale));
773
theme->set_constant("item_end_padding", "PopupMenu", Math::round(2 * scale));
774
theme->set_constant("icon_max_width", "PopupMenu", 0);
775
776
// GraphNode
777
778
Ref<StyleBoxFlat> graphnode_normal = make_flat_stylebox(style_normal_color, 18, 12, 18, 12);
779
graphnode_normal->set_border_color(Color(0.325, 0.325, 0.325, 0.6));
780
Ref<StyleBoxFlat> graphnode_selected = graphnode_normal->duplicate();
781
graphnode_selected->set_border_color(Color(0.625, 0.625, 0.625, 0.6));
782
783
Ref<StyleBoxFlat> graphn_sb_titlebar = make_flat_stylebox(style_normal_color.lightened(0.3), 4, 4, 4, 4);
784
Ref<StyleBoxFlat> graphn_sb_titlebar_selected = graphnode_normal->duplicate();
785
graphn_sb_titlebar_selected->set_bg_color(Color(1.0, 0.625, 0.625, 0.6));
786
Ref<StyleBoxEmpty> graphnode_slot = make_empty_stylebox(0, 0, 0, 0);
787
788
theme->set_stylebox(SceneStringName(panel), "GraphNode", graphnode_normal);
789
theme->set_stylebox("panel_selected", "GraphNode", graphnode_selected);
790
theme->set_stylebox("panel_focus", "GraphNode", focus);
791
theme->set_stylebox("titlebar", "GraphNode", graphn_sb_titlebar);
792
theme->set_stylebox("titlebar_selected", "GraphNode", graphn_sb_titlebar_selected);
793
theme->set_stylebox("slot", "GraphNode", graphnode_slot);
794
theme->set_stylebox("slot_selected", "GraphNode", focus);
795
theme->set_icon("port", "GraphNode", icons["graph_port"]);
796
theme->set_icon("resizer", "GraphNode", icons["resizer_se"]);
797
theme->set_color("resizer_color", "GraphNode", control_font_color);
798
theme->set_constant("separation", "GraphNode", Math::round(2 * scale));
799
theme->set_constant("port_h_offset", "GraphNode", 0);
800
801
// GraphNodes's title Label.
802
803
theme->set_type_variation("GraphNodeTitleLabel", "Label");
804
805
theme->set_stylebox(CoreStringName(normal), "GraphNodeTitleLabel", make_empty_stylebox(0, 0, 0, 0));
806
theme->set_font(SceneStringName(font), "GraphNodeTitleLabel", Ref<Font>());
807
theme->set_font_size(SceneStringName(font_size), "GraphNodeTitleLabel", -1);
808
theme->set_color(SceneStringName(font_color), "GraphNodeTitleLabel", control_font_color);
809
theme->set_color("font_shadow_color", "GraphNodeTitleLabel", Color(0, 0, 0, 0));
810
theme->set_color("font_outline_color", "GraphNodeTitleLabel", Color(0, 0, 0));
811
theme->set_constant("shadow_offset_x", "GraphNodeTitleLabel", Math::round(1 * scale));
812
theme->set_constant("shadow_offset_y", "GraphNodeTitleLabel", Math::round(1 * scale));
813
theme->set_constant("outline_size", "GraphNodeTitleLabel", 0);
814
theme->set_constant("shadow_outline_size", "GraphNodeTitleLabel", Math::round(1 * scale));
815
theme->set_constant("line_spacing", "GraphNodeTitleLabel", Math::round(3 * scale));
816
817
// GraphFrame
818
819
Ref<StyleBoxFlat> graphframe_sb = make_flat_stylebox(style_pressed_color, 18, 12, 18, 12, 3, true, 2);
820
graphframe_sb->set_expand_margin(SIDE_TOP, 38 * scale);
821
graphframe_sb->set_border_color(style_pressed_color);
822
Ref<StyleBoxFlat> graphframe_sb_selected = graphframe_sb->duplicate();
823
graphframe_sb_selected->set_border_color(style_hover_color);
824
825
theme->set_stylebox(SceneStringName(panel), "GraphFrame", graphframe_sb);
826
theme->set_stylebox("panel_selected", "GraphFrame", graphframe_sb_selected);
827
theme->set_stylebox("titlebar", "GraphFrame", make_empty_stylebox(4, 4, 4, 4));
828
theme->set_stylebox("titlebar_selected", "GraphFrame", make_empty_stylebox(4, 4, 4, 4));
829
theme->set_icon("resizer", "GraphFrame", icons["resizer_se"]);
830
theme->set_color("resizer_color", "GraphFrame", control_font_color);
831
832
// GraphFrame's title Label
833
834
theme->set_type_variation("GraphFrameTitleLabel", "Label");
835
836
theme->set_stylebox(CoreStringName(normal), "GraphFrameTitleLabel", memnew(StyleBoxEmpty));
837
theme->set_font_size(SceneStringName(font_size), "GraphFrameTitleLabel", 22);
838
theme->set_color(SceneStringName(font_color), "GraphFrameTitleLabel", Color(1, 1, 1));
839
theme->set_color("font_shadow_color", "GraphFrameTitleLabel", Color(0, 0, 0, 0));
840
theme->set_color("font_outline_color", "GraphFrameTitleLabel", Color(1, 1, 1));
841
theme->set_constant("shadow_offset_x", "GraphFrameTitleLabel", 1 * scale);
842
theme->set_constant("shadow_offset_y", "GraphFrameTitleLabel", 1 * scale);
843
theme->set_constant("outline_size", "GraphFrameTitleLabel", 0);
844
theme->set_constant("shadow_outline_size", "GraphFrameTitleLabel", 1 * scale);
845
theme->set_constant("line_spacing", "GraphFrameTitleLabel", 3 * scale);
846
847
// Tree
848
849
theme->set_stylebox(SceneStringName(panel), "Tree", make_flat_stylebox(style_normal_color, 4, 4, 4, 5));
850
theme->set_stylebox("focus", "Tree", focus);
851
theme->set_stylebox("hovered", "Tree", make_flat_stylebox(Color(1, 1, 1, 0.07)));
852
theme->set_stylebox("hovered_dimmed", "Tree", make_flat_stylebox(Color(1, 1, 1, 0.03)));
853
theme->set_stylebox("hovered_selected", "Tree", make_flat_stylebox(style_hover_selected_color));
854
theme->set_stylebox("hovered_selected_focus", "Tree", make_flat_stylebox(style_hover_selected_color));
855
theme->set_stylebox("selected", "Tree", make_flat_stylebox(style_selected_color));
856
theme->set_stylebox("selected_focus", "Tree", make_flat_stylebox(style_selected_color));
857
theme->set_stylebox("cursor", "Tree", focus);
858
theme->set_stylebox("cursor_unfocused", "Tree", focus);
859
theme->set_stylebox("button_hover", "Tree", make_flat_stylebox(Color(1, 1, 1, 0.07)));
860
theme->set_stylebox("button_pressed", "Tree", button_pressed);
861
theme->set_stylebox("button_hover", "Tree", button_hover);
862
theme->set_stylebox("title_button_normal", "Tree", make_flat_stylebox(style_pressed_color, 4, 4, 4, 4));
863
theme->set_stylebox("title_button_pressed", "Tree", make_flat_stylebox(style_hover_color, 4, 4, 4, 4));
864
theme->set_stylebox("title_button_hover", "Tree", make_flat_stylebox(style_normal_color, 4, 4, 4, 4));
865
theme->set_stylebox("custom_button", "Tree", button_normal);
866
theme->set_stylebox("custom_button_pressed", "Tree", button_pressed);
867
theme->set_stylebox("custom_button_hover", "Tree", button_hover);
868
869
theme->set_icon("checked", "Tree", icons["checked"]);
870
theme->set_icon("checked_disabled", "Tree", icons["checked_disabled"]);
871
theme->set_icon("unchecked", "Tree", icons["unchecked"]);
872
theme->set_icon("unchecked_disabled", "Tree", icons["unchecked_disabled"]);
873
theme->set_icon("indeterminate", "Tree", icons["indeterminate"]);
874
theme->set_icon("indeterminate_disabled", "Tree", icons["indeterminate_disabled"]);
875
theme->set_icon("updown", "Tree", icons["updown"]);
876
theme->set_icon("select_arrow", "Tree", icons["option_button_arrow"]);
877
theme->set_icon("arrow", "Tree", icons["arrow_down"]);
878
theme->set_icon("arrow_collapsed", "Tree", icons["arrow_right"]);
879
theme->set_icon("arrow_collapsed_mirrored", "Tree", icons["arrow_left"]);
880
881
theme->set_font("title_button_font", "Tree", Ref<Font>());
882
theme->set_font(SceneStringName(font), "Tree", Ref<Font>());
883
theme->set_font_size(SceneStringName(font_size), "Tree", -1);
884
theme->set_font_size("title_button_font_size", "Tree", -1);
885
886
theme->set_color("title_button_color", "Tree", control_font_color);
887
theme->set_color(SceneStringName(font_color), "Tree", control_font_low_color);
888
theme->set_color("font_hovered_color", "Tree", control_font_hover_color);
889
theme->set_color("font_hovered_dimmed_color", "Tree", control_font_color);
890
theme->set_color("font_hovered_selected_color", "Tree", control_font_pressed_color);
891
theme->set_color("font_selected_color", "Tree", control_font_pressed_color);
892
theme->set_color("font_disabled_color", "Tree", control_font_disabled_color);
893
theme->set_color("font_outline_color", "Tree", Color(0, 0, 0));
894
theme->set_color("guide_color", "Tree", Color(0.7, 0.7, 0.7, 0.25));
895
theme->set_color("drop_position_color", "Tree", Color(1, 1, 1));
896
theme->set_color("relationship_line_color", "Tree", Color(0.27, 0.27, 0.27));
897
theme->set_color("parent_hl_line_color", "Tree", Color(0.27, 0.27, 0.27));
898
theme->set_color("children_hl_line_color", "Tree", Color(0.27, 0.27, 0.27));
899
theme->set_color("custom_button_font_highlight", "Tree", control_font_hover_color);
900
901
theme->set_constant("h_separation", "Tree", Math::round(4 * scale));
902
theme->set_constant("v_separation", "Tree", Math::round(4 * scale));
903
theme->set_constant("item_margin", "Tree", Math::round(16 * scale));
904
theme->set_constant("inner_item_margin_bottom", "Tree", 0);
905
theme->set_constant("inner_item_margin_left", "Tree", 0);
906
theme->set_constant("inner_item_margin_right", "Tree", 0);
907
theme->set_constant("inner_item_margin_top", "Tree", 0);
908
theme->set_constant("button_margin", "Tree", Math::round(4 * scale));
909
theme->set_constant("draw_relationship_lines", "Tree", 0);
910
theme->set_constant("relationship_line_width", "Tree", 1);
911
theme->set_constant("parent_hl_line_width", "Tree", 1);
912
theme->set_constant("children_hl_line_width", "Tree", 1);
913
theme->set_constant("parent_hl_line_margin", "Tree", 0);
914
theme->set_constant("draw_guides", "Tree", 1);
915
theme->set_constant("scroll_border", "Tree", Math::round(4 * scale));
916
theme->set_constant("scroll_speed", "Tree", 12);
917
theme->set_constant("outline_size", "Tree", 0);
918
theme->set_constant("icon_max_width", "Tree", 0);
919
theme->set_constant("scrollbar_margin_left", "Tree", -1);
920
theme->set_constant("scrollbar_margin_top", "Tree", -1);
921
theme->set_constant("scrollbar_margin_right", "Tree", -1);
922
theme->set_constant("scrollbar_margin_bottom", "Tree", -1);
923
theme->set_constant("scrollbar_h_separation", "Tree", Math::round(4 * scale));
924
theme->set_constant("scrollbar_v_separation", "Tree", Math::round(4 * scale));
925
926
// ItemList
927
928
theme->set_stylebox(SceneStringName(panel), "ItemList", make_flat_stylebox(style_normal_color));
929
theme->set_stylebox("focus", "ItemList", focus);
930
theme->set_constant("h_separation", "ItemList", Math::round(4 * scale));
931
theme->set_constant("v_separation", "ItemList", Math::round(4 * scale));
932
theme->set_constant("icon_margin", "ItemList", Math::round(4 * scale));
933
theme->set_constant(SceneStringName(line_separation), "ItemList", Math::round(2 * scale));
934
935
theme->set_font(SceneStringName(font), "ItemList", Ref<Font>());
936
theme->set_font_size(SceneStringName(font_size), "ItemList", -1);
937
938
theme->set_color(SceneStringName(font_color), "ItemList", control_font_lower_color);
939
theme->set_color("font_hovered_color", "ItemList", control_font_hover_color);
940
theme->set_color("font_hovered_selected_color", "ItemList", control_font_pressed_color);
941
theme->set_color("font_selected_color", "ItemList", control_font_pressed_color);
942
theme->set_color("font_outline_color", "ItemList", Color(0, 0, 0));
943
theme->set_color("guide_color", "ItemList", Color(0.7, 0.7, 0.7, 0.25));
944
theme->set_stylebox("hovered", "ItemList", make_flat_stylebox(Color(1, 1, 1, 0.07)));
945
theme->set_stylebox("hovered_selected", "ItemList", make_flat_stylebox(style_hover_selected_color));
946
theme->set_stylebox("hovered_selected_focus", "ItemList", make_flat_stylebox(style_hover_selected_color));
947
theme->set_stylebox("selected", "ItemList", make_flat_stylebox(style_selected_color));
948
theme->set_stylebox("selected_focus", "ItemList", make_flat_stylebox(style_selected_color));
949
theme->set_stylebox("cursor", "ItemList", focus);
950
theme->set_stylebox("cursor_unfocused", "ItemList", focus);
951
952
theme->set_constant("outline_size", "ItemList", 0);
953
954
// TabContainer
955
956
Ref<StyleBoxFlat> style_tab_selected = make_flat_stylebox(style_normal_color, 10, 4, 10, 4, 0);
957
style_tab_selected->set_border_width(SIDE_TOP, Math::round(2 * scale));
958
style_tab_selected->set_border_color(style_focus_color);
959
Ref<StyleBoxFlat> style_tab_unselected = make_flat_stylebox(style_pressed_color, 10, 4, 10, 4, 0);
960
// Add some spacing between unselected tabs to make them easier to distinguish from each other.
961
style_tab_unselected->set_border_width(SIDE_LEFT, Math::round(scale));
962
style_tab_unselected->set_border_width(SIDE_RIGHT, Math::round(scale));
963
style_tab_unselected->set_border_color(style_popup_border_color);
964
Ref<StyleBoxFlat> style_tab_disabled = style_tab_unselected->duplicate();
965
style_tab_disabled->set_bg_color(style_disabled_color);
966
Ref<StyleBoxFlat> style_tab_hovered = style_tab_unselected->duplicate();
967
style_tab_hovered->set_bg_color(Color(0.1, 0.1, 0.1, 0.3));
968
Ref<StyleBoxFlat> style_tab_focus = focus->duplicate();
969
970
theme->set_stylebox("tab_selected", "TabContainer", style_tab_selected);
971
theme->set_stylebox("tab_hovered", "TabContainer", style_tab_hovered);
972
theme->set_stylebox("tab_unselected", "TabContainer", style_tab_unselected);
973
theme->set_stylebox("tab_disabled", "TabContainer", style_tab_disabled);
974
theme->set_stylebox("tab_focus", "TabContainer", style_tab_focus);
975
theme->set_stylebox(SceneStringName(panel), "TabContainer", make_flat_stylebox(style_normal_color, 0, 0, 0, 0));
976
theme->set_stylebox("tabbar_background", "TabContainer", make_empty_stylebox(0, 0, 0, 0));
977
978
theme->set_icon("increment", "TabContainer", icons["scroll_button_right"]);
979
theme->set_icon("increment_highlight", "TabContainer", icons["scroll_button_right_hl"]);
980
theme->set_icon("decrement", "TabContainer", icons["scroll_button_left"]);
981
theme->set_icon("decrement_highlight", "TabContainer", icons["scroll_button_left_hl"]);
982
theme->set_icon("drop_mark", "TabContainer", icons["tabs_drop_mark"]);
983
theme->set_icon("menu", "TabContainer", icons["tabs_menu"]);
984
theme->set_icon("menu_highlight", "TabContainer", icons["tabs_menu_hl"]);
985
986
theme->set_font(SceneStringName(font), "TabContainer", Ref<Font>());
987
theme->set_font_size(SceneStringName(font_size), "TabContainer", -1);
988
989
theme->set_color("font_selected_color", "TabContainer", control_font_hover_color);
990
theme->set_color("font_hovered_color", "TabContainer", control_font_hover_color);
991
theme->set_color("font_unselected_color", "TabContainer", control_font_low_color);
992
theme->set_color("font_disabled_color", "TabContainer", control_font_disabled_color);
993
theme->set_color("font_outline_color", "TabContainer", Color(0, 0, 0));
994
theme->set_color("drop_mark_color", "TabContainer", Color(1, 1, 1));
995
996
theme->set_constant("side_margin", "TabContainer", Math::round(8 * scale));
997
theme->set_constant("icon_separation", "TabContainer", Math::round(4 * scale));
998
theme->set_constant("icon_max_width", "TabContainer", 0);
999
theme->set_constant("outline_size", "TabContainer", 0);
1000
1001
// TabBar
1002
1003
theme->set_stylebox("tab_selected", "TabBar", style_tab_selected);
1004
theme->set_stylebox("tab_hovered", "TabBar", style_tab_hovered);
1005
theme->set_stylebox("tab_unselected", "TabBar", style_tab_unselected);
1006
theme->set_stylebox("tab_disabled", "TabBar", style_tab_disabled);
1007
theme->set_stylebox("tab_focus", "TabBar", style_tab_focus);
1008
theme->set_stylebox("button_pressed", "TabBar", button_pressed);
1009
theme->set_stylebox("button_highlight", "TabBar", button_normal);
1010
1011
theme->set_icon("increment", "TabBar", icons["scroll_button_right"]);
1012
theme->set_icon("increment_highlight", "TabBar", icons["scroll_button_right_hl"]);
1013
theme->set_icon("decrement", "TabBar", icons["scroll_button_left"]);
1014
theme->set_icon("decrement_highlight", "TabBar", icons["scroll_button_left_hl"]);
1015
theme->set_icon("drop_mark", "TabBar", icons["tabs_drop_mark"]);
1016
theme->set_icon("close", "TabBar", icons["close"]);
1017
1018
theme->set_font(SceneStringName(font), "TabBar", Ref<Font>());
1019
theme->set_font_size(SceneStringName(font_size), "TabBar", -1);
1020
1021
theme->set_color("font_selected_color", "TabBar", control_font_hover_color);
1022
theme->set_color("font_hovered_color", "TabBar", control_font_hover_color);
1023
theme->set_color("font_unselected_color", "TabBar", control_font_low_color);
1024
theme->set_color("font_disabled_color", "TabBar", control_font_disabled_color);
1025
theme->set_color("font_outline_color", "TabBar", Color(0, 0, 0));
1026
theme->set_color("drop_mark_color", "TabBar", Color(1, 1, 1));
1027
1028
theme->set_constant("h_separation", "TabBar", Math::round(4 * scale));
1029
theme->set_constant("icon_max_width", "TabBar", 0);
1030
theme->set_constant("outline_size", "TabBar", 0);
1031
1032
// Separators
1033
1034
theme->set_stylebox("separator", "HSeparator", separator_horizontal);
1035
theme->set_stylebox("separator", "VSeparator", separator_vertical);
1036
1037
theme->set_icon("close", "Icons", icons["close"]);
1038
1039
theme->set_constant("separation", "HSeparator", Math::round(4 * scale));
1040
theme->set_constant("separation", "VSeparator", Math::round(4 * scale));
1041
1042
// ColorPicker
1043
Ref<StyleBoxFlat> focus_circle = make_flat_stylebox(style_focus_color, default_margin, default_margin, default_margin, default_margin, default_corner_radius, false, 2);
1044
focus_circle->set_corner_radius_all(Math::round(256 * scale));
1045
focus_circle->set_corner_detail(Math::round(32 * scale));
1046
1047
theme->set_constant("margin", "ColorPicker", Math::round(4 * scale));
1048
theme->set_constant("sv_width", "ColorPicker", Math::round(256 * scale));
1049
theme->set_constant("sv_height", "ColorPicker", Math::round(256 * scale));
1050
theme->set_constant("h_width", "ColorPicker", Math::round(30 * scale));
1051
theme->set_constant("label_width", "ColorPicker", Math::round(10 * scale));
1052
theme->set_constant("center_slider_grabbers", "ColorPicker", 1);
1053
1054
theme->set_stylebox("sample_focus", "ColorPicker", focus);
1055
theme->set_stylebox("picker_focus_rectangle", "ColorPicker", focus);
1056
theme->set_stylebox("picker_focus_circle", "ColorPicker", focus_circle);
1057
theme->set_color("focused_not_editing_cursor_color", "ColorPicker", Color(1, 1, 1, 0.275f));
1058
1059
theme->set_icon("menu_option", "ColorPicker", icons["tabs_menu_hl"]);
1060
theme->set_icon("folded_arrow", "ColorPicker", icons["arrow_right"]);
1061
theme->set_icon("expanded_arrow", "ColorPicker", icons["arrow_down"]);
1062
theme->set_icon("screen_picker", "ColorPicker", icons["color_picker_pipette"]);
1063
theme->set_icon("shape_circle", "ColorPicker", icons["picker_shape_circle"]);
1064
theme->set_icon("shape_rect", "ColorPicker", icons["picker_shape_rectangle"]);
1065
theme->set_icon("shape_rect_wheel", "ColorPicker", icons["picker_shape_rectangle_wheel"]);
1066
theme->set_icon("add_preset", "ColorPicker", icons["add"]);
1067
theme->set_icon("sample_bg", "ColorPicker", icons["mini_checkerboard"]);
1068
theme->set_icon("sample_revert", "ColorPicker", icons["reload"]);
1069
theme->set_icon("overbright_indicator", "ColorPicker", icons["color_picker_overbright"]);
1070
theme->set_icon("bar_arrow", "ColorPicker", icons["color_picker_bar_arrow"]);
1071
theme->set_icon("picker_cursor", "ColorPicker", icons["color_picker_cursor"]);
1072
theme->set_icon("picker_cursor_bg", "ColorPicker", icons["color_picker_cursor_bg"]);
1073
theme->set_icon("color_script", "ColorPicker", icons["script"]);
1074
1075
{
1076
const int precision = 7;
1077
1078
Ref<Gradient> hue_gradient;
1079
hue_gradient.instantiate();
1080
PackedFloat32Array offsets;
1081
offsets.resize(precision);
1082
PackedColorArray colors;
1083
colors.resize(precision);
1084
1085
for (int i = 0; i < precision; i++) {
1086
float h = i / float(precision - 1);
1087
offsets.write[i] = h;
1088
colors.write[i] = Color::from_hsv(h, 1, 1);
1089
}
1090
hue_gradient->set_offsets(offsets);
1091
hue_gradient->set_colors(colors);
1092
1093
Ref<GradientTexture2D> hue_texture;
1094
hue_texture.instantiate();
1095
hue_texture->set_width(800);
1096
hue_texture->set_height(6);
1097
hue_texture->set_gradient(hue_gradient);
1098
1099
theme->set_icon("color_hue", "ColorPicker", hue_texture);
1100
}
1101
1102
// ColorPickerButton
1103
1104
theme->set_icon("bg", "ColorPickerButton", icons["mini_checkerboard"]);
1105
theme->set_stylebox(CoreStringName(normal), "ColorPickerButton", button_normal);
1106
theme->set_stylebox(SceneStringName(pressed), "ColorPickerButton", button_pressed);
1107
theme->set_stylebox(SceneStringName(hover), "ColorPickerButton", button_hover);
1108
theme->set_stylebox("disabled", "ColorPickerButton", button_disabled);
1109
theme->set_stylebox("focus", "ColorPickerButton", focus);
1110
1111
theme->set_font(SceneStringName(font), "ColorPickerButton", Ref<Font>());
1112
theme->set_font_size(SceneStringName(font_size), "ColorPickerButton", -1);
1113
1114
theme->set_color(SceneStringName(font_color), "ColorPickerButton", Color(1, 1, 1, 1));
1115
theme->set_color("font_pressed_color", "ColorPickerButton", Color(0.8, 0.8, 0.8, 1));
1116
theme->set_color("font_hover_color", "ColorPickerButton", Color(1, 1, 1, 1));
1117
theme->set_color("font_focus_color", "ColorPickerButton", Color(1, 1, 1, 1));
1118
theme->set_color("font_disabled_color", "ColorPickerButton", Color(0.9, 0.9, 0.9, 0.3));
1119
theme->set_color("font_outline_color", "ColorPickerButton", Color(0, 0, 0));
1120
1121
theme->set_constant("h_separation", "ColorPickerButton", Math::round(4 * scale));
1122
theme->set_constant("outline_size", "ColorPickerButton", 0);
1123
1124
// ColorPresetButton
1125
1126
Ref<StyleBoxFlat> preset_sb = make_flat_stylebox(Color(1, 1, 1), 2, 2, 2, 2);
1127
preset_sb->set_corner_radius_all(Math::round(2 * scale));
1128
preset_sb->set_corner_detail(Math::round(2 * scale));
1129
preset_sb->set_anti_aliased(false);
1130
1131
theme->set_stylebox("preset_fg", "ColorPresetButton", preset_sb);
1132
theme->set_stylebox("preset_focus", "ColorPresetButton", focus);
1133
theme->set_icon("preset_bg", "ColorPresetButton", icons["mini_checkerboard"]);
1134
theme->set_icon("overbright_indicator", "ColorPresetButton", icons["color_picker_overbright"]);
1135
1136
// TooltipPanel + TooltipLabel
1137
1138
theme->set_type_variation("TooltipPanel", "PopupPanel");
1139
theme->set_stylebox(SceneStringName(panel), "TooltipPanel",
1140
make_flat_stylebox(Color(0, 0, 0, 0.5), 2 * default_margin, 0.5 * default_margin, 2 * default_margin, 0.5 * default_margin));
1141
1142
theme->set_type_variation("TooltipLabel", "Label");
1143
theme->set_font_size(SceneStringName(font_size), "TooltipLabel", -1);
1144
theme->set_font(SceneStringName(font), "TooltipLabel", Ref<Font>());
1145
1146
theme->set_color(SceneStringName(font_color), "TooltipLabel", control_font_color);
1147
theme->set_color("font_shadow_color", "TooltipLabel", Color(0, 0, 0, 0));
1148
theme->set_color("font_outline_color", "TooltipLabel", Color(0, 0, 0));
1149
1150
theme->set_constant("shadow_offset_x", "TooltipLabel", 1);
1151
theme->set_constant("shadow_offset_y", "TooltipLabel", 1);
1152
theme->set_constant("outline_size", "TooltipLabel", 0);
1153
1154
// RichTextLabel
1155
1156
theme->set_stylebox("focus", "RichTextLabel", focus);
1157
theme->set_stylebox(CoreStringName(normal), "RichTextLabel", make_empty_stylebox(0, 0, 0, 0));
1158
1159
Ref<Image> solid_img = Image::create_empty(2, 2, false, Image::FORMAT_RGBA8);
1160
solid_img->fill(Color(1, 1, 1, 1));
1161
Ref<Texture2D> solid_icon = ImageTexture::create_from_image(solid_img);
1162
1163
theme->set_icon("horizontal_rule", "RichTextLabel", solid_icon);
1164
1165
theme->set_font("normal_font", "RichTextLabel", Ref<Font>());
1166
theme->set_font("bold_font", "RichTextLabel", bold_font);
1167
theme->set_font("italics_font", "RichTextLabel", italics_font);
1168
theme->set_font("bold_italics_font", "RichTextLabel", bold_italics_font);
1169
theme->set_font("mono_font", "RichTextLabel", Ref<Font>());
1170
theme->set_font_size("normal_font_size", "RichTextLabel", -1);
1171
theme->set_font_size("bold_font_size", "RichTextLabel", -1);
1172
theme->set_font_size("italics_font_size", "RichTextLabel", -1);
1173
theme->set_font_size("bold_italics_font_size", "RichTextLabel", -1);
1174
theme->set_font_size("mono_font_size", "RichTextLabel", -1);
1175
1176
theme->set_color("default_color", "RichTextLabel", Color(1, 1, 1));
1177
theme->set_color("font_selected_color", "RichTextLabel", Color(0, 0, 0, 0));
1178
theme->set_color("selection_color", "RichTextLabel", Color(0.1, 0.1, 1, 0.8));
1179
1180
theme->set_color("font_shadow_color", "RichTextLabel", Color(0, 0, 0, 0));
1181
1182
theme->set_color("font_outline_color", "RichTextLabel", Color(0, 0, 0));
1183
1184
theme->set_constant("shadow_offset_x", "RichTextLabel", Math::round(1 * scale));
1185
theme->set_constant("shadow_offset_y", "RichTextLabel", Math::round(1 * scale));
1186
theme->set_constant("shadow_outline_size", "RichTextLabel", Math::round(1 * scale));
1187
1188
theme->set_constant(SceneStringName(line_separation), "RichTextLabel", 0);
1189
theme->set_constant(SceneStringName(paragraph_separation), "RichTextLabel", 0);
1190
theme->set_constant("table_h_separation", "RichTextLabel", Math::round(3 * scale));
1191
theme->set_constant("table_v_separation", "RichTextLabel", Math::round(3 * scale));
1192
1193
theme->set_constant("outline_size", "RichTextLabel", 0);
1194
1195
theme->set_color("table_odd_row_bg", "RichTextLabel", Color(0, 0, 0, 0));
1196
theme->set_color("table_even_row_bg", "RichTextLabel", Color(0, 0, 0, 0));
1197
theme->set_color("table_border", "RichTextLabel", Color(0, 0, 0, 0));
1198
1199
theme->set_constant("text_highlight_h_padding", "RichTextLabel", Math::round(3 * scale));
1200
theme->set_constant("text_highlight_v_padding", "RichTextLabel", Math::round(3 * scale));
1201
1202
theme->set_constant("underline_alpha", "RichTextLabel", 50);
1203
theme->set_constant("strikethrough_alpha", "RichTextLabel", 50);
1204
1205
// Containers
1206
1207
theme->set_color("touch_dragger_color", "SplitContainer", Color(1, 1, 1, 0.3));
1208
theme->set_color("touch_dragger_pressed_color", "SplitContainer", Color(1, 1, 1, 1));
1209
theme->set_color("touch_dragger_hover_color", "SplitContainer", Color(1, 1, 1, 0.6));
1210
1211
theme->set_icon("h_touch_dragger", "SplitContainer", icons["h_dragger"]);
1212
theme->set_icon("v_touch_dragger", "SplitContainer", icons["v_dragger"]);
1213
theme->set_icon("touch_dragger", "VSplitContainer", icons["v_dragger"]);
1214
theme->set_icon("touch_dragger", "HSplitContainer", icons["h_dragger"]);
1215
theme->set_icon("h_grabber", "SplitContainer", icons["hsplitter"]);
1216
theme->set_icon("v_grabber", "SplitContainer", icons["vsplitter"]);
1217
theme->set_icon("grabber", "VSplitContainer", icons["vsplitter"]);
1218
theme->set_icon("grabber", "HSplitContainer", icons["hsplitter"]);
1219
1220
theme->set_constant("separation", "BoxContainer", Math::round(4 * scale));
1221
theme->set_constant("separation", "HBoxContainer", Math::round(4 * scale));
1222
theme->set_constant("separation", "VBoxContainer", Math::round(4 * scale));
1223
theme->set_constant("margin_left", "MarginContainer", 0);
1224
theme->set_constant("margin_top", "MarginContainer", 0);
1225
theme->set_constant("margin_right", "MarginContainer", 0);
1226
theme->set_constant("margin_bottom", "MarginContainer", 0);
1227
theme->set_constant("h_separation", "GridContainer", Math::round(4 * scale));
1228
theme->set_constant("v_separation", "GridContainer", Math::round(4 * scale));
1229
theme->set_constant("separation", "SplitContainer", Math::round(12 * scale));
1230
theme->set_constant("separation", "HSplitContainer", Math::round(12 * scale));
1231
theme->set_constant("separation", "VSplitContainer", Math::round(12 * scale));
1232
theme->set_constant("minimum_grab_thickness", "SplitContainer", Math::round(6 * scale));
1233
theme->set_constant("minimum_grab_thickness", "HSplitContainer", Math::round(6 * scale));
1234
theme->set_constant("minimum_grab_thickness", "VSplitContainer", Math::round(6 * scale));
1235
theme->set_constant("autohide", "SplitContainer", 1);
1236
theme->set_constant("autohide", "HSplitContainer", 1);
1237
theme->set_constant("autohide", "VSplitContainer", 1);
1238
theme->set_constant("h_separation", "FlowContainer", Math::round(4 * scale));
1239
theme->set_constant("v_separation", "FlowContainer", Math::round(4 * scale));
1240
theme->set_constant("h_separation", "HFlowContainer", Math::round(4 * scale));
1241
theme->set_constant("v_separation", "HFlowContainer", Math::round(4 * scale));
1242
theme->set_constant("h_separation", "VFlowContainer", Math::round(4 * scale));
1243
theme->set_constant("v_separation", "VFlowContainer", Math::round(4 * scale));
1244
1245
theme->set_stylebox(SceneStringName(panel), "PanelContainer", make_flat_stylebox(style_normal_color, 0, 0, 0, 0));
1246
theme->set_stylebox("split_bar_background", "SplitContainer", make_empty_stylebox(0, 0, 0, 0));
1247
theme->set_stylebox("split_bar_background", "VSplitContainer", make_empty_stylebox(0, 0, 0, 0));
1248
theme->set_stylebox("split_bar_background", "HSplitContainer", make_empty_stylebox(0, 0, 0, 0));
1249
1250
theme->set_icon("zoom_out", "GraphEdit", icons["zoom_less"]);
1251
theme->set_icon("zoom_in", "GraphEdit", icons["zoom_more"]);
1252
theme->set_icon("zoom_reset", "GraphEdit", icons["zoom_reset"]);
1253
theme->set_icon("grid_toggle", "GraphEdit", icons["grid_toggle"]);
1254
theme->set_icon("minimap_toggle", "GraphEdit", icons["grid_minimap"]);
1255
theme->set_icon("snapping_toggle", "GraphEdit", icons["grid_snap"]);
1256
theme->set_icon("layout", "GraphEdit", icons["grid_layout"]);
1257
1258
theme->set_stylebox(SceneStringName(panel), "GraphEdit", make_flat_stylebox(style_normal_color, 4, 4, 4, 5));
1259
theme->set_stylebox("panel_focus", "GraphEdit", focus);
1260
1261
Ref<StyleBoxFlat> graph_toolbar_style = make_flat_stylebox(Color(0.24, 0.24, 0.24, 0.6), 4, 2, 4, 2);
1262
theme->set_stylebox("menu_panel", "GraphEdit", graph_toolbar_style);
1263
1264
theme->set_color("grid_minor", "GraphEdit", Color(1, 1, 1, 0.05));
1265
theme->set_color("grid_major", "GraphEdit", Color(1, 1, 1, 0.2));
1266
theme->set_color("selection_fill", "GraphEdit", Color(1, 1, 1, 0.3));
1267
theme->set_color("selection_stroke", "GraphEdit", Color(1, 1, 1, 0.8));
1268
theme->set_color("activity", "GraphEdit", Color(1, 1, 1));
1269
theme->set_color("connection_hover_tint_color", "GraphEdit", Color(0, 0, 0, 0.3));
1270
theme->set_constant("connection_hover_thickness", "GraphEdit", 0);
1271
theme->set_color("connection_valid_target_tint_color", "GraphEdit", Color(1, 1, 1, 0.4));
1272
theme->set_color("connection_rim_color", "GraphEdit", style_normal_color);
1273
1274
Ref<StyleBoxFlat> foldable_container_title = make_flat_stylebox(style_pressed_color);
1275
foldable_container_title->set_corner_radius(CORNER_BOTTOM_LEFT, 0);
1276
foldable_container_title->set_corner_radius(CORNER_BOTTOM_RIGHT, 0);
1277
theme->set_stylebox("title_panel", "FoldableContainer", foldable_container_title);
1278
Ref<StyleBoxFlat> foldable_container_hover = make_flat_stylebox(style_hover_color);
1279
foldable_container_hover->set_corner_radius(CORNER_BOTTOM_LEFT, 0);
1280
foldable_container_hover->set_corner_radius(CORNER_BOTTOM_RIGHT, 0);
1281
theme->set_stylebox("title_hover_panel", "FoldableContainer", foldable_container_hover);
1282
theme->set_stylebox("title_collapsed_panel", "FoldableContainer", make_flat_stylebox(style_pressed_color));
1283
theme->set_stylebox("title_collapsed_hover_panel", "FoldableContainer", make_flat_stylebox(style_hover_color));
1284
Ref<StyleBoxFlat> foldable_container_panel = make_flat_stylebox(style_normal_color);
1285
foldable_container_panel->set_content_margin_all(default_margin);
1286
foldable_container_panel->set_corner_radius(CORNER_TOP_LEFT, 0);
1287
foldable_container_panel->set_corner_radius(CORNER_TOP_RIGHT, 0);
1288
theme->set_stylebox(SceneStringName(panel), "FoldableContainer", foldable_container_panel);
1289
Ref<StyleBoxFlat> foldable_focus_style = make_flat_stylebox(style_focus_color, default_margin, default_margin, default_margin, default_margin, default_corner_radius, false, 2);
1290
theme->set_stylebox("focus", "FoldableContainer", foldable_focus_style);
1291
1292
theme->set_font(SceneStringName(font), "FoldableContainer", Ref<Font>());
1293
theme->set_font_size(SceneStringName(font_size), "FoldableContainer", default_font_size);
1294
1295
theme->set_color(SceneStringName(font_color), "FoldableContainer", control_font_color);
1296
theme->set_color("hover_font_color", "FoldableContainer", control_font_hover_color);
1297
theme->set_color("collapsed_font_color", "FoldableContainer", control_font_pressed_color);
1298
theme->set_color("font_outline_color", "FoldableContainer", Color(1, 1, 1));
1299
1300
theme->set_icon("expanded_arrow", "FoldableContainer", icons["arrow_down"]);
1301
theme->set_icon("expanded_arrow_mirrored", "FoldableContainer", icons["arrow_up"]);
1302
theme->set_icon("folded_arrow", "FoldableContainer", icons["arrow_right"]);
1303
theme->set_icon("folded_arrow_mirrored", "FoldableContainer", icons["arrow_left"]);
1304
1305
theme->set_constant("outline_size", "FoldableContainer", 0);
1306
theme->set_constant("h_separation", "FoldableContainer", Math::round(2 * scale));
1307
1308
// Visual Node Ports
1309
1310
theme->set_constant("port_hotzone_inner_extent", "GraphEdit", 22 * scale);
1311
theme->set_constant("port_hotzone_outer_extent", "GraphEdit", 26 * scale);
1312
1313
theme->set_stylebox(SceneStringName(panel), "GraphEditMinimap", make_flat_stylebox(Color(0.24, 0.24, 0.24), 0, 0, 0, 0));
1314
Ref<StyleBoxFlat> style_minimap_camera = make_flat_stylebox(Color(0.65, 0.65, 0.65, 0.2), 0, 0, 0, 0, 0);
1315
style_minimap_camera->set_border_color(Color(0.65, 0.65, 0.65, 0.45));
1316
style_minimap_camera->set_border_width_all(1);
1317
theme->set_stylebox("camera", "GraphEditMinimap", style_minimap_camera);
1318
theme->set_stylebox("node", "GraphEditMinimap", make_flat_stylebox(Color(1, 1, 1), 0, 0, 0, 0, 2));
1319
1320
theme->set_icon("resizer", "GraphEditMinimap", icons["resizer_nw"]);
1321
theme->set_color("resizer_color", "GraphEditMinimap", Color(1, 1, 1, 0.85));
1322
1323
// Theme
1324
1325
default_icon = icons["error_icon"];
1326
// Same color as the error icon.
1327
default_style = make_flat_stylebox(Color(1, 0.365, 0.365), 4, 4, 4, 4, 0, false, 2);
1328
}
1329
1330
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) {
1331
Ref<Theme> t;
1332
t.instantiate();
1333
1334
Ref<StyleBox> default_style;
1335
Ref<Texture2D> default_icon;
1336
Ref<Font> default_font;
1337
Ref<FontVariation> bold_font;
1338
Ref<FontVariation> bold_italics_font;
1339
Ref<FontVariation> italics_font;
1340
float default_scale = CLAMP(p_scale, 0.5, 8.0);
1341
1342
if (p_font.is_valid()) {
1343
// Use the custom font defined in the Project Settings.
1344
default_font = p_font;
1345
} else {
1346
// Use the default DynamicFont (separate from the editor font).
1347
// The default DynamicFont is chosen to have a small file size since it's
1348
// embedded in both editor and export template binaries.
1349
Ref<FontFile> dynamic_font;
1350
dynamic_font.instantiate();
1351
#ifdef BROTLI_ENABLED
1352
dynamic_font->set_data_ptr(_font_OpenSans_SemiBold, _font_OpenSans_SemiBold_size);
1353
dynamic_font->set_subpixel_positioning(p_font_subpixel);
1354
dynamic_font->set_hinting(p_font_hinting);
1355
dynamic_font->set_antialiasing(p_font_antialiasing);
1356
dynamic_font->set_multichannel_signed_distance_field(p_font_msdf);
1357
dynamic_font->set_generate_mipmaps(p_font_generate_mipmaps);
1358
#endif
1359
default_font = dynamic_font;
1360
}
1361
1362
if (default_font.is_valid()) {
1363
bold_font.instantiate();
1364
bold_font->set_base_font(default_font);
1365
bold_font->set_variation_embolden(1.2);
1366
1367
bold_italics_font.instantiate();
1368
bold_italics_font->set_base_font(default_font);
1369
bold_italics_font->set_variation_embolden(1.2);
1370
bold_italics_font->set_variation_transform(Transform2D(1.0, 0.2, 0.0, 1.0, 0.0, 0.0));
1371
1372
italics_font.instantiate();
1373
italics_font->set_base_font(default_font);
1374
italics_font->set_variation_transform(Transform2D(1.0, 0.2, 0.0, 1.0, 0.0, 0.0));
1375
}
1376
1377
fill_default_theme(t, default_font, bold_font, bold_italics_font, italics_font, default_icon, default_style, default_scale);
1378
1379
ThemeDB::get_singleton()->set_default_theme(t);
1380
1381
ThemeDB::get_singleton()->set_fallback_base_scale(default_scale);
1382
ThemeDB::get_singleton()->set_fallback_icon(default_icon);
1383
ThemeDB::get_singleton()->set_fallback_stylebox(default_style);
1384
ThemeDB::get_singleton()->set_fallback_font(default_font);
1385
ThemeDB::get_singleton()->set_fallback_font_size(default_font_size * default_scale);
1386
}
1387
1388