diff options
Diffstat (limited to 'source/blender/blenkernel/BKE_screen.h')
-rw-r--r-- | source/blender/blenkernel/BKE_screen.h | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/source/blender/blenkernel/BKE_screen.h b/source/blender/blenkernel/BKE_screen.h index df904d3e08a..129093f6078 100644 --- a/source/blender/blenkernel/BKE_screen.h +++ b/source/blender/blenkernel/BKE_screen.h @@ -31,7 +31,70 @@ #ifndef BKE_SCREEN_H #define BKE_SCREEN_H +struct SpaceType; +struct ScrArea; +struct bScreen; +struct ARegion; +struct wmNotifier; +struct wmWindowManager; +struct ListBase; + +/* spacetype has everything stored to get an editor working, it gets initialized via +spacetypes_init() in editors/area/spacetypes.c */ +/* an editor in Blender is a combined ScrArea + SpaceType + SpaceData */ + +typedef struct SpaceType { + struct SpaceType *next, *prev; + + char name[32]; /* for menus */ + int spaceid; /* unique space identifier */ + int iconid; /* icon lookup for menus */ + + /* calls init too */ + struct SpaceLink *(*new)(void); + /* not free spacelink itself */ + void (*free)(struct SpaceLink *); + + /* init is to cope with internal contextual changes, adds handlers, + * sets screarea regions */ + void (*init)(struct wmWindowManager *, struct ScrArea *); + /* refresh is for external bContext changes */ + void (*refresh)(struct bContext *, struct ScrArea *); + + /* after a spacedata copy, an init should result in exact same situation */ + struct SpaceLink *(*duplicate)(struct SpaceLink *); + + /* register operator types on startup */ + void (*operatortypes)(void); + /* add default items to keymap */ + void (*keymap)(struct wmWindowManager *); + + /* read and write... */ + +} SpaceType; + +/* region type gets allocated and freed in spacetype init/free callback */ +/* data storage for regions is in space struct (also width/height of regions!) */ +typedef struct ARegionType { + + void (*init)(const struct bContext *, struct ARegion *); /* add handlers, stuff you only do once or on area/region changes */ + void (*refresh)(const struct bContext *, struct ARegion *); /* refresh to match contextual changes */ + void (*draw)(const struct bContext *, struct ARegion *); /* draw entirely, windowsize changes should be handled here */ + + void (*listener)(struct ARegion *, struct wmNotifier *); + void (*free)(struct ARegion *); +} ARegionType; + + +void BKE_screen_area_free(struct ScrArea *sa); +void BKE_area_region_free(struct ARegion *ar); void free_screen(struct bScreen *sc); +struct SpaceType *BKE_spacetype_from_id(int spaceid); +const struct ListBase *BKE_spacetypes_list(void); +void BKE_spacetype_register(struct SpaceType *st); +void BKE_spacedata_freelist(ListBase *lb); +void BKE_spacedata_copylist(ListBase *lb1, ListBase *lb2); + #endif |