Exemple #1
0
 public PackAtlasSprite(BinRaw binRaw, SpriteRaw spriteRaw)
 {
     mMain = binRaw.main;
     Debug.Assert(mMain != null, "Can not find main texture.");
     mAddition     = binRaw.addition;
     mName         = spriteRaw.name;
     mRect         = spriteRaw.rect;
     mBorder       = spriteRaw.border;
     mPivot        = spriteRaw.pivot;
     mTransparency = PackUtil.CheckAtlasBinTranparency(binRaw);
     mQuality      = (PackQuality)binRaw.quality;
 }
Exemple #2
0
        private void OnPreviewInfoGUI(Rect rect, SpriteRaw sprite)
        {
            var bottomInfo     = new GUIContent(sprite.rect.width + "x" + sprite.rect.height);
            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);
            if (mShowBorder)
            {
                var border = sprite.border;
                EditorGUI.LabelField(new Rect(rect.x, rect.y + rect.height - 40, rect.width, 20),
                                     string.Format("L:{0}, B:{1}, R:{2}, T:{3}", (int)border.x, (int)border.y, (int)border.z, (int)border.w));
                var pivot = sprite.pivot;
                EditorGUI.LabelField(new Rect(rect.x, rect.y + rect.height - 20, rect.width, 20),
                                     string.Format("PX:{0}, PY:{1}", pivot.x, pivot.y));
            }
        }
Exemple #3
0
 public bool Fetch(SpriteIndex index, out AtlasRaw atlas, out BinRaw bin, out SpriteRaw sprite)
 {
     atlas  = null;
     bin    = null;
     sprite = null;
     if (index.atlas < mAtlases.Count)
     {
         atlas = mAtlases[index.atlas];
         if (index.bin < atlas.bins.Length)
         {
             bin = atlas.bins[index.bin];
             if (index.sprite < bin.sprites.Length)
             {
                 sprite = bin.sprites[index.sprite];
                 return(true);
             }
         }
     }
     return(false);
 }
Exemple #4
0
 public static void IndexSprite(AtlasRaw atlas, SpriteRaw sprite, out int iBin, out int iSprite)
 {
     iBin    = -1;
     iSprite = -1;
     for (int i = 0; i < atlas.bins.Length; i++)
     {
         var bin = atlas.bins[i];
         for (int j = 0; j < bin.sprites.Length; j++)
         {
             if (bin.sprites[j] == sprite)
             {
                 iSprite = j;
                 break;
             }
         }
         if (iSprite != -1)
         {
             iBin = i;
             break;
         }
     }
 }
Exemple #5
0
        private void OnPreivewTitleGUI(Rect rect, SpriteRaw sprite)
        {
            var controlID = GUIUtility.GetControlID(FocusType.Passive);
            var eventType = Event.current.GetTypeForControl(controlID);

            if (eventType == EventType.Repaint)
            {
                EditorStyles.toolbar.Draw(rect, GUIContent.none, controlID);
            }
            if (GUI.Button(new Rect(rect.x, rect.y, 60, rect.height), "Save", EditorStyles.toolbarButton))
            {
                AssetDatabase.SaveAssets();
            }
            EditorGUI.LabelField(new Rect(rect.x + rect.width - 320, rect.y, 40, rect.height), "Name", EditorStyles.miniLabel);
            EditorGUI.BeginChangeCheck();
            sprite.name = EditorGUI.TextField(new Rect(rect.x + rect.width - 280, rect.y + 1, 200, rect.height), sprite.name, EditorStyles.toolbarTextField);
            if (EditorGUI.EndChangeCheck())
            {
                EditorUtility.SetDirty(target);
            }
            mShowBorder = GUI.Toggle(new Rect(rect.x + rect.width - 80, rect.y, 80, rect.height), mShowBorder, "Edit Border", EditorStyles.toolbarButton);
        }
