diff options
| author | 2019-07-22 21:01:59 +0200 | |
|---|---|---|
| committer | 2019-07-22 21:01:59 +0200 | |
| commit | eb45c51a7b8b9a595e318048712362c8d65d77b3 (patch) | |
| tree | a32b6449e907f23e031405646a8df1cbd6c020b6 /examples/ggez/renderer | |
| parent | ccb87b12da9f4c8e65571d31da2952ff1b5b08d9 (diff) | |
| download | iced-eb45c51a7b8b9a595e318048712362c8d65d77b3.tar.gz iced-eb45c51a7b8b9a595e318048712362c8d65d77b3.tar.bz2 iced-eb45c51a7b8b9a595e318048712362c8d65d77b3.zip | |
Implement `checkbox::Renderer` in `ggez` example
Diffstat (limited to '')
| -rw-r--r-- | examples/ggez/renderer.rs | 2 | ||||
| -rw-r--r-- | examples/ggez/renderer/checkbox.rs | 63 | 
2 files changed, 65 insertions, 0 deletions
| diff --git a/examples/ggez/renderer.rs b/examples/ggez/renderer.rs index d21c5ec3..74fc581d 100644 --- a/examples/ggez/renderer.rs +++ b/examples/ggez/renderer.rs @@ -1,4 +1,5 @@  mod button; +mod checkbox;  mod text;  use ggez::graphics::{self, spritebatch::SpriteBatch, Color, Image}; @@ -18,6 +19,7 @@ impl Renderer<'_> {              spritesheet,          }      } +      pub fn flush(&mut self) {          graphics::draw(              self.context, diff --git a/examples/ggez/renderer/checkbox.rs b/examples/ggez/renderer/checkbox.rs new file mode 100644 index 00000000..eac90ac2 --- /dev/null +++ b/examples/ggez/renderer/checkbox.rs @@ -0,0 +1,63 @@ +use super::Renderer; +use ggez::graphics::{DrawParam, Rect}; +use iced::{checkbox, MouseCursor}; + +const SPRITE: Rect = Rect { +    x: 98.0, +    y: 0.0, +    w: 28.0, +    h: 28.0, +}; + +impl checkbox::Renderer for Renderer<'_> { +    fn draw( +        &mut self, +        cursor_position: iced::Point, +        bounds: iced::Rectangle<f32>, +        text_bounds: iced::Rectangle<f32>, +        is_checked: bool, +    ) -> MouseCursor { +        let mouse_over = bounds.contains(cursor_position) +            || text_bounds.contains(cursor_position); + +        let width = self.spritesheet.width() as f32; +        let height = self.spritesheet.height() as f32; + +        self.sprites.add(DrawParam { +            src: Rect { +                x: (SPRITE.x + (if mouse_over { SPRITE.w } else { 0.0 })) +                    / width, +                y: SPRITE.y / height, +                w: SPRITE.w / width, +                h: SPRITE.h / height, +            }, +            dest: ggez::mint::Point2 { +                x: bounds.x, +                y: bounds.y, +            }, +            ..DrawParam::default() +        }); + +        if is_checked { +            self.sprites.add(DrawParam { +                src: Rect { +                    x: (SPRITE.x + SPRITE.w * 2.0) / width, +                    y: SPRITE.y / height, +                    w: SPRITE.w / width, +                    h: SPRITE.h / height, +                }, +                dest: ggez::mint::Point2 { +                    x: bounds.x, +                    y: bounds.y, +                }, +                ..DrawParam::default() +            }); +        } + +        if mouse_over { +            MouseCursor::Pointer +        } else { +            MouseCursor::OutOfBounds +        } +    } +} | 
