示例#1
0
        public void TitleBar_onDrag(Component sender, MouseState mouse)
        {
            int x = (int)(mouse.X - _mousePosition.X);
            int y = (int)(mouse.Y - _mousePosition.Y);

            if (Parent != null)
            {
                Parent.Position = new Rectangle(x, y + Position.Height, Parent.Position.Width, Parent.Position.Height);
            }
        }
示例#2
0
        public bool RemoveComponent(string name)
        {
            if (_components.ContainsKey(name))
            {
                Component comp = _components[name];

                if (_prevFocus == comp)
                {
                    _prevFocus = null;
                    _isDragActive = false;
                }

                if (_clickFocus == comp)
                    _clickFocus = null;
            }

            return _components.Remove(name);
        }
示例#3
0
 public void AddComponent(string name, Component comp)
 {
     if(!_components.ContainsKey(name))
         _components.Add(name, comp);
 }
示例#4
0
        public override void Update(GameTime gameTime)
        {
            base.Update(gameTime);

            _input.Update();

            MouseState currentMouse = _input.CurrentMouseState;
            MouseState prevMouse = _input.LastMouseState;

            List<Component> components = _components.Values.ToList();
            components.Sort(delegate(Component c1, Component c2) { return -c1.Layer.CompareTo(c2.Layer); });

            if (Game.IsActive)
            {
                Component currentFocus = null;
                foreach (Component node in components)
                {
                    currentFocus = node.IsFocused(currentMouse.X, currentMouse.Y, _prevScreenArea);
                    if (currentFocus != null)
                        break;
                }

                // If the focus changed, inject mouse over/out events
                if (_prevFocus != currentFocus && !_isDragActive)
                {
                    if (_prevFocus != null)
                    {
                        _prevFocus.InjectMouseOut(this, currentMouse);
                        _clickFocus = null;
                    }

                    if (currentFocus != null)
                        currentFocus.InjectMouseOver(this, currentMouse);
                }
                // They are the same, check for mouse move events
                else
                {
                    if (currentFocus != null && (currentMouse.X != prevMouse.X || currentMouse.Y != prevMouse.Y) && !_isDragActive)
                        currentFocus.InjectMouseMove(this, currentMouse);
                }

                // Check for mouse down, on a mouse down event set _clickFocus to the current focused component
                if (currentFocus != null && currentMouse.LeftButton == ButtonState.Pressed && prevMouse.LeftButton != ButtonState.Pressed)
                {
                    _clickFocus = currentFocus;
                    _clickFocus.InjectMouseDown(this, currentMouse);
                    _isDragActive = true;
                }

                // Check for mouse up / click events
                if (currentMouse.LeftButton == ButtonState.Released && prevMouse.LeftButton != ButtonState.Released)
                {
                    if (_isDragActive)
                    {
                        _prevFocus.InjectDragEnd(this, currentMouse);
                        _isDragActive = false;
                    }

                    // If the component clicked is still the current focus send click event
                    if (_clickFocus != null && _clickFocus == currentFocus)
                        _clickFocus.InjectMouseClick(this, currentMouse);

                    if (_clickFocus != currentFocus)
                    {
                        if (_clickFocus != null)
                            _clickFocus.InjectMouseUp(this, currentMouse);
                    }

                    if (currentFocus != null)
                        currentFocus.InjectMouseUp(this, currentMouse);
                }

                if (_isDragActive)
                {
                    _prevFocus.InjectDrag(this, currentMouse);
                }
                else
                {
                    _prevFocus = currentFocus;
                }
            }

            foreach (Component comp in components)
                comp.Update(this, gameTime, _input);
        }
示例#5
0
 private void Component_onPositionChanged(Component sender)
 {
     ResetContentPane();
 }
示例#6
0
 private void ItemSlot_onMouseOver(Component sender, MouseState mouse)
 {
     _sourceRect.X = 34;
 }
示例#7
0
 private void ItemSlot_onMouseClick(Component sender, MouseState mouse)
 {
     _followMouse = true;
 }
示例#8
0
        private void ItemSlot_onDragEnd(Component sender, MouseState mouse)
        {
            _followMouse = false;

            // Signal that the item has been released
            if (Item != null)
            {
                if (!IsMouseOver)
                {
                    if (onItemReleased != null)
                        onItemReleased(this, _mousePosition);
                }
            }

            _mousePosition = new Vector2(Position.X + 16, Position.Y + 16);
        }
示例#9
0
 private void ItemSlot_onDrag(Component sender, MouseState mouse)
 {
     _mousePosition = new Vector2(mouse.X, mouse.Y);
 }
示例#10
0
 public void TitleBar_onMouseDown(Component sender, MouseState mouse)
 {
     _mousePosition = new Vector2(mouse.X - Parent.Position.X, mouse.Y - Parent.Position.Y - Position.Y);
 }
示例#11
0
 public void TitleBar_onDragEnd(Component sender, MouseState mouse)
 {
 }
示例#12
0
 void Button_onMouseUp(Component sender, MouseState mouse)
 {
     if (State != ButtonState.Disabled)
     {
         if (IsMouseOver)
             SourceOffset = new Rectangle(32, SourceOffset.Y, SourceOffset.Width, SourceOffset.Height);
         else
             SourceOffset = new Rectangle(0, SourceOffset.Y, SourceOffset.Width, SourceOffset.Height);
     }
 }
示例#13
0
 void Button_onMouseOver(Component sender, MouseState mouse)
 {
     // TODO: Take out magic numbers
     if(State != ButtonState.Disabled)
         SourceOffset = new Rectangle(32, SourceOffset.Y, SourceOffset.Width, SourceOffset.Height);
 }
示例#14
0
 void Button_onMouseOut(Component sender, MouseState mouse)
 {
     switch (State)
     {
         case ButtonState.Normal:
             SourceOffset = new Rectangle(0, SourceOffset.Y, SourceOffset.Width, SourceOffset.Height);
             break;
         case ButtonState.Selected:
             SourceOffset = new Rectangle(96, SourceOffset.Y, SourceOffset.Width, SourceOffset.Height);
             break;
         case ButtonState.Disabled:
             SourceOffset = new Rectangle(128, SourceOffset.Y, SourceOffset.Width, SourceOffset.Height);
             break;
     }
 }
示例#15
0
 void Button_onMouseDown(Component sender, MouseState mouse)
 {
     if (State != ButtonState.Disabled)
         SourceOffset = new Rectangle(64, SourceOffset.Y, SourceOffset.Width, SourceOffset.Height);
 }