diff options
Diffstat (limited to 'firmware/drivers/lcd-color-common.c')
-rw-r--r-- | firmware/drivers/lcd-color-common.c | 18 |
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 | { |