public void Refresh()
    {
        Color[] backgroundPixels = new Color[_animStripTexture.width * _animStripTexture.height];

        for (int i = 0; i < backgroundPixels.Length; i++)
        {
            backgroundPixels[i] = backgroundColor;
        }

        _animStripTexture.SetPixels(backgroundPixels);

        int y = _animStripTexture.height - thumbnailSize - 1;
        int x = 1;

        int currentIndex = spriteSheet.GetRow(currentRowKey).GetIndex(currentCellKey);

        for (int cellIndex = 0; cellIndex < spriteSheet.GetRow(currentRowKey).cells.Length; cellIndex++)
        {
            int   showIndex   = cellIndex;
            Color borderColor = Color.white;

            if (dragTargetIndex >= 0)
            {
                if (dragTargetIndex == cellIndex && dragTargetIndex != currentIndex)
                {
                    showIndex   = currentIndex;
                    borderColor = new Color(0.8f, 0.8f, 0f, 1f);
                }
                else if (cellIndex < currentIndex && cellIndex < dragTargetIndex || cellIndex > currentIndex && cellIndex > dragTargetIndex)
                {
                    //noop
                }
                else if (cellIndex >= currentIndex && cellIndex < dragTargetIndex)
                {
                    showIndex = cellIndex + 1;
                }
                else if (cellIndex <= currentIndex && cellIndex > dragTargetIndex)
                {
                    showIndex = cellIndex - 1;
                }
            }

            Color[] thumbnail =
                spriteSheet.getPreviewImage(
                    spriteSheet.GetIndex(currentRowKey),
                    showIndex,
                    thumbnailSize - 2,
                    thumbnailSize - 2,
                    currentCellKey == spriteSheet.GetRow(currentRowKey).cells[showIndex].key,
                    borderColor);

            _animStripTexture.SetPixels(x + 1, y + 1, thumbnailSize - 2, thumbnailSize - 2, thumbnail);

            x += thumbnailSize;
            if (x + thumbnailSize > _animStripTexture.width - 1)
            {
                x  = 1;
                y -= thumbnailSize;
            }
        }

        Color emptyFrameBackgroundColor =
            backgroundColor + new Color(0.02f, 0.02f, 0.02f, 1f);

        Color[] emptySprite = new Color[(thumbnailSize - 2) * (thumbnailSize - 2)];

        for (int i = 0; i < emptySprite.Length; i++)
        {
            emptySprite[i] = emptyFrameBackgroundColor;
        }

        if (x > 1)
        {
            while (x < pixelWidth - thumbnailSize)
            {
                _animStripTexture.SetPixels(x + 1, y + 1, thumbnailSize - 2, thumbnailSize - 2, emptySprite);
                x += thumbnailSize;
            }
        }

        //RagePixelUtil.drawPixelBorder(_animStripTexture, new Color(0.1f, 0.1f, 0.1f, 1f));
        RagePixelUtil.drawPixelBorder(_animStripTexture, new Color(0f, 0f, 0f, 1f));

        _animStripTexture.Apply();
    }
    public void Refresh()
    {
        if (spriteSheet != null)
        {
            Color[] backgroundPixels = new Color[_spriteSheetTexture.width * _spriteSheetTexture.height];

            for (int i = 0; i < backgroundPixels.Length; i++)
            {
                backgroundPixels[i] = backgroundColor;
            }

            _spriteSheetTexture.SetPixels(backgroundPixels);

            int y            = _spriteSheetTexture.height - thumbnailSize - 1;
            int x            = 1;
            int currentIndex = spriteSheet.GetIndex(currentRowKey);

            for (int rowIndex = 0; rowIndex < spriteSheet.rows.Length; rowIndex++)
            {
                int   showIndex   = rowIndex;
                Color borderColor = Color.white;

                if (dragTargetIndex >= 0)
                {
                    if (dragTargetIndex == rowIndex && dragTargetIndex != currentIndex)
                    {
                        showIndex   = currentIndex;
                        borderColor = new Color(0.8f, 0.8f, 0f, 1f);
                    }
                    else if (rowIndex < currentIndex && rowIndex < dragTargetIndex || rowIndex > currentIndex && rowIndex > dragTargetIndex)
                    {
                        //noop
                    }
                    else if (rowIndex >= currentIndex && rowIndex < dragTargetIndex)
                    {
                        showIndex = rowIndex + 1;
                    }
                    else if (rowIndex <= currentIndex && rowIndex > dragTargetIndex)
                    {
                        showIndex = rowIndex - 1;
                    }
                }

                showIndex = Mathf.Clamp(showIndex, 0, spriteSheet.rows.Length - 1);

                Color[] thumbnail =
                    spriteSheet.getPreviewImage(
                        showIndex,
                        0,
                        thumbnailSize - 2,
                        thumbnailSize - 2,
                        spriteSheet.GetKey(showIndex) == currentRowKey,
                        borderColor
                        );

                _spriteSheetTexture.SetPixels(x + 1, y + 1, thumbnailSize - 2, thumbnailSize - 2, thumbnail);

                x += thumbnailSize;
                if (x + thumbnailSize > _spriteSheetTexture.width - 1)
                {
                    x  = 1;
                    y -= thumbnailSize;
                }
            }

            Color emptySpriteBackgroundColor =
                (PlayerSettings.advancedLicense) ?
                new Color(0.22f, 0.22f, 0.22f, 1f) :
                new Color(0.53f, 0.53f, 0.53f, 1f);

            Color[] emptySprite = new Color[(thumbnailSize - 2) * (thumbnailSize - 2)];

            for (int i = 0; i < emptySprite.Length; i++)
            {
                emptySprite[i] = emptySpriteBackgroundColor;
            }

            if (x > 1)
            {
                while (x < pixelWidth - thumbnailSize)
                {
                    _spriteSheetTexture.SetPixels(x + 1, y + 1, thumbnailSize - 2, thumbnailSize - 2, emptySprite);
                    x += thumbnailSize;
                }
            }

            RagePixelUtil.drawPixelBorder(_spriteSheetTexture, new Color(0.1f, 0.1f, 0.1f, 1f));
            _spriteSheetTexture.Apply();
        }
    }