diff options
author | Dalai Felinto <dfelinto@gmail.com> | 2017-02-08 14:26:41 +0300 |
---|---|---|
committer | Dalai Felinto <dfelinto@gmail.com> | 2017-02-08 16:44:37 +0300 |
commit | a38298f4dd1673a8305abdab687fc4a16f383e5f (patch) | |
tree | 16dcf35ecc1f9133d8c8baf880bc71ea56fa0771 /source/blender/blenkernel | |
parent | d4913af84660318047e3404f9766014cd78864ab (diff) |
Bring back Lasso and Circle selection back
(and replace more instances of BaseLegacy/scene->base with Base/sl->object_bases)
Still need mouse selection, box selection, and menu selection
Also, there is still a problem with BA_WAS_SEL, at the moment only the
objects centers are highlighted.
Diffstat (limited to 'source/blender/blenkernel')
-rw-r--r-- | source/blender/blenkernel/BKE_scene.h | 3 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/scene.c | 44 |
2 files changed, 24 insertions, 23 deletions
diff --git a/source/blender/blenkernel/BKE_scene.h b/source/blender/blenkernel/BKE_scene.h index 53bb69aedb6..181d4b12703 100644 --- a/source/blender/blenkernel/BKE_scene.h +++ b/source/blender/blenkernel/BKE_scene.h @@ -47,6 +47,7 @@ struct QuicktimeCodecData; struct RenderData; struct SceneRenderLayer; struct Scene; +struct SceneLayer; struct UnitSettings; struct Main; @@ -95,7 +96,7 @@ typedef struct SceneBaseIter { int BKE_scene_base_iter_next(struct EvaluationContext *eval_ctx, struct SceneBaseIter *iter, struct Scene **scene, int val, struct BaseLegacy **base, struct Object **ob); -void BKE_scene_base_flag_to_objects(struct Scene *scene); +void BKE_scene_base_flag_to_objects(struct SceneLayer *sl); void BKE_scene_base_flag_from_objects(struct Scene *scene); void BKE_scene_base_flag_sync_from_base(struct BaseLegacy *base); void BKE_scene_base_flag_sync_from_object(struct BaseLegacy *base); diff --git a/source/blender/blenkernel/intern/scene.c b/source/blender/blenkernel/intern/scene.c index 1ce4bf8f9eb..6204a831fd9 100644 --- a/source/blender/blenkernel/intern/scene.c +++ b/source/blender/blenkernel/intern/scene.c @@ -1746,40 +1746,24 @@ bool BKE_scene_uses_blender_game(const Scene *scene) return STREQ(scene->r.engine, RE_engine_id_BLENDER_GAME); } -void BKE_scene_base_flag_to_objects(struct Scene *scene) +void BKE_scene_base_flag_to_objects(SceneLayer *sl) { - BaseLegacy *base = scene->base.first; + Base *base = sl->object_bases.first; while (base) { - BKE_scene_base_flag_sync_from_base(base); - base = base->next; - } -} - -void BKE_scene_base_flag_from_objects(struct Scene *scene) -{ - BaseLegacy *base = scene->base.first; - - while (base) { - BKE_scene_base_flag_sync_from_object(base); + BKE_scene_object_base_flag_sync_from_base(base); base = base->next; } } void BKE_scene_base_flag_sync_from_base(BaseLegacy *base) { - Object *ob = base->object; - - /* keep the object only flags untouched */ - int flag = ob->flag & OB_FROMGROUP; - - ob->flag = base->flag_legacy; - ob->flag |= flag; + BKE_scene_object_base_flag_sync_from_base(base); } void BKE_scene_base_flag_sync_from_object(BaseLegacy *base) { - base->flag_legacy = base->object->flag; + BKE_scene_object_base_flag_sync_from_object(base); } void BKE_scene_object_base_flag_sync_from_base(Base *base) @@ -1791,11 +1775,27 @@ void BKE_scene_object_base_flag_sync_from_base(Base *base) ob->flag = base->flag; ob->flag |= flag; + + if ((base->flag & BASE_SELECTED) != 0) { + ob->flag |= SELECT; + } + else { + ob->flag &= ~SELECT; + } } void BKE_scene_object_base_flag_sync_from_object(Base *base) { - base->flag = base->object->flag; + Object *ob = base->object; + base->flag = ob->flag; + + if ((ob->flag & SELECT) != 0) { + base->flag |= BASE_SELECTED; + BLI_assert((base->flag & BASE_SELECTABLED) != 0); + } + else { + base->flag &= ~BASE_SELECTED; + } } void BKE_scene_disable_color_management(Scene *scene) |