changeset 425:4fe2df53ec9f

Division by zero fix in the layout engine.
author bsmith@81767d24-ef19-dc11-ae90-00e081727c95
date Sun, 18 May 2003 08:42:10 +0000
parents 5cc81d3c2bca
children 1f92eadea7d3
files mac/dw.c os2/dw.c win/dw.c
diffstat 3 files changed, 36 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/mac/dw.c	Thu May 15 18:03:41 2003 +0000
+++ b/mac/dw.c	Sun May 18 08:42:10 2003 +0000
@@ -403,14 +403,24 @@
 				{
 					if(*depth > 0)
 					{
+						float calcval;
+
 						if(thisbox->type == DW_VERT)
 						{
-							tmp->xratio = ((float)((thisbox->items[z].width * thisbox->xratio)-((thisbox->items[z].pad*2)+(thisbox->pad*2))))/((float)(tmp->minwidth-((thisbox->items[z].pad*2)+(thisbox->pad*2))));
+							calcval = (float)(tmp->minwidth-((thisbox->items[z].pad*2)+(thisbox->pad*2)));
+							if(calcval == 0.0)
+								tmp->xratio = thisbox->xratio;
+							else
+								tmp->xratio = ((float)((thisbox->items[z].width * thisbox->xratio)-((thisbox->items[z].pad*2)+(thisbox->pad*2))))/calcval;
 							tmp->width = thisbox->items[z].width;
 						}
 						if(thisbox->type == DW_HORZ)
 						{
-							tmp->yratio = ((float)((thisbox->items[z].height * thisbox->yratio)-((thisbox->items[z].pad*2)+(thisbox->pad*2))))/((float)(tmp->minheight-((thisbox->items[z].pad*2)+(thisbox->pad*2))));
+							calcval = (float)(tmp->minheight-((thisbox->items[z].pad*2)+(thisbox->pad*2)));
+							if(calcval == 0.0)
+								tmp->yratio = thisbox->yratio;
+							else
+								tmp->yratio = ((float)((thisbox->items[z].height * thisbox->yratio)-((thisbox->items[z].pad*2)+(thisbox->pad*2))))/calcval;
 							tmp->height = thisbox->items[z].height;
 						}
 					}
--- a/os2/dw.c	Thu May 15 18:03:41 2003 +0000
+++ b/os2/dw.c	Sun May 18 08:42:10 2003 +0000
@@ -1127,14 +1127,24 @@
 				{
 					if(*depth > 0)
 					{
+						float calcval;
+
 						if(thisbox->type == DW_VERT)
 						{
-							tmp->xratio = ((float)((thisbox->items[z].width * thisbox->xratio)-((thisbox->items[z].pad*2)+(thisbox->pad*2))))/((float)(tmp->minwidth-((thisbox->items[z].pad*2)+(thisbox->pad*2))));
+							calcval = (float)(tmp->minwidth-((thisbox->items[z].pad*2)+(thisbox->pad*2)));
+							if(calcval == 0.0)
+								tmp->xratio = thisbox->xratio;
+							else
+								tmp->xratio = ((float)((thisbox->items[z].width * thisbox->xratio)-((thisbox->items[z].pad*2)+(thisbox->pad*2))))/calcval;
 							tmp->width = thisbox->items[z].width;
 						}
 						if(thisbox->type == DW_HORZ)
 						{
-							tmp->yratio = ((float)((thisbox->items[z].height * thisbox->yratio)-((thisbox->items[z].pad*2)+(thisbox->pad*2))))/((float)(tmp->minheight-((thisbox->items[z].pad*2)+(thisbox->pad*2))));
+							calcval = (float)(tmp->minheight-((thisbox->items[z].pad*2)+(thisbox->pad*2)));
+							if(calcval == 0.0)
+								tmp->yratio = thisbox->yratio;
+							else
+								tmp->yratio = ((float)((thisbox->items[z].height * thisbox->yratio)-((thisbox->items[z].pad*2)+(thisbox->pad*2))))/calcval;
 							tmp->height = thisbox->items[z].height;
 						}
 					}
--- a/win/dw.c	Thu May 15 18:03:41 2003 +0000
+++ b/win/dw.c	Sun May 18 08:42:10 2003 +0000
@@ -1090,14 +1090,24 @@
 				{
 					if(*depth > 0)
 					{
+						float calcval;
+
 						if(thisbox->type == DW_VERT)
 						{
-							tmp->xratio = ((float)((thisbox->items[z].width * thisbox->xratio)-((thisbox->items[z].pad*2)+(thisbox->pad*2))))/((float)(tmp->minwidth-((thisbox->items[z].pad*2)+(thisbox->pad*2))));
+							calcval = (float)(tmp->minwidth-((thisbox->items[z].pad*2)+(thisbox->pad*2)));
+							if(calcval == 0.0)
+								tmp->xratio = thisbox->xratio;
+							else
+								tmp->xratio = ((float)((thisbox->items[z].width * thisbox->xratio)-((thisbox->items[z].pad*2)+(thisbox->pad*2))))/calcval;
 							tmp->width = thisbox->items[z].width;
 						}
 						if(thisbox->type == DW_HORZ)
 						{
-							tmp->yratio = ((float)((thisbox->items[z].height * thisbox->yratio)-((thisbox->items[z].pad*2)+(thisbox->pad*2))))/((float)(tmp->minheight-((thisbox->items[z].pad*2)+(thisbox->pad*2))));
+							calcval = (float)(tmp->minheight-((thisbox->items[z].pad*2)+(thisbox->pad*2)));
+							if(calcval == 0.0)
+								tmp->yratio = thisbox->yratio;
+							else
+								tmp->yratio = ((float)((thisbox->items[z].height * thisbox->yratio)-((thisbox->items[z].pad*2)+(thisbox->pad*2))))/calcval;
 							tmp->height = thisbox->items[z].height;
 						}
 					}