Fix bug 41270 - problems with the bounds checks for nsScrollingView. This

was causing mousewheel scrolling to "wrap around" in list boxes. r=pavlov.


git-svn-id: svn://10.0.0.236/trunk@71555 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
bryner%uiuc.edu 2000-06-05 21:57:44 +00:00
parent a271419de6
commit 45f772555a

View File

@ -1558,61 +1558,55 @@ NS_IMETHODIMP nsScrollingView::GetLineHeight(nscoord *aHeight)
NS_IMETHODIMP nsScrollingView::ScrollByLines(PRInt32 aNumLinesX, PRInt32 aNumLinesY)
{
nsIWidget* widget = nsnull;
PRUint32 newPosX = 0, newPosY = 0;
nsCOMPtr<nsIWidget> widget;
nscoord newPosX = 0, newPosY = 0;
if (aNumLinesX != 0) {
if (mHScrollBarView->GetWidget(widget) == NS_OK) {
nsIScrollbar* scrollh = nsnull;
if (widget->QueryInterface(NS_GET_IID(nsIScrollbar), (void **)&scrollh) == NS_OK) {
PRUint32 oldPos = 0;
PRUint32 lineInc;
if (mHScrollBarView->GetWidget(*getter_AddRefs(widget)) == NS_OK) {
nsCOMPtr<nsIScrollbar> scrollh( do_QueryInterface(widget) );
if (scrollh) {
PRUint32 oldPos = 0;
PRUint32 lineInc;
scrollh->GetPosition(oldPos);
scrollh->GetLineIncrement(lineInc);
NS_RELEASE(scrollh);
newPosX = oldPos + lineInc * aNumLinesX;
}
NS_RELEASE(widget);
}
scrollh->GetPosition(oldPos);
scrollh->GetLineIncrement(lineInc);
newPosX = oldPos + lineInc * aNumLinesX;
}
}
}
if (aNumLinesY != 0) {
if (mVScrollBarView->GetWidget(widget) == NS_OK) {
nsIScrollbar* scrollv = nsnull;
if (widget->QueryInterface(NS_GET_IID(nsIScrollbar), (void **)&scrollv) == NS_OK) {
PRUint32 oldPos = 0;
PRUint32 lineInc;
if (mVScrollBarView->GetWidget(*getter_AddRefs(widget)) == NS_OK) {
nsCOMPtr<nsIScrollbar> scrollv( do_QueryInterface(widget) );
if (scrollv) {
PRUint32 oldPos = 0;
PRUint32 lineInc;
scrollv->GetPosition(oldPos);
scrollv->GetLineIncrement(lineInc);
NS_RELEASE(scrollv);
newPosY = oldPos + lineInc * aNumLinesY;
}
NS_RELEASE(widget);
}
scrollv->GetPosition(oldPos);
scrollv->GetLineIncrement(lineInc);
newPosY = oldPos + lineInc * aNumLinesY;
}
}
}
nsSize clipSize;
mClipView->GetDimensions(&clipSize.width, &clipSize.height);
nsSize clipSize;
mClipView->GetDimensions(&clipSize.width, &clipSize.height);
//sanity check values
if (newPosX > (mSizeX - clipSize.height))
newPosX = mSizeX - clipSize.height;
if (newPosX < 0)
newPosX = 0;
if (newPosX > (mSizeX - clipSize.height))
newPosX = mSizeX - clipSize.height;
else if (newPosX < 0)
newPosX = 0;
if (newPosY > (mSizeY - clipSize.height))
newPosY = mSizeY - clipSize.height;
if (newPosY < 0)
newPosY = 0;
newPosY = mSizeY - clipSize.height;
else if (newPosY < 0)
newPosY = 0;
if (newPosX || newPosY) {
ScrollTo(newPosX, newPosY, 0);
}
ScrollTo(newPosX, newPosY, 0);
return NS_OK;
return NS_OK;
}
NS_IMETHODIMP nsScrollingView::ScrollByPages(PRInt32 aNumPages)