2022-04-23 15:39:40 -04:00

91 lines
2.4 KiB
Rust

use crate::function_entry::Riemann;
use std::ops::RangeInclusive;
use const_format::formatc;
use epaint::Color32;
use shadow_rs::shadow;
shadow!(build);
// Constant string that has a string containing information about the build.
pub const BUILD_INFO: &str = formatc!(
"Commit: {} ({})\nBuild Date: {}\nPackage Version: {}\nRust Channel: {}\nRust Version: {}",
&build::SHORT_COMMIT,
&build::BRANCH,
&build::BUILD_TIME,
&build::PKG_VERSION,
&build::RUST_CHANNEL,
&build::RUST_VERSION,
);
// Hard-Coded limits
/// Range of acceptable input values for integral_num
pub const INTEGRAL_NUM_RANGE: RangeInclusive<usize> = 1..=50000;
/// Minimum X value for calculating an Integral
pub const INTEGRAL_X_MIN: f64 = -1000.0;
/// Maximum X value for calculating an Integral
pub const INTEGRAL_X_MAX: f64 = 1000.0;
const_assert!(INTEGRAL_X_MAX > INTEGRAL_X_MIN);
/// Range of acceptable x coordinates for calculating an integral
pub const INTEGRAL_X_RANGE: RangeInclusive<f64> = INTEGRAL_X_MIN..=INTEGRAL_X_MAX;
// Default values
/// Default Riemann Sum to calculate
pub const DEFAULT_RIEMANN: Riemann = Riemann::Left;
/// Default minimum X value to display
pub const DEFAULT_MIN_X: f64 = -10.0;
/// Default Maxmimum X value to display
pub const DEFAULT_MAX_X: f64 = 10.0;
const_assert!(DEFAULT_MAX_X > DEFAULT_MIN_X);
/// Default number of integral boxes
pub const DEFAULT_INTEGRAL_NUM: usize = 100;
/// Colors used for plotting
// Colors commented out are used elsewhere and are not included here for better user experience
pub const COLORS: &[Color32; 13] = &[
Color32::RED,
// Color32::GREEN,
// Color32::YELLOW,
// Color32::BLUE,
Color32::BROWN,
Color32::GOLD,
Color32::GRAY,
Color32::WHITE,
Color32::LIGHT_YELLOW,
Color32::LIGHT_GREEN,
// Color32::LIGHT_BLUE,
Color32::LIGHT_GRAY,
Color32::LIGHT_RED,
Color32::DARK_GRAY,
// Color32::DARK_RED,
Color32::KHAKI,
Color32::DARK_GREEN,
Color32::DARK_BLUE,
];
#[cfg(target_arch = "wasm32")]
lazy_static::lazy_static! {
pub static IS_MOBILE: bool = {
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)))
}
is_mobile().unwrap_or_default()
}
}
#[cfg(not(target_arch = "wasm32"))]
pub const IS_MOBILE: bool = false;