private void SpritePreview(SVGUIAtlas uiAtlas, Canvas canvas, SVGSpriteAssetFile spriteAsset)
    {
        SVGUIWidgetType widgetType;
        Sprite          sprite     = spriteAsset.SpriteData.Sprite;
        Texture2D       texture    = sprite.texture;
        Rect            spriteRect = sprite.textureRect;
        Rect            uv         = new Rect(spriteRect.x / texture.width, spriteRect.y / texture.height, spriteRect.width / texture.width, spriteRect.height / texture.height);

        GUILayoutOption[] spriteTextureOptions = new GUILayoutOption[2] {
            GUILayout.Width(uiAtlas.SpritesPreviewSize), GUILayout.Height(uiAtlas.SpritesPreviewSize)
        };

        EditorGUILayout.BeginHorizontal(GUILayout.MinHeight(uiAtlas.SpritesPreviewSize + 5));
        {
            EditorGUILayout.LabelField(sprite.name, GUILayout.MinWidth(10));
            // reserve space for drawing sprite
            EditorGUILayout.LabelField("", spriteTextureOptions);
            Rect  guiRect       = GUILayoutUtility.GetLastRect();
            float maxSpriteDim  = Math.Max(spriteRect.width, spriteRect.height);
            float previewWidth  = (spriteRect.width / maxSpriteDim) * uiAtlas.SpritesPreviewSize;
            float previewHeight = (spriteRect.height / maxSpriteDim) * uiAtlas.SpritesPreviewSize;
            float previewX      = (uiAtlas.SpritesPreviewSize - previewWidth) / 2;
            float previewY      = 0;
            Rect  previewRect   = new Rect(guiRect.xMin + previewX, guiRect.yMin + previewY, previewWidth, previewHeight);
            GUI.DrawTextureWithTexCoords(previewRect, texture, uv, true);
            EditorGUILayout.Space();
            // sprite dimensions
            EditorGUILayout.LabelField("[" + spriteRect.width + " x " + spriteRect.height + "]", GUILayout.MaxWidth(120));

            if (GUILayout.Button("Edit", EditorStyles.miniButton))
            {
                // show pivot editor
                SVGPivotEditor.Show(spriteAsset, this.OnSpriteEdited);
            }

            widgetType = (SVGUIWidgetType)EditorGUILayout.EnumPopup("", spriteAsset.InstantiatedWidgetType, new GUILayoutOption[] { GUILayout.Width(80) });

            // instantiate
            if (GUILayout.Button("Instantiate", EditorStyles.miniButton))
            {
                GameObject gameObj = uiAtlas.InstantiateWidget(canvas, spriteAsset.SpriteRef, widgetType);
                // set the created instance as selected
                if (gameObj != null)
                {
                    Selection.objects = new UnityEngine.Object[1] {
                        gameObj as UnityEngine.Object
                    };
                }
            }

            EditorGUILayout.Space();
        }
        EditorGUILayout.EndHorizontal();

        if (widgetType != spriteAsset.InstantiatedWidgetType)
        {
            spriteAsset.InstantiatedWidgetType = widgetType;
        }
    }
    private void SpritePreview(SVGAtlas atlas, SVGSpriteAssetFile spriteAsset)
    {
        Sprite    sprite     = spriteAsset.SpriteData.Sprite;
        Texture2D texture    = sprite.texture;
        Rect      spriteRect = sprite.textureRect;
        Rect      uv         = new Rect(spriteRect.x / texture.width, spriteRect.y / texture.height, spriteRect.width / texture.width, spriteRect.height / texture.height);

        GUILayoutOption[] spriteTextureOptions = new GUILayoutOption[2] {
            GUILayout.Width(atlas.SpritesPreviewSize), GUILayout.Height(atlas.SpritesPreviewSize)
        };

        EditorGUILayout.BeginHorizontal(GUILayout.MinHeight(atlas.SpritesPreviewSize + 5));
        {
            EditorGUILayout.LabelField(sprite.name, GUILayout.MinWidth(10));
            // reserve space for drawing sprite
            EditorGUILayout.LabelField("", spriteTextureOptions);
            Rect  guiRect       = GUILayoutUtility.GetLastRect();
            float maxSpriteDim  = Math.Max(spriteRect.width, spriteRect.height);
            float previewWidth  = (spriteRect.width / maxSpriteDim) * atlas.SpritesPreviewSize;
            float previewHeight = (spriteRect.height / maxSpriteDim) * atlas.SpritesPreviewSize;
            float previewX      = (atlas.SpritesPreviewSize - previewWidth) / 2;
            //float previewY = (SVGAtlasEditor.SPRITE_PREVIEW_DIMENSION - previewHeight) / 2;
            //float previewY = (previewWidth > previewHeight) ? 0 : ((SVGAtlasEditor.SPRITE_PREVIEW_DIMENSION - previewHeight) / 2);
            float previewY    = 0;
            Rect  previewRect = new Rect(guiRect.xMin + previewX, guiRect.yMin + previewY, previewWidth, previewHeight);
            GUI.DrawTextureWithTexCoords(previewRect, texture, uv, true);
            EditorGUILayout.Space();
            // sprite dimensions
            EditorGUILayout.LabelField("[" + spriteRect.width + " x " + spriteRect.height + "]", GUILayout.MaxWidth(100));
            EditorGUILayout.Space();
            // current pivot
            EditorGUILayout.LabelField("Pivot [" + string.Format("{0:0.00}", spriteAsset.SpriteData.Pivot.x) + " , " + string.Format("{0:0.00}", spriteAsset.SpriteData.Pivot.y) + "]", GUILayout.Width(120));
            EditorGUILayout.Space();
            // edit pivot
            if (GUILayout.Button("Edit", EditorStyles.miniButton))
            {
                // show pivot editor
                SVGPivotEditor.Show(spriteAsset, this.OnPivotEdited);
            }
            // instantiate
            if (GUILayout.Button("Instantiate", EditorStyles.miniButton, GUILayout.Width(80)))
            {
                GameObject gameObj = atlas.InstantiateSprite(spriteAsset.SpriteRef);
                // set the created instance as selected
                if (gameObj != null)
                {
                    Selection.objects = new UnityEngine.Object[1] {
                        gameObj as UnityEngine.Object
                    };
                }
            }
            EditorGUILayout.Space();
        }
        EditorGUILayout.EndHorizontal();
    }
