Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTon Roosendaal <ton@blender.org>2008-12-15 21:09:55 +0300
committerTon Roosendaal <ton@blender.org>2008-12-15 21:09:55 +0300
commit628f02d57482e987069c6b9969da309db84dbadd (patch)
treeaf21b3eea1710a65268fc46891512c09091a1652 /source/blender
parenta16df53619a2ab3b41c0cbcf6f9e01a9bf370c9c (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.h7
-rw-r--r--source/blender/editors/interface/view2d.c15
-rw-r--r--source/blender/editors/interface/view2d_ops.c12
-rw-r--r--source/blender/editors/screen/area.c2
-rw-r--r--source/blender/editors/space_time/space_time.c9
-rw-r--r--source/blender/editors/space_time/time_header.c8
-rw-r--r--source/blender/windowmanager/WM_types.h4
-rw-r--r--source/blender/windowmanager/intern/wm_event_system.c16
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);
}
}