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); } }
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); }
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(); }