@@ -103,77 +103,83 @@ public override void Render(DrawingContext context)
103103 var sampleW = hasUserSamples ? Math . Min ( step * 0.5 - 2.5 , 14.0 ) : Math . Min ( step - 3 , 28.0 ) ;
104104 var maxSampleH = h - 24.0 ;
105105 var maxLabelEndX = w - 4.0 ;
106+ var labelsToDraw = new List < ( FormattedText Text , Point Position ) > ( ) ;
106107
107- using var clip = context . PushClip ( new Rect ( leftMargin , 0 , w - leftMargin , h ) ) ;
108- do
108+ using ( context . PushClip ( new Rect ( leftMargin , 0 , w - leftMargin , h ) ) )
109109 {
110- var ( label , total , user ) = samples . GetSample ( time ) ;
111-
112- if ( x - step <= w && total > 0 )
110+ do
113111 {
114- if ( hasUserSamples )
115- {
116- var startX = x - step * 0.5 - 1 - sampleW ;
117- var startY = maxSampleH * ( 1.0 - total * 1.0 / maxValue ) ;
118- var rect = new Rect ( startX , startY , sampleW , maxSampleH - startY ) ;
112+ var ( label , total , user ) = samples . GetSample ( time ) ;
119113
120- using ( context . PushOpacity ( 0.2 ) )
114+ if ( x - step <= w && total > 0 )
115+ {
116+ if ( hasUserSamples )
121117 {
122- context . DrawRectangle ( sampleBrush , null , new RoundedRect ( rect , corner ) ) ;
118+ var startX = x - step * 0.5 - 1 - sampleW ;
119+ var startY = maxSampleH * ( 1.0 - total * 1.0 / maxValue ) ;
120+ var rect = new Rect ( startX , startY , sampleW , maxSampleH - startY ) ;
121+
122+ using ( context . PushOpacity ( 0.2 ) )
123+ {
124+ context . DrawRectangle ( sampleBrush , null , new RoundedRect ( rect , corner ) ) ;
125+ }
126+
127+ if ( user > 0 )
128+ {
129+ var userStartX = startX + sampleW + 2 ;
130+ var userStartY = maxSampleH * ( 1.0 - user * 1.0 / maxValue ) ;
131+ var userRect = new Rect ( userStartX , userStartY , sampleW , maxSampleH - userStartY ) ;
132+ context . DrawRectangle ( sampleBrush , null , new RoundedRect ( userRect , corner ) ) ;
133+ }
134+
135+ var hitRect = new Rect ( startX , startY , sampleW * 2 + 2 , maxSampleH - startY ) ;
136+ _hitBoxes . Add ( new ( hitRect , new ( label , true , total , user ) ) ) ;
123137 }
124-
125- if ( user > 0 )
138+ else
126139 {
127- var userStartX = startX + sampleW + 2 ;
128- var userStartY = maxSampleH * ( 1.0 - user * 1.0 / maxValue ) ;
129- var userRect = new Rect ( userStartX , userStartY , sampleW , maxSampleH - userStartY ) ;
130- context . DrawRectangle ( sampleBrush , null , new RoundedRect ( userRect , corner ) ) ;
131- }
132-
133- var hitRect = new Rect ( startX , startY , sampleW * 2 + 2 , maxSampleH - startY ) ;
134- _hitBoxes . Add ( new ( hitRect , new ( label , true , total , user ) ) ) ;
135- }
136- else
137- {
138- var startX = x - step * 0.5 - sampleW * 0.5 ;
139- var startY = maxSampleH * ( 1.0 - total * 1.0 / maxValue ) ;
140- var rect = new Rect ( startX , startY , sampleW , maxSampleH - startY ) ;
140+ var startX = x - step * 0.5 - sampleW * 0.5 ;
141+ var startY = maxSampleH * ( 1.0 - total * 1.0 / maxValue ) ;
142+ var rect = new Rect ( startX , startY , sampleW , maxSampleH - startY ) ;
141143
142- context . DrawRectangle ( sampleBrush , null , new RoundedRect ( rect , corner ) ) ;
143- _hitBoxes . Add ( new ( rect , new ( label , false , total , 0 ) ) ) ;
144+ context . DrawRectangle ( sampleBrush , null , new RoundedRect ( rect , corner ) ) ;
145+ _hitBoxes . Add ( new ( rect , new ( label , false , total , 0 ) ) ) ;
146+ }
144147 }
145- }
146148
147- if ( x <= w )
148- {
149- var formattedLabel = new FormattedText (
150- label ,
151- CultureInfo . CurrentCulture ,
152- FlowDirection . LeftToRight ,
153- labelTypeface ,
154- 11 ,
155- Brushes . Gray ) ;
156-
157- var labelCenterX = x - step * 0.5 ;
158- var labelEndX = labelCenterX + formattedLabel . Width * 0.5 ;
159- if ( labelEndX <= maxLabelEndX )
149+ if ( x <= w )
160150 {
161- var labelStartX = labelCenterX - formattedLabel . Width * 0.5 ;
162- var labelStartY = h - formattedLabel . Height - 2.0 ;
163- context . DrawText ( formattedLabel , new Point ( labelStartX , labelStartY ) ) ;
164- maxLabelEndX = labelStartX - 16.0 ;
151+ var formattedLabel = new FormattedText (
152+ label ,
153+ CultureInfo . CurrentCulture ,
154+ FlowDirection . LeftToRight ,
155+ labelTypeface ,
156+ 11 ,
157+ Brushes . Gray ) ;
158+
159+ var labelCenterX = x - step * 0.5 ;
160+ var labelEndX = labelCenterX + formattedLabel . Width * 0.5 ;
161+ if ( labelEndX <= maxLabelEndX )
162+ {
163+ var labelStartX = labelCenterX - formattedLabel . Width * 0.5 ;
164+ var labelStartY = h - formattedLabel . Height - 2.0 ;
165+ labelsToDraw . Add ( ( formattedLabel , new Point ( labelStartX , labelStartY ) ) ) ;
166+ maxLabelEndX = labelStartX - 16.0 ;
167+ }
165168 }
166- }
167169
168- if ( x <= leftMargin )
169- break ;
170+ if ( x <= leftMargin )
171+ break ;
170172
171- x -= step ;
173+ x -= step ;
174+
175+ time = samples . NextSampleTime ( time ) ;
176+ if ( time < minTime )
177+ break ;
178+ } while ( true ) ;
179+ }
172180
173- time = samples . NextSampleTime ( time ) ;
174- if ( time < minTime )
175- break ;
176- } while ( true ) ;
181+ foreach ( var ( text , position ) in labelsToDraw )
182+ context . DrawText ( text , position ) ;
177183 }
178184
179185 protected override void OnPropertyChanged ( AvaloniaPropertyChangedEventArgs change )
0 commit comments