public void TestSprite()
        {
            ImageUploadParams uploadParams = new ImageUploadParams()
            {
                File           = new FileDescription(m_testImagePath),
                Tags           = "logo,beauty",
                PublicId       = "logo1",
                Transformation = new Transformation().Width(200).Height(100)
            };

            m_cloudinary.Upload(uploadParams);

            uploadParams.PublicId       = "logo2";
            uploadParams.Transformation = new Transformation().Width(100).Height(100);

            m_cloudinary.Upload(uploadParams);

            uploadParams.PublicId       = "logo3";
            uploadParams.Transformation = new Transformation().Width(100).Height(300);

            m_cloudinary.Upload(uploadParams);

            SpriteParams sprite = new SpriteParams("logo");

            SpriteResult result = m_cloudinary.MakeSprite(sprite);

            Assert.NotNull(result);
            Assert.NotNull(result.ImageInfos);
            Assert.AreEqual(3, result.ImageInfos.Count);
            Assert.Contains("logo1", result.ImageInfos.Keys);
            Assert.Contains("logo2", result.ImageInfos.Keys);
            Assert.Contains("logo3", result.ImageInfos.Keys);
        }
Beispiel #2
0
 public async Task <SpriteResult> MakeSpriteAsync(SpriteParams parameters)
 {
     using (var response = await Api.CallAsync(HttpMethod.Post, Api.ApiUrlImgUpV.Action("sprite").BuildUrl(), parameters.ToParamsDictionary(), null, null))
     {
         return(await SpriteResult.Parse(response));
     }
 }
Beispiel #3
0
        public void TestDownloadSprite()
        {
            const string spriteTestTag = "sprite_test_tag";
            const string url1          = "https://res.cloudinary.com/demo/image/upload/sample";
            const string url2          = "https://res.cloudinary.com/demo/image/upload/car";

            var paramsFromTag = new SpriteParams(spriteTestTag);
            var urlFromTag    = m_cloudinary.DownloadSprite(paramsFromTag);
            var paramsFromUrl = new SpriteParams(new List <string> {
                url1, url2
            });
            var urlFromUrls = m_cloudinary.DownloadSprite(paramsFromUrl);

            var expectedUrl = "https://api.cloudinary.com/v1_1/" + m_cloudinary.Api.Account.Cloud + "/image/sprite";
            var uriFromTag  = new Uri(urlFromTag);
            var uriFromUrls = new Uri(urlFromUrls);

            Assert.True(uriFromTag.ToString().StartsWith(expectedUrl));
            Assert.True(uriFromUrls.ToString().StartsWith(expectedUrl));

            var uriParamsFromTag = HttpUtility.ParseQueryString(uriFromTag.Query);

            Assert.AreEqual("download", uriParamsFromTag["mode"]);
            Assert.AreEqual(spriteTestTag, uriParamsFromTag["tag"]);
            Assert.NotNull(uriParamsFromTag["timestamp"]);
            Assert.NotNull(uriParamsFromTag["signature"]);

            var uriParamsFromUrls = HttpUtility.ParseQueryString(uriFromUrls.Query);

            Assert.AreEqual("download", uriParamsFromUrls["mode"]);
            Assert.True(uriParamsFromUrls["urls[]"].Contains(url1));
            Assert.True(uriParamsFromUrls["urls[]"].Contains(url2));
            Assert.NotNull(uriParamsFromUrls["timestamp"]);
            Assert.NotNull(uriParamsFromUrls["signature"]);
        }
Beispiel #4
0
        public void TestSprite()
        {
            var spriteTag           = GetMethodTag();
            var testTransformations = new[] { m_resizeTransformation, m_updateTransformation, m_simpleTransformation };
            var uploadResults       = testTransformations.Select(t =>
                                                                 UploadTestImageResource((uploadParams) =>
            {
                uploadParams.Tags           = $"{spriteTag},{m_apiTag}";
                uploadParams.Transformation = t;
            },
                                                                                         StorageType.sprite)
                                                                 ).ToList();
            var addedPublicIds = uploadResults.Select(uploadResult => uploadResult.PublicId).ToList();

            var spriteParams = new SpriteParams(spriteTag)
            {
                Format = FILE_FORMAT_JPG
            };
            var result = m_cloudinary.MakeSprite(spriteParams);

            AddCreatedPublicId(StorageType.sprite, result.PublicId);
            AssertSprite(result, FILE_FORMAT_JPG);
            CollectionAssert.AreEqual(addedPublicIds, result.ImageInfos.Keys);

            var urls = uploadResults.Select(uploadResult => uploadResult.Url.ToString()).ToList();

            spriteParams = new SpriteParams(urls)
            {
                Format = FILE_FORMAT_JPG
            };
            result = m_cloudinary.MakeSprite(spriteParams);
            AddCreatedPublicId(StorageType.sprite, result.PublicId);
            AssertSprite(result, FILE_FORMAT_JPG);
            Assert.AreEqual(addedPublicIds.Count, result.ImageInfos.Keys.Count);
        }
 void Reset()
 {
     spriteParams     = null;
     serializedObject = null;
     frameToEdit      = -1;
     paramsRL         = null;
 }
