- case CWINDOW_MASK_TRANSLATE:
-#ifdef USE_KEYFRAME_SPANNING
- for(int i = 0; i < points.size(); i++) {
- points.values[i]->x += mask_cursor_x - gui->x_origin;
- points.values[i]->y += mask_cursor_y - gui->y_origin;
- }
-#else
- for(int i = 0; i < mask->points.size(); i++) {
- mask->points.values[i]->x += mask_cursor_x - gui->x_origin;
- mask->points.values[i]->y += mask_cursor_y - gui->y_origin;
- }
-#endif
- gui->x_origin = mask_cursor_x;
- gui->y_origin = mask_cursor_y;
- break;
+ case CWINDOW_MASK_TRANSLATE:
+ for(int i = 0; i < mask_points.size(); i++) {
+ mask_points.values[i]->x += mask_cursor_x - gui->x_origin;
+ mask_points.values[i]->y += mask_cursor_y - gui->y_origin;
+ }
+ gui->x_origin = mask_cursor_x;
+ gui->y_origin = mask_cursor_y;
+ break;
+ case CWINDOW_MASK_ROTATE:
+ rotate = 1;
+ case CWINDOW_MASK_SCALE: {
+ int button_no = get_buttonpress();
+ double scale = button_no == WHEEL_UP ? 1.02 : 0.98;
+ double theta = button_no == WHEEL_UP ? M_PI/360. : -M_PI/360.;
+ float st = sin(theta), ct = cos(theta);
+ gui->x_origin = mask_cursor_x;
+ gui->y_origin = mask_cursor_y;
+ if( mask_gui && mask_gui->focused ) {
+ gui->x_origin = atof(mask_gui->focus_x->get_text());
+ gui->y_origin = atof(mask_gui->focus_y->get_text());
+ }
+ for( int i=0; i<mask_points.size(); ++i ) {
+ MaskPoint *point = mask_points.values[i];
+ float px = point->x - gui->x_origin;
+ float py = point->y - gui->y_origin;
+ float nx = !rotate ? px*scale : px*ct + py*st;
+ float ny = !rotate ? py*scale : py*ct - px*st;
+ point->x = nx + gui->x_origin;
+ point->y = ny + gui->y_origin;
+ px = point->control_x1; py = point->control_y1;
+ point->control_x1 = !rotate ? px*scale : px*ct + py*st;
+ point->control_y1 = !rotate ? py*scale : py*ct - px*st;
+ px = point->control_x2; py = point->control_y2;
+ point->control_x2 = !rotate ? px*scale : px*ct + py*st;
+ point->control_y2 = !rotate ? py*scale : py*ct - px*st;
+ }
+ break; }