Changeset View
Changeset View
Standalone View
Standalone View
source/blender/editors/screen/workspace_edit.c
| Show First 20 Lines • Show All 65 Lines • ▼ Show 20 Lines | |||||
| /** \name Workspace API | /** \name Workspace API | ||||
| * | * | ||||
| * \brief API for managing workspaces and their data. | * \brief API for managing workspaces and their data. | ||||
| * \{ */ | * \{ */ | ||||
| WorkSpace *ED_workspace_add( | WorkSpace *ED_workspace_add( | ||||
| Main *bmain, const char *name, SceneLayer *act_render_layer, ViewRender *view_render) | Main *bmain, const char *name, ViewLayer *act_view_layer, ViewRender *view_render) | ||||
| { | { | ||||
| WorkSpace *workspace = BKE_workspace_add(bmain, name); | WorkSpace *workspace = BKE_workspace_add(bmain, name); | ||||
| #ifdef USE_WORKSPACE_MODE | #ifdef USE_WORKSPACE_MODE | ||||
| BKE_workspace_object_mode_set(workspace, OB_MODE_OBJECT); | BKE_workspace_object_mode_set(workspace, OB_MODE_OBJECT); | ||||
| #endif | #endif | ||||
| BKE_workspace_render_layer_set(workspace, act_render_layer); | BKE_workspace_view_layer_set(workspace, act_view_layer); | ||||
| BKE_viewrender_copy(&workspace->view_render, view_render); | BKE_viewrender_copy(&workspace->view_render, view_render); | ||||
| return workspace; | return workspace; | ||||
| } | } | ||||
| #ifdef USE_WORKSPACE_MODE | #ifdef USE_WORKSPACE_MODE | ||||
| /** | /** | ||||
| * Changes the object mode (if needed) to the one set in \a workspace_new. | * Changes the object mode (if needed) to the one set in \a workspace_new. | ||||
| * Object mode is still stored on object level. In future it should all be workspace level instead. | * Object mode is still stored on object level. In future it should all be workspace level instead. | ||||
| */ | */ | ||||
| static void workspace_change_update_mode( | static void workspace_change_update_mode( | ||||
| const WorkSpace *workspace_old, const WorkSpace *workspace_new, | const WorkSpace *workspace_old, const WorkSpace *workspace_new, | ||||
| bContext *C, Object *ob_act, ReportList *reports) | bContext *C, Object *ob_act, ReportList *reports) | ||||
| { | { | ||||
| eObjectMode mode_old = BKE_workspace_object_mode_get(workspace_old); | eObjectMode mode_old = BKE_workspace_object_mode_get(workspace_old); | ||||
| eObjectMode mode_new = BKE_workspace_object_mode_get(workspace_new); | eObjectMode mode_new = BKE_workspace_object_mode_get(workspace_new); | ||||
| if (mode_old != mode_new) { | if (mode_old != mode_new) { | ||||
| ED_object_mode_compat_set(C, ob_act, mode_new, reports); | ED_object_mode_compat_set(C, ob_act, mode_new, reports); | ||||
| ED_object_toggle_modes(C, mode_new); | ED_object_toggle_modes(C, mode_new); | ||||
| } | } | ||||
| } | } | ||||
| #endif | #endif | ||||
| static void workspace_change_update_render_layer( | static void workspace_change_update_view_layer( | ||||
| WorkSpace *workspace_new, const WorkSpace *workspace_old) | WorkSpace *workspace_new, const WorkSpace *workspace_old) | ||||
| { | { | ||||
| if (!BKE_workspace_render_layer_get(workspace_new)) { | if (!BKE_workspace_view_layer_get(workspace_new)) { | ||||
| BKE_workspace_render_layer_set(workspace_new, BKE_workspace_render_layer_get(workspace_old)); | BKE_workspace_view_layer_set(workspace_new, BKE_workspace_view_layer_get(workspace_old)); | ||||
| } | } | ||||
| } | } | ||||
| static void workspace_change_update( | static void workspace_change_update( | ||||
| WorkSpace *workspace_new, const WorkSpace *workspace_old, | WorkSpace *workspace_new, const WorkSpace *workspace_old, | ||||
| bContext *C, wmWindowManager *wm) | bContext *C, wmWindowManager *wm) | ||||
| { | { | ||||
| /* needs to be done before changing mode! (to ensure right context) */ | /* needs to be done before changing mode! (to ensure right context) */ | ||||
| workspace_change_update_render_layer(workspace_new, workspace_old); | workspace_change_update_view_layer(workspace_new, workspace_old); | ||||
| #ifdef USE_WORKSPACE_MODE | #ifdef USE_WORKSPACE_MODE | ||||
| workspace_change_update_mode(workspace_old, workspace_new, C, CTX_data_active_object(C), &wm->reports); | workspace_change_update_mode(workspace_old, workspace_new, C, CTX_data_active_object(C), &wm->reports); | ||||
| #else | #else | ||||
| UNUSED_VARS(C, wm); | UNUSED_VARS(C, wm); | ||||
| #endif | #endif | ||||
| } | } | ||||
| static bool workspace_change_find_new_layout_cb(const WorkSpaceLayout *layout, void *UNUSED(arg)) | static bool workspace_change_find_new_layout_cb(const WorkSpaceLayout *layout, void *UNUSED(arg)) | ||||
| ▲ Show 20 Lines • Show All 65 Lines • ▼ Show 20 Lines | bool ED_workspace_change( | ||||
| if (screen_new) { | if (screen_new) { | ||||
| WM_window_set_active_layout(win, workspace_new, layout_new); | WM_window_set_active_layout(win, workspace_new, layout_new); | ||||
| WM_window_set_active_workspace(win, workspace_new); | WM_window_set_active_workspace(win, workspace_new); | ||||
| /* update screen *after* changing workspace - which also causes the actual screen change */ | /* update screen *after* changing workspace - which also causes the actual screen change */ | ||||
| screen_changed_update(C, win, screen_new); | screen_changed_update(C, win, screen_new); | ||||
| workspace_change_update(workspace_new, workspace_old, C, wm); | workspace_change_update(workspace_new, workspace_old, C, wm); | ||||
| BLI_assert(BKE_workspace_render_layer_get(workspace_new) != NULL); | BLI_assert(BKE_workspace_view_layer_get(workspace_new) != NULL); | ||||
| BLI_assert(CTX_wm_workspace(C) == workspace_new); | BLI_assert(CTX_wm_workspace(C) == workspace_new); | ||||
| return true; | return true; | ||||
| } | } | ||||
| return false; | return false; | ||||
| } | } | ||||
| /** | /** | ||||
| * Duplicate a workspace including its layouts. Does not activate the workspace, but | * Duplicate a workspace including its layouts. Does not activate the workspace, but | ||||
| * it stores the screen-layout to be activated (BKE_workspace_temp_layout_store) | * it stores the screen-layout to be activated (BKE_workspace_temp_layout_store) | ||||
| */ | */ | ||||
| WorkSpace *ED_workspace_duplicate( | WorkSpace *ED_workspace_duplicate( | ||||
| WorkSpace *workspace_old, Main *bmain, wmWindow *win) | WorkSpace *workspace_old, Main *bmain, wmWindow *win) | ||||
| { | { | ||||
| WorkSpaceLayout *layout_active_old = BKE_workspace_active_layout_get(win->workspace_hook); | WorkSpaceLayout *layout_active_old = BKE_workspace_active_layout_get(win->workspace_hook); | ||||
| ListBase *layouts_old = BKE_workspace_layouts_get(workspace_old); | ListBase *layouts_old = BKE_workspace_layouts_get(workspace_old); | ||||
| WorkSpace *workspace_new = ED_workspace_add( | WorkSpace *workspace_new = ED_workspace_add( | ||||
| bmain, workspace_old->id.name + 2, | bmain, workspace_old->id.name + 2, | ||||
| BKE_workspace_render_layer_get(workspace_old), | BKE_workspace_view_layer_get(workspace_old), | ||||
| &workspace_old->view_render); | &workspace_old->view_render); | ||||
| ListBase *transform_orientations_old = BKE_workspace_transform_orientations_get(workspace_old); | ListBase *transform_orientations_old = BKE_workspace_transform_orientations_get(workspace_old); | ||||
| ListBase *transform_orientations_new = BKE_workspace_transform_orientations_get(workspace_new); | ListBase *transform_orientations_new = BKE_workspace_transform_orientations_get(workspace_new); | ||||
| #ifdef USE_WORKSPACE_MODE | #ifdef USE_WORKSPACE_MODE | ||||
| BKE_workspace_object_mode_set(workspace_new, BKE_workspace_object_mode_get(workspace_old)); | BKE_workspace_object_mode_set(workspace_new, BKE_workspace_object_mode_get(workspace_old)); | ||||
| #endif | #endif | ||||
| BLI_duplicatelist(transform_orientations_new, transform_orientations_old); | BLI_duplicatelist(transform_orientations_new, transform_orientations_old); | ||||
| Show All 37 Lines | |||||
| */ | */ | ||||
| void ED_workspace_scene_data_sync( | void ED_workspace_scene_data_sync( | ||||
| WorkSpaceInstanceHook *hook, Scene *scene) | WorkSpaceInstanceHook *hook, Scene *scene) | ||||
| { | { | ||||
| bScreen *screen = BKE_workspace_active_screen_get(hook); | bScreen *screen = BKE_workspace_active_screen_get(hook); | ||||
| BKE_screen_view3d_scene_sync(screen, scene); | BKE_screen_view3d_scene_sync(screen, scene); | ||||
| } | } | ||||
| void ED_workspace_render_layer_unset( | void ED_workspace_view_layer_unset( | ||||
| const Main *bmain, const SceneLayer *layer_unset, SceneLayer *layer_new) | const Main *bmain, const ViewLayer *layer_unset, ViewLayer *layer_new) | ||||
| { | { | ||||
| for (WorkSpace *workspace = bmain->workspaces.first; workspace; workspace = workspace->id.next) { | for (WorkSpace *workspace = bmain->workspaces.first; workspace; workspace = workspace->id.next) { | ||||
| if (BKE_workspace_render_layer_get(workspace) == layer_unset) { | if (BKE_workspace_view_layer_get(workspace) == layer_unset) { | ||||
| BKE_workspace_render_layer_set(workspace, layer_new); | BKE_workspace_view_layer_set(workspace, layer_new); | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| /** \} Workspace API */ | /** \} Workspace API */ | ||||
| /** \name Workspace Operators | /** \name Workspace Operators | ||||
| ▲ Show 20 Lines • Show All 154 Lines • Show Last 20 Lines | |||||