@@ -94,62 +94,15 @@ impl RenderThread {
94
94
95
95
match current_request. take ( ) {
96
96
Some ( Request :: Render ( render_request) ) => {
97
- // Create a new ImageSurface for Cairo rendering.
98
- let mut surface = ImageSurface :: create (
99
- cairo:: Format :: ARgb32 ,
100
- ( render_request. width * render_request. supersample_factor ) as i32 ,
101
- ( render_request. height * render_request. supersample_factor ) as i32 ,
102
- )
103
- . unwrap ( ) ;
104
-
105
- let cairo_context = CairoContext :: new ( & surface) . unwrap ( ) ;
106
-
107
- // Don't use Cairo's default antialiasing, it makes the lines look too blurry
108
- // Supersampling is our 2D anti-aliasing solution.
109
- if render_request. supersample_factor > 1 {
110
- cairo_context. set_antialias ( cairo:: Antialias :: None ) ;
111
- }
112
-
113
- let cairo_backend = CairoBackend :: new (
114
- & cairo_context,
115
- // Supersample the rendering
116
- (
117
- render_request. width * render_request. supersample_factor ,
118
- render_request. height * render_request. supersample_factor ,
119
- ) ,
120
- )
121
- . unwrap ( ) ;
122
-
123
- if let Err ( err) = render_request. draw ( cairo_backend) {
124
- error ! ( "Failed to plot chart: {err:?}" )
125
- }
126
-
127
- match (
128
- surface. to_texture ( ) ,
129
- last_texture. lock ( ) . unwrap ( ) . deref_mut ( ) ,
130
- ) {
131
- // Successfully generated a new texture, but the old texture is also there
132
- ( Some ( texture) , Some ( last_texture) ) => {
133
- * last_texture = texture;
134
- }
135
- // If texture conversion failed, keep the old texture if it's present.
136
- ( None , None ) => {
137
- error ! ( "Failed to convert cairo surface to gdk texture, not overwriting old one" ) ;
138
- }
139
- // Update the last texture, if The old texture wasn't ever generated (None),
140
- // No matter the result of conversion
141
- ( result, last_texture) => {
142
- * last_texture = result;
143
- }
144
- } ;
145
- }
97
+ process_request ( render_request, last_texture) ;
98
+ }
146
99
// Terminate the thread if a Terminate request is received.
147
100
Some ( Request :: Terminate ) => break ,
148
101
None => { }
149
102
}
150
103
}
151
- } )
152
- . unwrap ( ) ;
104
+ } )
105
+ . unwrap ( ) ;
153
106
154
107
Self {
155
108
state,
@@ -177,6 +130,60 @@ impl RenderThread {
177
130
}
178
131
}
179
132
133
+ pub ( super ) fn process_request (
134
+ render_request : RenderRequest ,
135
+ last_texture : & Mutex < Option < MemoryTexture > > ,
136
+ ) {
137
+ // Create a new ImageSurface for Cairo rendering.
138
+ let mut surface = ImageSurface :: create (
139
+ cairo:: Format :: ARgb32 ,
140
+ ( render_request. width * render_request. supersample_factor ) as i32 ,
141
+ ( render_request. height * render_request. supersample_factor ) as i32 ,
142
+ )
143
+ . unwrap ( ) ;
144
+
145
+ let cairo_context = CairoContext :: new ( & surface) . unwrap ( ) ;
146
+
147
+ // Don't use Cairo's default antialiasing, it makes the lines look too blurry
148
+ // Supersampling is our 2D anti-aliasing solution.
149
+ if render_request. supersample_factor > 1 {
150
+ cairo_context. set_antialias ( cairo:: Antialias :: None ) ;
151
+ }
152
+
153
+ let cairo_backend = CairoBackend :: new (
154
+ & cairo_context,
155
+ // Supersample the rendering
156
+ (
157
+ render_request. width * render_request. supersample_factor ,
158
+ render_request. height * render_request. supersample_factor ,
159
+ ) ,
160
+ )
161
+ . unwrap ( ) ;
162
+
163
+ if let Err ( err) = render_request. draw ( cairo_backend) {
164
+ error ! ( "Failed to plot chart: {err:?}" )
165
+ }
166
+
167
+ match (
168
+ surface. to_texture ( ) ,
169
+ last_texture. lock ( ) . unwrap ( ) . deref_mut ( ) ,
170
+ ) {
171
+ // Successfully generated a new texture, but the old texture is also there
172
+ ( Some ( texture) , Some ( last_texture) ) => {
173
+ * last_texture = texture;
174
+ }
175
+ // If texture conversion failed, keep the old texture if it's present.
176
+ ( None , None ) => {
177
+ error ! ( "Failed to convert cairo surface to gdk texture, not overwriting old one" ) ;
178
+ }
179
+ // Update the last texture, if The old texture wasn't ever generated (None),
180
+ // No matter the result of conversion
181
+ ( result, last_texture) => {
182
+ * last_texture = result;
183
+ }
184
+ } ;
185
+ }
186
+
180
187
// Implement the default constructor for RenderThread using the `new` method.
181
188
impl Default for RenderThread {
182
189
fn default ( ) -> Self {
@@ -336,12 +343,12 @@ impl RenderRequest {
336
343
( current_date, segment. evaluate ( current_date) )
337
344
} )
338
345
} ) ,
339
- Palette99 :: pick ( idx) . stroke_width ( 8 ) ,
346
+ Palette99 :: pick ( idx) . stroke_width ( 2 ) ,
340
347
) )
341
348
. context ( "Failed to draw series" ) ?
342
349
. label ( caption)
343
350
. legend ( move |( x, y) | {
344
- let offset = self . relative_size ( 0.04 ) as i32 ;
351
+ let offset = self . relative_size ( 0.02 ) as i32 ;
345
352
Rectangle :: new (
346
353
[ ( x - offset, y - offset) , ( x + offset, y + offset) ] ,
347
354
Palette99 :: pick ( idx) . filled ( ) ,
@@ -360,12 +367,12 @@ impl RenderRequest {
360
367
( current_date, segment. evaluate ( current_date) )
361
368
} )
362
369
} ) ,
363
- Palette99 :: pick ( idx + 10 ) . stroke_width ( 8 ) ,
370
+ Palette99 :: pick ( idx + 10 ) . stroke_width ( 2 ) ,
364
371
) )
365
372
. context ( "Failed to draw series" ) ?
366
373
. label ( caption)
367
374
. legend ( move |( x, y) | {
368
- let offset = self . relative_size ( 0.04 ) as i32 ;
375
+ let offset = self . relative_size ( 0.02 ) as i32 ;
369
376
Rectangle :: new (
370
377
[ ( x - offset, y - offset) , ( x + offset, y + offset) ] ,
371
378
Palette99 :: pick ( idx + 10 ) . filled ( ) ,
0 commit comments