Cleanup: Get rid of context in editor 'new' callback
authorJulian Eisel <eiseljulian@gmail.com>
Sat, 21 Apr 2018 17:30:56 +0000 (19:30 +0200)
committerJulian Eisel <eiseljulian@gmail.com>
Sat, 21 Apr 2018 17:47:27 +0000 (19:47 +0200)
Requiring context means we can't easily create new editors to replace deprecated
ones in versioning code.
Think it's reasonable to give editors access to scene and area data for their
initial setup though. They mostly need it for setting "the view", as in,
scrolling values.

Also did minor cleanup in top-bar creation function.

21 files changed:
source/blender/blenkernel/BKE_screen.h
source/blender/editors/screen/area.c
source/blender/editors/screen/screen_edit.c
source/blender/editors/space_action/space_action.c
source/blender/editors/space_api/spacetypes.c
source/blender/editors/space_buttons/space_buttons.c
source/blender/editors/space_clip/space_clip.c
source/blender/editors/space_console/space_console.c
source/blender/editors/space_file/space_file.c
source/blender/editors/space_graph/space_graph.c
source/blender/editors/space_image/space_image.c
source/blender/editors/space_info/space_info.c
source/blender/editors/space_nla/space_nla.c
source/blender/editors/space_node/space_node.c
source/blender/editors/space_outliner/space_outliner.c
source/blender/editors/space_script/space_script.c
source/blender/editors/space_sequencer/space_sequencer.c
source/blender/editors/space_text/space_text.c
source/blender/editors/space_topbar/space_topbar.c
source/blender/editors/space_userpref/space_userpref.c
source/blender/editors/space_view3d/space_view3d.c

