]> granicus.if.org Git - nethack/commitdiff
Make lua selection randline create a new selection
authorPasi Kallinen <paxed@alt.org>
Sat, 22 Feb 2020 14:34:50 +0000 (16:34 +0200)
committerPasi Kallinen <paxed@alt.org>
Sat, 22 Feb 2020 14:34:50 +0000 (16:34 +0200)
src/nhlsel.c
src/sp_lev.c
test/test_sel.lua

index a41e7ed5c3834620beb9fa2205b409d2d898c698..586a7a790d806f44e655d2314c536cbda3a57e97 100644 (file)
@@ -486,6 +486,7 @@ lua_State *L;
         x2 = (schar) luaL_checkinteger(L, 4);
         y2 = (schar) luaL_checkinteger(L, 5);
         roughness = (int) luaL_checkinteger(L, 6);
+        lua_pop(L, 5);
     } else if (argc == 5 && lua_type(L, 1) == LUA_TNUMBER) {
         x1 = (schar) luaL_checkinteger(L, 1);
         y1 = (schar) luaL_checkinteger(L, 2);
@@ -502,8 +503,9 @@ lua_State *L;
     get_location_coord(&x2, &y2, ANY_LOC,
                        g.coder ? g.coder->croom : NULL, SP_COORD_PACK(x2, y2));
 
+    (void) l_selection_clone(L);
+    sel = l_selection_check(L, 1);
     selection_do_randline(x1, y1, x2, y2, roughness, 12, sel);
-    lua_settop(L, 1);
     return 1;
 }
 
index 775dc10ea6ab404bda710bb167a6935533bc7c08..ef56a679464ea6e269dac21780d98e31cb65ac16 100644 (file)
@@ -4474,14 +4474,8 @@ struct selectionvar *ov;
     int mx, my;
     int dx, dy;
 
-    if (rec < 1) {
+    if (rec < 1 || (x2 == x1 && y2 == y1))
         return;
-    }
-
-    if ((x2 == x1) && (y2 == y1)) {
-        selection_setpoint(x1, y1, ov, 1);
-        return;
-    }
 
     if (rough > max(abs(x2 - x1), abs(y2 - y1)))
         rough = max(abs(x2 - x1), abs(y2 - y1));
@@ -4498,7 +4492,9 @@ struct selectionvar *ov;
         } while ((mx > COLNO - 1 || mx < 0 || my < 0 || my > ROWNO - 1));
     }
 
-    selection_setpoint(mx, my, ov, 1);
+    if (!selection_getpoint(mx, my, ov)) {
+        selection_setpoint(mx, my, ov, 1);
+    }
 
     rough = (rough * 2) / 3;
 
@@ -4506,6 +4502,8 @@ struct selectionvar *ov;
 
     selection_do_randline(x1, y1, mx, my, rough, rec, ov);
     selection_do_randline(mx, my, x2, y2, rough, rec, ov);
+
+    selection_setpoint(x2, y2, ov, 1);
 }
 
 void
index 509731fe683d53a9d607cbc7d2e88dee510c1428..4e911a5123617fa9f35851acfe9269aec413db00 100644 (file)
@@ -278,6 +278,20 @@ function test_sel_fillrect()
    end
 end -- test_sel_fillrect
 
+function test_sel_randline()
+   local __func__ = "test_sel_randline";
+   local sela = selection.new();
+   local sela_clone = sela:clone();
+
+   -- roughness 0 is drawn line a straight line
+   local selb = sela:randline(1,1, 5,5, 0);
+   sel_are_equal(sela, sela_clone, __func__);
+   sel_has_n_points(selb, 5, __func__);
+   for x = 1, 5 do
+      sel_pt_ne(selb, x,x, 1, __func__);
+   end
+end -- test_sel_randline
+
 test_selection_params();
 test_sel_negate();
 test_sel_logical_and();
@@ -287,3 +301,4 @@ test_sel_filter_percent();
 test_sel_line();
 test_sel_rect();
 test_sel_fillrect();
+test_sel_randline();