https://github.com/ickshonpe/bevy_ui_exact_image
  
  
     
    https://github.com/ickshonpe/bevy_ui_exact_image
  
        Last synced: 6 months ago 
        JSON representation
    
- Host: GitHub
- URL: https://github.com/ickshonpe/bevy_ui_exact_image
- Owner: ickshonpe
- Created: 2023-01-31T18:37:48.000Z (over 2 years ago)
- Default Branch: master
- Last Pushed: 2023-02-17T19:21:59.000Z (over 2 years ago)
- Last Synced: 2024-11-16T18:29:28.666Z (12 months ago)
- Language: Rust
- Size: 38.1 KB
- Stars: 2
- Watchers: 1
- Forks: 1
- Open Issues: 1
- 
            Metadata Files:
            - Readme: README.md
 
Awesome Lists containing this project
README
          # bevy_ui_exact_image
[](https://crates.io/crates/bevy_ui_exact_image)
[](https://github.com/ickshonpe/bevy_ui_exact_image)
[](https://crates.io/crates/bevy_ui_exact_image)
* Force the Bevy UI to draw images in whatever sizes you want.
* Preserve the aspect ratio of images, regardless of the UI layout.
* Full support for texture atlas images.
* Image rotation.



#
## Usage
Add the dependency to your bevy project:
```
cargo add bevy_ui_exact_image
```
Then to draw a sized image within a Bevy UI node:
```rust
use bevy::prelude::*;
use bevy_ui_exact_image::prelude::*;
fn spawn_example(mut commands: Commands, assets: Res) {
    commands.spawn(Camera2dBundle::default());
    commands.spawn((ExactImageBundle {
        image: ExactImage {
            texture: assets.load("orientation.png"),
            // exact images have their own color, independent from the background color.
            color: Color::WHITE,
            // force the UI to display the texture at 300 x 200 size
            size: ExactSize::Exactly(Vec2::new(300., 200.)),
            // align the image to the bottom edge of the node, in the center.
            alignment: ImageAlignment::BottomCenter,
            // use Some(rads) to set rotation
            rotation: None,
        },
        style: Style {
            size: Size::new(Val::Px(400.0), Val::Px(400.0)),
            ..Default::default()
        },
        /// give the containing node a red color
        background_color: BackgroundColor(Color::RED),
        ..Default::default()
    },));
}
fn main() {
    App::new()
        .add_plugins(DefaultPlugins.set(ImagePlugin::default_nearest()))
        .add_plugin(ExactImagePlugin)
        .add_startup_system(spawn_example)
        .run();
}
```
Result:

#
## Examples
```
cargo --run --example minimal
cargo --run --example rotation
cargo --run --example size
cargo --run --example alignment
```
## Limitations
* No image flipping. Not possible (or at least not trivial) with a third party implementation atm in Bevy 0.9.
## Notes
* Probably quite a few bugs, I haven't done much testing.
* Name stolen from inodentry's related Bevy issue #7439
    [https://github.com/bevyengine/bevy/issues/7349](https://github.com/bevyengine/bevy/issues/7349)