Beispiel #6
0
        /// <summary>
        /// Eagerly generate sprites
        /// </summary>
        /// <param name="parameters">Parameters for sprite generation</param>
        /// <returns>Result of sprite generation</returns>
        public SpriteResult MakeSprite(SpriteParams parameters)
        {
            UrlBuilder urlBuilder = new UrlBuilder(
                m_api.ApiUrlImgUpV.
                Action("sprite").
                BuildUrl());

            using (HttpWebResponse response = m_api.Call(
                       HttpMethod.POST, urlBuilder.ToString(), parameters.ToParamsDictionary(), null))
            {
                SpriteResult result = SpriteResult.Parse(response);
                return(result);
            }
        }
Beispiel #7
0
        public void TestSprite()
        {
            var publicId1 = GetUniquePublicId(StorageType.sprite);
            var publicId2 = GetUniquePublicId(StorageType.sprite);
            var publicId3 = GetUniquePublicId(StorageType.sprite);

            var spriteTag = GetMethodTag();

            ImageUploadParams uploadParams = new ImageUploadParams()
            {
                File           = new FileDescription(m_testImagePath),
                Tags           = $"{spriteTag},{m_apiTag}",
                PublicId       = publicId1,
                Transformation = m_resizeTransformation
            };

            m_cloudinary.Upload(uploadParams);

            uploadParams.PublicId       = publicId2;
            uploadParams.Transformation = m_updateTransformation;
            m_cloudinary.Upload(uploadParams);

            uploadParams.PublicId       = publicId3;
            uploadParams.Transformation = m_simpleTransformation;
            m_cloudinary.Upload(uploadParams);

            SpriteParams sprite = new SpriteParams(spriteTag)
            {
                Format = FILE_FORMAT_JPG
            };

            SpriteResult result = m_cloudinary.MakeSprite(sprite);

            AddCreatedPublicId(StorageType.sprite, result.PublicId);

            Assert.NotNull(result);
            Assert.NotNull(result.ImageInfos);
            Assert.AreEqual(3, result.ImageInfos.Count);

            StringAssert.EndsWith(FILE_FORMAT_JPG, result.ImageUri.ToString());

            Assert.Contains(publicId1, result.ImageInfos.Keys);
            Assert.Contains(publicId2, result.ImageInfos.Keys);
            Assert.Contains(publicId3, result.ImageInfos.Keys);
        }
