diff options
author | Matthew Michelotti <michelotti.matthew@gmail.com> | 2018-05-24 22:58:33 -0500 |
---|---|---|
committer | Matthew Michelotti <michelotti.matthew@gmail.com> | 2018-05-24 23:03:45 -0500 |
commit | 054f7e258f53a963a4899f4edcfacddd77640244 (patch) | |
tree | eefcde9783bb93380e4f65ed5c6e1a206b588ffd | |
parent | ebf8355b37aa31bc47666bd8f50f8625cfa7e44f (diff) |
added methods for dealing with native pixel alignment
-rw-r--r-- | gate/src/app_context.rs | 16 | ||||
-rw-r--r-- | gate/src/core/sdl/mod.rs | 4 | ||||
-rw-r--r-- | gate/src/core/wasm/mod.rs | 10 | ||||
-rw-r--r-- | gate/src/renderer/renderer.rs | 2 |
4 files changed, 24 insertions, 8 deletions
diff --git a/gate/src/app_context.rs b/gate/src/app_context.rs index 1dfe3e1..45a59d5 100644 --- a/gate/src/app_context.rs +++ b/gate/src/app_context.rs @@ -24,15 +24,17 @@ pub struct AppContext<A: AppAssetId> { dims: (f64, f64), cursor: (f64, f64), close_requested: bool, + native_px: f64, } impl<A: AppAssetId> AppContext<A> { - pub(crate) fn new(audio: CoreAudio, dims: (f64, f64)) -> AppContext<A> { + pub(crate) fn new(audio: CoreAudio, dims: (f64, f64), native_px: f64) -> AppContext<A> { AppContext { audio: Audio { core: audio, phantom: PhantomData }, dims, cursor: (0., 0.), close_requested: false, + native_px, } } @@ -41,8 +43,9 @@ impl<A: AppAssetId> AppContext<A> { self.bound_cursor(); } - pub(crate) fn set_dims(&mut self, dims: (f64, f64)) { + pub(crate) fn set_dims(&mut self, dims: (f64, f64), native_px: f64) { self.dims = dims; + self.native_px = native_px; self.bound_cursor(); } @@ -63,6 +66,15 @@ impl<A: AppAssetId> AppContext<A> { /// The y coordinate lies in the range `-0.5 * self.dims().1` to `0.5 * self.dims().1`. pub fn cursor(&self) -> (f64, f64) { self.cursor } + pub fn native_px(&self) -> f64 { self.native_px } + + pub fn native_px_align(&self, x: f64, y: f64) -> (f64, f64) { + ( + (x / self.native_px).round() * self.native_px, + (y / self.native_px).round() * self.native_px, + ) + } + /// Closes the app entirely. pub fn close(&mut self) { self.close_requested = true; } diff --git a/gate/src/core/sdl/mod.rs b/gate/src/core/sdl/mod.rs index 51cb2d2..e4006c1 100644 --- a/gate/src/core/sdl/mod.rs +++ b/gate/src/core/sdl/mod.rs @@ -72,7 +72,7 @@ pub fn run<AS: AppAssetId, AP: App<AS>>(info: AppInfo, mut app: AP) { gl_error_check(); - let mut ctx = AppContext::new(CoreAudio::new(AS::Sound::count()), renderer.app_dims()); + let mut ctx = AppContext::new(CoreAudio::new(AS::Sound::count()), renderer.app_dims(), renderer.native_px()); if info.print_gl_info { print_gl_info(); } @@ -89,7 +89,7 @@ pub fn run<AS: AppAssetId, AP: App<AS>>(info: AppInfo, mut app: AP) { let screen_dims = sdl_renderer.window().unwrap().size(); if screen_dims.0 > 0 && screen_dims.1 > 0 { renderer.set_screen_dims(screen_dims); - ctx.set_dims(renderer.app_dims()); + ctx.set_dims(renderer.app_dims(), renderer.native_px()); app.render(&mut renderer, &ctx); renderer.flush(); } diff --git a/gate/src/core/wasm/mod.rs b/gate/src/core/wasm/mod.rs index f7f0881..ccdce54 100644 --- a/gate/src/core/wasm/mod.rs +++ b/gate/src/core/wasm/mod.rs @@ -107,13 +107,15 @@ impl<AS: AppAssetId, AP: App<AS>> TraitAppRunner for AppRunner<AS, AP> { let core_renderer = CoreRenderer::new(); self.renderer = Some(Renderer::<AS>::new(render_buffer, core_renderer)); - self.ctx.set_dims(self.renderer.as_ref().unwrap().app_dims()); + let renderer = self.renderer.as_ref().unwrap(); + self.ctx.set_dims(renderer.app_dims(), renderer.native_px()); self.app.start(&mut self.ctx); } fn resize(&mut self, dims: (u32, u32)) { - self.renderer.as_mut().unwrap().set_screen_dims(dims); - self.ctx.set_dims(self.renderer.as_ref().unwrap().app_dims()); + let renderer = self.renderer.as_mut().unwrap(); + renderer.set_screen_dims(dims); + self.ctx.set_dims(renderer.app_dims(), renderer.native_px()); } fn update_and_draw(&mut self, time_sec: f64) { @@ -151,7 +153,7 @@ pub fn run<AS: 'static + AppAssetId, AP: 'static + App<AS>>(info: AppInfo, app: mark_app_created_flag(); *APP_RUNNER.r.borrow_mut() = Some(Box::new(AppRunner { app, info, - ctx: AppContext::new(CoreAudio { }, (0., 0.)), + ctx: AppContext::new(CoreAudio { }, (0., 0.), 1.), renderer: None, last_time_sec: None, held_keys: HashSet::new(), diff --git a/gate/src/renderer/renderer.rs b/gate/src/renderer/renderer.rs index e2ff84f..f9c7760 100644 --- a/gate/src/renderer/renderer.rs +++ b/gate/src/renderer/renderer.rs @@ -57,6 +57,8 @@ impl<A: AppAssetId> Renderer<A> { pub(crate) fn app_dims(&self) -> (f64, f64) { self.b.dims.dims } + pub(crate) fn native_px(&self) -> f64 { 1. / self.b.dims.pixel_scalar } + pub(crate) fn to_app_pos(&self, raw_x: i32, raw_y: i32) -> (f64, f64) { self.b.dims.to_app_pos(raw_x, raw_y) } |