@@ -221,7 +221,7 @@ public struct PixelColor
221
221
int startPixelY = 0 ;
222
222
bool verticalLine = false ;
223
223
bool horizontalLine = false ;
224
- // bool diagonalLines = false; // TODO allow diagonal straigh lines
224
+ bool diagonalLine = false ;
225
225
int lockedX = 0 ;
226
226
int lockedY = 0 ;
227
227
@@ -245,19 +245,26 @@ void DrawPixel(int x, int y)
245
245
}
246
246
else // already drew before
247
247
{
248
- if ( horizontalLine == false && verticalLine == false )
248
+ // have detected linemode
249
+ if ( horizontalLine == false && verticalLine == false && diagonalLine == false )
249
250
{
250
251
// vertical
251
252
if ( x == startPixelX && y != startPixelY )
252
253
{
253
254
verticalLine = true ;
254
255
lockedX = x ;
255
256
}
257
+ // horizontal
256
258
else if ( y == startPixelY && x != startPixelX )
257
259
{
258
260
horizontalLine = true ;
259
261
lockedY = y ;
260
262
}
263
+ // diagonal
264
+ else if ( y != startPixelY && x != startPixelX )
265
+ {
266
+ diagonalLine = true ;
267
+ }
261
268
}
262
269
263
270
// lock coordinates if straight lines
@@ -269,12 +276,25 @@ void DrawPixel(int x, int y)
269
276
{
270
277
y = lockedY ;
271
278
}
279
+ else if ( diagonalLine == true )
280
+ {
281
+ // force diagonal
282
+ int xx = x - startPixelX ;
283
+ int yy = y - startPixelY ;
284
+
285
+ // stop drawing, if not in diagonal cell
286
+ if ( Math . Abs ( xx ) - Math . Abs ( yy ) != 0 )
287
+ {
288
+ return ;
289
+ }
290
+ }
272
291
}
273
292
}
274
293
else // left shift not down
275
294
{
276
295
verticalLine = false ;
277
296
horizontalLine = false ;
297
+ diagonalLine = false ;
278
298
firstPixel = true ;
279
299
}
280
300
@@ -585,6 +605,7 @@ private void OnKeyUp(object sender, KeyEventArgs e)
585
605
leftShiftDown = false ;
586
606
verticalLine = false ;
587
607
horizontalLine = false ;
608
+ diagonalLine = false ;
588
609
firstPixel = true ;
589
610
break ;
590
611
default :
0 commit comments