Changeset View
Changeset View
Standalone View
Standalone View
source/blender/editors/space_buttons/space_buttons.c
| Show All 38 Lines | |||||
| #include "BKE_context.h" | #include "BKE_context.h" | ||||
| #include "BKE_screen.h" | #include "BKE_screen.h" | ||||
| #include "ED_space_api.h" | #include "ED_space_api.h" | ||||
| #include "ED_screen.h" | #include "ED_screen.h" | ||||
| #include "WM_api.h" | #include "WM_api.h" | ||||
| #include "WM_types.h" | #include "WM_types.h" | ||||
| #include "WM_message.h" | |||||
| #include "RNA_access.h" | #include "RNA_access.h" | ||||
| #include "buttons_intern.h" /* own include */ | #include "buttons_intern.h" /* own include */ | ||||
| /* ******************** default callbacks for buttons space ***************** */ | /* ******************** default callbacks for buttons space ***************** */ | ||||
| static SpaceLink *buttons_new(const bContext *UNUSED(C)) | static SpaceLink *buttons_new(const bContext *UNUSED(C)) | ||||
| ▲ Show 20 Lines • Show All 75 Lines • ▼ Show 20 Lines | static void buttons_main_region_init(wmWindowManager *wm, ARegion *ar) | ||||
| wmKeyMap *keymap; | wmKeyMap *keymap; | ||||
| ED_region_panels_init(wm, ar); | ED_region_panels_init(wm, ar); | ||||
| keymap = WM_keymap_find(wm->defaultconf, "Property Editor", SPACE_BUTS, 0); | keymap = WM_keymap_find(wm->defaultconf, "Property Editor", SPACE_BUTS, 0); | ||||
| WM_event_add_keymap_handler(&ar->handlers, keymap); | WM_event_add_keymap_handler(&ar->handlers, keymap); | ||||
| } | } | ||||
| static void buttons_message_bus_init(const bContext *C, ARegion *ar, SpaceButs *sbuts) | |||||
| { | |||||
| struct wmMsgBus *mbus = CTX_wm_message_bus(C); | |||||
| bScreen *sc = CTX_wm_screen(C); | |||||
| PointerRNA ptr; | |||||
| RNA_pointer_create(&sc->id, &RNA_SpaceProperties, sbuts, &ptr); | |||||
| extern PropertyRNA rna_SpaceProperties_context; | |||||
| WM_msg_subscribe_rna( | |||||
| mbus, &ptr, &rna_SpaceProperties_context, | |||||
| &(const wmMsgSubscribeValue){ | |||||
| .owner = ar, | |||||
| .user_data = ar, | |||||
| .notify = ED_region_do_msg_notify_tag_redraw, | |||||
| }); | |||||
| } | |||||
| static void buttons_main_region_draw(const bContext *C, ARegion *ar) | static void buttons_main_region_draw(const bContext *C, ARegion *ar) | ||||
| { | { | ||||
| /* draw entirely, view changes should be handled here */ | /* draw entirely, view changes should be handled here */ | ||||
| SpaceButs *sbuts = CTX_wm_space_buts(C); | SpaceButs *sbuts = CTX_wm_space_buts(C); | ||||
| const bool vertical = (sbuts->align == BUT_VERTICAL); | const bool vertical = (sbuts->align == BUT_VERTICAL); | ||||
| /* TODO, register on init once instead of redraw? */ | |||||
| buttons_message_bus_init(C, ar, sbuts); | |||||
| buttons_context_compute(C, sbuts); | buttons_context_compute(C, sbuts); | ||||
| if (sbuts->mainb == BCONTEXT_SCENE) | if (sbuts->mainb == BCONTEXT_SCENE) | ||||
| ED_region_panels(C, ar, "scene", sbuts->mainb, vertical); | ED_region_panels(C, ar, "scene", sbuts->mainb, vertical); | ||||
| else if (sbuts->mainb == BCONTEXT_RENDER) | else if (sbuts->mainb == BCONTEXT_RENDER) | ||||
| ED_region_panels(C, ar, "render", sbuts->mainb, vertical); | ED_region_panels(C, ar, "render", sbuts->mainb, vertical); | ||||
| else if (sbuts->mainb == BCONTEXT_VIEW_LAYER) | else if (sbuts->mainb == BCONTEXT_VIEW_LAYER) | ||||
| ED_region_panels(C, ar, "view_layer", sbuts->mainb, vertical); | ED_region_panels(C, ar, "view_layer", sbuts->mainb, vertical); | ||||
| ▲ Show 20 Lines • Show All 358 Lines • Show Last 20 Lines | |||||