예제 #1
0
        public override HitBox HitTest()
        {
            if (!IsVisible())
            {
                return(HitBox.Miss);
            }
            HitBox hit;

            if ((hit = _scrollBar.HitTest()).IsHit)
            {
                return(hit);
            }

            for (int i = VerticalScrollIndex * HorizontalMaxVisibleItems;
                 i < _items.Count && i - (VerticalScrollIndex * HorizontalMaxVisibleItems) < MaxVisibleItemsTotal;
                 i++)
            {
                if (!_items[i].HitTest())
                {
                    continue;
                }
                _selectedItem = _items[i];
                OnSelect?.Invoke(_items[i].Value);
                return(HitBox.Hit(this));
            }

            _clickable.HitTest(MouseButton.Left);
            if (_clickable.IsDown(MouseButton.Left))
            {
                return(HitBox.Hit(this));
            }

            return(HitBox.Miss);
        }
예제 #2
0
        public void Select(T value)
        {
            var index = _items.FindIndex(it => it.Value.Equals(value));

            _selectedItem = _items[index];
            OnSelect?.Invoke(value);
            VerticalScrollTo(index.Clamp(0, VerticalMaxScrollIndex));
        }
예제 #3
0
        public void AddItem(ImageBox image, T value)
        {
            image.Parent = this;
            image.Window = Window;
            var item = new PaletteBoxItem
            {
                Value    = value,
                ImageBox = image
            };

            _items.Add(item);
            IsDirty = true;
        }
예제 #4
0
        public void AddRange(IEnumerable <ImageBox> images, Func <Sprite, T> valueFunc)
        {
            foreach (var img in images)
            {
                img.Parent = this;
                img.Window = Window;
                var item = new PaletteBoxItem
                {
                    Value    = valueFunc(img.Sprite),
                    ImageBox = img,
                };
                _items.Add(item);
            }

            IsDirty = true;
        }