コード例 #1
0
ファイル: Terminal.cs プロジェクト: zxfdreamfly/CursesSharp
        /// <summary>
        ///    Initializes the runtime.   The boolean flag
        ///   indicates whether we are forcing color to be off.
        /// </summary>
        public static void Init(bool disable_color = false)
        {
            if (inited)
            {
                return;
            }
            inited = true;

            empty_container = new Container(0, 0, Terminal.Cols, Terminal.Lines);

            try {
                main_window = Curses.InitScr();
            } catch (Exception e) {
                Console.WriteLine("Curses failed to initialize, the exception is: " + e);
                throw new Exception("Terminal.Init failed");
            }
            Curses.RawMode = true;
            Curses.Echo    = false;
            //Curses.nonl ();
            Stdscr.Keypad = true;
            //			MainScreen.stdscr.Keypad = true;

                        #if BREAK_UTF8_RENDERING
            Curses.Event old = 0;
            MouseEventsAvailable = Curses.console_sharp_mouse_mask(
                Curses.Event.Button1Clicked | Curses.Event.Button1DoubleClicked, out old);
                        #endif

            UsingColor = false;
            if (!disable_color)
            {
                UsingColor = Curses.HasColors;
            }

            Curses.StartColor();
            Curses.UseDefaultColors();
            if (UsingColor)
            {
                ColorNormal    = MakeColor(Colors.WHITE, Colors.BLUE);
                ColorFocus     = MakeColor(Colors.BLACK, Colors.CYAN);
                ColorHotNormal = Attrs.BOLD | MakeColor(Colors.YELLOW, Colors.BLUE);
                ColorHotFocus  = Attrs.BOLD | MakeColor(Colors.YELLOW, Colors.CYAN);

                ColorMenu            = Attrs.BOLD | MakeColor(Colors.WHITE, Colors.CYAN);
                ColorMenuHot         = Attrs.BOLD | MakeColor(Colors.YELLOW, Colors.CYAN);
                ColorMenuSelected    = Attrs.BOLD | MakeColor(Colors.WHITE, Colors.BLACK);
                ColorMenuHotSelected = Attrs.BOLD | MakeColor(Colors.YELLOW, Colors.BLACK);

                ColorMarked         = ColorHotNormal;
                ColorMarkedSelected = ColorHotFocus;

                ColorDialogNormal    = MakeColor(Colors.BLACK, Colors.WHITE);
                ColorDialogFocus     = MakeColor(Colors.BLACK, Colors.CYAN);
                ColorDialogHotNormal = MakeColor(Colors.BLUE, Colors.WHITE);
                ColorDialogHotFocus  = MakeColor(Colors.BLUE, Colors.CYAN);

                ColorError         = Attrs.BOLD | MakeColor(Colors.WHITE, Colors.RED);
                ColorErrorFocus    = MakeColor(Colors.BLACK, Colors.WHITE);
                ColorErrorHot      = Attrs.BOLD | MakeColor(Colors.YELLOW, Colors.RED);
                ColorErrorHotFocus = ColorErrorHot;
            }
            else
            {
                ColorNormal    = Attrs.NORMAL;
                ColorFocus     = Attrs.REVERSE;
                ColorHotNormal = Attrs.BOLD;
                ColorHotFocus  = Attrs.REVERSE | Attrs.BOLD;

                ColorMenu            = Attrs.REVERSE;
                ColorMenuHot         = Attrs.NORMAL;
                ColorMenuSelected    = Attrs.BOLD;
                ColorMenuHotSelected = Attrs.NORMAL;

                ColorMarked         = Attrs.BOLD;
                ColorMarkedSelected = Attrs.REVERSE | Attrs.BOLD;

                ColorDialogNormal    = Attrs.REVERSE;
                ColorDialogFocus     = Attrs.NORMAL;
                ColorDialogHotNormal = Attrs.BOLD;
                ColorDialogHotFocus  = Attrs.NORMAL;

                ColorError = Attrs.BOLD;
            }
            ColorBasic = MakeColor(-1, -1);
            mainloop   = new Looper();
            mainloop.AddWatch(0, Looper.Condition.PollIn, x => {
                Container top = toplevels.Count > 0 ? toplevels [toplevels.Count - 1] : null;
                if (top != null)
                {
                    ProcessChar(top);
                }

                return(true);
            });
        }