Bug 696746, round width rather than adding one to prevent an extra reflow, r=roc

This commit is contained in:
Neil Deakin 2011-10-25 11:05:32 -04:00
Родитель ead3336a32
Коммит 0f5c960d2e
1 изменённых файлов: 7 добавлений и 11 удалений

Просмотреть файл

@ -3272,23 +3272,19 @@ NS_IMETHODIMP DocumentViewerImpl::SizeToContent()
NS_ENSURE_TRUE(shellArea.width != NS_UNCONSTRAINEDSIZE &&
shellArea.height != NS_UNCONSTRAINEDSIZE,
NS_ERROR_FAILURE);
width = presContext->AppUnitsToDevPixels(shellArea.width);
// Sometimes wrapped lines can create a situation where the width is a
// non-integer. Rather than figure out why now, we just round the width up
// to take this extra width into account. This makes the shell one pixel
// wider and causes an extra reflow.
width = NSToIntRoundUp(float(shellArea.width) / mDeviceContext->AppUnitsPerDevPixel());
height = presContext->AppUnitsToDevPixels(shellArea.height);
nsCOMPtr<nsIDocShellTreeOwner> treeOwner;
docShellAsItem->GetTreeOwner(getter_AddRefs(treeOwner));
NS_ENSURE_TRUE(treeOwner, NS_ERROR_FAILURE);
/* presContext's size was calculated in app units and has already been
rounded to the equivalent pixels (so the width/height calculation
we just performed was probably exact, though it was based on
values already rounded during ResizeReflow). In a surprising
number of instances, this rounding makes a window which for want
of one extra pixel's width ends up wrapping the longest line of
text during actual window layout. This makes the window too short,
generally clipping the OK/Cancel buttons. Here we add one pixel
to the calculated width, to circumvent this problem. */
NS_ENSURE_SUCCESS(treeOwner->SizeShellTo(docShellAsItem, width+1, height),
NS_ENSURE_SUCCESS(treeOwner->SizeShellTo(docShellAsItem, width, height),
NS_ERROR_FAILURE);
return NS_OK;