Index: trunk/src/gui_act.c =================================================================== --- trunk/src/gui_act.c (revision 685) +++ trunk/src/gui_act.c (revision 686) @@ -134,11 +134,34 @@ return FGW_SUCCESS; } +static const char camv_acts_ScaleLayer[] = "ScaleLayer(@|idx, sx[, sy])"; +static const char camv_acth_ScaleLayer[] = "Scales the layer addressed (@ for current) by the factor of sx and sy. If only sx is specified, it is used as sy as well. (The transformation is added to the current transformation matrix of the layer.)"; +static fgw_error_t camv_act_ScaleLayer(fgw_arg_t *res, int argc, fgw_arg_t *argv) +{ + rnd_design_t *hl = RND_ACT_DESIGN; + camv_design_t *camv = (camv_design_t *)hl; + double sx, sy; + camv_layer_t *ly; + int idx; + + get_layer(ly, idx, ScaleLayer); + + RND_ACT_CONVARG(2, FGW_DOUBLE, ScaleLayer, sx = sy = argv[2].val.nat_double); + RND_ACT_MAY_CONVARG(3, FGW_DOUBLE, ScaleLayer, sy = argv[3].val.nat_double); + + rnd_xform_mx_scale(ly->mx, sx, sy); + ly->enable_mx = 1; + + RND_ACT_IRES(0); + return FGW_SUCCESS; +} + static rnd_action_t gui_action_list[] = { {"Quit", camv_act_Quit, camv_acth_Quit, camv_acts_Quit}, {"Zoom", camv_act_Zoom, camv_acth_Zoom, camv_acts_Zoom}, {"RotateLayer", camv_act_RotateLayer, camv_acth_RotateLayer, camv_acts_RotateLayer}, - {"TranslateLayer", camv_act_TranslateLayer, camv_acth_TranslateLayer, camv_acts_TranslateLayer} + {"TranslateLayer", camv_act_TranslateLayer, camv_acth_TranslateLayer, camv_acts_TranslateLayer}, + {"ScaleLayer", camv_act_ScaleLayer, camv_acth_ScaleLayer, camv_acts_ScaleLayer} }; void gui_act_init(void)