diff options
| author | jacob1 <jfu614@gmail.com> | 2012-08-08 16:57:55 (GMT) |
|---|---|---|
| committer | jacksonmj <mj-pt@jacksonmj.co.uk> | 2012-08-13 23:26:51 (GMT) |
| commit | b3b9b0961ce85feafd0051c1eb88fa1b95ba9289 (patch) | |
| tree | 4774e7f77d34698e5a3ad4d7b636fddb5a7c9389 /src | |
| parent | 3c78cce7a56c91b7c4db8526f988101a5e1e2b2c (diff) | |
| download | powder-b3b9b0961ce85feafd0051c1eb88fa1b95ba9289.zip powder-b3b9b0961ce85feafd0051c1eb88fa1b95ba9289.tar.gz | |
Fix cut message, stamps/copying can be done backwards, fix xor_rect
(amended to remove extra argument to build_save)
Diffstat (limited to 'src')
| -rw-r--r-- | src/graphics.c | 21 | ||||
| -rw-r--r-- | src/main.c | 73 | ||||
| -rw-r--r-- | src/powder.c | 2 |
3 files changed, 72 insertions, 24 deletions
diff --git a/src/graphics.c b/src/graphics.c index 252033f..72cf11c 100644 --- a/src/graphics.c +++ b/src/graphics.c @@ -1689,12 +1689,29 @@ void xor_rect(pixel *vid, int x, int y, int w, int h) for (i=0; i<w; i+=2) { xor_pixel(x+i, y, vid); - xor_pixel(x+i, y+h-1, vid); } + if (h != 1) + { + if (h%2 == 1) i = 2; + else i = 1; + for (; i<w; i+=2) + { + xor_pixel(x+i, y+h-1, vid); + } + } + for (i=2; i<h; i+=2) { xor_pixel(x, y+i, vid); - xor_pixel(x+w-1, y+i, vid); + } + if (w != 1) + { + if (w%2 == 1) i = 2; + else i = 1; + for (; i<h-1; i+=2) + { + xor_pixel(x+w-1, y+i, vid); + } } } @@ -2178,34 +2178,46 @@ int main(int argc, char *argv[]) save_h = my + 1 - save_y; if (save_w+save_x>XRES) save_w = XRES-save_x; if (save_h+save_y>YRES) save_h = YRES-save_y; - if (save_w<1) save_w = 1; - if (save_h<1) save_h = 1; + if (save_w+save_x<0) save_w = 0; + if (save_h+save_y<0) save_h = 0; + //if (save_w<1) save_w = 1; + //if (save_h<1) save_h = 1; if (!b) { - if (copy_mode==1)//CTRL-C, copy + if (save_w < 0) { - clipboard_data=build_save(&clipboard_length, save_x, save_y, save_w, save_h, bmap, vx, vy, pv, fvx, fvy, signs, parts); - if (clipboard_data) - clipboard_ready = 1; - save_mode = 0; - copy_mode = 0; + save_x = save_x + save_w - 1; + save_w = abs(save_w) + 2; } - else if (copy_mode==2)//CTRL-X, cut + if (save_h < 0) { - clipboard_data=build_save(&clipboard_length, save_x, save_y, save_w, save_h, bmap, vx, vy, pv, fvx, fvy, signs, parts); - if (clipboard_data) - { - clipboard_ready = 1; - clear_area(save_x, save_y, save_w, save_h); - } - save_mode = 0; - copy_mode = 0; + save_y = save_y + save_h - 1; + save_h = abs(save_h) + 2; } - else//normal save + if (save_h > 0 && save_w > 0) { - stamp_save(save_x, save_y, save_w, save_h); - save_mode = 0; + if (copy_mode==1)//CTRL-C, copy + { + clipboard_data=build_save(&clipboard_length, save_x, save_y, save_w, save_h, bmap, vx, vy, pv, fvx, fvy, signs, parts); + if (clipboard_data) + clipboard_ready = 1; + } + else if (copy_mode==2)//CTRL-X, cut + { + clipboard_data=build_save(&clipboard_length, save_x, save_y, save_w, save_h, bmap, vx, vy, pv, fvx, fvy, signs, parts); + if (clipboard_data) + { + clipboard_ready = 1; + clear_area(save_x, save_y, save_w, save_h); + } + } + else//normal save + { + stamp_save(save_x, save_y, save_w, save_h); + } } + copy_mode = 0; + save_mode = 0; } } else if (sdl_zoom_trig && zoom_en<2) @@ -2570,9 +2582,23 @@ int main(int argc, char *argv[]) if (save_mode)//draw dotted lines for selection { - xor_rect(vid_buf, save_x, save_y, save_w, save_h); + int savex = save_x, savey = save_y, savew = save_w, saveh = save_h; + if (savew < 0) + { + savex = savex + savew - 1; + savew = abs(savew) + 2; + } + if (saveh < 0) + { + savey = savey + saveh - 1; + saveh = abs(saveh) + 2; + } + xor_rect(vid_buf, savex, savey, savew, saveh); da = 51;//draws mouseover text for the message - db = 269;//the save message + if (copy_mode != 2) + db = 269;//the save message + else + db = 278; } if (zoom_en!=1 && !load_mode && !save_mode)//draw normal cursor @@ -2656,6 +2682,9 @@ int main(int argc, char *argv[]) case 277: drawtext(vid_buf, 16, YRES-24, "Save the simulation to your hard drive.", 255, 255, 255, da*5); break; + case 278: //Fix for Ctrl + X showing copy message + drawtext(vid_buf, 16, YRES-24, "Click-and-drag to specify a rectangle to copy and then cut (right click = cancel).", 255, 216, 32, da*5); + break; default: drawtext(vid_buf, 16, YRES-24, (char *)ptypes[db].descs, 255, 255, 255, da*5); } diff --git a/src/powder.c b/src/powder.c index 188b54c..ce3e4a9 100644 --- a/src/powder.c +++ b/src/powder.c @@ -3482,6 +3482,8 @@ int create_parts(int x, int y, int rx, int ry, int c, int flags, int fill) } else return 0; } + if (c == PT_STKM || c == PT_STKM2 || c == PT_FIGH) + rx = ry = 0; if (dw==1) { |