Exemplo n.º 3
0
    // show the sprite selector
    static public void Show(SVGSpriteAssetFile spriteAsset, OnPivotEditedCallback callback)
    {
        // close the current selector instance, if any
        SVGPivotEditor.CloseAll();

        if (spriteAsset != null)
        {
            SVGPivotEditor pivotEditor = SVGPivotEditor.CreateInstance <SVGPivotEditor>();
            SVGPivotEditor.Init(pivotEditor, spriteAsset, spriteAsset.SpriteData.Pivot, spriteAsset.SpriteData.Border, callback);
            pivotEditor.ShowEditor();
        }
    }
Exemplo n.º 4
0
    private static void Init(SVGPivotEditor editor, SVGSpriteAssetFile spriteAsset, Vector2 pivot, Vector4 border, OnPivotEditedCallback callback)
    {
        float v;
        Rect  spriteRect = spriteAsset.SpriteData.Sprite.rect;
        float minDim     = Math.Min(spriteRect.width, spriteRect.height);

        // keep track of the sprite and the input/output pivot
        editor.m_SpriteAsset = spriteAsset;
        editor.m_Pivot.Set(pivot.x, pivot.y);
        editor.m_Border              = border;
        editor.m_SpritePreviewWidth  = spriteRect.width;
        editor.m_SpritePreviewHeight = spriteRect.height;
        // adapt window dimension
        if (minDim < SVGPivotEditor.SPRITE_PREVIEW_MIN_DIMENSION)
        {
            float scl = SVGPivotEditor.SPRITE_PREVIEW_MIN_DIMENSION / minDim;
            editor.m_SpritePreviewWidth  *= scl;
            editor.m_SpritePreviewHeight *= scl;
        }
        // we must not exceed screen resolution (width)
        v = Screen.currentResolution.width * 0.9f;
        if (editor.m_SpritePreviewWidth > v)
        {
            float scl = v / editor.m_SpritePreviewWidth;
            editor.m_SpritePreviewWidth  *= scl;
            editor.m_SpritePreviewHeight *= scl;
        }
        v = Screen.currentResolution.height * 0.9f;
        if (editor.m_SpritePreviewHeight > v)
        {
            float scl = v / editor.m_SpritePreviewHeight;
            editor.m_SpritePreviewWidth  *= scl;
            editor.m_SpritePreviewHeight *= scl;
        }

        editor.m_SpritePreviewWidth  = Mathf.Round(editor.m_SpritePreviewWidth);
        editor.m_SpritePreviewHeight = Mathf.Round(editor.m_SpritePreviewHeight);
        editor.m_WindowWidth         = editor.m_SpritePreviewWidth;
        // we must ensure that pivot and border controls are already visible
        if (editor.m_WindowWidth < 190)
        {
            editor.m_WindowWidth = 190;
        }
        editor.m_WindowHeight = editor.m_SpritePreviewHeight + SVGPivotEditor.BUTTONS_HEIGHT + (SVGPivotEditor.EDIT_FIELDS_HEIGHT * 3);
        // set title
        editor.titleContent = new GUIContent("Sprite editor");
        // set callback
        editor.m_Callback = callback;
    }
    protected bool UpdateButtonDraw(SVGBasicAtlas atlas)
    {
        bool pushed = false;
        // update button
        string updateStr = (atlas.NeedsUpdate()) ? "Update *" : "Update";

        if (GUILayout.Button(updateStr))
        {
            // close all modal popup editors
            SVGPivotEditor.CloseAll();
            SVGSpriteSelector.CloseAll();
            SVGAtlasSelector.CloseAll();
            pushed = true;
        }

        return(pushed);
    }
    private void DrawInspector()
    {
        bool resizeOnStart;

        EditorGUILayout.BeginHorizontal();
        {
            EditorGUILayout.PrefixLabel("Resize on Start()");
            resizeOnStart = EditorGUILayout.Toggle(this.m_EditedLoader.ResizeOnStart);
        }
        EditorGUILayout.EndHorizontal();

        SVGUIAtlas uiAtlas = this.m_EditedLoader.UIAtlas;

        if ((uiAtlas != null) && (this.m_EditedLoader.SpriteReference != null))
        {
            SVGSpriteAssetFile spriteAsset = uiAtlas.GetGeneratedSprite(this.m_EditedLoader.SpriteReference);
            string             buttonText  = (spriteAsset != null) ? spriteAsset.SpriteData.Sprite.name : "<select>";

            EditorGUILayout.BeginHorizontal();
            {
                EditorGUILayout.PrefixLabel("Sprite");
                if (GUILayout.Button(buttonText, "DropDown"))
                {
                    SVGSpriteSelector.Show(uiAtlas, "", this.OnSpriteSelect);
                }
                if (GUILayout.Button("Edit", GUILayout.Width(80)))
                {
                    // show pivot editor
                    SVGPivotEditor.Show(spriteAsset, this.OnSpriteEdited);
                }
            }
            EditorGUILayout.EndHorizontal();
        }

        if (this.m_EditedLoader.ResizeOnStart != resizeOnStart)
        {
            this.m_EditedLoader.ResizeOnStart = resizeOnStart;
            SVGUtils.MarkObjectDirty(this.m_EditedLoader);
        }
    }