Beispiel #8
0
        public void TestSpriteTransformation()
        {
            var publicId1 = GetUniquePublicId(StorageType.sprite);
            var publicId2 = GetUniquePublicId(StorageType.sprite);
            var publicId3 = GetUniquePublicId(StorageType.sprite);

            var spriteTag = GetMethodTag();

            ImageUploadParams uploadParams = new ImageUploadParams()
            {
                File           = new FileDescription(m_testImagePath),
                Tags           = $"{spriteTag},{m_apiTag}",
                PublicId       = publicId1,
                Transformation = m_simpleTransformation
            };

            m_cloudinary.Upload(uploadParams);

            uploadParams.PublicId       = publicId2;
            uploadParams.Transformation = m_updateTransformation;
            m_cloudinary.Upload(uploadParams);

            uploadParams.PublicId       = publicId3;
            uploadParams.Transformation = m_explicitTransformation;
            m_cloudinary.Upload(uploadParams);

            SpriteParams sprite = new SpriteParams(spriteTag)
            {
                Transformation = m_resizeTransformation
            };

            SpriteResult result = m_cloudinary.MakeSprite(sprite);

            AddCreatedPublicId(StorageType.sprite, result.PublicId);

            Assert.NotNull(result);
            Assert.NotNull(result.ImageInfos);
            foreach (var item in result.ImageInfos)
            {
                Assert.AreEqual(m_resizeTransformationWidth, item.Value.Width);
                Assert.AreEqual(m_resizeTransformationHeight, item.Value.Height);
            }
        }
        // Vector2 GetAnchorPos(SerializedProperty spriteAnchorProp, Sprite sprite) {
        //     Vector2 position = spriteAnchorProp.FindPropertyRelative("anchor.position").vector3Value
        //             * sprite.pixelsPerUnit;
        //     position.y = -position.y;
        //     Vector2 pivot = new Vector2(sprite.pivot.x, sprite.rect.height - sprite.pivot.y);
        //     Vector2 handlePos = GetSpritePos(sprite) + (pivot + position) * GetSpriteScale(sprite);
        //     return handlePos;
        // }

        // void DrawAnchor(SerializedProperty spriteAnchorProp, Sprite sprite, Vector2 pos) {
        //     Vector2 handlePos = GetAnchorPos(spriteAnchorProp, sprite);
        //     int controlId = GUIUtility.GetControlID("Slider1D".GetHashCode(), FocusType.Keyboard);
        //     GUIStyle handle = new GUIStyle("U2D.pivotDot");
        //     if (handlePos.x < handle.fixedWidth / 2 || handlePos.x > spriteThumbnailSize.x - handle.fixedWidth / 2
        //             || handlePos.y < handle.fixedHeight / 2 || handlePos.y > spriteThumbnailSize.x - handle.fixedHeight / 2)
        //         return;
        //     handlePos += pos;
        //     Rect handleRect = new Rect(handlePos.x - handle.fixedWidth / 2, handlePos.y - handle.fixedHeight / 2,
        //             handle.fixedWidth, handle.fixedHeight);
        //     if (Event.current.type == EventType.Repaint)
        //         handle.Draw(handleRect, GUIContent.none, controlId);
        // }

        // void CopyAnchor(SerializedProperty spriteAnchorProp) {
        //     string s = string.Format("__ClingyAnchor|{0}|{1}|{2}|{3}|{4}|{5}|{6}|{7}|{8}|{9}",
        //             spriteAnchorProp.FindPropertyRelative("anchor.position").vector3Value.x,
        //             spriteAnchorProp.FindPropertyRelative("anchor.position").vector3Value.y,
        //             spriteAnchorProp.FindPropertyRelative("anchor.position").vector3Value.z,
        //             spriteAnchorProp.FindPropertyRelative("anchor.rotation").quaternionValue.x,
        //             spriteAnchorProp.FindPropertyRelative("anchor.rotation").quaternionValue.y,
        //             spriteAnchorProp.FindPropertyRelative("anchor.rotation").quaternionValue.z,
        //             spriteAnchorProp.FindPropertyRelative("anchor.rotation").quaternionValue.w,
        //             spriteAnchorProp.FindPropertyRelative("anchor.sortingOffset").intValue,
        //             spriteAnchorProp.FindPropertyRelative("anchor.flipX").boolValue,
        //             spriteAnchorProp.FindPropertyRelative("anchor.flipY").boolValue);
        //     EditorGUIUtility.systemCopyBuffer = s;
        // }

        // void PasteAnchor(SerializedProperty spriteAnchorProp) {
        //     if (!EditorGUIUtility.systemCopyBuffer.StartsWith("__ClingyAnchor"))
        //         return;
        //     string[] parts = EditorGUIUtility.systemCopyBuffer.Split('|');
        //     if (parts.Length != 11)
        //         return;
        //     Vector3 v = new Vector3(float.Parse(parts[1]), float.Parse(parts[2]), float.Parse(parts[3]));
        //     spriteAnchorProp.FindPropertyRelative("anchor.position").vector3Value = v;
        //     Quaternion q = new Quaternion(float.Parse(parts[4]), float.Parse(parts[5]), float.Parse(parts[6]),
        //             float.Parse(parts[7]));
        //     spriteAnchorProp.FindPropertyRelative("anchor.rotation").quaternionValue = q;
        //     spriteAnchorProp.FindPropertyRelative("anchor.sortingOffset").intValue = int.Parse(parts[8]);
        //     spriteAnchorProp.FindPropertyRelative("anchor.flipX").boolValue = bool.Parse(parts[9]);
        //     spriteAnchorProp.FindPropertyRelative("anchor.flipY").boolValue = bool.Parse(parts[10]);
        // }

        void OnEnable()
        {
            framesRL = new ReorderableList(serializedObject, serializedObject.FindProperty("frames"), true,
                                           true, false, true);
            framesRL.drawHeaderCallback = (Rect rect) => {
                EditorGUI.LabelField(rect, "Sprites");
            };
            framesRL.elementHeightCallback = (int index) => {
                if (serializedObject.FindProperty("frames").arraySize == 0)
                {
                    return(0);
                }
                return(60);
            };
            framesRL.drawElementCallback = (Rect rect, int index, bool isActive, bool isFocused) => {
                Vector2                  thumbSize    = new Vector2(rect.height - 15, rect.height - 15);
                SpriteParams             spriteParams = (SpriteParams)target;
                SpriteParams.SpriteFrame frame        = spriteParams.GetFrame(index);
                DrawSpriteAndPreview(frame,
                                     (Sprite)serializedObject.FindProperty("previewSprite").objectReferenceValue,
                                     ClingyEditorUtils.GetSpriteAspectSize(frame.sprite, thumbSize), rect.position);
                // DrawAnchor(framesProp, sprite, rect.position);
                float btnWidth = (rect.width) / 3f - thumbSize.x + 20;
                if (GUI.Button(new Rect(rect.x + 60, rect.y + rect.height / 2 - 11, btnWidth, 20), "Edit"))
                {
                    serializedObject.FindProperty("frameToEdit").intValue = index;
                    ShowEditor();
                }
                // if (GUI.Button(new Rect(rect.x + 60 + btnWidth + 5, rect.y + rect.height / 2 - 11, btnWidth, 20),
                //         "Copy")) {
                //     // CopyAnchor(framesProp);
                // }
                // if (GUI.Button(new Rect(rect.x + 60 + btnWidth * 2 + 10, rect.y + rect.height / 2 - 11, btnWidth, 20),
                //         "Paste")) {
                //     // PasteAnchor(framesProp);
                // }
            };
        }
        public void TestSpriteTransformation()
        {
            ImageUploadParams uploadParams = new ImageUploadParams()
            {
                File           = new FileDescription(m_testImagePath),
                Tags           = "logotrans",
                PublicId       = "logotrans1",
                Transformation = new Transformation().Width(200).Height(100)
            };

            m_cloudinary.Upload(uploadParams);

            uploadParams.PublicId       = "logotrans2";
            uploadParams.Transformation = new Transformation().Width(100).Height(100);

            m_cloudinary.Upload(uploadParams);

            uploadParams.PublicId       = "logotrans3";
            uploadParams.Transformation = new Transformation().Width(100).Height(300);

            m_cloudinary.Upload(uploadParams);

            SpriteParams sprite = new SpriteParams("logotrans");

            sprite.Transformation = new Transformation().Width(100).Height(100).Crop("scale");

            SpriteResult result = m_cloudinary.MakeSprite(sprite);

            Assert.NotNull(result);
            Assert.NotNull(result.ImageInfos);
            foreach (var item in result.ImageInfos)
            {
                Assert.AreEqual(100, item.Value.Width);
                Assert.AreEqual(100, item.Value.Height);
            }
        }
 /// <summary>
 /// Eagerly generate sprites
 /// </summary>
 /// <param name="parameters">Parameters for sprite generation</param>
 /// <returns>Result of sprite generation</returns>
 public Task <SpriteResult> MakeSpriteAsync(SpriteParams parameters)
 {
     return(CallAsync(MakeSprite, parameters));
 }
 public static SpriteResult MakeSprite(this Cloudinary cloudinary, SpriteParams parameters)
 {
     return(cloudinary.MakeSpriteAsync(parameters).ExecSync());
 }
Beispiel #13
0
        void OnGUI()
        {
            if (!Selection.activeObject || !(Selection.activeObject is SpriteParams))
            {
                Reset();
                GUILayout.Label("No Clingy Sprite Params selected");
                return;
            }

            SpriteParams _spriteParams = (SpriteParams)Selection.activeObject;

            if (spriteParams != _spriteParams || serializedObject == null)
            {
                Reset();
                spriteParams     = _spriteParams;
                serializedObject = new SerializedObject(spriteParams);
            }

            viewSize = new Vector2(position.width, position.height) * 1.5f;

            serializedObject.Update();

            SerializedProperty framesProp = serializedObject.FindProperty("frames");

            if (framesProp.arraySize == 0)
            {
                paramsRL    = null;
                frameToEdit = -1;
                GUILayout.Label("Add some sprites in the inspector to get started!");
                return;
            }

            int _frameToEdit = serializedObject.FindProperty("frameToEdit").intValue;

            if (_frameToEdit >= framesProp.arraySize)
            {
                _frameToEdit = 0;
            }

            SerializedProperty frameProp = framesProp.GetArrayElementAtIndex(_frameToEdit);

            if (_frameToEdit != frameToEdit || paramsRL == null)
            {
                paramsRL = ParamListEditor.CreateReorderableList(serializedObject,
                                                                 frameProp.FindPropertyRelative("paramList._params"), "Params");
            }
            frameToEdit = _frameToEdit;
            SerializedProperty spriteProp = frameProp.FindPropertyRelative("sprite");
            Sprite             sprite     = (Sprite)spriteProp.objectReferenceValue;

            if (!sprite)
            {
                return;
            }

            GUI.Box(new Rect(0, 0, position.width - 14, position.height - 14), "", new GUIStyle("preBackground"));

            scrollPos = GUI.BeginScrollView(new Rect(0, 0, position.width, position.height), scrollPos,
                                            new Rect(0, 0, viewSize.x, viewSize.y), true, true);
            SpriteParams.SpriteFrame frame = spriteParams.GetFrame(frameToEdit);
            SpriteParamsEditor.DrawSpriteAndPreview(frame,
                                                    (Sprite)serializedObject.FindProperty("previewSprite").objectReferenceValue,
                                                    GetSpriteAspectSize(frame.sprite), GetSpritePos(frame.sprite), clip: false);
            DoHandle(frame);
            GUI.EndScrollView();

            DrawParamsWindow();

            serializedObject.ApplyModifiedProperties();
        }
