예제 #1
0
        static void Main(string[] args)
        {
            Range.DefaultSlideWidth = 64;
            var red    = Range.New(0, 255, 1, Default: 0xFF, Title: "Primary color Red");
            var green  = Range.New(0, 255, 1, Default: 0xFF, Title: "Primary color Green");
            var blue   = Range.New(0, 255, 1, Default: 0xFF, Title: "Primary color Blue");
            var red2   = Range.New(0, 255, 1, Default: 0, Title: "Secondary color Red");
            var green2 = Range.New(0, 255, 1, Default: 0, Title: "Secondary color Green");
            var blue2  = Range.New(0, 255, 1, Default: 0, Title: "Secondary color Blue");

            red.SlideSplash = red2.SlideSplash = new Splash()
            {
                ForegroundColor = ConsoleColor.Red, BackgroundColor = ConsoleColor.DarkRed
            };
            green.SlideSplash = green2.SlideSplash = new Splash()
            {
                ForegroundColor = ConsoleColor.Green, BackgroundColor = ConsoleColor.DarkGreen
            };
            blue.SlideSplash = blue2.SlideSplash = new Splash()
            {
                ForegroundColor = ConsoleColor.Blue, BackgroundColor = ConsoleColor.DarkBlue
            };
            TextInput name = null;

            name = new TextInput(x =>
            {
                var chars = x.Intersect(Path.GetInvalidFileNameChars());

                if (x.Length == 0)
                {
                    name.ErrorMessage = $"Value cannot be empty";
                }
                else if (chars.Any())
                {
                    name.ErrorMessage = $"Remove: {Environment.NewLine}{string.Join(Environment.NewLine, chars)}";
                }
                else
                {
                    return(true);
                }
                return(false);
            })
            {
                Title  = "Finish",
                Header = "Choose filename:",
                Footer = "extension will be added (for example '.bmp')"
            };

            var options       = new IInputTool[] { red, green, blue, red2, green2, blue2, name };
            var imageSettings = new InputToolSelector <IInputTool>(options);
            var cancel        = new Selector <bool>(new bool[] { false, true })
            {
                Header = "Do you want to exit without saving?", DisplayFormat = x => x ? "Yes" : "No"
            };

            imageSettings.CancelTrigger = x => imageSettings.Cancel = cancel.Activate().IfType <Selector <bool> >(y => { }).Value;
            var bgsplash = new Splash()
            {
                ForegroundColor = ConsoleColor.DarkGray, BackgroundColor = ConsoleColor.Gray
            };

            imageSettings.ActUponInputToolTree(tool => tool.IfType <IRange <int> >(x =>
            {
                x.IncrementByModifiers[ConsoleModifiers.Control] = 5;
                x.IncrementByModifiers[ConsoleModifiers.Shift | ConsoleModifiers.Control] = 20;
                x.SlideBackgroundSplash = bgsplash;
                x.Header = x.Title;
            }));
            imageSettings.InputSplash.ForegroundColor = ConsoleColor.Cyan;
            name.PostActivateTrigger          = x => imageSettings.Cancel = true;
            name.FooterSplash.ForegroundColor = ConsoleColor.DarkGray;

            var format = new EnumSelector <ImageFormat> {
                Header = "Choose image format", InputSplash = imageSettings.InputSplash
            };

            while (true)
            {
                imageSettings.Activate();
                if (imageSettings.Cancel)
                {
                    return;
                }
                format.Activate();
                if (format.Cancel)
                {
                    continue;
                }

                var size   = 16;
                var drawer = new BitmapDrawer(name.Value, 32 * 8 * size, 32 * 5 * size)
                {
                    Iterations     = 64,
                    Zoom           = 4,
                    XScroll        = 0.45,
                    YScroll        = 0.05,
                    PrimaryColor   = Color.FromArgb(red.Value, green.Value, blue.Value),
                    SecondaryColor = Color.FromArgb(red2.Value, green2.Value, blue2.Value),
                    LimitAlpha     = 1,
                    ImageFormat    = format.Value
                };

                drawer.CreateImage();
                drawer.SaveImage();
                Process.Start($"{Directory.GetCurrentDirectory()}\\{drawer.FullFileName}");
                break;
            }
        }