[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [17700] branches/blender2.5/blender/source /blender: 2.5
Ton Roosendaal
ton at blender.org
Wed Dec 3 20:33:42 CET 2008
Revision: 17700
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=17700
Author: ton
Date: 2008-12-03 20:33:42 +0100 (Wed, 03 Dec 2008)
Log Message:
-----------
2.5
Fun commit for test: the Repeat Last option.
Only the split-area Operator is now added on stack, so that's the only
one that works. Just split an area, and press F4 to repeat it anywhere.
Modified Paths:
--------------
branches/blender2.5/blender/source/blender/editors/include/ED_screen.h
branches/blender2.5/blender/source/blender/editors/screen/area.c
branches/blender2.5/blender/source/blender/editors/screen/screen_ops.c
branches/blender2.5/blender/source/blender/editors/space_time/time_ops.c
branches/blender2.5/blender/source/blender/windowmanager/intern/wm.c
branches/blender2.5/blender/source/blender/windowmanager/intern/wm_event_system.c
Modified: branches/blender2.5/blender/source/blender/editors/include/ED_screen.h
===================================================================
--- branches/blender2.5/blender/source/blender/editors/include/ED_screen.h 2008-12-03 18:14:52 UTC (rev 17699)
+++ branches/blender2.5/blender/source/blender/editors/include/ED_screen.h 2008-12-03 19:33:42 UTC (rev 17700)
@@ -43,7 +43,7 @@
void ED_region_do_draw(struct bContext *C, ARegion *ar);
void ED_region_do_refresh(struct bContext *C, ARegion *ar);
void ED_region_exit(struct bContext *C, ARegion *ar);
-void ED_region_pixelspace(struct bContext *C, ARegion *ar);
+void ED_region_pixelspace(const struct bContext *C, ARegion *ar);
/* spaces */
void ED_spacetypes_init(void);
Modified: branches/blender2.5/blender/source/blender/editors/screen/area.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/screen/area.c 2008-12-03 18:14:52 UTC (rev 17699)
+++ branches/blender2.5/blender/source/blender/editors/screen/area.c 2008-12-03 19:33:42 UTC (rev 17700)
@@ -90,7 +90,7 @@
glDisable( GL_BLEND );
}
-void ED_region_pixelspace(bContext *C, ARegion *ar)
+void ED_region_pixelspace(const bContext *C, ARegion *ar)
{
int width= ar->winrct.xmax-ar->winrct.xmin+1;
int height= ar->winrct.ymax-ar->winrct.ymin+1;
Modified: branches/blender2.5/blender/source/blender/editors/screen/screen_ops.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/screen/screen_ops.c 2008-12-03 18:14:52 UTC (rev 17699)
+++ branches/blender2.5/blender/source/blender/editors/screen/screen_ops.c 2008-12-03 19:33:42 UTC (rev 17700)
@@ -678,7 +678,8 @@
int origval; /* for move areas */
int bigger, smaller; /* constraints for moving new edge */
int delta; /* delta move edge */
-
+ int origmin, origsize; /* to calculate fac, for property storage */
+
ScrEdge *nedge; /* new edge */
ScrArea *sarea; /* start area */
ScrArea *narea; /* new area */
@@ -705,6 +706,8 @@
op->customdata= sd;
sd->sarea= C->area;
+ sd->origsize= dir=='v' ? C->area->winx:C->area->winy;
+ sd->origmin = dir=='v' ? C->area->totrct.xmin:C->area->totrct.ymin;
return 1;
}
@@ -877,6 +880,7 @@
static int area_split_modal(bContext *C, wmOperator *op, wmEvent *event)
{
sAreaSplitData *sd= (sAreaSplitData *)op->customdata;
+ float fac;
int dir;
/* execute the events */
@@ -887,6 +891,9 @@
sd->delta= (dir == 'v')? event->x - sd->origval: event->y - sd->origval;
area_move_apply_do(C, sd->origval, sd->delta, dir, sd->bigger, sd->smaller);
+ 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);
break;
@@ -920,7 +927,8 @@
ot->modal= area_split_modal;
ot->poll= ED_operator_areaactive;
-
+ ot->flag= OPTYPE_REGISTER;
+
/* rna */
prop= RNA_def_property(ot->srna, "dir", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_items(prop, prop_direction_items);
@@ -1210,6 +1218,33 @@
RNA_def_property_int_default(prop, -100);
}
+/* ************** repeat last operator ***************************** */
+
+static int repeat_last_exec(bContext *C, wmOperator *op)
+{
+ wmOperator *lastop= C->wm->operators.last;
+
+ if(lastop) {
+ printf("repeat %s\n", op->type->idname);
+ lastop->type->exec(C, lastop);
+ }
+
+ return OPERATOR_FINISHED;
+}
+
+void ED_SCR_OT_repeat_last(wmOperatorType *ot)
+{
+ /* identifiers */
+ ot->name= "Repeat Last";
+ ot->idname= "ED_SCR_OT_repeat_last";
+
+ /* api callbacks */
+ ot->exec= repeat_last_exec;
+
+ ot->poll= ED_operator_screenactive;
+
+}
+
/* ************** border select operator (template) ***************************** */
/* operator state vars used: (added by default WM callbacks)
@@ -1276,6 +1311,7 @@
/* generic UI stuff */
WM_operatortype_append(ED_SCR_OT_cursor_type);
WM_operatortype_append(ED_SCR_OT_actionzone);
+ WM_operatortype_append(ED_SCR_OT_repeat_last);
/* screen tools */
WM_operatortype_append(ED_SCR_OT_area_move);
@@ -1302,5 +1338,6 @@
WM_keymap_verify_item(&wm->screenkeymap, "ED_SCR_OT_area_join", EVT_ACTIONZONE, 0, 0, 0); /* action tria */
WM_keymap_verify_item(&wm->screenkeymap, "ED_SCR_OT_area_rip", RKEY, KM_PRESS, KM_ALT, 0);
+ WM_keymap_verify_item(&wm->screenkeymap, "ED_SCR_OT_repeat_last", F4KEY, KM_PRESS, 0, 0);
}
Modified: branches/blender2.5/blender/source/blender/editors/space_time/time_ops.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/space_time/time_ops.c 2008-12-03 18:14:52 UTC (rev 17699)
+++ branches/blender2.5/blender/source/blender/editors/space_time/time_ops.c 2008-12-03 19:33:42 UTC (rev 17700)
@@ -85,7 +85,7 @@
if(cfra!=CFRA)
CFRA= cfra;
- WM_event_add_notifier(C, WM_NOTE_SCREEN_CHANGED, 0, NULL);
+ WM_event_add_notifier(C, WM_NOTE_WINDOW_REDRAW, 0, NULL);
/* XXX: add WM_NOTE_TIME_CHANGED? */
}
Modified: branches/blender2.5/blender/source/blender/windowmanager/intern/wm.c
===================================================================
--- branches/blender2.5/blender/source/blender/windowmanager/intern/wm.c 2008-12-03 18:14:52 UTC (rev 17699)
+++ branches/blender2.5/blender/source/blender/windowmanager/intern/wm.c 2008-12-03 19:33:42 UTC (rev 17700)
@@ -75,8 +75,8 @@
int tot;
if(op->ptr) {
- MEM_freeN(op->ptr);
- op->ptr= NULL;
+ // MEM_freeN(op->ptr);
+ // op->ptr= NULL;
}
BLI_addtail(&wm->operators, op);
Modified: branches/blender2.5/blender/source/blender/windowmanager/intern/wm_event_system.c
===================================================================
--- branches/blender2.5/blender/source/blender/windowmanager/intern/wm_event_system.c 2008-12-03 18:14:52 UTC (rev 17699)
+++ branches/blender2.5/blender/source/blender/windowmanager/intern/wm_event_system.c 2008-12-03 19:33:42 UTC (rev 17700)
@@ -602,21 +602,14 @@
wmEventHandler *WM_event_add_modal_handler(bContext *C, ListBase *handlers, wmOperator *op)
{
- /* debug test; operator not in registry */
- if(op->type->flag & OPTYPE_REGISTER) {
- printf("error: handler (%s) cannot be modal, was registered\n", op->type->idname);
- }
- else {
- wmEventHandler *handler= MEM_callocN(sizeof(wmEventHandler), "event handler");
- handler->op= op;
- handler->op_area= C->area; /* means frozen screen context for modal handlers! */
- handler->op_region= C->region;
-
- BLI_addhead(handlers, handler);
-
- return handler;
- }
- return NULL;
+ wmEventHandler *handler= MEM_callocN(sizeof(wmEventHandler), "event handler");
+ handler->op= op;
+ handler->op_area= C->area; /* means frozen screen context for modal handlers! */
+ handler->op_region= C->region;
+
+ BLI_addhead(handlers, handler);
+
+ return handler;
}
wmEventHandler *WM_event_add_keymap_handler(ListBase *handlers, ListBase *keymap)
More information about the Bf-blender-cvs
mailing list