/// <summary> /// Scroll the horizontal list position if needed to ensure that the /// ItemEntry \a item is, if possible, fully visible witin the /// ScrolledItemListBase viewable area. /// </summary> /// <param name="item"> /// const reference to an ItemEntry attached to this ScrolledItemListBase /// that should be made visible in the view area. /// </param> public void EnsureItemIsVisibleHorz(ItemEntry item) { var renderArea = GetItemRenderArea(); var h = GetHorzScrollbar(); var currPos = h.GetScrollPosition(); var left = CoordConverter.AsAbsolute(item.GetXPosition(), GetPixelSize().Width) - currPos; var right = left + item.GetItemPixelSize().Width; // if left is left of the view area, or if item too big, scroll item to left if ((left < renderArea.d_min.X) || ((right - left) > renderArea.Width)) { h.SetScrollPosition(currPos + left); } // if right is right of the view area, scroll item to right of list else if (right >= renderArea.d_max.X) { h.SetScrollPosition(currPos + right - renderArea.Width); } }
/// <summary> /// Scroll the vertical list position if needed to ensure that the ItemEntry /// \a item is, if possible, fully visible witin the ScrolledItemListBase /// viewable area. /// </summary> /// <param name="item"> /// const reference to an ItemEntry attached to this ScrolledItemListBase /// that should be made visible in the view area. /// </param> public void EnsureItemIsVisibleVert(ItemEntry item) { var renderArea = GetItemRenderArea(); var v = GetVertScrollbar(); var currPos = v.GetScrollPosition(); var top = CoordConverter.AsAbsolute(item.GetYPosition(), GetPixelSize().Height) - currPos; var bottom = top + item.GetItemPixelSize().Height; // if top is above the view area, or if item is too big, scroll item to top if ((top < renderArea.d_min.Y) || ((bottom - top) > renderArea.Height)) { v.SetScrollPosition(currPos + top); } // if bottom is below the view area, scroll item to bottom of list else if (bottom >= renderArea.d_max.Y) { v.SetScrollPosition(currPos + bottom - renderArea.Height); } }