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(); }
public RendererTagHelper(IControlRendererFactory rendererFactory) { this.RendererFactory = rendererFactory; }