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:
Diffstat (limited to 'source/blender/editors/transform/transform.c')
-rw-r--r--source/blender/editors/transform/transform.c85
1 files changed, 50 insertions, 35 deletions
diff --git a/source/blender/editors/transform/transform.c b/source/blender/editors/transform/transform.c
index e8b1e6e0de1..938c0ba7cfa 100644
--- a/source/blender/editors/transform/transform.c
+++ b/source/blender/editors/transform/transform.c
@@ -122,6 +122,8 @@
#include "transform.h"
+void drawTransformApply(const struct bContext *C, struct ARegion *ar, void *arg);
+
/* ************************** SPACE DEPENDANT CODE **************************** */
void setTransformViewMatrices(TransInfo *t)
@@ -297,7 +299,7 @@ void removeAspectRatio(TransInfo *t, float *vec)
}
}
-static void viewRedrawForce(bContext *C, TransInfo *t)
+static void viewRedrawForce(const bContext *C, TransInfo *t)
{
if (t->spacetype == SPACE_VIEW3D)
{
@@ -546,7 +548,7 @@ int transformEvent(TransInfo *t, wmEvent *event)
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;
@@ -571,7 +573,7 @@ int transformEvent(TransInfo *t, wmEvent *event)
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:
@@ -589,7 +591,7 @@ int transformEvent(TransInfo *t, wmEvent *event)
initRotation(t);
}
initSnapping(t, NULL); // need to reinit after mode change
- t->redraw = 1;
+ t->redraw |= TREDRAW_HARD;
}
break;
case TFM_MODAL_RESIZE:
@@ -599,21 +601,21 @@ int transformEvent(TransInfo *t, wmEvent *event)
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) {
@@ -628,7 +630,7 @@ int transformEvent(TransInfo *t, wmEvent *event)
setUserConstraint(t, t->current_orientation, (CON_AXIS0), "along %s X");
}
}
- t->redraw = 1;
+ t->redraw |= TREDRAW_HARD;
}
break;
case TFM_MODAL_AXIS_Y:
@@ -644,7 +646,7 @@ int transformEvent(TransInfo *t, wmEvent *event)
setUserConstraint(t, t->current_orientation, (CON_AXIS1), "along %s Y");
}
}
- t->redraw = 1;
+ t->redraw |= TREDRAW_HARD;
}
break;
case TFM_MODAL_AXIS_Z:
@@ -655,7 +657,7 @@ int transformEvent(TransInfo *t, wmEvent *event)
else {
setUserConstraint(t, t->current_orientation, (CON_AXIS2), "along %s Z");
}
- t->redraw = 1;
+ t->redraw |= TREDRAW_HARD;
}
break;
case TFM_MODAL_PLANE_X:
@@ -666,7 +668,7 @@ int transformEvent(TransInfo *t, wmEvent *event)
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:
@@ -677,7 +679,7 @@ int transformEvent(TransInfo *t, wmEvent *event)
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:
@@ -688,22 +690,22 @@ int transformEvent(TransInfo *t, wmEvent *event)
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;
@@ -723,7 +725,7 @@ int transformEvent(TransInfo *t, wmEvent *event)
case LEFTSHIFTKEY:
case RIGHTSHIFTKEY:
t->modifiers |= MOD_CONSTRAINT_PLANE;
- t->redraw = 1;
+ t->redraw |= TREDRAW_HARD;
break;
case SPACEKEY:
@@ -771,7 +773,7 @@ int transformEvent(TransInfo *t, wmEvent *event)
postSelectConstraint(t);
}
}
- t->redraw = 1;
+ t->redraw |= TREDRAW_HARD;
}
break;
case ESCKEY:
@@ -788,7 +790,7 @@ int transformEvent(TransInfo *t, wmEvent *event)
restoreTransObjects(t);
initTranslation(t);
initSnapping(t, NULL); // need to reinit after mode change
- t->redraw = 1;
+ t->redraw |= TREDRAW_HARD;
}
break;
case SKEY:
@@ -798,7 +800,7 @@ int transformEvent(TransInfo *t, wmEvent *event)
restoreTransObjects(t);
initResize(t);
initSnapping(t, NULL); // need to reinit after mode change
- t->redraw = 1;
+ t->redraw |= TREDRAW_HARD;
}
break;
case RKEY:
@@ -816,7 +818,7 @@ int transformEvent(TransInfo *t, wmEvent *event)
initRotation(t);
}
initSnapping(t, NULL); // need to reinit after mode change
- t->redraw = 1;
+ t->redraw |= TREDRAW_HARD;
}
break;
case CKEY:
@@ -828,7 +830,7 @@ int transformEvent(TransInfo *t, wmEvent *event)
}
else {
stopConstraint(t);
- t->redraw = 1;
+ t->redraw |= TREDRAW_HARD;
}
break;
case XKEY:
@@ -857,7 +859,7 @@ int transformEvent(TransInfo *t, wmEvent *event)
setUserConstraint(t, V3D_MANIP_GLOBAL, (CON_AXIS1|CON_AXIS2), "locking %s X");
}
}
- t->redraw = 1;
+ t->redraw |= TREDRAW_HARD;
}
break;
case YKEY:
@@ -886,7 +888,7 @@ int transformEvent(TransInfo *t, wmEvent *event)
setUserConstraint(t, V3D_MANIP_GLOBAL, (CON_AXIS0|CON_AXIS2), "locking %s Y");
}
}
- t->redraw = 1;
+ t->redraw |= TREDRAW_HARD;
}
break;
case ZKEY:
@@ -907,14 +909,14 @@ int transformEvent(TransInfo *t, wmEvent *event)
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:
@@ -985,7 +987,7 @@ int transformEvent(TransInfo *t, wmEvent *event)
else
{
/* Otherwise, just redraw, NDof input was cancelled */
- t->redraw = 1;
+ t->redraw |= TREDRAW_HARD;
}
break;
case NDOF_NOMOVE:
@@ -996,7 +998,7 @@ int transformEvent(TransInfo *t, wmEvent *event)
}
break;
case NDOF_REFRESH:
- t->redraw = 1;
+ t->redraw |= TREDRAW_HARD;
break;
default:
handled = 0;
@@ -1013,14 +1015,14 @@ int transformEvent(TransInfo *t, wmEvent *event)
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:
@@ -1456,6 +1458,7 @@ int initTransform(bContext *C, TransInfo *t, wmOperator *op, wmEvent *event, int
//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);
@@ -1627,16 +1630,18 @@ int initTransform(bContext *C, TransInfo *t, wmOperator *op, wmEvent *event, int
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 */
@@ -1649,7 +1654,17 @@ void transformApply(bContext *C, TransInfo *t)
{
// 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);
}
}