blob: 9d164d1dc0d1f733ec75d7c72ce86de7e5b3a6ab (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
|
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using Tango.Core;
using Tango.Core.DI;
using Tango.FSE.Common;
using Tango.FSE.Common.Resolution;
using Tango.Settings;
namespace Tango.FSE.UI.Resolution
{
/// <summary>
/// Represents the <see cref="IResolutionService"/> default implementation.
/// </summary>
/// <seealso cref="Tango.Core.ExtendedObject" />
/// <seealso cref="Tango.FSE.Common.Resolution.IResolutionService" />
[TangoCreateWhenRegistered]
public class DefaultResolutionService : ExtendedObject, IResolutionService
{
private FSESettings _settings;
/// <summary>
/// Occurs when predefined resolution mode has changed.
/// </summary>
public event EventHandler<ResolutionMode> ResolutionModeChanged;
/// <summary>
/// Occurs when the resolution/window size has changed.
/// </summary>
public event EventHandler<SizeChangedEventArgs> ResolutionChanged;
private ResolutionMode resolution;
/// <summary>
/// Gets the current resolution mode.
/// </summary>
public ResolutionMode Resolution
{
get
{
return resolution;
}
private set
{
resolution = value;
RaisePropertyChangedAuto();
}
}
private bool _AdaptiveTransformMode;
/// <summary>
/// Gets or sets a value indicating whether the application is currently scaling it self using a transform.
/// </summary>
public bool AdaptiveScalingMode
{
get { return _AdaptiveTransformMode; }
set { _AdaptiveTransformMode = value; RaisePropertyChangedAuto(); }
}
private bool isLowResolution;
/// <summary>
/// Gets a value indicating whether the current resolution mode is low.
/// </summary>
public bool IsLowResolution
{
get
{
return isLowResolution;
}
private set
{
isLowResolution = value;
RaisePropertyChangedAuto();
}
}
private bool isHighResolution;
/// <summary>
/// Gets a value indicating whether the current resolution mode is high.
/// </summary>
public bool IsHighResolution
{
get
{
return isHighResolution;
}
private set
{
isHighResolution = value;
RaisePropertyChangedAuto();
}
}
private double resolutionWidth;
/// <summary>
/// Gets the resolution width.
/// </summary>
public double ResolutionWidth
{
get
{
return resolutionWidth;
}
private set
{
resolutionWidth = value;
RaisePropertyChangedAuto();
}
}
private double resolutionHeight;
/// <summary>
/// Gets the resolution height.
/// </summary>
public double ResolutionHeight
{
get
{
return resolutionHeight;
}
private set
{
resolutionHeight = value;
RaisePropertyChangedAuto();
}
}
/// <summary>
/// Initializes a new instance of the <see cref="DefaultResolutionService"/> class.
/// </summary>
/// <param name="window">The window.</param>
public DefaultResolutionService(Window window)
{
if (window != null)
{
window.SizeChanged += Window_SizeChanged;
}
_settings = SettingsManager.Default.GetOrCreate<FSESettings>();
}
/// <summary>
/// Initializes a new instance of the <see cref="DefaultResolutionService"/> class.
/// </summary>
[TangoInject]
public DefaultResolutionService() : this(Application.Current.MainWindow)
{
}
/// <summary>
/// Handles the application main window size changed event.
/// </summary>
/// <param name="sender">The source of the event.</param>
/// <param name="e">The <see cref="SizeChangedEventArgs"/> instance containing the event data.</param>
private void Window_SizeChanged(object sender, SizeChangedEventArgs e)
{
ResolutionMode previousMode = Resolution;
if (AdaptiveScalingMode)
{
isHighResolution = true;
IsLowResolution = false;
ResolutionWidth = 1920;
ResolutionHeight = 1080;
Resolution = ResolutionMode.High;
if (Resolution != previousMode)
{
LogManager.Log($"Application resolution mode changed to: {Resolution}, size: {ResolutionWidth}x{ResolutionHeight}.");
ResolutionModeChanged?.Invoke(this, Resolution);
}
return;
}
var size = e.NewSize;
ResolutionWidth = size.Width;
ResolutionHeight = size.Height;
IsHighResolution = ResolutionWidth > 1599 && ResolutionHeight > 800;
IsLowResolution = !isHighResolution;
Resolution = IsHighResolution ? ResolutionMode.High : ResolutionMode.Low;
if (Resolution != previousMode)
{
LogManager.Log($"Application resolution mode changed to: {Resolution}, size: {ResolutionWidth}x{ResolutionHeight}.");
ResolutionModeChanged?.Invoke(this, Resolution);
}
ResolutionChanged?.Invoke(this, e);
}
}
}
|