[Bf-blender-cvs] [cbaaeb8] workspaces: Deprecate Screen.scene completely
Julian Eisel
noreply at git.blender.org
Sat Dec 31 02:00:54 CET 2016
Commit: cbaaeb8d9b6c95e2a72b1cf0e5bae84959e92108
Author: Julian Eisel
Date: Sat Dec 31 01:45:59 2016 +0100
Branches: workspaces
https://developer.blender.org/rBcbaaeb8d9b6c95e2a72b1cf0e5bae84959e92108
Deprecate Screen.scene completely
Removing a custom transform orientation is a bit broken right now because we don't know which scene is visible in hidden 3D Views. Think I know how to fix this, but want to go on with other stuff first.
===================================================================
M source/blender/blenkernel/BKE_screen.h
M source/blender/blenkernel/intern/blendfile.c
M source/blender/blenkernel/intern/screen.c
M source/blender/editors/transform/transform_orientations.c
M source/blender/makesdna/DNA_screen_types.h
M source/blender/makesrna/intern/rna_space.c
M source/blender/windowmanager/WM_api.h
M source/blender/windowmanager/intern/wm_window.c
M source/blenderplayer/bad_level_call_stubs/stubs.c
===================================================================
diff --git a/source/blender/blenkernel/BKE_screen.h b/source/blender/blenkernel/BKE_screen.h
index 9b9d757..07f9edd 100644
--- a/source/blender/blenkernel/BKE_screen.h
+++ b/source/blender/blenkernel/BKE_screen.h
@@ -307,8 +307,7 @@ unsigned int BKE_screen_view3d_layer_all(const struct bScreen *sc) ATTR_WARN_UNU
void BKE_screen_view3d_sync(struct View3D *v3d, struct Scene *scene);
void BKE_screen_view3d_scene_sync(struct bScreen *sc, struct Scene *scene);
-void BKE_screen_view3d_twmode_remove(struct View3D *v3d, const int i);
-void BKE_screen_view3d_main_twmode_remove(ListBase *screen_lb, struct Scene *scene, const int i);
+void BKE_screen_view3d_twmode_remove(struct bScreen *screen, const int twmode);
void BKE_screen_gpu_fx_validate(struct GPUFXSettings *fx_settings);
bool BKE_screen_is_fullscreen_area(const struct bScreen *screen) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL();
bool BKE_screen_is_used(const struct bScreen *screen) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL();
diff --git a/source/blender/blenkernel/intern/blendfile.c b/source/blender/blenkernel/intern/blendfile.c
index d27483d..9a75702 100644
--- a/source/blender/blenkernel/intern/blendfile.c
+++ b/source/blender/blenkernel/intern/blendfile.c
@@ -317,11 +317,9 @@ static void setup_app_data(
if (wm) {
for (wmWindow *win = wm->windows.first; win; win = win->next) {
- bScreen *screen = BKE_workspace_active_screen_get(win->workspace);
-
- if (screen && screen->scene) /* zealous check... */
- if (screen->scene != curscene)
- BKE_scene_set_background(G.main, screen->scene);
+ if (win->scene && win->scene != curscene) {
+ BKE_scene_set_background(G.main, win->scene);
+ }
}
}
}
diff --git a/source/blender/blenkernel/intern/screen.c b/source/blender/blenkernel/intern/screen.c
index 77e12fb..91f0d81 100644
--- a/source/blender/blenkernel/intern/screen.c
+++ b/source/blender/blenkernel/intern/screen.c
@@ -611,31 +611,24 @@ void BKE_screen_view3d_scene_sync(bScreen *sc, Scene *scene)
}
}
-void BKE_screen_view3d_twmode_remove(View3D *v3d, const int i)
-{
- const int selected_index = (v3d->twmode - V3D_MANIP_CUSTOM);
- if (selected_index == i) {
- v3d->twmode = V3D_MANIP_GLOBAL; /* fallback to global */
- }
- else if (selected_index > i) {
- v3d->twmode--;
- }
-}
-
-void BKE_screen_view3d_main_twmode_remove(ListBase *screen_lb, Scene *scene, const int i)
+/**
+ * TODO hrmpf... stupid issue: Removing a custom transform orientation only updates View3D orientations
+ * in visible workspaces/screens. If an invisible one uses it, it keeps using the removed orientation.
+ * Need to solve that somehow... Maybe store TranformOrientation * in View3D?
+ */
+void BKE_screen_view3d_twmode_remove(bScreen *screen, const int twmode)
{
- bScreen *sc;
+ for (ScrArea *area = screen->areabase.first; area; area = area->next) {
+ for (SpaceLink *sl = area->spacedata.first; sl; sl = sl->next) {
+ if (sl->spacetype == SPACE_VIEW3D) {
+ View3D *v3d = (View3D *)sl;
+ const int selected_index = (v3d->twmode - V3D_MANIP_CUSTOM);
- for (sc = screen_lb->first; sc; sc = sc->id.next) {
- if (sc->scene == scene) {
- ScrArea *sa;
- for (sa = sc->areabase.first; sa; sa = sa->next) {
- SpaceLink *sl;
- for (sl = sa->spacedata.first; sl; sl = sl->next) {
- if (sl->spacetype == SPACE_VIEW3D) {
- View3D *v3d = (View3D *)sl;
- BKE_screen_view3d_twmode_remove(v3d, i);
- }
+ if (selected_index == twmode) {
+ v3d->twmode = V3D_MANIP_GLOBAL; /* fallback to global */
+ }
+ else if (selected_index > twmode) {
+ v3d->twmode--;
}
}
}
diff --git a/source/blender/editors/transform/transform_orientations.c b/source/blender/editors/transform/transform_orientations.c
index 1d6a392..f063689 100644
--- a/source/blender/editors/transform/transform_orientations.c
+++ b/source/blender/editors/transform/transform_orientations.c
@@ -57,6 +57,8 @@
#include "ED_armature.h"
+#include "WM_api.h"
+
#include "transform.h"
/* *********************** TransSpace ************************** */
@@ -352,7 +354,9 @@ void BIF_removeTransformOrientation(bContext *C, TransformOrientation *target)
if (i != -1) {
Main *bmain = CTX_data_main(C);
- BKE_screen_view3d_main_twmode_remove(&bmain->screen, scene, i);
+ wmWindowManager *wm = bmain->wm.first;
+
+ WM_windows_scene_twmode_remove(&wm->windows, scene, i);
BLI_freelinkN(transform_spaces, target);
}
}
diff --git a/source/blender/makesdna/DNA_screen_types.h b/source/blender/makesdna/DNA_screen_types.h
index 0adde23..29467bf 100644
--- a/source/blender/makesdna/DNA_screen_types.h
+++ b/source/blender/makesdna/DNA_screen_types.h
@@ -30,6 +30,7 @@
#ifndef __DNA_SCREEN_TYPES_H__
#define __DNA_SCREEN_TYPES_H__
+#include "DNA_defs.h"
#include "DNA_listBase.h"
#include "DNA_view2d_types.h"
#include "DNA_vec_types.h"
@@ -53,10 +54,9 @@ typedef struct bScreen {
ListBase edgebase;
ListBase areabase;
ListBase regionbase; /* screen level regions (menus), runtime only */
-
- struct Scene *scene;
- struct Scene *newscene; /* temporary when switching */
-
+
+ struct Scene *scene DNA_DEPRECATED;
+
short winid; /* winid from WM, starts with 1 TODO will have to rework this */
short redraws_flag; /* user-setting for which editors get redrawn during anim playback (used to be time->redraws) */
diff --git a/source/blender/makesrna/intern/rna_space.c b/source/blender/makesrna/intern/rna_space.c
index ec26eba..81d9f41 100644
--- a/source/blender/makesrna/intern/rna_space.c
+++ b/source/blender/makesrna/intern/rna_space.c
@@ -404,7 +404,7 @@ static void rna_Space_view2d_sync_update(Main *UNUSED(bmain), Scene *UNUSED(scen
static PointerRNA rna_CurrentOrientation_get(PointerRNA *ptr)
{
- Scene *scene = ((bScreen *)ptr->id.data)->scene;
+ Scene *scene = WM_windows_scene_get_from_screen(G.main->wm.first, ptr->id.data);
View3D *v3d = (View3D *)ptr->data;
if (v3d->twmode < V3D_MANIP_CUSTOM)
@@ -426,7 +426,7 @@ EnumPropertyItem *rna_TransformOrientation_itemf(bContext *C, PointerRNA *ptr, P
RNA_enum_items_add(&item, &totitem, transform_orientation_items);
if (ptr->type == &RNA_SpaceView3D)
- scene = ((bScreen *)ptr->id.data)->scene;
+ scene = WM_windows_scene_get_from_screen(G.main->wm.first, ptr->id.data);
else
scene = CTX_data_scene(C); /* can't use scene from ptr->id.data because that enum is also used by operators */
@@ -697,17 +697,13 @@ static void rna_RegionView3D_view_matrix_set(PointerRNA *ptr, const float *value
static int rna_SpaceView3D_viewport_shade_get(PointerRNA *ptr)
{
-#if 0
- Scene *scene = ((bScreen *)ptr->id.data)->scene;
+ Scene *scene = WM_windows_scene_get_from_screen(G.main->wm.first, ptr->id.data);
RenderEngineType *type = RE_engines_find(scene->r.engine);
-#endif
View3D *v3d = (View3D *)ptr->data;
int drawtype = v3d->drawtype;
-#if 0
if (drawtype == OB_RENDER && !(type && type->view_draw))
return OB_SOLID;
-#endif
return drawtype;
}
diff --git a/source/blender/windowmanager/WM_api.h b/source/blender/windowmanager/WM_api.h
index 809f086..834f1e2 100644
--- a/source/blender/windowmanager/WM_api.h
+++ b/source/blender/windowmanager/WM_api.h
@@ -102,6 +102,8 @@ int WM_window_pixels_y (struct wmWindow *win);
bool WM_window_is_fullscreen (struct wmWindow *win);
void WM_windows_scene_data_sync(const ListBase *win_lb, struct Scene *scene) ATTR_NONNULL();
+void WM_windows_scene_twmode_remove(const ListBase *win_lb, struct Scene *scene, const int twmode) ATTR_NONNULL();
+struct Scene *WM_windows_scene_get_from_screen(const struct wmWindowManager *wm, const struct bScreen *screen) ATTR_NONNULL() ATTR_WARN_UNUSED_RESULT;
struct Scene *WM_window_get_active_scene(const struct wmWindow *win) ATTR_NONNULL() ATTR_WARN_UNUSED_RESULT;
void WM_window_set_active_scene(struct Main *bmain, struct bContext *C, struct wmWindow *win,
diff --git a/source/blender/windowmanager/intern/wm_window.c b/source/blender/windowmanager/intern/wm_window.c
index 1d93033..89e8064 100644
--- a/source/blender/windowmanager/intern/wm_window.c
+++ b/source/blender/windowmanager/intern/wm_window.c
@@ -1749,6 +1749,26 @@ void WM_windows_scene_data_sync(const ListBase *win_lb, Scene *scene)
}
}
+void WM_windows_scene_twmode_remove(const ListBase *win_lb, Scene *scene, const int twmode)
+{
+ for (wmWindow *win = win_lb->first; win; win = win->next) {
+ if (WM_window_get_active_scene(win) == scene) {
+ BKE_screen_view3d_twmode_remove(WM_window_get_active_screen(win), twmode);
+ }
+ }
+}
+
+Scene *WM_windows_scene_get_from_screen(const wmWindowManager *wm, const bScreen *screen)
+{
+ for (wmWindow *win = wm->windows.first; win; win = win->next) {
+ if (WM_window_get_active_screen(win) == screen) {
+ return WM_window_get_active_scene(win);
+ }
+ }
+
+ return NULL;
+}
+
Scene *WM_window_get_active_scene(const wmWindow *win)
{
return win->scene;
diff --git a/source/blenderplayer/bad_level_call_stubs/stubs.c b/source/blenderplayer/bad_level_call_stubs/stubs.c
index 429cb25..8d749d7 100644
--- a/source/blenderplayer/bad_level_call_stubs/stubs.c
+++ b/source/blenderplayer/bad_level_call_stubs/stubs.c
@@ -308,6 +308,7 @@ struct MenuType *WM_menutype_find(const char *idname, bool quiet) RET_NULL
void WM_operator_stack_clear(struct wmWindowManager *wm) RET_NONE
void WM_operator_handlers_clear(wmWindowManager *wm, struct wmOperatorType *ot) RET_NONE
void WM_windows_scene_data_sync(const struct ListBase *win_lb, struct Scene *scene) RET_NONE
+struct Scene *WM_windows_scene_get_from_screen(const struct wmWindowManager *wm, const struct bScreen *screen) RET_NULL
struct bScreen *WM_window_get_active_screen(const struct wmWindow *win) RET_NULL
struct Scene *WM_window_get_active_scene(const struct wmWindow *win) RET_NULL
void WM_window_set_active_scene(struct Main *bmain, struct bContext *C, struct wmWindow *win, struct Scene *scene_new) RET_NONE
More information about the Bf-blender-cvs
mailing list