From c62a2e966ef2580a28f5d5191a9227ce323ab814 Mon Sep 17 00:00:00 2001 From: "caillon%returnzero.com" Date: Sat, 13 Sep 2003 19:42:43 +0000 Subject: [PATCH] Bug 215042 - frame source is not shown Patch from bzbarsky@mit.edu r+sr=roc@ocallahan.org git-svn-id: svn://10.0.0.236/trunk@146847 18797224-902f-48f8-a5cc-f745e15eee43 --- mozilla/layout/generic/nsFrameSetFrame.cpp | 26 +++++++++++++------ .../html/document/src/nsFrameSetFrame.cpp | 26 +++++++++++++------ 2 files changed, 36 insertions(+), 16 deletions(-) diff --git a/mozilla/layout/generic/nsFrameSetFrame.cpp b/mozilla/layout/generic/nsFrameSetFrame.cpp index 83e4ef60a1c..21fec92dd62 100644 --- a/mozilla/layout/generic/nsFrameSetFrame.cpp +++ b/mozilla/layout/generic/nsFrameSetFrame.cpp @@ -482,16 +482,26 @@ void nsHTMLFramesetFrame::Scale(nscoord aDesired, actual += aItems[j]; } - float factor = (float)aDesired / (float)actual; - actual = 0; - // scale the items up or down - for (i = 0; i < aNumIndicies; i++) { - j = aIndicies[i]; - aItems[j] = NSToCoordRound((float)aItems[j] * factor); - actual += aItems[j]; + if (actual > 0) { + float factor = (float)aDesired / (float)actual; + actual = 0; + // scale the items up or down + for (i = 0; i < aNumIndicies; i++) { + j = aIndicies[i]; + aItems[j] = NSToCoordRound((float)aItems[j] * factor); + actual += aItems[j]; + } + } else if (aNumIndicies != 0) { + // All the specs say zero width, but we have to fill up space + // somehow. Distribute it equally. + nscoord width = NSToCoordRound((float)aDesired / (float)aNumIndicies); + actual = width * aNumIndicies; + for (i = 0; i < aNumIndicies; i++) { + aItems[aIndicies[i]] = width; + } } - if ((aNumIndicies > 0) && (aDesired != actual)) { + if (aNumIndicies > 0 && aDesired != actual) { PRInt32 unit = (aDesired > actual) ? 1 : -1; for (i=0; (i < aNumIndicies) && (aDesired != actual); i++) { j = aIndicies[i]; diff --git a/mozilla/layout/html/document/src/nsFrameSetFrame.cpp b/mozilla/layout/html/document/src/nsFrameSetFrame.cpp index 83e4ef60a1c..21fec92dd62 100644 --- a/mozilla/layout/html/document/src/nsFrameSetFrame.cpp +++ b/mozilla/layout/html/document/src/nsFrameSetFrame.cpp @@ -482,16 +482,26 @@ void nsHTMLFramesetFrame::Scale(nscoord aDesired, actual += aItems[j]; } - float factor = (float)aDesired / (float)actual; - actual = 0; - // scale the items up or down - for (i = 0; i < aNumIndicies; i++) { - j = aIndicies[i]; - aItems[j] = NSToCoordRound((float)aItems[j] * factor); - actual += aItems[j]; + if (actual > 0) { + float factor = (float)aDesired / (float)actual; + actual = 0; + // scale the items up or down + for (i = 0; i < aNumIndicies; i++) { + j = aIndicies[i]; + aItems[j] = NSToCoordRound((float)aItems[j] * factor); + actual += aItems[j]; + } + } else if (aNumIndicies != 0) { + // All the specs say zero width, but we have to fill up space + // somehow. Distribute it equally. + nscoord width = NSToCoordRound((float)aDesired / (float)aNumIndicies); + actual = width * aNumIndicies; + for (i = 0; i < aNumIndicies; i++) { + aItems[aIndicies[i]] = width; + } } - if ((aNumIndicies > 0) && (aDesired != actual)) { + if (aNumIndicies > 0 && aDesired != actual) { PRInt32 unit = (aDesired > actual) ? 1 : -1; for (i=0; (i < aNumIndicies) && (aDesired != actual); i++) { j = aIndicies[i];