public UIElement Interpret(MenuViewMessage state) { var canvas = new Canvas { HorizontalAlignment = HorizontalAlignment.Stretch }; if (state == null) { return(canvas); } double position = state.Position; double topOffset = Height / 2 - itemHeight * position; int firstVisibleChildIdx = IntegerUtils.Clamp( (int)Math.Floor(-(itemHeight + topOffset) / itemHeight), 0, state.Items.Count); int lastVisibleChildIdx = IntegerUtils.Clamp( (int)Math.Ceiling((Height - topOffset) / itemHeight), 0, state.Items.Count - 1); for (int childIdx = firstVisibleChildIdx; childIdx <= lastVisibleChildIdx; ++childIdx) { var item = state.Items[childIdx]; var childElem = CreateItem(item); canvas.Children.Add(childElem); Canvas.SetTop(childElem, topOffset + itemHeight * childIdx); childElem.Width = Width; } return(canvas); }
public void TestClamp() { Assert.AreEqual(2, IntegerUtils.Clamp(1, 2, 4)); Assert.AreEqual(2, IntegerUtils.Clamp(2, 2, 4)); Assert.AreEqual(3, IntegerUtils.Clamp(3, 2, 4)); Assert.AreEqual(4, IntegerUtils.Clamp(4, 2, 4)); Assert.AreEqual(4, IntegerUtils.Clamp(5, 2, 4)); }
private int ToIndexClamped(Size2 size, int x, int y) { return(ToIndex(size, IntegerUtils.Clamp(x, 0, size.Width - 1), IntegerUtils.Clamp(y, 0, size.Height - 1))); }