@@ -17,7 +17,7 @@ use crate::{
1717 bridge:: { send_ui, SerialCommand } ,
1818 renderer:: { Renderer , WindowDrawDetails } ,
1919 settings:: Settings ,
20- units:: { GridPos , GridScale , GridVec , PixelPos , PixelRect , PixelSize , PixelVec } ,
20+ units:: { GridPos , GridScale , GridSize , GridVec , PixelPos , PixelRect , PixelSize , PixelVec } ,
2121 window:: keyboard_manager:: KeyboardManager ,
2222 window:: WindowSettings ,
2323} ;
@@ -41,6 +41,7 @@ struct DragDetails {
4141struct EditorState < ' a > {
4242 grid_scale : & ' a GridScale ,
4343 window_regions : & ' a Vec < WindowDrawDetails > ,
44+ full_region : WindowDrawDetails ,
4445 window : & ' a Window ,
4546 keyboard_manager : & ' a KeyboardManager ,
4647}
@@ -97,14 +98,17 @@ impl MouseManager {
9798 editor_state : & ' b EditorState < ' b > ,
9899 ) -> Option < & ' b WindowDrawDetails > {
99100 let position = self . window_position ;
100-
101- // the rendered window regions are sorted by draw order, so the earlier windows in the
102- // list are drawn under the later ones
103- editor_state
104- . window_regions
105- . iter ( )
106- . filter ( |details| details. region . contains ( & position) )
107- . last ( )
101+ if self . use_composition {
102+ Some ( & editor_state. full_region )
103+ } else {
104+ // the rendered window regions are sorted by draw order, so the earlier windows in the
105+ // list are drawn under the later ones
106+ editor_state
107+ . window_regions
108+ . iter ( )
109+ . filter ( |details| details. region . contains ( & position) )
110+ . last ( )
111+ }
108112 }
109113
110114 fn get_relative_position (
@@ -137,10 +141,14 @@ impl MouseManager {
137141 // If dragging, the relevant window (the one which we send all commands to) is the one
138142 // which the mouse drag started on. Otherwise its the top rendered window
139143 let window_details = if let Some ( drag_details) = & self . drag_details {
140- editor_state
141- . window_regions
142- . iter ( )
143- . find ( |details| details. id == drag_details. draw_details . id )
144+ if self . use_composition {
145+ Some ( & editor_state. full_region )
146+ } else {
147+ editor_state
148+ . window_regions
149+ . iter ( )
150+ . find ( |details| details. id == drag_details. draw_details . id )
151+ }
144152 } else {
145153 self . get_window_details_under_mouse ( editor_state)
146154 } ;
@@ -385,9 +393,21 @@ impl MouseManager {
385393 renderer : & Renderer ,
386394 window : & Window ,
387395 ) {
396+ let full_region = WindowDrawDetails {
397+ id : 0 ,
398+ region : renderer
399+ . window_regions
400+ . first ( )
401+ . map_or ( PixelRect :: ZERO , |v| v. region ) ,
402+ grid_size : renderer
403+ . window_regions
404+ . first ( )
405+ . map_or ( GridSize :: ZERO , |v| v. grid_size ) ,
406+ } ;
388407 let editor_state = EditorState {
389408 grid_scale : & renderer. grid_renderer . grid_scale ,
390409 window_regions : & renderer. window_regions ,
410+ full_region,
391411 window,
392412 keyboard_manager,
393413 } ;
0 commit comments