Changeset View
Changeset View
Standalone View
Standalone View
source/blender/editors/space_view3d/space_view3d.c
| Show First 20 Lines • Show All 47 Lines • ▼ Show 20 Lines | |||||
| #include "BKE_icons.h" | #include "BKE_icons.h" | ||||
| #include "BKE_lattice.h" | #include "BKE_lattice.h" | ||||
| #include "BKE_library.h" | #include "BKE_library.h" | ||||
| #include "BKE_main.h" | #include "BKE_main.h" | ||||
| #include "BKE_mesh.h" | #include "BKE_mesh.h" | ||||
| #include "BKE_object.h" | #include "BKE_object.h" | ||||
| #include "BKE_scene.h" | #include "BKE_scene.h" | ||||
| #include "BKE_screen.h" | #include "BKE_screen.h" | ||||
| #include "BKE_workspace.h" | |||||
| #include "ED_space_api.h" | #include "ED_space_api.h" | ||||
| #include "ED_screen.h" | #include "ED_screen.h" | ||||
| #include "ED_transform.h" | #include "ED_transform.h" | ||||
| #include "GPU_compositing.h" | #include "GPU_compositing.h" | ||||
| #include "GPU_framebuffer.h" | #include "GPU_framebuffer.h" | ||||
| #include "GPU_material.h" | #include "GPU_material.h" | ||||
| ▲ Show 20 Lines • Show All 732 Lines • ▼ Show 20 Lines | if (poin) { | ||||
| new->compositor = NULL; | new->compositor = NULL; | ||||
| new->viewport = NULL; | new->viewport = NULL; | ||||
| return new; | return new; | ||||
| } | } | ||||
| return NULL; | return NULL; | ||||
| } | } | ||||
| static void view3d_recalc_used_layers(ARegion *ar, wmNotifier *wmn, Scene *scene) | static void view3d_recalc_used_layers(ARegion *ar, wmNotifier *wmn, const Scene *scene) | ||||
| { | { | ||||
| wmWindow *win = wmn->wm->winactive; | wmWindow *win = wmn->wm->winactive; | ||||
| ScrArea *sa; | |||||
| unsigned int lay_used = 0; | unsigned int lay_used = 0; | ||||
| BaseLegacy *base; | BaseLegacy *base; | ||||
| if (!win) return; | if (!win) return; | ||||
| base = scene->base.first; | base = scene->base.first; | ||||
| while (base) { | while (base) { | ||||
| lay_used |= base->lay & ((1 << 20) - 1); /* ignore localview */ | lay_used |= base->lay & ((1 << 20) - 1); /* ignore localview */ | ||||
| if (lay_used == (1 << 20) - 1) | if (lay_used == (1 << 20) - 1) | ||||
| break; | break; | ||||
| base = base->next; | base = base->next; | ||||
| } | } | ||||
| for (sa = win->screen->areabase.first; sa; sa = sa->next) { | const bScreen *screen = WM_window_get_active_screen(win); | ||||
| for (ScrArea *sa = screen->areabase.first; sa; sa = sa->next) { | |||||
| if (sa->spacetype == SPACE_VIEW3D) { | if (sa->spacetype == SPACE_VIEW3D) { | ||||
| if (BLI_findindex(&sa->regionbase, ar) != -1) { | if (BLI_findindex(&sa->regionbase, ar) != -1) { | ||||
| View3D *v3d = sa->spacedata.first; | View3D *v3d = sa->spacedata.first; | ||||
| v3d->lay_used = lay_used; | v3d->lay_used = lay_used; | ||||
| break; | break; | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| static void view3d_main_region_listener(bScreen *sc, ScrArea *sa, ARegion *ar, wmNotifier *wmn) | static void view3d_main_region_listener(bScreen *UNUSED(sc), ScrArea *sa, ARegion *ar, | ||||
| wmNotifier *wmn, const Scene *scene) | |||||
| { | { | ||||
| Scene *scene = sc->scene; | |||||
| View3D *v3d = sa->spacedata.first; | View3D *v3d = sa->spacedata.first; | ||||
| RegionView3D *rv3d = ar->regiondata; | RegionView3D *rv3d = ar->regiondata; | ||||
| wmManipulatorMap *mmap = ar->manipulator_map; | wmManipulatorMap *mmap = ar->manipulator_map; | ||||
| /* context changes */ | /* context changes */ | ||||
| switch (wmn->category) { | switch (wmn->category) { | ||||
| case NC_WM: | case NC_WM: | ||||
| if (ELEM(wmn->data, ND_UNDO)) { | if (ELEM(wmn->data, ND_UNDO)) { | ||||
| Show All 14 Lines | case NC_ANIMATION: | ||||
| case ND_ANIMCHAN: | case ND_ANIMCHAN: | ||||
| if (wmn->action == NA_SELECTED) | if (wmn->action == NA_SELECTED) | ||||
| ED_region_tag_redraw(ar); | ED_region_tag_redraw(ar); | ||||
| break; | break; | ||||
| } | } | ||||
| break; | break; | ||||
| case NC_SCENE: | case NC_SCENE: | ||||
| switch (wmn->data) { | switch (wmn->data) { | ||||
| case ND_SCENEBROWSE: | |||||
| case ND_LAYER_CONTENT: | case ND_LAYER_CONTENT: | ||||
| if (wmn->reference) | if (wmn->reference) | ||||
| view3d_recalc_used_layers(ar, wmn, wmn->reference); | view3d_recalc_used_layers(ar, wmn, wmn->reference); | ||||
| ED_region_tag_redraw(ar); | ED_region_tag_redraw(ar); | ||||
| WM_manipulatormap_tag_refresh(mmap); | WM_manipulatormap_tag_refresh(mmap); | ||||
| break; | break; | ||||
| case ND_LAYER: | |||||
| if (wmn->reference) { | |||||
| BKE_screen_view3d_sync(v3d, wmn->reference); | |||||
| } | |||||
| ED_region_tag_redraw(ar); | |||||
| break; | |||||
| case ND_FRAME: | case ND_FRAME: | ||||
| case ND_TRANSFORM: | case ND_TRANSFORM: | ||||
| case ND_OB_ACTIVE: | case ND_OB_ACTIVE: | ||||
| case ND_OB_SELECT: | case ND_OB_SELECT: | ||||
| case ND_OB_VISIBLE: | case ND_OB_VISIBLE: | ||||
| case ND_LAYER: | |||||
| case ND_RENDER_OPTIONS: | case ND_RENDER_OPTIONS: | ||||
| case ND_MARKERS: | case ND_MARKERS: | ||||
| case ND_MODE: | case ND_MODE: | ||||
| ED_region_tag_redraw(ar); | ED_region_tag_redraw(ar); | ||||
| WM_manipulatormap_tag_refresh(mmap); | WM_manipulatormap_tag_refresh(mmap); | ||||
| break; | break; | ||||
| case ND_WORLD: | case ND_WORLD: | ||||
| /* handled by space_view3d_listener() for v3d access */ | /* handled by space_view3d_listener() for v3d access */ | ||||
| ▲ Show 20 Lines • Show All 162 Lines • ▼ Show 20 Lines | case NC_ID: | ||||
| ED_region_tag_redraw(ar); | ED_region_tag_redraw(ar); | ||||
| break; | break; | ||||
| case NC_SCREEN: | case NC_SCREEN: | ||||
| switch (wmn->data) { | switch (wmn->data) { | ||||
| case ND_ANIMPLAY: | case ND_ANIMPLAY: | ||||
| case ND_SKETCH: | case ND_SKETCH: | ||||
| ED_region_tag_redraw(ar); | ED_region_tag_redraw(ar); | ||||
| break; | break; | ||||
| case ND_SCREENBROWSE: | case ND_LAYOUTBROWSE: | ||||
| case ND_SCREENDELETE: | case ND_LAYOUTDELETE: | ||||
| case ND_SCREENSET: | case ND_LAYOUTSET: | ||||
| /* screen was changed, need to update used layers due to NC_SCENE|ND_LAYER_CONTENT */ | |||||
| /* updates used layers only for View3D in active screen */ | |||||
| if (wmn->reference) { | |||||
| bScreen *sc_ref = wmn->reference; | |||||
| view3d_recalc_used_layers(ar, wmn, sc_ref->scene); | |||||
| } | |||||
| WM_manipulatormap_tag_refresh(mmap); | WM_manipulatormap_tag_refresh(mmap); | ||||
| ED_region_tag_redraw(ar); | ED_region_tag_redraw(ar); | ||||
| break; | break; | ||||
| case ND_LAYER: | |||||
| ED_region_tag_redraw(ar); | |||||
| break; | |||||
| } | } | ||||
| break; | break; | ||||
| case NC_GPENCIL: | case NC_GPENCIL: | ||||
| if (wmn->data == ND_DATA || ELEM(wmn->action, NA_EDITED, NA_SELECTED)) { | if (wmn->data == ND_DATA || ELEM(wmn->action, NA_EDITED, NA_SELECTED)) { | ||||
| ED_region_tag_redraw(ar); | ED_region_tag_redraw(ar); | ||||
| } | } | ||||
| break; | break; | ||||
| } | } | ||||
| } | } | ||||
| /* concept is to retrieve cursor type context-less */ | /* concept is to retrieve cursor type context-less */ | ||||
| static void view3d_main_region_cursor(wmWindow *win, ScrArea *UNUSED(sa), ARegion *UNUSED(ar)) | static void view3d_main_region_cursor(wmWindow *win, ScrArea *UNUSED(sa), ARegion *UNUSED(ar)) | ||||
| { | { | ||||
| Scene *scene = win->screen->scene; | const Scene *scene = WM_window_get_active_scene(win); | ||||
| if (scene->obedit) { | if (scene->obedit) { | ||||
| WM_cursor_set(win, CURSOR_EDIT); | WM_cursor_set(win, CURSOR_EDIT); | ||||
| } | } | ||||
| else { | else { | ||||
| WM_cursor_set(win, CURSOR_STD); | WM_cursor_set(win, CURSOR_STD); | ||||
| } | } | ||||
| } | } | ||||
| /* add handlers, stuff you only do once or on area/region changes */ | /* add handlers, stuff you only do once or on area/region changes */ | ||||
| static void view3d_header_region_init(wmWindowManager *wm, ARegion *ar) | static void view3d_header_region_init(wmWindowManager *wm, ARegion *ar) | ||||
| { | { | ||||
| wmKeyMap *keymap = WM_keymap_find(wm->defaultconf, "3D View Generic", SPACE_VIEW3D, 0); | wmKeyMap *keymap = WM_keymap_find(wm->defaultconf, "3D View Generic", SPACE_VIEW3D, 0); | ||||
| WM_event_add_keymap_handler(&ar->handlers, keymap); | WM_event_add_keymap_handler(&ar->handlers, keymap); | ||||
| ED_region_header_init(ar); | ED_region_header_init(ar); | ||||
| } | } | ||||
| static void view3d_header_region_draw(const bContext *C, ARegion *ar) | static void view3d_header_region_draw(const bContext *C, ARegion *ar) | ||||
| { | { | ||||
| ED_region_header(C, ar); | ED_region_header(C, ar); | ||||
| } | } | ||||
| static void view3d_header_region_listener(bScreen *UNUSED(sc), ScrArea *UNUSED(sa), ARegion *ar, wmNotifier *wmn) | static void view3d_header_region_listener(bScreen *UNUSED(sc), ScrArea *UNUSED(sa), ARegion *ar, | ||||
| wmNotifier *wmn, const Scene *UNUSED(scene)) | |||||
| { | { | ||||
| /* context changes */ | /* context changes */ | ||||
| switch (wmn->category) { | switch (wmn->category) { | ||||
| case NC_SCENE: | case NC_SCENE: | ||||
| switch (wmn->data) { | switch (wmn->data) { | ||||
| case ND_FRAME: | case ND_FRAME: | ||||
| case ND_OB_ACTIVE: | case ND_OB_ACTIVE: | ||||
| case ND_OB_SELECT: | case ND_OB_SELECT: | ||||
| Show All 29 Lines | static void view3d_buttons_region_init(wmWindowManager *wm, ARegion *ar) | ||||
| WM_event_add_keymap_handler(&ar->handlers, keymap); | WM_event_add_keymap_handler(&ar->handlers, keymap); | ||||
| } | } | ||||
| static void view3d_buttons_region_draw(const bContext *C, ARegion *ar) | static void view3d_buttons_region_draw(const bContext *C, ARegion *ar) | ||||
| { | { | ||||
| ED_region_panels(C, ar, NULL, -1, true); | ED_region_panels(C, ar, NULL, -1, true); | ||||
| } | } | ||||
| static void view3d_buttons_region_listener(bScreen *UNUSED(sc), ScrArea *UNUSED(sa), ARegion *ar, wmNotifier *wmn) | static void view3d_buttons_region_listener(bScreen *UNUSED(sc), ScrArea *UNUSED(sa), ARegion *ar, | ||||
| wmNotifier *wmn, const Scene *UNUSED(scene)) | |||||
| { | { | ||||
| /* context changes */ | /* context changes */ | ||||
| switch (wmn->category) { | switch (wmn->category) { | ||||
| case NC_ANIMATION: | case NC_ANIMATION: | ||||
| switch (wmn->data) { | switch (wmn->data) { | ||||
| case ND_KEYFRAME_PROP: | case ND_KEYFRAME_PROP: | ||||
| case ND_NLA_ACTCHANGE: | case ND_NLA_ACTCHANGE: | ||||
| ED_region_tag_redraw(ar); | ED_region_tag_redraw(ar); | ||||
| ▲ Show 20 Lines • Show All 89 Lines • ▼ Show 20 Lines | static void view3d_tools_region_init(wmWindowManager *wm, ARegion *ar) | ||||
| WM_event_add_keymap_handler(&ar->handlers, keymap); | WM_event_add_keymap_handler(&ar->handlers, keymap); | ||||
| } | } | ||||
| static void view3d_tools_region_draw(const bContext *C, ARegion *ar) | static void view3d_tools_region_draw(const bContext *C, ARegion *ar) | ||||
| { | { | ||||
| ED_region_panels(C, ar, CTX_data_mode_string(C), -1, true); | ED_region_panels(C, ar, CTX_data_mode_string(C), -1, true); | ||||
| } | } | ||||
| static void view3d_props_region_listener(bScreen *UNUSED(sc), ScrArea *UNUSED(sa), ARegion *ar, wmNotifier *wmn) | static void view3d_props_region_listener(bScreen *UNUSED(sc), ScrArea *UNUSED(sa), ARegion *ar, | ||||
| wmNotifier *wmn, const Scene *UNUSED(scene)) | |||||
| { | { | ||||
| /* context changes */ | /* context changes */ | ||||
| switch (wmn->category) { | switch (wmn->category) { | ||||
| case NC_WM: | case NC_WM: | ||||
| if (wmn->data == ND_HISTORY) | if (wmn->data == ND_HISTORY) | ||||
| ED_region_tag_redraw(ar); | ED_region_tag_redraw(ar); | ||||
| break; | break; | ||||
| case NC_SCENE: | case NC_SCENE: | ||||
| if (wmn->data == ND_MODE) | if (wmn->data == ND_MODE) | ||||
| ED_region_tag_redraw(ar); | ED_region_tag_redraw(ar); | ||||
| break; | break; | ||||
| case NC_SPACE: | case NC_SPACE: | ||||
| if (wmn->data == ND_SPACE_VIEW3D) | if (wmn->data == ND_SPACE_VIEW3D) | ||||
| ED_region_tag_redraw(ar); | ED_region_tag_redraw(ar); | ||||
| break; | break; | ||||
| } | } | ||||
| } | } | ||||
| /* area (not region) level listener */ | /* area (not region) level listener */ | ||||
| static void space_view3d_listener(bScreen *UNUSED(sc), ScrArea *sa, struct wmNotifier *wmn) | static void space_view3d_listener(bScreen *UNUSED(sc), ScrArea *sa, struct wmNotifier *wmn, const Scene *UNUSED(scene)) | ||||
| { | { | ||||
| View3D *v3d = sa->spacedata.first; | View3D *v3d = sa->spacedata.first; | ||||
| /* context changes */ | /* context changes */ | ||||
| switch (wmn->category) { | switch (wmn->category) { | ||||
| case NC_SCENE: | case NC_SCENE: | ||||
| switch (wmn->data) { | switch (wmn->data) { | ||||
| case ND_WORLD: | case ND_WORLD: | ||||
| ▲ Show 20 Lines • Show All 221 Lines • Show Last 20 Lines | |||||