diff options
| author | jacksonmj <mj-pt@jacksonmj.co.uk> | 2011-03-18 19:33:38 (GMT) |
|---|---|---|
| committer | jacksonmj <mj-pt@jacksonmj.co.uk> | 2011-03-18 19:33:38 (GMT) |
| commit | d46a3bdcb083075a4737125f1c71899e6489ecfa (patch) | |
| tree | 5a29d5fa7d9c52d4cb97684e0bae0c9d8f01df80 /src/main.c | |
| parent | d924a5554a8fa0ead5d17f69e10d46e14a64b5dc (diff) | |
| download | powder-d46a3bdcb083075a4737125f1c71899e6489ecfa.zip powder-d46a3bdcb083075a4737125f1c71899e6489ecfa.tar.gz | |
Better rotation and inversion, also does single pixel translation
Diffstat (limited to 'src/main.c')
| -rw-r--r-- | src/main.c | 42 |
1 files changed, 33 insertions, 9 deletions
@@ -1797,17 +1797,41 @@ int main(int argc, char *argv[]) } } } - if (sdl_key=='r'&&(sdl_mod & (KMOD_CTRL))&&(sdl_mod & (KMOD_SHIFT))) + if (load_mode==1) { - save_mode = 1; - copy_mode = 4;//invert - } - else if (sdl_key=='r'&&(sdl_mod & (KMOD_LCTRL|KMOD_RCTRL))) - { - save_mode = 1; - copy_mode = 3;//rotate + matrix2d transform = m2d_identity; + vector2d translate = v2d_zero; + void *ndata; + int doTransform = 0; + if (sdl_key=='r'&&(sdl_mod & (KMOD_CTRL))&&(sdl_mod & (KMOD_SHIFT))) + { + transform = m2d_new(-1,0,0,1); //horizontal invert + doTransform = 1; + } + else if (sdl_key=='r'&&(sdl_mod & (KMOD_LCTRL|KMOD_RCTRL))) + { + transform = m2d_new(0,-1,1,0); //rotate anticlockwise 90 degrees + doTransform = 1; + } + else if (sdl_mod & (KMOD_CTRL)) + { + doTransform = 1; + if (sdl_key==SDLK_LEFT) translate = v2d_new(-1,0); + else if (sdl_key==SDLK_RIGHT) translate = v2d_new(1,0); + else if (sdl_key==SDLK_UP) translate = v2d_new(0,-1); + else if (sdl_key==SDLK_DOWN) translate = v2d_new(0,1); + else doTransform = 0; + } + if (doTransform) + { + ndata = transform_save(load_data, &load_size, transform, translate); + if (ndata!=load_data) free(load_data); + free(load_img); + load_data = ndata; + load_img = prerender_save(load_data, load_size, &load_w, &load_h); + } } - else if (sdl_key=='r') + if (sdl_key=='r'&&!(sdl_mod & (KMOD_CTRL|KMOD_SHIFT))) GENERATION = 0; if (sdl_key=='x'&&(sdl_mod & (KMOD_LCTRL|KMOD_RCTRL))) { |
