package com.faforever.client; import com.faforever.client.config.BaseConfig; import com.faforever.client.config.CacheConfig; import com.faforever.client.config.LuceneConfig; import com.faforever.client.config.ServiceConfig; import com.faforever.client.config.TaskConfig; import com.faforever.client.config.UiConfig; import com.faforever.client.fx.JavaFxUtil; import com.faforever.client.fx.PlatformServiceImpl; import com.faforever.client.main.MainController; import com.faforever.client.preferences.PreferencesService; import com.faforever.client.theme.ThemeService; import com.google.common.annotations.VisibleForTesting; import javafx.application.Application; import javafx.scene.image.Image; import javafx.scene.text.Font; import javafx.stage.Stage; import javafx.stage.StageStyle; import org.springframework.context.annotation.AnnotationConfigApplicationContext; public class Main extends Application { @VisibleForTesting AnnotationConfigApplicationContext context; public Main() { context = new AnnotationConfigApplicationContext(); } public static void main(String[] args) { PreferencesService.configureLogging(); launch(args); } @Override public void start(Stage stage) { Font.loadFont(getClass().getResourceAsStream("/font/fontawesome-webfont.ttf"), 0); Font.loadFont(getClass().getResourceAsStream("/font/weblysleekuil.ttf"), 0); JavaFxUtil.fixTooltipDuration(); initApplicationContext(stage); initStage(stage, context.getBean(ThemeService.class)); initMainWindow(stage); } private void initApplicationContext(Stage stage) { context.getBeanFactory().registerSingleton("hostService", new PlatformServiceImpl(getHostServices())); context.getBeanFactory().registerSingleton("stage", stage); context.register(BaseConfig.class, UiConfig.class, ServiceConfig.class, TaskConfig.class, CacheConfig.class, LuceneConfig.class); context.registerShutdownHook(); context.refresh(); } private void initStage(Stage stage, ThemeService themeService) { stage.getIcons().add(new Image(themeService.getThemeFile(ThemeService.TRAY_ICON))); stage.initStyle(StageStyle.TRANSPARENT); } private void initMainWindow(Stage stage) { MainController mainController = context.getBean(MainController.class); mainController.display(); } @Override public void stop() throws Exception { context.close(); super.stop(); } }