Blender V4.3
versioning_userdef.cc
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2023 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
10#define DNA_DEPRECATED_ALLOW
11#include <cstring>
12
13#include "BLI_listbase.h"
14#include "BLI_math_rotation.h"
15#include "BLI_math_vector.h"
16#include "BLI_string.h"
17#include "BLI_string_utf8.h"
18#include "BLI_string_utils.hh"
19#include "BLI_utildefines.h"
20
21#include "DNA_anim_types.h"
22#include "DNA_curve_types.h"
23#include "DNA_scene_types.h"
24#include "DNA_space_types.h"
25#include "DNA_userdef_types.h"
27
28#include "BKE_addon.h"
29#include "BKE_blender_version.h"
30#include "BKE_colorband.hh"
31#include "BKE_idprop.hh"
32#include "BKE_keyconfig.h"
33#include "BKE_main.hh"
34#include "BKE_preferences.h"
35
36#include "BLO_readfile.hh"
37#include "BLO_userdef_default.h"
38
39#include "BLT_translation.hh"
40
41#include "GPU_platform.hh"
42
43#include "MEM_guardedalloc.h"
44
45#include "readfile.hh" /* Own include. */
46
47#include "WM_types.hh"
48#include "wm_event_types.hh"
49
50/* Don't use translation strings in versioning!
51 * These depend on the preferences already being read.
52 * If this is important we can set the translations as part of versioning preferences,
53 * however that should only be done if there are important use-cases. */
54#if 0
55# include "BLT_translation.hh"
56#else
57# define N_(msgid) msgid
58#endif
59
60/* For versioning we only ever want to manipulate preferences passed in. */
61#define U BLI_STATIC_ASSERT(false, "Global 'U' not allowed, only use arguments passed in!")
62
63static void do_versions_theme(const UserDef *userdef, bTheme *btheme)
64{
65
66#define USER_VERSION_ATLEAST(ver, subver) MAIN_VERSION_FILE_ATLEAST(userdef, ver, subver)
67#define FROM_DEFAULT_V4_UCHAR(member) copy_v4_v4_uchar(btheme->member, U_theme_default.member)
68
69 if (!USER_VERSION_ATLEAST(300, 41)) {
71 }
72
73 /* Again reset the theme, but only if stored with an early 3.1 alpha version. Some changes were
74 * done in the release branch and then merged into the 3.1 branch (master). So the previous reset
75 * wouldn't work for people who saved their preferences with a 3.1 build meanwhile. But we still
76 * don't want to reset theme changes stored in the eventual 3.0 release once opened in a 3.1
77 * build. */
78 if (userdef->versionfile > 300 && !USER_VERSION_ATLEAST(301, 1)) {
80 }
81
82 if (!USER_VERSION_ATLEAST(301, 2)) {
83 FROM_DEFAULT_V4_UCHAR(space_sequencer.mask);
84 }
85
86 if (!USER_VERSION_ATLEAST(302, 8)) {
88 }
89
90 if (!USER_VERSION_ATLEAST(302, 9)) {
91 FROM_DEFAULT_V4_UCHAR(space_sequencer.list);
92 FROM_DEFAULT_V4_UCHAR(space_sequencer.list_title);
93 FROM_DEFAULT_V4_UCHAR(space_sequencer.list_text);
94 FROM_DEFAULT_V4_UCHAR(space_sequencer.list_text_hi);
95 }
96
97 if (!USER_VERSION_ATLEAST(306, 3)) {
98 FROM_DEFAULT_V4_UCHAR(space_view3d.face_retopology);
99 }
100
101 if (!USER_VERSION_ATLEAST(306, 8)) {
102 FROM_DEFAULT_V4_UCHAR(space_node.node_zone_simulation);
103 FROM_DEFAULT_V4_UCHAR(space_action.simulated_frames);
104 }
105
106 if (!USER_VERSION_ATLEAST(400, 12)) {
107 FROM_DEFAULT_V4_UCHAR(space_node.node_zone_repeat);
108 }
109
110 if (!USER_VERSION_ATLEAST(400, 14)) {
111 FROM_DEFAULT_V4_UCHAR(space_view3d.asset_shelf.back);
112 FROM_DEFAULT_V4_UCHAR(space_view3d.asset_shelf.header_back);
113 }
114
115 if (!USER_VERSION_ATLEAST(400, 24)) {
116 FROM_DEFAULT_V4_UCHAR(tui.wcol_list_item.inner_sel);
117 FROM_DEFAULT_V4_UCHAR(space_sequencer.transition);
118 }
119
120 if (!USER_VERSION_ATLEAST(400, 27)) {
121 FROM_DEFAULT_V4_UCHAR(space_sequencer.keytype_keyframe);
122 FROM_DEFAULT_V4_UCHAR(space_sequencer.keytype_breakdown);
123 FROM_DEFAULT_V4_UCHAR(space_sequencer.keytype_movehold);
124 FROM_DEFAULT_V4_UCHAR(space_sequencer.keytype_keyframe_select);
125 FROM_DEFAULT_V4_UCHAR(space_sequencer.keytype_breakdown_select);
126 FROM_DEFAULT_V4_UCHAR(space_sequencer.keytype_movehold_select);
127 FROM_DEFAULT_V4_UCHAR(space_sequencer.keyborder);
128 FROM_DEFAULT_V4_UCHAR(space_sequencer.keyborder_select);
129 FROM_DEFAULT_V4_UCHAR(space_sequencer.transition);
130 }
131
132 if (!USER_VERSION_ATLEAST(400, 35)) {
133 FROM_DEFAULT_V4_UCHAR(tui.wcol_list_item.item);
134 }
135
136 if (!USER_VERSION_ATLEAST(401, 4)) {
137 FROM_DEFAULT_V4_UCHAR(space_view3d.edge_select);
138 FROM_DEFAULT_V4_UCHAR(space_view3d.edge_mode_select);
139 FROM_DEFAULT_V4_UCHAR(space_view3d.face_select);
140 FROM_DEFAULT_V4_UCHAR(space_view3d.face_mode_select);
141 }
142
143 if (!USER_VERSION_ATLEAST(402, 13)) {
144 FROM_DEFAULT_V4_UCHAR(space_text.hilite);
145 FROM_DEFAULT_V4_UCHAR(space_console.console_cursor);
146 }
147
148 if (!USER_VERSION_ATLEAST(402, 16)) {
150 &userdef->themes, btheme, "Theme", '.', offsetof(bTheme, name), sizeof(btheme->name));
151 }
152
153 if (!USER_VERSION_ATLEAST(402, 17)) {
154 FROM_DEFAULT_V4_UCHAR(space_action.keytype_generated);
155 FROM_DEFAULT_V4_UCHAR(space_action.keytype_generated_select);
156 }
157
158 if (!USER_VERSION_ATLEAST(402, 21)) {
159 FROM_DEFAULT_V4_UCHAR(space_image.asset_shelf.back);
160 FROM_DEFAULT_V4_UCHAR(space_image.asset_shelf.header_back);
161 }
162
163 if (!USER_VERSION_ATLEAST(402, 47)) {
164 FROM_DEFAULT_V4_UCHAR(space_view3d.time_gp_keyframe);
165 }
166
167 if (!USER_VERSION_ATLEAST(403, 1)) {
168 FROM_DEFAULT_V4_UCHAR(space_sequencer.keytype_generated);
169 FROM_DEFAULT_V4_UCHAR(space_sequencer.keytype_generated_select);
170 }
171
172 if (!USER_VERSION_ATLEAST(402, 62)) {
173 FROM_DEFAULT_V4_UCHAR(space_sequencer.audio);
174 FROM_DEFAULT_V4_UCHAR(space_sequencer.color_strip);
175 FROM_DEFAULT_V4_UCHAR(space_sequencer.effect);
176 FROM_DEFAULT_V4_UCHAR(space_sequencer.image);
177 FROM_DEFAULT_V4_UCHAR(space_sequencer.mask);
178 FROM_DEFAULT_V4_UCHAR(space_sequencer.meta);
179 FROM_DEFAULT_V4_UCHAR(space_sequencer.movie);
180 FROM_DEFAULT_V4_UCHAR(space_sequencer.movieclip);
181 FROM_DEFAULT_V4_UCHAR(space_sequencer.scene);
182 FROM_DEFAULT_V4_UCHAR(space_sequencer.text_strip);
183 FROM_DEFAULT_V4_UCHAR(space_sequencer.transition);
184 }
185
186 if (!USER_VERSION_ATLEAST(403, 5)) {
187 FROM_DEFAULT_V4_UCHAR(space_view3d.before_current_frame);
188 FROM_DEFAULT_V4_UCHAR(space_view3d.after_current_frame);
189 FROM_DEFAULT_V4_UCHAR(space_sequencer.before_current_frame);
190 FROM_DEFAULT_V4_UCHAR(space_sequencer.after_current_frame);
191 }
192
193 if (!USER_VERSION_ATLEAST(403, 18)) {
194 FROM_DEFAULT_V4_UCHAR(tui.icon_autokey);
195 }
196
197 if (!USER_VERSION_ATLEAST(403, 25)) {
198 FROM_DEFAULT_V4_UCHAR(space_node.node_zone_foreach_geometry_element);
199 }
200
201 if (!USER_VERSION_ATLEAST(403, 27)) {
202 FROM_DEFAULT_V4_UCHAR(tui.editor_border);
203 FROM_DEFAULT_V4_UCHAR(tui.editor_outline);
204 FROM_DEFAULT_V4_UCHAR(tui.editor_outline_active);
205 }
206
214#undef FROM_DEFAULT_V4_UCHAR
215
216#undef USER_VERSION_ATLEAST
217}
218
220#define USER_LMOUSESELECT (1 << 14) /* deprecated */
221
222static void do_version_select_mouse(const UserDef *userdef, wmKeyMapItem *kmi)
223{
224 /* Remove select/action mouse from user defined keymaps. */
225 enum {
226 ACTIONMOUSE = 0x0005,
227 SELECTMOUSE = 0x0006,
228 EVT_TWEAK_A = 0x5005,
229 EVT_TWEAK_S = 0x5006,
230 };
231 const bool left = (userdef->flag & USER_LMOUSESELECT) != 0;
232
233 switch (kmi->type) {
234 case SELECTMOUSE:
235 kmi->type = (left) ? LEFTMOUSE : RIGHTMOUSE;
236 break;
237 case ACTIONMOUSE:
238 kmi->type = (left) ? RIGHTMOUSE : LEFTMOUSE;
239 break;
240 case EVT_TWEAK_S:
241 kmi->type = (left) ? LEFTMOUSE : RIGHTMOUSE;
242 kmi->val = KM_CLICK_DRAG;
243 break;
244 case EVT_TWEAK_A:
245 kmi->type = (left) ? RIGHTMOUSE : LEFTMOUSE;
246 kmi->val = KM_CLICK_DRAG;
247 break;
248 default:
249 break;
250 }
251}
252
253static bool keymap_item_has_invalid_wm_context_data_path(wmKeyMapItem *kmi, void * /*user_data*/)
254{
255 if (STRPREFIX(kmi->idname, "WM_OT_context_") && kmi->properties) {
256 IDProperty *idprop = IDP_GetPropertyFromGroup(kmi->properties, "data_path");
257 if (idprop && (idprop->type == IDP_STRING) &&
258 STRPREFIX(static_cast<const char *>(idprop->data.pointer), "(null)"))
259 {
260 return true;
261 }
262 }
263 return false;
264}
265
267static bool keymap_item_update_tweak_event(wmKeyMapItem *kmi, void * /*user_data*/)
268{
269 /* Tweak events for L M R mouse-buttons. */
270 enum {
271 EVT_TWEAK_L = 0x5002,
272 EVT_TWEAK_M = 0x5003,
273 EVT_TWEAK_R = 0x5004,
274 };
275 switch (kmi->type) {
276 case EVT_TWEAK_L:
277 kmi->type = LEFTMOUSE;
278 break;
279 case EVT_TWEAK_M:
280 kmi->type = MIDDLEMOUSE;
281 break;
282 case EVT_TWEAK_R:
283 kmi->type = RIGHTMOUSE;
284 break;
285 default:
286 kmi->direction = KM_ANY;
287 return false;
288 }
289
290 if (kmi->val >= KM_DIRECTION_N && kmi->val <= KM_DIRECTION_NW) {
291 kmi->direction = kmi->val;
292 }
293 else {
294 kmi->direction = KM_ANY;
295 }
296 kmi->val = KM_CLICK_DRAG;
297 return false;
298}
299
301{
302/* #UserDef & #Main happen to have the same struct member. */
303#define USER_VERSION_ATLEAST(ver, subver) MAIN_VERSION_FILE_ATLEAST(userdef, ver, subver)
304
305 /* the UserDef struct is not corrected with do_versions() .... ugh! */
306 if (userdef->menuthreshold1 == 0) {
307 userdef->menuthreshold1 = 5;
308 userdef->menuthreshold2 = 2;
309 }
310 if (userdef->mixbufsize == 0) {
311 userdef->mixbufsize = 2048;
312 }
313 if (userdef->autokey_mode == 0) {
314 /* 'add/replace' but not on */
315 userdef->autokey_mode = 2;
316 }
317 if (userdef->savetime <= 0) {
318 userdef->savetime = 1;
319 // XXX error(STRINGIFY(BLENDER_STARTUP_FILE)" is buggy, please consider removing it.\n");
320 }
321 if (userdef->gizmo_size == 0) {
322 userdef->gizmo_size = 75;
323 userdef->gizmo_flag |= USER_GIZMO_DRAW;
324 }
325 if (userdef->pad_rot_angle == 0.0f) {
326 userdef->pad_rot_angle = 15.0f;
327 }
328
329 /* If the userdef was created on a different platform, it may have an
330 * unsupported GPU backend selected. If so, pick a supported default. */
331#ifdef __APPLE__
332 if (userdef->gpu_backend == GPU_BACKEND_OPENGL) {
334 }
335#else
336 if (userdef->gpu_backend == GPU_BACKEND_METAL) {
338 }
339#endif
340
341 /* graph editor - unselected F-Curve visibility */
342 if (userdef->fcu_inactive_alpha == 0) {
343 userdef->fcu_inactive_alpha = 0.25f;
344 }
345
346 if (!USER_VERSION_ATLEAST(192, 0)) {
347 STRNCPY(userdef->sounddir, "/");
348 }
349
350 /* patch to set Dupli Armature */
351 if (!USER_VERSION_ATLEAST(220, 0)) {
352 userdef->dupflag |= USER_DUP_ARM;
353 }
354
355 /* added seam, normal color, undo */
356 if (!USER_VERSION_ATLEAST(235, 0)) {
357 userdef->uiflag |= USER_GLOBALUNDO;
358 if (userdef->undosteps == 0) {
359 userdef->undosteps = 32;
360 }
361 }
362 if (!USER_VERSION_ATLEAST(236, 0)) {
363 /* illegal combo... */
364 if (userdef->flag & USER_LMOUSESELECT) {
365 userdef->flag &= ~USER_TWOBUTTONMOUSE;
366 }
367 }
368 if (!USER_VERSION_ATLEAST(240, 0)) {
369 userdef->uiflag |= USER_PLAINMENUS;
370 }
371 if (!USER_VERSION_ATLEAST(242, 0)) {
372 /* set defaults for 3D View rotating axis indicator */
373 /* since size can't be set to 0, this indicates it's not saved in startup.blend */
374 if (userdef->rvisize == 0) {
375 userdef->rvisize = 15;
376 userdef->rvibright = 8;
378 }
379 }
380 if (!USER_VERSION_ATLEAST(244, 0)) {
381 /* set default number of recently-used files (if not set) */
382 if (userdef->recent_files == 0) {
383 userdef->recent_files = 10;
384 }
385 }
386 if (!USER_VERSION_ATLEAST(245, 3)) {
387 if (userdef->coba_weight.tot == 0) {
388 BKE_colorband_init(&userdef->coba_weight, true);
389 }
390 }
391 if (!USER_VERSION_ATLEAST(245, 3)) {
393 }
394 if (!USER_VERSION_ATLEAST(250, 0)) {
395 /* adjust grease-pencil distances */
396 userdef->gp_manhattandist = 1;
397 userdef->gp_euclideandist = 2;
398
399 /* adjust default interpolation for new IPO-curves */
400 userdef->ipo_new = BEZT_IPO_BEZ;
401 }
402
403 if (!USER_VERSION_ATLEAST(250, 3)) {
404 /* new audio system */
405 if (userdef->audiochannels == 0) {
406 userdef->audiochannels = 2;
407 }
408 if (userdef->audioformat == 0) {
409 userdef->audioformat = 0x24;
410 }
411 if (userdef->audiorate == 0) {
412 userdef->audiorate = 48000;
413 }
414 }
415
416 if (!USER_VERSION_ATLEAST(250, 8)) {
417 LISTBASE_FOREACH (wmKeyMap *, km, &userdef->user_keymaps) {
418 if (STREQ(km->idname, "Armature_Sketch")) {
419 STRNCPY(km->idname, "Armature Sketch");
420 }
421 else if (STREQ(km->idname, "View3D")) {
422 STRNCPY(km->idname, "3D View");
423 }
424 else if (STREQ(km->idname, "View3D Generic")) {
425 STRNCPY(km->idname, "3D View Generic");
426 }
427 else if (STREQ(km->idname, "EditMesh")) {
428 STRNCPY(km->idname, "Mesh");
429 }
430 else if (STREQ(km->idname, "UVEdit")) {
431 STRNCPY(km->idname, "UV Editor");
432 }
433 else if (STREQ(km->idname, "Animation_Channels")) {
434 STRNCPY(km->idname, "Animation Channels");
435 }
436 else if (STREQ(km->idname, "GraphEdit Keys")) {
437 STRNCPY(km->idname, "Graph Editor");
438 }
439 else if (STREQ(km->idname, "GraphEdit Generic")) {
440 STRNCPY(km->idname, "Graph Editor Generic");
441 }
442 else if (STREQ(km->idname, "Action_Keys")) {
443 STRNCPY(km->idname, "Dopesheet");
444 }
445 else if (STREQ(km->idname, "NLA Data")) {
446 STRNCPY(km->idname, "NLA Editor");
447 }
448 else if (STREQ(km->idname, "Node Generic")) {
449 STRNCPY(km->idname, "Node Editor");
450 }
451 else if (STREQ(km->idname, "Logic Generic")) {
452 STRNCPY(km->idname, "Logic Editor");
453 }
454 else if (STREQ(km->idname, "File")) {
455 STRNCPY(km->idname, "File Browser");
456 }
457 else if (STREQ(km->idname, "FileMain")) {
458 STRNCPY(km->idname, "File Browser Main");
459 }
460 else if (STREQ(km->idname, "FileButtons")) {
461 STRNCPY(km->idname, "File Browser Buttons");
462 }
463 else if (STREQ(km->idname, "Buttons Generic")) {
464 STRNCPY(km->idname, "Property Editor");
465 }
466 }
467 }
468
469 if (!USER_VERSION_ATLEAST(252, 3)) {
470 if (userdef->flag & USER_LMOUSESELECT) {
471 userdef->flag &= ~USER_TWOBUTTONMOUSE;
472 }
473 }
474 if (!USER_VERSION_ATLEAST(252, 4)) {
475 /* default new handle type is auto handles */
476 userdef->keyhandles_new = HD_AUTO;
477 }
478
479 if (!USER_VERSION_ATLEAST(257, 0)) {
480 /* Clear #AUTOKEY_FLAG_ONLYKEYINGSET flag from user-preferences,
481 * so that it doesn't linger around from old configurations like a ghost. */
482 userdef->keying_flag &= ~AUTOKEY_FLAG_ONLYKEYINGSET;
483 }
484
485 if (!USER_VERSION_ATLEAST(260, 3)) {
486 /* if new keyframes handle default is stuff "auto", make it "auto-clamped" instead
487 * was changed in 260 as part of GSoC11, but version patch was wrong
488 */
489 if (userdef->keyhandles_new == HD_AUTO) {
490 userdef->keyhandles_new = HD_AUTO_ANIM;
491 }
492 }
493
494 if (!USER_VERSION_ATLEAST(267, 0)) {
495
496 /* GL Texture Garbage Collection */
497 if (userdef->textimeout == 0) {
498 userdef->texcollectrate = 60;
499 userdef->textimeout = 120;
500 }
501 if (userdef->memcachelimit <= 0) {
502 userdef->memcachelimit = 32;
503 }
504 if (userdef->dbl_click_time == 0) {
505 userdef->dbl_click_time = 350;
506 }
507 if (userdef->v2d_min_gridsize == 0) {
508 userdef->v2d_min_gridsize = 35;
509 }
510 if (userdef->widget_unit == 0) {
511 userdef->widget_unit = 20;
512 }
513 if (userdef->anisotropic_filter <= 0) {
514 userdef->anisotropic_filter = 1;
515 }
516
517 if (userdef->ndof_sensitivity == 0.0f) {
518 userdef->ndof_sensitivity = 1.0f;
521 }
522
523 if (userdef->ndof_orbit_sensitivity == 0.0f) {
524 userdef->ndof_orbit_sensitivity = userdef->ndof_sensitivity;
525
526 if (!(userdef->flag & USER_TRACKBALL)) {
527 userdef->ndof_flag |= NDOF_TURNTABLE;
528 }
529 }
530 }
531
532 if (!USER_VERSION_ATLEAST(269, 4)) {
533 userdef->walk_navigation.mouse_speed = 1.0f;
534 userdef->walk_navigation.walk_speed = 2.5f; /* m/s */
535 userdef->walk_navigation.walk_speed_factor = 5.0f;
536 userdef->walk_navigation.view_height = 1.6f; /* m */
537 userdef->walk_navigation.jump_height = 0.4f; /* m */
538 userdef->walk_navigation.teleport_time = 0.2f; /* s */
539 }
540
541 if (!USER_VERSION_ATLEAST(271, 5)) {
542 userdef->pie_menu_radius = 100;
543 userdef->pie_menu_threshold = 12;
544 userdef->pie_animation_timeout = 6;
545 }
546
547 if (!USER_VERSION_ATLEAST(275, 2)) {
548 userdef->ndof_deadzone = 0.0;
549 }
550
551 if (!USER_VERSION_ATLEAST(275, 4)) {
552 userdef->node_margin = 80;
553 }
554
555 if (!USER_VERSION_ATLEAST(278, 6)) {
556 /* Clear preference flags for re-use. */
557 userdef->flag &= ~(USER_FLAG_NUMINPUT_ADVANCED | (1 << 2) | USER_FLAG_UNUSED_3 |
560 userdef->uiflag &= ~(USER_HEADER_BOTTOM);
563
565 }
566
567 if (!USER_VERSION_ATLEAST(280, 20)) {
568 userdef->gpu_viewport_quality = 0.6f;
569
570 /* Reset theme, old themes will not be compatible with minor version updates from now on. */
571 LISTBASE_FOREACH (bTheme *, btheme, &userdef->themes) {
572 MEMCPY_STRUCT_AFTER(btheme, &U_theme_default, name);
573 }
574
575 /* Annotations - new layer color
576 * Replace anything that used to be set if it looks like was left
577 * on the old default (i.e. black), which most users used
578 */
579 if ((userdef->gpencil_new_layer_col[3] < 0.1f) || (userdef->gpencil_new_layer_col[0] < 0.1f)) {
580 /* - New color matches the annotation pencil icon
581 * - Non-full alpha looks better!
582 */
583 ARRAY_SET_ITEMS(userdef->gpencil_new_layer_col, 0.38f, 0.61f, 0.78f, 0.9f);
584 }
585 }
586
587 if (!USER_VERSION_ATLEAST(280, 31)) {
588 /* Remove select/action mouse from user defined keymaps. */
589 LISTBASE_FOREACH (wmKeyMap *, keymap, &userdef->user_keymaps) {
590 LISTBASE_FOREACH (wmKeyMapDiffItem *, kmdi, &keymap->diff_items) {
591 if (kmdi->remove_item) {
592 do_version_select_mouse(userdef, kmdi->remove_item);
593 }
594 if (kmdi->add_item) {
595 do_version_select_mouse(userdef, kmdi->add_item);
596 }
597 }
598
599 LISTBASE_FOREACH (wmKeyMapItem *, kmi, &keymap->items) {
600 do_version_select_mouse(userdef, kmi);
601 }
602 }
603 }
604
605 if (!USER_VERSION_ATLEAST(280, 33)) {
606 /* Enable GLTF addon by default. */
607 BKE_addon_ensure(&userdef->addons, "io_scene_gltf2");
608
609 userdef->pressure_threshold_max = 1.0f;
610 }
611
612 if (!USER_VERSION_ATLEAST(280, 35)) {
613 /* Preserve RMB select setting after moving to Python and changing default value. */
614 if (USER_VERSION_ATLEAST(280, 32) || !(userdef->flag & USER_LMOUSESELECT)) {
615 BKE_keyconfig_pref_set_select_mouse(userdef, 1, false);
616 }
617
618 userdef->flag &= ~USER_LMOUSESELECT;
619 }
620
621 if (!USER_VERSION_ATLEAST(280, 38)) {
622 copy_v4_fl4(userdef->light_param[0].vec, -0.580952, 0.228571, 0.781185, 0.0);
623 copy_v4_fl4(userdef->light_param[0].col, 0.900000, 0.900000, 0.900000, 1.000000);
624 copy_v4_fl4(userdef->light_param[0].spec, 0.318547, 0.318547, 0.318547, 1.000000);
625 userdef->light_param[0].flag = 1;
626 userdef->light_param[0].smooth = 0.1;
627
628 copy_v4_fl4(userdef->light_param[1].vec, 0.788218, 0.593482, -0.162765, 0.0);
629 copy_v4_fl4(userdef->light_param[1].col, 0.267115, 0.269928, 0.358840, 1.000000);
630 copy_v4_fl4(userdef->light_param[1].spec, 0.090838, 0.090838, 0.090838, 1.000000);
631 userdef->light_param[1].flag = 1;
632 userdef->light_param[1].smooth = 0.25;
633
634 copy_v4_fl4(userdef->light_param[2].vec, 0.696472, -0.696472, -0.172785, 0.0);
635 copy_v4_fl4(userdef->light_param[2].col, 0.293216, 0.304662, 0.401968, 1.000000);
636 copy_v4_fl4(userdef->light_param[2].spec, 0.069399, 0.020331, 0.020331, 1.000000);
637 userdef->light_param[2].flag = 1;
638 userdef->light_param[2].smooth = 0.4;
639
640 copy_v4_fl4(userdef->light_param[3].vec, 0.021053, -0.989474, 0.143173, 0.0);
641 copy_v4_fl4(userdef->light_param[3].col, 0.0, 0.0, 0.0, 1.0);
642 copy_v4_fl4(userdef->light_param[3].spec, 0.072234, 0.082253, 0.162642, 1.000000);
643 userdef->light_param[3].flag = 1;
644 userdef->light_param[3].smooth = 0.7;
645
646 copy_v3_fl3(userdef->light_ambient, 0.025000, 0.025000, 0.025000);
647
648 userdef->flag &= ~(USER_FLAG_UNUSED_4);
649
651 }
652
653 if (!USER_VERSION_ATLEAST(280, 41)) {
654 if (userdef->pie_tap_timeout == 0) {
655 userdef->pie_tap_timeout = 20;
656 }
657 }
658
659 if (!USER_VERSION_ATLEAST(280, 44)) {
661 userdef->uiflag2 &= ~(USER_UIFLAG2_UNUSED_0);
662 userdef->gp_settings &= ~(GP_PAINT_UNUSED_0);
663 }
664
665 if (!USER_VERSION_ATLEAST(280, 50)) {
666 /* 3ds is no longer enabled by default and not ported yet. */
667 BKE_addon_remove_safe(&userdef->addons, "io_scene_3ds");
668 }
669
670 if (!USER_VERSION_ATLEAST(280, 51)) {
671 userdef->move_threshold = 2;
672 }
673
674 if (!USER_VERSION_ATLEAST(280, 58)) {
677 }
678 }
679
680 /* Patch to set dupli light-probes and grease-pencil. */
681 if (!USER_VERSION_ATLEAST(280, 58)) {
682 userdef->dupflag |= USER_DUP_LIGHTPROBE;
683 userdef->dupflag |= USER_DUP_GPENCIL;
684 }
685
686 if (!USER_VERSION_ATLEAST(280, 60)) {
687 const float GPU_VIEWPORT_QUALITY_FXAA = 0.10f;
688 const float GPU_VIEWPORT_QUALITY_TAA8 = 0.25f;
689 const float GPU_VIEWPORT_QUALITY_TAA16 = 0.6f;
690 const float GPU_VIEWPORT_QUALITY_TAA32 = 0.8f;
691
692 if (userdef->gpu_viewport_quality <= GPU_VIEWPORT_QUALITY_FXAA) {
694 }
695 else if (userdef->gpu_viewport_quality <= GPU_VIEWPORT_QUALITY_TAA8) {
697 }
698 else if (userdef->gpu_viewport_quality <= GPU_VIEWPORT_QUALITY_TAA16) {
700 }
701 else if (userdef->gpu_viewport_quality <= GPU_VIEWPORT_QUALITY_TAA32) {
703 }
704 else {
706 }
707 }
708
709 if (!USER_VERSION_ATLEAST(280, 62)) {
710 if (userdef->vbotimeout == 0) {
711 userdef->vbocollectrate = 60;
712 userdef->vbotimeout = 120;
713 }
714
715 if (userdef->lookdev_sphere_size == 0) {
716 userdef->lookdev_sphere_size = 150;
717 }
718
719 userdef->pref_flag |= USER_PREF_FLAG_SAVE;
720 }
721
722 if (!USER_VERSION_ATLEAST(280, 73)) {
723 userdef->drag_threshold = 30;
724 userdef->drag_threshold_mouse = 3;
725 userdef->drag_threshold_tablet = 10;
726 }
727
728 if (!USER_VERSION_ATLEAST(281, 9)) {
729 /* X3D is no longer enabled by default. */
730 BKE_addon_remove_safe(&userdef->addons, "io_scene_x3d");
731 }
732
733 if (!USER_VERSION_ATLEAST(281, 12)) {
736 }
737
738 if (!USER_VERSION_ATLEAST(281, 13)) {
740
742 memcpy(
743 &userdef->file_space_data, &U_default.file_space_data, sizeof(userdef->file_space_data));
744 }
745 }
746
747 if (!USER_VERSION_ATLEAST(281, 16)) {
749 params.check_item = true;
750 params.check_diff_item_add = true;
753 }
754
755 if (!USER_VERSION_ATLEAST(282, 1)) {
757 }
758
759 if (!USER_VERSION_ATLEAST(282, 4)) {
760 if (userdef->view_rotate_sensitivity_turntable == 0.0f) {
762 userdef->view_rotate_sensitivity_trackball = 1.0f;
763 }
764 if (userdef->scrollback == 0) {
766 }
767
768 /* Enable Overlay Engine Smooth Wire by default */
770 }
771
772 if (!USER_VERSION_ATLEAST(283, 13)) {
773 /* If Translations is off then language should default to English. */
774 if ((userdef->transopts & USER_DOTRANSLATE_DEPRECATED) == 0) {
775 userdef->language = ULANGUAGE_ENGLISH;
776 }
777 /* Clear this deprecated flag. */
778 userdef->transopts &= ~USER_DOTRANSLATE_DEPRECATED;
779 }
780
781 if (!USER_VERSION_ATLEAST(290, 7)) {
783 }
784
785 if (!USER_VERSION_ATLEAST(291, 1)) {
786 if (userdef->collection_instance_empty_size == 0) {
787 userdef->collection_instance_empty_size = 1.0f;
788 }
789 }
790
791 if (!USER_VERSION_ATLEAST(292, 3)) {
792 if (userdef->pixelsize == 0.0f) {
793 userdef->pixelsize = 1.0f;
794 }
795 /* Clear old userdef flag for "Camera Parent Lock". */
796 userdef->uiflag &= ~USER_UIFLAG_UNUSED_3;
797 }
798
799 if (!USER_VERSION_ATLEAST(292, 9)) {
800 if (BLI_listbase_is_empty(&userdef->asset_libraries)) {
802 }
803 }
804
805 if (!USER_VERSION_ATLEAST(293, 1)) {
806 /* This rename was made after 2.93.0, harmless to run when it's not needed. */
807 const char *replace_table[][2] = {
808 {"blender", "Blender"},
809 {"blender_27x", "Blender_27x"},
810 {"industry_compatible", "Industry_Compatible"},
811 };
812 const int replace_table_len = ARRAY_SIZE(replace_table);
813
815 userdef->keyconfigstr, sizeof(userdef->keyconfigstr), replace_table, replace_table_len);
818 kpt->idname, sizeof(kpt->idname), replace_table, replace_table_len);
819 }
820 }
821
822 if (!USER_VERSION_ATLEAST(293, 12)) {
823 if (userdef->gizmo_size_navigate_v3d == 0) {
824 userdef->gizmo_size_navigate_v3d = 80;
825 }
826
828 }
829
830 if (!USER_VERSION_ATLEAST(293, 13)) {
831 BKE_addon_ensure(&userdef->addons, "pose_library");
832 }
833
834 if (!USER_VERSION_ATLEAST(300, 21)) {
835 /* Deprecated userdef->flag USER_SAVE_PREVIEWS */
838 /* Clear for reuse. */
839 userdef->flag &= ~USER_FLAG_UNUSED_5;
840 }
841
842 if (!USER_VERSION_ATLEAST(300, 38)) {
843 /* Patch to set Dupli Lattice/Camera/Speaker. */
844 userdef->dupflag |= USER_DUP_LATTICE;
845 userdef->dupflag |= USER_DUP_CAMERA;
846 userdef->dupflag |= USER_DUP_SPEAKER;
847 }
848
849 if (!USER_VERSION_ATLEAST(300, 40)) {
850 /* Rename the default asset library from "Default" to "User Library". This isn't bullet proof
851 * since it doesn't handle translations and ignores user changes. But this was an alpha build
852 * (experimental) feature and the name is just for display in the UI anyway. So it doesn't have
853 * to work perfectly at all. */
854 LISTBASE_FOREACH (bUserAssetLibrary *, asset_library, &userdef->asset_libraries) {
855 /* Ignores translations, since that would depend on the current preferences (global `U`). */
856 if (STREQ(asset_library->name, "Default")) {
858 userdef, asset_library, BKE_PREFS_ASSET_LIBRARY_DEFAULT_NAME);
859 }
860 }
861 }
862
863 if (!USER_VERSION_ATLEAST(300, 40)) {
864 LISTBASE_FOREACH (uiStyle *, style, &userdef->uistyles) {
865 const int default_title_points = 11; /* UI_DEFAULT_TITLE_POINTS */
866 style->paneltitle.points = default_title_points;
867 style->grouplabel.points = default_title_points;
868 }
869 }
870
871 if (!USER_VERSION_ATLEAST(300, 43)) {
873 }
874
875 if (!USER_VERSION_ATLEAST(302, 5)) {
877 params.check_item = true;
878 params.check_diff_item_add = true;
880 }
881
882 if (!USER_VERSION_ATLEAST(302, 11)) {
884 }
885
886 /* Set GPU backend to OpenGL. */
887 if (!USER_VERSION_ATLEAST(305, 5)) {
888#ifdef __APPLE__
890#else
892#endif
893 }
894
895 if (!USER_VERSION_ATLEAST(305, 10)) {
896 LISTBASE_FOREACH (bUserAssetLibrary *, asset_library, &userdef->asset_libraries) {
897 asset_library->import_method = ASSET_IMPORT_APPEND_REUSE;
898 }
899 }
900
901 if (!USER_VERSION_ATLEAST(306, 2)) {
903 }
904
905 if (!USER_VERSION_ATLEAST(306, 4)) {
906 /* Increase the number of recently-used files if using the old default value. */
907 if (userdef->recent_files == 10) {
908 userdef->recent_files = 20;
909 }
910 }
911
912 if (!USER_VERSION_ATLEAST(306, 5)) {
913 if (userdef->pythondir_legacy[0]) {
914 bUserScriptDirectory *script_dir = static_cast<bUserScriptDirectory *>(
915 MEM_callocN(sizeof(*script_dir), "Versioning user script path"));
916
917 STRNCPY(script_dir->dir_path, userdef->pythondir_legacy);
918 STRNCPY_UTF8(script_dir->name, DATA_("Untitled"));
919 BLI_addhead(&userdef->script_directories, script_dir);
920 }
921 }
922
923 if (!USER_VERSION_ATLEAST(306, 6)) {
924 LISTBASE_FOREACH (bUserAssetLibrary *, asset_library, &userdef->asset_libraries) {
925 asset_library->flag |= ASSET_LIBRARY_RELATIVE_PATH;
926 }
927 }
928
929 if (!USER_VERSION_ATLEAST(400, 4)) {
930 /* obj and ply python addons were removed. */
931 BKE_addon_remove_safe(&userdef->addons, "io_mesh_ply");
932 BKE_addon_remove_safe(&userdef->addons, "io_scene_obj");
933 }
934
935 if (!USER_VERSION_ATLEAST(400, 15)) {
936 userdef->node_preview_res = 120;
937 }
938
939 if (!USER_VERSION_ATLEAST(400, 18)) {
940 userdef->playback_fps_samples = 8;
941 }
942
943 if (!USER_VERSION_ATLEAST(400, 19)) {
944 userdef->uiflag |= USER_NODE_AUTO_OFFSET;
945 }
946
947 if (!USER_VERSION_ATLEAST(400, 24)) {
948 /* Clear deprecated USER_MENUFIXEDORDER user flag for reuse. */
949 userdef->uiflag &= ~(1 << 23);
950 }
951
952 if (!USER_VERSION_ATLEAST(400, 26)) {
954 }
955
956 if (!USER_VERSION_ATLEAST(400, 32)) {
958 }
959
960 if (!USER_VERSION_ATLEAST(401, 3)) {
961 LISTBASE_FOREACH (uiStyle *, style, &userdef->uistyles) {
962 style->paneltitle.character_weight = 400;
963 style->grouplabel.character_weight = 400;
964 style->widget.character_weight = 400;
965 }
966 }
967
968 if (!USER_VERSION_ATLEAST(401, 9)) {
972 }
973
974 if (!USER_VERSION_ATLEAST(401, 13)) {
975 if (userdef->keying_flag & AUTOKEY_FLAG_INSERTNEEDED) {
977 }
979 }
980
981 if (!USER_VERSION_ATLEAST(401, 21)) {
982 LISTBASE_FOREACH (wmKeyMap *, km, &userdef->user_keymaps) {
983 if (STREQ(km->idname, "NLA Channels")) {
984 STRNCPY(km->idname, "NLA Tracks");
985 }
986 }
987 }
988
989 if (!USER_VERSION_ATLEAST(402, 36)) {
990 /* Reset repositories. */
991 while (!BLI_listbase_is_empty(&userdef->extension_repos)) {
993 userdef, static_cast<bUserExtensionRepo *>(userdef->extension_repos.first));
994 }
995
998 }
999
1000 if (!USER_VERSION_ATLEAST(402, 42)) {
1001 /* 80 was the old default. */
1002 if (userdef->node_margin == 80) {
1003 userdef->node_margin = 40;
1004 }
1005 }
1006
1007 if (!USER_VERSION_ATLEAST(402, 51)) {
1009 }
1010
1011 if (!USER_VERSION_ATLEAST(402, 56)) {
1013 }
1014
1015 if (!USER_VERSION_ATLEAST(402, 58)) {
1016 /* Remove add-ons which are no longer bundled by default
1017 * and have no upgrade path to extensions in the UI. */
1018 const char *addon_modules[] = {
1019 "depsgraph_debug",
1020 "io_coat3D",
1021 "io_import_images_as_planes",
1022 "io_mesh_stl",
1023 "io_scene_x3d",
1024 };
1025 for (int i = 0; i < ARRAY_SIZE(addon_modules); i++) {
1026 BKE_addon_remove_safe(&userdef->addons, addon_modules[i]);
1027 }
1028 }
1029
1030 if (!USER_VERSION_ATLEAST(402, 59)) {
1031 userdef->network_timeout = 10;
1032 userdef->network_connection_limit = 5;
1033 }
1034
1035 if (!USER_VERSION_ATLEAST(402, 63)) {
1037 }
1038
1039 if (!USER_VERSION_ATLEAST(402, 65)) {
1040 /* Bone Selection Sets is no longer an add-on, but core functionality. */
1041 BKE_addon_remove_safe(&userdef->addons, "bone_selection_sets");
1042 }
1043
1044 if (!USER_VERSION_ATLEAST(403, 3)) {
1046 userdef, "VIEW3D_AST_brush_sculpt", "Brushes/Mesh Sculpt/Cloth");
1048 userdef, "VIEW3D_AST_brush_sculpt", "Brushes/Mesh Sculpt/General");
1050 userdef, "VIEW3D_AST_brush_sculpt", "Brushes/Mesh Sculpt/Paint");
1051 }
1052
1053 if (!USER_VERSION_ATLEAST(403, 12)) {
1054 LISTBASE_FOREACH (uiStyle *, style, &userdef->uistyles) {
1055 style->tooltip.points = 11.0f; /* UI_DEFAULT_TOOLTIP_POINTS */
1056 style->tooltip.character_weight = 400;
1057 style->tooltip.shadow = 0;
1058 style->tooltip.shady = -1;
1059 style->tooltip.shadowalpha = 0.5f;
1060 style->tooltip.shadowcolor = 0.0f;
1061 }
1062 }
1063 if (!USER_VERSION_ATLEAST(403, 19)) {
1065 }
1066
1067 if (!USER_VERSION_ATLEAST(403, 32)) {
1068 userdef->uiflag &= ~USER_FILTER_BRUSHES_BY_TOOL;
1069
1071 userdef, "VIEW3D_AST_brush_gpencil_paint", "Brushes/Grease Pencil Draw/Draw");
1073 userdef, "VIEW3D_AST_brush_gpencil_paint", "Brushes/Grease Pencil Draw/Erase");
1075 userdef, "VIEW3D_AST_brush_gpencil_paint", "Brushes/Grease Pencil Draw/Utilities");
1076
1078 userdef, "VIEW3D_AST_brush_gpencil_sculpt", "Brushes/Grease Pencil Sculpt/Contrast");
1080 userdef, "VIEW3D_AST_brush_gpencil_sculpt", "Brushes/Grease Pencil Sculpt/Transform");
1082 userdef, "VIEW3D_AST_brush_gpencil_sculpt", "Brushes/Grease Pencil Sculpt/Utilities");
1083 }
1084
1092 LISTBASE_FOREACH (bTheme *, btheme, &userdef->themes) {
1093 do_versions_theme(userdef, btheme);
1094 }
1095#undef USER_VERSION_ATLEAST
1096}
1097
1099{
1100 /* User preference experimental settings are only supported in alpha builds.
1101 * This prevents users corrupting data and relying on API that may change.
1102 *
1103 * If user preferences are saved this will be stored in disk as expected.
1104 * This only starts to take effect when there is a release branch (on beta).
1105 *
1106 * At that time master already has its version bumped so its user preferences
1107 * are not touched by these settings. */
1108#ifdef WITH_EXPERIMENTAL_FEATURES
1110 return;
1111 }
1112#endif
1113
1114 MEMSET_STRUCT_AFTER(&userdef->experimental, 0, SANITIZE_AFTER_HERE);
1115}
1116
1117#undef USER_LMOUSESELECT
struct bAddon * BKE_addon_ensure(struct ListBase *addon_list, const char *module)
Definition addon.cc:46
bool BKE_addon_remove_safe(struct ListBase *addon_list, const char *module)
Definition addon.cc:57
bool BKE_blender_version_is_alpha(void)
Definition blender.cc:169
void BKE_colorband_init(ColorBand *coba, bool rangetype)
Definition colorband.cc:22
IDProperty * IDP_GetPropertyFromGroup(const IDProperty *prop, const char *name) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
Definition idprop.cc:763
void BKE_keyconfig_pref_filter_items(struct UserDef *userdef, const struct wmKeyConfigFilterItemParams *params, bool(*filter_fn)(struct wmKeyMapItem *kmi, void *user_data), void *user_data)
void BKE_keyconfig_pref_set_select_mouse(struct UserDef *userdef, int value, bool override)
Definition keyconfig.cc:113
void BKE_preferences_asset_library_default_add(struct UserDef *userdef) ATTR_NONNULL()
void BKE_preferences_extension_repo_remove(UserDef *userdef, bUserExtensionRepo *repo)
bUserExtensionRepo * BKE_preferences_extension_repo_add_default_user(UserDef *userdef)
#define BKE_PREFS_ASSET_LIBRARY_DEFAULT_NAME
void BKE_preferences_asset_library_name_set(struct UserDef *userdef, struct bUserAssetLibrary *library, const char *name) ATTR_NONNULL()
bUserExtensionRepo * BKE_preferences_extension_repo_add_default_system(UserDef *userdef)
bUserExtensionRepo * BKE_preferences_extension_repo_add_default_remote(UserDef *userdef)
bool BKE_preferences_asset_shelf_settings_ensure_catalog_path_enabled(UserDef *userdef, const char *shelf_idname, const char *catalog_path)
BLI_INLINE bool BLI_listbase_is_empty(const struct ListBase *lb)
void BLI_addhead(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
Definition listbase.cc:90
#define LISTBASE_FOREACH(type, var, list)
#define DEG2RADF(_deg)
MINLINE void copy_v4_fl4(float v[4], float x, float y, float z, float w)
MINLINE void copy_v3_fl3(float v[3], float x, float y, float z)
#define STRNCPY(dst, src)
Definition BLI_string.h:593
#define STRNCPY_UTF8(dst, src)
void BLI_uniquename(const struct ListBase *list, void *vlink, const char *defname, char delim, int name_offset, size_t name_maxncpy) ATTR_NONNULL(1
bool BLI_string_replace_table_exact(char *string, size_t string_len, const char *replace_table[][2], int replace_table_len)
#define STRPREFIX(a, b)
#define ARRAY_SIZE(arr)
#define ARRAY_SET_ITEMS(...)
#define MEMSET_STRUCT_AFTER(struct_var, value, member)
#define MEMCPY_STRUCT_AFTER(struct_dst, struct_src, member)
#define STREQ(a, b)
external readfile function prototypes.
const UserDef U_default
const bTheme U_theme_default
#define DATA_(msgid)
@ IDP_STRING
@ FCURVE_SMOOTH_CONT_ACCEL
@ ASSET_IMPORT_APPEND_REUSE
@ ASSET_LIBRARY_RELATIVE_PATH
@ HD_AUTO_ANIM
@ HD_AUTO
@ BEZT_IPO_BEZ
@ SCE_DISPLAY_AA_OFF
@ SCE_DISPLAY_AA_SAMPLES_32
@ SCE_DISPLAY_AA_SAMPLES_8
@ SCE_DISPLAY_AA_SAMPLES_16
@ SCE_DISPLAY_AA_FXAA
@ FILE_DEFAULTDISPLAY
@ USER_DUP_LIGHTPROBE
@ USER_DUP_CAMERA
@ USER_DUP_SPEAKER
@ USER_DUP_GPENCIL
@ USER_DUP_CURVES
@ USER_DUP_ARM
@ USER_DUP_POINTCLOUD
@ USER_DUP_LATTICE
@ AUTOKEY_FLAG_INSERTNEEDED
@ MANUALKEY_FLAG_INSERTNEEDED
@ USER_TR_UNUSED_4
@ USER_DOTRANSLATE_DEPRECATED
@ USER_TR_UNUSED_3
@ USER_TR_UNUSED_6
@ USER_TR_UNUSED_7
@ USER_LOCK_CURSOR_ADJUST
@ USER_REGISTER_ALL_USERS
@ USER_SHOW_GIZMO_NAVIGATE
@ USER_HEADER_FROM_PREF
@ USER_HEADER_BOTTOM
@ USER_GLOBALUNDO
@ USER_PLAINMENUS
@ USER_NO_MULTITOUCH_GESTURES
@ USER_NODE_AUTO_OFFSET
@ USER_UIFLAG_UNUSED_1
@ IMAGE_DRAW_METHOD_AUTO
@ IMAGE_DRAW_METHOD_GLSL
@ USER_GPU_FLAG_OVERLAY_SMOOTH_WIRE
@ USER_SEQ_PROXY_SETUP_AUTOMATIC
@ USER_ADD_VIEWALIGNED
@ USER_INTERNET_ALLOW
@ USER_ADD_EDITMODE
@ USER_TRACKBALL
@ USER_FLAG_UNUSED_5
@ USER_FLAG_UNUSED_4
@ USER_FLAG_UNUSED_6
@ USER_FLAG_UNUSED_7
@ USER_FLAG_NUMINPUT_ADVANCED
@ USER_DEVELOPER_UI
@ USER_FLAG_UNUSED_3
@ STATUSBAR_SHOW_VERSION
@ STATUSBAR_SHOW_EXTENSIONS_UPDATES
@ USER_ANIM_HIGH_QUALITY_DRAWING
@ USER_ANIM_SHOW_CHANNEL_GROUP_COLORS
@ USER_UIFLAG2_UNUSED_0
@ USER_RENDER_DISPLAY_WINDOW
@ USER_FILE_PREVIEW_NONE
@ USER_FILE_PREVIEW_AUTO
@ GP_PAINT_UNUSED_0
@ NDOF_LOCK_HORIZON
@ NDOF_SHOULD_PAN
@ NDOF_SHOULD_ZOOM
@ NDOF_SHOULD_ROTATE
@ NDOF_TURNTABLE
@ NDOF_CAMERA_PAN_ZOOM
@ USER_ANIM_KEY_CHANNEL_SCALE
@ USER_ANIM_KEY_CHANNEL_ROTATION
@ USER_ANIM_KEY_CHANNEL_LOCATION
@ USER_ANIM_KEY_CHANNEL_CUSTOM_PROPERTIES
@ USER_TEXT_RENDER_SUBPIXELAA
@ ULANGUAGE_ENGLISH
@ USER_SEQ_ED_CONNECT_STRIPS_BY_DEFAULT
@ USER_SEQ_ED_SIMPLE_TWEAKING
@ USER_GIZMO_DRAW
@ USER_PREF_FLAG_SAVE
@ USER_TEMP_SPACE_DISPLAY_WINDOW
Read Guarded memory(de)allocation.
@ KM_ANY
Definition WM_types.hh:282
@ KM_CLICK_DRAG
Definition WM_types.hh:292
@ KM_DIRECTION_NW
Definition WM_types.hh:308
@ KM_DIRECTION_N
Definition WM_types.hh:301
#define offsetof(t, d)
uiWidgetBaseParameters params[MAX_WIDGET_BASE_BATCH]
void *(* MEM_callocN)(size_t len, const char *str)
Definition mallocn.cc:42
static int left
void * pointer
Definition DNA_ID.h:145
IDPropertyData data
Definition DNA_ID.h:168
char type
Definition DNA_ID.h:154
void * first
unsigned char grid_levels
struct WalkNavigation walk_navigation
float pressure_threshold_max
short texcollectrate
short dbl_click_time
struct ListBase addons
short menuthreshold2
short key_insert_channels
short anisotropic_filter
short vbocollectrate
float pad_rot_angle
ListBase script_directories
struct ListBase uistyles
short playback_fps_samples
uint8_t network_timeout
float view_rotate_sensitivity_trackball
float ndof_sensitivity
short pie_animation_timeout
float ndof_orbit_sensitivity
float light_ambient[3]
float view_rotate_sensitivity_turntable
UserDef_FileSpaceData file_space_data
UserDef_Experimental experimental
short v2d_min_gridsize
uint8_t network_connection_limit
struct ListBase user_keymaps
char drag_threshold_mouse
float gpencil_new_layer_col[4]
short lookdev_sphere_size
float fcu_inactive_alpha
struct ListBase themes
char gizmo_size_navigate_v3d
short sequencer_proxy_setup
short pie_menu_radius
short gp_euclideandist
short image_draw_method
short menuthreshold1
char auto_smoothing_new
short pie_menu_threshold
struct ListBase user_keyconfig_prefs
char drag_threshold_tablet
struct ListBase extension_repos
short gp_manhattandist
struct SolidLight light_param[4]
char filebrowser_display_type
int sequencer_editor_flag
unsigned int dupflag
char node_preview_res
short pie_tap_timeout
char keyconfigstr[64]
float collection_instance_empty_size
struct ListBase asset_libraries
char render_display_type
struct ColorBand coba_weight
char sounddir[768]
ThemeSpace space_node
char name[64]
static bool keymap_item_update_tweak_event(wmKeyMapItem *kmi, void *)
static void do_version_select_mouse(const UserDef *userdef, wmKeyMapItem *kmi)
static bool keymap_item_has_invalid_wm_context_data_path(wmKeyMapItem *kmi, void *)
void BLO_sanitize_experimental_features_userpref_blend(UserDef *userdef)
#define USER_VERSION_ATLEAST(ver, subver)
#define FROM_DEFAULT_V4_UCHAR(member)
#define USER_LMOUSESELECT
void blo_do_versions_userdef(UserDef *userdef)
static void do_versions_theme(const UserDef *userdef, bTheme *btheme)
@ RIGHTMOUSE
@ LEFTMOUSE
@ MIDDLEMOUSE