From b1dcd298c7a5622944e628bf0da4bd04f5f59675 Mon Sep 17 00:00:00 2001 From: Michael Sevakis Date: Sat, 19 May 2012 14:05:11 -0400 Subject: ssd1303: make sure sansa clip and whatever others clip updates properly. Sometimes I do want to update outside the screen boundaries and it was messing it up; such things should not cause display problems. Change-Id: Ic9deec609b19e5a1c603601b20c66599dd44f892 --- firmware/target/arm/as3525/lcd-ssd1303.c | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) (limited to 'firmware/target/arm') diff --git a/firmware/target/arm/as3525/lcd-ssd1303.c b/firmware/target/arm/as3525/lcd-ssd1303.c index 9fcc85d243..a36cf87d95 100644 --- a/firmware/target/arm/as3525/lcd-ssd1303.c +++ b/firmware/target/arm/as3525/lcd-ssd1303.c @@ -287,15 +287,21 @@ void lcd_update_rect(int x, int y, int width, int height) return; /* The Y coordinates have to work on even 8 pixel rows */ - ymax = (y + height-1) >> 3; - y >>= 3; - - if(x + width > LCD_WIDTH) + if (x < 0) + height += x, x = 0; + if (x + width > LCD_WIDTH) width = LCD_WIDTH - x; if (width <= 0) return; /* nothing left to do, 0 is harmful to lcd_write_data() */ - if(ymax >= LCD_FBHEIGHT) - ymax = LCD_FBHEIGHT-1; + if (y < 0) + height += y, y = 0; + if (y + height > LCD_HEIGHT) + height = LCD_HEIGHT - y; + if (height <= 0) + return; /* nothing left to do */ + + ymax = (y + height-1) >> 3; + y >>= 3; /* Copy specified rectange bitmap to hardware */ for (; y <= ymax; y++) -- cgit v1.2.3