Skip to content

Commit d754f7d

Browse files
committed
Style
1 parent 6f7cca7 commit d754f7d

13 files changed

Lines changed: 405 additions & 359 deletions

File tree

Amethyst/App.axaml

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@
33
xmlns:sty="using:FluentAvalonia.Styling"
44
x:Class="Amethyst.App"
55
xmlns:utils="clr-namespace:Amethyst.Utils"
6-
xmlns:fluent="clr-namespace:FluentIcons.Avalonia.Fluent;assembly=FluentIcons.Avalonia.Fluent">
6+
xmlns:fluent="clr-namespace:FluentIcons.Avalonia.Fluent;assembly=FluentIcons.Avalonia.Fluent"
7+
xmlns:controls="clr-namespace:FluentAvalonia.UI.Controls;assembly=FluentAvalonia">
78
<Application.Resources>
89
<ResourceDictionary>
910
<utils:InverseBoolConverter x:Key="InverseBoolConverter" />
@@ -33,7 +34,6 @@
3334
</ResourceDictionary>
3435
</ResourceDictionary.ThemeDictionaries>
3536

36-
<Color x:Key="SystemAccentColor">HotPink</Color>
3737
<GridLength x:Key="ContentDialogButtonSpacing">Auto</GridLength>
3838
<x:Double x:Key="ContentControlFontSize">15</x:Double>
3939
<Thickness x:Key="ControlExampleDisplayBorderThickness">0</Thickness>
@@ -144,7 +144,18 @@
144144
<Application.Styles>
145145
<sty:FluentAvaloniaTheme PreferSystemTheme="True" PreferUserAccentColor="True" />
146146
<Style Selector=":is(TopLevel)">
147-
<Setter Property="FontFamily" Value="Segoe UI"/>
147+
<Setter Property="FontFamily" Value="Segoe UI" />
148+
</Style>
149+
<Style Selector="controls|FontIcon">
150+
<Setter Property="FontFamily" Value="avares://Amethyst/Assets/Fonts#Symbols" />
151+
</Style>
152+
<Style Selector=":is(Window)[ActualTransparencyLevel=Mica][IsActive=True]">
153+
<Setter Property="Background" Value="Transparent" />
154+
<Setter Property="Transitions">
155+
<Transitions>
156+
<BrushTransition Property="Background" Duration="0:0:0.5" />
157+
</Transitions>
158+
</Setter>
148159
</Style>
149160
</Application.Styles>
150161
</Application>

Amethyst/Assets/Fonts/Symbols.ttf

185 KB
Binary file not shown.

Amethyst/Classes/AppTracker.cs

Lines changed: 32 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -66,8 +66,6 @@ public class AppTracker : INotifyPropertyChanged
6666
// OnPropertyChanged listener for containers
6767
[JsonIgnore] public EventHandler PropertyChangedEvent;
6868

69-
[JsonIgnore] public Vector3 PositionOffsetRound => PositionOffset * 100;
70-
7169
[JsonIgnore] public Vector3 PoseVelocity { get; set; } = new(0, 0, 0);
7270
[JsonIgnore] public Vector3 PoseAcceleration { get; set; } = new(0, 0, 0);
7371
[JsonIgnore] public Vector3 PoseAngularAcceleration { get; set; } = new(0, 0, 0);
@@ -228,26 +226,18 @@ Role is TrackerType.TrackerWaist or TrackerType.TrackerLeftFoot or TrackerType.T
228226
// Note: "used" can also mean that the action is shown & disabled by the user
229227
[JsonIgnore]
230228
public Dictionary<InputActionEndpoint, bool> AvailableInputActions =>
231-
AppPlugins.CurrentServiceEndpoint?.SupportedInputActions?.TryGetValue(Role, out var actions) ?? false
232-
? actions.ToDictionary(x => new InputActionEndpoint { Tracker = Role, Guid = x.Guid },
233-
x => InputActionsMap.Keys.Any(y => y.Tracker == Role && y.Guid == x.Guid && y.IsValid))
234-
: [];
229+
AppPlugins.CurrentServiceEndpoint?.SupportedInputActions?.TryGetValue(Role, out var actions) ?? false ?
230+
actions.ToDictionary(x => new InputActionEndpoint { Tracker = Role, Guid = x.Guid },
231+
x => InputActionsMap.Keys.Any(y => y.Tracker == Role && y.Guid == x.Guid && y.IsValid)) :
232+
[];
235233