Exemplo n.º 7
0
    // Draw the specified Image.
    private void DrawSprite(Sprite sprite, Rect drawArea, Color color)
    {
        if ((sprite != null) || (sprite.texture != null))
        {
            Rect outer = sprite.rect;
            Rect inner = outer;

            inner.xMin += this.m_Border.x;
            inner.yMin += this.m_Border.y;
            inner.xMax -= this.m_Border.z;
            inner.yMax -= this.m_Border.w;

            Vector4 uv4     = UnityEngine.Sprites.DataUtility.GetOuterUV(sprite);
            Rect    uv      = new Rect(uv4.x, uv4.y, uv4.z - uv4.x, uv4.w - uv4.y);
            Vector4 padding = UnityEngine.Sprites.DataUtility.GetPadding(sprite);
            padding.x /= outer.width;
            padding.y /= outer.height;
            padding.z /= outer.width;
            padding.w /= outer.height;

            SVGPivotEditor.DrawSprite(sprite.texture, drawArea, padding, outer, inner, uv, color);
        }
    }
Exemplo n.º 8
0
 static private Texture2D CreateContrastTexture()
 {
     return(SVGPivotEditor.CreateCheckerTex(new Color(0f, 0.0f, 0f, 0.5f), new Color(1f, 1f, 1f, 0.5f), "SVGPivotEditor.m_ContrastTexture"));
 }
