aboutsummaryrefslogtreecommitdiff
path: root/ShiftOS.Wpf/WpfWindowBorder.xaml.cs
diff options
context:
space:
mode:
Diffstat (limited to 'ShiftOS.Wpf/WpfWindowBorder.xaml.cs')
-rw-r--r--ShiftOS.Wpf/WpfWindowBorder.xaml.cs375
1 files changed, 375 insertions, 0 deletions
diff --git a/ShiftOS.Wpf/WpfWindowBorder.xaml.cs b/ShiftOS.Wpf/WpfWindowBorder.xaml.cs
new file mode 100644
index 0000000..47cb58a
--- /dev/null
+++ b/ShiftOS.Wpf/WpfWindowBorder.xaml.cs
@@ -0,0 +1,375 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Forms.Integration;
+using System.Windows.Input;
+using System.Windows.Media;
+using System.Windows.Media.Imaging;
+using System.Windows.Navigation;
+using System.Windows.Shapes;
+using ShiftOS.Engine;
+using static ShiftOS.Engine.SkinEngine;
+
+namespace ShiftOS.Wpf
+{
+ /// <summary>
+ /// Interaction logic for WpfWindowBorder.xaml
+ /// </summary>
+ public partial class WpfWindowBorder : UserControl, IWindowBorder
+ {
+ private bool _isWPF = true;
+
+ public WpfWindowBorder(IShiftOSWindow ctrl)
+ {
+ InitializeComponent();
+ if (ctrl is UserControl)
+ {
+ _parent = ctrl as UserControl;
+ _isWPF = true;
+ }
+ else if (ctrl is System.Windows.Forms.UserControl)
+ {
+ _isWPF = false;
+ _wParent = ctrl as System.Windows.Forms.UserControl;
+ _wParent.Show();
+ }
+ Shiftorium.Installed += () =>
+ {
+ SetupUpgradeables();
+ ParentWindow.OnUpgrade();
+ };
+ SkinEngine.SkinLoaded += () =>
+ {
+ SetupSkin();
+ ParentWindow.OnSkinLoad();
+ };
+ SaveSystem.GameReady += () =>
+ {
+ Dispatcher.Invoke(() =>
+ {
+ SetupUpgradeables();
+ SetupSkin();
+ });
+ };
+ if (_isWPF)
+ {
+ this.Width = borderleft.Width + _parent.Width + borderright.Width;
+ this.Height = titlemaster.Height + _parent.Height + borderbottom.Height;
+ pgcontents.Content = _parent;
+ }
+ else
+ {
+ pgcontents.Width = _wParent.Width;
+ pgcontents.Height = _wParent.Height;
+
+ this.Width = borderleft.Width + _wParent.Width + borderright.Width;
+ this.Height = titlemaster.Height + _wParent.Height + borderbottom.Height;
+ pgcontents.Content = new WindowsFormsHost();
+ (pgcontents.Content as WindowsFormsHost).Child = _wParent;
+ _wParent.DoWinformsSkinningMagicOnWpf();
+ }
+ Desktop.ShowWindow(this);
+ SetupUpgradeables();
+ Loaded += (o,a) =>
+ {
+ SetupSkin();
+ ParentWindow.OnSkinLoad();
+ ParentWindow.OnLoad();
+ };
+
+ if (!_isWPF)
+ {
+ _wParent.TextChanged += (o, a) =>
+ {
+ this.Text = _wParent.Text;
+ };
+ this.Text = _wParent.Text;
+ }
+ }
+
+ private System.Windows.Forms.UserControl _wParent = null;
+
+ public void SetupUpgradeables()
+ {
+ close.Upgrade("close_button");
+ max.Upgrade("maximize_button");
+ min.Upgrade("minimize_button");
+
+ titlemaster.Upgrade("wm_titlebar");
+
+ borderleft.Upgrade("wm_free_placement");
+ borderright.Upgrade("wm_free_placement");
+ borderbottom.Upgrade("wm_free_placement");
+ borderbottoml.Upgrade("wm_free_placement");
+ borderbottomr.Upgrade("wm_free_placement");
+
+
+ }
+
+ public void SetupSkin()
+ {
+ if (LoadedSkin.ShowTitleCorners)
+ {
+ titleleft.Visibility = Visibility.Visible;
+ titleright.Visibility = Visibility.Visible;
+ }
+ else
+ {
+ titleleft.Visibility = Visibility.Hidden;
+ titleright.Visibility = Visibility.Hidden;
+ }
+
+ try
+ {
+ _parent.Background = LoadedSkin.ControlColor.CreateBrush();
+ _parent.Foreground = LoadedSkin.ControlTextColor.CreateBrush();
+ }
+ catch
+ {
+ _wParent.BackColor = LoadedSkin.ControlColor;
+ _wParent.ForeColor = LoadedSkin.ControlTextColor;
+ }
+
+
+ titlemaster.Height = LoadedSkin.TitlebarHeight;
+ if(LoadedSkin.TitleTextCentered == true)
+ {
+ titletext.SetValue(Canvas.LeftProperty, (double)(titlemaster.ActualWidth - titletext.ActualWidth) / 2);
+ titletext.SetValue(Canvas.TopProperty, (double)LoadedSkin.TitleTextLeft.Y);
+ }
+ else
+ {
+ titletext.SetValue(Canvas.LeftProperty, (double)LoadedSkin.TitleTextLeft.X);
+ titletext.SetValue(Canvas.TopProperty, (double)LoadedSkin.TitleTextLeft.Y);
+ }
+
+ titletext.SetFont(LoadedSkin.TitleFont);
+
+ titletext.Foreground = LoadedSkin.TitleTextColor.CreateBrush();
+
+ titlebar.Background = LoadedSkin.TitleBackgroundColor.CreateBrush();
+
+ close.SetValue(Canvas.LeftProperty, this.ActualWidth - LoadedSkin.CloseButtonSize.Width - LoadedSkin.CloseButtonFromSide.X);
+ close.SetValue(Canvas.TopProperty, (double)LoadedSkin.CloseButtonFromSide.Y);
+
+ min.SetValue(Canvas.LeftProperty, this.ActualWidth - LoadedSkin.MinimizeButtonSize.Width - LoadedSkin.MinimizeButtonFromSide.X);
+ min.SetValue(Canvas.TopProperty, (double)LoadedSkin.MinimizeButtonFromSide.Y);
+
+ max.SetValue(Canvas.LeftProperty, this.ActualWidth - LoadedSkin.MaximizeButtonSize.Width - LoadedSkin.MaximizeButtonFromSide.X);
+ max.SetValue(Canvas.TopProperty, (double)LoadedSkin.MaximizeButtonFromSide.Y);
+
+ close.Background = LoadedSkin.CloseButtonColor.CreateBrush();
+ min.Background = LoadedSkin.MinimizeButtonColor.CreateBrush();
+ max.Background = LoadedSkin.MaximizeButtonColor.CreateBrush();
+
+ close.BorderThickness = new Thickness(0.0);
+ min.BorderThickness = new Thickness(0.0);
+ max.BorderThickness = new Thickness(0.0);
+
+ borderleft.Background = LoadedSkin.BorderLeftBackground.CreateBrush();
+ borderright.Background = LoadedSkin.BorderRightBackground.CreateBrush();
+ borderbottom.Background = LoadedSkin.BorderBottomBackground.CreateBrush();
+ borderbottoml.Background = LoadedSkin.BorderBottomLeftBackground.CreateBrush();
+ borderbottomr.Background = LoadedSkin.BorderBottomRightBackground.CreateBrush();
+
+ borderleft.Width = LoadedSkin.LeftBorderWidth;
+ borderright.Width = LoadedSkin.RightBorderWidth;
+ bottommaster.Height = LoadedSkin.BottomBorderWidth;
+
+ }
+
+
+ protected override Size MeasureOverride(Size constraint)
+ {
+ int topHeight = 0;
+ int bottomHeight = 0;
+ int leftHeight = 0;
+ int rightHeight = 0;
+
+ if (Shiftorium.UpgradeInstalled("wm_titlebar"))
+ topHeight = LoadedSkin.TitlebarHeight;
+ if (Shiftorium.UpgradeInstalled("wm_free_placement"))
+ {
+ bottomHeight = LoadedSkin.BottomBorderWidth;
+ leftHeight = LoadedSkin.LeftBorderWidth;
+ rightHeight = LoadedSkin.RightBorderWidth;
+ }
+
+ if (_isWPF)
+ {
+ return new Size(
+ leftHeight + _parent.Width + rightHeight,
+ topHeight + _parent.Height + bottomHeight);
+
+ }
+ else
+ {
+ return new Size(
+ leftHeight + _wParent.Width + rightHeight,
+ topHeight + _wParent.Height + bottomHeight);
+ }
+ }
+
+ public double ActualActualHeight
+ {
+ get
+ {
+ int topHeight = 0;
+ int bottomHeight = 0;
+
+ if (Shiftorium.UpgradeInstalled("wm_titlebar"))
+ topHeight = LoadedSkin.TitlebarHeight;
+ if (Shiftorium.UpgradeInstalled("wm_free_placement"))
+ {
+ bottomHeight = LoadedSkin.BottomBorderWidth;
+ }
+
+ if (_isWPF)
+ {
+ return (topHeight + _parent.Height + bottomHeight);
+
+ }
+ else
+ {
+ return (topHeight + _wParent.Height + bottomHeight);
+ }
+ }
+ }
+
+ private bool _isDialog = false;
+
+ public bool IsDialog
+ {
+ get
+ {
+ return _isDialog;
+ }
+ set
+ {
+ _isDialog = value;
+ SetupDialog();
+ }
+ }
+
+ public void SetupDialog()
+ {
+ if (IsDialog)
+ {
+ min.Upgrade("minimize_button");
+ max.Upgrade("maximize_button");
+ }
+ else
+ {
+ min.Visibility = Visibility.Collapsed;
+ max.Visibility = Visibility.Collapsed;
+ }
+ }
+
+ private UserControl _parent = null;
+
+ public IShiftOSWindow ParentWindow
+ {
+ get
+ {
+ if (_isWPF)
+ {
+ return (IShiftOSWindow)_parent;
+ }
+ else
+ {
+ return (IShiftOSWindow)_wParent;
+ }
+ }
+
+ set
+ {
+ if (_isWPF)
+ {
+ _parent = (UserControl)value;
+ }
+ else
+ {
+ _wParent = (System.Windows.Forms.UserControl)value;
+ (this.pgcontents.Content as WindowsFormsHost).Child = _wParent;
+ }
+ }
+ }
+
+ public string Text
+ {
+ get
+ {
+ return titletext.Text;
+ }
+
+ set
+ {
+ titletext.Text = value;
+ }
+ }
+
+ public void Close()
+ {
+ Desktop.RemoveWindow(this);
+ }
+
+ private void close_Click(object sender, RoutedEventArgs e)
+ {
+ this.Close();
+ }
+
+ private void max_Click(object sender, RoutedEventArgs e)
+ {
+ AppearanceManager.Maximize(this);
+ }
+
+ private void min_Click(object sender, RoutedEventArgs e)
+ {
+ AppearanceManager.Minimize(this);
+ }
+
+ private Point currentPoint;
+ private TranslateTransform transform = new TranslateTransform();
+ private Point anchorPoint;
+
+ private void titlebar_MouseDown(object sender, MouseEventArgs e)
+ {
+ if (Shiftorium.UpgradeInstalled("draggable_windows") && isInDrag == true)
+ {
+ var element = sender as FrameworkElement;
+ currentPoint = e.GetPosition(null);
+
+ transform.X += (currentPoint.X - anchorPoint.X);
+ transform.Y += (currentPoint.Y - anchorPoint.Y);
+ this.RenderTransform = transform;
+ anchorPoint = currentPoint;
+ if(_isWPF == false)
+ {
+ _wParent.Refresh();
+ (pgcontents.Content as WindowsFormsHost).InvalidateVisual();
+ }
+ }
+ }
+
+ bool isInDrag = false;
+
+ private void titlebar_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
+ {
+ var element = sender as FrameworkElement;
+ anchorPoint = e.GetPosition(null);
+ isInDrag = true;
+ e.Handled = true;
+ }
+
+ private void titlebar_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
+ {
+ isInDrag = false;
+ }
+ }
+}