예제 #1
0
        public void CanParse()
        {
            Assert.Equal(Top | Left, CropAnchorHelper.Parse("tl"));
            Assert.Equal(Top | Right, CropAnchorHelper.Parse("tr"));

            Assert.Equal(Top, CropAnchorHelper.Parse("t"));
            Assert.Equal(Left, CropAnchorHelper.Parse("l"));
            Assert.Equal(Bottom, CropAnchorHelper.Parse("b"));
            Assert.Equal(Right, CropAnchorHelper.Parse("r"));
            Assert.Equal(Center, CropAnchorHelper.Parse("c"));

            // Full words
            Assert.Equal(Top, CropAnchorHelper.Parse("top"));
            Assert.Equal(Right, CropAnchorHelper.Parse("right"));
            Assert.Equal(Bottom, CropAnchorHelper.Parse("bottom"));
            Assert.Equal(Left, CropAnchorHelper.Parse("left"));
        }
예제 #2
0
        // 100×100
        // 100x100
        // 100x100,contain
        // 100x100-c
        // resize(100,100,contain)
        public static ResizeTransform Parse(string segment)
        {
            int argStart = segment.IndexOf('(') + 1;

            if (argStart > 0)
            {
                segment = segment.Substring(argStart, segment.Length - argStart - 1);
            }

            int dashIndex = segment.IndexOf('-');

            // {width}x{height}-{anchor}
            // e.g. 100x100-c
            if (dashIndex > -1)
            {
                return(new ResizeTransform(
                           size: SizeHelper.Parse(segment.Substring(0, dashIndex)),
                           anchor: CropAnchorHelper.Parse(segment.Substring(dashIndex + 1))
                           ));
            }
            else if (segment.IndexOf(',') > -1)
            {
                var args = ArgumentList.Parse(segment);

                Unit        width  = default;
                Unit        height = default;
                ResizeFlags flags  = default;
                CropAnchor? anchor = null;

                for (int i = 0; i < args.Length; i++)
                {
                    ref Argument arg = ref args[i];

                    int xIndex = arg.Value.ToString().IndexOf('x');

                    if (i == 0 && xIndex > -1)
                    {
                        width  = Unit.Parse(arg.Value.ToString().Substring(0, xIndex));
                        height = Unit.Parse(arg.Value.ToString().Substring(xIndex + 1));

                        continue;
                    }

                    if (i == 0 && width == default)
                    {
                        width = Unit.Parse(arg.Value.ToString());
                    }
                    else if (i == 1 && height == default)
                    {
                        height = Unit.Parse(arg.Value.ToString());
                    }
                    else
                    {
                        switch (arg.Name)
                        {
                        case "anchor": anchor = CropAnchorHelper.Parse(arg.Value.ToString()); break;

                        case null: flags = ResizeFlagsHelper.Parse(arg.Value.ToString()); break;

                        default: throw new Exception("Invalid resize argument:" + arg.Name);
                        }
                    }
                }

                return(new ResizeTransform(width, height, anchor, flags));
            }