1+ using Intersect . Client . Core ;
2+ using Intersect . Client . Framework . File_Management ;
3+ using Intersect . Client . Framework . GenericClasses ;
4+ using Intersect . Client . Framework . Gwen ;
5+ using Intersect . Client . Framework . Gwen . Control ;
6+ using Intersect . Client . Framework . Gwen . Control . EventArguments ;
7+ using Intersect . Client . Framework . Gwen . Control . Layout ;
8+ using Intersect . Client . General ;
9+ using Intersect . Client . Interface . Data ;
10+ using Intersect . Client . Localization ;
11+ using Intersect . Core ;
12+
13+ namespace Intersect . Client . Interface . Shared ;
14+
15+ public partial class FPSPanel : Panel
16+ {
17+ private readonly Label _label ;
18+
19+ public FPSPanel ( Base parent , string name = nameof ( FPSPanel ) ) : base ( parent : parent , name : name )
20+ {
21+ Alignment = [ Alignments . Top , Alignments . Right ] ;
22+ BackgroundColor = new Color ( 0x7f , 0 , 0 , 0 ) ;
23+ RestrictToParent = true ;
24+ // TODO: Remove this when showing a game version is added
25+ IsVisibleInTree = ApplicationContext . CurrentContext . IsDeveloper ;
26+
27+ var font = GameContentManager . Current . GetFont ( "sourcesansproblack" , 10 ) ;
28+
29+ _label = new Label ( this , name : nameof ( _label ) )
30+ {
31+ AutoSizeToContents = false ,
32+ Dock = Pos . Fill ,
33+ Font = font ,
34+ Padding = new Padding ( 8 , 4 ) ,
35+ Text = ApplicationContext . CurrentContext . VersionName ,
36+ TextAlign = Pos . Center ,
37+ IsVisibleInParent = Globals . Database ? . ShowFPSCounter ?? false ,
38+ } ;
39+
40+ MinimumSize = Graphics . Renderer . MeasureText ( Strings . General . FpsLabelFormat . ToString ( 10_000 ) , font ) + new Pointf ( 16 , 8 ) ;
41+
42+ DelegateDataProvider < int > fpsProvider = new ( ( ) => Graphics . Renderer . Fps )
43+ {
44+ UserData = _label ,
45+ } ;
46+ AddDataProvider ( fpsProvider ) ;
47+ fpsProvider . ValueChanged += OnFPSChanged ;
48+ }
49+
50+ private static void OnFPSChanged ( IDataProvider dataProvider , ValueChangedEventArgs < int > args )
51+ {
52+ if ( dataProvider is not DataProvider < int > typedProvider )
53+ {
54+ throw new InvalidOperationException ( "Received event from invalid data provider" ) ;
55+ }
56+
57+ if ( typedProvider . UserData is not Label label )
58+ {
59+ throw new InvalidOperationException ( "Data provider's user data is not a label as expected" ) ;
60+ }
61+
62+ label . Text = Strings . General . FpsLabelFormat . ToString ( args . Value ) ;
63+ }
64+
65+ protected override void Layout ( Framework . Gwen . Skin . Base skin )
66+ {
67+ base . Layout ( skin ) ;
68+
69+ SizeToChildren ( ) ;
70+ }
71+ }
0 commit comments