#include "transform.h"
+void drawTransformApply(const struct bContext *C, struct ARegion *ar, void *arg);
+
/* ************************** SPACE DEPENDANT CODE **************************** */
void setTransformViewMatrices(TransInfo *t)
}
}
-static void viewRedrawForce(bContext *C, TransInfo *t)
+static void viewRedrawForce(const bContext *C, TransInfo *t)
{
if (t->spacetype == SPACE_VIEW3D)
{
t->mval[0] = event->x - t->ar->winrct.xmin;
t->mval[1] = event->y - t->ar->winrct.ymin;
- t->redraw = 1;
+ t->redraw |= TREDRAW_SOFT;
if (t->state == TRANS_STARTING) {
t->state = TRANS_RUNNING;
restoreTransObjects(t);
initTranslation(t);
initSnapping(t, NULL); // need to reinit after mode change
- t->redraw = 1;
+ t->redraw |= TREDRAW_HARD;
}
break;
case TFM_MODAL_ROTATE:
initRotation(t);
}
initSnapping(t, NULL); // need to reinit after mode change
- t->redraw = 1;
+ t->redraw |= TREDRAW_HARD;
}
break;
case TFM_MODAL_RESIZE:
restoreTransObjects(t);
initResize(t);
initSnapping(t, NULL); // need to reinit after mode change
- t->redraw = 1;
+ t->redraw |= TREDRAW_HARD;
}
break;
case TFM_MODAL_SNAP_INV_ON:
t->modifiers |= MOD_SNAP_INVERT;
- t->redraw = 1;
+ t->redraw |= TREDRAW_HARD;
break;
case TFM_MODAL_SNAP_INV_OFF:
t->modifiers &= ~MOD_SNAP_INVERT;
- t->redraw = 1;
+ t->redraw |= TREDRAW_HARD;
break;
case TFM_MODAL_SNAP_TOGGLE:
t->modifiers ^= MOD_SNAP;
- t->redraw = 1;
+ t->redraw |= TREDRAW_HARD;
break;
case TFM_MODAL_AXIS_X:
if ((t->flag & T_NO_CONSTRAINT)==0) {
setUserConstraint(t, t->current_orientation, (CON_AXIS0), "along %s X");
}
}
- t->redraw = 1;
+ t->redraw |= TREDRAW_HARD;
}
break;
case TFM_MODAL_AXIS_Y:
setUserConstraint(t, t->current_orientation, (CON_AXIS1), "along %s Y");
}
}
- t->redraw = 1;
+ t->redraw |= TREDRAW_HARD;
}
break;
case TFM_MODAL_AXIS_Z:
else {
setUserConstraint(t, t->current_orientation, (CON_AXIS2), "along %s Z");
}
- t->redraw = 1;
+ t->redraw |= TREDRAW_HARD;
}
break;
case TFM_MODAL_PLANE_X:
else {
setUserConstraint(t, t->current_orientation, (CON_AXIS1|CON_AXIS2), "locking %s X");
}
- t->redraw = 1;
+ t->redraw |= TREDRAW_HARD;
}
break;
case TFM_MODAL_PLANE_Y:
else {
setUserConstraint(t, t->current_orientation, (CON_AXIS0|CON_AXIS2), "locking %s Y");
}
- t->redraw = 1;
+ t->redraw |= TREDRAW_HARD;
}
break;
case TFM_MODAL_PLANE_Z:
else {
setUserConstraint(t, t->current_orientation, (CON_AXIS0|CON_AXIS1), "locking %s Z");
}
- t->redraw = 1;
+ t->redraw |= TREDRAW_HARD;
}
break;
case TFM_MODAL_CONS_OFF:
if ((t->flag & T_NO_CONSTRAINT)==0) {
stopConstraint(t);
- t->redraw = 1;
+ t->redraw |= TREDRAW_HARD;
}
break;
case TFM_MODAL_ADD_SNAP:
addSnapPoint(t);
- t->redraw = 1;
+ t->redraw |= TREDRAW_HARD;
break;
case TFM_MODAL_REMOVE_SNAP:
removeSnapPoint(t);
- t->redraw = 1;
+ t->redraw |= TREDRAW_HARD;
break;
default:
handled = 0;
case LEFTSHIFTKEY:
case RIGHTSHIFTKEY:
t->modifiers |= MOD_CONSTRAINT_PLANE;
- t->redraw = 1;
+ t->redraw |= TREDRAW_HARD;
break;
case SPACEKEY:
postSelectConstraint(t);
}
}
- t->redraw = 1;
+ t->redraw |= TREDRAW_HARD;
}
break;
case ESCKEY:
restoreTransObjects(t);
initTranslation(t);
initSnapping(t, NULL); // need to reinit after mode change
- t->redraw = 1;
+ t->redraw |= TREDRAW_HARD;
}
break;
case SKEY:
restoreTransObjects(t);
initResize(t);
initSnapping(t, NULL); // need to reinit after mode change
- t->redraw = 1;
+ t->redraw |= TREDRAW_HARD;
}
break;
case RKEY:
initRotation(t);
}
initSnapping(t, NULL); // need to reinit after mode change
- t->redraw = 1;
+ t->redraw |= TREDRAW_HARD;
}
break;
case CKEY:
}
else {
stopConstraint(t);
- t->redraw = 1;
+ t->redraw |= TREDRAW_HARD;
}
break;
case XKEY:
setUserConstraint(t, V3D_MANIP_GLOBAL, (CON_AXIS1|CON_AXIS2), "locking %s X");
}
}
- t->redraw = 1;
+ t->redraw |= TREDRAW_HARD;
}
break;
case YKEY:
setUserConstraint(t, V3D_MANIP_GLOBAL, (CON_AXIS0|CON_AXIS2), "locking %s Y");
}
}
- t->redraw = 1;
+ t->redraw |= TREDRAW_HARD;
}
break;
case ZKEY:
else if (t->modifiers & MOD_CONSTRAINT_PLANE)
setUserConstraint(t, V3D_MANIP_GLOBAL, (CON_AXIS0|CON_AXIS1), "locking %s Z");
}
- t->redraw = 1;
+ t->redraw |= TREDRAW_HARD;
}
break;
case OKEY:
if (t->flag & T_PROP_EDIT && event->shift) {
t->prop_mode = (t->prop_mode + 1) % 6;
calculatePropRatio(t);
- t->redraw = 1;
+ t->redraw |= TREDRAW_HARD;
}
break;
case PADPLUSKEY:
else
{
/* Otherwise, just redraw, NDof input was cancelled */
- t->redraw = 1;
+ t->redraw |= TREDRAW_HARD;
}
break;
case NDOF_NOMOVE:
}
break;
case NDOF_REFRESH:
- t->redraw = 1;
+ t->redraw |= TREDRAW_HARD;
break;
default:
handled = 0;
case LEFTSHIFTKEY:
case RIGHTSHIFTKEY:
t->modifiers &= ~MOD_CONSTRAINT_PLANE;
- t->redraw = 1;
+ t->redraw |= TREDRAW_HARD;
break;
case MIDDLEMOUSE:
if ((t->flag & T_NO_CONSTRAINT)==0) {
t->modifiers &= ~MOD_CONSTRAINT_SELECT;
postSelectConstraint(t);
- t->redraw = 1;
+ t->redraw |= TREDRAW_HARD;
}
break;
// case LEFTMOUSE:
//calc_manipulator_stats(curarea);
initTransformOrientation(C, t);
+ t->draw_handle_apply = ED_region_draw_cb_activate(t->ar->type, drawTransformApply, t, REGION_DRAW_PRE_VIEW);
t->draw_handle_view = ED_region_draw_cb_activate(t->ar->type, drawTransformView, t, REGION_DRAW_POST_VIEW);
//t->draw_handle_pixel = ED_region_draw_cb_activate(t->ar->type, drawTransformPixel, t, REGION_DRAW_POST_PIXEL);
t->draw_handle_cursor = WM_paint_cursor_activate(CTX_wm_manager(C), NULL, drawHelpline, t);
return 1;
}
-void transformApply(bContext *C, TransInfo *t)
+void transformApply(const bContext *C, TransInfo *t)
{
- if (t->redraw)
+ if ((t->redraw & TREDRAW_HARD) || (t->draw_handle_apply == NULL && (t->redraw & TREDRAW_SOFT)))
{
selectConstraint(t);
if (t->transform) {
t->transform(t, t->mval); // calls recalcData()
viewRedrawForce(C, t);
}
- t->redraw = 0;
+ t->redraw = TREDRAW_NOTHING;
+ } else if (t->redraw & TREDRAW_SOFT) {
+ viewRedrawForce(C, t);
}
/* If auto confirm is on, break after one pass */
{
// TRANSFORM_FIX_ME
//do_screenhandlers(G.curscreen);
- t->redraw = 1;
+ t->redraw |= TREDRAW_HARD;
+ }
+}
+
+void drawTransformApply(const struct bContext *C, struct ARegion *ar, void *arg)
+{
+ TransInfo *t = arg;
+
+ if (t->redraw & TREDRAW_SOFT) {
+ t->redraw |= TREDRAW_HARD;
+ transformApply(C, t);
}
}