From f131119ca1041770d0558e3020b1dd0d45525390 Mon Sep 17 00:00:00 2001 From: Damjan Adamic Date: Fri, 23 Jan 2015 18:12:33 +0100 Subject: [PATCH] Fixes #2034: ldc_line() was wrong for slanted lines --- radio/src/gui/Taranis/lcd.cpp | 12 ++++++------ radio/src/tests/lcd.cpp | 27 +++++++++++++++++++++++++++ radio/src/tests/lcd_line_212x64.png | Bin 454 -> 1061 bytes 3 files changed, 33 insertions(+), 6 deletions(-) diff --git a/radio/src/gui/Taranis/lcd.cpp b/radio/src/gui/Taranis/lcd.cpp index fb2c2289d..deb71aac6 100755 --- a/radio/src/gui/Taranis/lcd.cpp +++ b/radio/src/gui/Taranis/lcd.cpp @@ -490,28 +490,28 @@ void lcd_line(coord_t x1, coord_t y1, coord_t x2, coord_t y2, uint8_t pat, LcdFl if (dxabs >= dyabs) { /* the line is more horizontal than vertical */ for (int i=0; i<=dxabs; i++) { + if ((1<<(px%8)) & pat) { + lcd_plot(px, py, att); + } y += dyabs; if (y>=dxabs) { y -= dxabs; py += sdy; } - if ((1<<(px%8)) & pat) { - lcd_plot(px, py, att); - } px += sdx; } } else { /* the line is more vertical than horizontal */ for (int i=0; i<=dyabs; i++) { + if ((1<<(py%8)) & pat) { + lcd_plot(px, py, att); + } x += dxabs; if (x >= dyabs) { x -= dyabs; px += sdx; } - if ((1<<(py%8)) & pat) { - lcd_plot(px, py, att); - } py += sdy; } } diff --git a/radio/src/tests/lcd.cpp b/radio/src/tests/lcd.cpp index d95cb054d..60a8f00b0 100644 --- a/radio/src/tests/lcd.cpp +++ b/radio/src/tests/lcd.cpp @@ -438,6 +438,33 @@ TEST(Lcd, lcd_line) lcd_line(start+(length>0?1:-1)+xOffset, start, start+(length>0?1:-1)+xOffset+length, start, pattern, 0); lcd_line(start+xOffset, start+(length>0?1:-1), start+xOffset, start+(length>0?1:-1)+length, pattern, 0); + // 45 deg lines + lcd_line( 35, 40, 45, 40, SOLID, FORCE ); + lcd_line( 40, 35, 40, 45, SOLID, FORCE ); + + lcd_line( 20, 40, 40, 20, SOLID, FORCE ); + lcd_line( 40, 20, 60, 40, SOLID, FORCE ); + lcd_line( 60, 40, 40, 60, SOLID, FORCE ); + lcd_line( 40, 60, 20, 40, SOLID, FORCE ); + + lcd_line( 31, 39, 39, 31, SOLID, FORCE ); + lcd_line( 41, 31, 49, 39, SOLID, FORCE ); + lcd_line( 49, 41, 41, 49, SOLID, FORCE ); + lcd_line( 39, 49, 31, 41, SOLID, FORCE ); + + // slanted lines + lcd_line( 150, 10, 190, 10, SOLID, FORCE ); + lcd_line( 150, 10, 190, 20, SOLID, FORCE ); + lcd_line( 150, 10, 190, 30, SOLID, FORCE ); + lcd_line( 150, 10, 190, 40, SOLID, FORCE ); + lcd_line( 150, 10, 190, 50, SOLID, FORCE ); + + lcd_line( 150, 10, 190, 50, SOLID, FORCE ); + lcd_line( 150, 10, 180, 50, SOLID, FORCE ); + lcd_line( 150, 10, 170, 50, SOLID, FORCE ); + lcd_line( 150, 10, 160, 50, SOLID, FORCE ); + lcd_line( 150, 10, 150, 50, SOLID, FORCE ); + EXPECT_TRUE(checkScreenshot("lcd_line")); } #endif diff --git a/radio/src/tests/lcd_line_212x64.png b/radio/src/tests/lcd_line_212x64.png index b1411f6aaae9acd35c5faf0639b0fa80857181a1..89b45d8d10706caab71a210bd46d0e5fd0fd370b 100644 GIT binary patch delta 1004 zcmVNshxH5JfAkzNgQYoAv?;(SR9iz^?xmQRD%e z@=IYLmOtO`mjJNf$NB_-Umzba1M&egARjQ}w_J2xm;QMK(ED*kF5h)sFaYR)W*3+N z`G6Ua513KuaFm1_LH$qZ%AdndeV^Mw{ABxkyXr5Xl zm7vq?KIJ#`bQt3tgo_2H{+)I;JMy6w)**}YX4pgW3tzHg(`}Z^=K`7U2=?O~g`*_- zWm)hv5s~?hfHBpjUqYFgf^nDh=+))YAoCpoOPovd!e>Ll^5~i(BJ&*qW1PzoQ%Y|B z8VbhU)3d5B=YIm3?+E0~i_V2Fg9?^sB_X2OIN#wzP|EB_Bkgd|e+#Q?<8a`3`4O%` z#EyJInJSeyhXaf9WZ+~IhBGOG0oUM|+C`y^HJC5bt zKhe53+T2Fi6%^FSe1jvXp8b;;Rk(Am>Ys^%;+b!1?B1<^T(xdzvW9={$O|bboB0-I zjePniG@d%>Vt3=X0k49BnQy_ofJ6Uu>f62H8*z(KL8;8wHZPoaJI}lFPbl+IPq@aI zbGO(-XMZ@l=8ep7xbly&rX#Iqx5KLweE!TgXkIKI{*my%hh}w57mCK8IrB}K7l41H z{vV&g-o{`PybNdNn=)^3sI$BF9f)Q=8ndl2;UN@%w#>JX^HQAq$6LF>aLxM1ehGLo z-==x-SZ@83&V00CWL(aE2^caTi+KUJ{#n&)wtuV3dkJoq{L!GOo278UBqEy|uQNs8CLrKeQJ-ybgVY)Wktg$0|Ha#D; z8tqG&uH8JD-FrUvR??w)bilKG`r|Cb(%WV9&!>5$nE7blv(v}n^Pqn)FJe+t2{osXdWNIxA2lOxWnTPMD1RP^!aV0k z^ct@@Y6;K) literal 454 zcmeAS@N?(olHy`uVBq!ia0vp^SAf`og9%8!^*$#Bq?n7HJVQ7*IBq}me*oli7I;J! zGca&>f-s}`$T^vIy=DfXY*muZ5ggLEv-2i)H5@TJv;E0;F0NGx zl9Mw}{I%$l_NnlRXV^QX-|*CNiKoeDKL1_2_1eGJ7M6cQc23J*yOiF3`4R4RFv^E0mE(FwnIKZSNaZ@wR7cT7V*+0G_&&Sdp<|7S6? qC;xe4