Merge branch 'master' into blender2.8
[blender.git] / source / blender / makesrna / intern / rna_userdef.c
index a441f2f57dc47b237d72204b9dfcc989440c49e1..289019fdddec3d7860d87fec443f4d1217af425c 100644 (file)
@@ -49,7 +49,7 @@
 #include "WM_api.h"
 #include "WM_types.h"
 
-#include "BLF_translation.h"
+#include "BLT_lang.h"
 #include "GPU_buffers.h"
 
 #ifdef WITH_CYCLES
@@ -61,6 +61,19 @@ static EnumPropertyItem compute_device_type_items[] = {
 };
 #endif
 
+#ifdef WITH_OPENSUBDIV
+static EnumPropertyItem opensubdiv_compute_type_items[] = {
+       {USER_OPENSUBDIV_COMPUTE_NONE, "NONE", 0, "None", ""},
+       {USER_OPENSUBDIV_COMPUTE_CPU, "CPU", 0, "CPU", ""},
+       {USER_OPENSUBDIV_COMPUTE_OPENMP, "OPENMP", 0, "OpenMP", ""},
+       {USER_OPENSUBDIV_COMPUTE_OPENCL, "OPENCL", 0, "OpenCL", ""},
+       {USER_OPENSUBDIV_COMPUTE_CUDA, "CUDA", 0, "CUDA", ""},
+       {USER_OPENSUBDIV_COMPUTE_GLSL_TRANSFORM_FEEDBACK, "GLSL_TRANSFORM_FEEDBACK", 0, "GLSL Transform Feedback", ""},
+       {USER_OPENSUBDIV_COMPUTE_GLSL_COMPUTE, "GLSL_COMPUTE", 0, "GLSL Compute", ""},
+       { 0, NULL, 0, NULL, NULL}
+};
+#endif
+
 static EnumPropertyItem audio_device_items[] = {
        {0, "NONE", 0, "None", "Null device - there will be no audio output"},
 #ifdef WITH_SDL
@@ -75,23 +88,31 @@ static EnumPropertyItem audio_device_items[] = {
        {0, NULL, 0, NULL, NULL}
 };
 
-EnumPropertyItem navigation_mode_items[] = {
+EnumPropertyItem rna_enum_navigation_mode_items[] = {
        {VIEW_NAVIGATION_WALK, "WALK", 0, "Walk", "Interactively walk or free navigate around the scene"},
        {VIEW_NAVIGATION_FLY, "FLY", 0, "Fly", "Use fly dynamics to navigate the scene"},
        {0, NULL, 0, NULL, NULL}
 };
 
+#if defined(WITH_INTERNATIONAL) || !defined(RNA_RUNTIME)
+static EnumPropertyItem rna_enum_language_default_items[] = {
+       {0, "DEFAULT", 0, "Default (Default)", ""},
+       {0, NULL, 0, NULL, NULL}
+};
+#endif
+
 #ifdef RNA_RUNTIME
 
 #include "DNA_object_types.h"
 #include "DNA_screen_types.h"
 
 #include "BKE_blender.h"
-#include "BKE_DerivedMesh.h"
 #include "BKE_depsgraph.h"
 #include "BKE_global.h"
 #include "BKE_main.h"
 #include "BKE_idprop.h"
+#include "BKE_pbvh.h"
+#include "BKE_paint.h"
 
 #include "GPU_draw.h"
 #include "GPU_select.h"
@@ -105,12 +126,15 @@ EnumPropertyItem navigation_mode_items[] = {
 
 #include "CCL_api.h"
 
-#include "BKE_addon.h"
+#ifdef WITH_OPENSUBDIV
+#  include "opensubdiv_capi.h"
+#endif
 
 #ifdef WITH_SDL_DYNLOAD
 #  include "sdlew.h"
 #endif
 
+
 static void rna_userdef_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *UNUSED(ptr))
 {
        WM_main_add_notifier(NC_WINDOW, NULL);
@@ -122,17 +146,24 @@ static void rna_userdef_dpi_update(Main *UNUSED(bmain), Scene *UNUSED(scene), Po
        /* font's are stored at each DPI level, without this we can easy load 100's of fonts */
        BLF_cache_clear();
 
-       BKE_userdef_state();
+       BKE_blender_userdef_refresh();
        WM_main_add_notifier(NC_WINDOW, NULL);      /* full redraw */
        WM_main_add_notifier(NC_SCREEN | NA_EDITED, NULL);    /* refresh region sizes */
 }
 
-static void rna_userdef_virtual_pixel_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *UNUSED(ptr))
+static void rna_userdef_virtual_pixel_update(Main *bmain, Scene *UNUSED(scene), PointerRNA *UNUSED(ptr))
 {
        /* font's are stored at each DPI level, without this we can easy load 100's of fonts */
        BLF_cache_clear();
        
-       BKE_userdef_state();
+       BKE_blender_userdef_refresh();
+
+       /* force setting drawable again */
+       wmWindowManager *wm = bmain->wm.first;
+       if (wm) {
+               wm->windrawable = NULL;
+       }
+
        WM_main_add_notifier(NC_WINDOW, NULL);      /* full redraw */
        WM_main_add_notifier(NC_SCREEN | NA_EDITED, NULL);    /* refresh region sizes */
 }
@@ -140,19 +171,10 @@ static void rna_userdef_virtual_pixel_update(Main *UNUSED(bmain), Scene *UNUSED(
 static void rna_userdef_language_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *UNUSED(ptr))
 {
        BLF_cache_clear();
-       BLF_lang_set(NULL);
+       BLT_lang_set(NULL);
        UI_reinit_font();
 }
 
-static void rna_userdef_vbo_update(Main *bmain, Scene *UNUSED(scene), PointerRNA *UNUSED(ptr))
-{
-       Object *ob;
-       
-       for (ob = bmain->object.first; ob; ob = ob->id.next) {
-               GPU_drawobject_free(ob->derivedFinal);
-       }
-}
-
 static void rna_userdef_show_manipulator_update(Main *bmain, Scene *scene, PointerRNA *ptr)
 {
        UserDef *userdef = (UserDef *)ptr->data;
@@ -270,6 +292,12 @@ static void rna_userdef_autokeymode_set(PointerRNA *ptr, int value)
        }
 }
 
+static void rna_userdef_ndof_deadzone_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
+{
+       UserDef *userdef = ptr->data;
+       WM_ndof_deadzone_set(userdef->ndof_deadzone);
+}
+
 static void rna_userdef_timecode_style_set(PointerRNA *ptr, int value)
 {
        UserDef *userdef = (UserDef *)ptr->data;
@@ -367,11 +395,6 @@ static void rna_UserDef_viewport_lights_update(Main *bmain, Scene *scene, Pointe
        rna_userdef_update(bmain, scene, ptr);
 }
 
-static int rna_Scene_GPU_selection_supported(UserDef *UNUSED(U))
-{
-       return GPU_select_query_check_support();
-}
-
 static void rna_userdef_autosave_update(Main *bmain, Scene *scene, PointerRNA *ptr)
 {
        wmWindowManager *wm = bmain->wm.first;
@@ -392,7 +415,7 @@ static void rna_userdef_addon_remove(ReportList *reports, PointerRNA *path_cmp_p
 {
        bAddon *bext = path_cmp_ptr->data;
        if (BLI_findindex(&U.addons, bext) == -1) {
-               BKE_report(reports, RPT_ERROR, "Addon is no longer valid");
+               BKE_report(reports, RPT_ERROR, "Add-on is no longer valid");
                return;
        }
 
@@ -523,6 +546,54 @@ static EnumPropertyItem *rna_userdef_compute_device_itemf(bContext *UNUSED(C), P
 }
 #endif
 
+#ifdef WITH_OPENSUBDIV
+static EnumPropertyItem *rna_userdef_opensubdiv_compute_type_itemf(bContext *UNUSED(C), PointerRNA *UNUSED(ptr),
+                                                                   PropertyRNA *UNUSED(prop), bool *r_free)
+{
+       EnumPropertyItem *item = NULL;
+       int totitem = 0;
+       int evaluators = openSubdiv_getAvailableEvaluators();
+
+       RNA_enum_items_add_value(&item, &totitem, opensubdiv_compute_type_items, USER_OPENSUBDIV_COMPUTE_NONE);
+
+#define APPEND_COMPUTE(compute) \
+       if (evaluators & OPENSUBDIV_EVALUATOR_## compute) { \
+               RNA_enum_items_add_value(&item, &totitem, opensubdiv_compute_type_items, USER_OPENSUBDIV_COMPUTE_ ## compute); \
+       } ((void)0)
+
+       APPEND_COMPUTE(CPU);
+       APPEND_COMPUTE(OPENMP);
+       APPEND_COMPUTE(OPENCL);
+       APPEND_COMPUTE(CUDA);
+       APPEND_COMPUTE(GLSL_TRANSFORM_FEEDBACK);
+       APPEND_COMPUTE(GLSL_COMPUTE);
+
+#undef APPEND_COMPUTE
+
+       RNA_enum_item_end(&item, &totitem);
+       *r_free = true;
+
+       return item;
+}
+
+static void rna_userdef_opensubdiv_update(Main *bmain, Scene *UNUSED(scene), PointerRNA *UNUSED(ptr))
+{
+       Object *object;
+
+       for (object = bmain->object.first;
+            object;
+            object = object->id.next)
+       {
+               if (object->derivedFinal != NULL &&
+                   object->derivedFinal->type == DM_TYPE_CCGDM)
+               {
+                       DAG_id_tag_update(&object->id, OB_RECALC_OB);
+               }
+       }
+}
+
+#endif
+
 static EnumPropertyItem *rna_userdef_audio_device_itemf(bContext *UNUSED(C), PointerRNA *UNUSED(ptr),
                                                         PropertyRNA *UNUSED(prop), bool *r_free)
 {
@@ -530,6 +601,16 @@ static EnumPropertyItem *rna_userdef_audio_device_itemf(bContext *UNUSED(C), Poi
        int totitem = 0;
        EnumPropertyItem *item = NULL;
 
+#ifdef WITH_SYSTEM_AUDASPACE
+       int i;
+
+       char **names = BKE_sound_get_device_names();
+
+       for (i = 0; names[i]; i++) {
+               EnumPropertyItem new_item = {i, names[i], 0, names[i], names[i]};
+               RNA_enum_item_add(&item, &totitem, &new_item);
+       }
+#else
        /* NONE */
        RNA_enum_item_add(&item, &totitem, &audio_device_items[index++]);
 
@@ -552,8 +633,12 @@ static EnumPropertyItem *rna_userdef_audio_device_itemf(bContext *UNUSED(C), Poi
                RNA_enum_item_add(&item, &totitem, &audio_device_items[index]);
        }
        index++;
+#endif
 #endif
 
+       /* may be unused */
+       UNUSED_VARS(index, audio_device_items);
+
        RNA_enum_item_end(&item, &totitem);
        *r_free = true;
 
@@ -564,7 +649,11 @@ static EnumPropertyItem *rna_userdef_audio_device_itemf(bContext *UNUSED(C), Poi
 static EnumPropertyItem *rna_lang_enum_properties_itemf(bContext *UNUSED(C), PointerRNA *UNUSED(ptr),
                                                         PropertyRNA *UNUSED(prop), bool *UNUSED(r_free))
 {
-       return BLF_RNA_lang_enum_properties();
+       EnumPropertyItem *items = BLT_lang_RNA_enum_properties();
+       if (items == NULL) {
+               items = rna_enum_language_default_items;
+       }
+       return items;
 }
 #endif
 
@@ -627,7 +716,7 @@ static StructRNA *rna_AddonPref_register(Main *bmain, ReportList *reports, void
 
        BLI_strncpy(dummyapt.idname, dummyaddon.module, sizeof(dummyapt.idname));
        if (strlen(identifier) >= sizeof(dummyapt.idname)) {
-               BKE_reportf(reports, RPT_ERROR, "Registering addon-prefs class: '%s' is too long, maximum length is %d",
+               BKE_reportf(reports, RPT_ERROR, "Registering add-on preferences class: '%s' is too long, maximum length is %d",
                            identifier, (int)sizeof(dummyapt.idname));
                return NULL;
        }
@@ -1522,11 +1611,18 @@ static void rna_def_userdef_theme_space_view3d(BlenderRNA *brna)
 
        rna_def_userdef_theme_spaces_gradient(srna);
 
+       /* General Viewport options */
+
        prop = RNA_def_property(srna, "grid", PROP_FLOAT, PROP_COLOR_GAMMA);
        RNA_def_property_array(prop, 3);
        RNA_def_property_ui_text(prop, "Grid", "");
        RNA_def_property_update(prop, 0, "rna_userdef_update");
 
+       prop = RNA_def_property(srna, "clipping_border_3d", PROP_FLOAT, PROP_COLOR_GAMMA);
+       RNA_def_property_array(prop, 4);
+       RNA_def_property_ui_text(prop, "Clipping Border", "");
+       RNA_def_property_update(prop, 0, "rna_userdef_update");
+
        prop = RNA_def_property(srna, "wire", PROP_FLOAT, PROP_COLOR_GAMMA);
        RNA_def_property_array(prop, 3);
        RNA_def_property_ui_text(prop, "Wire", "");
@@ -1537,32 +1633,18 @@ static void rna_def_userdef_theme_space_view3d(BlenderRNA *brna)
        RNA_def_property_ui_text(prop, "Wire Edit", "");
        RNA_def_property_update(prop, 0, "rna_userdef_update");
        
-       rna_def_userdef_theme_spaces_gpencil(srna);
 
-       prop = RNA_def_property(srna, "lamp", PROP_FLOAT, PROP_COLOR_GAMMA);
-       RNA_def_property_array(prop, 4);
-       RNA_def_property_ui_text(prop, "Lamp", "");
-       RNA_def_property_update(prop, 0, "rna_userdef_update");
+       /* Grease Pencil */
 
-       prop = RNA_def_property(srna, "speaker", PROP_FLOAT, PROP_COLOR_GAMMA);
-       RNA_def_property_array(prop, 3);
-       RNA_def_property_ui_text(prop, "Speaker", "");
-       RNA_def_property_update(prop, 0, "rna_userdef_update");
-       
-       prop = RNA_def_property(srna, "camera", PROP_FLOAT, PROP_COLOR_GAMMA);
-       RNA_def_property_array(prop, 3);
-       RNA_def_property_ui_text(prop, "Camera", "");
-       RNA_def_property_update(prop, 0, "rna_userdef_update");
+       rna_def_userdef_theme_spaces_gpencil(srna);
 
-       prop = RNA_def_property(srna, "view_overlay", PROP_FLOAT, PROP_COLOR_GAMMA);
+       prop = RNA_def_property(srna, "text_grease_pencil", PROP_FLOAT, PROP_COLOR_GAMMA);
+       RNA_def_property_float_sdna(prop, NULL, "time_gp_keyframe");
        RNA_def_property_array(prop, 3);
-       RNA_def_property_ui_text(prop, "View Overlay", "");
+       RNA_def_property_ui_text(prop, "Grease Pencil Keyframe", "Color for indicating Grease Pencil keyframes");
        RNA_def_property_update(prop, 0, "rna_userdef_update");
 
-       prop = RNA_def_property(srna, "empty", PROP_FLOAT, PROP_COLOR_GAMMA);
-       RNA_def_property_array(prop, 3);
-       RNA_def_property_ui_text(prop, "Empty", "");
-       RNA_def_property_update(prop, 0, "rna_userdef_update");
+       /* Object specific options */
 
        prop = RNA_def_property(srna, "object_selected", PROP_FLOAT, PROP_COLOR_GAMMA);
        RNA_def_property_float_sdna(prop, NULL, "select");
@@ -1588,14 +1670,42 @@ static void rna_def_userdef_theme_space_view3d(BlenderRNA *brna)
        RNA_def_property_ui_text(prop, "Object Grouped Active", "");
        RNA_def_property_update(prop, 0, "rna_userdef_update");
 
-       prop = RNA_def_property(srna, "transform", PROP_FLOAT, PROP_COLOR_GAMMA);
+       prop = RNA_def_property(srna, "text_keyframe", PROP_FLOAT, PROP_COLOR_GAMMA);
+       RNA_def_property_float_sdna(prop, NULL, "time_keyframe");
        RNA_def_property_array(prop, 3);
-       RNA_def_property_ui_text(prop, "Transform", "");
+       RNA_def_property_ui_text(prop, "Object Keyframe", "Color for indicating Object keyframes");
        RNA_def_property_update(prop, 0, "rna_userdef_update");
-       
+
+       /* Object type options */
+
+       prop = RNA_def_property(srna, "camera", PROP_FLOAT, PROP_COLOR_GAMMA);
+       RNA_def_property_array(prop, 3);
+       RNA_def_property_ui_text(prop, "Camera", "");
+       RNA_def_property_update(prop, 0, "rna_userdef_update");
+
+       prop = RNA_def_property(srna, "empty", PROP_FLOAT, PROP_COLOR_GAMMA);
+       RNA_def_property_array(prop, 3);
+       RNA_def_property_ui_text(prop, "Empty", "");
+       RNA_def_property_update(prop, 0, "rna_userdef_update");
+
+       prop = RNA_def_property(srna, "lamp", PROP_FLOAT, PROP_COLOR_GAMMA);
+       RNA_def_property_array(prop, 4);
+       RNA_def_property_ui_text(prop, "Lamp", "");
+       RNA_def_property_update(prop, 0, "rna_userdef_update");
+
+       prop = RNA_def_property(srna, "speaker", PROP_FLOAT, PROP_COLOR_GAMMA);
+       RNA_def_property_array(prop, 3);
+       RNA_def_property_ui_text(prop, "Speaker", "");
+       RNA_def_property_update(prop, 0, "rna_userdef_update");
+
+       /* Mesh Object specific */
+
        rna_def_userdef_theme_spaces_vertex(srna);
        rna_def_userdef_theme_spaces_edge(srna);
        rna_def_userdef_theme_spaces_face(srna);
+
+       /* Mesh Object specific curves*/
+
        rna_def_userdef_theme_spaces_curves(srna, true, true, true, false);
 
        prop = RNA_def_property(srna, "extra_edge_len", PROP_FLOAT, PROP_COLOR_GAMMA);
@@ -1639,10 +1749,7 @@ static void rna_def_userdef_theme_space_view3d(BlenderRNA *brna)
        RNA_def_property_ui_text(prop, "Split Normal", "");
        RNA_def_property_update(prop, 0, "rna_userdef_update");
 
-       prop = RNA_def_property(srna, "bone_solid", PROP_FLOAT, PROP_COLOR_GAMMA);
-       RNA_def_property_array(prop, 3);
-       RNA_def_property_ui_text(prop, "Bone Solid", "");
-       RNA_def_property_update(prop, 0, "rna_userdef_update");
+       /* Armature Object specific  */
 
        prop = RNA_def_property(srna, "bone_pose", PROP_FLOAT, PROP_COLOR_GAMMA);
        RNA_def_property_array(prop, 3);
@@ -1654,16 +1761,12 @@ static void rna_def_userdef_theme_space_view3d(BlenderRNA *brna)
        RNA_def_property_ui_text(prop, "Bone Pose Active", "");
        RNA_def_property_update(prop, 0, "rna_userdef_update");
 
-       prop = RNA_def_property(srna, "frame_current", PROP_FLOAT, PROP_COLOR_GAMMA);
-       RNA_def_property_float_sdna(prop, NULL, "cframe");
+       prop = RNA_def_property(srna, "bone_solid", PROP_FLOAT, PROP_COLOR_GAMMA);
        RNA_def_property_array(prop, 3);
-       RNA_def_property_ui_text(prop, "Current Frame", "");
+       RNA_def_property_ui_text(prop, "Bone Solid", "");
        RNA_def_property_update(prop, 0, "rna_userdef_update");
 
-       prop = RNA_def_property(srna, "outline_width", PROP_INT, PROP_NONE);
-       RNA_def_property_range(prop, 1, 5);
-       RNA_def_property_ui_text(prop, "Outline Width", "");
-       RNA_def_property_update(prop, 0, "rna_userdef_update");
+       /* misc */
 
        prop = RNA_def_property(srna, "bundle_solid", PROP_FLOAT, PROP_COLOR_GAMMA);
        RNA_def_property_float_sdna(prop, NULL, "bundle_solid");
@@ -1682,12 +1785,29 @@ static void rna_def_userdef_theme_space_view3d(BlenderRNA *brna)
        RNA_def_property_ui_text(prop, "Skin Root", "");
        RNA_def_property_update(prop, 0, "rna_userdef_update");
 
-       prop = RNA_def_property(srna, "clipping_border_3d", PROP_FLOAT, PROP_COLOR_GAMMA);
-       RNA_def_property_array(prop, 4);
-       RNA_def_property_ui_text(prop, "Clipping Border", "");
+       prop = RNA_def_property(srna, "view_overlay", PROP_FLOAT, PROP_COLOR_GAMMA);
+       RNA_def_property_array(prop, 3);
+       RNA_def_property_ui_text(prop, "View Overlay", "");
        RNA_def_property_update(prop, 0, "rna_userdef_update");
-       
+
+       prop = RNA_def_property(srna, "transform", PROP_FLOAT, PROP_COLOR_GAMMA);
+       RNA_def_property_array(prop, 3);
+       RNA_def_property_ui_text(prop, "Transform", "");
+       RNA_def_property_update(prop, 0, "rna_userdef_update");
+
+       prop = RNA_def_property(srna, "frame_current", PROP_FLOAT, PROP_COLOR_GAMMA);
+       RNA_def_property_float_sdna(prop, NULL, "cframe");
+       RNA_def_property_array(prop, 3);
+       RNA_def_property_ui_text(prop, "Current Frame", "");
+       RNA_def_property_update(prop, 0, "rna_userdef_update");
+
        rna_def_userdef_theme_spaces_paint_curves(srna);
+
+       prop = RNA_def_property(srna, "outline_width", PROP_INT, PROP_NONE);
+       RNA_def_property_range(prop, 1, 5);
+       RNA_def_property_ui_text(prop, "Outline Width", "");
+       RNA_def_property_update(prop, 0, "rna_userdef_update");
+
 }
 
 
@@ -2477,6 +2597,11 @@ static void rna_def_userdef_theme_space_seq(BlenderRNA *brna)
        RNA_def_property_ui_text(prop, "Meta Strip", "");
        RNA_def_property_update(prop, 0, "rna_userdef_update");
 
+       prop = RNA_def_property(srna, "text_strip", PROP_FLOAT, PROP_COLOR_GAMMA);
+       RNA_def_property_array(prop, 3);
+       RNA_def_property_ui_text(prop, "Text Strip", "");
+       RNA_def_property_update(prop, 0, "rna_userdef_update");
+
        prop = RNA_def_property(srna, "frame_current", PROP_FLOAT, PROP_COLOR_GAMMA);
        RNA_def_property_float_sdna(prop, NULL, "cframe");
        RNA_def_property_array(prop, 3);
@@ -2665,6 +2790,13 @@ static void rna_def_userdef_theme_space_action(BlenderRNA *brna)
        RNA_def_property_ui_text(prop, "Keyframe Border Selected", "Color of selected keyframe border");
        RNA_def_property_update(prop, 0, "rna_userdef_update");
        
+       prop = RNA_def_property(srna, "keyframe_scale_factor", PROP_FLOAT, PROP_NONE);
+       RNA_def_property_float_sdna(prop, NULL, "keyframe_scale_fac");
+       RNA_def_property_float_default(prop, 1.0f);
+       RNA_def_property_ui_text(prop, "Keyframe Scale Factor", "Scale factor for adjusting the height of keyframes");
+       RNA_def_property_range(prop, 0.8f, 5.0f); /* Note: These limits prevent buttons overlapping (min), and excessive size... (max) */
+       RNA_def_property_update(prop, NC_SPACE | ND_SPACE_DOPESHEET, "rna_userdef_update");
+       
        
        prop = RNA_def_property(srna, "summary", PROP_FLOAT, PROP_COLOR_GAMMA);
        RNA_def_property_float_sdna(prop, NULL, "anim_active");
@@ -3081,7 +3213,7 @@ static void rna_def_userdef_addon(BlenderRNA *brna)
        srna = RNA_def_struct(brna, "Addon", NULL);
        RNA_def_struct_sdna(srna, "bAddon");
        RNA_def_struct_clear_flag(srna, STRUCT_UNDO);
-       RNA_def_struct_ui_text(srna, "Addon", "Python addons to be loaded automatically");
+       RNA_def_struct_ui_text(srna, "Add-on", "Python add-ons to be loaded automatically");
 
        prop = RNA_def_property(srna, "module", PROP_STRING, PROP_NONE);
        RNA_def_property_ui_text(prop, "Module", "Module name");
@@ -3118,7 +3250,7 @@ static void rna_def_userdef_addon_pref(BlenderRNA *brna)
        PropertyRNA *prop;
 
        srna = RNA_def_struct(brna, "AddonPreferences", NULL);
-       RNA_def_struct_ui_text(srna, "Addon Preferences", "");
+       RNA_def_struct_ui_text(srna, "Add-on Preferences", "");
        RNA_def_struct_sdna(srna, "bAddon");  /* WARNING: only a bAddon during registration */
 
        RNA_def_struct_refine_func(srna, "rna_AddonPref_refine");
@@ -3263,7 +3395,14 @@ static void rna_def_userdef_view(BlenderRNA *brna)
                                             "Direct conversion of frame numbers to seconds"},
                {0, NULL, 0, NULL, NULL}
        };
-       
+
+       static EnumPropertyItem zoom_frame_modes[] = {
+               {ZOOM_FRAME_MODE_KEEP_RANGE, "KEEP_RANGE", 0, "Keep Range", ""},
+               {ZOOM_FRAME_MODE_SECONDS, "SECONDS", 0, "Seconds", ""},
+               {ZOOM_FRAME_MODE_KEYFRAMES, "KEYFRAMES", 0, "Keyframes", ""},
+               {0, NULL, 0, NULL, NULL}
+       };
+
        PropertyRNA *prop;
        StructRNA *srna;
        
@@ -3362,11 +3501,6 @@ static void rna_def_userdef_view(BlenderRNA *brna)
        RNA_def_property_ui_text(prop, "Prompt Quit",
                                 "Ask for confirmation when quitting through the window close button");
 
-       prop = RNA_def_property(srna, "use_gl_warn_support", PROP_BOOLEAN, PROP_NONE);
-       RNA_def_property_boolean_negative_sdna(prop, NULL, "uiflag2", USER_OPENGL_NO_WARN_SUPPORT);
-       RNA_def_property_ui_text(prop, "Warn On Deprecated OpenGL",
-                                "Pop up a warning when an old OpenGL version is detected");
-
        /* Toolbox click-hold delay */
        prop = RNA_def_property(srna, "open_left_mouse_delay", PROP_INT, PROP_NONE);
        RNA_def_property_int_sdna(prop, NULL, "tb_leftmouse");
@@ -3452,8 +3586,8 @@ static void rna_def_userdef_view(BlenderRNA *brna)
        RNA_def_property_range(prop, 0, 1000);
        RNA_def_property_ui_text(prop, "Smooth View", "Time to animate the view in milliseconds, zero to disable");
 
-       prop = RNA_def_property(srna, "rotation_angle", PROP_INT, PROP_NONE);
-       RNA_def_property_int_sdna(prop, NULL, "pad_rot_angle");
+       prop = RNA_def_property(srna, "rotation_angle", PROP_FLOAT, PROP_NONE);
+       RNA_def_property_float_sdna(prop, NULL, "pad_rot_angle");
        RNA_def_property_range(prop, 0, 90);
        RNA_def_property_ui_text(prop, "Rotation Angle", "Rotation step for numerical pad keys (2 4 6 8)");
 
@@ -3505,6 +3639,22 @@ static void rna_def_userdef_view(BlenderRNA *brna)
        RNA_def_property_ui_text(prop, "TimeCode Style",
                                 "Format of Time Codes displayed when not displaying timing in terms of frames");
        RNA_def_property_update(prop, 0, "rna_userdef_update");
+
+       prop = RNA_def_property(srna, "view_frame_type", PROP_ENUM, PROP_NONE);
+       RNA_def_property_enum_items(prop, zoom_frame_modes);
+       RNA_def_property_enum_sdna(prop, NULL, "view_frame_type");
+       RNA_def_property_ui_text(prop, "Zoom To Frame Type", "How zooming to frame focuses around current frame");
+
+       prop = RNA_def_property(srna, "view_frame_keyframes", PROP_INT, PROP_NONE);
+       RNA_def_property_range(prop, 1, 500);
+       RNA_def_property_ui_text(prop, "Zoom Keyframes",
+                                "Keyframes around cursor that we zoom around");
+
+       prop = RNA_def_property(srna, "view_frame_seconds", PROP_FLOAT, PROP_TIME);
+       RNA_def_property_range(prop, 0.0, 10000.0);
+       RNA_def_property_ui_text(prop, "Zoom Seconds",
+                                "Seconds around cursor that we zoom around");
+
 }
 
 static void rna_def_userdef_edit(BlenderRNA *brna)
@@ -3620,14 +3770,14 @@ static void rna_def_userdef_edit(BlenderRNA *brna)
                                 "and also Color is based on the transform axis");
        
        prop = RNA_def_property(srna, "keyframe_new_interpolation_type", PROP_ENUM, PROP_NONE);
-       RNA_def_property_enum_items(prop, beztriple_interpolation_mode_items);
+       RNA_def_property_enum_items(prop, rna_enum_beztriple_interpolation_mode_items);
        RNA_def_property_enum_sdna(prop, NULL, "ipo_new");
        RNA_def_property_ui_text(prop, "New Interpolation Type",
                                 "Interpolation mode used for first keyframe on newly added F-Curves "
                                 "(subsequent keyframes take interpolation from preceding keyframe)");
-       
+
        prop = RNA_def_property(srna, "keyframe_new_handle_type", PROP_ENUM, PROP_NONE);
-       RNA_def_property_enum_items(prop, keyframe_handle_type_items);
+       RNA_def_property_enum_items(prop, rna_enum_keyframe_handle_type_items);
        RNA_def_property_enum_sdna(prop, NULL, "keyhandles_new");
        RNA_def_property_ui_text(prop, "New Handles Type", "Handle type for handles of new keyframes");
        
@@ -3658,17 +3808,13 @@ static void rna_def_userdef_edit(BlenderRNA *brna)
        RNA_def_property_ui_text(prop, "Grease Pencil Euclidean Distance",
                                 "Distance moved by mouse when drawing stroke to include");
 
-       prop = RNA_def_property(srna, "use_grease_pencil_smooth_stroke", PROP_BOOLEAN, PROP_NONE);
-       RNA_def_property_boolean_sdna(prop, NULL, "gp_settings", GP_PAINT_DOSMOOTH);
-       RNA_def_property_ui_text(prop, "Grease Pencil Smooth Stroke", "Smooth the final stroke");
-
        prop = RNA_def_property(srna, "use_grease_pencil_simplify_stroke", PROP_BOOLEAN, PROP_NONE);
        RNA_def_property_boolean_sdna(prop, NULL, "gp_settings", GP_PAINT_DOSIMPLIFY);
        RNA_def_property_ui_text(prop, "Grease Pencil Simplify Stroke", "Simplify the final stroke");
 
        prop = RNA_def_property(srna, "grease_pencil_eraser_radius", PROP_INT, PROP_PIXEL);
        RNA_def_property_int_sdna(prop, NULL, "gp_eraser");
-       RNA_def_property_range(prop, 0, 100);
+       RNA_def_property_range(prop, 1, 500);
        RNA_def_property_ui_text(prop, "Grease Pencil Eraser Radius", "Radius of eraser 'brush'");
        
        
@@ -3729,17 +3875,17 @@ static void rna_def_userdef_edit(BlenderRNA *brna)
        prop = RNA_def_property(srna, "use_duplicate_action", PROP_BOOLEAN, PROP_NONE);
        RNA_def_property_boolean_sdna(prop, NULL, "dupflag", USER_DUP_ACT);
        RNA_def_property_ui_text(prop, "Duplicate Action", "Causes actions to be duplicated with the object");
-       
-       prop = RNA_def_property(srna, "use_duplicate_particle", PROP_BOOLEAN, PROP_NONE);
-       RNA_def_property_boolean_sdna(prop, NULL, "dupflag", USER_DUP_PSYS);
-       RNA_def_property_ui_text(prop, "Duplicate Particle", "Causes particle systems to be duplicated with the object");
+
+       /* currently only used for insert offset (aka auto-offset), maybe also be useful for later stuff though */
+       prop = RNA_def_property(srna, "node_margin", PROP_INT, PROP_NONE);
+       RNA_def_property_int_sdna(prop, NULL, "node_margin");
+       RNA_def_property_ui_text(prop, "Auto-offset Margin", "Minimum distance between nodes for Auto-offsetting nodes");
+       RNA_def_property_update(prop, 0, "rna_userdef_update");
 }
 
 static void rna_def_userdef_system(BlenderRNA *brna)
 {
-       FunctionRNA *func;
        PropertyRNA *prop;
-       PropertyRNA *parm;
        StructRNA *srna;
 
        static EnumPropertyItem gl_texture_clamp_items[] = {
@@ -3839,11 +3985,6 @@ static void rna_def_userdef_system(BlenderRNA *brna)
                {USER_MULTISAMPLE_16, "16", 0, "MultiSample: 16", "Use 16x OpenGL MultiSample (requires restart)"},
                {0, NULL, 0, NULL, NULL}
        };
-       
-       static EnumPropertyItem language_items[] = {
-               {0, "DEFAULT", 0, "Default (Default)", ""},
-               {0, NULL, 0, NULL, NULL}
-       };
 
 #ifdef WITH_CYCLES
        static EnumPropertyItem compute_device_items[] = {
@@ -3907,6 +4048,11 @@ static void rna_def_userdef_system(BlenderRNA *brna)
        RNA_def_property_ui_text(prop, "Interface Font", "Path to interface font");
        RNA_def_property_update(prop, NC_WINDOW, "rna_userdef_language_update");
 
+       prop = RNA_def_property(srna, "font_path_ui_mono", PROP_STRING, PROP_FILEPATH);
+       RNA_def_property_string_sdna(prop, NULL, "font_path_ui_mono");
+       RNA_def_property_ui_text(prop, "Mono-space Font", "Path to interface mono-space Font");
+       RNA_def_property_update(prop, NC_WINDOW, "rna_userdef_language_update");
+
        prop = RNA_def_property(srna, "scrollback", PROP_INT, PROP_UNSIGNED);
        RNA_def_property_int_sdna(prop, NULL, "scrollback");
        RNA_def_property_range(prop, 32, 32768);
@@ -3921,7 +4067,7 @@ static void rna_def_userdef_system(BlenderRNA *brna)
        /* Language Selection */
 
        prop = RNA_def_property(srna, "language", PROP_ENUM, PROP_NONE);
-       RNA_def_property_enum_items(prop, language_items);
+       RNA_def_property_enum_items(prop, rna_enum_language_default_items);
 #ifdef WITH_INTERNATIONAL
        RNA_def_property_enum_funcs(prop, NULL, NULL, "rna_lang_enum_properties_itemf");
 #endif
@@ -4038,13 +4184,6 @@ static void rna_def_userdef_system(BlenderRNA *brna)
        RNA_def_property_ui_text(prop, "Image Draw Method", "Method used for displaying images on the screen");
        RNA_def_property_update(prop, 0, "rna_userdef_update");
 
-       prop = RNA_def_property(srna, "use_vertex_buffer_objects", PROP_BOOLEAN, PROP_NONE);
-       RNA_def_property_boolean_negative_sdna(prop, NULL, "gameflags", USER_DISABLE_VBO);
-       RNA_def_property_ui_text(prop, "VBOs",
-                                "Use Vertex Buffer Objects (or Vertex Arrays, if unsupported) for viewport rendering");
-       /* this isn't essential but nice to check if VBO draws any differently */
-       RNA_def_property_update(prop, NC_WINDOW, "rna_userdef_vbo_update");
-
        prop = RNA_def_property(srna, "anisotropic_filter", PROP_ENUM, PROP_NONE);
        RNA_def_property_enum_sdna(prop, NULL, "anisotropic_filter");
        RNA_def_property_enum_items(prop, anisotropic_items);
@@ -4126,11 +4265,6 @@ static void rna_def_userdef_system(BlenderRNA *brna)
        RNA_def_property_ui_text(prop, "Text Anti-aliasing", "Draw user interface text anti-aliased");
        RNA_def_property_update(prop, 0, "rna_userdef_text_update");
 
-       func = RNA_def_function(srna, "is_occlusion_query_supported", "rna_Scene_GPU_selection_supported");
-       parm = RNA_def_boolean(func, "is_supported", 0, "Occlusion Query Support",
-                              "Check if GPU supports Occlusion Queries");
-       RNA_def_function_return(func, parm);
-
        prop = RNA_def_property(srna, "select_method", PROP_ENUM, PROP_NONE);
        RNA_def_property_enum_sdna(prop, NULL, "gpu_select_method");
        RNA_def_property_enum_items(prop, gpu_select_method_items);
@@ -4166,6 +4300,16 @@ static void rna_def_userdef_system(BlenderRNA *brna)
        RNA_def_property_enum_funcs(prop, "rna_userdef_compute_device_get", NULL, "rna_userdef_compute_device_itemf");
        RNA_def_property_ui_text(prop, "Compute Device", "Device to use for computation");
 #endif
+
+#ifdef WITH_OPENSUBDIV
+       prop = RNA_def_property(srna, "opensubdiv_compute_type", PROP_ENUM, PROP_NONE);
+       RNA_def_property_flag(prop, PROP_ENUM_NO_CONTEXT);
+       RNA_def_property_enum_sdna(prop, NULL, "opensubdiv_compute_type");
+       RNA_def_property_enum_items(prop, opensubdiv_compute_type_items);
+       RNA_def_property_enum_funcs(prop, NULL, NULL, "rna_userdef_opensubdiv_compute_type_itemf");
+       RNA_def_property_ui_text(prop, "OpenSubdiv Compute Type", "Type of computer back-end used with OpenSubdiv");
+       RNA_def_property_update(prop, NC_SPACE | ND_SPACE_PROPERTIES, "rna_userdef_opensubdiv_update");
+#endif
 }
 
 static void rna_def_userdef_input(BlenderRNA *brna)
@@ -4251,7 +4395,7 @@ static void rna_def_userdef_input(BlenderRNA *brna)
        /* View Navigation */
        prop = RNA_def_property(srna, "navigation_mode", PROP_ENUM, PROP_NONE);
        RNA_def_property_enum_sdna(prop, NULL, "navigation_mode");
-       RNA_def_property_enum_items(prop, navigation_mode_items);
+       RNA_def_property_enum_items(prop, rna_enum_navigation_mode_items);
        RNA_def_property_ui_text(prop, "View Navigation", "Which method to use for viewport navigation");
 
        prop = RNA_def_property(srna, "walk_navigation", PROP_POINTER, PROP_NONE);
@@ -4283,6 +4427,11 @@ static void rna_def_userdef_input(BlenderRNA *brna)
        RNA_def_property_range(prop, 0.01f, 40.0f);
        RNA_def_property_ui_text(prop, "Orbit Sensitivity", "Overall sensitivity of the 3D Mouse for orbiting");
 
+       prop = RNA_def_property(srna, "ndof_deadzone", PROP_FLOAT, PROP_FACTOR);
+       RNA_def_property_range(prop, 0.0f, 1.0f);
+       RNA_def_property_ui_text(prop, "Deadzone", "Deadzone of the 3D Mouse");
+       RNA_def_property_update(prop, 0, "rna_userdef_ndof_deadzone_update");
+
        prop = RNA_def_property(srna, "ndof_pan_yz_swap_axis", PROP_BOOLEAN, PROP_NONE);
        RNA_def_property_boolean_sdna(prop, NULL, "ndof_flag", NDOF_PAN_YZ_SWAP_AXIS);
        RNA_def_property_ui_text(prop, "Y/Z Swap Axis",
@@ -4411,7 +4560,7 @@ static void rna_def_userdef_filepaths(BlenderRNA *brna)
        
        prop = RNA_def_property(srna, "show_hidden_files_datablocks", PROP_BOOLEAN, PROP_NONE);
        RNA_def_property_boolean_sdna(prop, NULL, "uiflag", USER_HIDE_DOT);
-       RNA_def_property_ui_text(prop, "Hide Dot Files/Datablocks", "Hide files/datablocks that start with a dot (.*)");
+       RNA_def_property_ui_text(prop, "Hide Dot Files/Datablocks", "Hide files/data-blocks that start with a dot (.*)");
        
        prop = RNA_def_property(srna, "use_filter_files", PROP_BOOLEAN, PROP_NONE);
        RNA_def_property_boolean_sdna(prop, NULL, "uiflag", USER_FILTERFILEEXTS);
@@ -4460,7 +4609,7 @@ static void rna_def_userdef_filepaths(BlenderRNA *brna)
        RNA_def_property_string_sdna(prop, NULL, "pythondir");
        RNA_def_property_ui_text(prop, "Python Scripts Directory",
                                 "Alternate script path, matching the default layout with subdirs: "
-                                "startup, addons & modules (requires restart)");
+                                "startup, add-ons & modules (requires restart)");
        /* TODO, editing should reset sys.path! */
 
        prop = RNA_def_property(srna, "i18n_branches_directory", PROP_STRING, PROP_DIRPATH);
@@ -4546,13 +4695,13 @@ static void rna_def_userdef_addon_collection(BlenderRNA *brna, PropertyRNA *cpro
        RNA_def_function_flag(func, FUNC_NO_SELF);
        RNA_def_function_ui_description(func, "Add a new add-on");
        /* return type */
-       parm = RNA_def_pointer(func, "addon", "Addon", "", "Addon datablock");
+       parm = RNA_def_pointer(func, "addon", "Addon", "", "Add-on data");
        RNA_def_function_return(func, parm);
 
        func = RNA_def_function(srna, "remove", "rna_userdef_addon_remove");
        RNA_def_function_flag(func, FUNC_NO_SELF | FUNC_USE_REPORTS);
        RNA_def_function_ui_description(func, "Remove add-on");
-       parm = RNA_def_pointer(func, "addon", "Addon", "", "Addon to remove");
+       parm = RNA_def_pointer(func, "addon", "Addon", "", "Add-on to remove");
        RNA_def_property_flag(parm, PROP_REQUIRED | PROP_NEVER_NULL | PROP_RNAPTR);
        RNA_def_property_clear_flag(parm, PROP_THICK_WRAP);
 }
@@ -4628,7 +4777,7 @@ void RNA_def_userdef(BlenderRNA *brna)
        prop = RNA_def_property(srna, "addons", PROP_COLLECTION, PROP_NONE);
        RNA_def_property_collection_sdna(prop, NULL, "addons", NULL);
        RNA_def_property_struct_type(prop, "Addon");
-       RNA_def_property_ui_text(prop, "Addon", "");
+       RNA_def_property_ui_text(prop, "Add-on", "");
        rna_def_userdef_addon_collection(brna, prop);
 
        prop = RNA_def_property(srna, "autoexec_paths", PROP_COLLECTION, PROP_NONE);