Exemple #6
0
        public static Rect DrawSpriteInRect(Texture2D main, Texture2D alpha, SpriteRaw sprite, Rect rect, Vector2 margin)
        {
            var spw = sprite.rect.width;
            var sph = sprite.rect.height;

            if (spw / sph >= rect.width / rect.height)
            {
                if (spw > rect.width - margin.x)
                {
                    spw = Mathf.Max(rect.width - margin.x, 1);
                    sph = sprite.rect.height / sprite.rect.width * spw;
                }
            }
            else
            {
                if (sph > rect.height - margin.y)
                {
                    sph = Mathf.Max(rect.height - margin.y, 1);
                    spw = sprite.rect.width / sprite.rect.height * sph;
                }
            }
            var previewRect = new Rect(
                rect.x + (rect.width - spw) * 0.5f,
                rect.y + (rect.height - sph) * 0.5f,
                spw,
                sph
                );
            var uvRect = new Rect(
                sprite.rect.x / main.width,
                sprite.rect.y / main.height,
                sprite.rect.width / main.width,
                sprite.rect.height / main.height);

            DrawGrid(previewRect);
            DrawSprite(previewRect, main, alpha, uvRect);
            return(previewRect);
        }
Exemple #7
0
 public static PackAtlasSprite ParseSprite(BinRaw binRaw, SpriteRaw spriteRaw)
 {
     return(new PackAtlasSprite(binRaw, spriteRaw));
 }
Exemple #8
0
        private void OnSpriteBorderGUI(Rect panelRect, Rect borderRect, SpriteRaw sprite)
        {
            var controlID   = GUIUtility.GetControlID(FocusType.Passive);
            var eventType   = Event.current.GetTypeForControl(controlID);
            var border      = sprite.border;
            var borderScale = new Vector2(
                borderRect.width / sprite.rect.width,
                borderRect.height / sprite.rect.height);
            var scaledBorder = new Vector4(
                border.x * borderScale.x,
                border.y * borderScale.y,
                border.z * borderScale.x,
                border.w * borderScale.y);
            var lines = new Rect[]
            {
                new Rect(panelRect.x, borderRect.y + scaledBorder.w, panelRect.width, 1),
                new Rect(panelRect.x, borderRect.yMax - scaledBorder.y - 1, panelRect.width, 1),
                new Rect(borderRect.x + scaledBorder.x, panelRect.y, 1, panelRect.height),
                new Rect(borderRect.xMax - scaledBorder.z - 1, panelRect.y, 1, panelRect.height),
            };

            foreach (var line in lines)
            {
                EditorGUI.DrawRect(line, Color.green);
            }
            var area  = Mathf.Min(3, borderRect.width * 0.5f, borderRect.height * 0.5f);
            var areas = new Rect[]
            {
                new Rect(lines[0].x, lines[0].y - area, lines[0].width, lines[0].height + area * 2),
                new Rect(lines[1].x, lines[1].y - area, lines[1].width, lines[1].height + area * 2),
                new Rect(lines[2].x - area, lines[2].y, lines[2].width + area * 2, lines[2].height),
                new Rect(lines[3].x - area, lines[3].y, lines[3].width + area * 2, lines[3].height),
            };

            switch (eventType)
            {
            case EventType.MouseDown:
            {
                for (int i = 0; i < areas.Length; i++)
                {
                    if (areas[i].Contains(Event.current.mousePosition))
                    {
                        GUIUtility.hotControl = controlID;
                        var index = GUIUtility.GetStateObject(typeof(List <int>), controlID) as List <int>;
                        index.Clear();
                        index.Add(i);
                        break;
                    }
                }
                break;
            }

            case EventType.MouseDrag:
            {
                if (GUIUtility.hotControl == controlID &&
                    panelRect.Contains(Event.current.mousePosition))
                {
                    var delta = Event.current.delta;
                    delta.x *= 1 / borderScale.x;
                    delta.y *= 1 / borderScale.y;
                    var index = GUIUtility.GetStateObject(typeof(List <int>), controlID) as List <int>;
                    var i     = index[0];
                    if (i == 0)
                    {
                        border.w = Mathf.Clamp(border.w + delta.y, 0, sprite.rect.height);
                    }
                    else if (i == 1)
                    {
                        border.y = Mathf.Clamp(border.y - delta.y, 0, sprite.rect.height);
                    }
                    else if (i == 2)
                    {
                        border.x = Mathf.Clamp(border.x + delta.x, 0, sprite.rect.width);
                    }
                    else if (i == 3)
                    {
                        border.z = Mathf.Clamp(border.z - delta.x, 0, sprite.rect.width);
                    }
                    sprite.border = border;
                    EditorUtility.SetDirty(target);
                    Event.current.Use();
                }
                break;
            }

            case EventType.MouseUp:
            {
                if (GUIUtility.hotControl == controlID)
                {
                    GUIUtility.hotControl = 0;
                }
                break;
            }
            }
        }