diff options
author | Ton Roosendaal <ton@blender.org> | 2008-12-15 21:09:55 +0300 |
---|---|---|
committer | Ton Roosendaal <ton@blender.org> | 2008-12-15 21:09:55 +0300 |
commit | 628f02d57482e987069c6b9969da309db84dbadd (patch) | |
tree | af21b3eea1710a65268fc46891512c09091a1652 /source/blender | |
parent | a16df53619a2ab3b41c0cbcf6f9e01a9bf370c9c (diff) |
2.5
Added notifiers for timeline syncing. Works for Timeline window
only now.
Note that I've removed the malloc-free in a Notifier... notifier
system is still under probabtion :)
Diffstat (limited to 'source/blender')
-rw-r--r-- | source/blender/editors/include/UI_view2d.h | 7 | ||||
-rw-r--r-- | source/blender/editors/interface/view2d.c | 15 | ||||
-rw-r--r-- | source/blender/editors/interface/view2d_ops.c | 12 | ||||
-rw-r--r-- | source/blender/editors/screen/area.c | 2 | ||||
-rw-r--r-- | source/blender/editors/space_time/space_time.c | 9 | ||||
-rw-r--r-- | source/blender/editors/space_time/time_header.c | 8 | ||||
-rw-r--r-- | source/blender/windowmanager/WM_types.h | 4 | ||||
-rw-r--r-- | source/blender/windowmanager/intern/wm_event_system.c | 16 |
8 files changed, 56 insertions, 17 deletions
diff --git a/source/blender/editors/include/UI_view2d.h b/source/blender/editors/include/UI_view2d.h index 0eb93580220..8d8b137732a 100644 --- a/source/blender/editors/include/UI_view2d.h +++ b/source/blender/editors/include/UI_view2d.h @@ -95,6 +95,12 @@ enum { /* half the size (in pixels) of scroller 'handles' */ #define V2D_SCROLLER_HANDLE_SIZE 5 +/* ------ Define for UI_view2d_sync ----- */ + +/* means copy it from the other v2d */ +#define V2D_LOCK_COPY 1 + + /* ------------------------------------------ */ /* Macros: */ @@ -153,6 +159,7 @@ void UI_view2d_to_region_no_clip(struct View2D *v2d, float x, float y, short *re struct View2D *UI_view2d_fromcontext(const struct bContext *C); struct View2D *UI_view2d_fromcontext_rwin(const struct bContext *C); void UI_view2d_getscale(struct View2D *v2d, float *x, float *y); +void UI_view2d_sync(struct View2D *v2d, struct View2D *v2dfrom, int flag); /* operators */ void ui_view2d_operatortypes(void); diff --git a/source/blender/editors/interface/view2d.c b/source/blender/editors/interface/view2d.c index 580c558cefb..fb5fbf940e8 100644 --- a/source/blender/editors/interface/view2d.c +++ b/source/blender/editors/interface/view2d.c @@ -1466,3 +1466,18 @@ void UI_view2d_getscale(View2D *v2d, float *x, float *y) if (x) *x = (v2d->mask.xmax - v2d->mask.xmin) / (v2d->cur.xmax - v2d->cur.xmin); if (y) *y = (v2d->mask.ymax - v2d->mask.ymin) / (v2d->cur.ymax - v2d->cur.ymin); } + + +void UI_view2d_sync(View2D *v2d, View2D *v2dfrom, int flag) +{ + + if(flag == V2D_LOCK_COPY) { + v2d->cur.xmin= v2dfrom->cur.xmin; + v2d->cur.xmax= v2dfrom->cur.xmax; + } + else { + v2dfrom->cur.xmin= v2d->cur.xmin; + v2dfrom->cur.xmax= v2d->cur.xmax; + } +} + diff --git a/source/blender/editors/interface/view2d_ops.c b/source/blender/editors/interface/view2d_ops.c index 3c9172b8a28..ffc435df4b4 100644 --- a/source/blender/editors/interface/view2d_ops.c +++ b/source/blender/editors/interface/view2d_ops.c @@ -165,7 +165,8 @@ static void view_pan_apply(bContext *C, wmOperator *op) /* request updates to be done... */ WM_event_add_notifier(C, WM_NOTE_AREA_REDRAW, 0, NULL); - /* XXX: add WM_NOTE_TIME_CHANGED? */ + if(v2d->flag & V2D_VIEWSYNC_X) + WM_event_add_notifier(C, WM_NOTE_TIMELINE_SYNC, V2D_LOCK_COPY, v2d); } /* cleanup temp customdata */ @@ -493,7 +494,8 @@ static void view_zoomstep_apply(bContext *C, wmOperator *op) /* request updates to be done... */ WM_event_add_notifier(C, WM_NOTE_AREA_REDRAW, 0, NULL); - /* XXX: add WM_NOTE_TIME_CHANGED? */ + if(v2d->flag & V2D_VIEWSYNC_X) + WM_event_add_notifier(C, WM_NOTE_TIMELINE_SYNC, V2D_LOCK_COPY, v2d); } /* --------------- Individual Operators ------------------- */ @@ -645,7 +647,8 @@ static void view_zoomdrag_apply(bContext *C, wmOperator *op) /* request updates to be done... */ WM_event_add_notifier(C, WM_NOTE_AREA_REDRAW, 0, NULL); - /* XXX: add WM_NOTE_TIME_CHANGED? */ + if(v2d->flag & V2D_VIEWSYNC_X) + WM_event_add_notifier(C, WM_NOTE_TIMELINE_SYNC, V2D_LOCK_COPY, v2d); } /* cleanup temp customdata */ @@ -1025,7 +1028,8 @@ static void scroller_activate_apply(bContext *C, wmOperator *op) /* request updates to be done... */ WM_event_add_notifier(C, WM_NOTE_AREA_REDRAW, 0, NULL); - /* XXX: add WM_NOTE_TIME_CHANGED? */ + if(v2d->flag & V2D_VIEWSYNC_X) + WM_event_add_notifier(C, WM_NOTE_TIMELINE_SYNC, V2D_LOCK_COPY, v2d); } /* handle user input for scrollers - calculations of mouse-movement need to be done here, not in the apply callback! */ diff --git a/source/blender/editors/screen/area.c b/source/blender/editors/screen/area.c index da7c38819a2..81bb67bb85b 100644 --- a/source/blender/editors/screen/area.c +++ b/source/blender/editors/screen/area.c @@ -104,7 +104,7 @@ void ED_region_pixelspace(const bContext *C, ARegion *ar) void ED_region_do_listen(ARegion *ar, wmNotifier *note) { - + /* generic notes first */ switch(note->type) { case WM_NOTE_WINDOW_REDRAW: diff --git a/source/blender/editors/space_time/space_time.c b/source/blender/editors/space_time/space_time.c index 182f0a02f6c..9667e132e09 100644 --- a/source/blender/editors/space_time/space_time.c +++ b/source/blender/editors/space_time/space_time.c @@ -162,6 +162,15 @@ 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) { + case WM_NOTE_TIMELINE_SYNC: + if(ar->v2d.flag & V2D_VIEWSYNC_X) { + ar->do_draw= 1; /* XXX GAH! */ + UI_view2d_sync(&ar->v2d, wmn->data, wmn->value); + } + break; + } } /* ************************ header time area region *********************** */ diff --git a/source/blender/editors/space_time/time_header.c b/source/blender/editors/space_time/time_header.c index c87f46760e0..dd222292674 100644 --- a/source/blender/editors/space_time/time_header.c +++ b/source/blender/editors/space_time/time_header.c @@ -189,11 +189,11 @@ static void do_time_viewmenu(bContext *C, void *arg, int event) break; case 11: if(v2d) { - //v2d->flag ^= V2D_VIEWSYNC_X; - //if(v2d->flag & V2D_VIEWSYNC_X) - // view2d_do_locks(curarea, 0); + v2d->flag ^= V2D_VIEWSYNC_X; + if(v2d->flag & V2D_VIEWSYNC_X) + WM_event_add_notifier(C, WM_NOTE_TIMELINE_SYNC, 0, v2d); /* XXX can notifier be called after data free? */ } - break; + break; case 12: /* only show keyframes from selected data */ stime->flag ^= TIME_ONLYACTSEL; WM_event_add_notifier(C, WM_NOTE_AREA_REDRAW, 0, NULL); diff --git a/source/blender/windowmanager/WM_types.h b/source/blender/windowmanager/WM_types.h index c8ca8195db0..b301976aeae 100644 --- a/source/blender/windowmanager/WM_types.h +++ b/source/blender/windowmanager/WM_types.h @@ -115,7 +115,11 @@ enum { WM_NOTE_AREA_REDRAW, WM_NOTE_REGION_REDRAW, WM_NOTE_GESTURE_REDRAW, + + WM_NOTE_TIMELINE_SYNC, + WM_NOTE_OBJECT_CHANGED, + WM_NOTE_LAST }; diff --git a/source/blender/windowmanager/intern/wm_event_system.c b/source/blender/windowmanager/intern/wm_event_system.c index 6aa8c980456..605d076a7bc 100644 --- a/source/blender/windowmanager/intern/wm_event_system.c +++ b/source/blender/windowmanager/intern/wm_event_system.c @@ -102,13 +102,14 @@ void WM_event_add_notifier(bContext *C, int type, int value, void *data) note->window= C->window; - /* catch global notifications here */ + /* catch local notifications here */ switch (type) { - case WM_NOTE_WINDOW_REDRAW: - case WM_NOTE_SCREEN_CHANGED: - break; - default: - if(C->region) note->swinid= C->region->swinid; + case WM_NOTE_AREA_REDRAW: + case WM_NOTE_REGION_REDRAW: + case WM_NOTE_GESTURE_REDRAW: + if(C->region) + note->swinid= C->region->swinid; + break; } note->type= type; @@ -174,8 +175,7 @@ void wm_event_do_notifiers(bContext *C) C->window= NULL; C->screen= NULL; } - if(note->data) - MEM_freeN(note->data); + MEM_freeN(note); } } |