@@ -122,152 +122,151 @@ impl LayerToolWindow {
122122 } ) ;
123123 } ) ;
124124
125- CentralPanel :: default ( ) . show_inside ( ui, |ui| {
126- let redraw_layer_views = self . view_cache_id != editor. buffer_view . lock ( ) . id || editor. undo_stack_len ( ) != self . stack_len ;
127- if redraw_layer_views {
128- self . view_cache_id = editor. buffer_view . lock ( ) . id ;
129- self . stack_len = editor. undo_stack_len ( ) ;
130- }
125+ let redraw_layer_views = self . view_cache_id != editor. buffer_view . lock ( ) . id || editor. undo_stack_len ( ) != self . stack_len ;
126+ if redraw_layer_views {
127+ self . view_cache_id = editor. buffer_view . lock ( ) . id ;
128+ self . stack_len = editor. undo_stack_len ( ) ;
129+ }
131130
132- egui:: ScrollArea :: vertical ( ) . id_salt ( "layer_view_scroll_area" ) . show ( ui, |ui| {
133- for i in ( 0 ..max) . rev ( ) {
134- ui. horizontal ( |ui| {
135- ui. add_space ( 4.0 ) ;
136- let dims = editor. buffer_view . lock ( ) . get_buffer ( ) . get_font_dimensions ( ) ;
137- let size = dims. height as f32 * 25.0 ;
138- let scale = row_height / size;
139-
140- ui. allocate_ui ( Vec2 :: new ( scale * dims. width as f32 * 80.0 , row_height) , |ui| {
141- let opt = icy_engine_gui:: TerminalOptions {
142- filter : glow:: LINEAR as i32 ,
143- stick_to_bottom : false ,
144- scale : Some ( Vec2 :: new ( scale, scale) ) ,
145- use_terminal_height : false ,
146- hide_scrollbars : true ,
147- clip_rect : Some ( ui. clip_rect ( ) ) ,
148- ..Default :: default ( )
149- } ;
150- let view = self . get_buffer_view ( i) ;
151- if redraw_layer_views {
152- view. lock ( ) . get_buffer_mut ( ) . layers . clear ( ) ;
153- let width = editor. buffer_view . lock ( ) . get_width ( ) ;
154- view. lock ( ) . get_buffer_mut ( ) . set_width ( width) ;
155- let lock = & editor. buffer_view . lock ( ) ;
156- if let Some ( layer) = lock. get_buffer ( ) . layers . get ( i) {
157- let mut l = layer. clone ( ) ;
158- l. set_is_visible ( true ) ;
159- view. lock ( ) . get_buffer_mut ( ) . set_font_table ( lock. get_buffer ( ) . get_font_table ( ) ) ;
160- view. lock ( ) . get_buffer_mut ( ) . palette = lock. get_buffer ( ) . palette . clone ( ) ;
161- view. lock ( ) . get_buffer_mut ( ) . layers . push ( l) ;
162- view. lock ( ) . get_edit_state_mut ( ) . set_is_buffer_dirty ( ) ;
163- }
131+ egui:: ScrollArea :: vertical ( ) . id_salt ( "layer_view_scroll_area" ) . show ( ui, |ui| {
132+ for i in ( 0 ..max) . rev ( ) {
133+ ui. horizontal ( |ui| {
134+ ui. add_space ( 4.0 ) ;
135+ let dims = editor. buffer_view . lock ( ) . get_buffer ( ) . get_font_dimensions ( ) ;
136+ let size = dims. height as f32 * 25.0 ;
137+ let scale = row_height / size;
138+
139+ ui. allocate_ui ( Vec2 :: new ( scale * dims. width as f32 * 80.0 , row_height) , |ui| {
140+ let opt = icy_engine_gui:: TerminalOptions {
141+ filter : glow:: LINEAR as i32 ,
142+ stick_to_bottom : false ,
143+ scale : Some ( Vec2 :: new ( scale, scale) ) ,
144+ use_terminal_height : false ,
145+ hide_scrollbars : true ,
146+ clip_rect : Some ( ui. clip_rect ( ) ) ,
147+ ..Default :: default ( )
148+ } ;
149+ let view = self . get_buffer_view ( i) ;
150+ if redraw_layer_views {
151+ view. lock ( ) . get_buffer_mut ( ) . layers . clear ( ) ;
152+ let width = editor. buffer_view . lock ( ) . get_width ( ) ;
153+ view. lock ( ) . get_buffer_mut ( ) . set_width ( width) ;
154+ let lock = & editor. buffer_view . lock ( ) ;
155+ if let Some ( layer) = lock. get_buffer ( ) . layers . get ( i) {
156+ let mut l = layer. clone ( ) ;
157+ l. set_is_visible ( true ) ;
158+ view. lock ( ) . get_buffer_mut ( ) . set_font_table ( lock. get_buffer ( ) . get_font_table ( ) ) ;
159+ view. lock ( ) . get_buffer_mut ( ) . palette = lock. get_buffer ( ) . palette . clone ( ) ;
160+ view. lock ( ) . get_buffer_mut ( ) . layers . push ( l) ;
161+ view. lock ( ) . get_edit_state_mut ( ) . set_is_buffer_dirty ( ) ;
164162 }
163+ }
165164
166- let ( _, _) = icy_engine_gui:: show_terminal_area ( ui, view, opt) ;
167- } ) ;
165+ let ( _, _) = icy_engine_gui:: show_terminal_area ( ui, view, opt) ;
166+ } ) ;
168167
169- let ( is_visible, title, color) = {
170- let lock = editor. buffer_view . lock ( ) ;
171- let layer = & lock. get_buffer ( ) . layers [ i] ;
172- ( layer. get_is_visible ( ) , layer. get_title ( ) . to_string ( ) , layer. properties . color . clone ( ) )
173- } ;
174- let width = ui. available_width ( ) ;
168+ let ( is_visible, title, color) = {
169+ let lock = editor. buffer_view . lock ( ) ;
170+ let layer = & lock. get_buffer ( ) . layers [ i] ;
171+ ( layer. get_is_visible ( ) , layer. get_title ( ) . to_string ( ) , layer. properties . color . clone ( ) )
172+ } ;
173+ let width = ui. available_width ( ) ;
175174
176- let ( id, back_rect) = ui. allocate_space ( Vec2 :: new ( width, row_height) ) ;
177- let mut response = ui. interact ( back_rect, id, Sense :: click ( ) ) ;
175+ let ( id, back_rect) = ui. allocate_space ( Vec2 :: new ( width, row_height) ) ;
176+ let mut response = ui. interact ( back_rect, id, Sense :: click ( ) ) ;
178177
179- let back_painter = ui. painter_at ( back_rect) ;
178+ let back_painter = ui. painter_at ( back_rect) ;
180179
181- if response. hovered ( ) {
182- back_painter. rect_filled ( back_rect, CornerRadius :: ZERO , ui. style ( ) . visuals . widgets . active . bg_fill ) ;
183- } else if i == cur_layer {
184- back_painter. rect_filled ( back_rect, CornerRadius :: ZERO , ui. style ( ) . visuals . extreme_bg_color ) ;
185- }
180+ if response. hovered ( ) {
181+ back_painter. rect_filled ( back_rect, CornerRadius :: ZERO , ui. style ( ) . visuals . widgets . active . bg_fill ) ;
182+ } else if i == cur_layer {
183+ back_painter. rect_filled ( back_rect, CornerRadius :: ZERO , ui. style ( ) . visuals . extreme_bg_color ) ;
184+ }
186185
187- let stroke_rect = Rect :: from_min_size ( back_rect. min + Vec2 :: new ( 0.0 , ( row_height - 22.0 ) / 2.0 ) , Vec2 :: new ( 22.0 , 22.0 ) ) ;
188- let visible_icon_response = ui. interact ( stroke_rect, id. with ( "visible" ) , Sense :: click ( ) ) ;
186+ let stroke_rect = Rect :: from_min_size ( back_rect. min + Vec2 :: new ( 0.0 , ( row_height - 22.0 ) / 2.0 ) , Vec2 :: new ( 22.0 , 22.0 ) ) ;
187+ let visible_icon_response = ui. interact ( stroke_rect, id. with ( "visible" ) , Sense :: click ( ) ) ;
189188
190- let painter = ui. painter_at ( stroke_rect) ;
189+ let painter = ui. painter_at ( stroke_rect) ;
191190
192- if let Some ( color) = color {
193- let ( r, g, b) = color. into ( ) ;
194- painter. rect_filled ( stroke_rect, CornerRadius :: ZERO , Color32 :: from_rgb ( r, g, b) ) ;
195- }
191+ if let Some ( color) = color {
192+ let ( r, g, b) = color. into ( ) ;
193+ painter. rect_filled ( stroke_rect, CornerRadius :: ZERO , Color32 :: from_rgb ( r, g, b) ) ;
194+ }
196195
197- let image: Image < ' static > = if is_visible { VISIBLE_SVG . clone ( ) } else { INVISIBLE_SVG . clone ( ) } ;
196+ let image: Image < ' static > = if is_visible { VISIBLE_SVG . clone ( ) } else { INVISIBLE_SVG . clone ( ) } ;
198197
199- let tint = if i == cur_layer {
200- ui. visuals ( ) . widgets . active . fg_stroke . color
201- } else {
202- ui. visuals ( ) . widgets . inactive . fg_stroke . color
203- } ;
204- let image = image. tint ( tint) ;
205- image. paint_at ( ui, stroke_rect) ;
198+ let tint = if i == cur_layer {
199+ ui. visuals ( ) . widgets . active . fg_stroke . color
200+ } else {
201+ ui. visuals ( ) . widgets . inactive . fg_stroke . color
202+ } ;
203+ let image = image. tint ( tint) ;
204+ image. paint_at ( ui, stroke_rect) ;
206205
207- let color = if i == cur_layer {
208- ui. style ( ) . visuals . strong_text_color ( )
209- } else {
210- ui. style ( ) . visuals . text_color ( )
211- } ;
212- let font_id = TextStyle :: Button . resolve ( ui. style ( ) ) ;
206+ let color = if i == cur_layer {
207+ ui. style ( ) . visuals . strong_text_color ( )
208+ } else {
209+ ui. style ( ) . visuals . text_color ( )
210+ } ;
211+ let font_id = TextStyle :: Button . resolve ( ui. style ( ) ) ;
213212
214- back_painter. text ( stroke_rect. right_center ( ) + Vec2 :: new ( 4. , 0. ) , Align2 :: LEFT_CENTER , title, font_id, color) ;
213+ back_painter. text ( stroke_rect. right_center ( ) + Vec2 :: new ( 4. , 0. ) , Align2 :: LEFT_CENTER , title, font_id, color) ;
215214
216- if visible_icon_response. clicked ( ) {
217- result = Some ( Message :: ToggleLayerVisibility ( i) ) ;
218- }
215+ if visible_icon_response. clicked ( ) {
216+ result = Some ( Message :: ToggleLayerVisibility ( i) ) ;
217+ }
219218
220- if paste_mode. is_none ( ) {
221- let response_opt = response. context_menu ( |ui| {
222- ui. set_width ( 250. ) ;
223- if ui. button ( fl ! ( crate :: LANGUAGE_LOADER , "layer_tool_menu_layer_properties" ) ) . clicked ( ) {
224- result = Some ( Message :: EditLayer ( i) ) ;
225- ui. close_kind ( egui:: UiKind :: Menu ) ;
226- }
227- if ui. button ( fl ! ( crate :: LANGUAGE_LOADER , "layer_tool_menu_resize_layer" ) ) . clicked ( ) {
228- result = Some ( Message :: ResizeLayer ( i) ) ;
229- ui. close_kind ( egui:: UiKind :: Menu ) ;
230- }
231- ui. separator ( ) ;
232- if ui. button ( fl ! ( crate :: LANGUAGE_LOADER , "layer_tool_menu_new_layer" ) ) . clicked ( ) {
233- result = Some ( Message :: AddNewLayer ( i) ) ;
234- ui. close_kind ( egui:: UiKind :: Menu ) ;
235- }
236- if ui. button ( fl ! ( crate :: LANGUAGE_LOADER , "layer_tool_menu_duplicate_layer" ) ) . clicked ( ) {
237- result = Some ( Message :: DuplicateLayer ( i) ) ;
238- ui. close_kind ( egui:: UiKind :: Menu ) ;
239- }
240- if ui. button ( fl ! ( crate :: LANGUAGE_LOADER , "layer_tool_menu_merge_layer" ) ) . clicked ( ) {
241- result = Some ( Message :: MergeLayerDown ( i) ) ;
242- ui. close_kind ( egui:: UiKind :: Menu ) ;
243- }
244- if ui. button ( fl ! ( crate :: LANGUAGE_LOADER , "layer_tool_menu_delete_layer" ) ) . clicked ( ) {
245- result = Some ( Message :: RemoveLayer ( i) ) ;
246- ui. close_kind ( egui:: UiKind :: Menu ) ;
247- }
248- ui. separator ( ) ;
249-
250- if ui. button ( fl ! ( crate :: LANGUAGE_LOADER , "layer_tool_menu_clear_layer" ) ) . clicked ( ) {
251- result = Some ( Message :: ClearLayer ( i) ) ;
252- ui. close_kind ( egui:: UiKind :: Menu ) ;
253- }
254- } ) ;
255- if let Some ( response_opt) = response_opt {
256- response = response_opt. response ;
219+ if paste_mode. is_none ( ) {
220+ let response_opt = response. context_menu ( |ui| {
221+ ui. set_width ( 250. ) ;
222+ if ui. button ( fl ! ( crate :: LANGUAGE_LOADER , "layer_tool_menu_layer_properties" ) ) . clicked ( ) {
223+ result = Some ( Message :: EditLayer ( i) ) ;
224+ ui. close_kind ( egui:: UiKind :: Menu ) ;
257225 }
258- }
226+ if ui. button ( fl ! ( crate :: LANGUAGE_LOADER , "layer_tool_menu_resize_layer" ) ) . clicked ( ) {
227+ result = Some ( Message :: ResizeLayer ( i) ) ;
228+ ui. close_kind ( egui:: UiKind :: Menu ) ;
229+ }
230+ ui. separator ( ) ;
231+ if ui. button ( fl ! ( crate :: LANGUAGE_LOADER , "layer_tool_menu_new_layer" ) ) . clicked ( ) {
232+ result = Some ( Message :: AddNewLayer ( i) ) ;
233+ ui. close_kind ( egui:: UiKind :: Menu ) ;
234+ }
235+ if ui. button ( fl ! ( crate :: LANGUAGE_LOADER , "layer_tool_menu_duplicate_layer" ) ) . clicked ( ) {
236+ result = Some ( Message :: DuplicateLayer ( i) ) ;
237+ ui. close_kind ( egui:: UiKind :: Menu ) ;
238+ }
239+ if ui. button ( fl ! ( crate :: LANGUAGE_LOADER , "layer_tool_menu_merge_layer" ) ) . clicked ( ) {
240+ result = Some ( Message :: MergeLayerDown ( i) ) ;
241+ ui. close_kind ( egui:: UiKind :: Menu ) ;
242+ }
243+ if ui. button ( fl ! ( crate :: LANGUAGE_LOADER , "layer_tool_menu_delete_layer" ) ) . clicked ( ) {
244+ result = Some ( Message :: RemoveLayer ( i) ) ;
245+ ui. close_kind ( egui:: UiKind :: Menu ) ;
246+ }
247+ ui. separator ( ) ;
259248
260- if paste_mode. is_none ( ) && response. clicked ( ) {
261- result = Some ( Message :: SelectLayer ( i) ) ;
249+ if ui. button ( fl ! ( crate :: LANGUAGE_LOADER , "layer_tool_menu_clear_layer" ) ) . clicked ( ) {
250+ result = Some ( Message :: ClearLayer ( i) ) ;
251+ ui. close_kind ( egui:: UiKind :: Menu ) ;
252+ }
253+ } ) ;
254+ if let Some ( response_opt) = response_opt {
255+ response = response_opt. response ;
262256 }
257+ }
263258
264- if paste_mode. is_none ( ) && response. double_clicked ( ) {
265- result = Some ( Message :: EditLayer ( i) ) ;
266- }
267- } ) ;
268- }
269- } ) ;
259+ if paste_mode. is_none ( ) && response. clicked ( ) {
260+ result = Some ( Message :: SelectLayer ( i) ) ;
261+ }
262+
263+ if paste_mode. is_none ( ) && response. double_clicked ( ) {
264+ result = Some ( Message :: EditLayer ( i) ) ;
265+ }
266+ } ) ;
267+ }
270268 } ) ;
269+
271270 result
272271 }
273272}
0 commit comments