Split numinput from transform (reusable in other operator).
Use in marker move operator.
This commit is contained in:
@@ -67,6 +67,7 @@
|
|||||||
#include "ED_screen.h"
|
#include "ED_screen.h"
|
||||||
#include "ED_types.h"
|
#include "ED_types.h"
|
||||||
#include "ED_util.h"
|
#include "ED_util.h"
|
||||||
|
#include "ED_numinput.h"
|
||||||
|
|
||||||
/* ************* Marker API **************** */
|
/* ************* Marker API **************** */
|
||||||
|
|
||||||
@@ -407,6 +408,7 @@ typedef struct MarkerMove {
|
|||||||
ListBase *markers;
|
ListBase *markers;
|
||||||
int event_type; /* store invoke-event, to verify */
|
int event_type; /* store invoke-event, to verify */
|
||||||
int *oldframe, evtx, firstx;
|
int *oldframe, evtx, firstx;
|
||||||
|
NumInput num;
|
||||||
} MarkerMove;
|
} MarkerMove;
|
||||||
|
|
||||||
/* copy selection to temp buffer */
|
/* copy selection to temp buffer */
|
||||||
@@ -431,6 +433,10 @@ static int ed_marker_move_init(bContext *C, wmOperator *op)
|
|||||||
mm->markers= markers;
|
mm->markers= markers;
|
||||||
mm->oldframe= MEM_callocN(totmark*sizeof(int), "MarkerMove oldframe");
|
mm->oldframe= MEM_callocN(totmark*sizeof(int), "MarkerMove oldframe");
|
||||||
|
|
||||||
|
initNumInput(&mm->num);
|
||||||
|
mm->num.idx_max = 0; /* one axis */
|
||||||
|
mm->num.flag |= NUM_NO_FRACTION;
|
||||||
|
|
||||||
for (a=0, marker= markers->first; marker; marker= marker->next) {
|
for (a=0, marker= markers->first; marker; marker= marker->next) {
|
||||||
if (marker->flag & SELECT) {
|
if (marker->flag & SELECT) {
|
||||||
mm->oldframe[a]= marker->frame;
|
mm->oldframe[a]= marker->frame;
|
||||||
@@ -518,6 +524,8 @@ static int ed_marker_move_modal(bContext *C, wmOperator *op, wmEvent *evt)
|
|||||||
ed_marker_move_cancel(C, op);
|
ed_marker_move_cancel(C, op);
|
||||||
return OPERATOR_CANCELLED;
|
return OPERATOR_CANCELLED;
|
||||||
|
|
||||||
|
case RETKEY:
|
||||||
|
case PADENTER:
|
||||||
case LEFTMOUSE:
|
case LEFTMOUSE:
|
||||||
case MIDDLEMOUSE:
|
case MIDDLEMOUSE:
|
||||||
case RIGHTMOUSE:
|
case RIGHTMOUSE:
|
||||||
@@ -529,6 +537,9 @@ static int ed_marker_move_modal(bContext *C, wmOperator *op, wmEvent *evt)
|
|||||||
|
|
||||||
break;
|
break;
|
||||||
case MOUSEMOVE:
|
case MOUSEMOVE:
|
||||||
|
if(hasNumInput(&mm->num))
|
||||||
|
break;
|
||||||
|
|
||||||
dx= v2d->mask.xmax-v2d->mask.xmin;
|
dx= v2d->mask.xmax-v2d->mask.xmin;
|
||||||
dx= (v2d->cur.xmax-v2d->cur.xmin)/dx;
|
dx= (v2d->cur.xmax-v2d->cur.xmin)/dx;
|
||||||
|
|
||||||
@@ -602,6 +613,26 @@ static int ed_marker_move_modal(bContext *C, wmOperator *op, wmEvent *evt)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(evt->val==KM_PRESS) {
|
||||||
|
float vec[3];
|
||||||
|
char str_tx[256];
|
||||||
|
|
||||||
|
if (handleNumInput(&mm->num, evt, 1.0))
|
||||||
|
{
|
||||||
|
applyNumInput(&mm->num, vec);
|
||||||
|
outputNumInput(&mm->num, str_tx);
|
||||||
|
|
||||||
|
RNA_int_set(op->ptr, "frames", vec[0]);
|
||||||
|
ed_marker_move_apply(C, op);
|
||||||
|
// ed_marker_header_update(C, op, str, (int)vec[0]);
|
||||||
|
// strcat(str, str_tx);
|
||||||
|
sprintf(str, "Marker offset %s", str_tx);
|
||||||
|
ED_area_headerprint(CTX_wm_area(C), str);
|
||||||
|
|
||||||
|
WM_event_add_notifier(C, NC_SCENE|ND_MARKERS, NULL);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return OPERATOR_RUNNING_MODAL;
|
return OPERATOR_RUNNING_MODAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
56
source/blender/editors/include/ED_numinput.h
Normal file
56
source/blender/editors/include/ED_numinput.h
Normal file
@@ -0,0 +1,56 @@
|
|||||||
|
/**
|
||||||
|
* $Id:
|
||||||
|
*
|
||||||
|
* ***** BEGIN GPL LICENSE BLOCK *****
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU General Public License
|
||||||
|
* as published by the Free Software Foundation; either version 2
|
||||||
|
* of the License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software Foundation,
|
||||||
|
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
|
*
|
||||||
|
* Contributor(s): none yet.
|
||||||
|
*
|
||||||
|
* ***** END GPL LICENSE BLOCK *****
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef ED_NUMINPUT_H
|
||||||
|
#define ED_NUMINPUT_H
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct NumInput {
|
||||||
|
short idx;
|
||||||
|
short idx_max;
|
||||||
|
short flag; /* Different flags to indicate different behaviors */
|
||||||
|
char inv[3]; /* If the value is inverted or not */
|
||||||
|
float val[3]; /* Direct value of the input */
|
||||||
|
int ctrl[3]; /* Control to indicate what to do with the numbers that are typed */
|
||||||
|
} NumInput ;
|
||||||
|
|
||||||
|
/* NUMINPUT FLAGS */
|
||||||
|
#define NUM_NULL_ONE 2
|
||||||
|
#define NUM_NO_NEGATIVE 4
|
||||||
|
#define NUM_NO_ZERO 8
|
||||||
|
#define NUM_NO_FRACTION 16
|
||||||
|
#define NUM_AFFECT_ALL 32
|
||||||
|
|
||||||
|
/*********************** NumInput ********************************/
|
||||||
|
|
||||||
|
void initNumInput(NumInput *n);
|
||||||
|
void outputNumInput(NumInput *n, char *str);
|
||||||
|
short hasNumInput(NumInput *n);
|
||||||
|
void applyNumInput(NumInput *n, float *vec);
|
||||||
|
char handleNumInput(NumInput *n, struct wmEvent *event, float increment);
|
||||||
|
|
||||||
|
#define NUM_MODAL_INCREMENT_UP 18
|
||||||
|
#define NUM_MODAL_INCREMENT_DOWN 19
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -496,8 +496,8 @@ wmKeyMap* transform_modal_keymap(wmKeyConfig *keyconf)
|
|||||||
{TFM_MODAL_CONS_OFF, "CONS_OFF", 0, "Remove Constraints", ""},
|
{TFM_MODAL_CONS_OFF, "CONS_OFF", 0, "Remove Constraints", ""},
|
||||||
{TFM_MODAL_ADD_SNAP, "ADD_SNAP", 0, "Add Snap Point", ""},
|
{TFM_MODAL_ADD_SNAP, "ADD_SNAP", 0, "Add Snap Point", ""},
|
||||||
{TFM_MODAL_REMOVE_SNAP, "REMOVE_SNAP", 0, "Remove Last Snap Point", ""},
|
{TFM_MODAL_REMOVE_SNAP, "REMOVE_SNAP", 0, "Remove Last Snap Point", ""},
|
||||||
{TFM_MODAL_INCREMENT_UP, "INCREMENT_UP", 0, "Numinput Increment Up", ""},
|
{NUM_MODAL_INCREMENT_UP, "INCREMENT_UP", 0, "Numinput Increment Up", ""},
|
||||||
{TFM_MODAL_INCREMENT_DOWN, "INCREMENT_DOWN", 0, "Numinput Increment Down", ""},
|
{NUM_MODAL_INCREMENT_DOWN, "INCREMENT_DOWN", 0, "Numinput Increment Down", ""},
|
||||||
{0, NULL, 0, NULL, NULL}};
|
{0, NULL, 0, NULL, NULL}};
|
||||||
|
|
||||||
wmKeyMap *keymap= WM_modalkeymap_get(keyconf, "Transform Modal Map");
|
wmKeyMap *keymap= WM_modalkeymap_get(keyconf, "Transform Modal Map");
|
||||||
@@ -525,8 +525,8 @@ wmKeyMap* transform_modal_keymap(wmKeyConfig *keyconf)
|
|||||||
WM_modalkeymap_add_item(keymap, AKEY, KM_PRESS, 0, 0, TFM_MODAL_ADD_SNAP);
|
WM_modalkeymap_add_item(keymap, AKEY, KM_PRESS, 0, 0, TFM_MODAL_ADD_SNAP);
|
||||||
WM_modalkeymap_add_item(keymap, AKEY, KM_PRESS, KM_ALT, 0, TFM_MODAL_REMOVE_SNAP);
|
WM_modalkeymap_add_item(keymap, AKEY, KM_PRESS, KM_ALT, 0, TFM_MODAL_REMOVE_SNAP);
|
||||||
|
|
||||||
WM_modalkeymap_add_item(keymap, UPARROWKEY, KM_PRESS, 0, 0, TFM_MODAL_INCREMENT_UP);
|
WM_modalkeymap_add_item(keymap, UPARROWKEY, KM_PRESS, 0, 0, NUM_MODAL_INCREMENT_UP);
|
||||||
WM_modalkeymap_add_item(keymap, DOWNARROWKEY, KM_PRESS, 0, 0, TFM_MODAL_INCREMENT_DOWN);
|
WM_modalkeymap_add_item(keymap, DOWNARROWKEY, KM_PRESS, 0, 0, NUM_MODAL_INCREMENT_DOWN);
|
||||||
|
|
||||||
return keymap;
|
return keymap;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -31,6 +31,7 @@
|
|||||||
#define TRANSFORM_H
|
#define TRANSFORM_H
|
||||||
|
|
||||||
#include "ED_transform.h"
|
#include "ED_transform.h"
|
||||||
|
#include "ED_numinput.h"
|
||||||
|
|
||||||
#include "DNA_listBase.h"
|
#include "DNA_listBase.h"
|
||||||
|
|
||||||
@@ -68,14 +69,6 @@ typedef struct NDofInput {
|
|||||||
float factor[3];
|
float factor[3];
|
||||||
} NDofInput;
|
} NDofInput;
|
||||||
|
|
||||||
typedef struct NumInput {
|
|
||||||
short idx;
|
|
||||||
short idx_max;
|
|
||||||
short flag; /* Different flags to indicate different behaviors */
|
|
||||||
char inv[3]; /* If the value is inverted or not */
|
|
||||||
float val[3]; /* Direct value of the input */
|
|
||||||
int ctrl[3]; /* Control to indicate what to do with the numbers that are typed */
|
|
||||||
} NumInput ;
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
The ctrl value has different meaning:
|
The ctrl value has different meaning:
|
||||||
@@ -334,13 +327,6 @@ typedef struct TransInfo {
|
|||||||
|
|
||||||
/* ******************** Macros & Prototypes *********************** */
|
/* ******************** Macros & Prototypes *********************** */
|
||||||
|
|
||||||
/* NUMINPUT FLAGS */
|
|
||||||
#define NUM_NULL_ONE 2
|
|
||||||
#define NUM_NO_NEGATIVE 4
|
|
||||||
#define NUM_NO_ZERO 8
|
|
||||||
#define NUM_NO_FRACTION 16
|
|
||||||
#define NUM_AFFECT_ALL 32
|
|
||||||
|
|
||||||
/* NDOFINPUT FLAGS */
|
/* NDOFINPUT FLAGS */
|
||||||
#define NDOF_INIT 1
|
#define NDOF_INIT 1
|
||||||
|
|
||||||
@@ -678,17 +664,6 @@ void calculatePropRatio(TransInfo *t);
|
|||||||
|
|
||||||
void getViewVector(TransInfo *t, float coord[3], float vec[3]);
|
void getViewVector(TransInfo *t, float coord[3], float vec[3]);
|
||||||
|
|
||||||
/*********************** NumInput ********************************/
|
|
||||||
|
|
||||||
void initNumInput(NumInput *n);
|
|
||||||
void outputNumInput(NumInput *n, char *str);
|
|
||||||
short hasNumInput(NumInput *n);
|
|
||||||
void applyNumInput(NumInput *n, float *vec);
|
|
||||||
char handleNumInput(NumInput *n, struct wmEvent *event, float increment);
|
|
||||||
|
|
||||||
#define TFM_MODAL_INCREMENT_UP 18
|
|
||||||
#define TFM_MODAL_INCREMENT_DOWN 19
|
|
||||||
|
|
||||||
/*********************** NDofInput ********************************/
|
/*********************** NDofInput ********************************/
|
||||||
|
|
||||||
void initNDofInput(NDofInput *n);
|
void initNDofInput(NDofInput *n);
|
||||||
@@ -733,5 +708,3 @@ int createSpaceNormalTangent(float mat[3][3], float normal[3], float tangent[3])
|
|||||||
void freeSlideVerts(TransInfo *t);
|
void freeSlideVerts(TransInfo *t);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -36,7 +36,7 @@
|
|||||||
#include "WM_types.h"
|
#include "WM_types.h"
|
||||||
#include "DNA_windowmanager_types.h"
|
#include "DNA_windowmanager_types.h"
|
||||||
|
|
||||||
#include "transform.h"
|
#include "ED_numinput.h"
|
||||||
|
|
||||||
/* ************************** Functions *************************** */
|
/* ************************** Functions *************************** */
|
||||||
|
|
||||||
@@ -166,13 +166,13 @@ char handleNumInput(NumInput *n, wmEvent *event, float increment)
|
|||||||
|
|
||||||
if (event->type == EVT_MODAL_MAP) {
|
if (event->type == EVT_MODAL_MAP) {
|
||||||
switch (event->val) {
|
switch (event->val) {
|
||||||
case TFM_MODAL_INCREMENT_UP:
|
case NUM_MODAL_INCREMENT_UP:
|
||||||
if (!n->ctrl[idx])
|
if (!n->ctrl[idx])
|
||||||
n->ctrl[idx] = 1;
|
n->ctrl[idx] = 1;
|
||||||
|
|
||||||
n->val[idx] += increment;
|
n->val[idx] += increment;
|
||||||
break;
|
break;
|
||||||
case TFM_MODAL_INCREMENT_DOWN:
|
case NUM_MODAL_INCREMENT_DOWN:
|
||||||
if (!n->ctrl[idx])
|
if (!n->ctrl[idx])
|
||||||
n->ctrl[idx] = 1;
|
n->ctrl[idx] = 1;
|
||||||
|
|
||||||
@@ -204,7 +204,7 @@ char handleNumInput(NumInput *n, wmEvent *event, float increment)
|
|||||||
case PERIODKEY:
|
case PERIODKEY:
|
||||||
case PADPERIOD:
|
case PADPERIOD:
|
||||||
if (n->flag & NUM_NO_FRACTION)
|
if (n->flag & NUM_NO_FRACTION)
|
||||||
break;
|
return 0;
|
||||||
|
|
||||||
switch (n->ctrl[idx])
|
switch (n->ctrl[idx])
|
||||||
{
|
{
|
||||||
@@ -232,9 +232,15 @@ char handleNumInput(NumInput *n, wmEvent *event, float increment)
|
|||||||
break;
|
break;
|
||||||
case PADSLASHKEY:
|
case PADSLASHKEY:
|
||||||
case SLASHKEY:
|
case SLASHKEY:
|
||||||
|
if (n->flag & NUM_NO_FRACTION)
|
||||||
|
return 0;
|
||||||
|
|
||||||
n->inv[idx] = !n->inv[idx];
|
n->inv[idx] = !n->inv[idx];
|
||||||
break;
|
break;
|
||||||
case TABKEY:
|
case TABKEY:
|
||||||
|
if (idx_max == 0)
|
||||||
|
return 0;
|
||||||
|
|
||||||
idx++;
|
idx++;
|
||||||
if (idx > idx_max)
|
if (idx > idx_max)
|
||||||
idx = 0;
|
idx = 0;
|
||||||
@@ -74,7 +74,7 @@ static PyObject *Quaternion_ToEuler(QuaternionObject * self, PyObject *args)
|
|||||||
quat_to_mat3(mat, self->quat);
|
quat_to_mat3(mat, self->quat);
|
||||||
|
|
||||||
if(order == 0) mat3_to_compatible_eul(eul, eul_compat->eul, mat);
|
if(order == 0) mat3_to_compatible_eul(eul, eul_compat->eul, mat);
|
||||||
else mat3_to_compatible_eulO(eul, order, eul_compat->eul, mat);
|
else mat3_to_compatible_eulO(eul, eul_compat->eul, order, mat);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if(order == 0) quat_to_eul(eul, self->quat);
|
if(order == 0) quat_to_eul(eul, self->quat);
|
||||||
|
|||||||
Reference in New Issue
Block a user