diff options
-rw-r--r-- | source/blender/editors/include/UI_resources.h | 2 | ||||
-rw-r--r-- | source/blender/editors/interface/resources.c | 22 | ||||
-rw-r--r-- | source/blender/editors/space_view3d/drawobject.c | 2 | ||||
-rw-r--r-- | source/blender/editors/space_view3d/view3d_draw.c | 41 | ||||
-rw-r--r-- | source/blender/editors/space_view3d/view3d_intern.h | 1 | ||||
-rw-r--r-- | source/blender/editors/transform/transform.c | 301 | ||||
-rw-r--r-- | source/blender/editors/transform/transform.h | 9 | ||||
-rw-r--r-- | source/blender/editors/transform/transform_generics.c | 5 | ||||
-rw-r--r-- | source/blender/editors/transform/transform_input.c | 9 |
9 files changed, 287 insertions, 105 deletions
diff --git a/source/blender/editors/include/UI_resources.h b/source/blender/editors/include/UI_resources.h index d5c45740223..4062ea1851d 100644 --- a/source/blender/editors/include/UI_resources.h +++ b/source/blender/editors/include/UI_resources.h @@ -940,4 +940,6 @@ void UI_SetTheme(int spacetype, int regionid); char *UI_ThemeGetColorPtr(struct bTheme *btheme, int spacetype, int colorid); char *UI_ThemeColorsPup(int spacetype); +void UI_make_axis_color(char *src_col, char *dst_col, char axis); + #endif /* UI_ICONS_H */ diff --git a/source/blender/editors/interface/resources.c b/source/blender/editors/interface/resources.c index 8fea0a78594..661e9af178e 100644 --- a/source/blender/editors/interface/resources.c +++ b/source/blender/editors/interface/resources.c @@ -841,6 +841,28 @@ void UI_GetColorPtrBlendShade3ubv(char *cp1, char *cp2, char *col, float fac, in col[2] = b; } +void UI_make_axis_color(char *src_col, char *dst_col, char axis) +{ + switch(axis) + { + case 'x': + case 'X': + dst_col[0]= src_col[0]>219?255:src_col[0]+36; + dst_col[1]= src_col[1]<26?0:src_col[1]-26; + dst_col[2]= src_col[2]<26?0:src_col[2]-26; + break; + case 'y': + case 'Y': + dst_col[0]= src_col[0]<46?0:src_col[0]-36; + dst_col[1]= src_col[1]>189?255:src_col[1]+66; + dst_col[2]= src_col[2]<46?0:src_col[2]-36; + break; + default: + dst_col[0]= src_col[0]<26?0:src_col[0]-26; + dst_col[1]= src_col[1]<26?0:src_col[1]-26; + dst_col[2]= src_col[2]>209?255:src_col[2]+46; + } +} /* ************************************************************* */ diff --git a/source/blender/editors/space_view3d/drawobject.c b/source/blender/editors/space_view3d/drawobject.c index 74667f933c2..10edd4eccb5 100644 --- a/source/blender/editors/space_view3d/drawobject.c +++ b/source/blender/editors/space_view3d/drawobject.c @@ -5135,7 +5135,7 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag) char col[4], col2[4]; UI_GetThemeColor3ubv(TH_GRID, col); - make_axis_color(col, col2, 'z'); + UI_make_axis_color(col, col2, 'z'); glColor3ubv((GLubyte *)col2); cob= constraints_make_evalob(scene, ob, NULL, CONSTRAINT_OBTYPE_OBJECT); diff --git a/source/blender/editors/space_view3d/view3d_draw.c b/source/blender/editors/space_view3d/view3d_draw.c index 0a063182368..cb67a1fc9aa 100644 --- a/source/blender/editors/space_view3d/view3d_draw.c +++ b/source/blender/editors/space_view3d/view3d_draw.c @@ -232,27 +232,6 @@ static void drawgrid_draw(ARegion *ar, float wx, float wy, float x, float y, flo } -// not intern, called in editobject for constraint axis too -void make_axis_color(char *col, char *col2, char axis) -{ - if(axis=='x') { - col2[0]= col[0]>219?255:col[0]+36; - col2[1]= col[1]<26?0:col[1]-26; - col2[2]= col[2]<26?0:col[2]-26; - } - else if(axis=='y') { - col2[0]= col[0]<46?0:col[0]-36; - col2[1]= col[1]>189?255:col[1]+66; - col2[2]= col[2]<46?0:col[2]-36; - } - else { - col2[0]= col[0]<26?0:col[0]-26; - col2[1]= col[1]<26?0:col[1]-26; - col2[2]= col[2]>209?255:col[2]+46; - } - -} - static void drawgrid(ARegion *ar, View3D *v3d) { /* extern short bgpicmode; */ @@ -365,15 +344,15 @@ static void drawgrid(ARegion *ar, View3D *v3d) /* center cross */ if( ELEM(rv3d->view, V3D_VIEW_RIGHT, V3D_VIEW_LEFT)) - make_axis_color(col, col2, 'y'); - else make_axis_color(col, col2, 'x'); + UI_make_axis_color(col, col2, 'y'); + else UI_make_axis_color(col, col2, 'x'); glColor3ubv((GLubyte *)col2); fdrawline(0.0, y, (float)ar->winx, y); if( ELEM(rv3d->view, V3D_VIEW_TOP, V3D_VIEW_BOTTOM)) - make_axis_color(col, col2, 'y'); - else make_axis_color(col, col2, 'z'); + UI_make_axis_color(col, col2, 'y'); + else UI_make_axis_color(col, col2, 'z'); glColor3ubv((GLubyte *)col2); fdrawline(x, 0.0, x, (float)ar->winy); @@ -412,7 +391,7 @@ static void drawfloor(Scene *scene, View3D *v3d) if(a==0) { /* check for the 'show Y axis' preference */ if (v3d->gridflag & V3D_SHOW_Y) { - make_axis_color(col, col2, 'y'); + UI_make_axis_color(col, col2, 'y'); glColor3ubv((GLubyte *)col2); draw_line = 1; @@ -451,7 +430,7 @@ static void drawfloor(Scene *scene, View3D *v3d) if(a==0) { /* check for the 'show X axis' preference */ if (v3d->gridflag & V3D_SHOW_X) { - make_axis_color(col, col2, 'x'); + UI_make_axis_color(col, col2, 'x'); glColor3ubv((GLubyte *)col2); draw_line = 1; @@ -488,7 +467,7 @@ static void drawfloor(Scene *scene, View3D *v3d) /* draw the Z axis line */ /* check for the 'show Z axis' preference */ if (v3d->gridflag & V3D_SHOW_Z) { - make_axis_color(col, col2, 'z'); + UI_make_axis_color(col, col2, 'z'); glColor3ubv((GLubyte *)col2); glBegin(GL_LINE_STRIP); @@ -567,7 +546,7 @@ static void draw_view_axis(RegionView3D *rv3d) vec[1] = vec[2] = 0; QuatMulVecf(rv3d->viewquat, vec); - make_axis_color((char *)gridcol, (char *)col, 'x'); + UI_make_axis_color((char *)gridcol, (char *)col, 'x'); rgb_to_hsv(col[0]/255.0f, col[1]/255.0f, col[2]/255.0f, &h, &s, &v); s = s<0.5 ? s+0.5 : 1.0; v = 0.3; @@ -588,7 +567,7 @@ static void draw_view_axis(RegionView3D *rv3d) vec[0] = vec[2] = 0; QuatMulVecf(rv3d->viewquat, vec); - make_axis_color((char *)gridcol, (char *)col, 'y'); + UI_make_axis_color((char *)gridcol, (char *)col, 'y'); rgb_to_hsv(col[0]/255.0f, col[1]/255.0f, col[2]/255.0f, &h, &s, &v); s = s<0.5 ? s+0.5 : 1.0; v = 0.3; @@ -609,7 +588,7 @@ static void draw_view_axis(RegionView3D *rv3d) vec[1] = vec[0] = 0; QuatMulVecf(rv3d->viewquat, vec); - make_axis_color((char *)gridcol, (char *)col, 'z'); + UI_make_axis_color((char *)gridcol, (char *)col, 'z'); rgb_to_hsv(col[0]/255.0f, col[1]/255.0f, col[2]/255.0f, &h, &s, &v); s = s<0.5 ? s+0.5 : 1.0; v = 0.5; diff --git a/source/blender/editors/space_view3d/view3d_intern.h b/source/blender/editors/space_view3d/view3d_intern.h index 927773bf2ec..58ed8e9ba11 100644 --- a/source/blender/editors/space_view3d/view3d_intern.h +++ b/source/blender/editors/space_view3d/view3d_intern.h @@ -99,7 +99,6 @@ void draw_depth(Scene *scene, struct ARegion *ar, View3D *v3d, int (* func)(void void view3d_clr_clipping(void); void view3d_set_clipping(RegionView3D *rv3d); void add_view3d_after(View3D *v3d, Base *base, int type, int flag); -void make_axis_color(char *col, char *col2, char axis); void calc_viewborder(Scene *scene, struct ARegion *ar, View3D *v3d, rctf *viewborder_r); void circf(float x, float y, float rad); diff --git a/source/blender/editors/transform/transform.c b/source/blender/editors/transform/transform.c index 3231c066196..1e1d12ff36c 100644 --- a/source/blender/editors/transform/transform.c +++ b/source/blender/editors/transform/transform.c @@ -111,54 +111,14 @@ #include "PIL_time.h" /* sleep */ +#include "UI_resources.h" + //#include "blendef.h" // //#include "mydevice.h" #include "transform.h" -/* ************************** Dashed help line **************************** */ - - -/* bad frontbuffer call... because it is used in transform after force_draw() */ -static void helpline(TransInfo *t, float *vec) -{ -#if 0 // TRANSFORM_FIX_ME - float vecrot[3], cent[2]; - short mval[2]; - - VECCOPY(vecrot, vec); - if(t->flag & T_EDIT) { - Object *ob= t->obedit; - if(ob) Mat4MulVecfl(ob->obmat, vecrot); - } - else if(t->flag & T_POSE) { - Object *ob=t->poseobj; - if(ob) Mat4MulVecfl(ob->obmat, vecrot); - } - - getmouseco_areawin(mval); - projectFloatView(t, vecrot, cent); // no overflow in extreme cases - - persp(PERSP_WIN); - - glDrawBuffer(GL_FRONT); - - BIF_ThemeColor(TH_WIRE); - - setlinestyle(3); - glBegin(GL_LINE_STRIP); - glVertex2sv(mval); - glVertex2fv(cent); - glEnd(); - setlinestyle(0); - - persp(PERSP_VIEW); - bglFlush(); // flush display for frontbuffer - glDrawBuffer(GL_BACK); -#endif -} - /* ************************** SPACE DEPENDANT CODE **************************** */ void setTransformViewMatrices(TransInfo *t) @@ -936,6 +896,231 @@ int calculateTransformCenter(bContext *C, wmEvent *event, int centerMode, float return success; } +typedef enum { + UP, + DOWN, + LEFT, + RIGHT +} ArrowDirection; +static void drawArrow(ArrowDirection d, short offset, short length, short size) +{ + switch(d) + { + case LEFT: + offset = -offset; + length = -length; + size = -size; + case RIGHT: + glBegin(GL_LINES); + glVertex2s( offset, 0); + glVertex2s( offset + length, 0); + glVertex2s( offset + length, 0); + glVertex2s( offset + length - size, -size); + glVertex2s( offset + length, 0); + glVertex2s( offset + length - size, size); + glEnd(); + break; + case DOWN: + offset = -offset; + length = -length; + size = -size; + case UP: + glBegin(GL_LINES); + glVertex2s( 0, offset); + glVertex2s( 0, offset + length); + glVertex2s( 0, offset + length); + glVertex2s(-size, offset + length - size); + glVertex2s( 0, offset + length); + glVertex2s( size, offset + length - size); + glEnd(); + break; + } +} + +static void drawArrowHead(ArrowDirection d, short size) +{ + switch(d) + { + case LEFT: + size = -size; + case RIGHT: + glBegin(GL_LINES); + glVertex2s( 0, 0); + glVertex2s( -size, -size); + glVertex2s( 0, 0); + glVertex2s( -size, size); + glEnd(); + break; + case DOWN: + size = -size; + case UP: + glBegin(GL_LINES); + glVertex2s( 0, 0); + glVertex2s(-size, -size); + glVertex2s( 0, 0); + glVertex2s( size, -size); + glEnd(); + break; + } +} + +static void drawArc(float size, float angle_start, float angle_end, int segments) +{ + float delta = (angle_end - angle_start) / segments; + float angle; + + glBegin(GL_LINE_STRIP); + + for( angle = angle_start; angle < angle_end; angle += delta) + { + glVertex2f( cosf(angle) * size, sinf(angle) * size); + } + glVertex2f( cosf(angle_end) * size, sinf(angle_end) * size); + + glEnd(); +} + +void drawHelpline(const struct bContext *C, TransInfo *t) +{ + if (t->helpline != HLP_NONE && !(t->flag & T_USES_MANIPULATOR)) + { + float vecrot[3], cent[2]; + + VECCOPY(vecrot, t->center); + if(t->flag & T_EDIT) { + Object *ob= t->obedit; + if(ob) Mat4MulVecfl(ob->obmat, vecrot); + } + else if(t->flag & T_POSE) { + Object *ob=t->poseobj; + if(ob) Mat4MulVecfl(ob->obmat, vecrot); + } + + projectFloatView(t, vecrot, cent); // no overflow in extreme cases + + glDisable(GL_DEPTH_TEST); + + glMatrixMode(GL_PROJECTION); + glPushMatrix(); + glMatrixMode(GL_MODELVIEW); + glPushMatrix(); + + ED_region_pixelspace(t->ar); + + switch(t->helpline) + { + case HLP_SPRING: + UI_ThemeColor(TH_WIRE); + + setlinestyle(3); + glBegin(GL_LINE_STRIP); + glVertex2sv(t->mval); + glVertex2fv(cent); + glEnd(); + + glTranslatef(t->mval[0], t->mval[1], 0); + glRotatef(-180 / M_PI * atan2f(cent[0] - t->mval[0], cent[1] - t->mval[1]), 0, 0, 1); + + setlinestyle(0); + glLineWidth(3.0); + drawArrow(UP, 5, 10, 5); + drawArrow(DOWN, 5, 10, 5); + glLineWidth(1.0); + break; + case HLP_HARROW: + UI_ThemeColor(TH_WIRE); + + glTranslatef(t->mval[0], t->mval[1], 0); + + glLineWidth(3.0); + drawArrow(RIGHT, 5, 10, 5); + drawArrow(LEFT, 5, 10, 5); + glLineWidth(1.0); + break; + case HLP_VARROW: + UI_ThemeColor(TH_WIRE); + + glTranslatef(t->mval[0], t->mval[1], 0); + + glLineWidth(3.0); + glBegin(GL_LINES); + drawArrow(UP, 5, 10, 5); + drawArrow(DOWN, 5, 10, 5); + glLineWidth(1.0); + break; + case HLP_ANGLE: + { + float dx = t->mval[0] - cent[0], dy = t->mval[1] - cent[1]; + float angle = atan2f(dy, dx); + float dist = sqrtf(dx*dx + dy*dy); + float delta_angle = MIN2(15 / dist, M_PI/4); + float spacing_angle = MIN2(5 / dist, M_PI/12); + UI_ThemeColor(TH_WIRE); + + setlinestyle(3); + glBegin(GL_LINE_STRIP); + glVertex2sv(t->mval); + glVertex2fv(cent); + glEnd(); + + glTranslatef(cent[0], cent[1], 0); + + setlinestyle(0); + glLineWidth(3.0); + drawArc(dist, angle - delta_angle, angle - spacing_angle, 10); + drawArc(dist, angle + spacing_angle, angle + delta_angle, 10); + + glPushMatrix(); + + glTranslatef(cosf(angle - delta_angle) * dist, sinf(angle - delta_angle) * dist, 0); + glRotatef(180 / M_PI * (angle - delta_angle), 0, 0, 1); + + drawArrowHead(DOWN, 5); + + glPopMatrix(); + + glTranslatef(cosf(angle + delta_angle) * dist, sinf(angle + delta_angle) * dist, 0); + glRotatef(180 / M_PI * (angle + delta_angle), 0, 0, 1); + + drawArrowHead(UP, 5); + + glLineWidth(1.0); + break; + } + case HLP_TRACKBALL: + { + char col[3], col2[3]; + UI_GetThemeColor3ubv(TH_GRID, col); + + glTranslatef(t->mval[0], t->mval[1], 0); + + glLineWidth(3.0); + + UI_make_axis_color(col, col2, 'x'); + glColor3ubv((GLubyte *)col2); + + drawArrow(RIGHT, 5, 10, 5); + drawArrow(LEFT, 5, 10, 5); + + UI_make_axis_color(col, col2, 'y'); + glColor3ubv((GLubyte *)col2); + + drawArrow(UP, 5, 10, 5); + drawArrow(DOWN, 5, 10, 5); + glLineWidth(1.0); + break; + } + } + + glMatrixMode(GL_PROJECTION); + glPopMatrix(); + glMatrixMode(GL_MODELVIEW); + glPopMatrix(); + + glEnable(GL_DEPTH_TEST); + } +} + void drawTransform(const struct bContext *C, struct ARegion *ar, void *arg) { TransInfo *t = arg; @@ -943,6 +1128,7 @@ void drawTransform(const struct bContext *C, struct ARegion *ar, void *arg) drawConstraint(C, t); drawPropCircle(C, t); drawSnapping(C, t); + drawHelpline(C, t); } void saveTransform(bContext *C, TransInfo *t, wmOperator *op) @@ -1813,7 +1999,7 @@ void initWarp(TransInfo *t) t->snap[2] = 1.0f; t->flag |= T_NO_CONSTRAINT; - + /* we need min/max in view space */ for(i = 0; i < t->total; i++) { float center[3]; @@ -1949,8 +2135,6 @@ int Warp(TransInfo *t, short mval[2]) ED_area_headerprint(t->sa, str); - helpline(t, gcursor); - return 1; } @@ -2071,8 +2255,6 @@ int Shear(TransInfo *t, short mval[2]) ED_area_headerprint(t->sa, str); - helpline (t, t->center); - return 1; } @@ -2349,8 +2531,6 @@ int Resize(TransInfo *t, short mval[2]) ED_area_headerprint(t->sa, str); - if(!(t->flag & T_USES_MANIPULATOR)) helpline (t, t->center); - return 1; } @@ -2374,7 +2554,7 @@ void initToSphere(TransInfo *t) t->num.flag |= NUM_NULL_ONE | NUM_NO_NEGATIVE; t->flag |= T_NO_CONSTRAINT; - + // Calculate average radius for(i = 0 ; i < t->total; i++, td++) { t->val += VecLenf(t->center, td->iloc); @@ -2776,8 +2956,6 @@ int Rotation(TransInfo *t, short mval[2]) ED_area_headerprint(t->sa, str); - if(!(t->flag & T_USES_MANIPULATOR)) helpline (t, t->center); - return 1; } @@ -2883,8 +3061,6 @@ int Trackball(TransInfo *t, short mval[2]) ED_area_headerprint(t->sa, str); - if(!(t->flag & T_USES_MANIPULATOR)) helpline (t, t->center); - return 1; } @@ -3230,8 +3406,6 @@ int Tilt(TransInfo *t, short mval[2]) ED_area_headerprint(t->sa, str); - helpline (t, t->center); - return 1; } @@ -3296,8 +3470,6 @@ int CurveShrinkFatten(TransInfo *t, short mval[2]) ED_area_headerprint(t->sa, str); - if(!(t->flag & T_USES_MANIPULATOR)) helpline (t, t->center); - return 1; } @@ -3569,8 +3741,6 @@ int BevelWeight(TransInfo *t, short mval[2]) ED_area_headerprint(t->sa, str); - helpline (t, t->center); - return 1; } @@ -3645,8 +3815,6 @@ int Crease(TransInfo *t, short mval[2]) ED_area_headerprint(t->sa, str); - helpline (t, t->center); - return 1; } @@ -3762,8 +3930,6 @@ int BoneSize(TransInfo *t, short mval[2]) ED_area_headerprint(t->sa, str); - if(!(t->flag & T_USES_MANIPULATOR)) helpline (t, t->center); - return 1; } @@ -3830,8 +3996,6 @@ int BoneEnvelope(TransInfo *t, short mval[2]) ED_area_headerprint(t->sa, str); - if(!(t->flag & T_USES_MANIPULATOR)) helpline (t, t->center); - return 1; } @@ -3896,8 +4060,6 @@ int BoneRoll(TransInfo *t, short mval[2]) ED_area_headerprint(t->sa, str); - if(!(t->flag & T_USES_MANIPULATOR)) helpline (t, t->center); - return 1; } @@ -3974,8 +4136,6 @@ int BakeTime(TransInfo *t, short mval[2]) ED_area_headerprint(t->sa, str); - helpline (t, t->center); - return 1; } @@ -4506,6 +4666,7 @@ void initTimeScale(TransInfo *t) t->transform = TimeScale; initMouseInputMode(t, &t->mouse, INPUT_NONE); + t->helpline = HLP_SPRING; /* set manually because we don't use a predefined input */ t->flag |= T_NULL_ONE; t->num.flag |= NUM_NULL_ONE; diff --git a/source/blender/editors/transform/transform.h b/source/blender/editors/transform/transform.h index 4ac82fcd73f..ee767fada58 100644 --- a/source/blender/editors/transform/transform.h +++ b/source/blender/editors/transform/transform.h @@ -232,6 +232,7 @@ typedef struct TransInfo { short persp; short around; char spacetype; /* spacetype where transforming is */ + char helpline; /* helpline modes (not to be confused with hotline) */ float vec[3]; /* translation, to show for widget */ float mat[3][3]; /* rot/rescale, to show for widget */ @@ -325,6 +326,14 @@ typedef struct TransInfo { /* ******************************************************************************** */ +/* transinfo->helpline */ +#define HLP_NONE 0 +#define HLP_SPRING 1 +#define HLP_ANGLE 2 +#define HLP_HARROW 3 +#define HLP_VARROW 4 +#define HLP_TRACKBALL 5 + /* transinfo->con->mode */ #define CON_APPLY 1 #define CON_AXIS0 2 diff --git a/source/blender/editors/transform/transform_generics.c b/source/blender/editors/transform/transform_generics.c index 27f1a59c14b..171665c9282 100644 --- a/source/blender/editors/transform/transform_generics.c +++ b/source/blender/editors/transform/transform_generics.c @@ -620,7 +620,6 @@ void recalcData(TransInfo *t) void drawLine(TransInfo *t, float *center, float *dir, char axis, short options) { - extern void make_axis_color(char *col, char *col2, char axis); // view3d_draw.c float v1[3], v2[3], v3[3]; char col[3], col2[3]; @@ -645,7 +644,7 @@ void drawLine(TransInfo *t, float *center, float *dir, char axis, short options) else { UI_GetThemeColor3ubv(TH_GRID, col); } - make_axis_color(col, col2, axis); + UI_make_axis_color(col, col2, axis); glColor3ubv((GLubyte *)col2); setlinestyle(0); @@ -684,6 +683,8 @@ int initTransInfo (bContext *C, TransInfo *t, wmOperator *op, wmEvent *event) t->data = NULL; t->ext = NULL; + t->helpline = HLP_NONE; + t->flag = 0; t->redraw = 1; /* redraw first time */ diff --git a/source/blender/editors/transform/transform_input.c b/source/blender/editors/transform/transform_input.c index 3272c35f5fa..4d721a83c78 100644 --- a/source/blender/editors/transform/transform_input.c +++ b/source/blender/editors/transform/transform_input.c @@ -251,35 +251,44 @@ void initMouseInputMode(TransInfo *t, MouseInput *mi, MouseInputMode mode) { case INPUT_VECTOR: mi->apply = InputVector; + t->helpline = HLP_NONE; break; case INPUT_SPRING: calcSpringFactor(mi); mi->apply = InputSpring; + t->helpline = HLP_SPRING; break; case INPUT_SPRING_FLIP: calcSpringFactor(mi); mi->apply = InputSpringFlip; + t->helpline = HLP_SPRING; break; case INPUT_ANGLE: mi->apply = InputAngle; + t->helpline = HLP_ANGLE; break; case INPUT_TRACKBALL: /* factor has to become setting or so */ mi->factor = 0.1f; mi->apply = InputTrackBall; + t->helpline = HLP_TRACKBALL; break; case INPUT_HORIZONTAL_RATIO: mi->factor = (float)(mi->center[0] - mi->imval[0]); mi->apply = InputHorizontalRatio; + t->helpline = HLP_HARROW; break; case INPUT_HORIZONTAL_ABSOLUTE: mi->apply = InputHorizontalAbsolute; + t->helpline = HLP_HARROW; break; case INPUT_VERTICAL_RATIO: mi->apply = InputVerticalRatio; + t->helpline = HLP_VARROW; break; case INPUT_VERTICAL_ABSOLUTE: mi->apply = InputVerticalAbsolute; + t->helpline = HLP_VARROW; break; case INPUT_NONE: default: |