diff options
author | Martin Poirier <theeth@yahoo.com> | 2010-02-20 23:29:09 +0300 |
---|---|---|
committer | Martin Poirier <theeth@yahoo.com> | 2010-02-20 23:29:09 +0300 |
commit | aa67aa9ecc05efeb2546e41d85f6975e77157e3d (patch) | |
tree | 1465032d2ddd648e1887768f441960bfbc91520c /source/blender/editors/transform | |
parent | 02e7871149fb369a12725a319cb09accad7790b9 (diff) |
Split numinput from transform (reusable in other operator).
Use in marker move operator.
Diffstat (limited to 'source/blender/editors/transform')
-rw-r--r-- | source/blender/editors/transform/transform.c | 8 | ||||
-rw-r--r-- | source/blender/editors/transform/transform.h | 29 | ||||
-rw-r--r-- | source/blender/editors/transform/transform_numinput.c | 299 |
3 files changed, 5 insertions, 331 deletions
diff --git a/source/blender/editors/transform/transform.c b/source/blender/editors/transform/transform.c index b6d0d3d3cc5..fcbadf5b7a6 100644 --- a/source/blender/editors/transform/transform.c +++ b/source/blender/editors/transform/transform.c @@ -496,8 +496,8 @@ wmKeyMap* transform_modal_keymap(wmKeyConfig *keyconf) {TFM_MODAL_CONS_OFF, "CONS_OFF", 0, "Remove Constraints", ""}, {TFM_MODAL_ADD_SNAP, "ADD_SNAP", 0, "Add Snap Point", ""}, {TFM_MODAL_REMOVE_SNAP, "REMOVE_SNAP", 0, "Remove Last Snap Point", ""}, - {TFM_MODAL_INCREMENT_UP, "INCREMENT_UP", 0, "Numinput Increment Up", ""}, - {TFM_MODAL_INCREMENT_DOWN, "INCREMENT_DOWN", 0, "Numinput Increment Down", ""}, + {NUM_MODAL_INCREMENT_UP, "INCREMENT_UP", 0, "Numinput Increment Up", ""}, + {NUM_MODAL_INCREMENT_DOWN, "INCREMENT_DOWN", 0, "Numinput Increment Down", ""}, {0, NULL, 0, NULL, NULL}}; 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, 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, DOWNARROWKEY, KM_PRESS, 0, 0, TFM_MODAL_INCREMENT_DOWN); + WM_modalkeymap_add_item(keymap, UPARROWKEY, KM_PRESS, 0, 0, NUM_MODAL_INCREMENT_UP); + WM_modalkeymap_add_item(keymap, DOWNARROWKEY, KM_PRESS, 0, 0, NUM_MODAL_INCREMENT_DOWN); return keymap; } diff --git a/source/blender/editors/transform/transform.h b/source/blender/editors/transform/transform.h index 42f30e48cad..6a0c51da370 100644 --- a/source/blender/editors/transform/transform.h +++ b/source/blender/editors/transform/transform.h @@ -31,6 +31,7 @@ #define TRANSFORM_H #include "ED_transform.h" +#include "ED_numinput.h" #include "DNA_listBase.h" @@ -68,14 +69,6 @@ typedef struct NDofInput { float factor[3]; } 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: @@ -334,13 +327,6 @@ typedef struct TransInfo { /* ******************** 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 */ #define NDOF_INIT 1 @@ -678,17 +664,6 @@ void calculatePropRatio(TransInfo *t); 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 ********************************/ void initNDofInput(NDofInput *n); @@ -733,5 +708,3 @@ int createSpaceNormalTangent(float mat[3][3], float normal[3], float tangent[3]) void freeSlideVerts(TransInfo *t); #endif - - diff --git a/source/blender/editors/transform/transform_numinput.c b/source/blender/editors/transform/transform_numinput.c deleted file mode 100644 index 8d1901348f8..00000000000 --- a/source/blender/editors/transform/transform_numinput.c +++ /dev/null @@ -1,299 +0,0 @@ -/** - * $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. - * - * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV. - * All rights reserved. - * - * The Original Code is: all of this file. - * - * Contributor(s): Jonathan Smith - * - * ***** END GPL LICENSE BLOCK ***** - */ - -#include <math.h> /* fabs */ -#include <stdio.h> /* for sprintf */ - -#include "BKE_global.h" /* for G */ -#include "BKE_utildefines.h" /* ABS */ - -#include "WM_types.h" -#include "DNA_windowmanager_types.h" - -#include "transform.h" - -/* ************************** Functions *************************** */ - -/* ************************** NUMINPUT **************************** */ - -void initNumInput(NumInput *n) -{ - n->flag = - n->idx = - n->idx_max = - n->inv[0] = - n->inv[1] = - n->inv[2] = - n->ctrl[0] = - n->ctrl[1] = - n->ctrl[2] = 0; - - n->val[0] = - n->val[1] = - n->val[2] = 0.0f; -} - -void outputNumInput(NumInput *n, char *str) -{ - char cur; - char inv[] = "1/"; - short i, j; - - for (j=0; j<=n->idx_max; j++) { - /* if AFFECTALL and no number typed and cursor not on number, use first number */ - if (n->flag & NUM_AFFECT_ALL && n->idx != j && n->ctrl[j] == 0) - i = 0; - else - i = j; - - if (n->idx != i) - cur = ' '; - else - cur = '|'; - - if (n->inv[i]) - inv[0] = '1'; - else - inv[0] = 0; - - if( n->val[i] > 1e10 || n->val[i] < -1e10 ) - sprintf(&str[j*20], "%s%.4e%c", inv, n->val[i], cur); - else - switch (n->ctrl[i]) { - case 0: - sprintf(&str[j*20], "%sNONE%c", inv, cur); - break; - case 1: - case -1: - sprintf(&str[j*20], "%s%.0f%c", inv, n->val[i], cur); - break; - case 10: - case -10: - sprintf(&str[j*20], "%s%.f.%c", inv, n->val[i], cur); - break; - case 100: - case -100: - sprintf(&str[j*20], "%s%.1f%c", inv, n->val[i], cur); - break; - case 1000: - case -1000: - sprintf(&str[j*20], "%s%.2f%c", inv, n->val[i], cur); - break; - case 10000: - case -10000: - sprintf(&str[j*20], "%s%.3f%c", inv, n->val[i], cur); - break; - default: - sprintf(&str[j*20], "%s%.4e%c", inv, n->val[i], cur); - } - } -} - -short hasNumInput(NumInput *n) -{ - short i; - - for (i=0; i<=n->idx_max; i++) { - if (n->ctrl[i]) - return 1; - } - - return 0; -} - -void applyNumInput(NumInput *n, float *vec) -{ - short i, j; - - if (hasNumInput(n)) { - for (j=0; j<=n->idx_max; j++) { - /* if AFFECTALL and no number typed and cursor not on number, use first number */ - if (n->flag & NUM_AFFECT_ALL && n->idx != j && n->ctrl[j] == 0) - i = 0; - else - i = j; - - if (n->ctrl[i] == 0 && n->flag & NUM_NULL_ONE) { - vec[j] = 1.0f; - } - else if (n->val[i] == 0.0f && n->flag & NUM_NO_ZERO) { - vec[j] = 0.0001f; - } - else { - if (n->inv[i]) - { - vec[j] = 1.0f / n->val[i]; - } - else - { - vec[j] = n->val[i]; - } - } - } - } -} - -char handleNumInput(NumInput *n, wmEvent *event, float increment) -{ - float Val = 0; - short idx = n->idx, idx_max = n->idx_max; - - if (event->type == EVT_MODAL_MAP) { - switch (event->val) { - case TFM_MODAL_INCREMENT_UP: - if (!n->ctrl[idx]) - n->ctrl[idx] = 1; - - n->val[idx] += increment; - break; - case TFM_MODAL_INCREMENT_DOWN: - if (!n->ctrl[idx]) - n->ctrl[idx] = 1; - - n->val[idx] -= increment; - break; - default: - return 0; - } - } else { - switch (event->type) { - case BACKSPACEKEY: - if (n->ctrl[idx] == 0) { - n->val[0] = - n->val[1] = - n->val[2] = 0.0f; - n->ctrl[0] = - n->ctrl[1] = - n->ctrl[2] = 0; - n->inv[0] = - n->inv[1] = - n->inv[2] = 0; - } - else { - n->val[idx] = 0.0f; - n->ctrl[idx] = 0; - n->inv[idx] = 0; - } - break; - case PERIODKEY: - case PADPERIOD: - if (n->flag & NUM_NO_FRACTION) - break; - - switch (n->ctrl[idx]) - { - case 0: - case 1: - n->ctrl[idx] = 10; - break; - case -1: - n->ctrl[idx] = -10; - } - break; - case PADMINUS: - if(event->alt) - break; - case MINUSKEY: - if (n->flag & NUM_NO_NEGATIVE) - break; - - if (n->ctrl[idx]) { - n->ctrl[idx] *= -1; - n->val[idx] *= -1; - } - else - n->ctrl[idx] = -1; - break; - case PADSLASHKEY: - case SLASHKEY: - n->inv[idx] = !n->inv[idx]; - break; - case TABKEY: - idx++; - if (idx > idx_max) - idx = 0; - n->idx = idx; - break; - case PAD9: - case NINEKEY: - Val += 1.0f; - case PAD8: - case EIGHTKEY: - Val += 1.0f; - case PAD7: - case SEVENKEY: - Val += 1.0f; - case PAD6: - case SIXKEY: - Val += 1.0f; - case PAD5: - case FIVEKEY: - Val += 1.0f; - case PAD4: - case FOURKEY: - Val += 1.0f; - case PAD3: - case THREEKEY: - Val += 1.0f; - case PAD2: - case TWOKEY: - Val += 1.0f; - case PAD1: - case ONEKEY: - Val += 1.0f; - case PAD0: - case ZEROKEY: - if (!n->ctrl[idx]) - n->ctrl[idx] = 1; - - if (fabs(n->val[idx]) > 9999999.0f); - else if (n->ctrl[idx] == 1) { - n->val[idx] *= 10; - n->val[idx] += Val; - } - else if (n->ctrl[idx] == -1) { - n->val[idx] *= 10; - n->val[idx] -= Val; - } - else { - /* float resolution breaks when over six digits after comma */ - if( ABS(n->ctrl[idx]) < 10000000) { - n->val[idx] += Val / (float)n->ctrl[idx]; - n->ctrl[idx] *= 10; - } - } - break; - default: - return 0; - } - } - - /* REDRAW SINCE NUMBERS HAVE CHANGED */ - return 1; -} |