コード例 #1
0
        private void DrawRect(SpriteRectangle r, Graphics g, Pen p, Brush b)
        {
            if (p != null)
            {
                DrawBorder(g, p, r);
            }

            if (b != null)
            {
                g.FillRectangle(b, r.value);
            }
        }
コード例 #2
0
        private void SelectEverythingAroundLastSelected(SpriteRectangle currentClickedRectangle)
        {
            if (currentClickedRectangle == null || !currentClickedRectangle.IsGrouped)
            {
                return;
            }

            currentClickedRectangle.IsGroupValidated = true;
            if (currentClickedRectangle.IsGrouped)
            {
                IterateAndSelect(currentClickedRectangle.Top, currentClickedRectangle.GroupId.Value);
                IterateAndSelect(currentClickedRectangle.Right, currentClickedRectangle.GroupId.Value);
                IterateAndSelect(currentClickedRectangle.Bottom, currentClickedRectangle.GroupId.Value);
                IterateAndSelect(currentClickedRectangle.Left, currentClickedRectangle.GroupId.Value);
            }
            ResetValidated();
        }
コード例 #3
0
 private void DrawBorder(Graphics e, Pen p, SpriteRectangle rect)
 {
     if (rect.Top == null || !rect.Top.IsGrouped || rect.Top.GroupId != null && rect.GroupId != null && rect.Top.GroupId != rect.GroupId)
     {
         e.DrawLine(p, rect.value.X, rect.value.Y, rect.value.X + rect.value.Width, rect.value.Y);
     }
     if (rect.Right == null || !rect.Right.IsGrouped || rect.Right.GroupId != null && rect.GroupId != null && rect.Right.GroupId != rect.GroupId)
     {
         e.DrawLine(p, rect.value.X + rect.value.Width, rect.value.Y, rect.value.X + rect.value.Width, rect.value.Y + rect.value.Height);
     }
     if (rect.Bottom == null || !rect.Bottom.IsGrouped || rect.Bottom.GroupId != null && rect.GroupId != null && rect.Bottom.GroupId != rect.GroupId)
     {
         e.DrawLine(p, rect.value.X, rect.value.Y + rect.value.Height, rect.value.X + rect.value.Width, rect.value.Y + rect.value.Height);
     }
     if (rect.Left == null || !rect.Left.IsGrouped || rect.Left.GroupId != null && rect.GroupId != null && rect.Left.GroupId != rect.GroupId)
     {
         e.DrawLine(p, rect.value.X, rect.value.Y, rect.value.X, rect.value.Y + rect.value.Height);
     }
 }
コード例 #4
0
 private void DrawNameBorder(Graphics e, Pen p, SpriteRectangle rect)
 {
     if (rect.Top == null || !rect.Top.ExportNameGroupId.HasValue || rect.ExportNameGroupId != rect.Top.ExportNameGroupId)
     {
         e.DrawLine(p, rect.value.X, rect.value.Y, rect.value.X + rect.value.Width, rect.value.Y);
     }
     if (rect.Right == null || !rect.Right.ExportNameGroupId.HasValue || rect.ExportNameGroupId != rect.Right.ExportNameGroupId)
     {
         e.DrawLine(p, rect.value.X + rect.value.Width, rect.value.Y, rect.value.X + rect.value.Width, rect.value.Y + rect.value.Height);
     }
     if (rect.Bottom == null || !rect.Bottom.ExportNameGroupId.HasValue || rect.ExportNameGroupId != rect.Bottom.ExportNameGroupId)
     {
         e.DrawLine(p, rect.value.X, rect.value.Y + rect.value.Height, rect.value.X + rect.value.Width, rect.value.Y + rect.value.Height);
     }
     if (rect.Left == null || !rect.Left.ExportNameGroupId.HasValue || rect.ExportNameGroupId != rect.Left.ExportNameGroupId)
     {
         e.DrawLine(p, rect.value.X, rect.value.Y, rect.value.X, rect.value.Y + rect.value.Height);
     }
 }
コード例 #5
0
        public void SpliceRects(int spliceWidth, int spliceHeight)
        {
            if (spliceWidth <= 0 || spliceHeight <= 0)
            {
                return;
            }

            _spliceWidth  = spliceWidth;
            _spliceHeight = spliceHeight;
            var maxColumns = Convert.ToInt32(Math.Floor(this.Image.Width / (spliceWidth * 1.0f)));
            var maxRows    = Convert.ToInt32(Math.Floor(this.Image.Height / (spliceHeight * 1.0f)));

            _rects     = new SpriteRectangle[maxRows, maxColumns];
            _rectsList = new List <SpriteRectangle>();

            //create array
            for (int row = 0; row < _rects.GetLength(0); row++)
            {
                for (int col = 0; col < _rects.GetLength(1); col++)
                {
                    _rects[row, col] = new SpriteRectangle
                    {
                        value = Rectangle.Empty,
                    };
                }
            }

            //assign neighbors
            for (int row = 0; row < _rects.GetLength(0); row++)
            {
                for (int col = 0; col < _rects.GetLength(1); col++)
                {
                    var currentRect = _rects[row, col];
                    currentRect.Left   = col - 1 >= 0 ? _rects[row, col - 1] : null;
                    currentRect.Bottom = row + 1 < _rects.GetLength(0) ? _rects[row + 1, col] : null;
                    currentRect.Right  = col + 1 < _rects.GetLength(1) ? _rects[row, col + 1] : null;
                    currentRect.Top    = row - 1 >= 0 ? _rects[row - 1, col] : null;
                    _rectsList.Add(currentRect);
                }
            }

            UpdateRectsSizes();
        }
