public void sendEventAtlasWidthHeightChanged() { if (UFTAtlasEditorEventManager.onAtlasSizeChanged != null) { UFTAtlasEditorEventManager.onAtlasSizeChanged((int)atlasWidth, (int)atlasHeight); } }
private void Repaint() { if (UFTAtlasEditorEventManager.onNeedToRepaint != null) { UFTAtlasEditorEventManager.onNeedToRepaint(); } }
private void sendEventAtlasChanged() { if (UFTAtlasEditorEventManager.onAtlasChange != null) { UFTAtlasEditorEventManager.onAtlasChange(); } }
void removeLatestEntryFromList() { UFTAtlasEntry latestEntry = atlasEntries[atlasEntries.Count - 1]; if (UFTAtlasEditorEventManager.onRemoveEntry != null) { UFTAtlasEditorEventManager.onRemoveEntry(latestEntry); } atlasEntries.Remove(latestEntry); sendEventAtlasChanged(); }
//return true if texture has been trimmed, or false if not public bool trimTexture() { Texture2D newTexture = UFTTextureUtil.trimTextureAlpha(texture); if (newTexture != texture) { canvasRect.width = newTexture.width; canvasRect.height = newTexture.height; isTrimmed = true; texture = newTexture; if (UFTAtlasEditorEventManager.onTextureSizeChanged != null) { UFTAtlasEditorEventManager.onTextureSizeChanged(this); } return(true); } return(false); }
public void addNewEntry(Texture2D texture, string assetPath) { string name = assetPath.Substring(assetPath.LastIndexOf('/') + 1); Rect rect = new Rect(0, 0, texture.width, texture.height); UFTAtlasEntry uftAtlasEntry = UFTAtlasEntry.CreateInstance <UFTAtlasEntry>(); uftAtlasEntry.assetPath = assetPath; uftAtlasEntry.textureName = name; uftAtlasEntry.canvasRect = rect; uftAtlasEntry.texture = texture; uftAtlasEntry.uftAtlas = this; atlasEntries.Add(uftAtlasEntry); if (UFTAtlasEditorEventManager.onAddNewEntry != null) { UFTAtlasEditorEventManager.onAddNewEntry(uftAtlasEntry); } sendEventAtlasChanged(); }
void OnGUI() { if (isAtlasDirty) { EditorUtility.SetDirty(uftAtlas); isAtlasDirty = false; } EditorGUILayout.Separator(); EditorGUILayout.BeginHorizontal(); EditorGUILayout.BeginVertical(new GUILayoutOption[] { GUILayout.Width(200f) }); EditorGUILayout.Separator(); EditorGUILayout.LabelField("Atlas:"); string newName = EditorGUILayout.TextField("name", uftAtlas.atlasName); if (newName != uftAtlas.atlasName) { uftAtlas.atlasName = newName; } UFTAtlasMetadata newMeta = (UFTAtlasMetadata)EditorGUILayout.ObjectField((Object)atlasMetadata, typeof(UFTAtlasMetadata), false); if (newMeta != atlasMetadata) { if (uftAtlas.atlasEntries.Count == 0 || (uftAtlas.atlasEntries.Count > 0 && EditorUtility.DisplayDialog("This action will remove all existing textures on your atlas", "Do you want to proceed?", "Proceed", "Cancel"))) { if (UFTAtlasEditorEventManager.onAtlasMetadataObjectChanged != null) { UFTAtlasEditorEventManager.onAtlasMetadataObjectChanged(newMeta); } atlasMetadata = newMeta; } } EditorGUILayout.BeginHorizontal(); if (GUILayout.Button("new")) { if (uftAtlas.atlasEntries.Count == 0 || (uftAtlas.atlasEntries.Count > 0 && EditorUtility.DisplayDialog("This action will remove all existing textures on your atlas", "Do you want to proceed?", "Proceed", "Cancel"))) { onClickNew(); } } if (GUILayout.Button("save")) { onClickSave(); } EditorGUILayout.EndHorizontal(); UFTAtlasSize newWidth = (UFTAtlasSize)EditorGUILayout.EnumPopup("width", uftAtlas.atlasWidth); UFTAtlasSize newHeight = (UFTAtlasSize)EditorGUILayout.EnumPopup("height", uftAtlas.atlasHeight); EditorGUILayout.Separator(); EditorGUILayout.LabelField("Allign:"); uftAtlas.borderSize = EditorGUILayout.IntField("border size", uftAtlas.borderSize); if (GUILayout.Button("allign") && uftAtlas != null && uftAtlas.atlasEntries.Count > 0) { uftAtlas.arrangeEntriesUsingUnityPackager(); } if (newWidth != uftAtlas.atlasWidth || newHeight != uftAtlas.atlasHeight) { uftAtlas.atlasWidth = newWidth; uftAtlas.atlasHeight = newHeight; if (UFTAtlasEditorEventManager.onAtlasSizeChanged != null) { UFTAtlasEditorEventManager.onAtlasSizeChanged((int)newWidth, (int)newHeight); } } EditorGUILayout.Separator(); EditorGUILayout.LabelField("Atlas Textures [" + uftAtlas.atlasEntries.Count + "]:"); if (uftAtlas.atlasEntries.Count > 0) { if (GUILayout.Button("trim alpha")) { uftAtlas.trimAllEntries(); } } atlasTexturesScrollPosition = EditorGUILayout.BeginScrollView(atlasTexturesScrollPosition); if (uftAtlas.atlasEntries.Count > 0) { List <string> names = uftAtlas.atlasEntries.ConvertAll(new System.Converter <UFTAtlasEntry, string>(uftAtlasEntryToString)); names.Sort(); foreach (string name in names) { EditorGUILayout.LabelField(name, GUILayout.MaxWidth(220f)); } } EditorGUILayout.EndScrollView(); EditorGUILayout.Separator(); EditorGUILayout.EndVertical(); EditorGUILayout.BeginVertical(); EditorGUILayout.Separator(); EditorGUILayout.BeginHorizontal(); scrollPosition = EditorGUILayout.BeginScrollView(scrollPosition); GUILayoutUtility.GetRect((int)uftAtlas.atlasWidth, (int)uftAtlas.atlasHeight); uftAtlas.OnGUI(); EditorGUILayout.EndScrollView(); EditorGUILayout.Separator(); EditorGUILayout.EndHorizontal(); EditorGUILayout.EndVertical(); EditorGUILayout.EndHorizontal(); EditorGUILayout.Separator(); if (Event.current.type == EventType.DragUpdated || Event.current.type == EventType.DragPerform) { DragAndDrop.visualMode = DragAndDropVisualMode.Copy; // show a drag-add icon on the mouse cursor if (Event.current.type == EventType.dragPerform) { HandleDroppedObjects(DragAndDrop.objectReferences); } DragAndDrop.AcceptDrag(); Event.current.Use(); } }
public void OnGUI() { UFTAtlas.DragMode dragMode = _uftAtlas.currentDragMode; if (Event.current.type == EventType.MouseUp || ((isDragging || isPivotReposition) && stopDragging)) { textureState = UFTTextureState.passive; if (isDragging || isPivotReposition) { isDragging = false; isPivotReposition = false; if (UFTAtlasEditorEventManager.onStopDragging != null) { UFTAtlasEditorEventManager.onStopDragging(this); } if (UFTAtlasEditorEventManager.onAtlasChange != null) { UFTAtlasEditorEventManager.onAtlasChange(); } } } else if (Event.current.type == EventType.MouseDown && canvasRect.Contains(Event.current.mousePosition)) { Vector2 uv = Event.current.mousePosition - new Vector2(canvasRect.xMin, canvasRect.yMin); if (dragMode == UFTAtlas.DragMode.DragPivotOnly || ((pivot - uv).magnitude < 6f && dragMode == UFTAtlas.DragMode.DragImageOrPivot)) { isPivotReposition = true; } else { isDragging = true; } textureState = UFTTextureState.onDrag; mouseStartPosition = Event.current.mousePosition; if (UFTAtlasEditorEventManager.onStartDragging != null) { UFTAtlasEditorEventManager.onStartDragging(this); } Event.current.Use(); stopDragging = false; } Color color = GUI.color; if (isPivotReposition) { if (Event.current.type == EventType.Repaint) { pivot = Event.current.mousePosition - canvasRect.min; pivot.x = Mathf.Clamp(pivot.x, 0f, canvasRect.width); pivot.y = Mathf.Clamp(pivot.y, 0f, canvasRect.height); mouseStartPosition = Event.current.mousePosition; } if (UFTAtlasEditorEventManager.onDragInProgress != null) { UFTAtlasEditorEventManager.onDragInProgress(); } //if dragging lets color it to drag color border GUI.color = UFTTextureUtil.borderColorDict[UFTTextureState.onDrag]; // check is mouse under texture, if not, initialize dropping if (Event.current.type == EventType.Repaint && !canvasRect.Contains(Event.current.mousePosition)) { stopDragging = true; } } if (isDragging) { Vector2 currentOffset = Event.current.mousePosition - mouseStartPosition; if (Event.current.type == EventType.Repaint) { canvasRect.x += currentOffset.x; canvasRect.y += currentOffset.y; if (canvasRect.x < 0) { canvasRect.x = 0; } if (canvasRect.y < 0) { canvasRect.y = 0; } if (canvasRect.xMax > (int)uftAtlas.atlasWidth) { canvasRect.x = (int)uftAtlas.atlasWidth - texture.width; } if (canvasRect.yMax > (int)uftAtlas.atlasHeight) { canvasRect.y = (int)uftAtlas.atlasHeight - texture.height; } mouseStartPosition = Event.current.mousePosition; } if (UFTAtlasEditorEventManager.onDragInProgress != null) { UFTAtlasEditorEventManager.onDragInProgress(); } //if dragging lets color it to drag color border GUI.color = UFTTextureUtil.borderColorDict[UFTTextureState.onDrag]; // check is mouse under texture, if not, initialize dropping if (Event.current.type == EventType.Repaint && !canvasRect.Contains(Event.current.mousePosition)) { stopDragging = true; } } if (isSizeInvalid) { long currentTime = System.DateTime.Now.Ticks; if (controlBlinkTime == null) { controlBlinkTime = currentTime + blinkTimeout; currentBlinkColor = blinkColor1; } if (controlBlinkTime <= currentTime) { controlBlinkTime = currentTime + blinkTimeout; currentBlinkColor = (currentBlinkColor == blinkColor1)?blinkColor2:blinkColor1; } GUI.color = currentBlinkColor; if (UFTAtlasEditorEventManager.onNeedToRepaint != null) { UFTAtlasEditorEventManager.onNeedToRepaint(); } } GUI.DrawTexture(canvasRect, texture, ScaleMode.ScaleToFit, true); //EditorGUI.DrawPreviewTexture(canvasRect,texture); if (isDragging || isSizeInvalid) { GUI.color = color; } }
void OnGUI() { if (isAtlasDirty) { EditorUtility.SetDirty(uftAtlas); isAtlasDirty = false; } EditorGUILayout.Separator(); EditorGUILayout.BeginHorizontal(); EditorGUILayout.BeginVertical(new GUILayoutOption[] { GUILayout.Width(200f) }); EditorGUILayout.Separator(); EditorGUILayout.LabelField("Atlas:"); string newName = EditorGUILayout.TextField("name", uftAtlas.atlasName); if (newName != uftAtlas.atlasName) { uftAtlas.atlasName = newName; } UFTAtlasMetadata newMeta = (UFTAtlasMetadata)EditorGUILayout.ObjectField((Object)atlasMetadata, typeof(UFTAtlasMetadata), false); if (newMeta != atlasMetadata) { if (uftAtlas.atlasEntries.Count == 0 || (uftAtlas.atlasEntries.Count > 0 && EditorUtility.DisplayDialog("This action will remove all existing textures on your atlas", "Do you want to proceed?", "Proceed", "Cancel"))) { if (UFTAtlasEditorEventManager.onAtlasMetadataObjectChanged != null) { UFTAtlasEditorEventManager.onAtlasMetadataObjectChanged(newMeta); } atlasMetadata = newMeta; } } EditorGUILayout.BeginHorizontal(); if (GUILayout.Button("new")) { if (uftAtlas.atlasEntries.Count == 0 || (uftAtlas.atlasEntries.Count > 0 && EditorUtility.DisplayDialog("This action will remove all existing textures on your atlas", "Do you want to proceed?", "Proceed", "Cancel"))) { onClickNew(); } } if (GUILayout.Button("save")) { onClickSave(); } EditorGUILayout.EndHorizontal(); UFTAtlasSize newWidth = (UFTAtlasSize)EditorGUILayout.EnumPopup("width", uftAtlas.atlasWidth); UFTAtlasSize newHeight = (UFTAtlasSize)EditorGUILayout.EnumPopup("height", uftAtlas.atlasHeight); uftAtlas.currentDragMode = (UFTAtlas.DragMode)EditorGUILayout.EnumPopup(uftAtlas.currentDragMode); EditorGUILayout.Separator(); EditorGUILayout.LabelField("Align:"); uftAtlas.borderSize = Mathf.Max(0, EditorGUILayout.IntField("border size", uftAtlas.borderSize)); bool autoAlign = GUILayout.Button("auto align & size"); bool normalAlign = GUILayout.Button("align"); if ((autoAlign || normalAlign) && uftAtlas != null && uftAtlas.atlasEntries.Count > 0) { bool successful = true; if (normalAlign) { successful = uftAtlas.arrangeEntriesUsingUnityPackager(); } if (autoAlign) { UFTAtlasSize oldWidth = uftAtlas.atlasWidth; UFTAtlasSize oldHeight = uftAtlas.atlasHeight; int w = (int)128; int h = (int)128; while (true) { uftAtlas.atlasHeight = (UFTAtlasSize)(w); uftAtlas.atlasWidth = (UFTAtlasSize)(h); if (uftAtlas.arrangeEntriesUsingUnityPackager()) { break; } if (uftAtlas.atlasWidth == UFTAtlasSize._4096 && uftAtlas.atlasHeight == UFTAtlasSize._4096) { successful = false; break; } uftAtlas.atlasHeight = (UFTAtlasSize)(w * 2); uftAtlas.atlasWidth = (UFTAtlasSize)(h); if (uftAtlas.arrangeEntriesUsingUnityPackager()) { break; } uftAtlas.atlasHeight = (UFTAtlasSize)(w); uftAtlas.atlasWidth = (UFTAtlasSize)(h * 2); if (uftAtlas.arrangeEntriesUsingUnityPackager()) { break; } w *= 2; h *= 2; } if (!successful) { uftAtlas.atlasWidth = oldWidth; uftAtlas.atlasHeight = oldHeight; } else if (uftAtlas.atlasWidth != oldWidth || uftAtlas.atlasHeight != oldHeight) { newWidth = uftAtlas.atlasWidth; newHeight = uftAtlas.atlasHeight; uftAtlas.atlasWidth = oldWidth; uftAtlas.atlasHeight = oldHeight; } } if (successful) { alignSuccesful = "Alignment successful. "; } else { alignSuccesful = "Alignment failed! Try extending atlas size"; } } GUILayout.Label(alignSuccesful); if (newWidth != uftAtlas.atlasWidth || newHeight != uftAtlas.atlasHeight) { uftAtlas.atlasWidth = newWidth; uftAtlas.atlasHeight = newHeight; if (UFTAtlasEditorEventManager.onAtlasSizeChanged != null) { UFTAtlasEditorEventManager.onAtlasSizeChanged((int)newWidth, (int)newHeight); } } EditorGUILayout.Separator(); EditorGUILayout.LabelField("Atlas Textures [" + uftAtlas.atlasEntries.Count + "]:"); atlasTexturesScrollPosition = EditorGUILayout.BeginScrollView(atlasTexturesScrollPosition); if (uftAtlas.atlasEntries.Count > 0) { List <string> names = uftAtlas.atlasEntries.ConvertAll(new System.Converter <UFTAtlasEntry, string>(uftAtlasEntryToString)); names.Sort(); foreach (string name in names) { EditorGUILayout.BeginHorizontal(); GUI.color = Color.red; if (GUILayout.Button("x")) { int index = uftAtlas.atlasEntries.FindIndex(o => o.textureName == name); uftAtlas.atlasEntries.RemoveAt(index); } GUI.color = Color.white; EditorGUILayout.LabelField(name, GUILayout.MaxWidth(220f)); EditorGUILayout.EndHorizontal(); } } EditorGUILayout.EndScrollView(); EditorGUILayout.Separator(); EditorGUILayout.EndVertical(); EditorGUILayout.BeginVertical(); EditorGUILayout.Separator(); EditorGUILayout.BeginHorizontal(); scrollPosition = EditorGUILayout.BeginScrollView(scrollPosition); GUILayoutUtility.GetRect((int)uftAtlas.atlasWidth, (int)uftAtlas.atlasHeight); uftAtlas.OnGUI(); EditorGUILayout.EndScrollView(); EditorGUILayout.Separator(); EditorGUILayout.EndHorizontal(); EditorGUILayout.EndVertical(); EditorGUILayout.EndHorizontal(); EditorGUILayout.Separator(); if (Event.current.type == EventType.DragUpdated || Event.current.type == EventType.DragPerform) { DragAndDrop.visualMode = DragAndDropVisualMode.Copy; // show a drag-add icon on the mouse cursor if (Event.current.type == EventType.dragPerform) { HandleDroppedObjects(DragAndDrop.objectReferences); } DragAndDrop.AcceptDrag(); Event.current.Use(); } }