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);
    }
Пример #2
0
 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));
 }
Пример #3
0
 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)));
 }