コード例 #1
0
ファイル: AtlasRawEditor.cs プロジェクト: SylarLi/AtlaS
 public override void OnPreviewGUI(Rect rect, GUIStyle background)
 {
     base.OnPreviewGUI(rect, background);
     if (mSelectedSprites.Count == 1)
     {
         var atlas      = target as AtlasRaw;
         var bin        = atlas.bins[mSelectedSprites[0].bin];
         var sprite     = bin.sprites[mSelectedSprites[0].sprite];
         var borderRect = AtlasEditorUtil.DrawSpriteInRect(bin.main, bin.addition, sprite, rect, new Vector2(100, 100));
         if (mShowBorder)
         {
             OnSpriteBorderGUI(rect, borderRect, sprite);
         }
         var titleRect = new Rect(rect.x, rect.y, rect.width, 20);
         OnPreivewTitleGUI(titleRect, sprite);
         OnPreviewInfoGUI(rect, sprite);
         var controlID = GUIUtility.GetControlID(FocusType.Passive);
         var eventType = Event.current.GetTypeForControl(controlID);
         if (eventType == EventType.MouseDown &&
             rect.Contains(Event.current.mousePosition) &&
             !titleRect.Contains(Event.current.mousePosition))
         {
             GUI.FocusControl("");
             Event.current.Use();
         }
     }
     else if (mSelectedSprites.Count >= 2)
     {
         OnPreviewSpritesGUI(rect, mSelectedSprites);
     }
 }
コード例 #2
0
ファイル: AtlasRawEditor.cs プロジェクト: SylarLi/AtlaS
        private void OnPreviewSpritesGUI(Rect rect, List <SpriteIndex> sprites)
        {
            var atlas   = target as AtlasRaw;
            var margin  = new Vector2(60, 60);
            var size    = 100;
            var space   = 20;
            var columns = Mathf.FloorToInt((rect.width + space - margin.x) / (size + space));

            columns = Mathf.Clamp(columns, 1, sprites.Count);
            var rows = Mathf.FloorToInt((rect.height + space - margin.y) / (size + space));

            rows = Mathf.Clamp(rows, 1, Mathf.CeilToInt((float)sprites.Count / columns));
            var width  = (rect.width - margin.x - (columns - 1) * space) / columns;
            var height = (rect.height - margin.y - (rows - 1) * space) / rows;

            for (int row = 0; row < rows; row++)
            {
                for (int column = 0; column < columns; column++)
                {
                    int index = row * columns + column;
                    if (index < sprites.Count)
                    {
                        var bin    = atlas.bins[sprites[index].bin];
                        var sprite = bin.sprites[sprites[index].sprite];
                        AtlasEditorUtil.DrawSpriteInRect(bin.main, bin.addition, sprite,
                                                         new Rect(rect.x + margin.x * 0.5f + (width + space) * column,
                                                                  rect.y + margin.y * 0.5f + (height + space) * row,
                                                                  width,
                                                                  height),
                                                         new Vector2(0, 0));
                    }
                }
            }
            var bottomInfo     = new GUIContent(string.Format("Previewing {0} of {1} objects", Mathf.Min(rows * columns, sprites.Count), sprites.Count));
            var bottomInfoSize = EditorStyles.boldLabel.CalcSize(bottomInfo);

            EditorGUI.LabelField(new Rect(rect.x + rect.width * 0.5f - bottomInfoSize.x * 0.5f, rect.yMax, bottomInfoSize.x, bottomInfoSize.y), bottomInfo, EditorStyles.boldLabel);
        }