index 2a25120ba8d580df8b6607f39dc3c4df5d5233a8..2736833a5ca59b4e875c73b6ce4f1a0758733ba6 100644 (file)
@@ -77,8 +77,9 @@ typedef struct SpaceType {
        int spaceid;                                /* unique space identifier */
        int iconid;                                 /* icon lookup for menus */
        
-       /* initial allocation, after this WM will call init() too */
-       struct SpaceLink    *(*new)(const struct bContext *C);
+       /* Initial allocation, after this WM will call init() too. Some editors need
+        * area and scene data (e.g. frame range) to set their initial scrolling. */
+       struct SpaceLink    *(*new)(const struct ScrArea *, const struct Scene *);
        /* not free spacelink itself */
        void (*free)(struct SpaceLink *);
        
index e4c48a835650adef3c38c932bd6fb739a25b4764..2d058c7c0bfa2ca841eac5b689a2701eb01faf59 100644 (file)
@@ -1838,7 +1838,7 @@ void ED_area_newspace(bContext *C, ScrArea *sa, int type, const bool skip_ar_exi
                else {
                        /* new space */
                        if (st) {
-                               sl = st->new(C);
+                               sl = st->new(sa, CTX_data_scene(C));
                                BLI_addhead(&sa->spacedata, sl);
                                
                                /* swap regions */
index 6a27964165dd7d0dd247b5f3219f96186bba91c3..00bff69cd02c5f13400dfac7a912e741c4388b39 100644 (file)
@@ -1117,27 +1117,42 @@ int ED_screen_area_active(const bContext *C)
        return 0;
 }
 
+/**
+ * Add an area and geometry (screen-edges and -vertices) for it to \a area_map,
+ * with coordinates/dimensions matching \a rect.
+ */
+static ScrArea *screen_area_create_with_geometry(
+        ScrAreaMap *area_map, const rcti *rect,
+        short headertype, short spacetype)
+{
+       ScrVert *bottom_left  = screen_addvert_ex(area_map, rect->xmin, rect->ymin);
+       ScrVert *top_left     = screen_addvert_ex(area_map, rect->xmin, rect->ymax);
+       ScrVert *top_right    = screen_addvert_ex(area_map, rect->xmax, rect->ymax);
+       ScrVert *bottom_right = screen_addvert_ex(area_map, rect->xmax, rect->ymin);
+
+       screen_addedge_ex(area_map, bottom_left, top_left);
+       screen_addedge_ex(area_map, top_left, top_right);
+       screen_addedge_ex(area_map, top_right, bottom_right);
+       screen_addedge_ex(area_map, bottom_right, bottom_left);
+
+       return screen_addarea_ex(area_map, bottom_left, top_left, top_right, bottom_right, headertype, spacetype);
+}
+
 void ED_screen_global_topbar_area_create(wmWindow *win, const bScreen *screen)
 {
        if (screen->temp == 0) {
-               SpaceType *st = BKE_spacetype_from_id(SPACE_TOPBAR);
-               SpaceLink *sl = st->new(NULL);
-               ScrArea *sa;
                const short size_y = 2.25 * HEADERY;
-               const int minx = 0, maxx = WM_window_pixels_x(win) - 1;
-               const int maxy = WM_window_pixels_y(win) - 1, miny = maxy - size_y;
-
-               ScrVert *bottom_left  = screen_addvert_ex(&win->global_areas, minx, miny);
-               ScrVert *top_left     = screen_addvert_ex(&win->global_areas, minx, maxy);
-               ScrVert *top_right    = screen_addvert_ex(&win->global_areas, maxx, maxy);
-               ScrVert *bottom_right = screen_addvert_ex(&win->global_areas, maxx, miny);
-               screen_addedge_ex(&win->global_areas, bottom_left, top_left);
-               screen_addedge_ex(&win->global_areas, top_left, top_right);
-               screen_addedge_ex(&win->global_areas, top_right, bottom_right);
-               screen_addedge_ex(&win->global_areas, bottom_right, bottom_left);
-
-               sa = screen_addarea_ex(&win->global_areas, bottom_left, top_left, top_right, bottom_right,
-                                      HEADERTOP, SPACE_TOPBAR);
+               SpaceType *st;
+               SpaceLink *sl;
+               ScrArea *sa;
+               rcti rect;
+
+               BLI_rcti_init(&rect, 0, WM_window_pixels_x(win) - 1, 0, WM_window_pixels_y(win) - 1);
+               rect.ymin = rect.ymax - size_y;
+
+               sa = screen_area_create_with_geometry(&win->global_areas, &rect, HEADERTOP, SPACE_TOPBAR);
+               st = BKE_spacetype_from_id(SPACE_TOPBAR);
+               sl = st->new(sa, WM_window_get_active_scene(win));
                sa->regionbase = sl->regionbase;
 
                /* Data specific to global areas. */
index b68300e0d52d9587b8ff4c0aa7b9d892758ee7ae..f749cce69e3e4f8e667c5916ac59d7d95eb8f9c3 100644 (file)
@@ -92,10 +92,8 @@ ARegion *action_has_buttons_region(ScrArea *sa)
 
 /* ******************** default callbacks for action space ***************** */
 
-static SpaceLink *action_new(const bContext *C)
+static SpaceLink *action_new(const ScrArea *sa, const Scene *scene)
 {
-       Scene *scene = CTX_data_scene(C);
-       ScrArea *sa = CTX_wm_area(C);
        SpaceAction *saction;
        ARegion *ar;
        
index 6c53aa623781d0ed5d9b4a7b2d8c6370787e6ad4..12f16f1fe42753fb42e47af5f8ac441920068153 100644 (file)
@@ -280,7 +280,7 @@ void ED_region_draw_cb_draw(const bContext *C, ARegion *ar, int type)
 void ED_spacetype_xxx(void);
 
 /* allocate and init some vars */
-static SpaceLink *xxx_new(const bContext *UNUSED(C))
+static SpaceLink *xxx_new(const ScrArea *UNUSED(sa), const Scene *UNUSED(scene))
 {
        return NULL;
 }
index 179780bf5176a9c68502c1fe4281235b69f33076..d3fab82f7ff7800872e6ef30d443f7096da3b442 100644 (file)
@@ -52,7 +52,7 @@
 
 /* ******************** default callbacks for buttons space ***************** */
 
-static SpaceLink *buttons_new(const bContext *UNUSED(C))
+static SpaceLink *buttons_new(const ScrArea *UNUSED(area), const Scene *UNUSED(scene))
 {
        ARegion *ar;
        SpaceButs *sbuts;
index ba9684411b3415efc3ffa2e33a17c3549637ade2..f043280e43cd1aa57af000f934a8c8bf1e2bec11 100644 (file)
 
 #include "clip_intern.h"  /* own include */
 
-static void init_preview_region(const bContext *C, ARegion *ar)
+static void init_preview_region(const Scene *scene, const ScrArea *sa, const SpaceClip *sc, ARegion *ar)
 {
-       Scene *scene = CTX_data_scene(C);
-       ScrArea *sa = CTX_wm_area(C);
-       SpaceClip *sc = CTX_wm_space_clip(C);
-
        ar->regiontype = RGN_TYPE_PREVIEW;
        ar->alignment = RGN_ALIGN_TOP;
        ar->flag |= RGN_FLAG_HIDDEN;
@@ -138,15 +134,17 @@ static void init_preview_region(const bContext *C, ARegion *ar)
 
 static void reinit_preview_region(const bContext *C, ARegion *ar)
 {
+       Scene *scene = CTX_data_scene(C);
+       ScrArea *sa = CTX_wm_area(C);
        SpaceClip *sc = CTX_wm_space_clip(C);
 
        if (sc->view == SC_VIEW_DOPESHEET) {
                if ((ar->v2d.flag & V2D_VIEWSYNC_AREA_VERTICAL) == 0)
-                       init_preview_region(C, ar);
+                       init_preview_region(scene, sa, sc, ar);
        }
        else {
                if (ar->v2d.flag & V2D_VIEWSYNC_AREA_VERTICAL)
-                       init_preview_region(C, ar);
+                       init_preview_region(scene, sa, sc, ar);
        }
 }
 
@@ -168,7 +166,7 @@ static ARegion *ED_clip_has_preview_region(const bContext *C, ScrArea *sa)
        arnew = MEM_callocN(sizeof(ARegion), "clip preview region");
 
        BLI_insertlinkbefore(&sa->regionbase, ar, arnew);
-       init_preview_region(C, arnew);
+       init_preview_region(CTX_data_scene(C), sa, CTX_wm_space_clip(C), arnew);
 
        return arnew;
 }
@@ -228,7 +226,7 @@ static void clip_scopes_check_gpencil_change(ScrArea *sa)
 
 /* ******************** default callbacks for clip space ***************** */
 
-static SpaceLink *clip_new(const bContext *C)
+static SpaceLink *clip_new(const ScrArea *sa, const Scene *scene)
 {
        ARegion *ar;
        SpaceClip *sc;
@@ -286,7 +284,7 @@ static SpaceLink *clip_new(const bContext *C)
        ar = MEM_callocN(sizeof(ARegion), "preview for clip");
 
        BLI_addtail(&sc->regionbase, ar);
-       init_preview_region(C, ar);
+       init_preview_region(scene, sa, sc, ar);
 
        /* main region */
        ar = MEM_callocN(sizeof(ARegion), "main region for clip");
index 9a2f4b5d4312d61ddcf2399b9c0609f63d2b135e..c49df387707286d5f52523867a3a12df8bd3552a 100644 (file)
@@ -52,7 +52,7 @@
 
 /* ******************** default callbacks for console space ***************** */
 
-static SpaceLink *console_new(const bContext *UNUSED(C))
+static SpaceLink *console_new(const ScrArea *UNUSED(area), const Scene *UNUSED(scene))
 {
        ARegion *ar;
        SpaceConsole *sconsole;
index 61ea4961f3e8a7c4416d9fb9b3dcef95d32cddb9..40707d5add770f7e31e1446092ad2d0c82522c5e 100644 (file)
@@ -68,7 +68,7 @@
 
 /* ******************** default callbacks for file space ***************** */
 
-static SpaceLink *file_new(const bContext *UNUSED(C))
+static SpaceLink *file_new(const ScrArea *UNUSED(area), const Scene *UNUSED(scene))
 {
        ARegion *ar;
        SpaceFile *sfile;
index b09de2470a233dc1610f67d3ef3c741bea13d90e..381cb1d9e6e73a36c2b97e211e3d51e7a83dac22 100644 (file)
@@ -95,9 +95,8 @@ ARegion *graph_has_buttons_region(ScrArea *sa)
 
 /* ******************** default callbacks for ipo space ***************** */
 
-static SpaceLink *graph_new(const bContext *C)
+static SpaceLink *graph_new(const ScrArea *UNUSED(sa), const Scene *scene)
 {
-       Scene *scene = CTX_data_scene(C);
        ARegion *ar;
        SpaceIpo *sipo;
        
index 38a850568fd0802b2946c435e35c71d2b4a9fc44..bfbf51487ad6f2a0e1238822e74e62d2d9e23fd0 100644 (file)
@@ -162,7 +162,7 @@ ARegion *image_has_tools_region(ScrArea *sa)
 
 /* ******************** default callbacks for image space ***************** */
 
-static SpaceLink *image_new(const bContext *UNUSED(C))
+static SpaceLink *image_new(const ScrArea *UNUSED(area), const Scene *UNUSED(scene))
 {
        ARegion *ar;
        SpaceImage *simage;
index b13152883c356ec1b77aeda83dfa38b1c17700ab..96a0a1ed3ec9859500f9ee950876b21f69fb31c4 100644 (file)
@@ -63,7 +63,7 @@
 
 /* ******************** default callbacks for info space ***************** */
 
-static SpaceLink *info_new(const bContext *UNUSED(C))
+static SpaceLink *info_new(const ScrArea *UNUSED(area), const Scene *UNUSED(scene))
 {
        ARegion *ar;
        SpaceInfo *sinfo;
index bf831f16108ae369fa98fa036ac278d5828e2559..616d85f7d9d7f36131f2bf5abb88904d9375111c 100644 (file)
@@ -94,10 +94,8 @@ ARegion *nla_has_buttons_region(ScrArea *sa)
 
 /* ******************** default callbacks for nla space ***************** */
 
-static SpaceLink *nla_new(const bContext *C)
+static SpaceLink *nla_new(const ScrArea *sa, const Scene *scene)
 {
-       Scene *scene = CTX_data_scene(C);
-       ScrArea *sa = CTX_wm_area(C);
        ARegion *ar;
        SpaceNla *snla;
        
index a6a178b570d9dcb9151fd7fa4e9586f8fa446117..a5f96ee04d6d8ef97624a197d3b1030f0f22b444 100644 (file)
@@ -291,7 +291,7 @@ ARegion *node_has_tools_region(ScrArea *sa)
 
 /* ******************** default callbacks for node space ***************** */
 
-static SpaceLink *node_new(const bContext *UNUSED(C))
+static SpaceLink *node_new(const ScrArea *UNUSED(area), const Scene *UNUSED(scene))
 {
        ARegion *ar;
        SpaceNode *snode;
index 1529e6143c364d18ee4a0bdf2738cb620a30b15c..a0bdb53d39809203045133094ba14e26bb8f6266 100644 (file)
@@ -479,7 +479,7 @@ static void outliner_header_region_listener(
 
 /* ******************** default callbacks for outliner space ***************** */
 
-static SpaceLink *outliner_new(const bContext *UNUSED(C))
+static SpaceLink *outliner_new(const ScrArea *UNUSED(area), const Scene *UNUSED(scene))
 {
        ARegion *ar;
        SpaceOops *soutliner;
index fb8de02d3bda06d5e9bc9a114da955a2bc021b35..767db745c33a4de0a8448184a47a2e51f0781326 100644 (file)
@@ -62,7 +62,7 @@
 
 /* ******************** default callbacks for script space ***************** */
 
-static SpaceLink *script_new(const bContext *UNUSED(C))
+static SpaceLink *script_new(const ScrArea *UNUSED(area), const Scene *UNUSED(scene))
 {
        ARegion *ar;
        SpaceScript *sscript;
index a8344a1fbd03a41aa6d0f2fc1034c176846236bb..4e78e056093cd0eacc688bcea0d380ab9d73ce46 100644 (file)
@@ -113,9 +113,8 @@ static ARegion *sequencer_find_region(ScrArea *sa, short type)
 
 /* ******************** default callbacks for sequencer space ***************** */
 
-static SpaceLink *sequencer_new(const bContext *C)
+static SpaceLink *sequencer_new(const ScrArea *UNUSED(sa), const Scene *scene)
 {
-       Scene *scene = CTX_data_scene(C);
        ARegion *ar;
        SpaceSeq *sseq;
        
index 539fe1c53bd1461c4e0b9f7f4b228d553f1780b9..c0324908b6030b9425d7784a16d836d7d768c736 100644 (file)
@@ -62,7 +62,7 @@
 
 /* ******************** default callbacks for text space ***************** */
 
-static SpaceLink *text_new(const bContext *UNUSED(C))
+static SpaceLink *text_new(const ScrArea *UNUSED(area), const Scene *UNUSED(scene))
 {
        ARegion *ar;
        SpaceText *stext;
index 35858a927fe931656d603cbd6ecbede1ee2e0515..0a6ec0e7aa0c73a53ba2bdc5238ca86075762609 100644 (file)
@@ -56,7 +56,7 @@
 
 /* ******************** default callbacks for topbar space ***************** */
 
-static SpaceLink *topbar_new(const bContext *UNUSED(C))
+static SpaceLink *topbar_new(const ScrArea *UNUSED(area), const Scene *UNUSED(scene))
 {
        ARegion *ar;
        SpaceTopBar *stopbar;
index f640fe63f938672eec06541a62a6ce9cc5b0002c..8e569c3b16e39f8609e6a1c0bd6364afe139f1e6 100644 (file)
@@ -51,7 +51,7 @@
 
 /* ******************** default callbacks for userpref space ***************** */
 
-static SpaceLink *userpref_new(const bContext *UNUSED(C))
+static SpaceLink *userpref_new(const ScrArea *UNUSED(area), const Scene *UNUSED(scene))
 {
        ARegion *ar;
        SpaceUserPref *spref;
index 8f9bc603d2bac9ed9dd8119b3a9897a56eae004d..e8de9b80fb319997367d8120f3892969f4a3f892 100644 (file)
@@ -325,9 +325,8 @@ void ED_view3d_shade_update(Main *bmain, View3D *v3d, ScrArea *sa)
 
 /* ******************** default callbacks for view3d space ***************** */
 
-static SpaceLink *view3d_new(const bContext *C)
+static SpaceLink *view3d_new(const ScrArea *UNUSED(sa), const Scene *scene)
 {
-       Scene *scene = CTX_data_scene(C);
        ARegion *ar;
        View3D *v3d;
        RegionView3D *rv3d;