Move the cursor's origin back to the bottom-left (#6533)
This reverts commit 8429b6d6ca as discussed in #6522.
I tested that the game_menu example works as it should.
Co-authored-by: devil-ira <justthecooldude@gmail.com>
This commit is contained in:
parent
9b56b549ad
commit
99c815fd00
@ -127,6 +127,8 @@ pub fn ui_focus_system(
|
|||||||
.find_map(|window| window.cursor_position())
|
.find_map(|window| window.cursor_position())
|
||||||
.or_else(|| touches_input.first_pressed_position());
|
.or_else(|| touches_input.first_pressed_position());
|
||||||
|
|
||||||
|
let window_height = windows.primary().height();
|
||||||
|
|
||||||
// prepare an iterator that contains all the nodes that have the cursor in their rect,
|
// prepare an iterator that contains all the nodes that have the cursor in their rect,
|
||||||
// from the top node to the bottom one. this will also reset the interaction to `None`
|
// from the top node to the bottom one. this will also reset the interaction to `None`
|
||||||
// for all nodes encountered that are no longer hovered.
|
// for all nodes encountered that are no longer hovered.
|
||||||
@ -165,7 +167,7 @@ pub fn ui_focus_system(
|
|||||||
// clicking
|
// clicking
|
||||||
let contains_cursor = if let Some(cursor_position) = cursor_position {
|
let contains_cursor = if let Some(cursor_position) = cursor_position {
|
||||||
(min.x..max.x).contains(&cursor_position.x)
|
(min.x..max.x).contains(&cursor_position.x)
|
||||||
&& (min.y..max.y).contains(&cursor_position.y)
|
&& (min.y..max.y).contains(&(window_height - cursor_position.y))
|
||||||
} else {
|
} else {
|
||||||
false
|
false
|
||||||
};
|
};
|
||||||
|
|||||||
@ -146,9 +146,12 @@ fn change_window(
|
|||||||
}
|
}
|
||||||
bevy_window::WindowCommand::SetCursorPosition { position } => {
|
bevy_window::WindowCommand::SetCursorPosition { position } => {
|
||||||
let window = winit_windows.get_window(id).unwrap();
|
let window = winit_windows.get_window(id).unwrap();
|
||||||
|
let inner_size = window.inner_size().to_logical::<f32>(window.scale_factor());
|
||||||
window
|
window
|
||||||
.set_cursor_position(LogicalPosition::new(position.x, position.y))
|
.set_cursor_position(LogicalPosition::new(
|
||||||
|
position.x,
|
||||||
|
inner_size.height - position.y,
|
||||||
|
))
|
||||||
.unwrap_or_else(|e| error!("Unable to set cursor position: {}", e));
|
.unwrap_or_else(|e| error!("Unable to set cursor position: {}", e));
|
||||||
}
|
}
|
||||||
bevy_window::WindowCommand::SetMaximized { maximized } => {
|
bevy_window::WindowCommand::SetMaximized { maximized } => {
|
||||||
@ -417,7 +420,13 @@ pub fn winit_runner_with(mut app: App) {
|
|||||||
world.send_event(converters::convert_keyboard_input(input));
|
world.send_event(converters::convert_keyboard_input(input));
|
||||||
}
|
}
|
||||||
WindowEvent::CursorMoved { position, .. } => {
|
WindowEvent::CursorMoved { position, .. } => {
|
||||||
let physical_position = DVec2::new(position.x, position.y);
|
let winit_window = winit_windows.get_window(window_id).unwrap();
|
||||||
|
let inner_size = winit_window.inner_size();
|
||||||
|
|
||||||
|
// move origin to bottom left
|
||||||
|
let y_position = inner_size.height as f64 - position.y;
|
||||||
|
|
||||||
|
let physical_position = DVec2::new(position.x, y_position);
|
||||||
window
|
window
|
||||||
.update_cursor_physical_position_from_backend(Some(physical_position));
|
.update_cursor_physical_position_from_backend(Some(physical_position));
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user