コード例 #3
0
ファイル: AtlasSpriteView.cs プロジェクト: SylarLi/AtlaS
        private void DrawSpriteList()
        {
            var rect      = new Rect(mVSplit + 5, 20, position.width - mVSplit - 5, position.height - 20);
            var titleRect = new Rect(rect.x - 5, rect.y, rect.width + 5, EditorStyles.toolbar.fixedHeight);

            AtlasEditorUtil.TitleBar(titleRect, new GUIContent("Sprite"));
            var padding     = new Vector2(20, 20);
            var itemSize    = new Vector2(100, 120);
            var itemSpace   = new Vector2(20, 20);
            var columns     = Mathf.Max(Mathf.FloorToInt((titleRect.width - padding.x) / (itemSize.x + itemSpace.x)), 1);
            var rows        = Mathf.CeilToInt((float)(mFilter.Length + 1) / columns);
            var viewRect    = new Rect(0, 0, titleRect.width, position.height - titleRect.y - titleRect.height);
            var contentRect = new Rect(rect.x, titleRect.y + titleRect.height, viewRect.width, padding.y + Mathf.Max((itemSize.y + itemSpace.y) * rows, viewRect.height));

            GUI.BeginGroup(contentRect);
            var controlId = GUIUtility.GetControlID(FocusType.Passive);
            var eventType = Event.current.GetTypeForControl(controlId);
            var index     = 0;
            var count     = Mathf.CeilToInt(viewRect.height / (itemSize.y + itemSpace.y)) * columns;

            count = Mathf.Min(mFilter.Length + 1, count);
            for (int i = 0; i < count; i++)
            {
                var clicked = false;
                if (i == 0)
                {
                    var previewRect = new Rect(padding.x, padding.y, itemSize.x, 100);
                    AtlasEditorUtil.DrawGrid(previewRect);
                    var selectedRect = new Rect(previewRect.x, previewRect.y + previewRect.height + 2, previewRect.width, 18);
                    if (selectedSprite == null)
                    {
                        EditorGUI.DrawRect(selectedRect, ColorSelected);
                    }
                    var labelRect = new Rect(selectedRect.x, selectedRect.y, selectedRect.width, selectedRect.height);
                    EditorGUI.LabelField(labelRect, "None", GetSpritItemLabelStyle());
                    var clickRect = new Rect(previewRect.x, previewRect.y, previewRect.width, itemSize.y);
                    if (eventType == EventType.MouseDown &&
                        clickRect.Contains(Event.current.mousePosition))
                    {
                        selectedSprite = null;
                        clicked        = true;
                        Event.current.Use();
                    }
                    index += 1;
                }
                else
                {
                    var       spriteIndex = mFilter[i - 1];
                    AtlasRaw  atlas;
                    BinRaw    bin;
                    SpriteRaw sprite;
                    if (mCache.Fetch(spriteIndex, out atlas, out bin, out sprite))
                    {
                        var row         = index / columns;
                        var column      = index % columns;
                        var previewRect = new Rect(
                            padding.x + column * (itemSize.x + itemSpace.x),
                            padding.y + row * (itemSize.y + itemSpace.y),
                            itemSize.x, 100);
                        AtlasEditorUtil.DrawSpriteInRect(bin.main, bin.addition, sprite, previewRect, Vector2.zero);
                        var selectedRect = new Rect(previewRect.x, previewRect.y + previewRect.height + 2, previewRect.width, 18);
                        if (spriteIndex.Equals(selectedSprite))
                        {
                            EditorGUI.DrawRect(selectedRect, ColorSelected);
                        }
                        var labelRect = new Rect(selectedRect.x, selectedRect.y, selectedRect.width, selectedRect.height);
                        EditorGUI.LabelField(labelRect, sprite.name, GetSpritItemLabelStyle());
                        var clickRect = new Rect(previewRect.x, previewRect.y, previewRect.width, itemSize.y);
                        if (eventType == EventType.MouseDown &&
                            clickRect.Contains(Event.current.mousePosition))
                        {
                            selectedSprite = new SpriteIndex(spriteIndex.atlas, spriteIndex.bin, spriteIndex.sprite);
                            clicked        = true;
                            Event.current.Use();
                        }
                        index += 1;
                    }
                }
                if (clicked && Event.current.clickCount == 2)
                {
                    MarkCloseWindow();
                }
            }
            var countLabel = new GUIContent((count - 1) + "/" + mFilter.Length);
            var countSize  = EditorStyles.miniLabel.CalcSize(countLabel);
            var countRect  = new Rect(viewRect.xMax - countSize.x - 10, viewRect.yMax - countSize.y, countSize.x, countSize.y);

            GUI.Label(countRect, countLabel, EditorStyles.miniLabel);
            GUI.EndGroup();
        }