From df274a8b58a9f3f9e4a6e34e76bb2fb2e06b7e3f Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Sun, 21 Dec 2008 08:02:24 +0000 Subject: 2.5 - Time operations to Animation Module Moved time_ops.c contents to anim_ops.c, as the operators there are applicable to all other Animation Editors too. anim_ops.c will therefore contain all operators which will apply to all Animation Editors (i.e. change frame, frames/seconds display toggle, and soon Preview Range tools). As such, added new global 'Animation' keymap like for View2D and Markers, which will ensure that these tools can be accessed in an uniform way across editors. Note that the order that these things are added is important, as the Animation ones will often 'steal' events from the View2D and Markers ones if placed before the others. To prevent that, we'd need to be able to set boundboxes here... --- source/blender/editors/space_time/time_ops.c | 161 +-------------------------- 1 file changed, 2 insertions(+), 159 deletions(-) (limited to 'source/blender/editors/space_time/time_ops.c') diff --git a/source/blender/editors/space_time/time_ops.c b/source/blender/editors/space_time/time_ops.c index e8704457c00..51808fbf623 100644 --- a/source/blender/editors/space_time/time_ops.c +++ b/source/blender/editors/space_time/time_ops.c @@ -50,175 +50,18 @@ #include "WM_api.h" #include "WM_types.h" -#include "ED_markers.h" -/* ********************** frame change operator ***************************/ - -static int change_frame_init(bContext *C, wmOperator *op) -{ - SpaceTime *stime= (SpaceTime*)CTX_wm_space_data(C); - - stime->flag |= TIME_CFRA_NUM; - - return 1; -} - -static void change_frame_apply(bContext *C, wmOperator *op) -{ - Scene *scene= CTX_data_scene(C); - int cfra; - - cfra= RNA_int_get(op->ptr, "frame"); - - if(cfra < MINFRAME) - cfra= MINFRAME; - -#if 0 - if( cfra!=CFRA || first ) - { - first= 0; - CFRA= cfra; - update_for_newframe_nodraw(0); // 1= nosound - timeline_force_draw(stime->redraws); - } - else PIL_sleep_ms(30); -#endif - - 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? */ -} - -static void change_frame_exit(bContext *C, wmOperator *op) -{ - SpaceTime *stime= (SpaceTime*)CTX_wm_space_data(C); - - stime->flag &= ~TIME_CFRA_NUM; -} - -static int change_frame_exec(bContext *C, wmOperator *op) -{ - if(!change_frame_init(C, op)) - return OPERATOR_CANCELLED; - - change_frame_apply(C, op); - change_frame_exit(C, op); - return OPERATOR_FINISHED; -} - -static int frame_from_event(bContext *C, wmEvent *event) -{ - ARegion *region= CTX_wm_region(C); - int x, y; - float viewx; - - x= event->x - region->winrct.xmin; - y= event->y - region->winrct.ymin; - UI_view2d_region_to_view(®ion->v2d, x, y, &viewx, NULL); - - return (int)floor(viewx+0.5f); -} - -static int change_frame_invoke(bContext *C, wmOperator *op, wmEvent *event) -{ - RNA_int_set(op->ptr, "frame", frame_from_event(C, event)); - change_frame_init(C, op); - change_frame_apply(C, op); - - /* add temp handler */ - WM_event_add_modal_handler(C, &CTX_wm_window(C)->handlers, op); - - return OPERATOR_RUNNING_MODAL; -} - -static int change_frame_cancel(bContext *C, wmOperator *op) -{ - change_frame_exit(C, op); - return OPERATOR_CANCELLED; -} - -static int change_frame_modal(bContext *C, wmOperator *op, wmEvent *event) -{ - /* execute the events */ - switch(event->type) { - case MOUSEMOVE: - RNA_int_set(op->ptr, "frame", frame_from_event(C, event)); - change_frame_apply(C, op); - break; - - case LEFTMOUSE: - if(event->val==0) { - change_frame_exit(C, op); - return OPERATOR_FINISHED; - } - break; - } - - return OPERATOR_RUNNING_MODAL; -} - -void ED_TIME_OT_change_frame(wmOperatorType *ot) -{ - PropertyRNA *prop; - - /* identifiers */ - ot->name= "Change frame"; - ot->idname= "ED_TIME_OT_change_frame"; - - /* api callbacks */ - ot->exec= change_frame_exec; - ot->invoke= change_frame_invoke; - ot->cancel= change_frame_cancel; - ot->modal= change_frame_modal; - - /* rna */ - prop= RNA_def_property(ot->srna, "frame", PROP_INT, PROP_NONE); -} - -/* ****************** time display toggle operator ****************************/ - -static int toggle_time_exec(bContext *C, wmOperator *op) -{ - SpaceTime *stime= (SpaceTime *)CTX_wm_space_data(C); - ScrArea *curarea= CTX_wm_area(C); - - if (ELEM(NULL, curarea, stime)) - return OPERATOR_CANCELLED; - - /* simply toggle draw frames flag for now */ - // in past, this asked user to choose in a menu beforehand, but that is clumsy - stime->flag ^= TIME_DRAWFRAMES; - - ED_area_tag_redraw(curarea); - - return OPERATOR_FINISHED; -} - -void ED_TIME_OT_toggle_time(wmOperatorType *ot) -{ - /* identifiers */ - ot->name= "Toggle Frames/Seconds"; - ot->idname= "ED_TIME_OT_toggle_time"; - - /* api callbacks */ - ot->exec= toggle_time_exec; -} +/* *************************************************/ /* ************************** registration **********************************/ void time_operatortypes(void) { - WM_operatortype_append(ED_TIME_OT_change_frame); - WM_operatortype_append(ED_TIME_OT_toggle_time); + } void time_keymap(wmWindowManager *wm) { - ListBase *keymap= WM_keymap_listbase(wm, "TimeLine", SPACE_TIME, 0); - WM_keymap_verify_item(keymap, "ED_TIME_OT_change_frame", LEFTMOUSE, KM_PRESS, 0, 0); - WM_keymap_verify_item(keymap, "ED_TIME_OT_toggle_time", TKEY, KM_PRESS, 0, 0); } -- cgit v1.2.3