forked from bevyengine/bevy
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Expose set_cursor_hittest() from winit (bevyengine#6664)
# Objective - Bevy should be usable to create 'overlay' type apps, where the input is not captured by Bevy, but passed down/into a target app, or to allow passive displays/widgets etc. ## Solution - the `winit::window::Window` already has a `set_cursor_hittest()` which basically does this for mouse input events, so I've exposed it (trying to copy the style laid out in the existing wrappings, and added a simple demo. --- ## Changelog - Added `hittest` to `WindowAttributes` - Added the `hittest`'s setters/getters - Modified the `WindowBuilder` - Modifed the `WindowDescriptor`'s `Default` impl. - Added an example `cargo run --example fallthrough`
- Loading branch information
1 parent
7772944
commit 65aa515
Showing
5 changed files
with
98 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,60 @@ | ||
//! This example illustrates how have a mouse's clicks/wheel/movement etc fall through the spawned transparent window to a window below. | ||
//! If you build this, and hit 'P' it should toggle on/off the mouse's passthrough. | ||
|
||
use bevy::prelude::*; | ||
|
||
fn main() { | ||
// Set the window's parameters, note we're setting always_on_top to be true. | ||
let window_desc = WindowDescriptor { | ||
transparent: true, | ||
decorations: true, | ||
always_on_top: true, | ||
..default() | ||
}; | ||
|
||
App::new() | ||
.insert_resource(ClearColor(Color::NONE)) // Use a transparent window, to make effects obvious. | ||
.add_plugins(DefaultPlugins.set(WindowPlugin { | ||
window: window_desc, | ||
..default() | ||
})) | ||
.add_startup_system(setup) | ||
.add_system(toggle_mouse_passthrough) // This allows us to hit 'P' to toggle on/off the mouse's passthrough | ||
.run(); | ||
} | ||
|
||
fn setup(mut commands: Commands, asset_server: Res<AssetServer>) { | ||
// UI camera | ||
commands.spawn(Camera2dBundle::default()); | ||
// Text with one section | ||
commands.spawn(( | ||
// Create a TextBundle that has a Text with a single section. | ||
TextBundle::from_section( | ||
// Accepts a `String` or any type that converts into a `String`, such as `&str` | ||
"Hit 'P' then scroll/click around!", | ||
TextStyle { | ||
font: asset_server.load("fonts/FiraSans-Bold.ttf"), | ||
font_size: 100.0, // Nice and big so you can see it! | ||
color: Color::WHITE, | ||
}, | ||
) | ||
// Set the style of the TextBundle itself. | ||
.with_style(Style { | ||
position_type: PositionType::Absolute, | ||
position: UiRect { | ||
bottom: Val::Px(5.), | ||
right: Val::Px(10.), | ||
..default() | ||
}, | ||
..default() | ||
}), | ||
)); | ||
} | ||
// A simple system to handle some keyboard input and toggle on/off the hittest. | ||
fn toggle_mouse_passthrough(keyboard_input: Res<Input<KeyCode>>, mut windows: ResMut<Windows>) { | ||
if keyboard_input.just_pressed(KeyCode::P) { | ||
let window = windows.primary_mut(); | ||
let hittest: bool = window.hittest(); | ||
window.set_cursor_hittest(!hittest); | ||
} | ||
} |