diff options
author | Ton Roosendaal <ton@blender.org> | 2008-12-27 19:09:56 +0300 |
---|---|---|
committer | Ton Roosendaal <ton@blender.org> | 2008-12-27 19:09:56 +0300 |
commit | f0f451fc16880315c8c094aaabd0fbf8a06ffede (patch) | |
tree | bfd93ce72af37a8c08898b745e09af08c36e4314 /source/blender/editors | |
parent | 0714d28236e66b258de90bcbb8a1a821ee424a71 (diff) |
2.5
Notifier system upgrade, based on Brecht's doc.
Implementation notes:
http://wiki.blender.org/index.php/BlenderDev/Blender2.5/DataNotifiers#Implementation
In short: let's try to strictly communicate in a notifier what happened.
The listeners then can act themselves. It also means that a frame-changed
notifier doesn't send out redraws, the editors themselves can decide.
Diffstat (limited to 'source/blender/editors')
-rw-r--r-- | source/blender/editors/animation/anim_markers.c | 16 | ||||
-rw-r--r-- | source/blender/editors/animation/anim_ops.c | 3 | ||||
-rw-r--r-- | source/blender/editors/interface/interface_regions.c | 4 | ||||
-rw-r--r-- | source/blender/editors/screen/area.c | 9 | ||||
-rw-r--r-- | source/blender/editors/screen/screen_edit.c | 14 | ||||
-rw-r--r-- | source/blender/editors/screen/screen_ops.c | 27 | ||||
-rw-r--r-- | source/blender/editors/space_action/action_header.c | 2 | ||||
-rw-r--r-- | source/blender/editors/space_action/space_action.c | 11 | ||||
-rw-r--r-- | source/blender/editors/space_buttons/buttons_header.c | 2 | ||||
-rw-r--r-- | source/blender/editors/space_ipo/space_ipo.c | 11 | ||||
-rw-r--r-- | source/blender/editors/space_time/space_time.c | 5 | ||||
-rw-r--r-- | source/blender/editors/space_time/time_header.c | 11 |
12 files changed, 61 insertions, 54 deletions
diff --git a/source/blender/editors/animation/anim_markers.c b/source/blender/editors/animation/anim_markers.c index b8a4436dedf..141ed5a9e70 100644 --- a/source/blender/editors/animation/anim_markers.c +++ b/source/blender/editors/animation/anim_markers.c @@ -200,7 +200,7 @@ static int ed_marker_add(bContext *C, wmOperator *op) sprintf(marker->name, "Frame %d", frame); // XXX - temp code only BLI_addtail(markers, marker); - WM_event_add_notifier(C, WM_NOTE_MARKERS_CHANGED, 0, NULL); + WM_event_add_notifier(C, NC_SCENE|ND_MARKERS, NULL); //BIF_undo_push("Add Marker"); return OPERATOR_FINISHED; @@ -336,7 +336,7 @@ static void ed_marker_move_cancel(bContext *C, wmOperator *op) ed_marker_move_apply(C, op); ed_marker_move_exit(C, op); - WM_event_add_notifier(C, WM_NOTE_MARKERS_CHANGED, 0, NULL); + WM_event_add_notifier(C, NC_SCENE|ND_MARKERS, NULL); } @@ -379,7 +379,7 @@ static int ed_marker_move_modal(bContext *C, wmOperator *op, wmEvent *evt) case RIGHTMOUSE: if(WM_modal_tweak_check(evt, mm->event_type)) { ed_marker_move_exit(C, op); - WM_event_add_notifier(C, WM_NOTE_MARKERS_CHANGED, 0, NULL); + WM_event_add_notifier(C, NC_SCENE|ND_MARKERS, NULL); return OPERATOR_FINISHED; } @@ -456,7 +456,7 @@ XXX else if (mm->slink->spacetype == SPACE_ACTION) { } } - WM_event_add_notifier(C, WM_NOTE_MARKERS_CHANGED, 0, NULL); + WM_event_add_notifier(C, NC_SCENE|ND_MARKERS, NULL); // headerprint(str); XXX } } @@ -623,7 +623,7 @@ static int ed_marker_select(bContext *C, wmEvent *evt, int extend) else select_timeline_marker_frame(markers, cfra, 0); - WM_event_add_notifier(C, WM_NOTE_MARKERS_CHANGED, 0, NULL); + WM_event_add_notifier(C, NC_SCENE|ND_MARKERS, NULL); return OPERATOR_PASS_THROUGH; } @@ -716,7 +716,7 @@ static int ed_marker_border_select_exec(bContext *C, wmOperator *op) } } - WM_event_add_notifier(C, WM_NOTE_MARKERS_CHANGED, 0, NULL); + WM_event_add_notifier(C, NC_SCENE|ND_MARKERS, NULL); return 1; } @@ -769,7 +769,7 @@ static int ed_marker_select_all_exec(bContext *C, wmOperator *op) marker->flag &= ~SELECT; } - WM_event_add_notifier(C, WM_NOTE_MARKERS_CHANGED, 0, NULL); + WM_event_add_notifier(C, NC_SCENE|ND_MARKERS, NULL); return OPERATOR_FINISHED; } @@ -816,7 +816,7 @@ static int ed_marker_delete_exec(bContext *C, wmOperator *op) } if(changed) { - WM_event_add_notifier(C, WM_NOTE_MARKERS_CHANGED, 0, NULL); + WM_event_add_notifier(C, NC_SCENE|ND_MARKERS, NULL); } return OPERATOR_FINISHED; } diff --git a/source/blender/editors/animation/anim_ops.c b/source/blender/editors/animation/anim_ops.c index 539ba33dc55..b47bf3c4611 100644 --- a/source/blender/editors/animation/anim_ops.c +++ b/source/blender/editors/animation/anim_ops.c @@ -101,8 +101,7 @@ static void change_frame_apply(bContext *C, wmOperator *op) if (cfra != scene->r.cfra) scene->r.cfra= cfra; - WM_event_add_notifier(C, WM_NOTE_WINDOW_REDRAW, 0, NULL); - /* XXX: add WM_NOTE_TIME_CHANGED? */ + WM_event_add_notifier(C, NC_SCENE|ND_FRAME, scene); } /* Clear any temp flags */ diff --git a/source/blender/editors/interface/interface_regions.c b/source/blender/editors/interface/interface_regions.c index 0009f301b63..063255bed86 100644 --- a/source/blender/editors/interface/interface_regions.c +++ b/source/blender/editors/interface/interface_regions.c @@ -392,7 +392,7 @@ void ui_tooltip_free(bContext *C, ARegion *ar) { ui_remove_temporary_region(C, CTX_wm_screen(C), ar); - WM_event_add_notifier(C, WM_NOTE_WINDOW_REDRAW, 0, NULL); + WM_event_add_notifier(C, NC_WINDOW, NULL); // XXX provide rect for window } /************************* Creating Menu Blocks **********************/ @@ -710,7 +710,7 @@ void ui_menu_block_free(bContext *C, uiMenuBlockHandle *handle) ui_remove_temporary_region(C, CTX_wm_screen(C), handle->region); MEM_freeN(handle); - WM_event_add_notifier(C, WM_NOTE_WINDOW_REDRAW, 0, NULL); + WM_event_add_notifier(C, NC_WINDOW, NULL); // XXX provide rect for window } /***************************** Menu Button ***************************/ diff --git a/source/blender/editors/screen/area.c b/source/blender/editors/screen/area.c index 3c5c72cda5f..b63777cccf0 100644 --- a/source/blender/editors/screen/area.c +++ b/source/blender/editors/screen/area.c @@ -107,13 +107,12 @@ void ED_region_pixelspace(ARegion *ar) void ED_region_do_listen(ARegion *ar, wmNotifier *note) { /* generic notes first */ - switch(note->type) { - case WM_NOTE_WINDOW_REDRAW: - case WM_NOTE_SCREEN_CHANGED: + switch(note->category) { + case NC_WINDOW: ED_region_tag_redraw(ar); break; - case WM_NOTE_GESTURE_REDRAW: - if(note->swinid==ar->swinid) + case NC_SCREEN: + if(note->action==NA_EDITED) ED_region_tag_redraw(ar); break; default: diff --git a/source/blender/editors/screen/screen_edit.c b/source/blender/editors/screen/screen_edit.c index 6d16e522a11..50a6381e1f4 100644 --- a/source/blender/editors/screen/screen_edit.c +++ b/source/blender/editors/screen/screen_edit.c @@ -912,15 +912,13 @@ void ED_screen_do_listen(wmWindow *win, wmNotifier *note) { /* generic notes */ - switch(note->type) { - case WM_NOTE_WINDOW_REDRAW: + switch(note->category) { + case NC_WINDOW: win->screen->do_draw= 1; break; - case WM_NOTE_SCREEN_CHANGED: - win->screen->do_draw= win->screen->do_refresh= 1; - break; - case WM_NOTE_GESTURE_REDRAW: - win->screen->do_gesture= 1; /* XXX gestures are stored in window, draw per region... a bit weak? wait for proper composite? (ton) */ + case NC_SCREEN: + if(note->action==NA_EDITED) + win->screen->do_draw= win->screen->do_refresh= 1; break; } } @@ -1207,7 +1205,7 @@ void ed_screen_set(bContext *C, bScreen *sc) CTX_wm_window(C)->screen= sc; ED_screen_refresh(CTX_wm_manager(C), CTX_wm_window(C)); - WM_event_add_notifier(C, WM_NOTE_WINDOW_REDRAW, 0, NULL); + WM_event_add_notifier(C, NC_WINDOW, NULL); } } diff --git a/source/blender/editors/screen/screen_ops.c b/source/blender/editors/screen/screen_ops.c index 5f38081f7fc..3197d23988c 100644 --- a/source/blender/editors/screen/screen_ops.c +++ b/source/blender/editors/screen/screen_ops.c @@ -330,7 +330,7 @@ static int screen_area_rip_op(bContext *C, wmOperator *op) area_copy_data((ScrArea *)newsc->areabase.first, sa, 0); /* screen, areas init */ - WM_event_add_notifier(C, WM_NOTE_SCREEN_CHANGED, 0, NULL); + WM_event_add_notifier(C, NC_SCREEN|NA_EDITED, NULL); return OPERATOR_FINISHED; } @@ -473,7 +473,7 @@ static void area_move_apply_do(bContext *C, int origval, int delta, int dir, int } } - WM_event_add_notifier(C, WM_NOTE_SCREEN_CHANGED, 0, NULL); + WM_event_add_notifier(C, NC_SCREEN|NA_EDITED, NULL); } static void area_move_apply(bContext *C, wmOperator *op) @@ -727,7 +727,7 @@ static int area_split_apply(bContext *C, wmOperator *op) if(dir=='h') sd->origval= sd->nedge->v1->vec.y; else sd->origval= sd->nedge->v1->vec.x; - WM_event_add_notifier(C, WM_NOTE_SCREEN_CHANGED, 0, NULL); + WM_event_add_notifier(C, NC_SCREEN|NA_EDITED, NULL); return 1; } @@ -742,7 +742,7 @@ static void area_split_exit(bContext *C, wmOperator *op) op->customdata = NULL; } - WM_event_add_notifier(C, WM_NOTE_SCREEN_CHANGED, 0, NULL); + WM_event_add_notifier(C, NC_SCREEN|NA_EDITED, NULL); /* this makes sure aligned edges will result in aligned grabbing */ removedouble_scrverts(CTX_wm_screen(C)); @@ -853,7 +853,7 @@ static int area_split_modal(bContext *C, wmOperator *op, wmEvent *event) fac= (dir == 'v') ? event->x-sd->origmin : event->y-sd->origmin; RNA_float_set(op->ptr, "fac", fac / (float)sd->origsize); - WM_event_add_notifier(C, WM_NOTE_SCREEN_CHANGED, 0, NULL); + WM_event_add_notifier(C, NC_SCREEN|NA_EDITED, NULL); break; case LEFTMOUSE: @@ -910,8 +910,7 @@ static int frame_offset_exec(bContext *C, wmOperator *op) delta = RNA_int_get(op->ptr, "delta"); CTX_data_scene(C)->r.cfra += delta; - WM_event_add_notifier(C, WM_NOTE_WINDOW_REDRAW, 0, NULL); - /* XXX: add WM_NOTE_TIME_CHANGED? */ + WM_event_add_notifier(C, NC_SCENE|ND_FRAME, CTX_data_scene(C)); return OPERATOR_FINISHED; } @@ -1156,7 +1155,7 @@ static int area_join_cancel(bContext *C, wmOperator *op) jd->sa2->flag &= ~AREA_FLAG_DRAWJOINTO; } - WM_event_add_notifier(C, WM_NOTE_WINDOW_REDRAW, 0, NULL); + WM_event_add_notifier(C, NC_WINDOW, NULL); area_join_exit(C, op); @@ -1204,7 +1203,7 @@ static int area_join_modal(bContext *C, wmOperator *op, wmEvent *event) jd->sa2 = NULL; } } - WM_event_add_notifier(C, WM_NOTE_WINDOW_REDRAW, 0, NULL); + WM_event_add_notifier(C, NC_WINDOW, NULL); } else { /* we are back in the area previously selected for keeping @@ -1229,7 +1228,7 @@ static int area_join_modal(bContext *C, wmOperator *op, wmEvent *event) jd->sa2->flag |= AREA_FLAG_DRAWJOINTO; } } - WM_event_add_notifier(C, WM_NOTE_WINDOW_REDRAW, 0, NULL); + WM_event_add_notifier(C, NC_WINDOW, NULL); } } } @@ -1237,7 +1236,7 @@ static int area_join_modal(bContext *C, wmOperator *op, wmEvent *event) case LEFTMOUSE: if(event->val==0) { area_join_apply(C, op); - WM_event_add_notifier(C, WM_NOTE_SCREEN_CHANGED, 0, NULL); + WM_event_add_notifier(C, NC_SCREEN|NA_EDITED, NULL); area_join_exit(C, op); return OPERATOR_FINISHED; } @@ -1324,7 +1323,7 @@ static int region_split_exec(bContext *C, wmOperator *op) else ar->alignment= RGN_ALIGN_VSPLIT; - WM_event_add_notifier(C, WM_NOTE_SCREEN_CHANGED, 0, NULL); + WM_event_add_notifier(C, NC_SCREEN|NA_EDITED, NULL); return OPERATOR_FINISHED; } @@ -1363,7 +1362,7 @@ static int region_flip_exec(bContext *C, wmOperator *op) else if(ar->alignment==RGN_ALIGN_RIGHT) ar->alignment= RGN_ALIGN_LEFT; - WM_event_add_notifier(C, WM_NOTE_SCREEN_CHANGED, 0, NULL); + WM_event_add_notifier(C, NC_SCREEN|NA_EDITED, NULL); return OPERATOR_FINISHED; } @@ -1401,7 +1400,7 @@ static int screen_animation_play(bContext *C, wmOperator *op, wmEvent *event) scene->r.cfra= scene->r.sfra; } - WM_event_add_notifier(C, WM_NOTE_WINDOW_REDRAW, 0, NULL); + WM_event_add_notifier(C, NC_SCENE|ND_FRAME, CTX_data_scene(C)); return OPERATOR_FINISHED; } diff --git a/source/blender/editors/space_action/action_header.c b/source/blender/editors/space_action/action_header.c index 3a16454fb46..05cff8c690d 100644 --- a/source/blender/editors/space_action/action_header.c +++ b/source/blender/editors/space_action/action_header.c @@ -308,7 +308,7 @@ static void do_action_buttons(bContext *C, void *arg, int event) { switch(event) { case B_REDR: - WM_event_add_notifier(C, WM_NOTE_WINDOW_REDRAW, 0, NULL); + ED_region_tag_redraw(CTX_wm_region(C)); break; } } diff --git a/source/blender/editors/space_action/space_action.c b/source/blender/editors/space_action/space_action.c index b9e7c76cbf4..f772896a5a3 100644 --- a/source/blender/editors/space_action/space_action.c +++ b/source/blender/editors/space_action/space_action.c @@ -289,9 +289,14 @@ static void action_header_area_draw(const bContext *C, ARegion *ar) static void action_main_area_listener(ARegion *ar, wmNotifier *wmn) { /* context changes */ - switch(wmn->type) { - case WM_NOTE_MARKERS_CHANGED: - ED_region_tag_redraw(ar); + switch(wmn->category) { + case NC_SCENE: + switch(wmn->data) { + case ND_FRAME: + case ND_MARKERS: + ED_region_tag_redraw(ar); + break; + } break; } } diff --git a/source/blender/editors/space_buttons/buttons_header.c b/source/blender/editors/space_buttons/buttons_header.c index 552093b47a5..5090a81aaa7 100644 --- a/source/blender/editors/space_buttons/buttons_header.c +++ b/source/blender/editors/space_buttons/buttons_header.c @@ -99,7 +99,7 @@ static void do_buttons_buttons(bContext *C, void *arg, int event) { switch(event) { case B_NEWFRAME: - WM_event_add_notifier(C, WM_NOTE_WINDOW_REDRAW, 0, NULL); + WM_event_add_notifier(C, NC_SCENE|ND_FRAME, NULL); break; case B_CONTEXT_SWITCH: ED_area_tag_redraw(CTX_wm_area(C)); diff --git a/source/blender/editors/space_ipo/space_ipo.c b/source/blender/editors/space_ipo/space_ipo.c index 00e446c65a9..8a301378fd7 100644 --- a/source/blender/editors/space_ipo/space_ipo.c +++ b/source/blender/editors/space_ipo/space_ipo.c @@ -275,10 +275,15 @@ static void ipo_header_area_draw(const bContext *C, ARegion *ar) static void ipo_main_area_listener(ARegion *ar, wmNotifier *wmn) { /* context changes */ - switch(wmn->type) { + switch(wmn->category) { - case WM_NOTE_MARKERS_CHANGED: - ED_region_tag_redraw(ar); + case NC_SCENE: + switch(wmn->data) { + case ND_FRAME: + case ND_MARKERS: + ED_region_tag_redraw(ar); + break; + } break; } } diff --git a/source/blender/editors/space_time/space_time.c b/source/blender/editors/space_time/space_time.c index 81c5334ef31..11ab7b19a6b 100644 --- a/source/blender/editors/space_time/space_time.c +++ b/source/blender/editors/space_time/space_time.c @@ -164,9 +164,10 @@ static void time_main_area_draw(const bContext *C, ARegion *ar) static void time_main_area_listener(ARegion *ar, wmNotifier *wmn) { /* context changes */ - switch(wmn->type) { + switch(wmn->category) { - case WM_NOTE_MARKERS_CHANGED: + case NC_SCENE: + /* any scene change for now */ ED_region_tag_redraw(ar); break; } diff --git a/source/blender/editors/space_time/time_header.c b/source/blender/editors/space_time/time_header.c index b760f1f969b..94c3e03ff8c 100644 --- a/source/blender/editors/space_time/time_header.c +++ b/source/blender/editors/space_time/time_header.c @@ -275,7 +275,7 @@ static void do_time_framemenu(bContext *C, void *arg, int event) } else scene->r.sfra = scene->r.cfra; - WM_event_add_notifier(C, WM_NOTE_WINDOW_REDRAW, 0, NULL); + WM_event_add_notifier(C, NC_SCENE|ND_RENDER_OPTIONS, scene); break; case 2: /* Set as End */ if (scene->r.psfra) { @@ -285,7 +285,7 @@ static void do_time_framemenu(bContext *C, void *arg, int event) } else scene->r.efra = scene->r.cfra; - WM_event_add_notifier(C, WM_NOTE_WINDOW_REDRAW, 0, NULL); + WM_event_add_notifier(C, NC_SCENE|ND_RENDER_OPTIONS, scene); break; case 3: /* Rename Marker */ //rename_marker(); @@ -362,8 +362,10 @@ void do_time_buttons(bContext *C, void *arg, int event) switch(event) { case B_REDRAWALL: + WM_event_add_notifier(C, NC_SCENE|ND_RENDER_OPTIONS, scene); + break; case B_NEWFRAME: - WM_event_add_notifier(C, WM_NOTE_WINDOW_REDRAW, 0, NULL); + WM_event_add_notifier(C, NC_SCENE|ND_FRAME, scene); break; case B_TL_REW: scene->r.cfra= PSFRA; @@ -374,7 +376,6 @@ void do_time_buttons(bContext *C, void *arg, int event) break; case B_TL_STOP: ED_screen_animation_timer(C, 0); - WM_event_add_notifier(C, WM_NOTE_WINDOW_REDRAW, 0, NULL); break; case B_TL_FF: /* end frame */ @@ -402,7 +403,7 @@ void do_time_buttons(bContext *C, void *arg, int event) scene->r.pefra= 0; } //BIF_undo_push("Set anim-preview range"); - WM_event_add_notifier(C, WM_NOTE_WINDOW_REDRAW, 0, NULL); + WM_event_add_notifier(C, NC_SCENE|ND_RENDER_OPTIONS, scene); break; case B_TL_INSERTKEY: |