diff options
author | Ton Roosendaal <ton@blender.org> | 2009-01-04 22:17:34 +0300 |
---|---|---|
committer | Ton Roosendaal <ton@blender.org> | 2009-01-04 22:17:34 +0300 |
commit | df6caaed1ebe6076893853a2573a747a28028f22 (patch) | |
tree | 9265ca8805a03e9d27e6afe1dc4a8df23e2f6632 /source/blender/editors | |
parent | 49631b6e409d458d7023b8d8ceff5de58a7597e8 (diff) |
2.5
Small cleanup in region-based cursor handling.
- callback was in spacetype, now in regiontype
- made screen listener catch ND_MODE notifier and
call the active region cursor callback, if it's there.
Diffstat (limited to 'source/blender/editors')
-rw-r--r-- | source/blender/editors/screen/screen_edit.c | 34 | ||||
-rw-r--r-- | source/blender/editors/space_text/space_text.c | 9 | ||||
-rw-r--r-- | source/blender/editors/space_view3d/space_view3d.c | 14 |
3 files changed, 39 insertions, 18 deletions
diff --git a/source/blender/editors/screen/screen_edit.c b/source/blender/editors/screen/screen_edit.c index 97f45ff05bf..a838e833883 100644 --- a/source/blender/editors/screen/screen_edit.c +++ b/source/blender/editors/screen/screen_edit.c @@ -907,6 +907,24 @@ bScreen *ED_screen_duplicate(wmWindow *win, bScreen *sc) return newsc; } +/* screen sets cursor based on swinid */ +static void region_cursor_set(wmWindow *win, int swinid) +{ + ScrArea *sa= win->screen->areabase.first; + + for(;sa; sa= sa->next) { + ARegion *ar= sa->regionbase.first; + for(;ar; ar= ar->next) { + if(ar->swinid == swinid) { + if(ar->type && ar->type->cursor) + ar->type->cursor(win, sa, ar); + else + WM_cursor_set(win, CURSOR_STD); + return; + } + } + } +} void ED_screen_do_listen(wmWindow *win, wmNotifier *note) { @@ -919,6 +937,9 @@ void ED_screen_do_listen(wmWindow *win, wmNotifier *note) case NC_SCREEN: if(note->action==NA_EDITED) win->screen->do_draw= win->screen->do_refresh= 1; + case NC_SCENE: + if(note->data==ND_MODE) + region_cursor_set(win, note->swinid); break; } } @@ -1145,18 +1166,7 @@ void ED_screen_set_subwinactive(wmWindow *win, wmEvent *event) screen_cursor_set(win, event); } else if(oldswin!=scr->subwinactive) { - /* cursor space type switching */ - for(sa= scr->areabase.first; sa; sa= sa->next) { - for(ar= sa->regionbase.first; ar; ar= ar->next) { - if(ar->swinid==scr->subwinactive) { - if(sa->type->cursor) - sa->type->cursor(win, ar); - else - WM_cursor_set(win, CURSOR_STD); - } - } - - } + region_cursor_set(win, scr->subwinactive); } } } diff --git a/source/blender/editors/space_text/space_text.c b/source/blender/editors/space_text/space_text.c index 14caafe722e..4187bd13cb1 100644 --- a/source/blender/editors/space_text/space_text.c +++ b/source/blender/editors/space_text/space_text.c @@ -157,12 +157,9 @@ static void text_operatortypes(void) } -static void text_cursor(wmWindow *win, ARegion *ar) +static void text_cursor(wmWindow *win, ScrArea *sa, ARegion *ar) { - if(ar->regiontype==RGN_TYPE_WINDOW) - WM_cursor_set(win, BC_TEXTEDITCURSOR); - else - WM_cursor_set(win, CURSOR_STD); + WM_cursor_set(win, BC_TEXTEDITCURSOR); } static void text_keymap(struct wmWindowManager *wm) @@ -216,7 +213,6 @@ void ED_spacetype_text(void) st->init= text_init; st->duplicate= text_duplicate; st->operatortypes= text_operatortypes; - st->cursor= text_cursor; st->keymap= text_keymap; /* regions: main window */ @@ -226,6 +222,7 @@ void ED_spacetype_text(void) art->draw= text_main_area_draw; art->listener= text_main_area_listener; art->keymapflag= ED_KEYMAP_VIEW2D; + art->cursor= text_cursor; BLI_addhead(&st->regiontypes, art); diff --git a/source/blender/editors/space_view3d/space_view3d.c b/source/blender/editors/space_view3d/space_view3d.c index 9ca07e15e01..507a4d9735f 100644 --- a/source/blender/editors/space_view3d/space_view3d.c +++ b/source/blender/editors/space_view3d/space_view3d.c @@ -271,6 +271,19 @@ static void view3d_main_area_listener(ARegion *ar, wmNotifier *wmn) } } +/* concept is to retrieve cursor type context-less */ +static void view3d_main_area_cursor(wmWindow *win, ScrArea *sa, ARegion *ar) +{ + Scene *scene= win->screen->scene; + + if(scene->obedit) { + WM_cursor_set(win, CURSOR_EDIT); + } + else { + WM_cursor_set(win, CURSOR_STD); + } +} + /* add handlers, stuff you only do once or on area/region changes */ static void view3d_header_area_init(wmWindowManager *wm, ARegion *ar) { @@ -391,6 +404,7 @@ void ED_spacetype_view3d(void) art->draw= view3d_main_area_draw; art->init= view3d_main_area_init; art->listener= view3d_main_area_listener; + art->cursor= view3d_main_area_cursor; BLI_addhead(&st->regiontypes, art); /* regions: header */ |