From ceaefad030b628b2e1366bbbd095602a70ec2c27 Mon Sep 17 00:00:00 2001 From: gered Date: Mon, 27 Mar 2023 18:43:41 -0400 Subject: [PATCH] lets try using rustfmt again ... i unfortunately feel like i should really force myself to use rustfmt even though i very much dislike it. most rust developers seem to use it so i should probably get used to it ... however, case-in-point for me is the amount of times i used either #[rustfmt::skip] or adding a blank `//` comment to force separate lines, etc, really proves how terrible basing almost all of your formatting rules on arbitrary length thresholds really is. code formatting is far more subjective than that. --- examples/audio_playback/src/main.rs | 38 ++-- examples/balls/src/main.rs | 9 +- examples/balls_v2/src/entities.rs | 10 +- examples/balls_v2/src/main.rs | 2 +- examples/balls_v2/src/states.rs | 19 +- examples/slimed/src/entities/events.rs | 4 +- examples/slimed/src/entities/mod.rs | 128 +++++++++----- examples/slimed/src/entities/systems.rs | 38 ++-- examples/slimed/src/main.rs | 9 +- examples/slimed/src/states.rs | 57 ++++-- examples/slimed/src/support.rs | 27 ++- examples/slimed/src/tilemap.rs | 10 +- examples/template_complicated/src/main.rs | 16 +- examples/template_minimal/src/main.rs | 2 +- ggdt/benches/bitmap.rs | 14 +- ggdt/benches/blit.rs | 45 +---- ggdt/benches/loading.rs | 2 +- ggdt/src/audio/buffer/mod.rs | 5 +- ggdt/src/audio/buffer/wav.rs | 45 ++--- ggdt/src/audio/device.rs | 39 ++--- ggdt/src/audio/mod.rs | 49 ++---- ggdt/src/audio/prelude.rs | 7 +- ggdt/src/audio/queue.rs | 64 +++---- ggdt/src/base/mod.rs | 17 +- ggdt/src/entities/mod.rs | 31 +--- ggdt/src/events/mod.rs | 25 +-- ggdt/src/graphics/bitmap/blit.rs | 67 ++++++-- ggdt/src/graphics/bitmap/general.rs | 10 +- ggdt/src/graphics/bitmap/gif.rs | 64 +++---- ggdt/src/graphics/bitmap/iff.rs | 78 +++------ ggdt/src/graphics/bitmap/indexed/blit.rs | 126 +++++++++++--- ggdt/src/graphics/bitmap/indexed/mod.rs | 18 +- .../src/graphics/bitmap/indexed/primitives.rs | 55 +++--- ggdt/src/graphics/bitmap/mod.rs | 50 +----- ggdt/src/graphics/bitmap/pcx.rs | 43 ++--- ggdt/src/graphics/bitmap/png.rs | 107 ++++++------ ggdt/src/graphics/bitmap/primitives.rs | 13 +- ggdt/src/graphics/bitmap/rgb/blit.rs | 133 ++++++++++---- ggdt/src/graphics/bitmap/rgb/mod.rs | 12 +- ggdt/src/graphics/bitmap/rgb/primitives.rs | 59 +++---- ggdt/src/graphics/bitmapatlas.rs | 30 +--- ggdt/src/graphics/blendmap.rs | 81 ++++----- ggdt/src/graphics/color.rs | 8 +- ggdt/src/graphics/font.rs | 15 +- ggdt/src/graphics/mod.rs | 2 +- ggdt/src/graphics/palette.rs | 78 ++------- ggdt/src/graphics/prelude.rs | 18 +- ggdt/src/lib.rs | 2 +- ggdt/src/math/circle.rs | 13 +- ggdt/src/math/matrix3x3.rs | 20 +-- ggdt/src/math/mod.rs | 16 +- ggdt/src/math/prelude.rs | 4 +- ggdt/src/math/rect.rs | 23 +-- ggdt/src/math/vector2.rs | 18 +- ggdt/src/prelude.rs | 8 +- ggdt/src/states/mod.rs | 162 +++++++++--------- ggdt/src/system/event.rs | 58 +++---- .../system/input_devices/keyboard/codes.rs | 2 +- ggdt/src/system/input_devices/keyboard/mod.rs | 18 +- .../input_devices/keyboard/scancodes.rs | 2 +- .../src/system/input_devices/mouse/buttons.rs | 18 +- ggdt/src/system/input_devices/mouse/cursor.rs | 42 ++--- ggdt/src/system/input_devices/mouse/mod.rs | 24 +-- ggdt/src/system/mod.rs | 33 ++-- ggdt/src/system/prelude.rs | 22 +-- ggdt/src/system/res/dos_like.rs | 64 +++---- ggdt/src/system/res/mod.rs | 2 +- ggdt/src/system/res/standard.rs | 13 +- ggdt/src/utils/io.rs | 2 +- ggdt/src/utils/lzwgif.rs | 84 +++++---- ggdt/src/utils/mod.rs | 2 +- ggdt/src/utils/packbits.rs | 37 ++-- ggdt/src/utils/prelude.rs | 4 +- ggdt/tests/graphics_indexed.rs | 20 ++- ggdt/tests/graphics_rgba.rs | 18 +- 75 files changed, 1236 insertions(+), 1274 deletions(-) diff --git a/examples/audio_playback/src/main.rs b/examples/audio_playback/src/main.rs index 5cc0e30..b4c04a2 100644 --- a/examples/audio_playback/src/main.rs +++ b/examples/audio_playback/src/main.rs @@ -30,15 +30,13 @@ pub struct SineWaveGenerator { impl SineWaveGenerator { pub fn new() -> Self { - SineWaveGenerator { - t: 0 - } + SineWaveGenerator { t: 0 } } } impl AudioGenerator for SineWaveGenerator { fn gen_sample(&mut self, _position: usize) -> Option { - const MAX_TIME: usize = AUDIO_FREQUENCY_22KHZ as usize * 3; // 3 seconds + const MAX_TIME: usize = AUDIO_FREQUENCY_22KHZ as usize * 3; // 3 seconds if self.t < MAX_TIME { let sample = (self.t as f64 * 0.25).sin() * 80.0; self.t += 1; @@ -51,7 +49,7 @@ impl AudioGenerator for SineWaveGenerator { fn main() -> Result<()> { let config = DosLikeConfig::new(); - let mut system = SystemBuilder::new() + let mut system = SystemBuilder::new() // .window_title("Audio Playback") .vsync(true) .build(config)?; @@ -169,21 +167,20 @@ fn main() -> Result<()> { system.res.video.print_string( &format!("Volume: {:2.2}", volume), - 16, 16, FontRenderOpts::Color(10), &system.res.font + 16, + 16, + FontRenderOpts::Color(10), + &system.res.font, ); system.res.video.print_string( - if using_queue_commands { - "Queueing Commands" - } else { - "Direct Commands" - }, - 160, 16, FontRenderOpts::Color(9), &system.res.font, + if using_queue_commands { "Queueing Commands" } else { "Direct Commands" }, + 160, + 16, + FontRenderOpts::Color(9), + &system.res.font, ); - system.res.video.print_string( - "Audio Channels", - 16, 32, FontRenderOpts::Color(14), &system.res.font - ); + system.res.video.print_string("Audio Channels", 16, 32, FontRenderOpts::Color(14), &system.res.font); let mut y = 48; for index in 0..NUM_CHANNELS { @@ -193,9 +190,14 @@ fn main() -> Result<()> { "channel {} - {} {}", index, if status.playing { "playing" } else { "not playing" }, - if status.playing { String::from(format!("{} / {}", status.position, status.size)) } else { String::new() } + if status.playing { + String::from(format!("{} / {}", status.position, status.size)) + } else { + String::new() + } ), - 16, y, + 16, + y, FontRenderOpts::Color(15), &system.res.font, ); diff --git a/examples/balls/src/main.rs b/examples/balls/src/main.rs index 66dbc20..8f8acc2 100644 --- a/examples/balls/src/main.rs +++ b/examples/balls/src/main.rs @@ -19,7 +19,7 @@ struct Ball { fn main() -> Result<()> { let config = DosLikeConfig::new(); - let mut system = SystemBuilder::new() + let mut system = SystemBuilder::new() // .window_title("Flying Balls!") .vsync(true) .build(config)?; @@ -99,12 +99,7 @@ fn main() -> Result<()> { system.res.video.print_string("hello, world!", 10, 10, FontRenderOpts::Color(15), &font); for i in 0..NUM_BALLS { - system.res.video.blit( - IndexedBlitMethod::Transparent(0), - &sprites[balls[i].sprite], - balls[i].x, - balls[i].y, - ); + system.res.video.blit(IndexedBlitMethod::Transparent(0), &sprites[balls[i].sprite], balls[i].x, balls[i].y); } system.display()?; diff --git a/examples/balls_v2/src/entities.rs b/examples/balls_v2/src/entities.rs index d16d815..aa8bf0e 100644 --- a/examples/balls_v2/src/entities.rs +++ b/examples/balls_v2/src/entities.rs @@ -38,7 +38,15 @@ pub enum Event { LeaveTrail(Vector2), } -fn new_basic_particle_entity(entities: &mut Entities, x: f32, y: f32, color: u8, lifetime: f32, angle: f32, speed: i32) { +fn new_basic_particle_entity( + entities: &mut Entities, + x: f32, + y: f32, + color: u8, + lifetime: f32, + angle: f32, + speed: i32, +) { let id = entities.new_entity(); entities.add_component(id, Particle); entities.add_component(id, Color(color)); diff --git a/examples/balls_v2/src/main.rs b/examples/balls_v2/src/main.rs index 308ae62..d6e6d07 100644 --- a/examples/balls_v2/src/main.rs +++ b/examples/balls_v2/src/main.rs @@ -12,7 +12,7 @@ mod states; fn main() -> Result<()> { let config = DosLikeConfig::new(); - let system = SystemBuilder::new() + let system = SystemBuilder::new() // .window_title("Flying Balls") .vsync(true) .build(config)?; diff --git a/examples/balls_v2/src/states.rs b/examples/balls_v2/src/states.rs index 07310f3..a75c65b 100644 --- a/examples/balls_v2/src/states.rs +++ b/examples/balls_v2/src/states.rs @@ -50,14 +50,7 @@ impl Game { init_event_listeners(&mut event_listeners); Ok(Game { - context: Context { - delta: 0.0, - system, - font, - sprites, - entities, - event_publisher, - }, + context: Context { delta: 0.0, system, font, sprites, entities, event_publisher }, component_systems, event_listeners, }) @@ -88,7 +81,13 @@ impl AppState for SimulationState { fn render(&mut self, _state: State, context: &mut Game) { context.context.system.res.video.clear(2); context.component_systems.render(&mut context.context); - context.context.system.res.video.print_string("hello, world!", 10, 10, FontRenderOpts::Color(15), &context.context.font); + context.context.system.res.video.print_string( + "hello, world!", + 10, + 10, + FontRenderOpts::Color(15), + &context.context.font, + ); } fn transition(&mut self, _state: State, _context: &mut Game) -> bool { @@ -100,4 +99,4 @@ impl AppState for SimulationState { init_entities(&mut context.context.entities); } } -} \ No newline at end of file +} diff --git a/examples/slimed/src/entities/events.rs b/examples/slimed/src/entities/events.rs index 7be0ea0..e09158a 100644 --- a/examples/slimed/src/entities/events.rs +++ b/examples/slimed/src/entities/events.rs @@ -1,7 +1,7 @@ use ggdt::prelude::*; -use crate::Core; use crate::entities::*; +use crate::Core; #[derive(Debug, Copy, Clone)] pub enum Event { @@ -89,4 +89,4 @@ fn event_handler(event: &Event, context: &mut Core) -> bool { pub fn init_events(event_listener: &mut EventListeners) { event_listener.clear(); event_listener.add(event_handler); -} \ No newline at end of file +} diff --git a/examples/slimed/src/entities/mod.rs b/examples/slimed/src/entities/mod.rs index 14b2078..888101e 100644 --- a/examples/slimed/src/entities/mod.rs +++ b/examples/slimed/src/entities/mod.rs @@ -4,7 +4,7 @@ use std::rc::Rc; use ggdt::prelude::*; -use crate::{Core, Game, TILE_HEIGHT, TILE_WIDTH, TileMap}; +use crate::{Core, Game, TileMap, TILE_HEIGHT, TILE_WIDTH}; pub use self::events::*; pub use self::systems::*; @@ -46,7 +46,7 @@ impl Direction { 1 => West, 2 => East, 3 => North, - _ => panic!("unknown random direction!") + _ => panic!("unknown random direction!"), } } } @@ -65,7 +65,7 @@ impl SlimeColor { 0 => Green, 1 => Blue, 2 => Orange, - _ => panic!("unknown random slime color!") + _ => panic!("unknown random slime color!"), } } } @@ -86,7 +86,7 @@ impl PickupType { 1 => BlueGem, 2 => OrangeGem, 3 => Coin, - _ => panic!("unknown random pickup type!") + _ => panic!("unknown random pickup type!"), } } } @@ -116,12 +116,7 @@ pub struct AnimationDef { impl AnimationDef { #[inline] pub fn new(frames: &'static [usize], loops: bool, delay: f32, multi_direction_offset: Option) -> Self { - AnimationDef { - frames, - loops, - delay, - multi_direction_offset, - } + AnimationDef { frames, loops, delay, multi_direction_offset } } } @@ -138,7 +133,7 @@ impl AnimationInstance { #[inline] pub fn from(def: Rc) -> Self { AnimationInstance { - def, + def, // frame_index: 0, frame_timer: 0.0, complete: false, @@ -174,9 +169,7 @@ pub struct Forces { impl Forces { pub fn new() -> Self { - Forces { - forces: Vec::with_capacity(5), - } + Forces { forces: Vec::with_capacity(5) } } pub fn current_force(&self) -> Vector2 { @@ -232,7 +225,13 @@ pub struct RandomlyWalksAround { } impl RandomlyWalksAround { - pub fn new(min_walk_time: f32, max_walk_time: f32, chance_to_move: u32, min_cooldown: f32, max_cooldown: f32) -> Self { + pub fn new( + min_walk_time: f32, + max_walk_time: f32, + chance_to_move: u32, + min_cooldown: f32, + max_cooldown: f32, + ) -> Self { RandomlyWalksAround { min_walk_time, max_walk_time, @@ -264,7 +263,7 @@ pub struct SpawnTimer { impl SpawnTimer { pub fn new(min_time: f32, max_time: f32, max_allowed: usize) -> Self { SpawnTimer { - timer: 0.0, + timer: 0.0, // min_time, max_time, max_allowed, @@ -291,7 +290,7 @@ pub struct Pusher { impl Pusher { pub fn new() -> Self { Pusher { - strength: DEFAULT_PUSH_STRENGTH, + strength: DEFAULT_PUSH_STRENGTH, // push_force_dissipation: DEFAULT_PUSH_DISSIPATION, } } @@ -338,7 +337,7 @@ pub struct TimedFlicker { impl TimedFlicker { pub fn new(timer: f32, method: FlickerMethod) -> Self { TimedFlicker { - timer, + timer, // method, pre_timer: None, flick: true, @@ -347,7 +346,7 @@ impl TimedFlicker { pub fn new_with_pre_timer(timer: f32, pre_timer: f32, method: FlickerMethod) -> Self { TimedFlicker { - timer, + timer, // method, pre_timer: Some(pre_timer), flick: true, @@ -380,7 +379,13 @@ pub struct Pickuper; /////////////////////////////////////////////////////////////////////////////////////////////////// -pub fn init_everything(context: &mut Game, map_file: &Path, min_spawn_time: f32, max_spawn_time: f32, max_slimes: usize) { +pub fn init_everything( + context: &mut Game, + map_file: &Path, + min_spawn_time: f32, + max_spawn_time: f32, + max_slimes: usize, +) { init_entities(&mut context.core.entities); init_component_system(&mut context.support.component_systems); init_events(&mut context.support.event_listeners); @@ -456,7 +461,17 @@ pub fn new_camera_entity(context: &mut Core, x: i32, y: i32) -> EntityId { pub fn new_slime_entity(context: &mut Core, x: i32, y: i32, direction: Direction, color: SlimeColor) -> EntityId { let id = context.entities.new_entity(); - let (atlas, chance_to_move, movement_speed, min_walk_time, max_walk_time, min_walk_cooldown, max_walk_cooldown, life, hit_color) = match color { + let ( + atlas, + chance_to_move, + movement_speed, + min_walk_time, + max_walk_time, + min_walk_cooldown, + max_walk_cooldown, + life, + hit_color, + ) = match color { SlimeColor::Green => (context.green_slime.clone(), 10, 8.0, 0.5, 2.0, 0.5, 5.0, 1, 11), SlimeColor::Blue => (context.blue_slime.clone(), 40, 12.0, 0.5, 2.0, 0.5, 3.0, 2, 13), SlimeColor::Orange => (context.orange_slime.clone(), 90, 24.0, 0.5, 1.0, 0.5, 2.0, 3, 9), @@ -476,7 +491,10 @@ pub fn new_slime_entity(context: &mut Core, x: i32, y: i32, direction: Direction context.entities.add_component(id, Activity(activity)); context.entities.add_component(id, animate_by_activity); context.entities.add_component(id, animation); - context.entities.add_component(id, RandomlyWalksAround::new(min_walk_time, max_walk_time, chance_to_move, min_walk_cooldown, max_walk_cooldown)); + context.entities.add_component( + id, + RandomlyWalksAround::new(min_walk_time, max_walk_time, chance_to_move, min_walk_cooldown, max_walk_cooldown), + ); context.entities.add_component(id, MovementSpeed(movement_speed)); context.entities.add_component(id, Pusher::new()); context.entities.add_component(id, Pushable); @@ -489,7 +507,13 @@ pub fn new_slime_entity(context: &mut Core, x: i32, y: i32, direction: Direction pub fn spawn_slime_randomly(context: &mut Core) -> EntityId { let (x, y) = context.tilemap.get_random_spawnable_coordinates(); - let id = new_slime_entity(context, x * TILE_WIDTH as i32, y * TILE_HEIGHT as i32, Direction::new_random(), SlimeColor::new_random()); + let id = new_slime_entity( + context, + x * TILE_WIDTH as i32, + y * TILE_HEIGHT as i32, + Direction::new_random(), + SlimeColor::new_random(), + ); spawn_poof_cloud(context, x * TILE_WIDTH as i32, y * TILE_HEIGHT as i32, 4, 8); id } @@ -501,21 +525,21 @@ pub fn new_player_entity(context: &mut Core, x: i32, y: i32, direction: Directio ( context.hero_female.clone(), [ - Vector2::new(-3.0, 13.0), + Vector2::new(-3.0, 13.0), // Vector2::new(-14.0, 2.0), Vector2::new(14.0, 2.0), - Vector2::new(3.0, -11.0) - ] + Vector2::new(3.0, -11.0), + ], ) } else { ( context.hero_male.clone(), [ - Vector2::new(-3.0, 13.0), + Vector2::new(-3.0, 13.0), // Vector2::new(-13.0, 2.0), Vector2::new(13.0, 2.0), - Vector2::new(3.0, -11.0) - ] + Vector2::new(3.0, -11.0), + ], ) }; @@ -524,7 +548,7 @@ pub fn new_player_entity(context: &mut Core, x: i32, y: i32, direction: Directio let animation = AnimationInstance::from(animate_by_activity.0.get(&activity).unwrap().clone()); let weapon = Weapon { - atlas: context.sword.clone(), + atlas: context.sword.clone(), // base_index: 0, offsets: weapon_offsets, damage: 1, @@ -555,7 +579,13 @@ pub fn spawn_player_randomly(context: &mut Core) -> EntityId { new_player_entity(context, x * TILE_WIDTH as i32, y * TILE_HEIGHT as i32, Direction::South) } -fn new_animation_effect(context: &mut Core, x: i32, y: i32, animation_def: Rc, delay_scaling_factor: Option) -> EntityId { +fn new_animation_effect( + context: &mut Core, + x: i32, + y: i32, + animation_def: Rc, + delay_scaling_factor: Option, +) -> EntityId { let id = context.entities.new_entity(); context.entities.add_component(id, Particle); context.entities.add_component(id, Position(Vector2::new(x as f32, y as f32))); @@ -573,11 +603,17 @@ fn new_animation_effect(context: &mut Core, x: i32, y: i32, animation_def: Rc) -> EntityId { +pub fn new_poof_animation( + context: &mut Core, + x: i32, + y: i32, + variant: usize, + delay_scaling_factor: Option, +) -> EntityId { let def = match variant { 0 => context.poof1_animation_def.clone(), 1 => context.poof2_animation_def.clone(), - _ => panic!("unknown poof animation variant") + _ => panic!("unknown poof animation variant"), }; new_animation_effect(context, x, y, def, delay_scaling_factor) } @@ -611,15 +647,21 @@ pub fn spawn_poof_cloud(context: &mut Core, x: i32, y: i32, count: usize, radius for _ in 0..count { let x = x + rnd_value(-radius, radius); let y = y + rnd_value(-radius, radius); - new_poof_animation(context, x, y, 0, match rnd_value(0, 5) { - 0 => Some(0.25), - 1 => Some(0.5), - 2 => Some(0.75), - 3 => Some(1.0), - 4 => Some(1.25), - 5 => Some(1.5), - _ => None, - }); + new_poof_animation( + context, + x, + y, + 0, + match rnd_value(0, 5) { + 0 => Some(0.25), + 1 => Some(0.5), + 2 => Some(0.75), + 3 => Some(1.0), + 4 => Some(1.25), + 5 => Some(1.5), + _ => None, + }, + ); } } @@ -691,7 +733,7 @@ pub fn spawn_pickups_from_entity(context: &mut Core, entity: EntityId) { let angle = (rnd_value(0, 359) as f32).to_radians(); let force_strength = rnd_value(0.5, 5.0); let force = Force { - force: Vector2::from_angle(angle) * force_strength, + force: Vector2::from_angle(angle) * force_strength, // dissipation_factor: 0.5, }; let kind = PickupType::new_random(); diff --git a/examples/slimed/src/entities/systems.rs b/examples/slimed/src/entities/systems.rs index a446610..93f448a 100644 --- a/examples/slimed/src/entities/systems.rs +++ b/examples/slimed/src/entities/systems.rs @@ -1,8 +1,8 @@ use ggdt::prelude::*; -use crate::{Core, TILE_HEIGHT, TILE_WIDTH}; use crate::entities::*; use crate::tilemap::*; +use crate::{Core, TILE_HEIGHT, TILE_WIDTH}; pub fn remove_entity(entities: &mut Entities, entity: EntityId) { remove_entity_attachment(entities, entity); @@ -31,7 +31,7 @@ pub fn move_entity_forward(context: &mut Core, entity: EntityId) { Direction::North => Vector2::UP * movement_speed.0, Direction::East => Vector2::RIGHT * movement_speed.0, Direction::West => Vector2::LEFT * movement_speed.0, - Direction::South => Vector2::DOWN * movement_speed.0 + Direction::South => Vector2::DOWN * movement_speed.0, }; velocity.0 += movement; @@ -56,7 +56,14 @@ pub fn turn_and_move_entity(context: &mut Core, entity: EntityId, direction: Dir move_entity_forward(context, entity); } -fn move_entity_with_collision(position: &mut Position, bounds: &Bounds, velocity: Option<&Velocity>, forces: Option<&Forces>, map: &TileMap, delta: f32) -> bool { +fn move_entity_with_collision( + position: &mut Position, + bounds: &Bounds, + velocity: Option<&Velocity>, + forces: Option<&Forces>, + map: &TileMap, + delta: f32, +) -> bool { const NUM_STEPS: usize = 2; const STEP_SCALE: f32 = 1.0 / NUM_STEPS as f32; @@ -169,12 +176,8 @@ pub fn get_attack_area_of_effect(context: &mut Core, attacker: EntityId) -> Opti if let Some(facing_direction) = facing_directions.get(&attacker) { let center_point = position.0 + weapon.offsets[facing_direction.0 as usize]; return Some(( - Circle::new( - center_point.x as i32 + 8, - center_point.y as i32 + 8, - weapon.radius_of_effect, - ), - weapon.damage + Circle::new(center_point.x as i32 + 8, center_point.y as i32 + 8, weapon.radius_of_effect), + weapon.damage, )); } else { return Some(( @@ -183,7 +186,7 @@ pub fn get_attack_area_of_effect(context: &mut Core, attacker: EntityId) -> Opti position.0.y as i32 + bound.height as i32 / 2, weapon.radius_of_effect, ), - weapon.damage + weapon.damage, )); } } @@ -337,7 +340,11 @@ fn update_system_pushing(context: &mut Core) { let pushable_position = positions.get(pushable_entity).unwrap(); let pushable_bounds = bounds.get(pushable_entity).unwrap(); - let pushable_circle = Circle::new(pushable_position.0.x as i32, pushable_position.0.y as i32, pushable_bounds.radius); + let pushable_circle = Circle::new( + pushable_position.0.x as i32, // + pushable_position.0.y as i32, + pushable_bounds.radius, + ); if pusher_circle.overlaps(&pushable_circle) { let push_direction = (pushable_position.0 - pusher_position.0).normalize(); @@ -371,7 +378,7 @@ fn update_system_animation(context: &mut Core) { animation.frame_timer += context.delta; let delay = if let Some(delay_override) = animation.delay_override { - delay_override + delay_override // } else { animation.def.delay }; @@ -469,7 +476,10 @@ fn update_system_randomly_walk_around(context: &mut Core) { randomly_walk_around.cooldown_timer = 0.0; } } else if randomly_walk_around.should_start_walking() { - randomly_walk_around.cooldown_timer = rnd_value(randomly_walk_around.min_cooldown, randomly_walk_around.max_cooldown); + randomly_walk_around.cooldown_timer = rnd_value( + randomly_walk_around.min_cooldown, // + randomly_walk_around.max_cooldown, + ); let direction = Direction::new_random(); let walk_time = rnd_value(randomly_walk_around.min_walk_time, randomly_walk_around.max_walk_time); @@ -674,7 +684,7 @@ fn render_system_sprites(context: &mut Core) { } FlickerMethod::Color(draw_color) => { blit_method = IndexedBlitMethod::TransparentSingle { - transparent_color: 0, + transparent_color: 0, // draw_color, }; } diff --git a/examples/slimed/src/main.rs b/examples/slimed/src/main.rs index b7ed733..685bdff 100644 --- a/examples/slimed/src/main.rs +++ b/examples/slimed/src/main.rs @@ -13,8 +13,8 @@ use crate::states::*; use crate::support::*; use crate::tilemap::*; -mod states; mod entities; +mod states; mod support; mod tilemap; @@ -182,17 +182,14 @@ impl Game { sparkles_animation_def, sprite_render_list: Vec::with_capacity(1024), }, - support: Support { - component_systems, - event_listeners, - }, + support: Support { component_systems, event_listeners }, }) } } fn main() -> Result<()> { let config = DosLikeConfig::new(); - let system = SystemBuilder::new() + let system = SystemBuilder::new() // .window_title("Slime Stabbing Simulator") .vsync(true) .build(config)?; diff --git a/examples/slimed/src/states.rs b/examples/slimed/src/states.rs index 77f7eb5..95a8e7a 100644 --- a/examples/slimed/src/states.rs +++ b/examples/slimed/src/states.rs @@ -3,8 +3,8 @@ use std::path::Path; use ggdt::prelude::*; use crate::entities::*; -use crate::Game; use crate::support::*; +use crate::Game; pub struct MainMenuState { fade: f32, @@ -13,10 +13,7 @@ pub struct MainMenuState { impl MainMenuState { pub fn new() -> Self { - MainMenuState { - fade: 0.0, - selection: 0, - } + MainMenuState { fade: 0.0, selection: 0 } } } @@ -60,10 +57,28 @@ impl AppState for MainMenuState { draw_window(&mut context.core.system.res.video, &context.core.ui, x, y, x + width, y + height); let selection_y = y + SPACER + (self.selection as i32 * 16); - context.core.system.res.video.print_string(">", x + SPACER, selection_y, FontRenderOpts::Color(15), &context.core.font); + context.core.system.res.video.print_string( + ">", + x + SPACER, + selection_y, + FontRenderOpts::Color(15), + &context.core.font, + ); - context.core.system.res.video.print_string("Play", x + SPACER + SPACER, y + SPACER, FontRenderOpts::Color(15), &context.core.font); - context.core.system.res.video.print_string("Quit", x + SPACER + SPACER, y + SPACER + 16, FontRenderOpts::Color(15), &context.core.font); + context.core.system.res.video.print_string( + "Play", + x + SPACER + SPACER, + y + SPACER, + FontRenderOpts::Color(15), + &context.core.font, + ); + context.core.system.res.video.print_string( + "Quit", + x + SPACER + SPACER, + y + SPACER + 16, + FontRenderOpts::Color(15), + &context.core.font, + ); } fn transition(&mut self, state: State, context: &mut Game) -> bool { @@ -98,7 +113,7 @@ pub struct GamePlayState { impl GamePlayState { pub fn new() -> Self { GamePlayState { - fade: 0.0, + fade: 0.0, // in_menu: false, selection: 0, } @@ -172,10 +187,28 @@ impl AppState for GamePlayState { draw_window(&mut context.core.system.res.video, &context.core.ui, x, y, x + width, y + height); let selection_y = y + SPACER + (self.selection as i32 * 16); - context.core.system.res.video.print_string(">", x + SPACER, selection_y, FontRenderOpts::Color(15), &context.core.font); + context.core.system.res.video.print_string( + ">", + x + SPACER, + selection_y, + FontRenderOpts::Color(15), + &context.core.font, + ); - context.core.system.res.video.print_string("Continue", x + SPACER + SPACER, y + SPACER, FontRenderOpts::Color(15), &context.core.font); - context.core.system.res.video.print_string("Quit", x + SPACER + SPACER, y + SPACER + 16, FontRenderOpts::Color(15), &context.core.font); + context.core.system.res.video.print_string( + "Continue", + x + SPACER + SPACER, + y + SPACER, + FontRenderOpts::Color(15), + &context.core.font, + ); + context.core.system.res.video.print_string( + "Quit", + x + SPACER + SPACER, + y + SPACER + 16, + FontRenderOpts::Color(15), + &context.core.font, + ); } } diff --git a/examples/slimed/src/support.rs b/examples/slimed/src/support.rs index b7fb48c..ad0f334 100644 --- a/examples/slimed/src/support.rs +++ b/examples/slimed/src/support.rs @@ -27,7 +27,14 @@ pub fn load_bitmap_atlas(path: &Path) -> Result> { Ok(atlas) } -pub fn draw_window(dest: &mut IndexedBitmap, ui: &BitmapAtlas, left: i32, top: i32, right: i32, bottom: i32) { +pub fn draw_window( + dest: &mut IndexedBitmap, + ui: &BitmapAtlas, + left: i32, + top: i32, + right: i32, + bottom: i32, +) { dest.filled_rect(left + 8, top + 8, right - 8, bottom - 8, 1); // corners @@ -60,7 +67,12 @@ pub fn update_fade_transition(state: State, fade: &mut f32, delta: f32, context: context.core.system.res.palette = context.core.palette.clone(); true } else { - context.core.system.res.palette.lerp(0..=255, &context.core.fade_out_palette, &context.core.palette, *fade); + context.core.system.res.palette.lerp( + 0..=255, + &context.core.fade_out_palette, + &context.core.palette, + *fade, + ); false } } @@ -71,12 +83,15 @@ pub fn update_fade_transition(state: State, fade: &mut f32, delta: f32, context: context.core.system.res.palette = context.core.fade_out_palette.clone(); true } else { - context.core.system.res.palette.lerp(0..=255, &context.core.fade_out_palette, &context.core.palette, *fade); + context.core.system.res.palette.lerp( + 0..=255, + &context.core.fade_out_palette, + &context.core.palette, + *fade, + ); false } } - _ => { - true - } + _ => true, } } diff --git a/examples/slimed/src/tilemap.rs b/examples/slimed/src/tilemap.rs index ebd7fff..b49a615 100644 --- a/examples/slimed/src/tilemap.rs +++ b/examples/slimed/src/tilemap.rs @@ -79,7 +79,13 @@ impl TileMap { } let upper = self.layers[1][index]; if upper >= 0 { - dest.blit_region(IndexedBlitMethod::Transparent(0), tiles.bitmap(), &tiles[upper as usize], xd, yd); + dest.blit_region( + IndexedBlitMethod::Transparent(0), + tiles.bitmap(), + &tiles[upper as usize], + xd, + yd, + ); } } } @@ -100,7 +106,7 @@ impl TileMap { return true; } } - None => return true + None => return true, } } } diff --git a/examples/template_complicated/src/main.rs b/examples/template_complicated/src/main.rs index 24e4ae9..8040024 100644 --- a/examples/template_complicated/src/main.rs +++ b/examples/template_complicated/src/main.rs @@ -27,7 +27,7 @@ pub fn event_listener(event: &Event, context: &mut Core) -> bool { context.entities.add_component(id, Color(color)); true } - _ => false + _ => false, } } @@ -201,16 +201,8 @@ impl App { let event_listeners = EventListeners::new(); Ok(App { - core: Core { - delta: 0.0, - system, - entities, - event_publisher, - }, - support: Support { - component_systems, - event_listeners, - }, + core: Core { delta: 0.0, system, entities, event_publisher }, + support: Support { component_systems, event_listeners }, }) } } @@ -219,7 +211,7 @@ impl App { fn main() -> Result<()> { let config = DosLikeConfig::new(); - let system = SystemBuilder::new() + let system = SystemBuilder::new() // .window_title("Complicated Template") .vsync(true) .build(config)?; diff --git a/examples/template_minimal/src/main.rs b/examples/template_minimal/src/main.rs index 0048431..cd1cdbe 100644 --- a/examples/template_minimal/src/main.rs +++ b/examples/template_minimal/src/main.rs @@ -4,7 +4,7 @@ use ggdt::prelude::*; fn main() -> Result<()> { let config = DosLikeConfig::new(); - let mut system = SystemBuilder::new() + let mut system = SystemBuilder::new() // .window_title("Minimal Template") .vsync(true) .build(config)?; diff --git a/ggdt/benches/bitmap.rs b/ggdt/benches/bitmap.rs index 8b00887..8581286 100644 --- a/ggdt/benches/bitmap.rs +++ b/ggdt/benches/bitmap.rs @@ -1,4 +1,4 @@ -use criterion::{black_box, Criterion, criterion_group, criterion_main}; +use criterion::{black_box, criterion_group, criterion_main, Criterion}; use ggdt::prelude::*; @@ -10,18 +10,12 @@ pub fn criterion_benchmark(c: &mut Criterion) { let mut dest = vec![0u32; (width * height * 4) as usize].into_boxed_slice(); let palette = Palette::new_vga_palette().unwrap(); - c.bench_function("deindex_bitmap_pixels", |b| { - b.iter(|| source.copy_as_argb_to(&mut dest, &palette)) - }); + c.bench_function("deindex_bitmap_pixels", |b| b.iter(|| source.copy_as_argb_to(&mut dest, &palette))); - c.bench_function("set_pixel", |b| { - b.iter(|| source.set_pixel(black_box(100), black_box(100), black_box(42))) - }); + c.bench_function("set_pixel", |b| b.iter(|| source.set_pixel(black_box(100), black_box(100), black_box(42)))); c.bench_function("set_pixel_unchecked", |b| { - b.iter(|| unsafe { - source.set_pixel_unchecked(black_box(100), black_box(100), black_box(42)) - }) + b.iter(|| unsafe { source.set_pixel_unchecked(black_box(100), black_box(100), black_box(42)) }) }); } diff --git a/ggdt/benches/blit.rs b/ggdt/benches/blit.rs index 3d8c27f..8298ce3 100644 --- a/ggdt/benches/blit.rs +++ b/ggdt/benches/blit.rs @@ -1,6 +1,6 @@ use std::path::Path; -use criterion::{black_box, Criterion, criterion_group, criterion_main}; +use criterion::{black_box, criterion_group, criterion_main, Criterion}; use ggdt::prelude::*; @@ -17,12 +17,7 @@ pub fn criterion_benchmark(c: &mut Criterion) { c.bench_function("blit_single_checked_solid", |b| { b.iter(|| { - framebuffer.blit( - black_box(IndexedBlitMethod::Solid), - black_box(&solid_bmp), - black_box(100), - black_box(100), - ) + framebuffer.blit(black_box(IndexedBlitMethod::Solid), black_box(&solid_bmp), black_box(100), black_box(100)) }) }); @@ -66,10 +61,7 @@ pub fn criterion_benchmark(c: &mut Criterion) { c.bench_function("blit_solid_flipped_not_flipped", |b| { b.iter(|| { framebuffer.blit( - black_box(IndexedBlitMethod::SolidFlipped { - horizontal_flip: false, - vertical_flip: false, - }), + black_box(IndexedBlitMethod::SolidFlipped { horizontal_flip: false, vertical_flip: false }), black_box(&solid_bmp), black_box(100), black_box(100), @@ -80,10 +72,7 @@ pub fn criterion_benchmark(c: &mut Criterion) { c.bench_function("blit_solid_flipped_horizontally", |b| { b.iter(|| { framebuffer.blit( - black_box(IndexedBlitMethod::SolidFlipped { - horizontal_flip: true, - vertical_flip: false, - }), + black_box(IndexedBlitMethod::SolidFlipped { horizontal_flip: true, vertical_flip: false }), black_box(&solid_bmp), black_box(100), black_box(100), @@ -94,10 +83,7 @@ pub fn criterion_benchmark(c: &mut Criterion) { c.bench_function("blit_solid_flipped_vertically", |b| { b.iter(|| { framebuffer.blit( - black_box(IndexedBlitMethod::SolidFlipped { - horizontal_flip: false, - vertical_flip: true, - }), + black_box(IndexedBlitMethod::SolidFlipped { horizontal_flip: false, vertical_flip: true }), black_box(&solid_bmp), black_box(100), black_box(100), @@ -108,10 +94,7 @@ pub fn criterion_benchmark(c: &mut Criterion) { c.bench_function("blit_solid_flipped_horizontally_and_vertically", |b| { b.iter(|| { framebuffer.blit( - black_box(IndexedBlitMethod::SolidFlipped { - horizontal_flip: true, - vertical_flip: true, - }), + black_box(IndexedBlitMethod::SolidFlipped { horizontal_flip: true, vertical_flip: true }), black_box(&solid_bmp), black_box(100), black_box(100), @@ -252,10 +235,7 @@ pub fn criterion_benchmark(c: &mut Criterion) { c.bench_function("blit_transparent_single", |b| { b.iter(|| { framebuffer.blit( - black_box(IndexedBlitMethod::TransparentSingle { - transparent_color: 0, - draw_color: 17, - }), + black_box(IndexedBlitMethod::TransparentSingle { transparent_color: 0, draw_color: 17 }), black_box(&trans_bmp), black_box(100), black_box(100), @@ -268,10 +248,7 @@ pub fn criterion_benchmark(c: &mut Criterion) { c.bench_function("blit_transparent_offset", |b| { b.iter(|| { framebuffer.blit( - black_box(IndexedBlitMethod::TransparentOffset { - transparent_color: 0, - offset: 42, - }), + black_box(IndexedBlitMethod::TransparentOffset { transparent_color: 0, offset: 42 }), black_box(&trans_bmp), black_box(100), black_box(100), @@ -425,11 +402,7 @@ pub fn criterion_benchmark(c: &mut Criterion) { c.bench_function("blit_rotozoom", |b| { b.iter(|| { framebuffer.blit( - black_box(IndexedBlitMethod::RotoZoom { - angle: 73.0f32.to_radians(), - scale_x: 1.2, - scale_y: 0.8, - }), + black_box(IndexedBlitMethod::RotoZoom { angle: 73.0f32.to_radians(), scale_x: 1.2, scale_y: 0.8 }), black_box(&solid_bmp), black_box(100), black_box(100), diff --git a/ggdt/benches/loading.rs b/ggdt/benches/loading.rs index b603a9e..868de9e 100644 --- a/ggdt/benches/loading.rs +++ b/ggdt/benches/loading.rs @@ -1,6 +1,6 @@ use std::io::Cursor; -use criterion::{black_box, Criterion, criterion_group, criterion_main}; +use criterion::{black_box, criterion_group, criterion_main, Criterion}; use ggdt::prelude::*; diff --git a/ggdt/src/audio/buffer/mod.rs b/ggdt/src/audio/buffer/mod.rs index 54e2d7e..1f5fbb3 100644 --- a/ggdt/src/audio/buffer/mod.rs +++ b/ggdt/src/audio/buffer/mod.rs @@ -30,10 +30,7 @@ impl AudioBuffer { /// Creates and returns a new, empty, [`AudioBuffer`] that will hold audio sample data in the /// spec/format given. pub fn new(spec: AudioSpec) -> Self { - AudioBuffer { - spec, - data: Vec::new(), - } + AudioBuffer { spec, data: Vec::new() } } /// Returns the spec of the audio sample data that this buffer contains. diff --git a/ggdt/src/audio/buffer/wav.rs b/ggdt/src/audio/buffer/wav.rs index 834c4ee..47238ca 100644 --- a/ggdt/src/audio/buffer/wav.rs +++ b/ggdt/src/audio/buffer/wav.rs @@ -7,8 +7,8 @@ use byteorder::{LittleEndian, ReadBytesExt, WriteBytesExt}; use sdl2::audio::AudioFormat; use thiserror::Error; -use crate::audio::AudioSpec; use crate::audio::buffer::AudioBuffer; +use crate::audio::AudioSpec; use crate::utils::io::StreamSize; #[derive(Error, Debug)] @@ -70,10 +70,7 @@ impl WavHeader { pub fn read(reader: &mut T) -> Result { let file_chunk = SubChunkHeader::read(reader)?; let file_container_id = ChunkId::read(reader)?; - Ok(WavHeader { - file_chunk, - file_container_id, - }) + Ok(WavHeader { file_chunk, file_container_id }) } #[allow(dead_code)] @@ -98,10 +95,7 @@ struct FormatChunk { } impl FormatChunk { - pub fn read( - reader: &mut T, - chunk_header: &SubChunkHeader, - ) -> Result { + pub fn read(reader: &mut T, chunk_header: &SubChunkHeader) -> Result { let compression_code = reader.read_u16::()?; let channels = reader.read_u16::()?; let frequency = reader.read_u32::()?; @@ -180,9 +174,7 @@ impl DataChunk { buffer = vec![0u8; chunk_header.size as usize]; reader.read_exact(&mut buffer)?; } - Ok(DataChunk { - data: buffer.into_boxed_slice(), - }) + Ok(DataChunk { data: buffer.into_boxed_slice() }) } #[allow(dead_code)] @@ -200,14 +192,10 @@ impl AudioBuffer { let header = WavHeader::read(reader)?; if header.file_chunk.chunk_id.id != *b"RIFF" { - return Err(WavError::BadFile(String::from( - "Unexpected RIFF chunk id, probably not a WAV file", - ))); + return Err(WavError::BadFile(String::from("Unexpected RIFF chunk id, probably not a WAV file"))); } if header.file_container_id.id != *b"WAVE" { - return Err(WavError::BadFile(String::from( - "Unexpected RIFF container id, probably not a WAV file", - ))); + return Err(WavError::BadFile(String::from("Unexpected RIFF container id, probably not a WAV file"))); } // some tools like sfxr and jsfxr incorrectly calculate data sizes, seemingly using a @@ -227,11 +215,9 @@ impl AudioBuffer { loop { let chunk_header = match SubChunkHeader::read(reader) { Ok(header) => header, - Err(WavError::IOError(io_error)) - if io_error.kind() == io::ErrorKind::UnexpectedEof => - { - break; - } + Err(WavError::IOError(io_error)) if io_error.kind() == io::ErrorKind::UnexpectedEof => { + break; + } Err(err) => return Err(err), }; let chunk_data_position = reader.stream_position()?; @@ -240,12 +226,9 @@ impl AudioBuffer { if chunk_header.chunk_id.id == *b"fmt " { format = Some(FormatChunk::read(reader, &chunk_header)?); if format.as_ref().unwrap().compression_code != 1 { - return Err(WavError::BadFile(String::from( - "Only PCM format WAV files are supported", - ))); + return Err(WavError::BadFile(String::from("Only PCM format WAV files are supported"))); } - if format.as_ref().unwrap().bits_per_sample != 8 && - format.as_ref().unwrap().bits_per_sample != 16 { + if format.as_ref().unwrap().bits_per_sample != 8 && format.as_ref().unwrap().bits_per_sample != 16 { return Err(WavError::BadFile(String::from( "Only 8-bit and 16-bit sample WAV files are supported", ))); @@ -256,9 +239,7 @@ impl AudioBuffer { // move to the start of the next chunk (possibly skipping over the current chunk if we // didn't recognize it above ...) - reader.seek(SeekFrom::Start( - chunk_data_position + chunk_header.size as u64, - ))?; + reader.seek(SeekFrom::Start(chunk_data_position + chunk_header.size as u64))?; } // all done reading the file, now convert the read data into an AudioBuffer ... @@ -271,7 +252,7 @@ impl AudioBuffer { 16 => AudioFormat::S16LSB, // this shouldn't be able to happen given the above checks when reading the // "fmt" chunk - _ => return Err(WavError::BadFile(String::from("Unsupported sample bit size."))) + _ => return Err(WavError::BadFile(String::from("Unsupported sample bit size."))), }; let spec = AudioSpec::new(format.frequency, format.channels as u8, sample_format); audio_buffer = AudioBuffer::new(spec); diff --git a/ggdt/src/audio/device.rs b/ggdt/src/audio/device.rs index 9f9e98b..298e67d 100644 --- a/ggdt/src/audio/device.rs +++ b/ggdt/src/audio/device.rs @@ -3,8 +3,8 @@ use std::ops::{Index, IndexMut}; use sdl2::audio::AudioCallback; use thiserror::Error; -use crate::audio::{AudioGenerator, AudioSpec, NUM_CHANNELS}; use crate::audio::buffer::AudioBuffer; +use crate::audio::{AudioGenerator, AudioSpec, NUM_CHANNELS}; /// Represents a "channel" of audio playback that will be mixed together with all of the other /// actively playing audio channels to get the final audio playback. @@ -36,10 +36,13 @@ impl std::fmt::Debug for AudioChannel { .field("playing", &self.playing) .field("loops", &self.loops) .field("data.len()", &self.data.len()) - .field("generator", match self.generator { - Some(..) => &"Some(..)", - None => &"None", - }) + .field( + "generator", + match self.generator { + Some(..) => &"Some(..)", + None => &"None", + }, + ) .field("volume", &self.volume) .field("position", &self.position) .finish_non_exhaustive() @@ -49,7 +52,7 @@ impl std::fmt::Debug for AudioChannel { impl AudioChannel { pub fn new() -> Self { AudioChannel { - playing: false, + playing: false, // loops: false, volume: 1.0, position: 0, @@ -221,11 +224,7 @@ impl AudioDevice { for _ in 0..NUM_CHANNELS { channels.push(AudioChannel::new()); } - AudioDevice { - spec, - channels, - volume: 1.0, - } + AudioDevice { spec, channels, volume: 1.0 } } /// Returns the spec that this device is currently set to play. All audio to be played via @@ -263,11 +262,7 @@ impl AudioDevice { /// playing. If a free channel is found, playback will be started by copying the buffer's /// contents to the channel. The index of the channel is returned. If playback was not started /// because no channel is free currently, then `None` is returned. - pub fn play_buffer( - &mut self, - buffer: &AudioBuffer, - loops: bool, - ) -> Result, AudioDeviceError> { + pub fn play_buffer(&mut self, buffer: &AudioBuffer, loops: bool) -> Result, AudioDeviceError> { if *buffer.spec() != self.spec { Err(AudioDeviceError::AudioSpecMismatch) } else { @@ -333,37 +328,37 @@ impl AudioDevice { /// Returns an iterator of any [`AudioChannel`]s that are currently playing. #[inline] - pub fn playing_channels_iter(&mut self) -> impl Iterator { + pub fn playing_channels_iter(&mut self) -> impl Iterator { self.channels.iter().filter(|channel| channel.playing) } /// Returns an iterator of mutable [`AudioChannel`]s that are currently playing. #[inline] - pub fn playing_channels_iter_mut(&mut self) -> impl Iterator { + pub fn playing_channels_iter_mut(&mut self) -> impl Iterator { self.channels.iter_mut().filter(|channel| channel.playing) } /// Returns an iterator of [`AudioChannel`]s that are not currently playing. #[inline] - pub fn stopped_channels_iter(&mut self) -> impl Iterator { + pub fn stopped_channels_iter(&mut self) -> impl Iterator { self.channels.iter().filter(|channel| !channel.playing) } /// Returns an iterator of mutable [`AudioChannel`]s that are not currently playing. #[inline] - pub fn stopped_channels_iter_mut(&mut self) -> impl Iterator { + pub fn stopped_channels_iter_mut(&mut self) -> impl Iterator { self.channels.iter_mut().filter(|channel| !channel.playing) } /// Returns an iterator of all [`AudioChannel`]s. #[inline] - pub fn channels_iter(&mut self) -> impl Iterator { + pub fn channels_iter(&mut self) -> impl Iterator { self.channels.iter() } /// Returns an iterator of all [`AudioChannel`]s as mutable references. #[inline] - pub fn channels_iter_mut(&mut self) -> impl Iterator { + pub fn channels_iter_mut(&mut self) -> impl Iterator { self.channels.iter_mut() } diff --git a/ggdt/src/audio/mod.rs b/ggdt/src/audio/mod.rs index 1fe1713..e975f26 100644 --- a/ggdt/src/audio/mod.rs +++ b/ggdt/src/audio/mod.rs @@ -44,11 +44,7 @@ impl AudioSpec { /// * `channels`: the number of channels of the audio (e.g. 1 = mono, 2 = stereo, etc) /// * `format`: indicates the format of the bytes making up the audio buffer. pub fn new(frequency: u32, channels: u8, format: AudioFormat) -> Self { - AudioSpec { - frequency, - channels, - format, - } + AudioSpec { frequency, channels, format } } #[inline] @@ -98,8 +94,8 @@ pub struct Audio { impl std::fmt::Debug for Audio { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - f.debug_struct("Audio") - .field("spec", &self.spec) + f.debug_struct("Audio") // + .field("spec", &self.spec) // .finish_non_exhaustive() } } @@ -110,34 +106,25 @@ impl Audio { /// /// Ideally, you should not be creating an instance of this yourself and should just use the /// one provided by [`crate::system::System`]. - pub fn new( - desired_spec: AudioSpecDesired, - sdl_audio_subsystem: &AudioSubsystem, - ) -> Result { + pub fn new(desired_spec: AudioSpecDesired, sdl_audio_subsystem: &AudioSubsystem) -> Result { let mut spec = None; - let sdl_audio_device = - match sdl_audio_subsystem.open_playback(None, &desired_spec, |opened_spec| { - let our_spec = AudioSpec::new( - opened_spec.freq as u32, - opened_spec.channels, - opened_spec.format, - ); - spec = Some(our_spec); - AudioDevice::new(our_spec) - }) { - Ok(audio_device) => audio_device, - Err(error) => return Err(AudioError::OpenDeviceFailed(error)), - }; + let sdl_audio_device = match sdl_audio_subsystem.open_playback(None, &desired_spec, |opened_spec| { + let our_spec = AudioSpec::new( + opened_spec.freq as u32, // + opened_spec.channels, // + opened_spec.format, // + ); + spec = Some(our_spec); + AudioDevice::new(our_spec) + }) { + Ok(audio_device) => audio_device, + Err(error) => return Err(AudioError::OpenDeviceFailed(error)), + }; if let Some(spec) = spec { - Ok(Audio { - spec, - sdl_audio_device, - }) + Ok(Audio { spec, sdl_audio_device }) } else { - Err(AudioError::OpenDeviceFailed(String::from( - "Device initialization failed to set AudioSpec", - ))) + Err(AudioError::OpenDeviceFailed(String::from("Device initialization failed to set AudioSpec"))) } } diff --git a/ggdt/src/audio/prelude.rs b/ggdt/src/audio/prelude.rs index 9977926..f7dfdac 100644 --- a/ggdt/src/audio/prelude.rs +++ b/ggdt/src/audio/prelude.rs @@ -1,7 +1,8 @@ pub use crate::{ - audio::*, - audio::buffer::*, + // audio::buffer::wav::*, + audio::buffer::*, audio::device::*, audio::queue::*, -}; \ No newline at end of file + audio::*, +}; diff --git a/ggdt/src/audio/queue.rs b/ggdt/src/audio/queue.rs index b3d46b9..faab960 100644 --- a/ggdt/src/audio/queue.rs +++ b/ggdt/src/audio/queue.rs @@ -1,37 +1,37 @@ use std::collections::VecDeque; use std::rc::Rc; -use crate::audio::{Audio, AudioGenerator, AudioSpec, NUM_CHANNELS}; use crate::audio::buffer::AudioBuffer; use crate::audio::device::{AudioDevice, AudioDeviceError}; +use crate::audio::{Audio, AudioGenerator, AudioSpec, NUM_CHANNELS}; pub enum AudioCommand { StopChannel(usize), StopAllChannels, PlayBuffer { - buffer: AudioBuffer, + buffer: AudioBuffer, // loops: bool, }, PlayRcBuffer { - buffer: Rc, + buffer: Rc, // loops: bool, }, PlayBufferOnChannel { - channel: usize, + channel: usize, // buffer: AudioBuffer, loops: bool, }, PlayRcBufferOnChannel { - channel: usize, + channel: usize, // buffer: Rc, loops: bool, }, PlayGenerator { - generator: Box, + generator: Box, // loops: bool, }, PlayGeneratorOnChannel { - channel: usize, + channel: usize, // generator: Box, loops: bool, }, @@ -44,38 +44,38 @@ impl std::fmt::Debug for AudioCommand { StopChannel(n) => write!(f, "StopChannel({})", n), StopAllChannels => write!(f, "StopAllChannels"), PlayBuffer { buffer, loops } => { - f.debug_struct("PlayBuffer") + f.debug_struct("PlayBuffer") // .field("buffer", buffer) .field("loops", loops) .finish() } PlayRcBuffer { buffer, loops } => { - f.debug_struct("PlayRcBuffer") + f.debug_struct("PlayRcBuffer") // .field("buffer", buffer) .field("loops", loops) .finish() } PlayBufferOnChannel { channel, buffer, loops } => { - f.debug_struct("PlayBufferOnChannel") + f.debug_struct("PlayBufferOnChannel") // .field("channel", channel) .field("buffer", buffer) .field("loops", loops) .finish() } PlayRcBufferOnChannel { channel, buffer, loops } => { - f.debug_struct("PlayRcBufferOnChannel") + f.debug_struct("PlayRcBufferOnChannel") // .field("channel", channel) .field("buffer", buffer) .field("loops", loops) .finish() } PlayGenerator { loops, .. } => { - f.debug_struct("PlayGenerator") + f.debug_struct("PlayGenerator") // .field("loops", loops) .finish_non_exhaustive() } PlayGeneratorOnChannel { channel, loops, .. } => { - f.debug_struct("PlayGeneratorOnChannel") + f.debug_struct("PlayGeneratorOnChannel") // .field("channel", channel) .field("loops", loops) .finish_non_exhaustive() @@ -98,10 +98,7 @@ pub struct AudioQueue { impl AudioQueue { /// Creates and returns a new [`AudioQueue`] instance. pub fn new(audio: &Audio) -> Self { - AudioQueue { - spec: audio.spec, - commands: VecDeque::new(), - } + AudioQueue { spec: audio.spec, commands: VecDeque::new() } } /// Returns the spec that this queue is currently set to play. All audio to be played via @@ -130,16 +127,12 @@ impl AudioQueue { /// Queues a command to play a copy of the given [`AudioBuffer`]'s data. The buffer will be /// played on the first channel found that is not already playing. If all channels are already /// playing, then nothing will be done. - pub fn play_buffer( - &mut self, - buffer: &AudioBuffer, - loops: bool, - ) -> Result<(), AudioDeviceError> { + pub fn play_buffer(&mut self, buffer: &AudioBuffer, loops: bool) -> Result<(), AudioDeviceError> { if *buffer.spec() != self.spec { Err(AudioDeviceError::AudioSpecMismatch) } else { self.commands.push_back(AudioCommand::PlayBuffer { - buffer: buffer.clone(), + buffer: buffer.clone(), // loops, }); Ok(()) @@ -150,18 +143,11 @@ impl AudioQueue { /// the first channel found that is not already playing. If all channels are already playing, /// then nothing will be done. This method is more performant than [`AudioQueue::play_buffer`], /// as that method will always immediately copy the given buffer to create the queued command. - pub fn play_buffer_rc( - &mut self, - buffer: Rc, - loops: bool, - ) -> Result<(), AudioDeviceError> { + pub fn play_buffer_rc(&mut self, buffer: Rc, loops: bool) -> Result<(), AudioDeviceError> { if *buffer.spec() != self.spec { Err(AudioDeviceError::AudioSpecMismatch) } else { - self.commands.push_back(AudioCommand::PlayRcBuffer { - buffer, - loops, - }); + self.commands.push_back(AudioCommand::PlayRcBuffer { buffer, loops }); Ok(()) } } @@ -181,7 +167,7 @@ impl AudioQueue { Err(AudioDeviceError::ChannelIndexOutOfRange(channel_index)) } else { self.commands.push_back(AudioCommand::PlayBufferOnChannel { - channel: channel_index, + channel: channel_index, // buffer: buffer.clone(), loops, }); @@ -205,7 +191,7 @@ impl AudioQueue { Err(AudioDeviceError::ChannelIndexOutOfRange(channel_index)) } else { self.commands.push_back(AudioCommand::PlayRcBufferOnChannel { - channel: channel_index, + channel: channel_index, // buffer, loops, }); @@ -215,11 +201,7 @@ impl AudioQueue { /// Queues a command to play the given [`AudioGenerator`] on the first channel found that is /// not already playing. If all channels are already playing, then nothing will be done. - pub fn play_generator( - &mut self, - generator: Box, - loops: bool, - ) -> Result<(), AudioDeviceError> { + pub fn play_generator(&mut self, generator: Box, loops: bool) -> Result<(), AudioDeviceError> { self.commands.push_back(AudioCommand::PlayGenerator { generator, loops }); Ok(()) } @@ -233,7 +215,7 @@ impl AudioQueue { loops: bool, ) -> Result<(), AudioDeviceError> { self.commands.push_back(AudioCommand::PlayGeneratorOnChannel { - channel: channel_index, + channel: channel_index, // generator, loops, }); @@ -286,4 +268,4 @@ impl AudioQueue { let mut device = audio.lock(); self.apply_to_device(&mut device) } -} \ No newline at end of file +} diff --git a/ggdt/src/base/mod.rs b/ggdt/src/base/mod.rs index 06fed05..f9c01b4 100644 --- a/ggdt/src/base/mod.rs +++ b/ggdt/src/base/mod.rs @@ -134,11 +134,13 @@ use thiserror::Error; use crate::audio::device::AudioDeviceError; use crate::events::{EventListeners, EventPublisher}; use crate::states::{AppState, StateError, States}; -use crate::system::{System, SystemError}; use crate::system::res::SystemResources; +use crate::system::{System, SystemError}; pub trait CoreState -where SystemResType: SystemResources { +where + SystemResType: SystemResources, +{ fn system(&self) -> &System; fn system_mut(&mut self) -> &mut System; @@ -155,14 +157,17 @@ where SystemResType: SystemResources { } pub trait CoreStateWithEvents: CoreState -where SystemResType: SystemResources { +where + SystemResType: SystemResources, +{ fn event_publisher(&mut self) -> &mut EventPublisher; } pub trait SupportSystems {} pub trait SupportSystemsWithEvents: SupportSystems -where SystemResType: SystemResources +where + SystemResType: SystemResources, { type ContextType: CoreStateWithEvents; fn event_listeners(&mut self) -> &mut EventListeners; @@ -174,7 +179,9 @@ where SystemResType: SystemResources } pub trait AppContext -where SystemResType: SystemResources { +where + SystemResType: SystemResources, +{ type CoreType: CoreState; type SupportType: SupportSystems; diff --git a/ggdt/src/entities/mod.rs b/ggdt/src/entities/mod.rs index 7f0232c..6287ae1 100644 --- a/ggdt/src/entities/mod.rs +++ b/ggdt/src/entities/mod.rs @@ -47,16 +47,12 @@ impl GenericComponentStore for ComponentStore { } #[inline] -pub fn as_component_store( - collection: &dyn GenericComponentStore, -) -> &ComponentStore { +pub fn as_component_store(collection: &dyn GenericComponentStore) -> &ComponentStore { collection.as_any().downcast_ref().unwrap() } #[inline] -pub fn as_component_store_mut( - collection: &mut dyn GenericComponentStore, -) -> &mut ComponentStore { +pub fn as_component_store_mut(collection: &mut dyn GenericComponentStore) -> &mut ComponentStore { collection.as_any_mut().downcast_mut().unwrap() } @@ -83,7 +79,7 @@ impl Entities { /// Creates and returns a new instance of an entity manager. pub fn new() -> Self { Entities { - entities: HashSet::new(), + entities: HashSet::new(), // component_stores: HashMap::new(), next_id: 0, } @@ -100,9 +96,7 @@ impl Entities { None } else { let type_id = TypeId::of::(); - Some(as_component_store( - self.component_stores.get(&type_id).unwrap().as_ref(), - )) + Some(as_component_store(self.component_stores.get(&type_id).unwrap().as_ref())) } } @@ -112,8 +106,7 @@ impl Entities { } else { let component_store = ComponentStore::::new(HashMap::new()); let type_id = TypeId::of::(); - self.component_stores - .insert(type_id, Box::new(component_store)); + self.component_stores.insert(type_id, Box::new(component_store)); as_component_store(self.component_stores.get(&type_id).unwrap().as_ref()) } } @@ -179,7 +172,7 @@ impl Entities { if let Some(component_store) = self.get_component_store::() { component_store.borrow_mut().insert(entity, component); } else { - self.add_component_store::() + self.add_component_store::() // .borrow_mut() .insert(entity, component); } @@ -445,7 +438,7 @@ impl std::fmt::Debug for ComponentSystems { impl ComponentSystems { pub fn new() -> Self { ComponentSystems { - update_systems: Vec::new(), + update_systems: Vec::new(), // render_systems: Vec::new(), } } @@ -735,10 +728,7 @@ mod tests { let health = healths.get_mut(&entity); let position = positions.get_mut(&entity); - println!( - "entity {}, health: {:?}, position: {:?}", - name.0, health, position - ); + println!("entity {}, health: {:?}, position: {:?}", name.0, health, position); if let Some(mut health) = health { health.0 += 5; @@ -763,10 +753,7 @@ mod tests { impl ComponentSystemContext { pub fn new(entities: Entities) -> Self { - ComponentSystemContext { - delta: 0.0, - entities, - } + ComponentSystemContext { delta: 0.0, entities } } } diff --git a/ggdt/src/events/mod.rs b/ggdt/src/events/mod.rs index eafa970..4370563 100644 --- a/ggdt/src/events/mod.rs +++ b/ggdt/src/events/mod.rs @@ -14,7 +14,7 @@ pub struct EventPublisher { impl std::fmt::Debug for EventPublisher { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - f.debug_struct("EventPublisher") + f.debug_struct("EventPublisher") // .field("queue.len()", &self.queue.len()) .finish_non_exhaustive() } @@ -22,9 +22,7 @@ impl std::fmt::Debug for EventPublisher { impl EventPublisher { pub fn new() -> Self { - EventPublisher { - queue: VecDeque::new(), - } + EventPublisher { queue: VecDeque::new() } } /// Returns the number of events that have been queued. @@ -78,7 +76,7 @@ impl std::fmt::Debug for EventListeners EventListeners { pub fn new() -> Self { EventListeners { - listeners: Vec::new(), + listeners: Vec::new(), // dispatch_queue: VecDeque::new(), } } @@ -193,7 +191,7 @@ mod tests { false } } - _ => false + _ => false, } } @@ -283,10 +281,7 @@ mod tests { listeners.dispatch_queue(&mut context); assert!(!context.events.is_empty()); assert_eq!(0, context.count); - assert_eq!( - vec![Dummy, Foobar(1), Dummy, Foobar(42)], - context.events - ); + assert_eq!(vec![Dummy, Foobar(1), Dummy, Foobar(42)], context.events); let mut context = TestContext::new(); assert!(context.events.is_empty()); @@ -303,10 +298,7 @@ mod tests { listeners.dispatch_queue(&mut context); assert!(!context.events.is_empty()); assert_eq!(3, context.count); - assert_eq!( - vec![Foobar(10), Foobar(20), Dummy], - context.events - ); + assert_eq!(vec![Foobar(10), Foobar(20), Dummy], context.events); } #[test] @@ -331,9 +323,6 @@ mod tests { listeners.dispatch_queue(&mut context); assert!(!context.events.is_empty()); assert_eq!(3, context.count); - assert_eq!( - vec![Message("hello"), Dummy, Foobar(3)], - context.events - ); + assert_eq!(vec![Message("hello"), Dummy, Foobar(3)], context.events); } } diff --git a/ggdt/src/graphics/bitmap/blit.rs b/ggdt/src/graphics/bitmap/blit.rs index 8597fdc..fd45525 100644 --- a/ggdt/src/graphics/bitmap/blit.rs +++ b/ggdt/src/graphics/bitmap/blit.rs @@ -255,14 +255,21 @@ pub unsafe fn per_pixel_rotozoom_blit( // destination bitmap's center point as the origin _except_ for the final post-transform // offset where we instead use the source bitmap's center point to re-translate the // coordinates back. this is necessary because of the (potential) scale differences! - let src_x = ((x as f32 - half_dest_width) * cos * scale_x) - ((y as f32 - half_dest_height) * sin * scale_x) + half_src_width; - let src_y = ((x as f32 - half_dest_width) * sin * scale_y) + ((y as f32 - half_dest_height) * cos * scale_y) + half_src_height; + let src_x = ((x as f32 - half_dest_width) * cos * scale_x) + - ((y as f32 - half_dest_height) * sin * scale_x) + + half_src_width; + let src_y = ((x as f32 - half_dest_width) * sin * scale_y) + + ((y as f32 - half_dest_height) * cos * scale_y) + + half_src_height; // ensure the source x,y is in bounds, as it very well might not be depending on exactly // where we are inside the destination area currently. also, we're not interested in // wrapping of course, since we just want to draw a single instance of this source // bitmap. - if src_x >= 0.0 && (src_x as i32) < (src_region.width as i32) && src_y >= 0.0 && (src_y as i32) < (src_region.height as i32) { + if src_x >= 0.0 + && (src_x as i32) < (src_region.width as i32) + && src_y >= 0.0 && (src_y as i32) < (src_region.height as i32) + { let pixel = src.get_pixel_unchecked(src_x as i32 + src_region.x, src_y as i32 + src_region.y); let draw_x = x + dest_x; @@ -298,7 +305,13 @@ impl Bitmap { vertical_flip: bool, ) { per_pixel_flipped_blit( - self, src, src_region, dest_x, dest_y, horizontal_flip, vertical_flip, + self, + src, + src_region, + dest_x, + dest_y, + horizontal_flip, + vertical_flip, |src_pixels, dest_pixels| { *dest_pixels = *src_pixels; }, @@ -314,7 +327,11 @@ impl Bitmap { transparent_color: PixelType, ) { per_pixel_blit( - self, src, src_region, dest_x, dest_y, + self, // + src, + src_region, + dest_x, + dest_y, |src_pixels, dest_pixels| { if *src_pixels != transparent_color { *dest_pixels = *src_pixels; @@ -334,7 +351,13 @@ impl Bitmap { vertical_flip: bool, ) { per_pixel_flipped_blit( - self, src, src_region, dest_x, dest_y, horizontal_flip, vertical_flip, + self, // + src, + src_region, + dest_x, + dest_y, + horizontal_flip, + vertical_flip, |src_pixels, dest_pixels| { if *src_pixels != transparent_color { *dest_pixels = *src_pixels; @@ -353,7 +376,11 @@ impl Bitmap { draw_color: PixelType, ) { per_pixel_blit( - self, src, src_region, dest_x, dest_y, + self, // + src, + src_region, + dest_x, + dest_y, |src_pixels, dest_pixels| { if *src_pixels != transparent_color { *dest_pixels = draw_color; @@ -374,7 +401,13 @@ impl Bitmap { draw_color: PixelType, ) { per_pixel_flipped_blit( - self, src, src_region, dest_x, dest_y, horizontal_flip, vertical_flip, + self, // + src, + src_region, + dest_x, + dest_y, + horizontal_flip, + vertical_flip, |src_pixels, dest_pixels| { if *src_pixels != transparent_color { *dest_pixels = draw_color; @@ -394,7 +427,14 @@ impl Bitmap { scale_y: f32, ) { per_pixel_rotozoom_blit( - self, src, src_region, dest_x, dest_y, angle, scale_x, scale_y, + self, // + src, + src_region, + dest_x, + dest_y, + angle, + scale_x, + scale_y, |src_pixel, dest_bitmap, draw_x, draw_y| { dest_bitmap.set_pixel(draw_x, draw_y, src_pixel); }, @@ -413,7 +453,14 @@ impl Bitmap { transparent_color: PixelType, ) { per_pixel_rotozoom_blit( - self, src, src_region, dest_x, dest_y, angle, scale_x, scale_y, + self, // + src, + src_region, + dest_x, + dest_y, + angle, + scale_x, + scale_y, |src_pixel, dest_bitmap, draw_x, draw_y| { if transparent_color != src_pixel { dest_bitmap.set_pixel(draw_x, draw_y, src_pixel); diff --git a/ggdt/src/graphics/bitmap/general.rs b/ggdt/src/graphics/bitmap/general.rs index 181f80f..ff257cb 100644 --- a/ggdt/src/graphics/bitmap/general.rs +++ b/ggdt/src/graphics/bitmap/general.rs @@ -6,11 +6,11 @@ //! //! Only a subset of the most common Bitmap drawing operations will be provided here. -use crate::graphics::bitmap::BitmapError; use crate::graphics::bitmap::indexed::blit::IndexedBlitMethod; use crate::graphics::bitmap::indexed::IndexedBitmap; use crate::graphics::bitmap::rgb::blit::RgbaBlitMethod; use crate::graphics::bitmap::rgb::RgbaBitmap; +use crate::graphics::bitmap::BitmapError; use crate::graphics::Pixel; use crate::math::rect::Rect; @@ -87,7 +87,7 @@ pub trait GeneralBitmap: Sized + Clone { src: &Self, src_region: &Rect, dest_x: i32, - dest_y: i32 + dest_y: i32, ); fn blit(&mut self, method: GeneralBlitMethod, src: &Self, x: i32, y: i32) { @@ -165,7 +165,7 @@ impl GeneralBitmap for IndexedBitmap { src: &Self, src_region: &Rect, dest_x: i32, - dest_y: i32 + dest_y: i32, ) { let blit_method = match method { GeneralBlitMethod::Solid => IndexedBlitMethod::Solid, @@ -244,7 +244,7 @@ impl GeneralBitmap for RgbaBitmap { src: &Self, src_region: &Rect, dest_x: i32, - dest_y: i32 + dest_y: i32, ) { let blit_method = match method { GeneralBlitMethod::Solid => RgbaBlitMethod::Solid, @@ -252,4 +252,4 @@ impl GeneralBitmap for RgbaBitmap { }; self.blit_region(blit_method, src, src_region, dest_x, dest_y) } -} \ No newline at end of file +} diff --git a/ggdt/src/graphics/bitmap/gif.rs b/ggdt/src/graphics/bitmap/gif.rs index aa95dda..104eac1 100644 --- a/ggdt/src/graphics/bitmap/gif.rs +++ b/ggdt/src/graphics/bitmap/gif.rs @@ -10,7 +10,7 @@ use crate::graphics::bitmap::rgb::RgbaBitmap; use crate::graphics::palette::{Palette, PaletteError, PaletteFormat}; use crate::utils::lzwgif::{lzw_decode, lzw_encode, LzwError}; -const BITS_FOR_256_COLORS: u32 = 7; // formula is `2 ^ (bits + 1) = num_colors` +const BITS_FOR_256_COLORS: u32 = 7; // formula is `2 ^ (bits + 1) = num_colors` fn bits_to_num_colors(bits: u32) -> u32 { 1_u32.wrapping_shl(bits + 1) @@ -119,7 +119,7 @@ impl GifHeader { let mut version = [0u8; 3]; reader.read_exact(&mut version)?; Ok(GifHeader { - signature, + signature, // version, screen_width: reader.read_u16::()?, screen_height: reader.read_u16::()?, @@ -161,7 +161,7 @@ impl GifExtensionLabel { 0x01 => Ok(PlainText), 0xff => Ok(Application), 0xfe => Ok(Comment), - _ => Err(GifError::UnknownExtension(value)) + _ => Err(GifError::UnknownExtension(value)), } } } @@ -178,7 +178,7 @@ struct GraphicControlExtension { impl GraphicControlExtension { pub fn read(reader: &mut T) -> Result { Ok(GraphicControlExtension { - block_size: reader.read_u8()?, + block_size: reader.read_u8()?, // flags: reader.read_u8()?, delay: reader.read_u16::()?, transparent_color: reader.read_u8()?, @@ -259,7 +259,7 @@ impl ApplicationExtension { let mut authentication_code = [0u8; 3]; reader.read_exact(&mut authentication_code)?; Ok(ApplicationExtension { - block_size, + block_size, // identifier, authentication_code, data: read_raw_sub_block_data(reader)?, @@ -283,9 +283,7 @@ struct CommentExtension { #[allow(dead_code)] impl CommentExtension { pub fn read(reader: &mut T) -> Result { - Ok(CommentExtension { - data: read_raw_sub_block_data(reader)?, - }) + Ok(CommentExtension { data: read_raw_sub_block_data(reader)? }) } pub fn write(&self, writer: &mut T) -> Result<(), GifError> { @@ -331,7 +329,7 @@ impl LocalImageDescriptor { pub fn read(reader: &mut T) -> Result { Ok(LocalImageDescriptor { - x: reader.read_u16::()?, + x: reader.read_u16::()?, // y: reader.read_u16::()?, width: reader.read_u16::()?, height: reader.read_u16::()?, @@ -359,11 +357,7 @@ fn load_image_section( let palette: Option; if descriptor.has_local_color_table() { let num_colors = bits_to_num_colors(descriptor.local_color_table_bits() as u32) as usize; - palette = Some(Palette::load_num_colors_from_bytes( - reader, - PaletteFormat::Normal, - num_colors, - )?); + palette = Some(Palette::load_num_colors_from_bytes(reader, PaletteFormat::Normal, num_colors)?); } else { palette = None; // we expect that there was a global color table previously } @@ -375,17 +369,14 @@ fn load_image_section( Ok((bitmap, palette)) } -fn save_image_section( - writer: &mut T, - bitmap: &IndexedBitmap, -) -> Result<(), GifError> { +fn save_image_section(writer: &mut T, bitmap: &IndexedBitmap) -> Result<(), GifError> { writer.write_u8(IMAGE_DESCRIPTOR_SEPARATOR)?; let image_descriptor = LocalImageDescriptor { - x: 0, + x: 0, // y: 0, width: bitmap.width as u16, height: bitmap.height as u16, - flags: 0, // again, we're not using local color tables, so no flags to set here + flags: 0, // again, we're not using local color tables, so no flags to set here }; image_descriptor.write(writer)?; @@ -400,9 +391,7 @@ fn save_image_section( } impl IndexedBitmap { - pub fn load_gif_bytes( - reader: &mut T, - ) -> Result<(IndexedBitmap, Palette), GifError> { + pub fn load_gif_bytes(reader: &mut T) -> Result<(IndexedBitmap, Palette), GifError> { let header = GifHeader::read(reader)?; if header.signature != *b"GIF" || header.version != *b"89a" { return Err(GifError::BadFile(String::from("Expected GIF89a header signature"))); @@ -412,11 +401,7 @@ impl IndexedBitmap { let mut palette: Option; if header.has_global_color_table() { let num_colors = bits_to_num_colors(header.global_color_table_bits() as u32) as usize; - palette = Some(Palette::load_num_colors_from_bytes( - reader, - PaletteFormat::Normal, - num_colors, - )?); + palette = Some(Palette::load_num_colors_from_bytes(reader, PaletteFormat::Normal, num_colors)?); } else { palette = None; // we expect to find a local color table later } @@ -468,7 +453,10 @@ impl IndexedBitmap { } } _ => { - return Err(GifError::BadFile(format!("Unexpected byte found {} not a file trailer, image separator or extension introducer", current_byte))); + return Err(GifError::BadFile(format!( + "Unexpected byte found {} not a file trailer, image separator or extension introducer", + current_byte + ))); } } } @@ -526,7 +514,7 @@ impl IndexedBitmap { writer.write_u8(EXTENSION_INTRODUCER)?; writer.write_u8(GifExtensionLabel::GraphicControl as u8)?; let graphic_control = GraphicControlExtension { - block_size: 4, + block_size: 4, // flags: 0, delay: 0, transparent_color, @@ -540,12 +528,7 @@ impl IndexedBitmap { Ok(()) } - pub fn to_gif_file( - &self, - path: &Path, - palette: &Palette, - settings: GifSettings, - ) -> Result<(), GifError> { + pub fn to_gif_file(&self, path: &Path, palette: &Palette, settings: GifSettings) -> Result<(), GifError> { let f = File::create(path)?; let mut writer = BufWriter::new(f); self.to_gif_bytes(&mut writer, palette, settings) @@ -556,9 +539,7 @@ impl IndexedBitmap { // multi-pixel-depth support. impl RgbaBitmap { - pub fn load_gif_bytes( - reader: &mut T, - ) -> Result<(RgbaBitmap, Palette), GifError> { + pub fn load_gif_bytes(reader: &mut T) -> Result<(RgbaBitmap, Palette), GifError> { let (temp_bitmap, palette) = IndexedBitmap::load_gif_bytes(reader)?; let output = temp_bitmap.to_rgba(&palette); Ok((output, palette)) @@ -593,9 +574,10 @@ pub mod tests { let ref_pixels = load_raw_indexed(test_file(Path::new("small.bin")).as_path())?; let dp2_palette = Palette::load_from_file( - test_assets_file(Path::new("dp2.pal")).as_path(), + test_assets_file(Path::new("dp2.pal")).as_path(), // PaletteFormat::Normal, - ).unwrap(); + ) + .unwrap(); let (bmp, palette) = IndexedBitmap::load_gif_file(test_file(Path::new("small.gif")).as_path())?; assert_eq!(16, bmp.width()); diff --git a/ggdt/src/graphics/bitmap/iff.rs b/ggdt/src/graphics/bitmap/iff.rs index 9d67f43..322f853 100644 --- a/ggdt/src/graphics/bitmap/iff.rs +++ b/ggdt/src/graphics/bitmap/iff.rs @@ -9,7 +9,7 @@ use thiserror::Error; use crate::graphics::bitmap::indexed::IndexedBitmap; use crate::graphics::bitmap::rgb::RgbaBitmap; use crate::graphics::palette::{Palette, PaletteError, PaletteFormat}; -use crate::utils::packbits::{pack_bits, PackBitsError, unpack_bits}; +use crate::utils::packbits::{pack_bits, unpack_bits, PackBitsError}; #[derive(Error, Debug)] pub enum IffError { @@ -91,11 +91,7 @@ impl FormChunkHeader { let chunk_id = IffId::read(reader)?; let size = reader.read_u32::()?; let type_id = IffId::read(reader)?; - Ok(FormChunkHeader { - chunk_id, - size, - type_id, - }) + Ok(FormChunkHeader { chunk_id, size, type_id }) } pub fn write(&self, writer: &mut T) -> Result<(), IffError> { @@ -287,7 +283,7 @@ fn load_planar_body(reader: &mut T, bmhd: &BMHDChunk) -> Result // scanline, the destination pointer will contain VGA-friendly // "chunky pixel"-format pixel data merge_bitplane( - plane, + plane, // &buffer, bitmap.pixels_at_mut(0, y as i32).unwrap(), row_bytes, @@ -327,7 +323,7 @@ fn write_planar_body( for y in 0..bitmap.height() { for plane in 0..(bmhd.bitplanes as u32) { extract_bitplane( - plane, + plane, // bitmap.pixels_at(0, y as i32).unwrap(), &mut buffer, row_bytes, @@ -369,19 +365,13 @@ fn write_chunky_body( } impl IndexedBitmap { - pub fn load_iff_bytes( - reader: &mut T, - ) -> Result<(IndexedBitmap, Palette), IffError> { + pub fn load_iff_bytes(reader: &mut T) -> Result<(IndexedBitmap, Palette), IffError> { let form_chunk = FormChunkHeader::read(reader)?; if form_chunk.chunk_id.id != *b"FORM" { - return Err(IffError::BadFile(String::from( - "Unexpected form chunk ID, probably not an IFF file", - ))); + return Err(IffError::BadFile(String::from("Unexpected form chunk ID, probably not an IFF file"))); } if form_chunk.type_id.id != *b"ILBM" && form_chunk.type_id.id != *b"PBM " { - return Err(IffError::BadFile(String::from( - "Only ILBM or PBM formats are supported", - ))); + return Err(IffError::BadFile(String::from("Only ILBM or PBM formats are supported"))); } let mut bmhd: Option = None; @@ -391,11 +381,9 @@ impl IndexedBitmap { loop { let header = match SubChunkHeader::read(reader) { Ok(header) => header, - Err(IffError::IOError(io_error)) - if io_error.kind() == io::ErrorKind::UnexpectedEof => - { - break; - } + Err(IffError::IOError(io_error)) if io_error.kind() == io::ErrorKind::UnexpectedEof => { + break; + } Err(err) => return Err(err), }; let chunk_data_position = reader.stream_position()?; @@ -404,18 +392,14 @@ impl IndexedBitmap { if header.chunk_id.id == *b"BMHD" { bmhd = Some(BMHDChunk::read(reader)?); if bmhd.as_ref().unwrap().bitplanes != 8 { - return Err(IffError::BadFile(String::from( - "Only 8bpp files are supported", - ))); + return Err(IffError::BadFile(String::from("Only 8bpp files are supported"))); } if bmhd.as_ref().unwrap().masking == 1 { return Err(IffError::BadFile(String::from("Masking is not supported"))); } } else if header.chunk_id.id == *b"CMAP" { if header.size != 768 { - return Err(IffError::BadFile(String::from( - "Only 256 color files are supported", - ))); + return Err(IffError::BadFile(String::from("Only 256 color files are supported"))); } palette = Some(Palette::load_from_bytes(reader, PaletteFormat::Normal)?) } else if header.chunk_id.id == *b"BODY" { @@ -464,22 +448,16 @@ impl IndexedBitmap { let mut form_chunk = FormChunkHeader { chunk_id: IffId { id: *b"FORM" }, - type_id: IffId { - id: format.type_id(), - }, + type_id: IffId { id: format.type_id() }, size: 0, // filled in later once we know the size }; // skip over the form chunk for now. will come back here and write it out later once we // know what the final size is - writer.seek(SeekFrom::Current( - std::mem::size_of::() as i64 - ))?; + writer.seek(SeekFrom::Current(std::mem::size_of::() as i64))?; - let bmhd_chunk_header = SubChunkHeader { - chunk_id: IffId { id: *b"BMHD" }, - size: std::mem::size_of::() as u32, - }; + let bmhd_chunk_header = + SubChunkHeader { chunk_id: IffId { id: *b"BMHD" }, size: std::mem::size_of::() as u32 }; let bmhd = BMHDChunk { width: self.width() as u16, height: self.height() as u16, @@ -501,7 +479,7 @@ impl IndexedBitmap { let cmap_chunk_header = SubChunkHeader { chunk_id: IffId { id: *b"CMAP" }, - size: 768, + size: 768, // }; cmap_chunk_header.write(writer)?; palette.to_bytes(writer, PaletteFormat::Normal)?; @@ -515,9 +493,7 @@ impl IndexedBitmap { // skip over the body chunk header for now. we will again come back here and write it out // later once we know what the final size again. - writer.seek(SeekFrom::Current( - std::mem::size_of::() as i64 - ))?; + writer.seek(SeekFrom::Current(std::mem::size_of::() as i64))?; if format.chunky() { write_chunky_body(writer, self, &bmhd)?; @@ -548,12 +524,7 @@ impl IndexedBitmap { Ok(()) } - pub fn to_iff_file( - &self, - path: &Path, - palette: &Palette, - format: IffFormat, - ) -> Result<(), IffError> { + pub fn to_iff_file(&self, path: &Path, palette: &Palette, format: IffFormat) -> Result<(), IffError> { let f = File::create(path)?; let mut writer = BufWriter::new(f); self.to_iff_bytes(&mut writer, palette, format) @@ -564,9 +535,7 @@ impl IndexedBitmap { // multi-pixel-depth support. impl RgbaBitmap { - pub fn load_iff_bytes( - reader: &mut T, - ) -> Result<(RgbaBitmap, Palette), IffError> { + pub fn load_iff_bytes(reader: &mut T) -> Result<(RgbaBitmap, Palette), IffError> { let (temp_bitmap, palette) = IndexedBitmap::load_iff_bytes(reader)?; let output = temp_bitmap.to_rgba(&palette); Ok((output, palette)) @@ -601,9 +570,10 @@ mod tests { let ref_pixels = load_raw_indexed(test_file(Path::new("small.bin")).as_path())?; let dp2_palette = Palette::load_from_file( - test_assets_file(Path::new("dp2.pal")).as_path(), - PaletteFormat::Normal - ).unwrap(); + test_assets_file(Path::new("dp2.pal")).as_path(), // + PaletteFormat::Normal, + ) + .unwrap(); // ILBM format diff --git a/ggdt/src/graphics/bitmap/indexed/blit.rs b/ggdt/src/graphics/bitmap/indexed/blit.rs index 9e25e49..dd0d9c7 100644 --- a/ggdt/src/graphics/bitmap/indexed/blit.rs +++ b/ggdt/src/graphics/bitmap/indexed/blit.rs @@ -68,7 +68,10 @@ pub enum IndexedBlitMethod { /// Same as [IndexedBlitMethod::Transparent] except that the drawn pixels have their color indices /// offset by the amount given. The transparent color check is not affected by the offset and /// is always treated as an absolute palette color index. - TransparentOffset { transparent_color: u8, offset: u8 }, + TransparentOffset { + transparent_color: u8, + offset: u8, + }, /// Combination of [IndexedBlitMethod::TransparentFlipped] and [IndexedBlitMethod::TransparentOffset]. TransparentFlippedOffset { transparent_color: u8, @@ -133,7 +136,11 @@ impl IndexedBitmap { blend_map: Rc, ) { per_pixel_blit( - self, src, src_region, dest_x, dest_y, + self, // + src, + src_region, + dest_x, + dest_y, |src_pixels, dest_pixels| { if let Some(blended_pixel) = blend_map.blend(*src_pixels, *dest_pixels) { *dest_pixels = blended_pixel; @@ -155,7 +162,13 @@ impl IndexedBitmap { blend_map: Rc, ) { per_pixel_flipped_blit( - self, src, src_region, dest_x, dest_y, horizontal_flip, vertical_flip, + self, // + src, + src_region, + dest_x, + dest_y, + horizontal_flip, + vertical_flip, |src_pixels, dest_pixels| { if let Some(blended_pixel) = blend_map.blend(*src_pixels, *dest_pixels) { *dest_pixels = blended_pixel; @@ -175,7 +188,11 @@ impl IndexedBitmap { offset: u8, ) { per_pixel_blit( - self, src, src_region, dest_x, dest_y, + self, // + src, + src_region, + dest_x, + dest_y, |src_pixels, dest_pixels| { *dest_pixels = (*src_pixels).wrapping_add(offset); }, @@ -193,7 +210,13 @@ impl IndexedBitmap { offset: u8, ) { per_pixel_flipped_blit( - self, src, src_region, dest_x, dest_y, horizontal_flip, vertical_flip, + self, // + src, + src_region, + dest_x, + dest_y, + horizontal_flip, + vertical_flip, |src_pixels, dest_pixels| { *dest_pixels = (*src_pixels).wrapping_add(offset); }, @@ -210,7 +233,11 @@ impl IndexedBitmap { blend_map: Rc, ) { per_pixel_blit( - self, src, src_region, dest_x, dest_y, + self, // + src, + src_region, + dest_x, + dest_y, |src_pixels, dest_pixels| { if *src_pixels != transparent_color { if let Some(blended_pixel) = blend_map.blend(*src_pixels, *dest_pixels) { @@ -235,7 +262,13 @@ impl IndexedBitmap { blend_map: Rc, ) { per_pixel_flipped_blit( - self, src, src_region, dest_x, dest_y, horizontal_flip, vertical_flip, + self, // + src, + src_region, + dest_x, + dest_y, + horizontal_flip, + vertical_flip, |src_pixels, dest_pixels| { if *src_pixels != transparent_color { if let Some(blended_pixel) = blend_map.blend(*src_pixels, *dest_pixels) { @@ -258,7 +291,11 @@ impl IndexedBitmap { offset: u8, ) { per_pixel_blit( - self, src, src_region, dest_x, dest_y, + self, // + src, + src_region, + dest_x, + dest_y, |src_pixels, dest_pixels| { if *src_pixels != transparent_color { *dest_pixels = (*src_pixels).wrapping_add(offset); @@ -279,7 +316,13 @@ impl IndexedBitmap { offset: u8, ) { per_pixel_flipped_blit( - self, src, src_region, dest_x, dest_y, horizontal_flip, vertical_flip, + self, // + src, + src_region, + dest_x, + dest_y, + horizontal_flip, + vertical_flip, |src_pixels, dest_pixels| { if *src_pixels != transparent_color { *dest_pixels = (*src_pixels).wrapping_add(offset); @@ -300,7 +343,14 @@ impl IndexedBitmap { blend_map: Rc, ) { per_pixel_rotozoom_blit( - self, src, src_region, dest_x, dest_y, angle, scale_x, scale_y, + self, // + src, + src_region, + dest_x, + dest_y, + angle, + scale_x, + scale_y, |src_pixel, dest_bitmap, draw_x, draw_y| { if let Some(dest_pixel) = dest_bitmap.get_pixel(draw_x, draw_y) { let draw_pixel = if let Some(blended_pixel) = blend_map.blend(src_pixel, dest_pixel) { @@ -327,7 +377,14 @@ impl IndexedBitmap { blend_map: Rc, ) { per_pixel_rotozoom_blit( - self, src, src_region, dest_x, dest_y, angle, scale_x, scale_y, + self, // + src, + src_region, + dest_x, + dest_y, + angle, + scale_x, + scale_y, |src_pixel, dest_bitmap, draw_x, draw_y| { if transparent_color != src_pixel { if let Some(dest_pixel) = dest_bitmap.get_pixel(draw_x, draw_y) { @@ -355,7 +412,14 @@ impl IndexedBitmap { offset: u8, ) { per_pixel_rotozoom_blit( - self, src, src_region, dest_x, dest_y, angle, scale_x, scale_y, + self, // + src, + src_region, + dest_x, + dest_y, + angle, + scale_x, + scale_y, |src_pixel, dest_bitmap, draw_x, draw_y| { let src_pixel = src_pixel.wrapping_add(offset); dest_bitmap.set_pixel(draw_x, draw_y, src_pixel); @@ -376,7 +440,14 @@ impl IndexedBitmap { offset: u8, ) { per_pixel_rotozoom_blit( - self, src, src_region, dest_x, dest_y, angle, scale_x, scale_y, + self, // + src, + src_region, + dest_x, + dest_y, + angle, + scale_x, + scale_y, |src_pixel, dest_bitmap, draw_x, draw_y| { if transparent_color != src_pixel { let src_pixel = src_pixel.wrapping_add(offset); @@ -413,15 +484,15 @@ impl IndexedBitmap { RotoZoomTransparentOffset { .. } => {} // set axis flip arguments - SolidFlipped { horizontal_flip, vertical_flip, .. } | - SolidFlippedBlended { horizontal_flip, vertical_flip, .. } | - SolidFlippedOffset { horizontal_flip, vertical_flip, .. } | - TransparentFlipped { horizontal_flip, vertical_flip, .. } | - TransparentFlippedBlended { horizontal_flip, vertical_flip, .. } | - TransparentFlippedSingle { horizontal_flip, vertical_flip, .. } | - TransparentFlippedOffset { horizontal_flip, vertical_flip, .. } => { + SolidFlipped { horizontal_flip, vertical_flip, .. } + | SolidFlippedBlended { horizontal_flip, vertical_flip, .. } + | SolidFlippedOffset { horizontal_flip, vertical_flip, .. } + | TransparentFlipped { horizontal_flip, vertical_flip, .. } + | TransparentFlippedBlended { horizontal_flip, vertical_flip, .. } + | TransparentFlippedSingle { horizontal_flip, vertical_flip, .. } + | TransparentFlippedOffset { horizontal_flip, vertical_flip, .. } => { if !clip_blit( - self.clip_region(), + self.clip_region(), // &mut src_region, &mut dest_x, &mut dest_y, @@ -435,7 +506,7 @@ impl IndexedBitmap { // otherwise clip like normal! _ => { if !clip_blit( - self.clip_region(), + self.clip_region(), // &mut src_region, &mut dest_x, &mut dest_y, @@ -543,9 +614,16 @@ impl IndexedBitmap { } #[inline] - pub unsafe fn blit_atlas_unchecked(&mut self, method: IndexedBlitMethod, src: &BitmapAtlas, index: usize, x: i32, y: i32) { + pub unsafe fn blit_atlas_unchecked( + &mut self, + method: IndexedBlitMethod, + src: &BitmapAtlas, + index: usize, + x: i32, + y: i32, + ) { if let Some(src_region) = src.get(index) { self.blit_region_unchecked(method, src.bitmap(), &src_region, x, y); } } -} \ No newline at end of file +} diff --git a/ggdt/src/graphics/bitmap/indexed/mod.rs b/ggdt/src/graphics/bitmap/indexed/mod.rs index 70d13af..7cc82eb 100644 --- a/ggdt/src/graphics/bitmap/indexed/mod.rs +++ b/ggdt/src/graphics/bitmap/indexed/mod.rs @@ -1,7 +1,7 @@ use std::path::Path; -use crate::graphics::bitmap::{Bitmap, BitmapError}; use crate::graphics::bitmap::rgb::RgbaBitmap; +use crate::graphics::bitmap::{Bitmap, BitmapError}; use crate::graphics::palette::Palette; pub mod blit; @@ -29,20 +29,14 @@ impl IndexedBitmap { Some("png") => { let (bmp, palette) = Self::load_png_file(path)?; Ok((bmp, palette.expect("Indexed color PNG loaded and should have returned a Palette"))) - }, + } Some("pcx") => Ok(Self::load_pcx_file(path)?), Some("gif") => Ok(Self::load_gif_file(path)?), - Some("iff") | Some("lbm") | Some("pbm") | Some("bbm") => { - Ok(Self::load_iff_file(path)?) - } - _ => Err(BitmapError::UnknownFileType(String::from( - "Unrecognized file extension", - ))), + Some("iff") | Some("lbm") | Some("pbm") | Some("bbm") => Ok(Self::load_iff_file(path)?), + _ => Err(BitmapError::UnknownFileType(String::from("Unrecognized file extension"))), } } else { - Err(BitmapError::UnknownFileType(String::from( - "No file extension", - ))) + Err(BitmapError::UnknownFileType(String::from("No file extension"))) } } @@ -73,4 +67,4 @@ impl IndexedBitmap { self.copy_as_argb_to(output.pixels_mut(), palette); output } -} \ No newline at end of file +} diff --git a/ggdt/src/graphics/bitmap/indexed/primitives.rs b/ggdt/src/graphics/bitmap/indexed/primitives.rs index bb28eab..6c5e8bf 100644 --- a/ggdt/src/graphics/bitmap/indexed/primitives.rs +++ b/ggdt/src/graphics/bitmap/indexed/primitives.rs @@ -8,14 +8,15 @@ impl IndexedBitmap { #[inline] pub fn set_blended_pixel(&mut self, x: i32, y: i32, color: u8, blend_map: &BlendMap) { self.set_custom_pixel( - x, y, + x, // + y, |dest_color| { if let Some(blended_color) = blend_map.blend(color, dest_color) { blended_color } else { color } - } + }, ); } @@ -26,14 +27,15 @@ impl IndexedBitmap { #[inline] pub unsafe fn set_blended_pixel_unchecked(&mut self, x: i32, y: i32, color: u8, blend_map: &BlendMap) { self.set_custom_pixel_unchecked( - x, y, + x, // + y, |dest_color| { if let Some(blended_color) = blend_map.blend(color, dest_color) { blended_color } else { color } - } + }, ); } @@ -42,10 +44,11 @@ impl IndexedBitmap { pub fn blended_line(&mut self, x1: i32, y1: i32, x2: i32, y2: i32, color: u8, blend_map: &BlendMap) { if let Some(blend_mapping) = blend_map.get_mapping(color) { self.line_custom( - x1, y1, x2, y2, - |dest_color| { - blend_mapping[dest_color as usize] - } + x1, // + y1, + x2, + y2, + |dest_color| blend_mapping[dest_color as usize], ); } else { self.line(x1, y1, x2, y2, color); @@ -57,10 +60,10 @@ impl IndexedBitmap { pub fn blended_horiz_line(&mut self, x1: i32, x2: i32, y: i32, color: u8, blend_map: &BlendMap) { if let Some(blend_mapping) = blend_map.get_mapping(color) { self.horiz_line_custom( - x1, x2, y, - |dest_color| { - blend_mapping[dest_color as usize] - } + x1, // + x2, + y, + |dest_color| blend_mapping[dest_color as usize], ); } else { self.horiz_line(x1, x2, y, color); @@ -72,10 +75,10 @@ impl IndexedBitmap { pub fn blended_vert_line(&mut self, x: i32, y1: i32, y2: i32, color: u8, blend_map: &BlendMap) { if let Some(blend_mapping) = blend_map.get_mapping(color) { self.vert_line_custom( - x, y1, y2, - |dest_color| { - blend_mapping[dest_color as usize] - } + x, // + y1, + y2, + |dest_color| blend_mapping[dest_color as usize], ); } else { self.vert_line(x, y1, y2, color); @@ -89,10 +92,11 @@ impl IndexedBitmap { pub fn blended_rect(&mut self, x1: i32, y1: i32, x2: i32, y2: i32, color: u8, blend_map: &BlendMap) { if let Some(blend_mapping) = blend_map.get_mapping(color) { self.rect_custom( - x1, y1, x2, y2, - |dest_color| { - blend_mapping[dest_color as usize] - } + x1, // + y1, + x2, + y2, + |dest_color| blend_mapping[dest_color as usize], ); } else { self.rect(x1, y1, x2, y2, color); @@ -106,13 +110,14 @@ impl IndexedBitmap { pub fn blended_filled_rect(&mut self, x1: i32, y1: i32, x2: i32, y2: i32, color: u8, blend_map: &BlendMap) { if let Some(blend_mapping) = blend_map.get_mapping(color) { self.filled_rect_custom( - x1, y1, x2, y2, - |dest_color| { - blend_mapping[dest_color as usize] - } + x1, // + y1, + x2, + y2, + |dest_color| blend_mapping[dest_color as usize], ); } else { self.filled_rect(x1, y1, x2, y2, color); } } -} \ No newline at end of file +} diff --git a/ggdt/src/graphics/bitmap/mod.rs b/ggdt/src/graphics/bitmap/mod.rs index 04e6c79..37284b1 100644 --- a/ggdt/src/graphics/bitmap/mod.rs +++ b/ggdt/src/graphics/bitmap/mod.rs @@ -53,7 +53,7 @@ pub struct Bitmap { impl std::fmt::Debug for Bitmap { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - f.debug_struct("Bitmap") + f.debug_struct("Bitmap") // .field("width", &self.width) .field("height", &self.height) .field("clip_region", &self.clip_region) @@ -72,15 +72,10 @@ impl Bitmap { } Ok(Bitmap { - width, + width, // height, pixels: vec![color; (width * height) as usize].into_boxed_slice(), - clip_region: Rect { - x: 0, - y: 0, - width, - height, - }, + clip_region: Rect { x: 0, y: 0, width, height }, }) } @@ -138,7 +133,7 @@ impl Bitmap { #[inline] pub fn full_bounds(&self) -> Rect { Rect { - x: 0, + x: 0, // y: 0, width: self.width, height: self.height, @@ -215,7 +210,7 @@ impl Bitmap { pub unsafe fn pixels_at_mut_unchecked(&mut self, x: i32, y: i32) -> &mut [PixelType] { let offset = self.get_offset_to_xy(x, y); std::slice::from_raw_parts_mut( - self.pixels.as_mut_ptr().add(offset), + self.pixels.as_mut_ptr().add(offset), // self.pixels.len() - offset, ) } @@ -318,24 +313,8 @@ pub mod tests { assert_eq!(32, bmp.height()); assert_eq!(15, bmp.right()); assert_eq!(31, bmp.bottom()); - assert_eq!( - Rect { - x: 0, - y: 0, - width: 16, - height: 32, - }, - bmp.full_bounds() - ); - assert_eq!( - Rect { - x: 0, - y: 0, - width: 16, - height: 32, - }, - *bmp.clip_region() - ); + assert_eq!(Rect { x: 0, y: 0, width: 16, height: 32 }, bmp.full_bounds()); + assert_eq!(Rect { x: 0, y: 0, width: 16, height: 32 }, *bmp.clip_region()); } #[test] @@ -343,10 +322,7 @@ pub mod tests { let mut bmp = Bitmap::::new(8, 8).unwrap(); bmp.pixels_mut().copy_from_slice(RAW_BMP_PIXELS); - assert_matches!( - Bitmap::::from(&bmp, &Rect::new(0, 0, 16, 16)), - Err(BitmapError::OutOfBounds) - ); + assert_matches!(Bitmap::::from(&bmp, &Rect::new(0, 0, 16, 16)), Err(BitmapError::OutOfBounds)); let copy = Bitmap::::from(&bmp, &Rect::new(0, 0, 8, 8)).unwrap(); assert_eq!(bmp.pixels(), copy.pixels()); @@ -382,15 +358,7 @@ pub mod tests { let new_clip_region = Rect::from_coords(4, 2, 12, 6); bmp.set_clip_region(&new_clip_region); - assert_eq!( - Rect { - x: 0, - y: 0, - width: 16, - height: 8, - }, - bmp.full_bounds() - ); + assert_eq!(Rect { x: 0, y: 0, width: 16, height: 8 }, bmp.full_bounds()); assert_eq!(new_clip_region, *bmp.clip_region()); assert!(bmp.is_xy_visible(4, 2)); assert!(bmp.is_xy_visible(12, 2)); diff --git a/ggdt/src/graphics/bitmap/pcx.rs b/ggdt/src/graphics/bitmap/pcx.rs index fa1ae95..b6dcbb2 100644 --- a/ggdt/src/graphics/bitmap/pcx.rs +++ b/ggdt/src/graphics/bitmap/pcx.rs @@ -93,11 +93,7 @@ impl PcxHeader { } } -fn write_pcx_data( - writer: &mut T, - run_count: u8, - pixel: u8, -) -> Result<(), PcxError> { +fn write_pcx_data(writer: &mut T, run_count: u8, pixel: u8) -> Result<(), PcxError> { if (run_count > 1) || ((pixel & 0xc0) == 0xc0) { writer.write_u8(0xc0 | run_count)?; } @@ -106,9 +102,7 @@ fn write_pcx_data( } impl IndexedBitmap { - pub fn load_pcx_bytes( - reader: &mut T, - ) -> Result<(IndexedBitmap, Palette), PcxError> { + pub fn load_pcx_bytes(reader: &mut T) -> Result<(IndexedBitmap, Palette), PcxError> { let header = PcxHeader::read(reader)?; if header.manufacturer != 10 { @@ -117,14 +111,10 @@ impl IndexedBitmap { ))); } if header.version != 5 { - return Err(PcxError::BadFile(String::from( - "Only version 5 PCX files are supported", - ))); + return Err(PcxError::BadFile(String::from("Only version 5 PCX files are supported"))); } if header.encoding != 1 { - return Err(PcxError::BadFile(String::from( - "Only RLE-compressed PCX files are supported", - ))); + return Err(PcxError::BadFile(String::from("Only RLE-compressed PCX files are supported"))); } if header.bpp != 8 { return Err(PcxError::BadFile(String::from( @@ -132,9 +122,7 @@ impl IndexedBitmap { ))); } if header.x2 == 0 || header.y2 == 0 { - return Err(PcxError::BadFile(String::from( - "Invalid PCX image dimensions", - ))); + return Err(PcxError::BadFile(String::from("Invalid PCX image dimensions"))); } // read the PCX file's pixel data into a bitmap @@ -185,9 +173,7 @@ impl IndexedBitmap { let palette_marker = reader.read_u8()?; if palette_marker != 0x0c { - return Err(PcxError::BadFile(String::from( - "Palette not found at end of file", - ))); + return Err(PcxError::BadFile(String::from("Palette not found at end of file"))); } let palette = Palette::load_from_bytes(reader, PaletteFormat::Normal)?; @@ -201,11 +187,7 @@ impl IndexedBitmap { Self::load_pcx_bytes(&mut reader) } - pub fn to_pcx_bytes( - &self, - writer: &mut T, - palette: &Palette, - ) -> Result<(), PcxError> { + pub fn to_pcx_bytes(&self, writer: &mut T, palette: &Palette) -> Result<(), PcxError> { let header = PcxHeader { manufacturer: 10, version: 5, @@ -285,9 +267,7 @@ impl IndexedBitmap { // multi-pixel-depth support. impl RgbaBitmap { - pub fn load_pcx_bytes( - reader: &mut T, - ) -> Result<(RgbaBitmap, Palette), PcxError> { + pub fn load_pcx_bytes(reader: &mut T) -> Result<(RgbaBitmap, Palette), PcxError> { let (temp_bitmap, palette) = IndexedBitmap::load_pcx_bytes(reader)?; let output = temp_bitmap.to_rgba(&palette); Ok((output, palette)) @@ -322,9 +302,10 @@ pub mod tests { let ref_pixels = load_raw_indexed(test_file(Path::new("small.bin")).as_path())?; let dp2_palette = Palette::load_from_file( - test_assets_file(Path::new("dp2.pal")).as_path(), - PaletteFormat::Normal - ).unwrap(); + test_assets_file(Path::new("dp2.pal")).as_path(), // + PaletteFormat::Normal, + ) + .unwrap(); let (bmp, palette) = IndexedBitmap::load_pcx_file(test_file(Path::new("small.pcx")).as_path())?; assert_eq!(16, bmp.width()); diff --git a/ggdt/src/graphics/bitmap/png.rs b/ggdt/src/graphics/bitmap/png.rs index 2076a12..4574c4a 100644 --- a/ggdt/src/graphics/bitmap/png.rs +++ b/ggdt/src/graphics/bitmap/png.rs @@ -7,12 +7,12 @@ use std::path::Path; use byteorder::{BigEndian, ReadBytesExt, WriteBytesExt}; use thiserror::Error; -use crate::graphics::bitmap::Bitmap; use crate::graphics::bitmap::indexed::IndexedBitmap; use crate::graphics::bitmap::rgb::RgbaBitmap; -use crate::graphics::palette::Palette; +use crate::graphics::bitmap::Bitmap; +use crate::graphics::color::{from_argb32, from_rgb32, to_argb32, to_rgb32}; +use crate::graphics::palette::{Palette, PaletteError, PaletteFormat}; use crate::graphics::Pixel; -use crate::prelude::{from_argb32, from_rgb32, PaletteError, PaletteFormat, to_argb32, to_rgb32}; use crate::utils::bytes::ReadFixedLengthByteArray; const PNG_HEADER: [u8; 8] = [0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a]; @@ -76,7 +76,7 @@ struct ChunkHeader { impl ChunkHeader { pub fn read(reader: &mut T) -> Result { Ok(ChunkHeader { - size: reader.read_u32::()?, + size: reader.read_u32::()?, // name: reader.read_bytes()?, }) } @@ -102,7 +102,7 @@ struct ImageHeaderChunk { impl ImageHeaderChunk { pub fn read(reader: &mut T) -> Result { Ok(ImageHeaderChunk { - width: reader.read_u32::()?, + width: reader.read_u32::()?, // height: reader.read_u32::()?, bpp: reader.read_u8()?, format: ColorFormat::from(reader.read_u8()?)?, @@ -234,7 +234,7 @@ impl ScanlineBuffer { // unsigned arithmetic modulo 256 *except* for the average calculation itself which must not overflow! let average = (a + b) / 2; byte.wrapping_add(average as u8) - }, + } Filter::Paeth => { let a = if x < self.bpp { 0 } else { self.current[x - self.bpp] } as i16; let b = if y < 1 { 0 } else { self.previous[x] } as i16; @@ -252,7 +252,7 @@ impl ScanlineBuffer { }; // all of the above must not overflow. however, this last part is unsigned arithmetic modulo 256 byte.wrapping_add(value) - }, + } } } @@ -307,10 +307,13 @@ impl ScanlinePixelConverter for ScanlineBuffer { fn read_pixel(&mut self, x: usize, _palette: &Option) -> Result { let offset = x * self.bpp; match self.format { - ColorFormat::IndexedColor => { - Ok(self.current[offset]) - }, - _ => return Err(PngError::BadFile(format!("Unsupported color format for this PixelReader: {:?}", self.format))), + ColorFormat::IndexedColor => Ok(self.current[offset]), + _ => { + return Err(PngError::BadFile(format!( + "Unsupported color format for this PixelReader: {:?}", + self.format + ))) + } } } @@ -320,8 +323,13 @@ impl ScanlinePixelConverter for ScanlineBuffer { ColorFormat::IndexedColor => { self.current[offset] = pixel; Ok(()) - }, - _ => return Err(PngError::BadFile(format!("Unsupported color format for this PixelReader: {:?}", self.format))), + } + _ => { + return Err(PngError::BadFile(format!( + "Unsupported color format for this PixelReader: {:?}", + self.format + ))) + } } } } @@ -335,23 +343,30 @@ impl ScanlinePixelConverter for ScanlineBuffer { if let Some(palette) = palette { Ok(palette[color]) } else { - return Err(PngError::BadFile(String::from("No palette to map indexed-color format pixels to RGBA format destination"))); + return Err(PngError::BadFile(String::from( + "No palette to map indexed-color format pixels to RGBA format destination", + ))); } - }, + } ColorFormat::RGB => { let r = self.current[offset]; let g = self.current[offset + 1]; let b = self.current[offset + 2]; Ok(to_rgb32(r, g, b)) - }, + } ColorFormat::RGBA => { let r = self.current[offset]; let g = self.current[offset + 1]; let b = self.current[offset + 2]; let a = self.current[offset + 3]; Ok(to_argb32(a, r, g, b)) - }, - _ => return Err(PngError::BadFile(format!("Unsupported color format for this PixelReader: {:?}", self.format))), + } + _ => { + return Err(PngError::BadFile(format!( + "Unsupported color format for this PixelReader: {:?}", + self.format + ))) + } } } @@ -364,7 +379,7 @@ impl ScanlinePixelConverter for ScanlineBuffer { self.current[offset + 1] = g; self.current[offset + 2] = b; Ok(()) - }, + } ColorFormat::RGBA => { let (a, r, g, b) = from_argb32(pixel); self.current[offset] = r; @@ -372,20 +387,22 @@ impl ScanlinePixelConverter for ScanlineBuffer { self.current[offset + 2] = b; self.current[offset + 3] = a; Ok(()) - }, - _ => return Err(PngError::BadFile(format!("Unsupported color format for this PixelReader: {:?}", self.format))), + } + _ => { + return Err(PngError::BadFile(format!( + "Unsupported color format for this PixelReader: {:?}", + self.format + ))) + } } } } - -fn load_png_bytes( - reader: &mut Reader -) -> Result<(Bitmap, Option), PngError> +fn load_png_bytes(reader: &mut Reader) -> Result<(Bitmap, Option), PngError> where Reader: ReadBytesExt, PixelType: Pixel, - ScanlineBuffer: ScanlinePixelConverter + ScanlineBuffer: ScanlinePixelConverter, { let header: [u8; 8] = reader.read_bytes()?; if header != PNG_HEADER { @@ -409,9 +426,10 @@ where if ihdr.bpp != 8 { return Err(PngError::BadFile(String::from("Unsupported color bit depth."))); } - if ihdr.format != ColorFormat::IndexedColor + if ihdr.format != ColorFormat::IndexedColor // . && ihdr.format != ColorFormat::RGB - && ihdr.format != ColorFormat::RGBA { + && ihdr.format != ColorFormat::RGBA + { return Err(PngError::BadFile(String::from("Unsupported pixel color format."))); } if ihdr.compression != 0 { @@ -438,7 +456,7 @@ where let chunk_bytes = read_chunk_data(reader, &chunk_header)?; let num_colors = (chunk_header.size / 3) as usize; Some(Palette::load_num_colors_from_bytes( - &mut chunk_bytes.as_slice(), + &mut chunk_bytes.as_slice(), // PaletteFormat::Normal, num_colors, )?) @@ -473,7 +491,9 @@ where scanline_buffer.read_line(&mut deflater)?; for x in 0..ihdr.width as usize { let pixel = scanline_buffer.read_pixel(x, &palette)?; - unsafe { output.set_pixel_unchecked(x as i32, y as i32, pixel); } + unsafe { + output.set_pixel_unchecked(x as i32, y as i32, pixel); + } } } @@ -563,9 +583,7 @@ where } impl IndexedBitmap { - pub fn load_png_bytes( - reader: &mut T, - ) -> Result<(IndexedBitmap, Option), PngError> { + pub fn load_png_bytes(reader: &mut T) -> Result<(IndexedBitmap, Option), PngError> { load_png_bytes(reader) } @@ -575,11 +593,7 @@ impl IndexedBitmap { Self::load_png_bytes(&mut reader) } - pub fn to_png_bytes( - &self, - writer: &mut T, - palette: &Palette, - ) -> Result<(), PngError> { + pub fn to_png_bytes(&self, writer: &mut T, palette: &Palette) -> Result<(), PngError> { write_png_bytes(writer, &self, ColorFormat::IndexedColor, Some(palette)) } @@ -591,9 +605,7 @@ impl IndexedBitmap { } impl RgbaBitmap { - pub fn load_png_bytes( - reader: &mut T, - ) -> Result<(RgbaBitmap, Option), PngError> { + pub fn load_png_bytes(reader: &mut T) -> Result<(RgbaBitmap, Option), PngError> { load_png_bytes(reader) } @@ -603,11 +615,7 @@ impl RgbaBitmap { Self::load_png_bytes(&mut reader) } - pub fn to_png_bytes( - &self, - writer: &mut T, - format: PngFormat, - ) -> Result<(), PngError> { + pub fn to_png_bytes(&self, writer: &mut T, format: PngFormat) -> Result<(), PngError> { write_png_bytes( writer, &self, @@ -619,10 +627,7 @@ impl RgbaBitmap { ) } - pub fn to_png_file( - &self, path: &Path, - format: PngFormat, - ) -> Result<(), PngError> { + pub fn to_png_file(&self, path: &Path, format: PngFormat) -> Result<(), PngError> { let f = File::create(path)?; let mut writer = BufWriter::new(f); self.to_png_bytes(&mut writer, format) @@ -946,4 +951,4 @@ pub mod tests { Ok(()) } -} \ No newline at end of file +} diff --git a/ggdt/src/graphics/bitmap/primitives.rs b/ggdt/src/graphics/bitmap/primitives.rs index adc78c9..5ecf741 100644 --- a/ggdt/src/graphics/bitmap/primitives.rs +++ b/ggdt/src/graphics/bitmap/primitives.rs @@ -73,7 +73,7 @@ impl Bitmap { /// Renders a single character using the font given. #[inline] pub fn print_char(&mut self, ch: char, x: i32, y: i32, opts: FontRenderOpts, font: &T) { - font.character(ch) + font.character(ch) // .draw(self, x, y, opts); } @@ -287,7 +287,7 @@ impl Bitmap { swap(&mut y1, &mut y2); } let mut region = Rect { - x: x1, + x: x1, // y: y1, width: (x2 - x1 + 1) as u32, height: (y2 - y1 + 1) as u32, @@ -345,7 +345,7 @@ impl Bitmap { mut y1: i32, mut x2: i32, mut y2: i32, - pixel_fn: impl Fn(PixelType) -> PixelType + pixel_fn: impl Fn(PixelType) -> PixelType, ) { // note: need to manually do all this instead of just relying on Rect::from_coords (which // could otherwise figure all this out for us) mainly just because we need the post-swap @@ -357,7 +357,7 @@ impl Bitmap { swap(&mut y1, &mut y2); } let mut region = Rect { - x: x1, + x: x1, // y: y1, width: (x2 - x1 + 1) as u32, height: (y2 - y1 + 1) as u32, @@ -394,7 +394,8 @@ impl Bitmap { // bottom line, only if y2 was originally within bounds if y2 == region.bottom() { unsafe { - let dest = &mut self.pixels_at_mut_unchecked(horiz_draw_x, region.bottom())[0..horiz_draw_width as usize]; + let dest = + &mut self.pixels_at_mut_unchecked(horiz_draw_x, region.bottom())[0..horiz_draw_width as usize]; for pixel in dest.iter_mut() { *pixel = pixel_fn(*pixel); } @@ -450,7 +451,7 @@ impl Bitmap { y1: i32, x2: i32, y2: i32, - pixel_fn: impl Fn(PixelType) -> PixelType + pixel_fn: impl Fn(PixelType) -> PixelType, ) { let mut region = Rect::from_coords(x1, y1, x2, y2); if region.clamp_to(&self.clip_region) { diff --git a/ggdt/src/graphics/bitmap/rgb/blit.rs b/ggdt/src/graphics/bitmap/rgb/blit.rs index ae702d6..77e2383 100644 --- a/ggdt/src/graphics/bitmap/rgb/blit.rs +++ b/ggdt/src/graphics/bitmap/rgb/blit.rs @@ -1,7 +1,7 @@ use crate::graphics::bitmap::blit::{clip_blit, per_pixel_blit, per_pixel_flipped_blit, per_pixel_rotozoom_blit}; use crate::graphics::bitmap::rgb::RgbaBitmap; use crate::graphics::bitmapatlas::BitmapAtlas; -use crate::graphics::color::{BlendFunction, tint_argb32}; +use crate::graphics::color::{tint_argb32, BlendFunction}; use crate::math::rect::Rect; #[derive(Clone, PartialEq)] @@ -120,7 +120,11 @@ impl RgbaBitmap { tint_color: u32, ) { per_pixel_blit( - self, src, src_region, dest_x, dest_y, + self, // + src, + src_region, + dest_x, + dest_y, |src_pixels, dest_pixels| { *dest_pixels = tint_argb32(*src_pixels, tint_color); }, @@ -136,7 +140,11 @@ impl RgbaBitmap { blend: BlendFunction, ) { per_pixel_blit( - self, src, src_region, dest_x, dest_y, + self, // + src, + src_region, + dest_x, + dest_y, |src_pixels, dest_pixels| { *dest_pixels = blend.blend(*src_pixels, *dest_pixels); }, @@ -154,7 +162,13 @@ impl RgbaBitmap { blend: BlendFunction, ) { per_pixel_flipped_blit( - self, src, src_region, dest_x, dest_y, horizontal_flip, vertical_flip, + self, // + src, + src_region, + dest_x, + dest_y, + horizontal_flip, + vertical_flip, |src_pixels, dest_pixels| { *dest_pixels = blend.blend(*src_pixels, *dest_pixels); }, @@ -172,7 +186,13 @@ impl RgbaBitmap { tint_color: u32, ) { per_pixel_flipped_blit( - self, src, src_region, dest_x, dest_y, horizontal_flip, vertical_flip, + self, // + src, + src_region, + dest_x, + dest_y, + horizontal_flip, + vertical_flip, |src_pixels, dest_pixels| { *dest_pixels = tint_argb32(*src_pixels, tint_color); }, @@ -189,7 +209,11 @@ impl RgbaBitmap { tint_color: u32, ) { per_pixel_blit( - self, src, src_region, dest_x, dest_y, + self, // + src, + src_region, + dest_x, + dest_y, |src_pixels, dest_pixels| { if *src_pixels != transparent_color { *dest_pixels = tint_argb32(*src_pixels, tint_color); @@ -208,7 +232,11 @@ impl RgbaBitmap { blend: BlendFunction, ) { per_pixel_blit( - self, src, src_region, dest_x, dest_y, + self, // + src, + src_region, + dest_x, + dest_y, |src_pixels, dest_pixels| { if *src_pixels != transparent_color { *dest_pixels = blend.blend(*src_pixels, *dest_pixels); @@ -229,7 +257,13 @@ impl RgbaBitmap { tint_color: u32, ) { per_pixel_flipped_blit( - self, src, src_region, dest_x, dest_y, horizontal_flip, vertical_flip, + self, // + src, + src_region, + dest_x, + dest_y, + horizontal_flip, + vertical_flip, |src_pixels, dest_pixels| { if *src_pixels != transparent_color { *dest_pixels = tint_argb32(*src_pixels, tint_color); @@ -250,7 +284,13 @@ impl RgbaBitmap { blend: BlendFunction, ) { per_pixel_flipped_blit( - self, src, src_region, dest_x, dest_y, horizontal_flip, vertical_flip, + self, // + src, + src_region, + dest_x, + dest_y, + horizontal_flip, + vertical_flip, |src_pixels, dest_pixels| { if *src_pixels != transparent_color { *dest_pixels = blend.blend(*src_pixels, *dest_pixels); @@ -271,7 +311,14 @@ impl RgbaBitmap { tint_color: u32, ) { per_pixel_rotozoom_blit( - self, src, src_region, dest_x, dest_y, angle, scale_x, scale_y, + self, // + src, + src_region, + dest_x, + dest_y, + angle, + scale_x, + scale_y, |src_pixel, dest_bitmap, draw_x, draw_y| { dest_bitmap.set_pixel(draw_x, draw_y, tint_argb32(src_pixel, tint_color)); }, @@ -290,7 +337,14 @@ impl RgbaBitmap { blend: BlendFunction, ) { per_pixel_rotozoom_blit( - self, src, src_region, dest_x, dest_y, angle, scale_x, scale_y, + self, // + src, + src_region, + dest_x, + dest_y, + angle, + scale_x, + scale_y, |src_pixel, dest_bitmap, draw_x, draw_y| { if let Some(dest_pixel) = dest_bitmap.get_pixel(draw_x, draw_y) { dest_bitmap.set_pixel(draw_x, draw_y, blend.blend(src_pixel, dest_pixel)) @@ -312,7 +366,14 @@ impl RgbaBitmap { tint_color: u32, ) { per_pixel_rotozoom_blit( - self, src, src_region, dest_x, dest_y, angle, scale_x, scale_y, + self, // + src, + src_region, + dest_x, + dest_y, + angle, + scale_x, + scale_y, |src_pixel, dest_bitmap, draw_x, draw_y| { if transparent_color != src_pixel { dest_bitmap.set_pixel(draw_x, draw_y, tint_argb32(src_pixel, tint_color)); @@ -334,7 +395,14 @@ impl RgbaBitmap { blend: BlendFunction, ) { per_pixel_rotozoom_blit( - self, src, src_region, dest_x, dest_y, angle, scale_x, scale_y, + self, // + src, + src_region, + dest_x, + dest_y, + angle, + scale_x, + scale_y, |src_pixel, dest_bitmap, draw_x, draw_y| { if transparent_color != src_pixel { if let Some(dest_pixel) = dest_bitmap.get_pixel(draw_x, draw_y) { @@ -364,23 +432,23 @@ impl RgbaBitmap { match method { // rotozoom blits internally clip per-pixel right now ... and regardless, the normal // clip_blit() function wouldn't handle a rotozoom blit destination region anyway ... - RotoZoom { .. } => {}, - RotoZoomTinted { .. } => {}, - RotoZoomBlended { .. } => {}, - RotoZoomTransparent { .. } => {}, - RotoZoomTransparentTinted { .. } => {}, - RotoZoomTransparentBlended { .. } => {}, + RotoZoom { .. } => {} + RotoZoomTinted { .. } => {} + RotoZoomBlended { .. } => {} + RotoZoomTransparent { .. } => {} + RotoZoomTransparentTinted { .. } => {} + RotoZoomTransparentBlended { .. } => {} // set axis flip arguments - SolidFlipped { horizontal_flip, vertical_flip, .. } | - SolidFlippedTinted { horizontal_flip, vertical_flip, .. } | - SolidFlippedBlended { horizontal_flip, vertical_flip, .. } | - TransparentFlipped { horizontal_flip, vertical_flip, .. } | - TransparentFlippedTinted { horizontal_flip, vertical_flip, .. } | - TransparentFlippedBlended { horizontal_flip, vertical_flip, .. } | - TransparentFlippedSingle { horizontal_flip, vertical_flip, .. } => { + SolidFlipped { horizontal_flip, vertical_flip, .. } + | SolidFlippedTinted { horizontal_flip, vertical_flip, .. } + | SolidFlippedBlended { horizontal_flip, vertical_flip, .. } + | TransparentFlipped { horizontal_flip, vertical_flip, .. } + | TransparentFlippedTinted { horizontal_flip, vertical_flip, .. } + | TransparentFlippedBlended { horizontal_flip, vertical_flip, .. } + | TransparentFlippedSingle { horizontal_flip, vertical_flip, .. } => { if !clip_blit( - self.clip_region(), + self.clip_region(), // &mut src_region, &mut dest_x, &mut dest_y, @@ -394,7 +462,7 @@ impl RgbaBitmap { // otherwise clip like normal! _ => { if !clip_blit( - self.clip_region(), + self.clip_region(), // &mut src_region, &mut dest_x, &mut dest_y, @@ -500,7 +568,14 @@ impl RgbaBitmap { } #[inline] - pub unsafe fn blit_atlas_unchecked(&mut self, method: RgbaBlitMethod, src: &BitmapAtlas, index: usize, x: i32, y: i32) { + pub unsafe fn blit_atlas_unchecked( + &mut self, + method: RgbaBlitMethod, + src: &BitmapAtlas, + index: usize, + x: i32, + y: i32, + ) { if let Some(src_region) = src.get(index) { self.blit_region_unchecked(method, src.bitmap(), &src_region, x, y); } diff --git a/ggdt/src/graphics/bitmap/rgb/mod.rs b/ggdt/src/graphics/bitmap/rgb/mod.rs index 2b56f2c..1bb0427 100644 --- a/ggdt/src/graphics/bitmap/rgb/mod.rs +++ b/ggdt/src/graphics/bitmap/rgb/mod.rs @@ -30,23 +30,19 @@ impl RgbaBitmap { Some("pcx") => { let (bmp, palette) = Self::load_pcx_file(path)?; Ok((bmp, Some(palette))) - }, + } Some("gif") => { let (bmp, palette) = Self::load_gif_file(path)?; Ok((bmp, Some(palette))) - }, + } Some("iff") | Some("lbm") | Some("pbm") | Some("bbm") => { let (bmp, palette) = Self::load_iff_file(path)?; Ok((bmp, Some(palette))) } - _ => Err(BitmapError::UnknownFileType(String::from( - "Unrecognized file extension", - ))), + _ => Err(BitmapError::UnknownFileType(String::from("Unrecognized file extension"))), } } else { - Err(BitmapError::UnknownFileType(String::from( - "No file extension", - ))) + Err(BitmapError::UnknownFileType(String::from("No file extension"))) } } } diff --git a/ggdt/src/graphics/bitmap/rgb/primitives.rs b/ggdt/src/graphics/bitmap/rgb/primitives.rs index 1a1d8e4..78da751 100644 --- a/ggdt/src/graphics/bitmap/rgb/primitives.rs +++ b/ggdt/src/graphics/bitmap/rgb/primitives.rs @@ -7,10 +7,9 @@ impl RgbaBitmap { #[inline] pub fn set_blended_pixel(&mut self, x: i32, y: i32, color: u32, blend: BlendFunction) { self.set_custom_pixel( - x, y, - |dest_color| { - blend.blend(color, dest_color) - } + x, // + y, + |dest_color| blend.blend(color, dest_color), ); } @@ -20,20 +19,20 @@ impl RgbaBitmap { #[inline] pub unsafe fn set_blended_pixel_unchecked(&mut self, x: i32, y: i32, color: u32, blend: BlendFunction) { self.set_custom_pixel_unchecked( - x, y, - |dest_color| { - blend.blend(color, dest_color) - } + x, // + y, + |dest_color| blend.blend(color, dest_color), ); } /// Draws a line from x1,y1 to x2,y2 by blending the drawn pixels using the given blend function. pub fn blended_line(&mut self, x1: i32, y1: i32, x2: i32, y2: i32, color: u32, blend: BlendFunction) { self.line_custom( - x1, y1, x2, y2, - |dest_color| { - blend.blend(color, dest_color) - } + x1, // + y1, + x2, + y2, + |dest_color| blend.blend(color, dest_color), ); } @@ -41,10 +40,10 @@ impl RgbaBitmap { /// blend function. pub fn blended_horiz_line(&mut self, x1: i32, x2: i32, y: i32, color: u32, blend: BlendFunction) { self.horiz_line_custom( - x1, x2, y, - |dest_color| { - blend.blend(color, dest_color) - } + x1, // + x2, + y, + |dest_color| blend.blend(color, dest_color), ); } @@ -52,10 +51,10 @@ impl RgbaBitmap { /// function. pub fn blended_vert_line(&mut self, x: i32, y1: i32, y2: i32, color: u32, blend: BlendFunction) { self.vert_line_custom( - x, y1, y2, - |dest_color| { - blend.blend(color, dest_color) - } + x, // + y1, + y2, + |dest_color| blend.blend(color, dest_color), ); } @@ -64,10 +63,11 @@ impl RgbaBitmap { /// The box is drawn by blending the drawn pixels using the given blend function. pub fn blended_rect(&mut self, x1: i32, y1: i32, x2: i32, y2: i32, color: u32, blend: BlendFunction) { self.rect_custom( - x1, y1, x2, y2, - |dest_color| { - blend.blend(color, dest_color) - } + x1, // + y1, + x2, + y2, + |dest_color| blend.blend(color, dest_color), ); } @@ -76,10 +76,11 @@ impl RgbaBitmap { /// filled box is draw by blending the drawn pixels using the given blend function. pub fn blended_filled_rect(&mut self, x1: i32, y1: i32, x2: i32, y2: i32, color: u32, blend: BlendFunction) { self.filled_rect_custom( - x1, y1, x2, y2, - |dest_color| { - blend.blend(color, dest_color) - } + x1, // + y1, + x2, + y2, + |dest_color| blend.blend(color, dest_color), ); } -} \ No newline at end of file +} diff --git a/ggdt/src/graphics/bitmapatlas.rs b/ggdt/src/graphics/bitmapatlas.rs index 175917f..877f1af 100644 --- a/ggdt/src/graphics/bitmapatlas.rs +++ b/ggdt/src/graphics/bitmapatlas.rs @@ -14,7 +14,7 @@ pub enum BitmapAtlasError { #[derive(Debug, Clone, Eq, PartialEq)] pub struct BitmapAtlas where - BitmapType: GeneralBitmap + BitmapType: GeneralBitmap, { bitmap: BitmapType, bounds: Rect, @@ -23,12 +23,12 @@ where impl BitmapAtlas where - BitmapType: GeneralBitmap + BitmapType: GeneralBitmap, { pub fn new(bitmap: BitmapType) -> Self { let bounds = bitmap.full_bounds(); BitmapAtlas { - bitmap, + bitmap, // bounds, tiles: Vec::new(), } @@ -43,11 +43,7 @@ where Ok(self.tiles.len() - 1) } - pub fn add_grid( - &mut self, - tile_width: u32, - tile_height: u32, - ) -> Result { + pub fn add_grid(&mut self, tile_width: u32, tile_height: u32) -> Result { if self.bounds.width < tile_width || self.bounds.height < tile_height { return Err(BitmapAtlasError::OutOfBounds); } @@ -121,7 +117,8 @@ where impl Index for BitmapAtlas where - BitmapType: GeneralBitmap { + BitmapType: GeneralBitmap, +{ type Output = Rect; #[inline] @@ -153,22 +150,13 @@ pub mod tests { assert_eq!(rect, atlas[1]); assert_eq!(2, atlas.len()); - assert_matches!( - atlas.add(Rect::new(56, 0, 16, 16)), - Err(BitmapAtlasError::OutOfBounds) - ); + assert_matches!(atlas.add(Rect::new(56, 0, 16, 16)), Err(BitmapAtlasError::OutOfBounds)); assert_eq!(2, atlas.len()); - assert_matches!( - atlas.add(Rect::new(-8, 4, 16, 16)), - Err(BitmapAtlasError::OutOfBounds) - ); + assert_matches!(atlas.add(Rect::new(-8, 4, 16, 16)), Err(BitmapAtlasError::OutOfBounds)); assert_eq!(2, atlas.len()); - assert_matches!( - atlas.add(Rect::new(0, 0, 128, 128)), - Err(BitmapAtlasError::OutOfBounds) - ); + assert_matches!(atlas.add(Rect::new(0, 0, 128, 128)), Err(BitmapAtlasError::OutOfBounds)); assert_eq!(2, atlas.len()); } diff --git a/ggdt/src/graphics/blendmap.rs b/ggdt/src/graphics/blendmap.rs index a1b045c..64eb592 100644 --- a/ggdt/src/graphics/blendmap.rs +++ b/ggdt/src/graphics/blendmap.rs @@ -46,7 +46,7 @@ pub struct BlendMap { impl std::fmt::Debug for BlendMap { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - f.debug_struct("BlendMap") + f.debug_struct("BlendMap") // .field("start_color", &self.start_color) .field("end_color", &self.end_color) .finish_non_exhaustive() @@ -58,17 +58,10 @@ impl BlendMap { /// range only. The `start_color` and `end_color` may also be equal to create a blend map with /// only a single source color mapping. pub fn new(start_color: u8, end_color: u8) -> Self { - let (start_color, end_color) = if start_color > end_color { - (end_color, start_color) - } else { - (start_color, end_color) - }; + let (start_color, end_color) = + if start_color > end_color { (end_color, start_color) } else { (start_color, end_color) }; let num_colors = (end_color - start_color) as usize + 1; - BlendMap { - start_color, - end_color, - mapping: vec![[0u8; 256]; num_colors].into_boxed_slice(), - } + BlendMap { start_color, end_color, mapping: vec![[0u8; 256]; num_colors].into_boxed_slice() } } /// Creates and returns a new [`BlendMap`] with a single source color mapping which maps to @@ -77,11 +70,8 @@ impl BlendMap { /// like a simple translucency effect. The starting color in the gradient is used as the source /// color mapping in the returned blend map. pub fn new_colorized_map(gradient_start: u8, gradient_end: u8, palette: &Palette) -> Self { - let (gradient_start, gradient_end) = if gradient_start > gradient_end { - (gradient_end, gradient_start) - } else { - (gradient_start, gradient_end) - }; + let (gradient_start, gradient_end) = + if gradient_start > gradient_end { (gradient_end, gradient_start) } else { (gradient_start, gradient_end) }; let gradient_size = gradient_end - gradient_start + 1; let source_color = gradient_start; @@ -89,11 +79,13 @@ impl BlendMap { for idx in 0..=255 { let (r, g, b) = from_rgb32(palette[idx]); let lit = (luminance(r, g, b) * 255.0) as u8; - blend_map.set_mapping( - source_color, - idx as u8, - (gradient_size - 1) - (lit / (256 / gradient_size as u32) as u8) + source_color, - ).unwrap(); + blend_map + .set_mapping( + source_color, + idx as u8, + (gradient_size - 1) - (lit / (256 / gradient_size as u32) as u8) + source_color, + ) + .unwrap(); } blend_map } @@ -108,11 +100,8 @@ impl BlendMap { palette: &Palette, f: impl Fn(f32, f32) -> f32, ) -> BlendMap { - let (gradient_start, gradient_end) = if gradient_start > gradient_end { - (gradient_end, gradient_start) - } else { - (gradient_start, gradient_end) - }; + let (gradient_start, gradient_end) = + if gradient_start > gradient_end { (gradient_end, gradient_start) } else { (gradient_start, gradient_end) }; let gradient_size = gradient_end - gradient_start + 1; let mut blend_map = BlendMap::new(0, 255); @@ -123,11 +112,13 @@ impl BlendMap { let (r, g, b) = from_rgb32(palette[dest_color]); let destination_luminance = luminance(r, g, b); let weight = (f(source_luminance, destination_luminance) * 255.0) as u8; - blend_map.set_mapping( - source_color, - dest_color, - (gradient_size - 1).wrapping_sub(weight / (256 / gradient_size as u32) as u8) + gradient_start, - ).unwrap(); + blend_map + .set_mapping( + source_color, + dest_color, + (gradient_size - 1).wrapping_sub(weight / (256 / gradient_size as u32) as u8) + gradient_start, + ) + .unwrap(); } } blend_map @@ -223,12 +214,19 @@ impl BlendMap { } } - /// Sets a series of blend color mappings for the given source color and starting from a base /// destination color. - pub fn set_mappings(&mut self, source_color: u8, base_dest_color: u8, mappings: [u8; N]) -> Result<(), BlendMapError> { + pub fn set_mappings( + &mut self, + source_color: u8, + base_dest_color: u8, + mappings: [u8; N], + ) -> Result<(), BlendMapError> { if let Some(mapping) = self.get_mapping_mut(source_color) { - assert!((base_dest_color as usize + N - 1) <= 255, "mappings array is too big for the remaining colors available"); + assert!( + (base_dest_color as usize + N - 1) <= 255, + "mappings array is too big for the remaining colors available" + ); for index in 0..N { mapping[index + base_dest_color as usize] = mappings[index]; } @@ -272,7 +270,7 @@ impl BlendMap { } Ok(BlendMap { - start_color, + start_color, // end_color, mapping: maps.into_boxed_slice(), }) @@ -368,10 +366,7 @@ mod tests { mapping[0] = 217; assert_eq!(Some(217), blend_map.blend(17, 0)); - assert_matches!( - blend_map.set_mapping(64, 1, 2), - Err(BlendMapError::InvalidSourceColor(64)) - ); + assert_matches!(blend_map.set_mapping(64, 1, 2), Err(BlendMapError::InvalidSourceColor(64))); Ok(()) } @@ -386,11 +381,7 @@ mod tests { assert_ok!(blend_map.set_mappings(2, 4, [1, 2, 3, 4, 5, 6, 7, 8])); let mapping = blend_map.get_mapping(2).unwrap(); - assert_eq!( - [0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 0, 0, 0, 0], - mapping[0..16] - ); - + assert_eq!([0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 0, 0, 0, 0], mapping[0..16]); Ok(()) } @@ -413,4 +404,4 @@ mod tests { Ok(()) } -} \ No newline at end of file +} diff --git a/ggdt/src/graphics/color.rs b/ggdt/src/graphics/color.rs index a3f5952..8c9aabf 100644 --- a/ggdt/src/graphics/color.rs +++ b/ggdt/src/graphics/color.rs @@ -44,7 +44,7 @@ impl BlendFunction { TintedBlend(tint) => { let tinted = tint_argb32(src, *tint); blend_argb32(tinted, dest) - }, + } } } } @@ -257,9 +257,9 @@ fn srgb_to_linearized(color_channel: u8) -> f32 { /// Calculates the given sRGB color's luminance, returned as a value between 0.0 and 1.0. pub fn luminance(r: u8, g: u8, b: u8) -> f32 { - (LUMINANCE_RED * srgb_to_linearized(r)) + - (LUMINANCE_GREEN * srgb_to_linearized(g)) + - (LUMINANCE_BLUE * srgb_to_linearized(b)) + (LUMINANCE_RED * srgb_to_linearized(r)) + + (LUMINANCE_GREEN * srgb_to_linearized(g)) + + (LUMINANCE_BLUE * srgb_to_linearized(b)) } fn brightness(mut luminance: f32) -> f32 { diff --git a/ggdt/src/graphics/font.rs b/ggdt/src/graphics/font.rs index cceadf2..09f4e8c 100644 --- a/ggdt/src/graphics/font.rs +++ b/ggdt/src/graphics/font.rs @@ -62,7 +62,7 @@ impl Character for BitmaskCharacter { fn draw(&self, dest: &mut Bitmap, x: i32, y: i32, opts: FontRenderOpts) where - PixelType: Pixel + PixelType: Pixel, { // out of bounds check if ((x + self.bounds.width as i32) < dest.clip_region().x) @@ -104,7 +104,7 @@ pub struct BitmaskFont { impl std::fmt::Debug for BitmaskFont { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - f.debug_struct("BitmaskFont") + f.debug_struct("BitmaskFont") // .field("line_height", &self.line_height) .field("space_width", &self.space_width) .field("characters.len()", &self.characters.len()) @@ -134,12 +134,7 @@ impl BitmaskFont { let character = BitmaskCharacter { bytes: buffer, // bounds are filled in below. ugh. - bounds: Rect { - x: 0, - y: 0, - width: 0, - height: 0, - }, + bounds: Rect { x: 0, y: 0, width: 0, height: 0 }, }; characters.push(character); } @@ -158,7 +153,7 @@ impl BitmaskFont { let space_width = characters[' ' as usize].bounds.width as u8; Ok(BitmaskFont { - characters: characters.into_boxed_slice(), + characters: characters.into_boxed_slice(), // line_height, space_width, }) @@ -208,7 +203,7 @@ impl Font for BitmaskFont { fn measure(&self, text: &str, _opts: FontRenderOpts) -> (u32, u32) where - PixelType: Pixel + PixelType: Pixel, { if text.is_empty() { return (0, 0); diff --git a/ggdt/src/graphics/mod.rs b/ggdt/src/graphics/mod.rs index 9d96b8a..e9e296f 100644 --- a/ggdt/src/graphics/mod.rs +++ b/ggdt/src/graphics/mod.rs @@ -2,9 +2,9 @@ use num_traits::{PrimInt, Unsigned}; pub mod bitmap; pub mod bitmapatlas; +pub mod blendmap; pub mod color; pub mod font; -pub mod blendmap; pub mod palette; pub mod prelude; diff --git a/ggdt/src/graphics/palette.rs b/ggdt/src/graphics/palette.rs index 28f1069..debd3a8 100644 --- a/ggdt/src/graphics/palette.rs +++ b/ggdt/src/graphics/palette.rs @@ -14,8 +14,8 @@ use crate::utils::abs_diff; const NUM_COLORS: usize = 256; /// Common trait to represent a range of indexed colour values. -pub trait ColorRange: RangeBounds + Iterator {} -impl ColorRange for T where T: RangeBounds + Iterator {} +pub trait ColorRange: RangeBounds + Iterator {} +impl ColorRange for T where T: RangeBounds + Iterator {} pub static VGA_PALETTE_BYTES: &[u8] = include_bytes!("../../assets/vga.pal"); @@ -30,10 +30,7 @@ fn to_6bit(value: u8) -> u8 { } // vga bios (0-63) format -fn read_palette_6bit( - reader: &mut T, - num_colors: usize, -) -> Result<[u32; NUM_COLORS], PaletteError> { +fn read_palette_6bit(reader: &mut T, num_colors: usize) -> Result<[u32; NUM_COLORS], PaletteError> { if num_colors > NUM_COLORS { return Err(PaletteError::OutOfRange(num_colors)); } @@ -42,11 +39,7 @@ fn read_palette_6bit( let r = reader.read_u8()?; let g = reader.read_u8()?; let b = reader.read_u8()?; - let color = to_rgb32( - from_6bit(r), - from_6bit(g), - from_6bit(b) - ); + let color = to_rgb32(from_6bit(r), from_6bit(g), from_6bit(b)); colors[i as usize] = color; } Ok(colors) @@ -70,10 +63,7 @@ fn write_palette_6bit( } // normal (0-255) format -fn read_palette_8bit( - reader: &mut T, - num_colors: usize, -) -> Result<[u32; NUM_COLORS], PaletteError> { +fn read_palette_8bit(reader: &mut T, num_colors: usize) -> Result<[u32; NUM_COLORS], PaletteError> { if num_colors > NUM_COLORS { return Err(PaletteError::OutOfRange(num_colors)); } @@ -131,17 +121,13 @@ pub struct Palette { impl Palette { /// Creates a new Palette with all black colors. pub fn new() -> Palette { - Palette { - colors: [0; NUM_COLORS], - } + Palette { colors: [0; NUM_COLORS] } } /// Creates a new Palette with all initial colors having the RGB values specified. pub fn new_with_default(r: u8, g: u8, b: u8) -> Palette { let rgb = to_rgb32(r, g, b); - Palette { - colors: [rgb; NUM_COLORS], - } + Palette { colors: [rgb; NUM_COLORS] } } /// Creates a new Palette, pre-loaded with the default VGA BIOS colors. @@ -168,10 +154,7 @@ impl Palette { /// /// * `reader`: the reader to load the palette from /// * `format`: the format that the palette data is expected to be in - pub fn load_from_bytes( - reader: &mut T, - format: PaletteFormat, - ) -> Result { + pub fn load_from_bytes(reader: &mut T, format: PaletteFormat) -> Result { let colors = match format { PaletteFormat::Vga => read_palette_6bit(reader, NUM_COLORS)?, PaletteFormat::Normal => read_palette_8bit(reader, NUM_COLORS)?, @@ -241,11 +224,7 @@ impl Palette { /// /// * `writer`: the writer to write palette data to /// * `format`: the format to write the palette data in - pub fn to_bytes( - &self, - writer: &mut T, - format: PaletteFormat, - ) -> Result<(), PaletteError> { + pub fn to_bytes(&self, writer: &mut T, format: PaletteFormat) -> Result<(), PaletteError> { match format { PaletteFormat::Vga => write_palette_6bit(writer, &self.colors, NUM_COLORS), PaletteFormat::Normal => write_palette_8bit(writer, &self.colors, NUM_COLORS), @@ -314,14 +293,7 @@ impl Palette { /// * `step`: the amount to "step" by towards the target RGB values /// /// returns: true if the color has reached the target RGB values, false otherwise - pub fn fade_color_toward_rgb( - &mut self, - color: u8, - target_r: u8, - target_g: u8, - target_b: u8, - step: u8, - ) -> bool { + pub fn fade_color_toward_rgb(&mut self, color: u8, target_r: u8, target_g: u8, target_b: u8, step: u8) -> bool { let mut modified = false; let (mut r, mut g, mut b) = from_rgb32(self.colors[color as usize]); @@ -407,12 +379,7 @@ impl Palette { /// /// returns: true if all of the colors in the range have reached the RGB values from the other /// target palette, false otherwise - pub fn fade_colors_toward_palette( - &mut self, - colors: T, - palette: &Palette, - step: u8, - ) -> bool { + pub fn fade_colors_toward_palette(&mut self, colors: T, palette: &Palette, step: u8) -> bool { let mut all_faded = true; for color in colors { let (r, g, b) = from_rgb32(palette[color]); @@ -481,9 +448,7 @@ impl Palette { // this comparison method is using the sRGB Euclidean formula described here: // https://en.wikipedia.org/wiki/Color_difference - let distance = abs_diff(this_r, r) as u32 - + abs_diff(this_g, g) as u32 - + abs_diff(this_b, b) as u32; + let distance = abs_diff(this_r, r) as u32 + abs_diff(this_g, g) as u32 + abs_diff(this_b, b) as u32; if distance < closest_distance { closest = index as u8; @@ -597,10 +562,7 @@ mod tests { // vga rgb format (6-bit) - let palette = Palette::load_from_file( - test_file(Path::new("vga.pal")).as_path(), - PaletteFormat::Vga - )?; + let palette = Palette::load_from_file(test_file(Path::new("vga.pal")).as_path(), PaletteFormat::Vga)?; assert_ega_colors(&palette); let save_path = tmp_dir.path().join("test_save_vga_format.pal"); @@ -610,10 +572,7 @@ mod tests { // normal rgb format (8-bit) - let palette = Palette::load_from_file( - test_file(Path::new("dp2.pal")).as_path(), - PaletteFormat::Normal - )?; + let palette = Palette::load_from_file(test_file(Path::new("dp2.pal")).as_path(), PaletteFormat::Normal)?; let save_path = tmp_dir.path().join("test_save_normal_format.pal"); palette.to_file(&save_path, PaletteFormat::Normal)?; @@ -629,11 +588,8 @@ mod tests { // vga rgb format (6-bit) - let palette = Palette::load_num_colors_from_file( - test_file(Path::new("ega_6bit.pal")).as_path(), - PaletteFormat::Vga, - 16 - )?; + let palette = + Palette::load_num_colors_from_file(test_file(Path::new("ega_6bit.pal")).as_path(), PaletteFormat::Vga, 16)?; assert_ega_colors(&palette); let save_path = tmp_dir.path().join("test_save_vga_format_16_colors.pal"); @@ -646,7 +602,7 @@ mod tests { let palette = Palette::load_num_colors_from_file( test_file(Path::new("ega_8bit.pal")).as_path(), PaletteFormat::Normal, - 16 + 16, )?; let save_path = tmp_dir.path().join("test_save_normal_format_16_colors.pal"); diff --git a/ggdt/src/graphics/prelude.rs b/ggdt/src/graphics/prelude.rs index de85824..ff26141 100644 --- a/ggdt/src/graphics/prelude.rs +++ b/ggdt/src/graphics/prelude.rs @@ -1,29 +1,21 @@ pub use crate::graphics::{ - *, + // bitmap::{ - *, blit::*, general::*, gif::*, iff::*, - indexed::{ - *, - blit::*, - primitives::*, - }, + indexed::{blit::*, primitives::*, *}, pcx::*, png::*, primitives::*, - rgb::{ - *, - blit::*, - primitives::*, - }, + rgb::{blit::*, primitives::*, *}, + *, }, bitmapatlas::*, blendmap::*, color::*, font::*, palette::*, + *, }; - diff --git a/ggdt/src/lib.rs b/ggdt/src/lib.rs index c860769..3383b4d 100644 --- a/ggdt/src/lib.rs +++ b/ggdt/src/lib.rs @@ -53,4 +53,4 @@ pub mod tests { } Ok(buffer.into_boxed_slice()) } -} \ No newline at end of file +} diff --git a/ggdt/src/math/circle.rs b/ggdt/src/math/circle.rs index e96039f..bae666e 100644 --- a/ggdt/src/math/circle.rs +++ b/ggdt/src/math/circle.rs @@ -1,5 +1,5 @@ -use crate::math::{distance_between, distance_squared_between}; use crate::math::vector2::Vector2; +use crate::math::{distance_between, distance_squared_between}; /// Represents a 2D circle, using integer center coordinates and radius. #[derive(Debug, Copy, Clone, Eq, PartialEq)] @@ -38,7 +38,7 @@ impl Circle { let center_y = (max_y - min_y) / 2.0; Some(Circle { - x: center_x as i32, + x: center_x as i32, // y: center_y as i32, radius: radius as u32, }) @@ -52,18 +52,15 @@ impl Circle { /// Returns true if the given point is contained within the bounds of this circle. pub fn contains_point(&self, x: i32, y: i32) -> bool { - let distance_squared = - distance_squared_between(self.x as f32, self.y as f32, x as f32, y as f32); + let distance_squared = distance_squared_between(self.x as f32, self.y as f32, x as f32, y as f32); let radius_squared = (self.radius * self.radius) as f32; distance_squared <= radius_squared } /// Returns true if the given circle at least partially overlaps the bounds of this circle. pub fn overlaps(&self, other: &Circle) -> bool { - let distance_squared = - distance_squared_between(self.x as f32, self.y as f32, other.x as f32, other.y as f32); - let minimum_distance_squared = - ((self.radius + other.radius) * (self.radius + other.radius)) as f32; + let distance_squared = distance_squared_between(self.x as f32, self.y as f32, other.x as f32, other.y as f32); + let minimum_distance_squared = ((self.radius + other.radius) * (self.radius + other.radius)) as f32; distance_squared <= minimum_distance_squared } } diff --git a/ggdt/src/math/matrix3x3.rs b/ggdt/src/math/matrix3x3.rs index 7e0c3c1..ca4040a 100644 --- a/ggdt/src/math/matrix3x3.rs +++ b/ggdt/src/math/matrix3x3.rs @@ -20,8 +20,13 @@ impl Matrix3x3 { pub const M32: usize = 5; pub const M33: usize = 8; + #[rustfmt::skip] pub const IDENTITY: Matrix3x3 = Matrix3x3 { - m: [1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0], + m: [ + 1.0, 0.0, 0.0, + 0.0, 1.0, 0.0, + 0.0, 0.0, 1.0 + ], }; /// Returns a new identity matrix. @@ -208,18 +213,7 @@ impl Matrix3x3 { /// Sets all of the elements of this matrix. #[inline] - pub fn set( - &mut self, - m11: f32, - m12: f32, - m13: f32, - m21: f32, - m22: f32, - m23: f32, - m31: f32, - m32: f32, - m33: f32, - ) { + pub fn set(&mut self, m11: f32, m12: f32, m13: f32, m21: f32, m22: f32, m23: f32, m31: f32, m32: f32, m33: f32) { self.m[Matrix3x3::M11] = m11; self.m[Matrix3x3::M12] = m12; self.m[Matrix3x3::M13] = m13; diff --git a/ggdt/src/math/mod.rs b/ggdt/src/math/mod.rs index fd80dfa..ab49f55 100644 --- a/ggdt/src/math/mod.rs +++ b/ggdt/src/math/mod.rs @@ -53,8 +53,8 @@ pub fn nearly_equal(a: f32, b: f32, epsilon: f32) -> bool { /// * `t`: the amount to interpolate between the two values, specified as a fraction #[inline] pub fn lerp(a: N, b: N, t: f32) -> N - where - N: Copy + Add + Sub + Mul, +where + N: Copy + Add + Sub + Mul, { a + (b - a) * t } @@ -69,8 +69,8 @@ pub fn lerp(a: N, b: N, t: f32) -> N /// * `lerp_result`: the interpolated value between the range given #[inline] pub fn inverse_lerp(a: N, b: N, lerp_result: N) -> f32 - where - N: Copy + Sub + Div, +where + N: Copy + Sub + Div, { (lerp_result - a) / (b - a) } @@ -84,8 +84,8 @@ pub fn inverse_lerp(a: N, b: N, lerp_result: N) -> f32 /// * `t`: the amount to interpolate between the two values, specified as a fraction #[inline] pub fn smooth_lerp(a: N, b: N, t: f32) -> N - where - N: Copy + Add + Sub + Mul, +where + N: Copy + Add + Sub + Mul, { let t = t.clamp(0.0, 1.0); lerp(a, b, (t * t) * (3.0 - (2.0 * t))) @@ -104,8 +104,8 @@ pub fn smooth_lerp(a: N, b: N, t: f32) -> N /// * `new_max`: new max value (high end of range) #[inline] pub fn scale_range(value: N, old_min: N, old_max: N, new_min: N, new_max: N) -> N - where - N: Copy + Add + Sub + Mul + Div, +where + N: Copy + Add + Sub + Mul + Div, { (new_max - new_min) * (value - old_min) / (old_max - old_min) + new_min } diff --git a/ggdt/src/math/prelude.rs b/ggdt/src/math/prelude.rs index 97bed9e..8510901 100644 --- a/ggdt/src/math/prelude.rs +++ b/ggdt/src/math/prelude.rs @@ -1,8 +1,8 @@ pub use crate::math::{ - *, + // circle::*, matrix3x3::*, rect::*, vector2::*, + *, }; - diff --git a/ggdt/src/math/rect.rs b/ggdt/src/math/rect.rs index 5e8a237..fe632b2 100644 --- a/ggdt/src/math/rect.rs +++ b/ggdt/src/math/rect.rs @@ -10,12 +10,7 @@ pub struct Rect { impl Rect { #[inline] pub fn new(x: i32, y: i32, width: u32, height: u32) -> Rect { - Rect { - x, - y, - width, - height, - } + Rect { x, y, width, height } } /// Creates a new rect from the specified coordinates. Automatically determines if the @@ -51,7 +46,7 @@ impl Rect { } Rect { - x, + x, // y, width: width as u32, height: height as u32, @@ -165,21 +160,11 @@ pub mod tests { #[test] pub fn right_and_left() { - let rect = Rect { - x: 5, - y: 6, - width: 16, - height: 12, - }; + let rect = Rect { x: 5, y: 6, width: 16, height: 12 }; assert_eq!(20, rect.right()); assert_eq!(17, rect.bottom()); - let rect = Rect { - x: -11, - y: -25, - width: 16, - height: 12, - }; + let rect = Rect { x: -11, y: -25, width: 16, height: 12 }; assert_eq!(4, rect.right()); assert_eq!(-14, rect.bottom()); } diff --git a/ggdt/src/math/vector2.rs b/ggdt/src/math/vector2.rs index 7727835..6c8f7ae 100644 --- a/ggdt/src/math/vector2.rs +++ b/ggdt/src/math/vector2.rs @@ -1,7 +1,7 @@ use std::ops::{Add, AddAssign, Div, DivAssign, Mul, MulAssign, Neg, Sub, SubAssign}; -use crate::math::{angle_between, angle_to_direction, nearly_equal, NearlyEqual}; use crate::math::matrix3x3::Matrix3x3; +use crate::math::{angle_between, angle_to_direction, nearly_equal, NearlyEqual}; /// Represents a 2D vector and provides common methods for vector math. #[derive(Debug, Copy, Clone, PartialEq)] @@ -68,7 +68,7 @@ impl Vector2 { pub fn normalize(&self) -> Vector2 { let inverse_length = 1.0 / self.length(); Vector2 { - x: self.x * inverse_length, + x: self.x * inverse_length, // y: self.y * inverse_length, } } @@ -104,7 +104,7 @@ impl Neg for Vector2 { #[inline] fn neg(self) -> Self::Output { Vector2 { - x: -self.x, + x: -self.x, // y: -self.y, } } @@ -116,7 +116,7 @@ impl Add for Vector2 { #[inline] fn add(self, rhs: Self) -> Self::Output { Vector2 { - x: self.x + rhs.x, + x: self.x + rhs.x, // y: self.y + rhs.y, } } @@ -136,7 +136,7 @@ impl Sub for Vector2 { #[inline] fn sub(self, rhs: Self) -> Self::Output { Vector2 { - x: self.x - rhs.x, + x: self.x - rhs.x, // y: self.y - rhs.y, } } @@ -156,7 +156,7 @@ impl Mul for Vector2 { #[inline] fn mul(self, rhs: Self) -> Self::Output { Vector2 { - x: self.x * rhs.x, + x: self.x * rhs.x, // y: self.y * rhs.y, } } @@ -176,7 +176,7 @@ impl Div for Vector2 { #[inline] fn div(self, rhs: Self) -> Self::Output { Vector2 { - x: self.x / rhs.x, + x: self.x / rhs.x, // y: self.y / rhs.y, } } @@ -196,7 +196,7 @@ impl Mul for Vector2 { #[inline] fn mul(self, rhs: f32) -> Self::Output { Vector2 { - x: self.x * rhs, + x: self.x * rhs, // y: self.y * rhs, } } @@ -216,7 +216,7 @@ impl Div for Vector2 { #[inline] fn div(self, rhs: f32) -> Self::Output { Vector2 { - x: self.x / rhs, + x: self.x / rhs, // y: self.y / rhs, } } diff --git a/ggdt/src/prelude.rs b/ggdt/src/prelude.rs index c95f0ce..a74be7b 100644 --- a/ggdt/src/prelude.rs +++ b/ggdt/src/prelude.rs @@ -1,5 +1,5 @@ pub use crate::{ - *, + // audio::prelude::*, base::*, entities::*, @@ -9,10 +9,8 @@ pub use crate::{ states::*, system::{ prelude::*, - res::{ - dos_like::*, - standard::*, - }, + res::{dos_like::*, standard::*}, }, utils::prelude::*, + *, }; diff --git a/ggdt/src/states/mod.rs b/ggdt/src/states/mod.rs index 1d91a28..b5290e8 100644 --- a/ggdt/src/states/mod.rs +++ b/ggdt/src/states/mod.rs @@ -81,7 +81,7 @@ impl std::fmt::Debug for StateContainer { impl StateContainer { pub fn new(state: Box>) -> Self { StateContainer { - current_state: State::Dead, + current_state: State::Dead, // pending_state_change: None, state, } @@ -133,9 +133,7 @@ impl StateContainer { self.change_state(State::TransitionIn, context); Ok(()) } - _ => { - Err(StateError::AppStateInvalidState(self.current_state)) - } + _ => Err(StateError::AppStateInvalidState(self.current_state)), } } @@ -185,13 +183,16 @@ pub struct States { impl std::fmt::Debug for States { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - f.debug_struct("States") + f.debug_struct("States") // .field("states", &self.states) .field("command", &self.command) - .field("pending_state", match self.pending_state { - Some(..) => &"Some(..)", - None => &"None", - }) + .field( + "pending_state", + match self.pending_state { + Some(..) => &"Some(..)", + None => &"None", + }, + ) .field("pop_count", &self.pop_count) .finish_non_exhaustive() } @@ -200,7 +201,7 @@ impl std::fmt::Debug for States { impl States { pub fn new() -> Self { States { - states: VecDeque::new(), + states: VecDeque::new(), // command: None, pending_state: None, pop_count: None, @@ -400,8 +401,12 @@ impl States { // state has indicated it is done transitioning, so we can switch it to whatever // it was transitioning to match to { - TransitionTo::Paused => { state.pending_pause(); } - TransitionTo::Dead => { state.pending_kill(); } + TransitionTo::Paused => { + state.pending_pause(); + } + TransitionTo::Dead => { + state.pending_kill(); + } } } } @@ -444,7 +449,6 @@ impl States { } } - #[cfg(test)] mod tests { use claim::*; @@ -465,9 +469,7 @@ mod tests { impl TestContext { pub fn new() -> Self { - TestContext { - log: Vec::new() - } + TestContext { log: Vec::new() } } pub fn log(&mut self, entry: LogEntry) { @@ -490,7 +492,7 @@ mod tests { impl TestState { pub fn new(id: u32) -> Self { TestState { - id, + id, // counter: 0, transition_length: 0, } @@ -498,7 +500,7 @@ mod tests { pub fn new_with_transition_length(id: u32, transition_length: u32) -> Self { TestState { - id, + id, // counter: 0, transition_length, } @@ -562,7 +564,7 @@ mod tests { assert_eq!( context.take_log(), vec![ - StateChange(FOO, Pending, Dead), + StateChange(FOO, Pending, Dead), // StateChange(FOO, TransitionIn, Pending), Transition(FOO, TransitionIn), Update(FOO, TransitionIn), @@ -574,7 +576,7 @@ mod tests { assert_eq!( context.take_log(), vec![ - StateChange(FOO, Active, TransitionIn), + StateChange(FOO, Active, TransitionIn), // Update(FOO, Active), Render(FOO, Active), ] @@ -588,7 +590,7 @@ mod tests { assert_eq!( context.take_log(), vec![ - StateChange(FOO, TransitionOut(TransitionTo::Dead), Active), + StateChange(FOO, TransitionOut(TransitionTo::Dead), Active), // Transition(FOO, TransitionOut(TransitionTo::Dead)), Update(FOO, TransitionOut(TransitionTo::Dead)), Render(FOO, TransitionOut(TransitionTo::Dead)), @@ -623,7 +625,7 @@ mod tests { assert_eq!( context.take_log(), vec![ - StateChange(FOO, Pending, Dead), + StateChange(FOO, Pending, Dead), // StateChange(FOO, TransitionIn, Pending), Transition(FOO, TransitionIn), Update(FOO, TransitionIn), @@ -636,7 +638,7 @@ mod tests { assert_eq!( context.take_log(), vec![ - Transition(FOO, TransitionIn), + Transition(FOO, TransitionIn), // Update(FOO, TransitionIn), Render(FOO, TransitionIn), ] @@ -647,7 +649,7 @@ mod tests { assert_eq!( context.take_log(), vec![ - StateChange(FOO, Active, TransitionIn), + StateChange(FOO, Active, TransitionIn), // Update(FOO, Active), Render(FOO, Active), ] @@ -661,7 +663,7 @@ mod tests { assert_eq!( context.take_log(), vec![ - StateChange(FOO, TransitionOut(TransitionTo::Dead), Active), + StateChange(FOO, TransitionOut(TransitionTo::Dead), Active), // Transition(FOO, TransitionOut(TransitionTo::Dead)), Update(FOO, TransitionOut(TransitionTo::Dead)), Render(FOO, TransitionOut(TransitionTo::Dead)), @@ -673,7 +675,7 @@ mod tests { assert_eq!( context.take_log(), vec![ - Transition(FOO, TransitionOut(TransitionTo::Dead)), + Transition(FOO, TransitionOut(TransitionTo::Dead)), // Update(FOO, TransitionOut(TransitionTo::Dead)), Render(FOO, TransitionOut(TransitionTo::Dead)), ] @@ -710,7 +712,7 @@ mod tests { assert_eq!( context.take_log(), vec![ - StateChange(FIRST, Pending, Dead), + StateChange(FIRST, Pending, Dead), // StateChange(FIRST, TransitionIn, Pending), Transition(FIRST, TransitionIn), Update(FIRST, TransitionIn), @@ -722,7 +724,7 @@ mod tests { assert_eq!( context.take_log(), vec![ - StateChange(FIRST, Active, TransitionIn), + StateChange(FIRST, Active, TransitionIn), // Update(FIRST, Active), Render(FIRST, Active), ] @@ -737,7 +739,7 @@ mod tests { assert_eq!( context.take_log(), vec![ - StateChange(FIRST, TransitionOut(TransitionTo::Paused), Active), + StateChange(FIRST, TransitionOut(TransitionTo::Paused), Active), // Transition(FIRST, TransitionOut(TransitionTo::Paused)), Update(FIRST, TransitionOut(TransitionTo::Paused)), Render(FIRST, TransitionOut(TransitionTo::Paused)), @@ -749,7 +751,7 @@ mod tests { assert_eq!( context.take_log(), vec![ - StateChange(FIRST, Paused, TransitionOut(TransitionTo::Paused)), + StateChange(FIRST, Paused, TransitionOut(TransitionTo::Paused)), // StateChange(SECOND, Pending, Dead), StateChange(SECOND, TransitionIn, Pending), Transition(SECOND, TransitionIn), @@ -762,7 +764,7 @@ mod tests { assert_eq!( context.take_log(), vec![ - StateChange(SECOND, Active, TransitionIn), + StateChange(SECOND, Active, TransitionIn), // Update(SECOND, Active), Render(SECOND, Active), ] @@ -777,7 +779,7 @@ mod tests { assert_eq!( context.take_log(), vec![ - StateChange(SECOND, TransitionOut(TransitionTo::Dead), Active), + StateChange(SECOND, TransitionOut(TransitionTo::Dead), Active), // Transition(SECOND, TransitionOut(TransitionTo::Dead)), Update(SECOND, TransitionOut(TransitionTo::Dead)), Render(SECOND, TransitionOut(TransitionTo::Dead)), @@ -789,7 +791,7 @@ mod tests { assert_eq!( context.take_log(), vec![ - StateChange(SECOND, Dead, TransitionOut(TransitionTo::Dead)), + StateChange(SECOND, Dead, TransitionOut(TransitionTo::Dead)), // StateChange(FIRST, Resume, Paused), StateChange(FIRST, TransitionIn, Resume), Transition(FIRST, TransitionIn), @@ -802,7 +804,7 @@ mod tests { assert_eq!( context.take_log(), vec![ - StateChange(FIRST, Active, TransitionIn), + StateChange(FIRST, Active, TransitionIn), // Update(FIRST, Active), Render(FIRST, Active), ] @@ -817,7 +819,7 @@ mod tests { assert_eq!( context.take_log(), vec![ - StateChange(FIRST, TransitionOut(TransitionTo::Dead), Active), + StateChange(FIRST, TransitionOut(TransitionTo::Dead), Active), // Transition(FIRST, TransitionOut(TransitionTo::Dead)), Update(FIRST, TransitionOut(TransitionTo::Dead)), Render(FIRST, TransitionOut(TransitionTo::Dead)), @@ -854,7 +856,7 @@ mod tests { assert_eq!( context.take_log(), vec![ - StateChange(FIRST, Pending, Dead), + StateChange(FIRST, Pending, Dead), // StateChange(FIRST, TransitionIn, Pending), Transition(FIRST, TransitionIn), Update(FIRST, TransitionIn), @@ -867,7 +869,7 @@ mod tests { assert_eq!( context.take_log(), vec![ - Transition(FIRST, TransitionIn), + Transition(FIRST, TransitionIn), // Update(FIRST, TransitionIn), Render(FIRST, TransitionIn), ] @@ -878,7 +880,7 @@ mod tests { assert_eq!( context.take_log(), vec![ - StateChange(FIRST, Active, TransitionIn), + StateChange(FIRST, Active, TransitionIn), // Update(FIRST, Active), Render(FIRST, Active), ] @@ -894,7 +896,7 @@ mod tests { assert_eq!( context.take_log(), vec![ - StateChange(FIRST, TransitionOut(TransitionTo::Paused), Active), + StateChange(FIRST, TransitionOut(TransitionTo::Paused), Active), // Transition(FIRST, TransitionOut(TransitionTo::Paused)), Update(FIRST, TransitionOut(TransitionTo::Paused)), Render(FIRST, TransitionOut(TransitionTo::Paused)), @@ -906,7 +908,7 @@ mod tests { assert_eq!( context.take_log(), vec![ - Transition(FIRST, TransitionOut(TransitionTo::Paused)), + Transition(FIRST, TransitionOut(TransitionTo::Paused)), // Update(FIRST, TransitionOut(TransitionTo::Paused)), Render(FIRST, TransitionOut(TransitionTo::Paused)), ] @@ -917,7 +919,7 @@ mod tests { assert_eq!( context.take_log(), vec![ - StateChange(FIRST, Paused, TransitionOut(TransitionTo::Paused)), + StateChange(FIRST, Paused, TransitionOut(TransitionTo::Paused)), // StateChange(SECOND, Pending, Dead), StateChange(SECOND, TransitionIn, Pending), Transition(SECOND, TransitionIn), @@ -931,7 +933,7 @@ mod tests { assert_eq!( context.take_log(), vec![ - Transition(SECOND, TransitionIn), + Transition(SECOND, TransitionIn), // Update(SECOND, TransitionIn), Render(SECOND, TransitionIn), ] @@ -942,7 +944,7 @@ mod tests { assert_eq!( context.take_log(), vec![ - StateChange(SECOND, Active, TransitionIn), + StateChange(SECOND, Active, TransitionIn), // Update(SECOND, Active), Render(SECOND, Active), ] @@ -957,7 +959,7 @@ mod tests { assert_eq!( context.take_log(), vec![ - StateChange(SECOND, TransitionOut(TransitionTo::Dead), Active), + StateChange(SECOND, TransitionOut(TransitionTo::Dead), Active), // Transition(SECOND, TransitionOut(TransitionTo::Dead)), Update(SECOND, TransitionOut(TransitionTo::Dead)), Render(SECOND, TransitionOut(TransitionTo::Dead)), @@ -969,7 +971,7 @@ mod tests { assert_eq!( context.take_log(), vec![ - Transition(SECOND, TransitionOut(TransitionTo::Dead)), + Transition(SECOND, TransitionOut(TransitionTo::Dead)), // Update(SECOND, TransitionOut(TransitionTo::Dead)), Render(SECOND, TransitionOut(TransitionTo::Dead)), ] @@ -981,7 +983,7 @@ mod tests { assert_eq!( context.take_log(), vec![ - StateChange(SECOND, Dead, TransitionOut(TransitionTo::Dead)), + StateChange(SECOND, Dead, TransitionOut(TransitionTo::Dead)), // StateChange(FIRST, Resume, Paused), StateChange(FIRST, TransitionIn, Resume), Transition(FIRST, TransitionIn), @@ -995,7 +997,7 @@ mod tests { assert_eq!( context.take_log(), vec![ - Transition(FIRST, TransitionIn), + Transition(FIRST, TransitionIn), // Update(FIRST, TransitionIn), Render(FIRST, TransitionIn), ] @@ -1006,7 +1008,7 @@ mod tests { assert_eq!( context.take_log(), vec![ - StateChange(FIRST, Active, TransitionIn), + StateChange(FIRST, Active, TransitionIn), // Update(FIRST, Active), Render(FIRST, Active), ] @@ -1021,7 +1023,7 @@ mod tests { assert_eq!( context.take_log(), vec![ - StateChange(FIRST, TransitionOut(TransitionTo::Dead), Active), + StateChange(FIRST, TransitionOut(TransitionTo::Dead), Active), // Transition(FIRST, TransitionOut(TransitionTo::Dead)), Update(FIRST, TransitionOut(TransitionTo::Dead)), Render(FIRST, TransitionOut(TransitionTo::Dead)), @@ -1033,7 +1035,7 @@ mod tests { assert_eq!( context.take_log(), vec![ - Transition(FIRST, TransitionOut(TransitionTo::Dead)), + Transition(FIRST, TransitionOut(TransitionTo::Dead)), // Update(FIRST, TransitionOut(TransitionTo::Dead)), Render(FIRST, TransitionOut(TransitionTo::Dead)), ] @@ -1070,7 +1072,7 @@ mod tests { assert_eq!( context.take_log(), vec![ - StateChange(FIRST, Pending, Dead), + StateChange(FIRST, Pending, Dead), // StateChange(FIRST, TransitionIn, Pending), Transition(FIRST, TransitionIn), Update(FIRST, TransitionIn), @@ -1082,7 +1084,7 @@ mod tests { assert_eq!( context.take_log(), vec![ - StateChange(FIRST, Active, TransitionIn), + StateChange(FIRST, Active, TransitionIn), // Update(FIRST, Active), Render(FIRST, Active), ] @@ -1097,7 +1099,7 @@ mod tests { assert_eq!( context.take_log(), vec![ - StateChange(FIRST, TransitionOut(TransitionTo::Paused), Active), + StateChange(FIRST, TransitionOut(TransitionTo::Paused), Active), // Transition(FIRST, TransitionOut(TransitionTo::Paused)), Update(FIRST, TransitionOut(TransitionTo::Paused)), Render(FIRST, TransitionOut(TransitionTo::Paused)), @@ -1109,7 +1111,7 @@ mod tests { assert_eq!( context.take_log(), vec![ - StateChange(FIRST, Paused, TransitionOut(TransitionTo::Paused)), + StateChange(FIRST, Paused, TransitionOut(TransitionTo::Paused)), // StateChange(SECOND, Pending, Dead), StateChange(SECOND, TransitionIn, Pending), Transition(SECOND, TransitionIn), @@ -1122,7 +1124,7 @@ mod tests { assert_eq!( context.take_log(), vec![ - StateChange(SECOND, Active, TransitionIn), + StateChange(SECOND, Active, TransitionIn), // Update(SECOND, Active), Render(SECOND, Active), ] @@ -1137,7 +1139,7 @@ mod tests { assert_eq!( context.take_log(), vec![ - StateChange(SECOND, TransitionOut(TransitionTo::Dead), Active), + StateChange(SECOND, TransitionOut(TransitionTo::Dead), Active), // Transition(SECOND, TransitionOut(TransitionTo::Dead)), Update(SECOND, TransitionOut(TransitionTo::Dead)), Render(SECOND, TransitionOut(TransitionTo::Dead)), @@ -1149,7 +1151,7 @@ mod tests { assert_eq!( context.take_log(), vec![ - StateChange(SECOND, Dead, TransitionOut(TransitionTo::Dead)), + StateChange(SECOND, Dead, TransitionOut(TransitionTo::Dead)), // StateChange(FIRST, Dead, Paused), ] ); @@ -1161,7 +1163,6 @@ mod tests { Ok(()) } - #[test] fn swap_states() -> Result<(), StateError> { use LogEntry::*; @@ -1182,7 +1183,7 @@ mod tests { assert_eq!( context.take_log(), vec![ - StateChange(FIRST, Pending, Dead), + StateChange(FIRST, Pending, Dead), // StateChange(FIRST, TransitionIn, Pending), Transition(FIRST, TransitionIn), Update(FIRST, TransitionIn), @@ -1194,7 +1195,7 @@ mod tests { assert_eq!( context.take_log(), vec![ - StateChange(FIRST, Active, TransitionIn), + StateChange(FIRST, Active, TransitionIn), // Update(FIRST, Active), Render(FIRST, Active), ] @@ -1209,7 +1210,7 @@ mod tests { assert_eq!( context.take_log(), vec![ - StateChange(FIRST, TransitionOut(TransitionTo::Dead), Active), + StateChange(FIRST, TransitionOut(TransitionTo::Dead), Active), // Transition(FIRST, TransitionOut(TransitionTo::Dead)), Update(FIRST, TransitionOut(TransitionTo::Dead)), Render(FIRST, TransitionOut(TransitionTo::Dead)), @@ -1221,7 +1222,7 @@ mod tests { assert_eq!( context.take_log(), vec![ - StateChange(FIRST, Dead, TransitionOut(TransitionTo::Dead)), + StateChange(FIRST, Dead, TransitionOut(TransitionTo::Dead)), // StateChange(SECOND, Pending, Dead), StateChange(SECOND, TransitionIn, Pending), Transition(SECOND, TransitionIn), @@ -1234,7 +1235,7 @@ mod tests { assert_eq!( context.take_log(), vec![ - StateChange(SECOND, Active, TransitionIn), + StateChange(SECOND, Active, TransitionIn), // Update(SECOND, Active), Render(SECOND, Active), ] @@ -1248,7 +1249,7 @@ mod tests { assert_eq!( context.take_log(), vec![ - StateChange(SECOND, TransitionOut(TransitionTo::Dead), Active), + StateChange(SECOND, TransitionOut(TransitionTo::Dead), Active), // Transition(SECOND, TransitionOut(TransitionTo::Dead)), Update(SECOND, TransitionOut(TransitionTo::Dead)), Render(SECOND, TransitionOut(TransitionTo::Dead)), @@ -1275,7 +1276,7 @@ mod tests { impl SelfPushPopState { pub fn new(id: u32, push_after: Option, pop_after: u32) -> Self { SelfPushPopState { - id, + id, // counter: 0, push_after, pop_after, @@ -1311,7 +1312,6 @@ mod tests { } } - #[test] fn state_can_push_and_pop_states_itself() -> Result<(), StateError> { use LogEntry::*; @@ -1332,7 +1332,7 @@ mod tests { assert_eq!( context.take_log(), vec![ - StateChange(FIRST, Pending, Dead), + StateChange(FIRST, Pending, Dead), // StateChange(FIRST, TransitionIn, Pending), Transition(FIRST, TransitionIn), Update(FIRST, TransitionIn), @@ -1344,7 +1344,7 @@ mod tests { assert_eq!( context.take_log(), vec![ - StateChange(FIRST, Active, TransitionIn), + StateChange(FIRST, Active, TransitionIn), // Update(FIRST, Active), Render(FIRST, Active), ] @@ -1355,7 +1355,7 @@ mod tests { assert_eq!( context.take_log(), vec![ - Update(FIRST, Active), + Update(FIRST, Active), // Render(FIRST, Active), ] ); @@ -1366,7 +1366,7 @@ mod tests { assert_eq!( context.take_log(), vec![ - StateChange(FIRST, TransitionOut(TransitionTo::Paused), Active), + StateChange(FIRST, TransitionOut(TransitionTo::Paused), Active), // Transition(FIRST, TransitionOut(TransitionTo::Paused)), Update(FIRST, TransitionOut(TransitionTo::Paused)), Render(FIRST, TransitionOut(TransitionTo::Paused)), @@ -1377,7 +1377,7 @@ mod tests { assert_eq!( context.take_log(), vec![ - StateChange(FIRST, Paused, TransitionOut(TransitionTo::Paused)), + StateChange(FIRST, Paused, TransitionOut(TransitionTo::Paused)), // StateChange(SECOND, Pending, Dead), StateChange(SECOND, TransitionIn, Pending), Transition(SECOND, TransitionIn), @@ -1390,7 +1390,7 @@ mod tests { assert_eq!( context.take_log(), vec![ - StateChange(SECOND, Active, TransitionIn), + StateChange(SECOND, Active, TransitionIn), // Update(SECOND, Active), Render(SECOND, Active), ] @@ -1401,7 +1401,7 @@ mod tests { assert_eq!( context.take_log(), vec![ - Update(SECOND, Active), + Update(SECOND, Active), // Render(SECOND, Active), ] ); @@ -1412,7 +1412,7 @@ mod tests { assert_eq!( context.take_log(), vec![ - StateChange(SECOND, TransitionOut(TransitionTo::Dead), Active), + StateChange(SECOND, TransitionOut(TransitionTo::Dead), Active), // Transition(SECOND, TransitionOut(TransitionTo::Dead)), Update(SECOND, TransitionOut(TransitionTo::Dead)), Render(SECOND, TransitionOut(TransitionTo::Dead)), @@ -1424,7 +1424,7 @@ mod tests { assert_eq!( context.take_log(), vec![ - StateChange(SECOND, Dead, TransitionOut(TransitionTo::Dead)), + StateChange(SECOND, Dead, TransitionOut(TransitionTo::Dead)), // StateChange(FIRST, Resume, Paused), StateChange(FIRST, TransitionIn, Resume), Transition(FIRST, TransitionIn), @@ -1437,7 +1437,7 @@ mod tests { assert_eq!( context.take_log(), vec![ - StateChange(FIRST, Active, TransitionIn), + StateChange(FIRST, Active, TransitionIn), // Update(FIRST, Active), Render(FIRST, Active), ] @@ -1448,7 +1448,7 @@ mod tests { assert_eq!( context.take_log(), vec![ - Update(FIRST, Active), + Update(FIRST, Active), // Render(FIRST, Active), ] ); @@ -1459,7 +1459,7 @@ mod tests { assert_eq!( context.take_log(), vec![ - StateChange(FIRST, TransitionOut(TransitionTo::Dead), Active), + StateChange(FIRST, TransitionOut(TransitionTo::Dead), Active), // Transition(FIRST, TransitionOut(TransitionTo::Dead)), Update(FIRST, TransitionOut(TransitionTo::Dead)), Render(FIRST, TransitionOut(TransitionTo::Dead)), @@ -1494,7 +1494,7 @@ mod tests { assert_eq!( context.take_log(), vec![ - StateChange(FOO, Pending, Dead), + StateChange(FOO, Pending, Dead), // StateChange(FOO, TransitionIn, Pending), Transition(FOO, TransitionIn), Update(FOO, TransitionIn), @@ -1510,7 +1510,7 @@ mod tests { assert_eq!( context.take_log(), vec![ - StateChange(FOO, Active, TransitionIn), + StateChange(FOO, Active, TransitionIn), // Update(FOO, Active), Render(FOO, Active), ] @@ -1524,7 +1524,7 @@ mod tests { assert_eq!( context.take_log(), vec![ - StateChange(FOO, TransitionOut(TransitionTo::Dead), Active), + StateChange(FOO, TransitionOut(TransitionTo::Dead), Active), // Transition(FOO, TransitionOut(TransitionTo::Dead)), Update(FOO, TransitionOut(TransitionTo::Dead)), Render(FOO, TransitionOut(TransitionTo::Dead)), diff --git a/ggdt/src/system/event.rs b/ggdt/src/system/event.rs index 38ffb78..fcf6a31 100644 --- a/ggdt/src/system/event.rs +++ b/ggdt/src/system/event.rs @@ -58,33 +58,33 @@ impl From for WindowEvent { } bitflags! { - pub struct KeyModifiers: u16 { - const NOMOD = 0x0000; - const LSHIFTMOD = 0x0001; - const RSHIFTMOD = 0x0002; - const LCTRLMOD = 0x0040; - const RCTRLMOD = 0x0080; - const LALTMOD = 0x0100; - const RALTMOD = 0x0200; - const LGUIMOD = 0x0400; - const RGUIMOD = 0x0800; - const NUMMOD = 0x1000; - const CAPSMOD = 0x2000; - const MODEMOD = 0x4000; - const RESERVEDMOD = 0x8000; - } + pub struct KeyModifiers: u16 { + const NOMOD = 0x0000; + const LSHIFTMOD = 0x0001; + const RSHIFTMOD = 0x0002; + const LCTRLMOD = 0x0040; + const RCTRLMOD = 0x0080; + const LALTMOD = 0x0100; + const RALTMOD = 0x0200; + const LGUIMOD = 0x0400; + const RGUIMOD = 0x0800; + const NUMMOD = 0x1000; + const CAPSMOD = 0x2000; + const MODEMOD = 0x4000; + const RESERVEDMOD = 0x8000; + } } #[derive(Debug, Clone, PartialEq)] pub enum KeyboardEvent { KeyUp { - keycode: Option, + keycode: Option, // scancode: Option, keymod: KeyModifiers, repeat: bool, }, KeyDown { - keycode: Option, + keycode: Option, // scancode: Option, keymod: KeyModifiers, repeat: bool, @@ -94,20 +94,20 @@ pub enum KeyboardEvent { #[derive(Debug, Clone, PartialEq)] pub enum MouseEvent { MouseMotion { - x: i32, + x: i32, // y: i32, x_delta: i32, y_delta: i32, buttons: MouseButtons, }, MouseButtonDown { - x: i32, + x: i32, // y: i32, button: MouseButton, clicks: u8, }, MouseButtonUp { - x: i32, + x: i32, // y: i32, button: MouseButton, clicks: u8, @@ -168,20 +168,10 @@ impl From for SystemEvent { }) } sdl2::event::Event::MouseButtonDown { mouse_btn, clicks, x, y, .. } => { - SystemEvent::Mouse(MouseEvent::MouseButtonDown { - x, - y, - clicks, - button: mouse_btn.into(), - }) + SystemEvent::Mouse(MouseEvent::MouseButtonDown { x, y, clicks, button: mouse_btn.into() }) } sdl2::event::Event::MouseButtonUp { mouse_btn, clicks, x, y, .. } => { - SystemEvent::Mouse(MouseEvent::MouseButtonUp { - x, - y, - clicks, - button: mouse_btn.into(), - }) + SystemEvent::Mouse(MouseEvent::MouseButtonUp { x, y, clicks, button: mouse_btn.into() }) } _ => SystemEvent::Unimplemented, @@ -218,9 +208,7 @@ pub struct SystemEventPump { impl SystemEventPump { pub fn from(pump: sdl2::EventPump) -> Self { - SystemEventPump { - sdl_event_pump: pump, - } + SystemEventPump { sdl_event_pump: pump } } /// Returns an iterator over [`SystemEvent`]s that have been generated since the last time diff --git a/ggdt/src/system/input_devices/keyboard/codes.rs b/ggdt/src/system/input_devices/keyboard/codes.rs index d3787c3..807ee43 100644 --- a/ggdt/src/system/input_devices/keyboard/codes.rs +++ b/ggdt/src/system/input_devices/keyboard/codes.rs @@ -480,4 +480,4 @@ impl From for Keycode { sdl2::keyboard::Keycode::Sleep => Keycode::Sleep, } } -} \ No newline at end of file +} diff --git a/ggdt/src/system/input_devices/keyboard/mod.rs b/ggdt/src/system/input_devices/keyboard/mod.rs index 695e483..0dde9d6 100644 --- a/ggdt/src/system/input_devices/keyboard/mod.rs +++ b/ggdt/src/system/input_devices/keyboard/mod.rs @@ -1,6 +1,6 @@ use crate::system::event::{KeyboardEvent, SystemEvent, SystemEventHandler}; -use crate::system::input_devices::{ButtonState, InputDevice}; use crate::system::input_devices::keyboard::scancodes::Scancode; +use crate::system::input_devices::{ButtonState, InputDevice}; pub mod codes; pub mod scancodes; @@ -21,9 +21,7 @@ pub struct Keyboard { impl Keyboard { pub fn new() -> Keyboard { - Keyboard { - keyboard: [ButtonState::Idle; MAX_KEYS], - } + Keyboard { keyboard: [ButtonState::Idle; MAX_KEYS] } /* Keyboard { keyboard: vec![ButtonState::Idle; 256].into_boxed_slice(), @@ -34,19 +32,13 @@ impl Keyboard { /// Returns true if the given key was just pressed or is being held down. #[inline] pub fn is_key_down(&self, scancode: Scancode) -> bool { - matches!( - self.keyboard[scancode as usize], - ButtonState::Pressed | ButtonState::Held - ) + matches!(self.keyboard[scancode as usize], ButtonState::Pressed | ButtonState::Held) } /// Returns true if the given key was not just pressed and is not being held down. #[inline] pub fn is_key_up(&self, scancode: Scancode) -> bool { - matches!( - self.keyboard[scancode as usize], - ButtonState::Released | ButtonState::Idle - ) + matches!(self.keyboard[scancode as usize], ButtonState::Released | ButtonState::Idle) } /// Returns true if the given key was just pressed (not being held down, yet). @@ -97,4 +89,4 @@ impl SystemEventHandler for Keyboard { _ => false, } } -} \ No newline at end of file +} diff --git a/ggdt/src/system/input_devices/keyboard/scancodes.rs b/ggdt/src/system/input_devices/keyboard/scancodes.rs index ae8b2b0..b1a3cbb 100644 --- a/ggdt/src/system/input_devices/keyboard/scancodes.rs +++ b/ggdt/src/system/input_devices/keyboard/scancodes.rs @@ -492,4 +492,4 @@ impl From for Scancode { sdl2::keyboard::Scancode::Num => Scancode::Num, } } -} \ No newline at end of file +} diff --git a/ggdt/src/system/input_devices/mouse/buttons.rs b/ggdt/src/system/input_devices/mouse/buttons.rs index 16b16ea..b1ae891 100644 --- a/ggdt/src/system/input_devices/mouse/buttons.rs +++ b/ggdt/src/system/input_devices/mouse/buttons.rs @@ -1,13 +1,13 @@ use bitflags::bitflags; bitflags! { - pub struct MouseButtons: u32 { - const LEFT_BUTTON = sdl2::mouse::MouseButton::Left as u32; - const MIDDLE_BUTTON = sdl2::mouse::MouseButton::Middle as u32; - const RIGHT_BUTTON = sdl2::mouse::MouseButton::Right as u32; - const X1 = sdl2::mouse::MouseButton::X1 as u32; - const X2 = sdl2::mouse::MouseButton::X2 as u32; - } + pub struct MouseButtons: u32 { + const LEFT_BUTTON = sdl2::mouse::MouseButton::Left as u32; + const MIDDLE_BUTTON = sdl2::mouse::MouseButton::Middle as u32; + const RIGHT_BUTTON = sdl2::mouse::MouseButton::Right as u32; + const X1 = sdl2::mouse::MouseButton::X1 as u32; + const X2 = sdl2::mouse::MouseButton::X2 as u32; + } } #[derive(Debug, Copy, Clone, Eq, PartialEq, Hash)] @@ -29,7 +29,7 @@ impl From for MouseButton { sdl2::mouse::MouseButton::Middle => MouseButton::Middle, sdl2::mouse::MouseButton::Right => MouseButton::Right, sdl2::mouse::MouseButton::X1 => MouseButton::X1, - sdl2::mouse::MouseButton::X2 => MouseButton::X2 + sdl2::mouse::MouseButton::X2 => MouseButton::X2, } } -} \ No newline at end of file +} diff --git a/ggdt/src/system/input_devices/mouse/cursor.rs b/ggdt/src/system/input_devices/mouse/cursor.rs index 3621819..91424d2 100644 --- a/ggdt/src/system/input_devices/mouse/cursor.rs +++ b/ggdt/src/system/input_devices/mouse/cursor.rs @@ -12,7 +12,7 @@ const DEFAULT_MOUSE_CURSOR_HEIGHT: usize = 16; #[derive(Debug)] pub struct MouseCursorBitmap where - BitmapType: GeneralBitmap + BitmapType: GeneralBitmap, { pub cursor: BitmapType, pub hotspot_x: u32, @@ -22,7 +22,7 @@ where pub trait DefaultMouseCursorBitmaps where - BitmapType: GeneralBitmap + BitmapType: GeneralBitmap, { fn get_default() -> MouseCursorBitmap; } @@ -32,7 +32,7 @@ where #[derive(Debug)] pub struct CustomMouseCursor where - BitmapType: GeneralBitmap + BitmapType: GeneralBitmap, { last_x: i32, last_y: i32, @@ -48,14 +48,11 @@ where impl CustomMouseCursor where Self: DefaultMouseCursorBitmaps, - BitmapType: GeneralBitmap + BitmapType: GeneralBitmap, { pub fn new() -> Self { let default_cursor = Self::get_default(); - let background = BitmapType::new( - default_cursor.cursor.width(), - default_cursor.cursor.height() - ).unwrap(); + let background = BitmapType::new(default_cursor.cursor.width(), default_cursor.cursor.height()).unwrap(); CustomMouseCursor { last_x: 0, @@ -108,7 +105,13 @@ where /// * `cursor`: the bitmap to be used to display the mouse cursor on screen /// * `hotspot_x`: the "hotspot" x coordinate /// * `hotspot_y`: the "hotspot" y coordinate. - pub fn set_mouse_cursor(&mut self, cursor: BitmapType, transparent_color: BitmapType::PixelType, hotspot_x: u32, hotspot_y: u32) { + pub fn set_mouse_cursor( + &mut self, + cursor: BitmapType, + transparent_color: BitmapType::PixelType, + hotspot_x: u32, + hotspot_y: u32, + ) { self.cursor = cursor; self.cursor_hotspot_x = hotspot_x; self.cursor_hotspot_y = hotspot_y; @@ -134,7 +137,7 @@ where #[inline] fn get_cursor_render_position(&self) -> (i32, i32) { ( - self.last_x - self.cursor_hotspot_x as i32, + self.last_x - self.cursor_hotspot_x as i32, // self.last_y - self.cursor_hotspot_y as i32, ) } @@ -167,12 +170,7 @@ where 0, ); - dest.blit( - GeneralBlitMethod::Transparent(self.cursor_transparent_color), - &self.cursor, - x, - y - ); + dest.blit(GeneralBlitMethod::Transparent(self.cursor_transparent_color), &self.cursor, x, y); } /// Restores the original destination bitmap contents where the mouse cursor bitmap was @@ -228,10 +226,8 @@ impl DefaultMouseCursorBitmaps for CustomMouseCursor for CustomMouseCursor { 0xffff00ff, 0xffff00ff, 0xffff00ff, 0xffff00ff, 0xffff00ff, 0xffff00ff, 0x00000000, 0x00000000, 0xffff00ff, 0xffff00ff, 0xffff00ff, 0xffff00ff, 0xffff00ff, 0xffff00ff, 0xffff00ff, 0xffff00ff ]; - let mut cursor = RgbaBitmap::new( - DEFAULT_MOUSE_CURSOR_WIDTH as u32, - DEFAULT_MOUSE_CURSOR_HEIGHT as u32, - ).unwrap(); + let mut cursor = + RgbaBitmap::new(DEFAULT_MOUSE_CURSOR_WIDTH as u32, DEFAULT_MOUSE_CURSOR_HEIGHT as u32).unwrap(); cursor.pixels_mut().copy_from_slice(&CURSOR_PIXELS); MouseCursorBitmap { diff --git a/ggdt/src/system/input_devices/mouse/mod.rs b/ggdt/src/system/input_devices/mouse/mod.rs index 923d6fe..f367114 100644 --- a/ggdt/src/system/input_devices/mouse/mod.rs +++ b/ggdt/src/system/input_devices/mouse/mod.rs @@ -1,6 +1,6 @@ use crate::system::event::{MouseEvent, SystemEvent, SystemEventHandler}; -use crate::system::input_devices::{ButtonState, InputDevice}; use crate::system::input_devices::mouse::buttons::{MouseButton, MouseButtons}; +use crate::system::input_devices::{ButtonState, InputDevice}; pub mod buttons; pub mod cursor; @@ -26,7 +26,7 @@ pub struct Mouse { impl Mouse { pub fn new() -> Mouse { Mouse { - x: 0, + x: 0, // y: 0, x_delta: 0, y_delta: 0, @@ -63,19 +63,13 @@ impl Mouse { /// Returns true if the given button was just pressed or is being held down. #[inline] pub fn is_button_down(&self, button: usize) -> bool { - matches!( - self.buttons[button], - ButtonState::Pressed | ButtonState::Held - ) + matches!(self.buttons[button], ButtonState::Pressed | ButtonState::Held) } /// Returns true if the given button was not just pressed and is not being held down. #[inline] pub fn is_button_up(&self, button: usize) -> bool { - matches!( - self.buttons[button], - ButtonState::Released | ButtonState::Idle - ) + matches!(self.buttons[button], ButtonState::Released | ButtonState::Idle) } /// Returns true if the given button was just pressed (not being held down, yet). @@ -125,13 +119,7 @@ impl InputDevice for Mouse { impl SystemEventHandler for Mouse { fn handle_event(&mut self, event: &SystemEvent) -> bool { match event { - SystemEvent::Mouse(MouseEvent::MouseMotion { - x, - y, - x_delta, - y_delta, - buttons, - }) => { + SystemEvent::Mouse(MouseEvent::MouseMotion { x, y, x_delta, y_delta, buttons }) => { self.x = *x; self.y = *y; self.x_delta = *x_delta; @@ -155,4 +143,4 @@ impl SystemEventHandler for Mouse { _ => false, } } -} \ No newline at end of file +} diff --git a/ggdt/src/system/mod.rs b/ggdt/src/system/mod.rs index 2d27e9e..93334cf 100644 --- a/ggdt/src/system/mod.rs +++ b/ggdt/src/system/mod.rs @@ -32,12 +32,10 @@ fn is_x11_compositor_skipping_problematic() -> bool { to check for this. */ match std::env::consts::OS { - "linux" | "freebsd" | "netbsd" | "openbsd" => { - match std::env::var("XDG_SESSION_DESKTOP") { - Ok(value) => value.eq_ignore_ascii_case("KDE"), - Err(_) => false - } - } + "linux" | "freebsd" | "netbsd" | "openbsd" => match std::env::var("XDG_SESSION_DESKTOP") { + Ok(value) => value.eq_ignore_ascii_case("KDE"), + Err(_) => false, + }, _ => false, } } @@ -140,7 +138,6 @@ impl SystemBuilder { &self, config: ConfigType, ) -> Result, SystemError> { - sdl2::hint::set("SDL_RENDER_VSYNC", if self.vsync { "1" } else { "0" }); sdl2::hint::set("SDL_MOUSE_RELATIVE_SCALING", if self.relative_mouse_scaling { "1" } else { "0" }); sdl2::hint::set("SDL_VIDEO_X11_NET_WM_BYPASS_COMPOSITOR", if self.skip_x11_compositor { "1" } else { "0" }); @@ -176,7 +173,7 @@ impl SystemBuilder { // SystemResources initialization let mut window_builder = &mut (sdl_video_subsystem.window( - self.window_title.as_str(), + self.window_title.as_str(), // 640, 480, )); @@ -190,11 +187,7 @@ impl SystemBuilder { sdl_context.mouse().show_cursor(self.show_mouse); - let system_resources = match config.build( - &sdl_video_subsystem, - &sdl_audio_subsystem, - sdl_window - ) { + let system_resources = match config.build(&sdl_video_subsystem, &sdl_audio_subsystem, sdl_window) { Ok(system_resources) => system_resources, Err(error) => return Err(SystemError::SystemResourcesError(error)), }; @@ -221,7 +214,9 @@ impl SystemBuilder { /// "virtual machine" exposed by this library. #[allow(dead_code)] pub struct System -where SystemResType: SystemResources { +where + SystemResType: SystemResources, +{ sdl_context: sdl2::Sdl, sdl_audio_subsystem: sdl2::AudioSubsystem, sdl_video_subsystem: sdl2::VideoSubsystem, @@ -238,9 +233,11 @@ where SystemResType: SystemResources { } impl std::fmt::Debug for System -where SystemResType: SystemResources { +where + SystemResType: SystemResources, +{ fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - f.debug_struct("System") + f.debug_struct("System") // .field("res", &self.res) .field("vsync", &self.vsync) .field("target_framerate", &self.target_framerate) @@ -251,7 +248,9 @@ where SystemResType: SystemResources { } impl System -where SystemResType: SystemResources { +where + SystemResType: SystemResources, +{ /// Displays the current backbuffer on to the window. If a `target_framerate` is set, this will /// attempt to apply some timing to achieve that framerate. If V-sync is enabled, that will take /// priority instead. You must call this in your application's main loop to display anything on screen. diff --git a/ggdt/src/system/prelude.rs b/ggdt/src/system/prelude.rs index 687b008..8f3b8e9 100644 --- a/ggdt/src/system/prelude.rs +++ b/ggdt/src/system/prelude.rs @@ -1,22 +1,10 @@ pub use crate::system::{ - *, - event::*, + event::*, // input_devices::{ + keyboard::{codes::*, scancodes::*, *}, + mouse::{buttons::*, cursor::*, *}, *, - keyboard::{ - *, - codes::*, - scancodes::*, - }, - mouse::{ - *, - buttons::*, - cursor::*, - }, - }, - res::{ - *, - // note: we are intentionally not including the `SystemResources` implementation modules here }, + res::*, + *, }; - diff --git a/ggdt/src/system/res/dos_like.rs b/ggdt/src/system/res/dos_like.rs index 1afa6f7..9f9de41 100644 --- a/ggdt/src/system/res/dos_like.rs +++ b/ggdt/src/system/res/dos_like.rs @@ -28,16 +28,16 @@ use byte_slice_cast::AsByteSlice; -use crate::audio::{Audio, TARGET_AUDIO_CHANNELS, TARGET_AUDIO_FREQUENCY}; use crate::audio::queue::AudioQueue; -use crate::graphics::font::BitmaskFont; +use crate::audio::{Audio, TARGET_AUDIO_CHANNELS, TARGET_AUDIO_FREQUENCY}; use crate::graphics::bitmap::indexed::IndexedBitmap; +use crate::graphics::font::BitmaskFont; use crate::graphics::palette::Palette; use crate::system::event::{SystemEvent, SystemEventHandler}; -use crate::system::input_devices::InputDevice; use crate::system::input_devices::keyboard::Keyboard; use crate::system::input_devices::mouse::cursor::CustomMouseCursor; use crate::system::input_devices::mouse::Mouse; +use crate::system::input_devices::InputDevice; use crate::system::res::{SystemResources, SystemResourcesConfig, SystemResourcesError}; const DEFAULT_SCREEN_WIDTH: u32 = 320; @@ -113,7 +113,7 @@ impl SystemResourcesConfig for DosLikeConfig { sdl2::sys::SDL_RenderSetIntegerScale( sdl_canvas.raw(), if self.integer_scaling { - sdl2::sys::SDL_bool::SDL_TRUE + sdl2::sys::SDL_bool::SDL_TRUE // } else { sdl2::sys::SDL_bool::SDL_FALSE }, @@ -193,7 +193,7 @@ impl SystemResourcesConfig for DosLikeConfig { keyboard, mouse, cursor, - }) + }) } } @@ -240,17 +240,17 @@ pub struct DosLike { } impl std::fmt::Debug for DosLike { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - f.debug_struct("DosLike") - .field("audio", &self.audio) - .field("audio_queue", &self.audio_queue) - .field("palette", &self.palette) - .field("video", &self.video) - .field("font", &self.font) - .field("keyboard", &self.keyboard) - .field("mouse", &self.mouse) - .finish_non_exhaustive() - } + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + f.debug_struct("DosLike") // + .field("audio", &self.audio) + .field("audio_queue", &self.audio_queue) + .field("palette", &self.palette) + .field("video", &self.video) + .field("font", &self.font) + .field("keyboard", &self.keyboard) + .field("mouse", &self.mouse) + .finish_non_exhaustive() + } } impl SystemResources for DosLike { @@ -259,33 +259,33 @@ impl SystemResources for DosLike { match self.audio_queue.apply(&mut self.audio) { Ok(_) => Ok(()), - Err(error) => Err(SystemResourcesError::AudioDeviceError(error)) + Err(error) => Err(SystemResourcesError::AudioDeviceError(error)), } } /// Takes the `video` backbuffer bitmap and `palette` and renders it to the window, up-scaled /// to fill the window (preserving aspect ratio of course). fn display(&mut self) -> Result<(), SystemResourcesError> { - self.cursor.render(&mut self.video); + self.cursor.render(&mut self.video); - // convert application framebuffer to 32-bit RGBA pixels, and then upload it to the SDL - // texture so it will be displayed on screen + // convert application framebuffer to 32-bit RGBA pixels, and then upload it to the SDL + // texture so it will be displayed on screen - self.video.copy_as_argb_to(&mut self.texture_pixels, &self.palette); + self.video.copy_as_argb_to(&mut self.texture_pixels, &self.palette); - let texture_pixels = self.texture_pixels.as_byte_slice(); - if let Err(error) = self.sdl_texture.update(None, texture_pixels, self.sdl_texture_pitch) { - return Err(SystemResourcesError::SDLError(error.to_string())); - } - self.sdl_canvas.clear(); - if let Err(error) = self.sdl_canvas.copy(&self.sdl_texture, None, None) { - return Err(SystemResourcesError::SDLError(error)); - } - self.sdl_canvas.present(); + let texture_pixels = self.texture_pixels.as_byte_slice(); + if let Err(error) = self.sdl_texture.update(None, texture_pixels, self.sdl_texture_pitch) { + return Err(SystemResourcesError::SDLError(error.to_string())); + } + self.sdl_canvas.clear(); + if let Err(error) = self.sdl_canvas.copy(&self.sdl_texture, None, None) { + return Err(SystemResourcesError::SDLError(error)); + } + self.sdl_canvas.present(); - self.cursor.hide(&mut self.video); + self.cursor.hide(&mut self.video); - Ok(()) + Ok(()) } fn update_event_state(&mut self) -> Result<(), SystemResourcesError> { diff --git a/ggdt/src/system/res/mod.rs b/ggdt/src/system/res/mod.rs index 9173244..6eaea69 100644 --- a/ggdt/src/system/res/mod.rs +++ b/ggdt/src/system/res/mod.rs @@ -1,7 +1,7 @@ use thiserror::Error; -use crate::audio::AudioError; use crate::audio::device::AudioDeviceError; +use crate::audio::AudioError; use crate::system::event::SystemEvent; pub mod dos_like; diff --git a/ggdt/src/system/res/standard.rs b/ggdt/src/system/res/standard.rs index 7dc8e41..e433d6c 100644 --- a/ggdt/src/system/res/standard.rs +++ b/ggdt/src/system/res/standard.rs @@ -1,14 +1,14 @@ use byte_slice_cast::AsByteSlice; -use crate::audio::{Audio, TARGET_AUDIO_CHANNELS, TARGET_AUDIO_FREQUENCY}; use crate::audio::queue::AudioQueue; +use crate::audio::{Audio, TARGET_AUDIO_CHANNELS, TARGET_AUDIO_FREQUENCY}; use crate::graphics::bitmap::rgb::RgbaBitmap; use crate::graphics::font::BitmaskFont; use crate::system::event::{SystemEvent, SystemEventHandler}; -use crate::system::input_devices::InputDevice; use crate::system::input_devices::keyboard::Keyboard; use crate::system::input_devices::mouse::cursor::CustomMouseCursor; use crate::system::input_devices::mouse::Mouse; +use crate::system::input_devices::InputDevice; use crate::system::res::{SystemResources, SystemResourcesConfig, SystemResourcesError}; const DEFAULT_SCREEN_WIDTH: u32 = 320; @@ -57,7 +57,7 @@ impl SystemResourcesConfig for StandardConfig { self, _video_subsystem: &sdl2::VideoSubsystem, audio_subsystem: &sdl2::AudioSubsystem, - mut window: sdl2::video::Window + mut window: sdl2::video::Window, ) -> Result { let texture_pixel_size = 4; // 32-bit ARGB format @@ -83,7 +83,7 @@ impl SystemResourcesConfig for StandardConfig { sdl2::sys::SDL_RenderSetIntegerScale( sdl_canvas.raw(), if self.integer_scaling { - sdl2::sys::SDL_bool::SDL_TRUE + sdl2::sys::SDL_bool::SDL_TRUE // } else { sdl2::sys::SDL_bool::SDL_FALSE }, @@ -147,7 +147,6 @@ impl SystemResourcesConfig for StandardConfig { mouse, cursor, }) - } } @@ -188,7 +187,7 @@ pub struct Standard { impl std::fmt::Debug for Standard { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - f.debug_struct("Standard") + f.debug_struct("Standard") // .field("audio", &self.audio) .field("audio_queue", &self.audio_queue) .field("video", &self.video) @@ -205,7 +204,7 @@ impl SystemResources for Standard { match self.audio_queue.apply(&mut self.audio) { Ok(_) => Ok(()), - Err(error) => Err(SystemResourcesError::AudioDeviceError(error)) + Err(error) => Err(SystemResourcesError::AudioDeviceError(error)), } } diff --git a/ggdt/src/utils/io.rs b/ggdt/src/utils/io.rs index f652b89..e4c885a 100644 --- a/ggdt/src/utils/io.rs +++ b/ggdt/src/utils/io.rs @@ -19,4 +19,4 @@ impl StreamSize for T { Ok(len) } -} \ No newline at end of file +} diff --git a/ggdt/src/utils/lzwgif.rs b/ggdt/src/utils/lzwgif.rs index 13b5b53..32bf931 100644 --- a/ggdt/src/utils/lzwgif.rs +++ b/ggdt/src/utils/lzwgif.rs @@ -199,11 +199,7 @@ impl LzwBytesWriter { Ok(()) } - pub fn write_code( - &mut self, - writer: &mut T, - code: LzwCode, - ) -> Result<(), LzwError> { + pub fn write_code(&mut self, writer: &mut T, code: LzwCode) -> Result<(), LzwError> { self.packer.push_code(code)?; while let Some(byte) = self.packer.take_byte() { @@ -345,10 +341,7 @@ impl LzwBytesReader { Ok(Some(reader.read_u8()?)) } - pub fn read_code( - &mut self, - reader: &mut T, - ) -> Result, LzwError> { + pub fn read_code(&mut self, reader: &mut T) -> Result, LzwError> { loop { if let Some(code) = self.unpacker.take_code() { return Ok(Some(code)); @@ -368,14 +361,10 @@ impl LzwBytesReader { /// Encodes data read from the `src` using LZW (GIF-variant) compression, writing the encoded /// data out to `dest`. The LZW minimum code bit size is specified via `min_code_size`. -pub fn lzw_encode( - src: &mut S, - dest: &mut D, - min_code_size: usize, -) -> Result<(), LzwError> - where - S: ReadBytesExt, - D: WriteBytesExt +pub fn lzw_encode(src: &mut S, dest: &mut D, min_code_size: usize) -> Result<(), LzwError> +where + S: ReadBytesExt, + D: WriteBytesExt, { if !is_valid_gif_min_code_size_bits(min_code_size) { return Err(LzwError::UnsupportedCodeSizeBits(min_code_size)); @@ -414,7 +403,7 @@ pub fn lzw_encode( writer.flush(dest)?; return Ok(()); } - Err(error) => return Err(LzwError::IOError(error)) + Err(error) => return Err(LzwError::IOError(error)), }; let mut buffer = vec![byte]; @@ -424,7 +413,7 @@ pub fn lzw_encode( let byte = match src.read_u8() { Ok(byte) => byte, Err(ref error) if error.kind() == std::io::ErrorKind::UnexpectedEof => break, - Err(error) => return Err(LzwError::IOError(error)) + Err(error) => return Err(LzwError::IOError(error)), }; // check if the table currently contains a string composed of the current buffer plus @@ -447,7 +436,10 @@ pub fn lzw_encode( if let Some(code) = table.get(&buffer) { writer.write_code(dest, *code)?; } else { - return Err(LzwError::EncodingError(format!("Expected to find code in table for buffer {:?} but none was found", buffer))); + return Err(LzwError::EncodingError(format!( + "Expected to find code in table for buffer {:?} but none was found", + buffer + ))); } // bump up to the next bit size once we've seen enough codes to necessitate it ... @@ -485,7 +477,10 @@ pub fn lzw_encode( if let Some(code) = table.get(&buffer) { writer.write_code(dest, *code)?; } else { - return Err(LzwError::EncodingError(format!("No matching code for buffer {:?} at end of input stream", buffer))); + return Err(LzwError::EncodingError(format!( + "No matching code for buffer {:?} at end of input stream", + buffer + ))); } writer.write_code(dest, end_of_info_code)?; @@ -496,13 +491,10 @@ pub fn lzw_encode( /// Decodes data read from the `src` using LZW (GIF-variant) decompression, writing the decoded /// data out to `dest`. -pub fn lzw_decode( - src: &mut S, - dest: &mut D, -) -> Result<(), LzwError> - where - S: ReadBytesExt, - D: WriteBytesExt +pub fn lzw_decode(src: &mut S, dest: &mut D) -> Result<(), LzwError> +where + S: ReadBytesExt, + D: WriteBytesExt, { let min_code_size = src.read_u8()? as usize; @@ -525,7 +517,7 @@ pub fn lzw_decode( // are no codes to read (kind of a weird situation, but no real reason to error ...?) let mut code = match reader.read_code(src)? { Some(code) => code, - None => return Ok(()) + None => return Ok(()), }; // the first code in the stream SHOULD be a clear code ... which we can just ignore because @@ -553,7 +545,9 @@ pub fn lzw_decode( // read the next code which should actually be the first "interesting" value of the code stream code = match reader.read_code(src)? { - Some(code) if code > MAX_CODE_VALUE => return Err(LzwError::EncodingError(format!("Encountered code that is too large: {}", code))), + Some(code) if code > MAX_CODE_VALUE => { + return Err(LzwError::EncodingError(format!("Encountered code that is too large: {}", code))) + } Some(code) if code == end_of_info_code => return Ok(()), Some(code) => code, None => return Err(LzwError::EncodingError(String::from("Unexpected end of code stream"))), @@ -573,7 +567,9 @@ pub fn lzw_decode( 'inner: loop { // grab the next code code = match reader.read_code(src)? { - Some(code) if code > MAX_CODE_VALUE => return Err(LzwError::EncodingError(format!("Encountered code that is too large: {}", code))), + Some(code) if code > MAX_CODE_VALUE => { + return Err(LzwError::EncodingError(format!("Encountered code that is too large: {}", code))) + } Some(code) if code == end_of_info_code => break 'outer, Some(code) if code == clear_code => { // reset the bit size and reader and then loop back to the outer loop which @@ -645,19 +641,35 @@ mod tests { static LZW_TEST_DATA: &[LzwTestData] = &[ LzwTestData { min_code_size: 2, - packed: &[0x02, 0x16, 0x8c, 0x2d, 0x99, 0x87, 0x2a, 0x1c, 0xdc, 0x33, 0xa0, 0x02, 0x75, 0xec, 0x95, 0xfa, 0xa8, 0xde, 0x60, 0x8c, 0x04, 0x91, 0x4c, 0x01, 0x00], - unpacked: &[1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 1, 1, 1, 0, 0, 0, 0, 2, 2, 2, 1, 1, 1, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 1, 1, 1, 2, 2, 2, 0, 0, 0, 0, 1, 1, 1, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1], + packed: &[ + 0x02, 0x16, 0x8c, 0x2d, 0x99, 0x87, 0x2a, 0x1c, 0xdc, 0x33, 0xa0, 0x02, 0x75, 0xec, 0x95, 0xfa, 0xa8, + 0xde, 0x60, 0x8c, 0x04, 0x91, 0x4c, 0x01, 0x00, + ], + unpacked: &[ + 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 1, 1, 1, 0, + 0, 0, 0, 2, 2, 2, 1, 1, 1, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 1, 1, 1, 2, 2, 2, 0, 0, 0, 0, 1, + 1, 1, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, + ], }, LzwTestData { min_code_size: 4, - packed: &[0x04, 0x21, 0x70, 0x49, 0x79, 0x6a, 0x9d, 0xcb, 0x39, 0x7b, 0xa6, 0xd6, 0x96, 0xa4, 0x3d, 0x0f, 0xd8, 0x8d, 0x64, 0xb9, 0x1d, 0x28, 0xa9, 0x2d, 0x15, 0xfa, 0xc2, 0xf1, 0x37, 0x71, 0x33, 0xc5, 0x61, 0x4b, 0x04, 0x00], - unpacked: &[11, 11, 11, 11, 11, 7, 7, 7, 7, 7, 11, 11, 11, 11, 14, 14, 7, 7, 7, 7, 11, 11, 11, 14, 14, 14, 14, 7, 7, 7, 11, 11, 14, 14, 15, 15, 14, 14, 7, 7, 11, 14, 14, 15, 15, 15, 15, 14, 14, 7, 7, 14, 14, 15, 15, 15, 15, 14, 14, 11, 7, 7, 14, 14, 15, 15, 14, 14, 11, 11, 7, 7, 7, 14, 14, 14, 14, 11, 11, 11, 7, 7, 7, 7, 14, 14, 11, 11, 11, 11, 7, 7, 7, 7, 7, 11, 11, 11, 11, 11], + packed: &[ + 0x04, 0x21, 0x70, 0x49, 0x79, 0x6a, 0x9d, 0xcb, 0x39, 0x7b, 0xa6, 0xd6, 0x96, 0xa4, 0x3d, 0x0f, 0xd8, + 0x8d, 0x64, 0xb9, 0x1d, 0x28, 0xa9, 0x2d, 0x15, 0xfa, 0xc2, 0xf1, 0x37, 0x71, 0x33, 0xc5, 0x61, 0x4b, + 0x04, 0x00, + ], + unpacked: &[ + 11, 11, 11, 11, 11, 7, 7, 7, 7, 7, 11, 11, 11, 11, 14, 14, 7, 7, 7, 7, 11, 11, 11, 14, 14, 14, 14, 7, + 7, 7, 11, 11, 14, 14, 15, 15, 14, 14, 7, 7, 11, 14, 14, 15, 15, 15, 15, 14, 14, 7, 7, 14, 14, 15, 15, + 15, 15, 14, 14, 11, 7, 7, 14, 14, 15, 15, 14, 14, 11, 11, 7, 7, 7, 14, 14, 14, 14, 11, 11, 11, 7, 7, 7, + 7, 14, 14, 11, 11, 11, 11, 7, 7, 7, 7, 7, 11, 11, 11, 11, 11, + ], }, LzwTestData { min_code_size: 8, packed: &[0x08, 0x0b, 0x00, 0x51, 0xfc, 0x1b, 0x28, 0x70, 0xa0, 0xc1, 0x83, 0x01, 0x01, 0x00], unpacked: &[0x28, 0xff, 0xff, 0xff, 0x28, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff], - } + }, ]; #[test] diff --git a/ggdt/src/utils/mod.rs b/ggdt/src/utils/mod.rs index fea33a6..c7cf42e 100644 --- a/ggdt/src/utils/mod.rs +++ b/ggdt/src/utils/mod.rs @@ -39,4 +39,4 @@ impl AsAny for A { fn as_any_mut(&mut self) -> &mut dyn Any { self as &mut dyn Any } -} \ No newline at end of file +} diff --git a/ggdt/src/utils/packbits.rs b/ggdt/src/utils/packbits.rs index c3c6f22..0b2894c 100644 --- a/ggdt/src/utils/packbits.rs +++ b/ggdt/src/utils/packbits.rs @@ -13,9 +13,9 @@ enum PackMode { } pub fn pack_bits(src: &mut S, dest: &mut D, src_length: usize) -> Result<(), PackBitsError> - where - S: ReadBytesExt, - D: WriteBytesExt, +where + S: ReadBytesExt, + D: WriteBytesExt, { const MIN_RUN: usize = 3; const MAX_RUN: usize = 128; @@ -112,14 +112,10 @@ pub fn pack_bits(src: &mut S, dest: &mut D, src_length: usize) -> Result<( Ok(()) } -pub fn unpack_bits( - src: &mut S, - dest: &mut D, - unpacked_length: usize, -) -> Result<(), PackBitsError> - where - S: ReadBytesExt, - D: WriteBytesExt, +pub fn unpack_bits(src: &mut S, dest: &mut D, unpacked_length: usize) -> Result<(), PackBitsError> +where + S: ReadBytesExt, + D: WriteBytesExt, { let mut buffer = [0u8; 128]; let mut bytes_written = 0; @@ -165,23 +161,14 @@ mod tests { static TEST_DATA: &[TestData] = &[ TestData { - packed: &[ - 0xfe, 0xaa, 0x02, 0x80, 0x00, 0x2a, 0xfd, 0xaa, 0x03, 0x80, 0x00, 0x2a, 0x22, 0xf7, - 0xaa, - ], + packed: &[0xfe, 0xaa, 0x02, 0x80, 0x00, 0x2a, 0xfd, 0xaa, 0x03, 0x80, 0x00, 0x2a, 0x22, 0xf7, 0xaa], unpacked: &[ - 0xaa, 0xaa, 0xaa, 0x80, 0x00, 0x2a, 0xaa, 0xaa, 0xaa, 0xaa, 0x80, 0x00, 0x2a, 0x22, - 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x80, 0x00, 0x2a, 0xaa, 0xaa, 0xaa, 0xaa, 0x80, 0x00, 0x2a, 0x22, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, ], }, - TestData { - packed: &[0x00, 0xaa], - unpacked: &[0xaa], - }, - TestData { - packed: &[0xf9, 0xaa], - unpacked: &[0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa], - }, + TestData { packed: &[0x00, 0xaa], unpacked: &[0xaa] }, + TestData { packed: &[0xf9, 0xaa], unpacked: &[0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa] }, TestData { packed: &[0xf9, 0xaa, 0x00, 0xbb], unpacked: &[0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xbb], diff --git a/ggdt/src/utils/prelude.rs b/ggdt/src/utils/prelude.rs index 29ab2ad..58aee99 100644 --- a/ggdt/src/utils/prelude.rs +++ b/ggdt/src/utils/prelude.rs @@ -1,8 +1,8 @@ pub use crate::utils::{ - *, + // bytes::*, io::*, lzwgif::*, packbits::*, + *, }; - diff --git a/ggdt/tests/graphics_indexed.rs b/ggdt/tests/graphics_indexed.rs index cd001a3..cc4d9d5 100644 --- a/ggdt/tests/graphics_indexed.rs +++ b/ggdt/tests/graphics_indexed.rs @@ -170,7 +170,6 @@ fn blended_pixel_drawing() { assert!(verify_visual(&screen, &palette, &path), "bitmap differs from source image: {:?}", path); } - #[test] fn horiz_line_drawing() { let (mut screen, palette) = setup(); @@ -752,6 +751,7 @@ fn solid_flipped_blits() { assert!(verify_visual(&screen, &palette, &path), "bitmap differs from source image: {:?}", path); } +#[rustfmt::skip] #[test] fn blended_solid_flipped_blits() { use IndexedBlitMethod::*; @@ -884,6 +884,7 @@ fn solid_offset_blits() { assert!(verify_visual(&screen, &palette, &path), "bitmap differs from source image: {:?}", path); } +#[rustfmt::skip] #[test] fn solid_flipped_offset_blits() { use IndexedBlitMethod::*; @@ -1090,6 +1091,7 @@ fn blended_transparent_blits() { assert!(verify_visual(&screen, &palette, &path), "bitmap differs from source image: {:?}", path); } +#[rustfmt::skip] #[test] fn transparent_flipped_blits() { use IndexedBlitMethod::*; @@ -1156,6 +1158,7 @@ fn transparent_flipped_blits() { assert!(verify_visual(&screen, &palette, &path), "bitmap differs from source image: {:?}", path); } +#[rustfmt::skip] #[test] fn blended_transparent_flipped_blits() { use IndexedBlitMethod::*; @@ -1292,6 +1295,7 @@ fn transparent_offset_blits() { assert!(verify_visual(&screen, &palette, &path), "bitmap differs from source image: {:?}", path); } +#[rustfmt::skip] #[test] fn transparent_flipped_offset_blits() { use IndexedBlitMethod::*; @@ -1432,6 +1436,7 @@ fn transparent_single_blits() { assert!(verify_visual(&screen, &palette, &path), "bitmap differs from source image: {:?}", path); } +#[rustfmt::skip] #[test] fn transparent_flipped_single_blits() { use IndexedBlitMethod::*; @@ -1568,6 +1573,7 @@ fn rotozoom_blits() { assert!(verify_visual(&screen, &palette, &path), "bitmap differs from source image: {:?}", path); } +#[rustfmt::skip] #[test] fn blended_rotozoom_blits() { use IndexedBlitMethod::*; @@ -1634,6 +1640,7 @@ fn blended_rotozoom_blits() { assert!(verify_visual(&screen, &palette, &path), "bitmap differs from source image: {:?}", path); } +#[rustfmt::skip] #[test] fn rotozoom_offset_blits() { use IndexedBlitMethod::*; @@ -1702,6 +1709,7 @@ fn rotozoom_offset_blits() { assert!(verify_visual(&screen, &palette, &path), "bitmap differs from source image: {:?}", path); } +#[rustfmt::skip] #[test] fn rotozoom_transparent_blits() { use IndexedBlitMethod::*; @@ -1770,6 +1778,7 @@ fn rotozoom_transparent_blits() { assert!(verify_visual(&screen, &palette, &path), "bitmap differs from source image: {:?}", path); } +#[rustfmt::skip] #[test] fn blended_rotozoom_transparent_blits() { use IndexedBlitMethod::*; @@ -1799,7 +1808,13 @@ fn blended_rotozoom_transparent_blits() { ////// - let method = RotoZoomTransparentBlended { transparent_color, angle: 1.3, scale_x: 1.0, scale_y: 1.0, blend_map: blend_map.clone() }; + let method = RotoZoomTransparentBlended { + transparent_color, + angle: 1.3, + scale_x: 1.0, + scale_y: 1.0, + blend_map: blend_map.clone(), + }; screen.blit(method.clone(), &bmp, -3, 46); screen.blit(method.clone(), &bmp, -4, 76); @@ -1838,6 +1853,7 @@ fn blended_rotozoom_transparent_blits() { assert!(verify_visual(&screen, &palette, &path), "bitmap differs from source image: {:?}", path); } +#[rustfmt::skip] #[test] fn rotozoom_transparent_offset_blits() { use IndexedBlitMethod::*; diff --git a/ggdt/tests/graphics_rgba.rs b/ggdt/tests/graphics_rgba.rs index f8ec3c8..cf71a76 100644 --- a/ggdt/tests/graphics_rgba.rs +++ b/ggdt/tests/graphics_rgba.rs @@ -602,7 +602,7 @@ fn generate_bitmap_with_varied_alpha(width: i32, height: i32) -> RgbaBitmap { let y_third = height / 3; let mut bitmap = RgbaBitmap::new(width as u32, height as u32).unwrap(); - bitmap.clear(0); // alpha=0 + bitmap.clear(0); // alpha=0 bitmap.filled_rect(0, 0, x_third, y_third, 0x330000aa); bitmap.filled_rect(x_third * 2 + 1, y_third * 2 + 1, width - 1, height - 1, 0x6600aa00); @@ -901,6 +901,7 @@ fn solid_flipped_blits() { assert!(verify_visual(&screen, &path), "bitmap differs from source image: {:?}", path); } +#[rustfmt::skip] #[test] fn solid_flipped_tinted_blits() { use RgbaBlitMethod::*; @@ -967,6 +968,7 @@ fn solid_flipped_tinted_blits() { assert!(verify_visual(&screen, &path), "bitmap differs from source image: {:?}", path); } +#[rustfmt::skip] #[test] fn blended_solid_flipped_blits() { use RgbaBlitMethod::*; @@ -1113,10 +1115,7 @@ fn transparent_tinted_blits() { let bmp21 = generate_bitmap(21, 21); let bmp3 = generate_bitmap(3, 3); - let method = TransparentTinted { - transparent_color: to_rgb32(0, 0, 0), - tint_color: to_argb32(127, 155, 242, 21) - }; + let method = TransparentTinted { transparent_color: to_rgb32(0, 0, 0), tint_color: to_argb32(127, 155, 242, 21) }; let x = 40; let y = 20; @@ -1241,6 +1240,7 @@ fn blended_transparent_blits() { assert!(verify_visual(&screen, &path), "bitmap differs from source image: {:?}", path); } +#[rustfmt::skip] #[test] fn transparent_flipped_blits() { use RgbaBlitMethod::*; @@ -1307,6 +1307,7 @@ fn transparent_flipped_blits() { assert!(verify_visual(&screen, &path), "bitmap differs from source image: {:?}", path); } +#[rustfmt::skip] #[test] fn transparent_flipped_tinted_blits() { use RgbaBlitMethod::*; @@ -1374,6 +1375,7 @@ fn transparent_flipped_tinted_blits() { assert!(verify_visual(&screen, &path), "bitmap differs from source image: {:?}", path); } +#[rustfmt::skip] #[test] fn blended_transparent_flipped_blits() { use RgbaBlitMethod::*; @@ -1440,6 +1442,7 @@ fn blended_transparent_flipped_blits() { assert!(verify_visual(&screen, &path), "bitmap differs from source image: {:?}", path); } +#[rustfmt::skip] #[test] fn transparent_single_blits() { use RgbaBlitMethod::*; @@ -1510,6 +1513,7 @@ fn transparent_single_blits() { assert!(verify_visual(&screen, &path), "bitmap differs from source image: {:?}", path); } +#[rustfmt::skip] #[test] fn transparent_flipped_single_blits() { use RgbaBlitMethod::*; @@ -1642,6 +1646,7 @@ fn rotozoom_blits() { assert!(verify_visual(&screen, &path), "bitmap differs from source image: {:?}", path); } +#[rustfmt::skip] #[test] fn rotozoom_tinted_blits() { use RgbaBlitMethod::*; @@ -1777,6 +1782,7 @@ fn blended_rotozoom_blits() { assert!(verify_visual(&screen, &path), "bitmap differs from source image: {:?}", path); } +#[rustfmt::skip] #[test] fn rotozoom_transparent_blits() { use RgbaBlitMethod::*; @@ -1845,6 +1851,7 @@ fn rotozoom_transparent_blits() { assert!(verify_visual(&screen, &path), "bitmap differs from source image: {:?}", path); } +#[rustfmt::skip] #[test] fn rotozoom_transparent_tinted_blits() { use RgbaBlitMethod::*; @@ -1914,6 +1921,7 @@ fn rotozoom_transparent_tinted_blits() { assert!(verify_visual(&screen, &path), "bitmap differs from source image: {:?}", path); } +#[rustfmt::skip] #[test] fn blended_rotozoom_transparent_blits() { use RgbaBlitMethod::*;