Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Diff: N5110.cpp
- Revision:
- 43:c2598020fcac
- Parent:
- 42:596c207519de
- Child:
- 44:57f9d32fb521
diff -r 596c207519de -r c2598020fcac N5110.cpp
--- a/N5110.cpp Tue Mar 21 10:43:19 2017 +0000
+++ b/N5110.cpp Tue Mar 21 11:46:14 2017 +0000
@@ -370,12 +370,13 @@
unsigned int const y1,
unsigned int const type)
{
- int y_range = y1-y0; // calc range of y and x
- int x_range = x1-x0;
- int start,stop,step;
+ // Note that the ranges can be negative so we have to turn the input values
+ // into signed integers first
+ int const y_range = static_cast<int>(y1) - static_cast<int>(y0);
+ int const x_range = static_cast<int>(x1) - static_cast<int>(x0);
// if dotted line, set step to 2, else step is 1
- step = (type==2) ? 2:1;
+ unsigned int const step = (type==2) ? 2:1;
// make sure we loop over the largest range to get the most pixels on the display
// for instance, if drawing a vertical line (x_range = 0), we need to loop down the y pixels
@@ -383,13 +384,14 @@
if ( abs(x_range) > abs(y_range) ) {
// ensure we loop from smallest to largest or else for-loop won't run as expected
- start = x1>x0 ? x0:x1;
- stop = x1>x0 ? x1:x0;
+ unsigned int const start = x_range > 0 ? x0:x1;
+ unsigned int const stop = x_range > 0 ? x1:x0;
// loop between x pixels
- for (int x = start; x<= stop ; x+=step) {
+ for (unsigned int x = start; x<= stop ; x+=step) {
// do linear interpolation
- int y = y0 + (y1-y0)*(x-x0)/(x1-x0);
+ int const dx = static_cast<int>(x)-static_cast<int>(x0);
+ unsigned int const y = y0 + y_range * dx / x_range;
// If the line type is '0', this will clear the pixel
// If it is '1' or '2', the pixel will be set
@@ -398,12 +400,13 @@
} else {
// ensure we loop from smallest to largest or else for-loop won't run as expected
- start = y1>y0 ? y0:y1;
- stop = y1>y0 ? y1:y0;
+ unsigned int const start = y_range > 0 ? y0:y1;
+ unsigned int const stop = y_range > 0 ? y1:y0;
- for (int y = start; y<= stop ; y+=step) {
+ for (unsigned int y = start; y<= stop ; y+=step) {
// do linear interpolation
- int x = x0 + (x1-x0)*(y-y0)/(y1-y0);
+ int const dy = static_cast<int>(y)-static_cast<int>(y0);
+ unsigned int const x = x0 + x_range * dy / y_range;
// If the line type is '0', this will clear the pixel
// If it is '1' or '2', the pixel will be set
@@ -437,7 +440,7 @@
int nrows,
int ncols,
int *sprite)
-{
+{
for (int i = 0; i < nrows; i++) {
for (int j = 0 ; j < ncols ; j++) {