summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthew Michelotti <michelotti.matthew@gmail.com>2018-05-24 22:58:33 -0500
committerMatthew Michelotti <michelotti.matthew@gmail.com>2018-05-24 23:03:45 -0500
commit054f7e258f53a963a4899f4edcfacddd77640244 (patch)
treeeefcde9783bb93380e4f65ed5c6e1a206b588ffd
parentebf8355b37aa31bc47666bd8f50f8625cfa7e44f (diff)
added methods for dealing with native pixel alignment
-rw-r--r--gate/src/app_context.rs16
-rw-r--r--gate/src/core/sdl/mod.rs4
-rw-r--r--gate/src/core/wasm/mod.rs10
-rw-r--r--gate/src/renderer/renderer.rs2
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)
}