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 | |
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')
-rw-r--r-- | source/blender/blenkernel/BKE_screen.h | 6 | ||||
-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 | ||||
-rw-r--r-- | source/blender/windowmanager/intern/wm_event_system.c | 2 |
5 files changed, 43 insertions, 22 deletions
diff --git a/source/blender/blenkernel/BKE_screen.h b/source/blender/blenkernel/BKE_screen.h index ab91612defe..04b27f7bf3c 100644 --- a/source/blender/blenkernel/BKE_screen.h +++ b/source/blender/blenkernel/BKE_screen.h @@ -75,8 +75,6 @@ typedef struct SpaceType { void (*operatortypes)(void); /* add default items to WM keymap */ void (*keymap)(struct wmWindowManager *); - /* sets default cursor per region */ - void (*cursor)(struct wmWindow *win, struct ARegion *ar); /* return context data */ int (*context)(const struct bContext *, const void *, struct bContextDataResult *); @@ -111,7 +109,9 @@ typedef struct ARegionType { void (*operatortypes)(void); /* add own items to keymap */ void (*keymap)(struct wmWindowManager *); - + /* allows default cursor per region */ + void (*cursor)(struct wmWindow *, struct ScrArea *, struct ARegion *ar); + /* return context data */ int (*context)(const struct bContext *, const void *, struct bContextDataResult *); 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 */ diff --git a/source/blender/windowmanager/intern/wm_event_system.c b/source/blender/windowmanager/intern/wm_event_system.c index caa4731a524..843137cbec1 100644 --- a/source/blender/windowmanager/intern/wm_event_system.c +++ b/source/blender/windowmanager/intern/wm_event_system.c @@ -867,7 +867,7 @@ void wm_event_do_handlers(bContext *C) /* XXX to solve, here screen handlers? */ if(!wm_event_always_pass(event)) - ED_screen_set_subwinactive(win, event); /* state variables in screen */ + ED_screen_set_subwinactive(win, event); /* state variables in screen, cursors */ for(sa= win->screen->areabase.first; sa; sa= sa->next) { if(wm_event_always_pass(event) || wm_event_prev_inside_i(event, &sa->totrct)) { |