mirror of
https://github.com/LorenzCK/OnTopReplica.git
synced 2024-05-10 07:22:29 +12:00
118 lines
3.5 KiB
C#
118 lines
3.5 KiB
C#
using OnTopReplica.Properties;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Drawing;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Windows.Forms;
|
|
|
|
namespace OnTopReplica {
|
|
class FullscreenFormManager {
|
|
|
|
private readonly MainForm _mainForm;
|
|
|
|
public FullscreenFormManager(MainForm form) {
|
|
_mainForm = form;
|
|
IsFullscreen = false;
|
|
}
|
|
|
|
Point _preFullscreenLocation;
|
|
Size _preFullscreenSize;
|
|
FormBorderStyle _preFullscreenBorderStyle;
|
|
|
|
public bool IsFullscreen {
|
|
get;
|
|
private set;
|
|
}
|
|
|
|
public void SwitchFullscreen() {
|
|
SwitchFullscreen(Settings.Default.GetFullscreenMode());
|
|
}
|
|
|
|
public void SwitchFullscreen(FullscreenMode mode) {
|
|
if (IsFullscreen) {
|
|
MoveToFullscreenMode(mode);
|
|
return;
|
|
}
|
|
|
|
if (!_mainForm.ThumbnailPanel.IsShowingThumbnail)
|
|
return;
|
|
|
|
//On switch, always hide side panels
|
|
_mainForm.CloseSidePanel();
|
|
|
|
//Store state
|
|
_preFullscreenLocation = _mainForm.Location;
|
|
_preFullscreenSize = _mainForm.ClientSize;
|
|
_preFullscreenBorderStyle = _mainForm.FormBorderStyle;
|
|
|
|
//Change state to fullscreen
|
|
_mainForm.FormBorderStyle = FormBorderStyle.None;
|
|
MoveToFullscreenMode(mode);
|
|
|
|
CommonCompleteSwitch(true);
|
|
}
|
|
|
|
private void MoveToFullscreenMode(FullscreenMode mode) {
|
|
var screens = Screen.AllScreens;
|
|
|
|
var currentScreen = Screen.FromControl(_mainForm);
|
|
Size size = _mainForm.Size;
|
|
Point location = _mainForm.Location;
|
|
|
|
switch (mode) {
|
|
case FullscreenMode.Standard:
|
|
default:
|
|
size = currentScreen.WorkingArea.Size;
|
|
location = currentScreen.WorkingArea.Location;
|
|
break;
|
|
|
|
case FullscreenMode.Fullscreen:
|
|
size = currentScreen.Bounds.Size;
|
|
location = currentScreen.Bounds.Location;
|
|
break;
|
|
|
|
case FullscreenMode.AllScreens:
|
|
size = SystemInformation.VirtualScreen.Size;
|
|
location = SystemInformation.VirtualScreen.Location;
|
|
break;
|
|
}
|
|
|
|
_mainForm.Size = size;
|
|
_mainForm.Location = location;
|
|
}
|
|
|
|
public void SwitchBack() {
|
|
if (!IsFullscreen)
|
|
return;
|
|
|
|
//Restore state
|
|
_mainForm.FormBorderStyle = _preFullscreenBorderStyle;
|
|
_mainForm.Location = _preFullscreenLocation;
|
|
_mainForm.ClientSize = _preFullscreenSize;
|
|
_mainForm.RefreshAspectRatio();
|
|
|
|
CommonCompleteSwitch(false);
|
|
}
|
|
|
|
private void CommonCompleteSwitch(bool enabled) {
|
|
//UI stuff switching
|
|
_mainForm.GlassEnabled = !enabled;
|
|
_mainForm.TopMost = !enabled;
|
|
_mainForm.HandleMouseMove = !enabled;
|
|
|
|
IsFullscreen = enabled;
|
|
|
|
Program.Platform.OnFormStateChange(_mainForm);
|
|
}
|
|
|
|
public void Toggle() {
|
|
if (IsFullscreen)
|
|
SwitchBack();
|
|
else
|
|
SwitchFullscreen(Settings.Default.GetFullscreenMode());
|
|
}
|
|
|
|
}
|
|
}
|