コード例 #1
0
ファイル: ComponentManager.cs プロジェクト: Pyrdacor/SilkUI
        public static void Run(Type rootComponentType, IView view,
                               IControlRendererFactory controlRendererFactory)
        {
            if (!rootComponentType.IsSubclassOf(typeof(RootComponent)))
            {
                throw new ArgumentException($"The given type is not a subclass of `{nameof(RootComponent)}`.");
            }

            var rootComponent = Component.Create(rootComponentType, null, true) as RootComponent;

            // find and register all component types
            foreach (var type in FindTypes((type) => type.IsSubclassOf(typeof(Component))))
            {
                componentTypesByFullName.Add(type.FullName, type);

                if (!componentTypesByName.ContainsKey(type.Name))
                {
                    componentTypesByName.Add(type.Name, new List <string>());
                }

                componentTypesByName[type.Name].Add(type.FullName);
            }

            view.Load += () =>
            {
                var controlRenderer = controlRendererFactory.CreateControlRenderer(view);
                rootComponent.SetControlRenderer(controlRenderer);
                rootComponent.SetInputEventManager(new InputEventManager(view.CreateInput()));

                // init root component and its view
                rootComponent.InitControl();

                view.Render += (double deltaTime) =>
                {
                    view.MakeCurrent();
                    rootComponent.ControlRenderer.Init();
                    Update(rootComponent, deltaTime);
                    rootComponent.ControlRenderer.Render();
                    view.SwapBuffers();
                };
            };

            view.Run();

            // destroy root component view
            rootComponent.DestroyView();
        }
コード例 #2
0
 public RendererTagHelper(IControlRendererFactory rendererFactory)
 {
     this.RendererFactory = rendererFactory;
 }