(&mut self)
| 529 | egui::vec2(self.layout.tool_window_width, rect.height()), |
| 530 | ); |
| 531 | let spine_rect = egui::Rect::from_min_size( |
| 532 | egui::pos2(tool_rect.right(), rect.top()), |
| 533 | egui::vec2(spine_width, rect.height()), |
| 534 | ); |
| 535 | let editor_rect = egui::Rect::from_min_max( |
| 536 | egui::pos2(spine_rect.right(), rect.top()), |
| 537 | rect.right_bottom(), |
| 538 | ); |
| 539 | |
| 540 | ui.scope_builder( |
| 541 | egui::UiBuilder::new() |
| 542 | .id_salt("tool_window") |
| 543 | .max_rect(tool_rect), |
| 544 | |ui| { |
| 545 | self.tool_window(ui); |
| 546 | }, |
| 547 | ); |
| 548 | if show_spine { |
| 549 | ui.scope_builder( |
| 550 | egui::UiBuilder::new() |
| 551 | .id_salt("stack_spine") |
| 552 | .max_rect(spine_rect), |
| 553 | |ui| { |
| 554 | self.spine_panel(ui, build_glow_t); |
| 555 | }, |
| 556 | ); |
| 557 | } |
| 558 | ui.scope_builder( |
| 559 | egui::UiBuilder::new() |
| 560 | .id_salt("editor") |
| 561 | .max_rect(editor_rect), |
| 562 | |ui| { |
| 563 | self.editor(ui); |
| 564 | }, |
| 565 | ); |
| 566 | |
| 567 | // Dividers span the working area (under the top bar to the status bar); the |
| 568 | // zero-margin central frame lets them meet egui's panel separators cleanly. |
| 569 | let sep_top = rect.top(); |
| 570 | self.resize_tool_window(ui, tool_rect, max_width, sep_top); |
| 571 | if show_spine { |
| 572 | draw_separator(ui, spine_rect.right(), sep_top, spine_rect.bottom(), false); |
| 573 | } |
| 574 | } |
| 575 | |
| 576 | fn resize_tool_window( |
| 577 | &mut self, |
| 578 | ui: &egui::Ui, |
| 579 | rect: egui::Rect, |
| 580 | max_width: f32, |
| 581 | sep_top: f32, |
| 582 | ) { |
| 583 | let edge_x = rect.right(); |
| 584 | let hit_rect = egui::Rect::from_min_max( |
| 585 | egui::pos2(edge_x - metrics::RESIZE_HIT_RADIUS, rect.top()), |
| 586 | egui::pos2(edge_x + metrics::RESIZE_HIT_RADIUS, rect.bottom()), |
| 587 | ); |
| 588 | let response = ui.interact( |
no test coverage detected