"Rotate" magic - add indicator lines during active use
This commit is contained in:
parent
4ee781c6de
commit
9d169fec58
1 changed files with 25 additions and 2 deletions
|
|
@ -68,6 +68,7 @@ Uint8 rotate_default_size(magic_api * api, int which, int mode);
|
||||||
void rotate_set_size(magic_api * api, int which, int mode, SDL_Surface * canvas, SDL_Surface * last, Uint8 size,
|
void rotate_set_size(magic_api * api, int which, int mode, SDL_Surface * canvas, SDL_Surface * last, Uint8 size,
|
||||||
SDL_Rect * update_rect);
|
SDL_Rect * update_rect);
|
||||||
float do_rotate(SDL_Surface * canvas, int x, int y, int smoothing_flag);
|
float do_rotate(SDL_Surface * canvas, int x, int y, int smoothing_flag);
|
||||||
|
void rotate_xorline_callback(void *pointer, int tool, SDL_Surface * canvas, SDL_Surface * snapshot, int x, int y);
|
||||||
|
|
||||||
|
|
||||||
Uint32 rotate_api_version(void)
|
Uint32 rotate_api_version(void)
|
||||||
|
|
@ -157,12 +158,34 @@ float do_rotate(SDL_Surface * canvas, int x, int y, int smoothing_flag)
|
||||||
return angle_rad;
|
return angle_rad;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void rotate_xorline_callback(void *pointer ATTRIBUTE_UNUSED, int tool ATTRIBUTE_UNUSED,
|
||||||
|
SDL_Surface * canvas, SDL_Surface * snapshot ATTRIBUTE_UNUSED, int x, int y)
|
||||||
|
{
|
||||||
|
magic_api *api = (magic_api *) pointer;
|
||||||
|
|
||||||
|
api->xorpixel(canvas, x, y);
|
||||||
|
}
|
||||||
|
|
||||||
void rotate_drag(magic_api * api, int which ATTRIBUTE_UNUSED, SDL_Surface * canvas,
|
void rotate_drag(magic_api * api, int which ATTRIBUTE_UNUSED, SDL_Surface * canvas,
|
||||||
SDL_Surface * last ATTRIBUTE_UNUSED, int ox ATTRIBUTE_UNUSED, int oy ATTRIBUTE_UNUSED,
|
SDL_Surface * last, int ox ATTRIBUTE_UNUSED, int oy ATTRIBUTE_UNUSED,
|
||||||
int x, int y, SDL_Rect * update_rect)
|
int x, int y, SDL_Rect * update_rect)
|
||||||
{
|
{
|
||||||
|
float ang;
|
||||||
|
int xx, yy;
|
||||||
|
|
||||||
/* Rotate interactively based on the X/Y position of the mouse */
|
/* Rotate interactively based on the X/Y position of the mouse */
|
||||||
do_rotate(canvas, x, y, SMOOTHING_OFF);
|
ang = do_rotate(canvas, x, y, SMOOTHING_OFF);
|
||||||
|
|
||||||
|
/* Draw indicator lines */
|
||||||
|
xx = (canvas->w / 2) + ((int) (cos(ang) * 100));
|
||||||
|
yy = (canvas->h / 2) - ((int) (sin(ang) * 100));
|
||||||
|
api->line((void *)api, which, canvas, last, canvas->w / 2, canvas->h / 2, xx, yy, 1,
|
||||||
|
rotate_xorline_callback);
|
||||||
|
|
||||||
|
xx = (canvas->w / 2) + ((int) (cos(ang + (M_PI / 2)) * 200));
|
||||||
|
yy = (canvas->h / 2) - ((int) (sin(ang + (M_PI / 2)) * 200));
|
||||||
|
api->line((void *)api, which, canvas, last, canvas->w / 2, canvas->h / 2, xx, yy, 1,
|
||||||
|
rotate_xorline_callback);
|
||||||
|
|
||||||
update_rect->x = 0;
|
update_rect->x = 0;
|
||||||
update_rect->y = 0;
|
update_rect->y = 0;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue