コード例 #1
0
        private void Process(UICheckBox button, PhotoshopDocument.Layer layer)
        {
            Process((UIButton)button, layer);

            PhotoshopDocument.Layer normal   = layer.FindSubLayer("#CheckedNormal", true);
            PhotoshopDocument.Layer pushed   = layer.FindSubLayer("#CheckedPushed", true);
            PhotoshopDocument.Layer hovering = layer.FindSubLayer("#CheckedFocusing", true);

            if (hovering == null)
            {
                hovering = layer.FindSubLayer("#CheckedHovering", true);
            }
            if (hovering == null)
            {
                hovering = normal;
            }
            if (pushed == null)
            {
                pushed = hovering;
            }

            if (normal != null)
            {
                button.CheckedNormal = AddPanelChild(button, "CheckedNormal", normal, UIVisibility.Invisible);
            }
            if (pushed != null)
            {
                button.CheckedPushed = AddPanelChild(button, "CheckedPushed", pushed, UIVisibility.Invisible);
            }
            if (hovering != null)
            {
                button.CheckedHovering = AddPanelChild(button, "CheckedHovering", hovering, UIVisibility.Invisible);
            }
        }
コード例 #2
0
        private void Process(UIImage image, PhotoshopDocument.Layer layer, bool importMask)
        {
            Process((UIVisual)image, layer);

            Bitmap bitmap = layer.Bitmap;

            if (image.EffectMap != null)
            {
                UIBlendingEffect effect = (UIBlendingEffect)image.EffectMap.GetPixelEffect(UIBlendingEffect.ClassIndex);
                switch (effect.Mode)
                {
                case BlendMode.Additive:
                case BlendMode.Lighten:
                case BlendMode.Screen:
                    bitmap = ConvertToBlendableBitmap(bitmap, GDIColor.Black);
                    break;

                case BlendMode.Darken:
                case BlendMode.Multiply:
                    bitmap = ConvertToBlendableBitmap(bitmap, GDIColor.White);
                    break;
                }
            }

            image.Source = new Image(string.Empty, Rectangle.Empty)
            {
                Tag = new ImageCookingTag(bitmap)
            };

            if (importMask)
            {
                image.Mask = GenerateBitMask(bitmap);
            }
        }
コード例 #3
0
        private void Process(UIButton button, PhotoshopDocument.Layer layer)
        {
            Process((UIVisual)button, layer);

            PhotoshopDocument.Layer normal   = layer.FindSubLayer("#Normal", true);
            PhotoshopDocument.Layer pushed   = layer.FindSubLayer("#Pushed", true);
            PhotoshopDocument.Layer hovering = layer.FindSubLayer("#Focusing", true);

            if (hovering == null)
            {
                hovering = layer.FindSubLayer("#Hovering", true);
            }
            if (hovering == null)
            {
                hovering = normal;
            }
            if (pushed == null)
            {
                pushed = hovering;
            }

            if (normal != null)
            {
                button.Normal = AddPanelChild(button, "Normal", normal);
            }
            if (pushed != null)
            {
                button.Pushed = AddPanelChild(button, "Pushed", pushed);
            }
            if (hovering != null)
            {
                button.Hovering = AddPanelChild(button, "Hovering", hovering);
            }
        }
コード例 #4
0
        private void Process(UIVisual visual, PhotoshopDocument.Layer layer)
        {
            System.Drawing.Rectangle parentBounds = System.Drawing.Rectangle.Empty;
            if (layer.Group != null)
            {
                parentBounds = layer.Group.ComputeUnionRectangle();
            }

            System.Drawing.Rectangle bounds = layer.ComputeUnionRectangle();
            bounds.X -= parentBounds.X;
            bounds.Y -= parentBounds.Y;

            visual.SetAbsoluteBounds(bounds.X, bounds.Y, bounds.Width, bounds.Height);
            visual.Opacity = (float)layer.Opacity / (float)byte.MaxValue;
            if (ForceShowAll)
            {
                visual.Visibility = UIVisibility.Visible;
            }
            else
            {
                visual.Visibility = layer.Visible ? UIVisibility.Visible : UIVisibility.Invisible;
            }

            BlendMode blendMode = ConvertToBlendMode(layer.BlendMode);

            if (blendMode != BlendMode.Normal)
            {
                visual.EffectMap = new UIEffectMap();
                visual.EffectMap.Insert(new UIBlendingEffect(blendMode));
            }
        }
コード例 #5
0
        private void Process(Dictionary <string, Sprite> items, PhotoshopDocument.Layer layer, string prefix)
        {
            string name = layer.Name;

            if (name.StartsWith("#"))
            {
                name = name.Substring(1);
            }
            if (string.IsNullOrEmpty(prefix) == false)
            {
                name = string.Format("{0}/{1}", prefix, layer.Name);
            }

            foreach (var item in layer.SubLayers)
            {
                if (item.IsGroup)
                {
                    Process(items, item, name);
                }
            }

            if (layer.Name.StartsWith("#"))
            {
                List <Sprite.Keyframe> keyframes = null;
                List <Bitmap>          bitmaps   = null;
                foreach (var item in layer.SubLayers)
                {
                    if (item.IsGroup == false)
                    {
                        keyframes = keyframes ?? new List <Sprite.Keyframe>();
                        bitmaps   = bitmaps ?? new List <Bitmap>();

                        keyframes.Add(new Sprite.Keyframe()
                        {
                            TextureURI        = string.Empty,
                            ClippingRectangle = Rectangle.Empty,
                            AppliedTransform  = Image.Transform.Identity,
                            Origin            = Vector2.Zero,
                            Duration          = 0.075f,
                        });
                        bitmaps.Add(item.Bitmap);
                    }
                }

                if (keyframes != null && bitmaps != null && keyframes.Count > 0 && bitmaps.Count > 0)
                {
                    // keyframes.Reverse();
                    // bitmaps.Reverse();

                    items.Add(name, new Sprite(keyframes)
                    {
                        BlendMode = BlendMode.Normal,
                        Tag       = new SpriteCookingTag(bitmaps)
                    });
                }
            }
        }
コード例 #6
0
        private void Process(UIWindow window, PhotoshopDocument.Layer layer)
        {
            Process((UIVisual)window, layer);

            for (int i = layer.SubLayers.Count - 1; i >= 0; i--)
            {
                AddChildTo(window, layer.SubLayers[i]);
            }
        }
コード例 #7
0
        private void Process(UIScrollablePanel panel, PhotoshopDocument.Layer layer)
        {
            Process((UIVisual)panel, layer);

            PhotoshopDocument.Layer content = layer.FindSubLayer("#Content", true);

            if (content != null)
            {
                panel.Content = AddPanelChild(panel, "Content", content);
            }
        }
コード例 #8
0
        private void CollectImages(Dictionary <string, Image> images, PhotoshopDocument.Layer layer)
        {
            if (layer.Name[0] == '@')
            {
                images.Add(layer.Name.Substring(1),
                           new Image(string.Empty, Rectangle.Empty)
                {
                    Tag = new ImageCookingTag(layer.Bitmap)
                });
            }

            foreach (PhotoshopDocument.Layer item in layer.SubLayers)
            {
                CollectImages(images, item);
            }
        }
コード例 #9
0
        private UIVisual AddPanelChild(UIPanel parent, string name, PhotoshopDocument.Layer layer, UIVisibility visibility = UIVisibility.Visible)
        {
            var result = new UIWindow();

            if (layer.IsGroup)
            {
                Process(result, layer);
            }
            else
            {
                AddChildTo(result, layer);
            }

            if (result != null)
            {
                result.Name       = name;
                result.Visibility = visibility;
                return(result);
            }
            else
            {
                return(null);
            }
        }
コード例 #10
0
 private void Process(UIDocument document, PhotoshopDocument.Layer layer)
 {
     Process((UIPanel)document, layer);
 }
コード例 #11
0
 private void Process(UIRadioButton button, PhotoshopDocument.Layer layer)
 {
     Process((UICheckBox)button, layer);
 }
コード例 #12
0
 private void Process(UIEditText label, PhotoshopDocument.Layer layer)
 {
     Process((UILabel)label, layer);
 }
コード例 #13
0
 private void Process(UILabel label, PhotoshopDocument.Layer layer)
 {
     Process((UIVisual)label, layer);
 }
コード例 #14
0
        private UIVisual AddChildTo(UIWindow window, PhotoshopDocument.Layer layer)
        {
            if (string.IsNullOrEmpty(layer.Name) ||
                layer.Name.StartsWith("#") == false)
            {
                return(null);
            }

            string name;
            string type;
            Dictionary <string, string> args;

            ParseLayerName(layer.Name, out name, out type, out args);

            if (layer.IsGroup == false)
            {
                if (string.Compare(type, "UIMarkupLabel", true) == 0 ||
                    string.Compare(type, "MarkupLabel", true) == 0 ||
                    string.Compare(type, "Label", true) == 0)
                {
                    UILabel label = new UILabel();
                    label.Name = name;
                    if (args.ContainsKey("0"))
                    {
                        label.Text = args["0"];
                    }
                    window.AddChild(label);
                    Process(label, layer);
                    return(label);
                }
                else if (string.Compare(type, "Document", true) == 0 ||
                         string.Compare(type, "Doc", true) == 0)
                {
                    UIDocument document = new UIDocument();
                    document.Name = name;
                    if (args.ContainsKey("0"))
                    {
                        document.Text = args["0"];
                    }
                    window.AddChild(document);
                    Process(document, layer);
                    return(document);
                }
                else if (string.Compare(type, "Edit", true) == 0 ||
                         string.Compare(type, "EditText", true) == 0 ||
                         string.Compare(type, "EditBox", true) == 0)
                {
                    UIEditText editText = new UIEditText();
                    editText.Name = name;
                    if (args.ContainsKey("0"))
                    {
                        editText.Text = args["0"];
                    }
                    window.AddChild(editText);
                    Process(editText, layer);
                    return(editText);
                }
                else if (string.Compare(type, "9Patch", true) == 0 ||
                         string.Compare(type, "NinePatch", true) == 0 ||
                         string.Compare(type, "9P", true) == 0 ||
                         string.Compare(type, "9P*", true) == 0)
                {
                    UIWindow childWindow = new UIWindow();
                    childWindow.Name = name;
                    window.AddChild(childWindow);
                    Process((UIPanel)childWindow, layer);

                    int bw = layer.Bitmap.Width;
                    int bh = layer.Bitmap.Height;

                    int leftBorder   = 0;
                    int topBorder    = 0;
                    int rightBorder  = 0;
                    int bottomBorder = 0;
                    switch (args.Count)
                    {
                    case 0:
                        leftBorder   = bw / 10;
                        topBorder    = bh / 10;
                        rightBorder  = leftBorder;
                        bottomBorder = topBorder;
                        break;

                    case 1:
                        leftBorder   = int.Parse(args["0"] ?? "0");
                        topBorder    = leftBorder;
                        rightBorder  = leftBorder;
                        bottomBorder = leftBorder;
                        break;

                    default:
                        leftBorder   = int.Parse(args["0"] ?? "0");
                        topBorder    = int.Parse(args["1"] ?? "0");
                        rightBorder  = int.Parse(args["2"] ?? "0");
                        bottomBorder = int.Parse(args["3"] ?? "0");
                        break;
                    }

                    int horizontalBorder = leftBorder + rightBorder;
                    int verticalBorder   = topBorder + bottomBorder;

                    Bitmap leftTopImage     = layer.Bitmap.Clip(new Rectangle(0, 0, leftBorder, topBorder));
                    Bitmap rightTopImage    = layer.Bitmap.Clip(new Rectangle(bw - rightBorder, 0, rightBorder, topBorder));
                    Bitmap leftBottomImage  = layer.Bitmap.Clip(new Rectangle(0, bh - bottomBorder, leftBorder, bottomBorder));
                    Bitmap rightBottomImage = layer.Bitmap.Clip(new Rectangle(bw - rightBorder, bh - bottomBorder, rightBorder, bottomBorder));
                    Bitmap leftImage        = layer.Bitmap.Clip(new Rectangle(0, topBorder, leftBorder, bh - verticalBorder));
                    Bitmap topImage         = layer.Bitmap.Clip(new Rectangle(leftBorder, 0, bw - horizontalBorder, topBorder));
                    Bitmap rightImage       = layer.Bitmap.Clip(new Rectangle(bw - rightBorder, topBorder, rightBorder, bh - verticalBorder));
                    Bitmap bottomImage      = layer.Bitmap.Clip(new Rectangle(leftBorder, bh - bottomBorder, bw - horizontalBorder, bottomBorder));
                    Bitmap centerImage      = layer.Bitmap.Clip(new Rectangle(leftBorder, topBorder, Math.Max(bw - horizontalBorder, 1), Math.Max(bh - verticalBorder, 1)));

                    var images = new List <UIImage>(9);
                    images.Add(CreateNinePatchPart(leftTopImage, UIAnchorPoint.LeftTop, new Vector2(0.0f, 0.0f), 0, 0, leftBorder, topBorder, UISizeMode.Absolute, UISizeMode.Absolute));
                    images.Add(CreateNinePatchPart(rightTopImage, UIAnchorPoint.RightTop, new Vector2(1.0f, 0.0f), 0, 0, rightBorder, topBorder, UISizeMode.Absolute, UISizeMode.Absolute));
                    images.Add(CreateNinePatchPart(leftBottomImage, UIAnchorPoint.LeftBottom, new Vector2(0.0f, 1.0f), 0, 0, leftBorder, bottomBorder, UISizeMode.Absolute, UISizeMode.Absolute));
                    images.Add(CreateNinePatchPart(rightBottomImage, UIAnchorPoint.RightBottom, new Vector2(1.0f, 1.0f), 0, 0, rightBorder, bottomBorder, UISizeMode.Absolute, UISizeMode.Absolute));

                    images.Add(CreateNinePatchPart(leftImage, UIAnchorPoint.LeftTop, new Vector2(0.0f, 0.0f), 0, topBorder, leftBorder, -verticalBorder, UISizeMode.Absolute, UISizeMode.Adjustive));           // left
                    images.Add(CreateNinePatchPart(topImage, UIAnchorPoint.LeftTop, new Vector2(0.0f, 0.0f), leftBorder, 0, -horizontalBorder, topBorder, UISizeMode.Adjustive, UISizeMode.Absolute));          // top
                    images.Add(CreateNinePatchPart(rightImage, UIAnchorPoint.RightTop, new Vector2(1.0f, 0.0f), 0, topBorder, rightBorder, -verticalBorder, UISizeMode.Absolute, UISizeMode.Adjustive));        // right
                    images.Add(CreateNinePatchPart(bottomImage, UIAnchorPoint.LeftBottom, new Vector2(0.0f, 1.0f), leftBorder, 0, -horizontalBorder, bottomBorder, UISizeMode.Adjustive, UISizeMode.Absolute)); // bototm

                    bool forceSingleColor = false;
                    if (string.Compare(type, "9P*", true) == 0)
                    {
                        forceSingleColor = true;
                    }

                    images.Add(CreateNinePatchPart(
                                   centerImage,
                                   UIAnchorPoint.LeftTop,
                                   new Vector2(0.0f, 0.0f),
                                   leftBorder,
                                   topBorder,
                                   -horizontalBorder,
                                   -verticalBorder,
                                   UISizeMode.Adjustive,
                                   UISizeMode.Adjustive,
                                   forceSingleColor: forceSingleColor));

                    foreach (var item in images)
                    {
                        if (item != null)
                        {
                            childWindow.AddChild(item);
                        }
                    }
                    return(childWindow);
                }
                else
                {
                    UIImage image = new UIImage();
                    image.Name = name;
                    window.AddChild(image);
                    Process(image, layer, string.Compare(type, "MaskImage", true) == 0 || string.Compare(type, "MaskSprite", true) == 0);
                    return(image);
                }
            }
            else
            {
                if (string.Compare(type, "Button", true) == 0)
                {
                    UIButton button = new UIButton();
                    button.Name = name;
                    window.AddChild(button);
                    Process(button, layer);
                    return(button);
                }
                else if (string.Compare(type, "CheckBox", true) == 0)
                {
                    UICheckBox button = new UICheckBox();
                    button.Name = name;
                    window.AddChild(button);
                    Process(button, layer);
                    return(button);
                }
                else if (string.Compare(type, "Radio", true) == 0)
                {
                    UIRadioButton button = new UIRadioButton();
                    button.Name = name;
                    window.AddChild(button);
                    Process(button, layer);
                    return(button);
                }
                else if (string.Compare(type, "Scrollable", true) == 0)
                {
                    UIScrollablePanel panel = new UIScrollablePanel();
                    panel.Name = name;
                    window.AddChild(panel);
                    Process(panel, layer);
                    return(panel);
                }
                else
                {
                    bool hasNormal          = layer.FindSubLayer("#Normal", false) != null;
                    bool hasPushed          = layer.FindSubLayer("#Pushed", false) != null;
                    bool hasHovering        = layer.FindSubLayer("#Hovering", false) != null;
                    bool hasCheckedNormal   = layer.FindSubLayer("#CheckedNormal", false) != null;
                    bool hasCheckedPushed   = layer.FindSubLayer("#CheckedPushed", false) != null;
                    bool hasCheckedHovering = layer.FindSubLayer("#CheckedHovering", false) != null;
                    if (hasNormal && hasPushed && !hasCheckedNormal && !hasCheckedPushed)
                    {
                        UIButton button = new UIButton();
                        button.Name = name;
                        window.AddChild(button);
                        Process(button, layer);
                        return(button);
                    }
                    else if (hasNormal && hasCheckedNormal)
                    {
                        UICheckBox button = new UICheckBox();
                        button.Name = name;
                        window.AddChild(button);
                        Process(button, layer);
                        return(button);
                    }
                    else
                    {
                        UIWindow childWindow = new UIWindow();
                        childWindow.Name = name;
                        window.AddChild(childWindow);
                        Process(childWindow, layer);
                        return(childWindow);
                    }
                }
            }
        }