Exemplo n.º 9
0
    private void Draw(Rect region)
    {
        float mouseX, mouseY, px, py, y, h;
        Rect  spritePreviewRect = new Rect();

        GUILayoutOption[] okButtonOptions = new GUILayoutOption[2] {
            GUILayout.Width(this.m_WindowWidth / 2 - 8), GUILayout.Height(SVGPivotEditor.BUTTONS_HEIGHT - 3)
        };
        GUILayoutOption[] cancelButtonOptions = new GUILayoutOption[2] {
            GUILayout.Width(this.m_WindowWidth / 2 - 3), GUILayout.Height(SVGPivotEditor.BUTTONS_HEIGHT - 3)
        };

        GUILayout.BeginArea(region);
        {
            // ----------------
            // custom code here
            // ----------------
            if (this.m_SpriteAsset != null)
            {
                Sprite sprite              = this.m_SpriteAsset.SpriteData.Sprite;
                float  spritePreviewWidth  = this.m_SpritePreviewWidth;
                float  spritePreviewHeight = this.m_SpritePreviewHeight;
                float  spritePreviewX      = 0;
                float  spritePreviewY      = 0;

                // draw the sprite preview
                spritePreviewRect = new Rect(spritePreviewX, spritePreviewY, spritePreviewWidth, spritePreviewHeight);
                this.DrawSprite(sprite, spritePreviewRect, new Color(1.0f, 1.0f, 1.0f, 1.0f));

                // draw pivot
                px = spritePreviewX + this.m_Pivot.x * spritePreviewWidth;
                py = spritePreviewY + (1 - this.m_Pivot.y) * spritePreviewHeight;
                GUI.DrawTexture(new Rect(px - SVGPivotEditor.PIVOT_CURSOR_DIMENSION * 0.5f, py - SVGPivotEditor.PIVOT_CURSOR_DIMENSION * 0.5f, SVGPivotEditor.PIVOT_CURSOR_DIMENSION, SVGPivotEditor.PIVOT_CURSOR_DIMENSION), SVGPivotEditor.PivotTexture);
            }

            // edit fields relative to sprite border
            y = region.height - SVGPivotEditor.BUTTONS_HEIGHT - 3 * SVGPivotEditor.EDIT_FIELDS_HEIGHT;
            h = 2 * SVGPivotEditor.EDIT_FIELDS_HEIGHT;
            GUILayout.BeginArea(new Rect(3, y, region.width, h));
            {
                GUILayout.BeginHorizontal(GUILayout.Height(SVGPivotEditor.EDIT_FIELDS_HEIGHT));
                {
                    GUILayout.Label("Border", GUILayout.Width(50));
                    GUILayout.Label("L", GUILayout.Width(15));
                    this.m_Border.x = EditorGUILayout.FloatField(this.m_Border.x, GUILayout.Width(40));
                    GUILayout.Label("B", GUILayout.Width(15));
                    this.m_Border.y = EditorGUILayout.FloatField(this.m_Border.y, GUILayout.Width(40));
                }
                GUILayout.EndHorizontal();

                GUILayout.BeginHorizontal(GUILayout.Height(SVGPivotEditor.EDIT_FIELDS_HEIGHT));
                {
                    GUILayout.Label("", GUILayout.Width(50));
                    GUILayout.Label("R", GUILayout.Width(15));
                    this.m_Border.z = EditorGUILayout.FloatField(this.m_Border.z, GUILayout.Width(40));
                    GUILayout.Label("T", GUILayout.Width(15));
                    this.m_Border.w = EditorGUILayout.FloatField(this.m_Border.w, GUILayout.Width(40));
                }
                GUILayout.EndHorizontal();
            }
            GUILayout.EndArea();

            // edit fields relative to sprite pivot
            y = region.height - SVGPivotEditor.BUTTONS_HEIGHT - SVGPivotEditor.EDIT_FIELDS_HEIGHT;
            h = SVGPivotEditor.EDIT_FIELDS_HEIGHT;
            GUILayout.BeginArea(new Rect(3, y, region.width, h));
            {
                GUILayout.BeginHorizontal(GUILayout.Height(SVGPivotEditor.EDIT_FIELDS_HEIGHT));
                {
                    GUILayout.Label("Pivot", GUILayout.Width(50));
                    this.m_Pivot.x = SVGPivotEditor.FloatField3DP("X", this.m_Pivot.x);
                    this.m_Pivot.y = SVGPivotEditor.FloatField3DP("Y", this.m_Pivot.y);
                }
                GUILayout.EndHorizontal();
            }
            GUILayout.EndArea();

            // button bar
            GUILayout.BeginArea(new Rect(3, region.height - SVGPivotEditor.BUTTONS_HEIGHT, region.width, SVGPivotEditor.BUTTONS_HEIGHT));
            {
                GUILayout.BeginHorizontal(GUILayout.Height(SVGPivotEditor.BUTTONS_HEIGHT));
                {
                    if (GUILayout.Button("Cancel", cancelButtonOptions))
                    {
                        this.Cancel();
                    }
                    if (GUILayout.Button("Ok", okButtonOptions))
                    {
                        this.Ok();
                    }
                }
                GUILayout.EndHorizontal();
            }
            GUILayout.EndArea();
        }
        GUILayout.EndArea();

        // events handler
        switch (Event.current.type)
        {
        // keyboard press
        case EventType.KeyDown:
            if (Event.current.keyCode == KeyCode.Return)
            {
                this.Ok();
            }
            if (Event.current.keyCode == KeyCode.Escape)
            {
                this.Cancel();
            }
            break;

        // mouse left button
        case EventType.MouseDown:
            mouseX = Event.current.mousePosition.x;
            mouseY = Event.current.mousePosition.y;
            // clamp x coordinate
            if (mouseX < spritePreviewRect.xMin + SVGPivotEditor.SNAP_CORNER_THRESHOLD)
            {
                mouseX = spritePreviewRect.xMin;
            }
            if (mouseX + SVGPivotEditor.SNAP_CORNER_THRESHOLD > spritePreviewRect.xMax)
            {
                mouseX = spritePreviewRect.xMax;
            }
            // clamp y coordinate
            if (mouseY < spritePreviewRect.yMin + SVGPivotEditor.SNAP_CORNER_THRESHOLD)
            {
                mouseY = spritePreviewRect.yMin;
            }
            if (mouseY + SVGPivotEditor.SNAP_CORNER_THRESHOLD > spritePreviewRect.yMax)
            {
                mouseY = spritePreviewRect.yMax;
            }
            // assign the new pivot value
            px = (mouseX - spritePreviewRect.xMin) / spritePreviewRect.width;
            py = (mouseY - spritePreviewRect.yMin) / spritePreviewRect.height;
            this.m_Pivot.Set(Mathf.Clamp(px, 0, 1), 1 - Mathf.Clamp(py, 0, 1));
            // force a repaint
            this.Repaint();
            break;
        }
    }
