summaryrefslogtreecommitdiff
path: root/firmware/drivers/lcd-color-common.c
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/drivers/lcd-color-common.c')
-rw-r--r--firmware/drivers/lcd-color-common.c18
1 files changed, 13 insertions, 5 deletions
diff --git a/firmware/drivers/lcd-color-common.c b/firmware/drivers/lcd-color-common.c
index 935f4e59dd..20d8c65e21 100644
--- a/firmware/drivers/lcd-color-common.c
+++ b/firmware/drivers/lcd-color-common.c
@@ -214,6 +214,7 @@ void lcd_drawline(int x1, int y1, int x2, int y2)
214 int d, dinc1, dinc2; 214 int d, dinc1, dinc2;
215 int x, xinc1, xinc2; 215 int x, xinc1, xinc2;
216 int y, yinc1, yinc2; 216 int y, yinc1, yinc2;
217 int x_vp, y_vp, w_vp, h_vp;
217 lcd_fastpixelfunc_type *pfunc = lcd_fastpixelfuncs[lcd_current_viewport->drawmode]; 218 lcd_fastpixelfunc_type *pfunc = lcd_fastpixelfuncs[lcd_current_viewport->drawmode];
218 219
219 deltay = abs(y2 - y1); 220 deltay = abs(y2 - y1);
@@ -268,16 +269,23 @@ void lcd_drawline(int x1, int y1, int x2, int y2)
268 x = x1; 269 x = x1;
269 y = y1; 270 y = y1;
270 271
272 void *(*fbaddr)(int x, int y) = FB_CURRENTVP_BUFFER->get_address_fn;
273 x_vp = lcd_current_viewport->x;
274 y_vp = lcd_current_viewport->y;
275 w_vp = lcd_current_viewport->width;
276 h_vp = lcd_current_viewport->height;
277
271 for (i = 0; i < numpixels; i++) 278 for (i = 0; i < numpixels; i++)
272 { 279 {
273 if ( ((unsigned)x < (unsigned)lcd_current_viewport->width) 280 if ((x >= 0 && y >= 0)
274 && ((unsigned)y < (unsigned)lcd_current_viewport->height) 281 && (x < w_vp)
282 && (y < h_vp)
275#if defined(HAVE_VIEWPORT_CLIP) 283#if defined(HAVE_VIEWPORT_CLIP)
276 && ((unsigned)x < (unsigned)LCD_WIDTH) 284 && (x < LCD_WIDTH)
277 && ((unsigned)y < (unsigned)LCD_HEIGHT) 285 && (y < LCD_HEIGHT)
278#endif 286#endif
279 ) 287 )
280 pfunc(FBADDR(x + lcd_current_viewport->x, y + lcd_current_viewport->y)); 288 pfunc(fbaddr( x + x_vp, y + y_vp));
281 289
282 if (d < 0) 290 if (d < 0)
283 { 291 {