236234
[JsonIgnore]
237235
public IEnumerable<InputActionEntry> InputActionEntries =>
238-
AvailableInputActions.Select(x => new InputActionEntry
239-
{
240-
Action = x.Key,
241-
IsEnabled = x.Value
242-
}).OrderBy(x => x.Name);
236+
AvailableInputActions.Select(x => new InputActionEntry { Action = x.Key, IsEnabled = x.Value }).OrderBy(x => x.Name);
243237

244238
[JsonIgnore]
245239
public IEnumerable<InputActionBindingEntry> InputActionBindingEntries =>
246-
InputActionsMap.Select(x => new InputActionBindingEntry
247-
{
248-
Action = x.Key,
249-
Source = x.Value
250-
}).OrderBy(x => x.ActionName);
240+
InputActionsMap.Select(x => new InputActionBindingEntry { Action = x.Key, Source = x.Value }).OrderBy(x => x.ActionName);
251241

252242
[JsonIgnore] public bool OverridePhysics { get; set; }
253243

@@ -363,11 +353,10 @@ public int SelectedOverrideJointIdForSelectedDevice
363353
// '+ 1' and '- 1' cause '0' is 'No Override' in this case
364354
// Note: use OverrideJointId for the "normal" (non-ui) one
365355
// Note: -1 replaced with 0 cuz disabled joints are hidden
366-
get => IsActive
367-
? IsManagedBy(AppData.Settings.SelectedTrackingDeviceGuid)
368-
? (int)_overrideJointId + 1
369-
: 0 // Not overridden by this device
370-
: 0; // -1; // Disabled or not supported
356+
get => IsActive ?
357+
IsManagedBy(AppData.Settings.SelectedTrackingDeviceGuid) ? (int)_overrideJointId + 1 : 0 // Not overridden by this device
358+
:
359+
0; // -1; // Disabled or not supported
371360
set
372361
{
373362
// Don't parse any invalid changed
@@ -521,8 +510,9 @@ public Vector3 GetFilteredPosition(JointPositionTrackingOption? filter = null)
521510
{
522511
var computedFilter =
523512
NoPositionFilteringRequested // If filtering is force-disabled
524-
? JointPositionTrackingOption.NoPositionTrackingFilter
525-
: filter ?? _positionTrackingFilterOption;
513+
?
514+
JointPositionTrackingOption.NoPositionTrackingFilter :
515+
filter ?? _positionTrackingFilterOption;
526516

527517
return computedFilter switch
528518
{
@@ -542,8 +532,9 @@ public Quaternion GetFilteredOrientation(RotationTrackingFilterOption? filter =
542532
{
543533
var computedFilter =
544534
NoPositionFilteringRequested // If filtering is force-disabled
545-
? RotationTrackingFilterOption.NoOrientationTrackingFilter
546-
: filter ?? _orientationTrackingFilterOption;
535+
?
536+
RotationTrackingFilterOption.NoOrientationTrackingFilter :
537+
filter ?? _orientationTrackingFilterOption;
547538

548539
return computedFilter switch
549540
{
@@ -661,20 +652,8 @@ public TrackerBase GetTrackerBase(
661652
TrackingState = TrackingState,
662653
Role = Role,
663654
Serial = Serial,
664-
665-
Position = new Vector3
666-
{
667-
X = fullPosition.X,
668-
Y = fullPosition.Y,
669-
Z = fullPosition.Z
670-
},
671-
Orientation = new Quaternion
672-
{
673-
W = fullOrientation.W,
674-
X = fullOrientation.X,
675-
Y = fullOrientation.Y,
676-
Z = fullOrientation.Z
677-
}
655+
Position = new Vector3 { X = fullPosition.X, Y = fullPosition.Y, Z = fullPosition.Z },
656+
Orientation = new Quaternion { W = fullOrientation.W, X = fullOrientation.X, Y = fullOrientation.Y, Z = fullOrientation.Z }
678657
};
679658

680659
if (!OverridePhysics) return trackerBase;
@@ -684,30 +663,10 @@ public TrackerBase GetTrackerBase(
684663
var fullAngularVelocity = GetCalibratedVector(PoseAngularVelocity);
685664
var fullAngularAcceleration = GetCalibratedVector(PoseAngularAcceleration);
686665

687-
trackerBase.Velocity = new Vector3
688-
{
689-
X = fullVelocity.X,
690-
Y = fullVelocity.Y,
691-
Z = fullVelocity.Z
692-
};
693-
trackerBase.Acceleration = new Vector3
694-
{
695-
X = fullAcceleration.X,
696-
Y = fullAcceleration.Y,
697-
Z = fullAcceleration.Z
698-
};
699-
trackerBase.AngularVelocity = new Vector3
700-
{
701-
X = fullAngularVelocity.X,
702-
Y = fullAngularVelocity.Y,
703-
Z = fullAngularVelocity.Z
704-
};
705-
trackerBase.AngularAcceleration = new Vector3
706-
{
707-
X = fullAngularAcceleration.X,
708-
Y = fullAngularAcceleration.Y,
709-
Z = fullAngularAcceleration.Z
710-
};
666+
trackerBase.Velocity = new Vector3 { X = fullVelocity.X, Y = fullVelocity.Y, Z = fullVelocity.Z };
667+
trackerBase.Acceleration = new Vector3 { X = fullAcceleration.X, Y = fullAcceleration.Y, Z = fullAcceleration.Z };
668+
trackerBase.AngularVelocity = new Vector3 { X = fullAngularVelocity.X, Y = fullAngularVelocity.Y, Z = fullAngularVelocity.Z };
669+
trackerBase.AngularAcceleration = new Vector3 { X = fullAngularAcceleration.X, Y = fullAngularAcceleration.Y, Z = fullAngularAcceleration.Z };
711670

712671
return trackerBase;
713672
}
@@ -747,9 +706,7 @@ public TrackedJoint GetTrackedJoint()
747706
Orientation = Orientation,
748707
Position = Position,
749708
Velocity = PoseVelocity,
750-
TrackingState = IsActive
751-
? TrackedJointState.StateTracked
752-
: TrackedJointState.StateNotTracked
709+
TrackingState = IsActive ? TrackedJointState.StateTracked : TrackedJointState.StateNotTracked
753710
};
754711
}
755712

@@ -774,6 +731,15 @@ public bool IsManagedBy(string guid)
774731
}
775732

776733
public double IsOverriddenOpacity => BoolToOpacity(IsOverridden);
734+
735+
// For bindings
736+
public float OrientationOffsetZ { get => OrientationOffset.Z; set => OrientationOffset.Z = value; }
737+
public float OrientationOffsetY { get => OrientationOffset.Y; set => OrientationOffset.Y = value; }
738+
public float OrientationOffsetX { get => OrientationOffset.X; set => OrientationOffset.X = value; }
739+
740+
public float PositionOffsetX { get => PositionOffset.X; set => PositionOffset.X = value; }
741+
public float PositionOffsetY { get => PositionOffset.Y; set => PositionOffset.Y = value; }
742+
public float PositionOffsetZ { get => PositionOffset.Z; set => PositionOffset.Z = value; }
777743
}
778744

779745
[JsonArray]

Amethyst/Classes/Shared.cs

Lines changed: 87 additions & 73 deletions
Original file line numberDiff line numberDiff line change
@@ -135,86 +135,100 @@ public static void NavigateToPage(string navItemTag,
135135
AppSounds.AppSoundType.MovePrevious);
136136
}
137137

138-
// Switch bring back the current item to the base state
139-
if (!string.IsNullOrEmpty(preNavPageType?.Name))
138+
Interfacing.CurrentPageTag = navItemTag; // Cache the current page tag
139+
Interfacing.CurrentPageClass = page.FullName; // Cache the current page tag
140+
141+
ReloadNavigationIcons();
142+
143+
MainContentFrame.Navigate(page, null, transitionInfo);
144+
}
145+
146+
public static void ReloadNavigationIcons()
147+
{
148+
if (Interfacing.CurrentPageClass == "Amethyst.Pages.General")
140149
{
141-
switch (preNavPageType.FullName)
142-
{
143-
case "Amethyst.Pages.General":
144-
NavigationItems.NavViewGeneralButtonLabel.Opacity = 1.0;
145-
146-
NavigationItems.NavViewGeneralButtonIcon.Foreground = NeutralBrush;
147-
NavigationItems.NavViewGeneralButtonIcon.Symbol = Symbol.Home;
148-
break;
149-
case "Amethyst.Pages.Settings":
150-
NavigationItems.NavViewSettingsButtonLabel.Opacity = 1.0;
151-
152-
NavigationItems.NavViewSettingsButtonIcon.Foreground = NeutralBrush;
153-
NavigationItems.NavViewSettingsButtonIcon.Symbol = Symbol.Settings;
154-
break;
155-
case "Amethyst.Pages.Devices":
156-
NavigationItems.NavViewDevicesButtonLabel.Opacity = 1.0;
157-
158-
NavigationItems.NavViewDevicesButtonIcon.Foreground = NeutralBrush;
159-
NavigationItems.NavViewDevicesButtonIcon.Symbol = Symbol.PlugDisconnected;
160-
break;
161-
case "Amethyst.Pages.Info":
162-
NavigationItems.NavViewInfoButtonLabel.Opacity = 1.0;
163-
164-
NavigationItems.NavViewInfoButtonIcon.Foreground = NeutralBrush;
165-
NavigationItems.NavViewInfoButtonIcon.Symbol = Symbol.Info;
166-
break;
167-
case "Amethyst.Pages.Plugins":
168-
NavigationItems.NavViewPluginsButtonLabel.Opacity = 1.0;
169-
170-
NavigationItems.NavViewPluginsButtonIcon.Foreground = NeutralBrush;
171-
NavigationItems.NavViewPluginsButtonIcon.Symbol = Symbol.PuzzlePiece;
172-
break;
173-
}
150+
NavigationItems.NavViewGeneralButtonIcon.Symbol = Symbol.Home;
151+
NavigationItems.NavViewGeneralButtonIcon.Foreground = AttentionBrush;
152+
153+
NavigationItems.NavViewGeneralButtonLabel.Opacity = 0.0;
154+
NavigationItems.NavViewGeneralButtonIcon.RenderTransform = new TranslateTransform();
174155
}
156+
else
157+
{
158+
NavigationItems.NavViewGeneralButtonIcon.RenderTransform = new TranslateTransform(0, -8);
159+
NavigationItems.NavViewGeneralButtonLabel.Opacity = 1.0;
175160

176-
// Switch the next navview item to the active state
177-
if (!string.IsNullOrEmpty(page.Name))
161+
NavigationItems.NavViewGeneralButtonIcon.Foreground = NeutralBrush;
162+
NavigationItems.NavViewGeneralButtonIcon.Symbol = Symbol.Home;
163+
}
164+
165+
if (Interfacing.CurrentPageClass == "Amethyst.Pages.Settings")
178166
{
179-
switch (page.FullName)
180-
{
181-
case "Amethyst.Pages.General":
182-
NavigationItems.NavViewGeneralButtonIcon.Symbol = Symbol.Home;
183-
NavigationItems.NavViewGeneralButtonIcon.Foreground = AttentionBrush;
184-
185-
NavigationItems.NavViewGeneralButtonLabel.Opacity = 0.0;
186-
break;
187-
case "Amethyst.Pages.Settings":
188-
NavigationItems.NavViewSettingsButtonIcon.Symbol = Symbol.Settings;
189-
NavigationItems.NavViewSettingsButtonIcon.Foreground = AttentionBrush;
190-
191-
NavigationItems.NavViewSettingsButtonLabel.Opacity = 0.0;
192-
break;
193-
case "Amethyst.Pages.Devices":
194-
NavigationItems.NavViewDevicesButtonLabel.Opacity = 0.0;
195-
196-
NavigationItems.NavViewDevicesButtonIcon.Foreground = AttentionBrush;
197-
NavigationItems.NavViewDevicesButtonIcon.Symbol = Symbol.PlugConnected;
198-
break;
199-
case "Amethyst.Pages.Info":
200-
NavigationItems.NavViewInfoButtonIcon.Symbol = Symbol.Info;
201-
NavigationItems.NavViewInfoButtonIcon.Foreground = AttentionBrush;
202-
203-
NavigationItems.NavViewInfoButtonLabel.Opacity = 0.0;
204-
break;
205-
case "Amethyst.Pages.Plugins":
206-
NavigationItems.NavViewPluginsButtonLabel.Opacity = 0.0;
207-
208-
NavigationItems.NavViewPluginsButtonIcon.Foreground = AttentionBrush;
209-
NavigationItems.NavViewPluginsButtonIcon.Symbol = Symbol.PuzzlePiece; // TODO filled ones
210-
break;
211-
}
167+
NavigationItems.NavViewSettingsButtonIcon.Symbol = Symbol.Settings;
168+
NavigationItems.NavViewSettingsButtonIcon.Foreground = AttentionBrush;
169+
170+
NavigationItems.NavViewSettingsButtonLabel.Opacity = 0.0;
171+
NavigationItems.NavViewSettingsButtonIcon.RenderTransform = new TranslateTransform();
212172
}
173+
else
174+
{
175+
NavigationItems.NavViewSettingsButtonIcon.RenderTransform = new TranslateTransform(0, -8);
176+
NavigationItems.NavViewSettingsButtonLabel.Opacity = 1.0;
213177

214-
Interfacing.CurrentPageTag = navItemTag; // Cache the current page tag
215-
Interfacing.CurrentPageClass = page.FullName; // Cache the current page tag
178+
NavigationItems.NavViewSettingsButtonIcon.Foreground = NeutralBrush;
179+
NavigationItems.NavViewSettingsButtonIcon.Symbol = Symbol.Settings;
180+
}
216181

217-
MainContentFrame.Navigate(page, null, transitionInfo);
182+
if (Interfacing.CurrentPageClass == "Amethyst.Pages.Devices")
183+
{
184+
NavigationItems.NavViewDevicesButtonLabel.Opacity = 0.0;
185+
NavigationItems.NavViewDevicesButtonIcon.RenderTransform = new TranslateTransform();
186+
187+
NavigationItems.NavViewDevicesButtonIcon.Foreground = AttentionBrush;
188+
NavigationItems.NavViewDevicesButtonIcon.Symbol = Symbol.PlugConnected;
189+
}
190+
else
191+
{
192+
NavigationItems.NavViewDevicesButtonIcon.RenderTransform = new TranslateTransform(0, -8);
193+
NavigationItems.NavViewDevicesButtonLabel.Opacity = 1.0;
194+
195+
NavigationItems.NavViewDevicesButtonIcon.Foreground = NeutralBrush;
196+
NavigationItems.NavViewDevicesButtonIcon.Symbol = Symbol.PlugDisconnected;
197+
}
198+
199+
if (Interfacing.CurrentPageClass == "Amethyst.Pages.Info")
200+
{
201+
NavigationItems.NavViewInfoButtonIcon.Symbol = Symbol.Info;
202+
NavigationItems.NavViewInfoButtonIcon.Foreground = AttentionBrush;
203+
204+
NavigationItems.NavViewInfoButtonLabel.Opacity = 0.0;
205+
NavigationItems.NavViewInfoButtonIcon.RenderTransform = new TranslateTransform();
206+
}
207+
else
208+
{
209+
NavigationItems.NavViewInfoButtonIcon.RenderTransform = new TranslateTransform(0, -8);
210+
NavigationItems.NavViewInfoButtonLabel.Opacity = 1.0;
211+
212+
NavigationItems.NavViewInfoButtonIcon.Foreground = NeutralBrush;
213+
NavigationItems.NavViewInfoButtonIcon.Symbol = Symbol.Info;
214+
}
215+
216+
if (Interfacing.CurrentPageClass == "Amethyst.Pages.Plugins")
217+
{
218+
NavigationItems.NavViewPluginsButtonLabel.Opacity = 0.0;
219+
NavigationItems.NavViewPluginsButtonIcon.RenderTransform = new TranslateTransform();
220+
221+
NavigationItems.NavViewPluginsButtonIcon.Foreground = AttentionBrush;
222+
NavigationItems.NavViewPluginsButtonIcon.Symbol = Symbol.PuzzlePiece;
223+
}
224+
else
225+
{
226+
NavigationItems.NavViewPluginsButtonIcon.RenderTransform = new TranslateTransform(0, -8);
227+
NavigationItems.NavViewPluginsButtonLabel.Opacity = 1.0;
228+
229+
NavigationItems.NavViewPluginsButtonIcon.Foreground = NeutralBrush;
230+
NavigationItems.NavViewPluginsButtonIcon.Symbol = Symbol.PuzzlePiece;
231+
}
218232
}
219233

220234
public class DispatcherHelper

Amethyst/Controls/ReplayManagerControl.axaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,7 @@
133133

134134
<Border Grid.Row="2" Width="90" Height="90" CornerRadius="100"
135135
BorderThickness="4" HorizontalAlignment="Center" VerticalAlignment="Center"
136-
BorderBrush="{StaticResource NoThemeColorSolidColorBrushOpposite}"
136+
BorderBrush="{DynamicResource FocusStrokeColorOuterBrush}"
137137
x:Name="PointCaptureStabilityBorder" />
138138

139139
<TextBlock x:Name="InstructionsLabelPrimary" Grid.Row="3" Text="{Binding #Root.InstructionsText[0]}"

Amethyst/Installer/Views/SetupError.axaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@
5959
Text="{Binding #Root.Error.Message}" TextWrapping="Wrap"
6060
HorizontalAlignment="Center" MaxWidth="700" />
6161

62-
<Button Grid.Row="8" Classes="Accent"
62+
<Button Grid.Row="8" Classes="accent"
6363
HorizontalAlignment="Center" Content="{Binding #Root.Error.ActionMessage}"
6464
IsVisible="{Binding #Root.Error.HasAction}" Click="ActionButton_Click" />
6565

0 commit comments

Comments
 (0)