Beispiel #14
0
        public override void OnInspectorGUI()
        {
            serializedObject.Update();

            SpriteParams spriteParams = (SpriteParams)target;
            Event        evt          = Event.current;
            Rect         drop_area    = GUILayoutUtility.GetRect(0.0f, 50.0f, GUILayout.ExpandWidth(true));
            var          style        = new GUIStyle("box");

            if (EditorGUIUtility.isProSkin)
            {
                style.normal.textColor = Color.white;
            }
            // thanks to ProCamera2D for the idea - Unity does not provide any simple way to select multiple assets
            // and add them to a reorderable list, but drag/drop works well
            GUI.Box(drop_area, "\nAdd sprites by dragging them here!", style);
            switch (evt.type)
            {
            case EventType.DragUpdated:
            case EventType.DragPerform:
                if (!drop_area.Contains(evt.mousePosition))
                {
                    break;
                }
                DragAndDrop.visualMode = DragAndDropVisualMode.Copy;
                if (evt.type == EventType.DragPerform)
                {
                    DragAndDrop.AcceptDrag();
                    foreach (Object obj in DragAndDrop.objectReferences)
                    {
                        Sprite[] sprites = new Sprite[0];
                        if (obj is Texture2D)
                        {
                            Texture2D tex         = (Texture2D)obj;
                            string    spriteSheet = AssetDatabase.GetAssetPath(tex);
                            sprites = AssetDatabase.LoadAllAssetsAtPath(spriteSheet).OfType <Sprite>().ToArray();
                        }
                        else if (obj is Sprite)
                        {
                            sprites = new Sprite[] { obj as Sprite };
                        }
                        else if (obj is GameObject)
                        {
                            GameObject     go = (GameObject)obj;
                            SpriteRenderer sr = go.GetComponent <SpriteRenderer>();
                            if (sr && sr.sprite)
                            {
                                sprites = new Sprite[] { sr.sprite }
                            }
                            ;
                        }
                        foreach (Sprite s in sprites)
                        {
                            spriteParams.AddFrame(s);
                        }
                    }
                }
                break;
            }
            EditorGUILayout.Space();

            framesRL.DoLayoutList();

            serializedObject.ApplyModifiedProperties();
        }
    }