@@ -9,7 +9,7 @@ use graphene_std::vector::style::FillChoice;
9
9
10
10
fn grid_overlay_rectangular ( document : & DocumentMessageHandler , overlay_context : & mut OverlayContext , spacing : DVec2 ) {
11
11
let origin = document. snapping_state . grid . origin ;
12
- let grid_color = document. snapping_state . grid . grid_color ;
12
+ let grid_color = "#" . to_string ( ) + & document. snapping_state . grid . grid_color . to_rgba_hex_srgb ( ) ;
13
13
let Some ( spacing) = GridSnapping :: compute_rectangle_spacing ( spacing, & document. document_ptz ) else {
14
14
return ;
15
15
} ;
@@ -36,11 +36,7 @@ fn grid_overlay_rectangular(document: &DocumentMessageHandler, overlay_context:
36
36
} else {
37
37
DVec2 :: new ( secondary_pos, primary_end)
38
38
} ;
39
- overlay_context. line (
40
- document_to_viewport. transform_point2 ( start) ,
41
- document_to_viewport. transform_point2 ( end) ,
42
- Some ( & ( "#" . to_string ( ) + & grid_color. rgba_hex ( ) ) ) ,
43
- ) ;
39
+ overlay_context. line ( document_to_viewport. transform_point2 ( start) , document_to_viewport. transform_point2 ( end) , Some ( & grid_color) ) ;
44
40
}
45
41
}
46
42
}
@@ -52,7 +48,7 @@ fn grid_overlay_rectangular(document: &DocumentMessageHandler, overlay_context:
52
48
// TODO: Implement this with a dashed line (`set_line_dash`), with integer spacing which is continuously adjusted to correct the accumulated error.
53
49
fn grid_overlay_rectangular_dot ( document : & DocumentMessageHandler , overlay_context : & mut OverlayContext , spacing : DVec2 ) {
54
50
let origin = document. snapping_state . grid . origin ;
55
- let grid_color = document. snapping_state . grid . grid_color ;
51
+ let grid_color = "#" . to_string ( ) + & document. snapping_state . grid . grid_color . to_rgba_hex_srgb ( ) ;
56
52
let Some ( spacing) = GridSnapping :: compute_rectangle_spacing ( spacing, & document. document_ptz ) else {
57
53
return ;
58
54
} ;
@@ -80,16 +76,13 @@ fn grid_overlay_rectangular_dot(document: &DocumentMessageHandler, overlay_conte
80
76
let x_per_dot = ( end. x - start. x ) / total_dots;
81
77
for dot_index in 0 ..=total_dots as usize {
82
78
let exact_x = x_per_dot * dot_index as f64 ;
83
- overlay_context. pixel (
84
- document_to_viewport. transform_point2 ( DVec2 :: new ( start. x + exact_x, start. y ) ) . round ( ) ,
85
- Some ( & ( "#" . to_string ( ) + & grid_color. rgba_hex ( ) ) ) ,
86
- )
79
+ overlay_context. pixel ( document_to_viewport. transform_point2 ( DVec2 :: new ( start. x + exact_x, start. y ) ) . round ( ) , Some ( & grid_color) )
87
80
}
88
81
}
89
82
}
90
83
91
84
fn grid_overlay_isometric ( document : & DocumentMessageHandler , overlay_context : & mut OverlayContext , y_axis_spacing : f64 , angle_a : f64 , angle_b : f64 ) {
92
- let grid_color = document. snapping_state . grid . grid_color ;
85
+ let grid_color = "#" . to_string ( ) + & document. snapping_state . grid . grid_color . to_rgba_hex_srgb ( ) ;
93
86
let cmp = |a : & f64 , b : & f64 | a. partial_cmp ( b) . unwrap ( ) ;
94
87
let origin = document. snapping_state . grid . origin ;
95
88
let document_to_viewport = document. navigation_handler . calculate_offset_transform ( overlay_context. size / 2. , & document. document_ptz ) ;
@@ -112,11 +105,7 @@ fn grid_overlay_isometric(document: &DocumentMessageHandler, overlay_context: &m
112
105
let x_pos = ( ( ( min_x - origin. x ) / spacing) . ceil ( ) + line_index as f64 ) * spacing + origin. x ;
113
106
let start = DVec2 :: new ( x_pos, min_y) ;
114
107
let end = DVec2 :: new ( x_pos, max_y) ;
115
- overlay_context. line (
116
- document_to_viewport. transform_point2 ( start) ,
117
- document_to_viewport. transform_point2 ( end) ,
118
- Some ( & ( "#" . to_string ( ) + & grid_color. rgba_hex ( ) ) ) ,
119
- ) ;
108
+ overlay_context. line ( document_to_viewport. transform_point2 ( start) , document_to_viewport. transform_point2 ( end) , Some ( & grid_color) ) ;
120
109
}
121
110
122
111
for ( tan, multiply) in [ ( tan_a, -1. ) , ( tan_b, 1. ) ] {
@@ -130,17 +119,13 @@ fn grid_overlay_isometric(document: &DocumentMessageHandler, overlay_context: &m
130
119
let y_pos = ( ( ( inverse_project ( & min_y) - origin. y ) / spacing) . ceil ( ) + line_index as f64 ) * spacing + origin. y ;
131
120
let start = DVec2 :: new ( min_x, project ( & DVec2 :: new ( min_x, y_pos) ) ) ;
132
121
let end = DVec2 :: new ( max_x, project ( & DVec2 :: new ( max_x, y_pos) ) ) ;
133
- overlay_context. line (
134
- document_to_viewport. transform_point2 ( start) ,
135
- document_to_viewport. transform_point2 ( end) ,
136
- Some ( & ( "#" . to_string ( ) + & grid_color. rgba_hex ( ) ) ) ,
137
- ) ;
122
+ overlay_context. line ( document_to_viewport. transform_point2 ( start) , document_to_viewport. transform_point2 ( end) , Some ( & grid_color) ) ;
138
123
}
139
124
}
140
125
}
141
126
142
127
fn grid_overlay_isometric_dot ( document : & DocumentMessageHandler , overlay_context : & mut OverlayContext , y_axis_spacing : f64 , angle_a : f64 , angle_b : f64 ) {
143
- let grid_color = document. snapping_state . grid . grid_color ;
128
+ let grid_color = "#" . to_string ( ) + & document. snapping_state . grid . grid_color . to_rgba_hex_srgb ( ) ;
144
129
let cmp = |a : & f64 , b : & f64 | a. partial_cmp ( b) . unwrap ( ) ;
145
130
let origin = document. snapping_state . grid . origin ;
146
131
let document_to_viewport = document. navigation_handler . calculate_offset_transform ( overlay_context. size / 2. , & document. document_ptz ) ;
@@ -180,7 +165,7 @@ fn grid_overlay_isometric_dot(document: &DocumentMessageHandler, overlay_context
180
165
overlay_context. dashed_line (
181
166
document_to_viewport. transform_point2 ( start) ,
182
167
document_to_viewport. transform_point2 ( end) ,
183
- Some ( & ( "#" . to_string ( ) + & grid_color. rgba_hex ( ) ) ) ,
168
+ Some ( & grid_color) ,
184
169
Some ( 1. ) ,
185
170
Some ( ( spacing_x / cos_a) * document_to_viewport. matrix2 . x_axis . length ( ) - 1. ) ,
186
171
None ,
@@ -228,10 +213,8 @@ pub fn overlay_options(grid: &GridSnapping) -> Vec<LayoutGroup> {
228
213
} ;
229
214
let update_color = |grid, update : fn ( & mut GridSnapping ) -> Option < & mut Color > | {
230
215
update_val :: < ColorInput , _ > ( grid, move |grid, color| {
231
- if let FillChoice :: Solid ( color) = color. value {
232
- if let Some ( update_color) = update ( grid) {
233
- * update_color = color;
234
- }
216
+ if let ( Some ( color) , Some ( update_color) ) = ( color. value . as_solid ( ) , update ( grid) ) {
217
+ * update_color = color. to_linear_srgb ( ) ;
235
218
}
236
219
} )
237
220
} ;
@@ -278,7 +261,7 @@ pub fn overlay_options(grid: &GridSnapping) -> Vec<LayoutGroup> {
278
261
Separator :: new ( SeparatorType :: Related ) . widget_holder ( ) ,
279
262
] ) ;
280
263
color_widgets. push (
281
- ColorInput :: new ( FillChoice :: Solid ( grid. grid_color ) )
264
+ ColorInput :: new ( FillChoice :: Solid ( grid. grid_color . to_gamma_srgb ( ) ) )
282
265
. tooltip ( "Grid display color" )
283
266
. allow_none ( false )
284
267
. on_update ( update_color ( grid, |grid| Some ( & mut grid. grid_color ) ) )
0 commit comments