コード例 #6
0
        private void IterateAndSelect(SpriteRectangle currentRect, Guid groupId)
        {
            if (currentRect == null || currentRect.IsGroupValidated || !currentRect.IsGrouped || (currentRect.GroupId.HasValue && currentRect.GroupId.Value != groupId))
            {
                return;
            }

            currentRect.IsGroupValidated = true;
            foreach (var spriteRectangle in _rectsList)
            {
                if (currentRect.Id != spriteRectangle.Id || !spriteRectangle.IsGrouped)
                {
                    continue;
                }

                spriteRectangle.IsSelected = true;
                IterateAndSelect(currentRect.Top, groupId);
                IterateAndSelect(currentRect.Right, groupId);
                IterateAndSelect(currentRect.Bottom, groupId);
                IterateAndSelect(currentRect.Left, groupId);
                return;
            }
        }
コード例 #7
0
        void SelectSquareClick(object sender, MouseEventArgs e)
        {
            if (_rects == null || _rectsList == null)
            {
                return;
            }

            if (Control.ModifierKeys == Keys.Shift && _lastSelected != null)
            {
                //select multiple rects
                var startX = _lastSelected.value.X < e.X ? _lastSelected.value.X : e.X;
                var startY = _lastSelected.value.Y < e.Y ? _lastSelected.value.Y : e.Y;

                var lastFurtherestX = _lastSelected.value.Width + _lastSelected.value.X;
                var furthestX       = lastFurtherestX > e.X ? lastFurtherestX : e.X;

                var lastFurtherestY = _lastSelected.value.Height + _lastSelected.value.Y;
                var furthestY       = lastFurtherestY > e.Y ? lastFurtherestY : e.Y;

                var mouseRect          = new Rectangle(startX, startY, furthestX - startX, furthestY - startY);
                var selectedRectangles = new List <SpriteRectangle>();

                //Show Restore button?
                var anyAreDeleted = false;

                foreach (var spriteRectangle in _rectsList)
                {
                    spriteRectangle.IsSelected = spriteRectangle.value.IntersectsWith(mouseRect);

                    if (!spriteRectangle.IsSelected)
                    {
                        continue;
                    }
                    if (spriteRectangle.IsDeleted)
                    {
                        anyAreDeleted = true;
                    }
                    selectedRectangles.Add(spriteRectangle);
                }

                _lastSelected = null;
                foreach (var selectedRectangle in selectedRectangles)
                {
                    SelectEverythingAroundLastSelected(selectedRectangle);
                }

                var allSelectedRects = _rectsList.Where(r => r.IsSelected).ToList();

                var isAllSinglesOrAllGroupsSelected = allSelectedRects.Count(r => r.IsGrouped) == allSelectedRects.Count ||
                                                      allSelectedRects.Count(r => !r.IsGrouped) == allSelectedRects.Count;

                if (isAllSinglesOrAllGroupsSelected)
                {
                    var allHaveTheSameExportNameId =
                        allSelectedRects.Select(r => r.ExportNameGroupId).Distinct().Count(r => r.HasValue) == 1;
                    _mainForm.exportName.Text = allHaveTheSameExportNameId ? allSelectedRects.ElementAt(0).ExportName : string.Empty;
                }

                UpdateButtons(true, false, !anyAreDeleted, !anyAreDeleted, anyAreDeleted, isAllSinglesOrAllGroupsSelected);
            }
            else
            {
                //select single
                foreach (var spriteRectangle in _rectsList)
                {
                    spriteRectangle.IsSelected = spriteRectangle.value.Contains(e.Location);
                    if (!spriteRectangle.IsSelected)
                    {
                        continue;
                    }
                    _lastSelected = spriteRectangle;
                }

                //If click was outside of Image
                if (_lastSelected == null)
                {
                    UpdateButtons(true, false, false, true, false, false);
                }
                else //Found a square to select
                {
                    _mainForm.exportName.Text = _lastSelected.ExportNameGroupId.HasValue ? _lastSelected.ExportName : string.Empty;
                    SelectEverythingAroundLastSelected(_lastSelected);
                    UpdateButtons(false, _lastSelected.IsGrouped, _lastSelected.IsSelected, !_lastSelected.IsDeleted, _lastSelected.IsSelected, true);
                }
            }
            Invalidate();
        }