Exemplo n.º 10
0
    // Draw the specified Image.
    private static void DrawSprite(Texture tex, Rect drawArea, Vector4 padding, Rect outer, Rect inner, Rect uv, Color color)
    {
        // Create the texture rectangle that is centered inside rect.
        Rect outerRect = drawArea;

        outerRect.width  = outer.width;
        outerRect.height = outer.height;

        if (outerRect.width > 0f)
        {
            float f = drawArea.width / outerRect.width;
            outerRect.width  *= f;
            outerRect.height *= f;
        }

        if (drawArea.height > outerRect.height)
        {
            outerRect.y += (drawArea.height - outerRect.height) * 0.5f;
        }
        else
        if (outerRect.height > drawArea.height)
        {
            float f = drawArea.height / outerRect.height;
            outerRect.width  *= f;
            outerRect.height *= f;
        }

        if (drawArea.width > outerRect.width)
        {
            outerRect.x += (drawArea.width - outerRect.width) * 0.5f;
        }

        // Draw the background
        EditorGUI.DrawTextureTransparent(outerRect, null, ScaleMode.ScaleToFit, outer.width / outer.height);

        // Draw the Image
        GUI.color = color;

        Rect paddedTexArea = new Rect(outerRect.x + outerRect.width * padding.x,
                                      outerRect.y + outerRect.height * padding.w,
                                      outerRect.width - (outerRect.width * (padding.z + padding.x)),
                                      outerRect.height - (outerRect.height * (padding.w + padding.y)));


        GUI.DrawTextureWithTexCoords(paddedTexArea, tex, uv, true);

        // Draw the border indicator lines
        GUI.BeginGroup(outerRect);
        {
            tex       = SVGPivotEditor.ContrastTexture;
            GUI.color = Color.white;

            if (inner.xMin != outer.xMin)
            {
                float x = (inner.xMin - outer.xMin) / outer.width * outerRect.width - 1;
                SVGPivotEditor.DrawTiledTexture(new Rect(x, 0f, 1f, outerRect.height), tex);
            }

            if (inner.xMax != outer.xMax)
            {
                float x = (inner.xMax - outer.xMin) / outer.width * outerRect.width - 1;
                SVGPivotEditor.DrawTiledTexture(new Rect(x, 0f, 1f, outerRect.height), tex);
            }

            if (inner.yMin != outer.yMin)
            {
                float y = (inner.yMin - outer.yMin) / outer.height * outerRect.height - 1;
                SVGPivotEditor.DrawTiledTexture(new Rect(0f, outerRect.height - y, outerRect.width, 1f), tex);
            }

            if (inner.yMax != outer.yMax)
            {
                float y = (inner.yMax - outer.yMin) / outer.height * outerRect.height - 1;
                SVGPivotEditor.DrawTiledTexture(new Rect(0f, outerRect.height - y, outerRect.width, 1f), tex);
            }
        }

        GUI.EndGroup();
    }