* "Drag Immediately" transform user preference.

It's already supported within transform, was previously known as 'tweak mode' and for some odd reason was a compile time option. This brings it to a user preference (in 'Edit Methods' section).

Basically it means that you don't need the extra click at the end to confirm a drag-move transform, if you're already dragged, you can just let go of the mouse rather than needing to click again. It's a lot more comfortable when you're used to using other applications as well as blender, and much more sensible for tablets.

This started life as patch #7144 by Ed Britton, but this implementation has been changed considerably.
This commit is contained in:
2008-02-13 13:26:46 +00:00
parent 78c3692b2e
commit 08d54e71ea
6 changed files with 37 additions and 27 deletions

View File

@@ -236,6 +236,7 @@ extern UserDef U; /* from usiblender.c !!!! */
#define USER_ADD_EDITMODE (1 << 18)
#define USER_ADD_VIEWALIGNED (1 << 19)
#define USER_RELPATHS (1 << 20)
#define USER_DRAGIMMEDIATE (1 << 21)
/* viewzom */
#define USER_ZOOM_CONT 0

View File

@@ -1125,6 +1125,7 @@ void transform_action_keys (int mode, int dummy)
{
void *data;
short datatype;
short context = (U.flag & USER_DRAGIMMEDIATE)?CTX_TWEAK:CTX_NONE;
/* determine what type of data we are operating on */
data = get_action_context(&datatype);
@@ -1133,25 +1134,25 @@ void transform_action_keys (int mode, int dummy)
switch (mode) {
case 'g':
{
initTransform(TFM_TIME_TRANSLATE, CTX_NONE);
initTransform(TFM_TIME_TRANSLATE, context);
Transform();
}
break;
case 's':
{
initTransform(TFM_TIME_SCALE, CTX_NONE);
initTransform(TFM_TIME_SCALE, context);
Transform();
}
break;
case 't':
{
initTransform(TFM_TIME_SLIDE, CTX_NONE);
initTransform(TFM_TIME_SLIDE, context);
Transform();
}
break;
case 'e':
{
initTransform(TFM_TIME_EXTEND, CTX_NONE);
initTransform(TFM_TIME_EXTEND, context);
Transform();
}
break;

View File

@@ -5316,6 +5316,7 @@ void remake_ipo_transdata (TransInfo *t)
void transform_ipo (int mode)
{
short tmode;
short context = (U.flag & USER_DRAGIMMEDIATE)?CTX_TWEAK:CTX_NONE;
/* data-validation */
if (G.sipo->ipo && G.sipo->ipo->id.lib) return;
@@ -5341,12 +5342,12 @@ void transform_ipo (int mode)
get_status_editipo();
if (totipo_vertsel) {
/* we're probably in editmode, so only selected verts - transform system */
initTransform(tmode, CTX_NONE);
initTransform(tmode, context);
Transform();
}
else if (totipo_edit==0 && totipo_sel!=0) {
/* we're not in editmode, so entire curves get moved - transform system*/
initTransform(tmode, CTX_NONE);
initTransform(tmode, context);
Transform();
}
else {

View File

@@ -1010,22 +1010,24 @@ static void recalc_all_ipos(void)
void transform_nlachannel_keys(int mode, int dummy)
{
short context = (U.flag & USER_DRAGIMMEDIATE)?CTX_TWEAK:CTX_NONE;
switch (mode) {
case 'g':
{
initTransform(TFM_TIME_TRANSLATE, CTX_NONE);
initTransform(TFM_TIME_TRANSLATE, context);
Transform();
}
break;
case 's':
{
initTransform(TFM_TIME_SCALE, CTX_NONE);
initTransform(TFM_TIME_SCALE, context);
Transform();
}
break;
case 'e':
{
initTransform(TFM_TIME_EXTEND, CTX_NONE);
initTransform(TFM_TIME_EXTEND, context);
Transform();
}
break;

View File

@@ -4063,6 +4063,7 @@ void std_rmouse_transform(void (*xf_func)(int, int))
short xo, yo;
short timer=0;
short mousebut;
short context = (U.flag & USER_DRAGIMMEDIATE)?CTX_TWEAK:CTX_NONE;
/* check for left mouse select/right mouse select */
@@ -4081,15 +4082,11 @@ void std_rmouse_transform(void (*xf_func)(int, int))
getmouseco_areawin(mval);
if(abs(mval[0]-xo)+abs(mval[1]-yo) > 10) {
if(curarea->spacetype==SPACE_VIEW3D) {
#ifdef TWEAK_MODE
initTransform(TFM_TRANSLATION, CTX_TWEAK);
#else
initTransform(TFM_TRANSLATION, CTX_NONE);
#endif
initTransform(TFM_TRANSLATION, context);
Transform();
}
else if(curarea->spacetype==SPACE_IMAGE) {
initTransform(TFM_TRANSLATION, CTX_NONE);
initTransform(TFM_TRANSLATION, context);
Transform();
}
else if(xf_func)

View File

@@ -3454,33 +3454,37 @@ void drawinfospace(ScrArea *sa, void *spacedata)
else if (U.userpref == 0) { /* view & controls */
uiDefBut(block, LABEL,0,"Display:",
xpos,y6label,spref,buth,
xpos,y7label,spref,buth,
0, 0, 0, 0, 0, "");
uiBlockBeginAlign(block);
uiDefButBitI(block, TOG, USER_TOOLTIPS, 0, "Tool Tips",
(xpos+edgsp),y5,spref,buth,
(xpos+edgsp),y6,spref,buth,
&(U.flag), 0, 0, 0, 0,
"Display tooltips (help tags) over buttons");
uiDefButBitI(block, TOG, USER_DRAWVIEWINFO, B_DRAWINFO, "Object Info",
(xpos+edgsp),y4,spref,buth,
(xpos+edgsp),y5,spref,buth,
&(U.uiflag), 0, 0, 0, 0,
"Display active object name and frame number in the 3D View");
uiDefButBitI(block, TOG, USER_SCENEGLOBAL, 0, "Global Scene",
(xpos+edgsp),y3,spref,buth,
(xpos+edgsp),y4,spref,buth,
&(U.flag), 0, 0, 0, 0,
"Forces the current Scene to be displayed in all Screens");
#ifndef __APPLE__
uiDefButBitS(block, TOG, 1, 0, "Large Cursors",
(xpos+edgsp),y2,spref,buth,
(xpos+edgsp),y3,spref,buth,
&(U.curssize), 0, 0, 0, 0,
"Use large mouse cursors when available");
#else
U.curssize=0; /*Small Cursor always for OS X for now */
#endif
uiDefButBitI(block, TOG, USER_SHOW_VIEWPORTNAME, B_DRAWINFO, "View Name",
(xpos+edgsp),y1,spref,buth,
(xpos+edgsp),y2,spref,buth,
&(U.uiflag), 0, 0, 0, 0,
"Show the name of the view's direction in each 3D View");
uiDefButBitI(block, TOG, USER_SHOW_FPS, B_DRAWINFO, "Playback FPS",
(xpos+edgsp),y1,spref,buth,
&(U.uiflag), 0, 0, 0, 0,
"Show the frames per second screen refresh rate, while animation is played back");
uiBlockEndAlign(block);
uiDefBut(block, LABEL,0,"Menus:",
@@ -3622,15 +3626,11 @@ void drawinfospace(ScrArea *sa, void *spacedata)
0, 0, 0, 0, 0, "");
}
uiDefButBitI(block, TOG, USER_SHOW_FPS, B_DRAWINFO, "Display FPS in View",
(xpos+edgsp+(3*mpref)+(4*midsp)),y2,mpref,buth,
&(U.uiflag), 0, 0, 0, 0,
"Display the number of frames per secons being drawn");
/* illegal combo... */
if (U.flag & USER_LMOUSESELECT)
U.flag &= ~USER_TWOBUTTONMOUSE;
uiBlockBeginAlign(block);
uiDefButBitI(block, TOG, USER_TWOBUTTONMOUSE, B_DRAWINFO, "Emulate 3 Button Mouse",
(xpos+edgsp+(3*mpref)+(4*midsp)),y3,mpref,buth,
&(U.flag), 0, 0, 0, 0,
@@ -3741,6 +3741,14 @@ void drawinfospace(ScrArea *sa, void *spacedata)
uiBlockEndAlign(block);
uiDefBut(block, LABEL,0,"Transform:",
(xpos+(2*edgsp)+mpref),y5label, mpref,buth,
0, 0, 0, 0, 0, "");
uiDefButBitI(block, TOG, USER_DRAGIMMEDIATE, B_DRAWINFO, "Drag Immediately",
(xpos+edgsp+mpref+midsp),y4,mpref,buth,
&(U.flag), 0, 0, 0, 0, "Moving things with a mouse drag doesn't require a click to confirm (Best for tablet users)");
uiBlockEndAlign(block);
uiDefBut(block, LABEL,0,"Undo:",
(xpos+(2*edgsp)+mpref),y3label, mpref,buth,
0, 0, 0, 0, 0, "");