using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Forms; using System.Windows.Input; using System.Windows.Interop; using System.Windows.Media; using System.Windows.Media.Animation; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; using Tango.Core.DI; using Tango.PPC.Common; using Tango.PPC.Common.Application; using Tango.PPC.Common.Build; using Tango.PPC.UI.Build; using Tango.PPC.UI.Helpers; using Tango.Settings; using Tango.Touch.Helpers; namespace Tango.PPC.UI { /// /// Interaction logic for MainWindow.xaml /// public partial class MainWindow : Window { private DefaultBuildProvider _buildProvider; public static MainWindow Instance { get; private set; } public MainWindow() { Instance = this; TangoIOC.Default.Unregister(); _buildProvider = new DefaultBuildProvider(); TangoIOC.Default.Register(_buildProvider); //Timeline.DesiredFrameRateProperty.OverrideMetadata(typeof(Timeline),new FrameworkPropertyMetadata { DefaultValue = 30 }); InitializeComponent(); if (_buildProvider.BuildType == BuildType.Eureka) { InitEureka(); } else { InitTS1800(); } Closing += MainWindow_Closing; } private void InitEureka() { Title = _buildProvider.BuildName; var settings = SettingsManager.Default.GetOrCreate(); Viewbox viewBox = new Viewbox(); viewBox.Stretch = Stretch.Uniform; this.Content = viewBox; viewBox.Child = new Views.MainEurekaView(); var screens = System.Windows.Forms.Screen.AllScreens; var touch_screen = screens.OrderBy(x => x.Bounds.X).Last(); bool hasTouch = (TouchHelper.IsTouchEnabled() && !Debugger.IsAttached) || settings.ForceTouchMode; if (!hasTouch) { WindowStyle = WindowStyle.SingleBorderWindow; ResizeMode = ResizeMode.CanResize; Width = 1280; Height = 720; WindowStartupLocation = WindowStartupLocation.CenterScreen; WindowState = WindowState.Normal; Topmost = false; // sure? } else { WindowState = WindowState.Normal; WindowStyle = WindowStyle.None; ResizeMode = ResizeMode.NoResize; Left = screens.Length == 2 ? screens[0].Bounds.Width : 0; Top = 0; Width = 1920; Height = 1080; WindowStartupLocation = WindowStartupLocation.Manual; Topmost = false; // sure? } //App.Current.Resources["TangoPanelMaskColor"] = App.Current.Resources["TangoPanelMaskColorLight"]; } private void InitTS1800() { mainBorder.Child = new Views.MainView(); bool has_touch = false; #if !DESKTOP if (TouchHelper.IsTouchEnabled()) { var screens = System.Windows.Forms.Screen.AllScreens; //Search for the vertical touch monitor. var touch_screen = screens.Where(x => x.Bounds.Height > x.Bounds.Width).LastOrDefault(); if (touch_screen != null) { WindowStyle = WindowStyle.None; ResizeMode = ResizeMode.NoResize; WindowStartupLocation = WindowStartupLocation.Manual; Topmost = false; // sure? Left = touch_screen.Bounds.Left; Top = touch_screen.Bounds.Top; Width = touch_screen.Bounds.Width; Height = touch_screen.Bounds.Height; has_touch = true; } } #if !DEBUG ForceTouch(); has_touch = true; #endif #endif if (!has_touch) { Viewbox viewBox = new Viewbox(); viewBox.Stretch = Stretch.Uniform; this.Content = viewBox; mainBorder.Width = 800; mainBorder.Height = 1280; viewBox.Child = mainBorder; LockAspectRatio(); this.SizeChanged += (x, y) => { LockAspectRatio(); }; } } private void ForceTouch() { WindowStyle = WindowStyle.None; ResizeMode = ResizeMode.NoResize; WindowStartupLocation = WindowStartupLocation.Manual; Topmost = false; // sure? Left = 0; Top = 0; Width = System.Windows.Forms.Screen.PrimaryScreen.Bounds.Width; Height = System.Windows.Forms.Screen.PrimaryScreen.Bounds.Height; } protected override void OnSourceInitialized(EventArgs e) { //var hwndSource = PresentationSource.FromVisual(this) as HwndSource; //if (hwndSource != null) // hwndSource.CompositionTarget.RenderMode = RenderMode.SoftwareOnly; base.OnSourceInitialized(e); } private void LockAspectRatio() { this.Width = (this.Height * (800d / 1280d)) - 10; } private void MainWindow_Closing(object sender, System.ComponentModel.CancelEventArgs e) { e.Cancel = true; TangoIOC.Default.GetInstance().ShutDown(); } } }