summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorjacob1 <jfu614@gmail.com>2012-08-08 16:57:55 (GMT)
committer jacksonmj <mj-pt@jacksonmj.co.uk>2012-08-13 23:26:51 (GMT)
commitb3b9b0961ce85feafd0051c1eb88fa1b95ba9289 (patch)
tree4774e7f77d34698e5a3ad4d7b636fddb5a7c9389 /src
parent3c78cce7a56c91b7c4db8526f988101a5e1e2b2c (diff)
downloadpowder-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.c21
-rw-r--r--src/main.c73
-rw-r--r--src/powder.c2
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);
+ }
}
}
diff --git a/src/main.c b/src/main.c
index 2a091c2..d61e015 100644
--- a/src/main.c
+++ b/src/main.c
@@ -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)
{