summaryrefslogtreecommitdiff
path: root/nuttx/graphics/nxglib
diff options
context:
space:
mode:
authorpatacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3>2012-06-06 18:07:49 +0000
committerpatacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3>2012-06-06 18:07:49 +0000
commit92fb15bdfedc185a9749f8cfae846ded9a729da5 (patch)
tree6a2af7b265afcc60bdab2d22ebc23649e424056e /nuttx/graphics/nxglib
parent1bc2fa2af9ccdc3217d54bd4c3219797217dd946 (diff)
downloadnuttx-92fb15bdfedc185a9749f8cfae846ded9a729da5.tar.gz
nuttx-92fb15bdfedc185a9749f8cfae846ded9a729da5.tar.bz2
nuttx-92fb15bdfedc185a9749f8cfae846ded9a729da5.zip
Fix a divide-by-zero error in the trapezoid drawing logic
git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@4807 42af7a65-404d-4744-a932-0658087f49c3
Diffstat (limited to 'nuttx/graphics/nxglib')
-rw-r--r--nuttx/graphics/nxglib/fb/nxglib_filltrapezoid.c20
-rw-r--r--nuttx/graphics/nxglib/lcd/nxglib_filltrapezoid.c24
2 files changed, 35 insertions, 9 deletions
diff --git a/nuttx/graphics/nxglib/fb/nxglib_filltrapezoid.c b/nuttx/graphics/nxglib/fb/nxglib_filltrapezoid.c
index 64554fae1..7623bf84f 100644
--- a/nuttx/graphics/nxglib/fb/nxglib_filltrapezoid.c
+++ b/nuttx/graphics/nxglib/fb/nxglib_filltrapezoid.c
@@ -1,8 +1,8 @@
/****************************************************************************
* graphics/nxglib/fb/nxglib_filltrapezoid.c
*
- * Copyright (C) 2008-2011 Gregory Nutt. All rights reserved.
- * Author: Gregory Nutt <spudmonkey@racsa.co.cr>
+ * Copyright (C) 2008-2012 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -126,8 +126,20 @@ void NXGL_FUNCNAME(nxgl_filltrapezoid,NXGLIB_SUFFIX)(
/* Calculate the slope of the left and right side of the trapezoid */
- dx1dy = b16divi((trap->bot.x1 - x1), nrows - 1);
- dx2dy = b16divi((trap->bot.x2 - x2), nrows - 1);
+ if (nrows > 1)
+ {
+ dx1dy = b16divi((trap->bot.x1 - x1), nrows - 1);
+ dx2dy = b16divi((trap->bot.x2 - x2), nrows - 1);
+ }
+ else
+ {
+ /* The trapezoid is a run! Use the average width. */
+
+ x1 = (x1 + trap->bot.x1) >> 1;
+ x2 = (x2 + trap->bot.x2) >> 1;
+ dx1dy = 0;
+ dx2dy = 0;
+ }
/* Perform vertical clipping */
diff --git a/nuttx/graphics/nxglib/lcd/nxglib_filltrapezoid.c b/nuttx/graphics/nxglib/lcd/nxglib_filltrapezoid.c
index 0653da413..3ba44b34a 100644
--- a/nuttx/graphics/nxglib/lcd/nxglib_filltrapezoid.c
+++ b/nuttx/graphics/nxglib/lcd/nxglib_filltrapezoid.c
@@ -1,8 +1,8 @@
/****************************************************************************
* graphics/nxglib/lcd/nxglib_filltrapezoid.c
*
- * Copyright (C) 2010-2011 Gregory Nutt. All rights reserved.
- * Author: Gregory Nutt <spudmonkey@racsa.co.cr>
+ * Copyright (C) 2010-2012 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -124,9 +124,23 @@ void NXGL_FUNCNAME(nxgl_filltrapezoid,NXGLIB_SUFFIX)
/* Calculate the slope of the left and right side of the trapezoid */
- dy = boty - topy;
- dx1dy = b16divi((botx1 - topx1), dy);
- dx2dy = b16divi((botx2 - topx2), dy);
+ dy = boty - topy;
+ if (dy > 0)
+ {
+ dx1dy = b16divi((botx1 - topx1), dy);
+ dx2dy = b16divi((botx2 - topx2), dy);
+ }
+ else
+ {
+ /* The trapezoid is a run! Use the average width. */
+
+ topx1 = (topx1 + botx1) >> 1;
+ topx2 = (topx2 + botx2) >> 1;
+ botx1 = topx1;
+ botx2 = topx2;
+ dx1dy = 0;
+ dx2dy = 0;
+ }
/* Perform vertical clipping */