/********************************************************************* * * LISTVIEW__UpdateScrollPos * * Purpose: * Checks whether if we must scroll up or scroll down to ensure * that selection is in the visible area. This function also * makes sure that scroll positions are in valid ranges. * * Return value: * Difference between old and new vertical scroll pos. */ int LISTVIEW__UpdateScrollPos(LISTVIEW_Handle hObj, LISTVIEW_Obj* pObj) { int PrevScrollStateV; PrevScrollStateV = pObj->ScrollStateV.v; if (pObj->Sel >= 0) { WM_CheckScrollPos(&pObj->ScrollStateV, pObj->Sel, 0, 0); } else { WM_CheckScrollBounds(&pObj->ScrollStateV); } WM_CheckScrollBounds(&pObj->ScrollStateH); WIDGET__SetScrollState(hObj, &pObj->ScrollStateV, &pObj->ScrollStateH); return pObj->ScrollStateV.v - PrevScrollStateV; }
/********************************************************************* * * _UpdateScrollPos * * Purpose: * Checks whether if we must scroll up or scroll down to ensure * that selection is in the visible area. This function also * makes sure that scroll positions are in valid ranges. * * Return value: * Difference between old and new vertical scroll pos. */ static int _UpdateScrollPos(LISTBOX_Handle hObj, LISTBOX_Obj* pObj) { int PrevScrollStateV; PrevScrollStateV = pObj->ScrollStateV.v; if (pObj->Sel >= 0) { /* Check upper limit */ if (_IsPartiallyVis(hObj, pObj)) { pObj->ScrollStateV.v = pObj->Sel - (pObj->ScrollStateV.PageSize - 1); } /* Check lower limit */ if (pObj->Sel < pObj->ScrollStateV.v) { pObj->ScrollStateV.v = pObj->Sel; } } WM_CheckScrollBounds(&pObj->ScrollStateV); WM_CheckScrollBounds(&pObj->ScrollStateH); WIDGET__SetScrollState(hObj, &pObj->ScrollStateV, &pObj->ScrollStateH); return pObj->ScrollStateV.v - PrevScrollStateV; }
static void _SetScrollState(WM_HWIN hWin) { LISTBOX_Obj* pObj = LISTBOX_H2P(hWin); WIDGET__SetScrollState(hWin, &pObj->ScrollState, NULL); }