Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2013-05-17 11:00:21 +0400
committerCampbell Barton <ideasman42@gmail.com>2013-05-17 11:00:21 +0400
commita5a2a71ce3efe7a0b456a6dcadd1548391772882 (patch)
tree5540dfc4c637ef1cea962704af106bf6bcb8d45a
parentf277d9fefceda49f72ff95785b87bed8c3a477fa (diff)
svn merge ^/trunk/blender -c56857 -c56863 -c56865 -c56868
-rw-r--r--release/scripts/startup/bl_ui/properties_game.py12
-rw-r--r--source/blender/blenkernel/intern/node.c45
-rw-r--r--source/blender/editors/include/ED_mesh.h2
-rw-r--r--source/blender/editors/mesh/editmesh_loopcut.c20
-rw-r--r--source/blender/editors/transform/transform_ops.c41
-rw-r--r--source/blender/makesdna/DNA_node_types.h6
-rw-r--r--source/blender/makesrna/intern/rna_scene.c7
7 files changed, 108 insertions, 25 deletions
diff --git a/release/scripts/startup/bl_ui/properties_game.py b/release/scripts/startup/bl_ui/properties_game.py
index fcafc7c816a..48cfb6f816a 100644
--- a/release/scripts/startup/bl_ui/properties_game.py
+++ b/release/scripts/startup/bl_ui/properties_game.py
@@ -619,11 +619,9 @@ class WORLD_PT_game_physics(WorldButtonsPanel, Panel):
gs = context.scene.game_settings
- layout.prop(gs, "physics_engine")
+ layout.prop(gs, "physics_engine", text="Engine")
if gs.physics_engine != 'NONE':
- col = layout.column()
- col.prop(gs, "physics_gravity", text="Gravity")
- col.prop(gs, "occlusion_culling_resolution", text="Culling Resolution")
+ layout.prop(gs, "physics_gravity", text="Gravity")
split = layout.split()
@@ -645,6 +643,12 @@ class WORLD_PT_game_physics(WorldButtonsPanel, Panel):
sub.prop(gs, "deactivation_angular_threshold", text="Angular Threshold")
sub = col.row()
sub.prop(gs, "deactivation_time", text="Time")
+
+ col = layout.column()
+ col.prop(gs, "use_occlusion_culling", text="Occlusion Culling")
+ sub = col.column()
+ sub.active = gs.use_occlusion_culling
+ sub.prop(gs, "occlusion_culling_resolution", text="Resolution")
else:
split = layout.split()
diff --git a/source/blender/blenkernel/intern/node.c b/source/blender/blenkernel/intern/node.c
index 03d4fc35f42..75bf594a976 100644
--- a/source/blender/blenkernel/intern/node.c
+++ b/source/blender/blenkernel/intern/node.c
@@ -2278,30 +2278,41 @@ bNode *nodeGetActive(bNodeTree *ntree)
return node;
}
-/* two active flags, ID nodes have special flag for buttons display */
-bNode *nodeGetActiveID(bNodeTree *ntree, short idtype)
+static bNode *node_get_active_id_recursive(bNodeInstanceKey active_key, bNodeInstanceKey parent_key, bNodeTree *ntree, short idtype)
{
- bNode *node, *tnode;
-
- if (ntree == NULL) return NULL;
-
- for (node = ntree->nodes.first; node; node = node->next)
- if (node->id && GS(node->id->name) == idtype)
- if (node->flag & NODE_ACTIVE_ID)
- return node;
-
- /* no node with active ID in this tree, look inside groups */
- for (node = ntree->nodes.first; node; node = node->next) {
- if (node->type == NODE_GROUP) {
- tnode = nodeGetActiveID((bNodeTree *)node->id, idtype);
- if (tnode)
- return tnode;
+ if (parent_key.value == active_key.value) {
+ bNode *node;
+ for (node = ntree->nodes.first; node; node = node->next)
+ if (node->id && GS(node->id->name) == idtype)
+ if (node->flag & NODE_ACTIVE_ID)
+ return node;
+ }
+ else {
+ bNode *node, *tnode;
+ /* no node with active ID in this tree, look inside groups */
+ for (node = ntree->nodes.first; node; node = node->next) {
+ if (node->type == NODE_GROUP) {
+ bNodeTree *group = (bNodeTree *)node->id;
+ bNodeInstanceKey group_key = BKE_node_instance_key(parent_key, ntree, node);
+ tnode = node_get_active_id_recursive(active_key, group_key, group, idtype);
+ if (tnode)
+ return tnode;
+ }
}
}
return NULL;
}
+/* two active flags, ID nodes have special flag for buttons display */
+bNode *nodeGetActiveID(bNodeTree *ntree, short idtype)
+{
+ if (ntree)
+ return node_get_active_id_recursive(ntree->active_viewer_key, NODE_INSTANCE_KEY_BASE, ntree, idtype);
+ else
+ return NULL;
+}
+
bool nodeSetActiveID(bNodeTree *ntree, short idtype, ID *id)
{
bNode *node;
diff --git a/source/blender/editors/include/ED_mesh.h b/source/blender/editors/include/ED_mesh.h
index aa9178ee3fc..65217e09259 100644
--- a/source/blender/editors/include/ED_mesh.h
+++ b/source/blender/editors/include/ED_mesh.h
@@ -308,6 +308,8 @@ bool ED_mesh_pick_face_vert(struct bContext *C, struct Object *ob, const int mva
#define ED_MESH_PICK_DEFAULT_VERT_SIZE 50
#define ED_MESH_PICK_DEFAULT_FACE_SIZE 3
+#define USE_LOOPSLIDE_HACK
+
#ifdef __cplusplus
}
#endif
diff --git a/source/blender/editors/mesh/editmesh_loopcut.c b/source/blender/editors/mesh/editmesh_loopcut.c
index 68a5809bc2e..396030ee57e 100644
--- a/source/blender/editors/mesh/editmesh_loopcut.c
+++ b/source/blender/editors/mesh/editmesh_loopcut.c
@@ -443,6 +443,21 @@ static int loopcut_init(bContext *C, wmOperator *op, const wmEvent *event)
loopcut_update_edge(lcd, e, 0);
}
+#ifdef USE_LOOPSLIDE_HACK
+ /* for use in macro so we can restore, HACK */
+ {
+ Scene *scene = CTX_data_scene(C);
+ ToolSettings *settings = scene->toolsettings;
+ int mesh_select_mode[3] = {
+ (settings->selectmode & SCE_SELECT_VERTEX) != 0,
+ (settings->selectmode & SCE_SELECT_EDGE) != 0,
+ (settings->selectmode & SCE_SELECT_FACE) != 0,
+ };
+
+ RNA_boolean_set_array(op->ptr, "mesh_select_mode_init", mesh_select_mode);
+ }
+#endif
+
if (is_interactive) {
ScrArea *sa = CTX_wm_area(C);
ED_area_headerprint(sa, IFACE_("Select a ring to be cut, use mouse-wheel or page-up/down for number of cuts, "
@@ -652,4 +667,9 @@ void MESH_OT_loopcut(wmOperatorType *ot)
prop = RNA_def_int(ot->srna, "edge_index", -1, -1, INT_MAX, "Number of Cuts", "", 0, INT_MAX);
RNA_def_property_flag(prop, PROP_HIDDEN);
+
+#ifdef USE_LOOPSLIDE_HACK
+ prop = RNA_def_boolean_array(ot->srna, "mesh_select_mode_init", 3, NULL, "", "");
+ RNA_def_property_flag(prop, PROP_HIDDEN);
+#endif
}
diff --git a/source/blender/editors/transform/transform_ops.c b/source/blender/editors/transform/transform_ops.c
index 4f46e969c3c..ae8193d1f26 100644
--- a/source/blender/editors/transform/transform_ops.c
+++ b/source/blender/editors/transform/transform_ops.c
@@ -50,6 +50,7 @@
#include "UI_resources.h"
#include "ED_screen.h"
+#include "ED_mesh.h"
#include "transform.h"
@@ -292,8 +293,48 @@ static void TRANSFORM_OT_create_orientation(struct wmOperatorType *ot)
RNA_def_boolean(ot->srna, "overwrite", 0, "Overwrite previous", "Overwrite previously created orientation with same name");
}
+
+#ifdef USE_LOOPSLIDE_HACK
+/**
+ * Special hack for MESH_OT_loopcut_slide so we get back to the selection mode
+ */
+static void transformops_loopsel_hack(bContext *C, wmOperator *op)
+{
+ if (op->type->idname == OP_EDGE_SLIDE) {
+ if (op->opm && op->opm->opm && op->opm->opm->prev) {
+ wmOperator *op_prev = op->opm->opm->prev;
+ Scene *scene = CTX_data_scene(C);
+ int mesh_select_mode[3];
+ PropertyRNA *prop = RNA_struct_find_property(op_prev->ptr, "mesh_select_mode_init");
+
+ if (RNA_property_is_set(op_prev->ptr, prop)) {
+ ToolSettings *ts = scene->toolsettings;
+ short selectmode_orig;
+
+ RNA_property_boolean_get_array(op_prev->ptr, prop, mesh_select_mode);
+ selectmode_orig = ((mesh_select_mode[0] ? SCE_SELECT_VERTEX : 0) |
+ (mesh_select_mode[1] ? SCE_SELECT_EDGE : 0) |
+ (mesh_select_mode[2] ? SCE_SELECT_FACE : 0));
+
+ /* still switch if we were originally in face select mode */
+ if ((ts->selectmode != selectmode_orig) && (selectmode_orig != SCE_SELECT_FACE)) {
+ BMEditMesh *em = BKE_editmesh_from_object(scene->obedit);
+ em->selectmode = ts->selectmode = selectmode_orig;
+ EDBM_selectmode_set(em);
+ }
+ }
+ }
+ }
+}
+#endif /* USE_LOOPSLIDE_HACK */
+
+
static void transformops_exit(bContext *C, wmOperator *op)
{
+#ifdef USE_LOOPSLIDE_HACK
+ transformops_loopsel_hack(C, op);
+#endif
+
saveTransform(C, op->customdata, op);
MEM_freeN(op->customdata);
op->customdata = NULL;
diff --git a/source/blender/makesdna/DNA_node_types.h b/source/blender/makesdna/DNA_node_types.h
index 3ed97c2480f..25412f1937b 100644
--- a/source/blender/makesdna/DNA_node_types.h
+++ b/source/blender/makesdna/DNA_node_types.h
@@ -370,10 +370,8 @@ typedef struct bNodeTree {
* Only available in base node trees (e.g. scene->node_tree)
*/
struct bNodeInstanceHash *previews;
- /* XXX workaround for ambiguous viewer output:
- * Viewer nodes all write to the same image buffer.
- * This determines the tree instance containing the "active" output.
- * Only used in local scene->nodetree.
+ /* Defines the node tree instance to use for the "active" context,
+ * in case multiple different editors are used and make context ambiguous.
*/
bNodeInstanceKey active_viewer_key;
int pad;
diff --git a/source/blender/makesrna/intern/rna_scene.c b/source/blender/makesrna/intern/rna_scene.c
index 9327522aa9d..fae5e6374b7 100644
--- a/source/blender/makesrna/intern/rna_scene.c
+++ b/source/blender/makesrna/intern/rna_scene.c
@@ -1122,6 +1122,10 @@ static void rna_SceneRenderLayer_name_set(PointerRNA *ptr, const char *value)
{
Scene *scene = (Scene *)ptr->id.data;
SceneRenderLayer *rl = (SceneRenderLayer *)ptr->data;
+ char oldname[sizeof(rl->name)];
+
+ BLI_strncpy(oldname, rl->name, sizeof(rl->name));
+
BLI_strncpy_utf8(rl->name, value, sizeof(rl->name));
BLI_uniquename(&scene->r.layers, rl, DATA_("RenderLayer"), '.', offsetof(SceneRenderLayer, name), sizeof(rl->name));
@@ -1136,6 +1140,9 @@ static void rna_SceneRenderLayer_name_set(PointerRNA *ptr, const char *value)
}
}
}
+
+ /* fix all the animation data which may link to this */
+ BKE_all_animdata_fix_paths_rename(NULL, "render.layers", oldname, rl->name);
}
static char *rna_SceneRenderLayer_path(PointerRNA *ptr)