start working on better mobile support

This commit is contained in:
Simon Gardling 2022-04-22 14:18:24 -04:00
parent 61c26001b4
commit 22d1be59f5
4 changed files with 31 additions and 3 deletions

View File

@ -101,7 +101,9 @@ impl Default for FunctionEntry {
impl FunctionEntry { impl FunctionEntry {
/// Creates edit box for [`FunctionEntry`] to edit function settings and string. /// Creates edit box for [`FunctionEntry`] to edit function settings and string.
/// Returns whether or not this function was marked for removal. /// Returns whether or not this function was marked for removal.
pub fn function_entry(&mut self, ui: &mut egui::Ui, can_remove: bool, i: usize) -> bool { pub fn function_entry(
&mut self, ui: &mut egui::Ui, can_remove: bool, i: usize, mobile: bool,
) -> bool {
let output_string = self.autocomplete.string.clone(); let output_string = self.autocomplete.string.clone();
self.update_string(&output_string); self.update_string(&output_string);
@ -727,6 +729,7 @@ mod tests {
do_extrema: false, do_extrema: false,
do_roots: false, do_roots: false,
plot_width: pixel_width, plot_width: pixel_width,
is_mobile: false,
} }
} }

View File

@ -1,5 +1,6 @@
#![feature(const_mut_refs)] #![feature(const_mut_refs)]
#![feature(let_chains)] #![feature(let_chains)]
#![feature(stmt_expr_attributes)]
#[macro_use] #[macro_use]
extern crate static_assertions; extern crate static_assertions;

View File

@ -1,5 +1,6 @@
#![feature(const_mut_refs)] #![feature(const_mut_refs)]
#![feature(let_chains)] #![feature(let_chains)]
#![feature(stmt_expr_attributes)]
#[macro_use] #[macro_use]
extern crate static_assertions; extern crate static_assertions;

View File

@ -30,6 +30,14 @@ cfg_if::cfg_if! {
// Remove the element // Remove the element
loading_element.remove(); loading_element.remove();
} }
fn is_mobile() -> Option<bool> {
const MOBILE_DEVICE: [&str; 6] = ["Android", "iPhone", "iPad", "iPod", "webOS", "BlackBerry"];
let user_agent = web_sys::window()?.navigator().user_agent().ok()?;
Some(MOBILE_DEVICE.iter().any(|&name| user_agent.contains(name)))
}
} }
} }
@ -60,6 +68,8 @@ pub struct AppSettings {
/// Stores current plot pixel width /// Stores current plot pixel width
pub plot_width: usize, pub plot_width: usize,
pub is_mobile: bool,
} }
impl Default for AppSettings { impl Default for AppSettings {
@ -75,6 +85,7 @@ impl Default for AppSettings {
do_extrema: true, do_extrema: true,
do_roots: true, do_roots: true,
plot_width: 0, plot_width: 0,
is_mobile: false,
} }
} }
} }
@ -124,10 +135,19 @@ impl MathApp {
pub fn new(cc: &eframe::CreationContext<'_>) -> Self { pub fn new(cc: &eframe::CreationContext<'_>) -> Self {
let start = instant::Instant::now(); let start = instant::Instant::now();
#[allow(unused_mut)]
#[allow(unused_assignments)]
let mut mobile = false;
// Remove loading indicator on wasm // Remove loading indicator on wasm
#[cfg(target_arch = "wasm32")] #[cfg(target_arch = "wasm32")]
stop_loading(); stop_loading();
#[cfg(target_arch = "wasm32")]
{
mobile = is_mobile().unwrap_or_default();
}
#[cfg(threading)] #[cfg(threading)]
tracing::info!("Threading: Enabled"); tracing::info!("Threading: Enabled");
@ -256,7 +276,10 @@ impl MathApp {
dark_mode: true, dark_mode: true,
text: text_data.expect("text.json failed to load"), text: text_data.expect("text.json failed to load"),
opened: Opened::default(), opened: Opened::default(),
settings: AppSettings::default(), settings: AppSettings {
is_mobile: mobile,
..AppSettings::default()
},
} }
} }
@ -362,7 +385,7 @@ impl MathApp {
let mut remove_i: Option<usize> = None; let mut remove_i: Option<usize> = None;
for (i, function) in self.functions.iter_mut().enumerate() { for (i, function) in self.functions.iter_mut().enumerate() {
// Entry for a function // Entry for a function
if function.function_entry(ui, can_remove, i) { if function.function_entry(ui, can_remove, i, self.settings.is_mobile) {
remove_i = Some(i); remove_i = Some(i);
} }