Get workspace mode from the workspace view-layer

While this probably isn't the final solution we'll go with, it's nicer
as current one, which was basically broken. So consider this as
temporary solution.

It also allows testing how changing workspace changes mode & active
object, but only by having the workspaces use different view-layers.

Decided to remove WorkSpace.mode for now. If we need to bring it back,
we'll have to version patch it anyway.
This commit is contained in:
Julian Eisel
2017-11-25 03:37:48 +01:00
parent 7cbc7dd904
commit 974ffaa39d
3 changed files with 13 additions and 3 deletions

View File

@@ -102,6 +102,7 @@ enum eObjectMode BKE_workspace_object_mode_get(const struct WorkSpace *workspace
#ifdef USE_WORKSPACE_MODE
void BKE_workspace_object_mode_set(struct WorkSpace *workspace, const enum eObjectMode mode) SETTER_ATTRS;
#endif
struct Base *BKE_workspace_active_base_get(const struct WorkSpace *workspace);
struct ListBase *BKE_workspace_transform_orientations_get(struct WorkSpace *workspace) GETTER_ATTRS;
struct ViewLayer *BKE_workspace_view_layer_get(const struct WorkSpace *workspace) GETTER_ATTRS;
void BKE_workspace_view_layer_set(struct WorkSpace *workspace, struct ViewLayer *layer) SETTER_ATTRS;

View File

@@ -388,14 +388,23 @@ void BKE_workspace_active_screen_set(WorkSpaceInstanceHook *hook, WorkSpace *wor
#ifdef USE_WORKSPACE_MODE
eObjectMode BKE_workspace_object_mode_get(const WorkSpace *workspace)
{
return workspace->object_mode;
Base *active_base = BKE_workspace_active_base_get(workspace);
return active_base ? active_base->object->mode : OB_MODE_OBJECT;
}
void BKE_workspace_object_mode_set(WorkSpace *workspace, const eObjectMode mode)
{
workspace->object_mode = mode;
Base *active_base = BKE_workspace_active_base_get(workspace);
if (active_base) {
active_base->object->mode = mode;
}
}
#endif
Base *BKE_workspace_active_base_get(const WorkSpace *workspace)
{
return workspace->view_layer->basact;
}
ListBase *BKE_workspace_transform_orientations_get(WorkSpace *workspace)
{
return &workspace->transform_orientations;

View File

@@ -88,7 +88,7 @@ typedef struct WorkSpace {
/* Custom transform orientations */
ListBase transform_orientations DNA_PRIVATE_WORKSPACE;
int object_mode DNA_PRIVATE_WORKSPACE; /* enum eObjectMode */
int pad;
int flags DNA_PRIVATE_WORKSPACE; /* enum eWorkSpaceFlags */
/* should be: '#ifdef USE_WORKSPACE_TOOL'. */