Compare commits
No commits in common. "7f9a962ff7ef9643825e03d7a6851cd0918b6036" and "a21fc048ad7fd54947ee62c3d8e2d5c4371121dd" have entirely different histories.
7f9a962ff7
...
a21fc048ad
862
Cargo.lock
generated
862
Cargo.lock
generated
File diff suppressed because it is too large
Load Diff
33
Cargo.toml
33
Cargo.toml
@ -33,17 +33,17 @@ strip = false
|
||||
|
||||
[dependencies]
|
||||
parsing = { path = "./parsing" }
|
||||
eframe = { git = "https://github.com/titaniumtown/egui.git", default-features = false, features = [
|
||||
eframe = { git = "https://github.com/titaniumtown/egui.git", rev = "b088efb9fa917845ecb54729a0d2fc592d2399e7", default-features = false, features = [
|
||||
"glow",
|
||||
] }
|
||||
egui = { git = "https://github.com/titaniumtown/egui.git", default-features = false, features = [
|
||||
egui = { git = "https://github.com/titaniumtown/egui.git", rev = "b088efb9fa917845ecb54729a0d2fc592d2399e7", default-features = false, features = [
|
||||
"serde",
|
||||
] }
|
||||
epaint = { git = "https://github.com/titaniumtown/egui.git", default-features = false , features = [
|
||||
epaint = { git = "https://github.com/titaniumtown/egui.git", rev = "b088efb9fa917845ecb54729a0d2fc592d2399e7", default-features = false , features = [
|
||||
"bytemuck",
|
||||
] }
|
||||
emath = { git = "https://github.com/titaniumtown/egui.git", default-features = false }
|
||||
egui_plot = { git = "https://github.com/emilk/egui_plot.git", default-features = false }
|
||||
emath = { git = "https://github.com/titaniumtown/egui.git", rev = "b088efb9fa917845ecb54729a0d2fc592d2399e7", default-features = false }
|
||||
egui_plot = { git = "https://github.com/titaniumtown/egui.git", rev = "b088efb9fa917845ecb54729a0d2fc592d2399e7", default-features = false }
|
||||
|
||||
|
||||
|
||||
@ -63,10 +63,10 @@ benchmarks = { path = "./benchmarks" }
|
||||
|
||||
[build-dependencies]
|
||||
shadow-rs = "0.12"
|
||||
epaint = { git = "https://github.com/titaniumtown/egui.git", default-features = false, features = [
|
||||
epaint = { git = "https://github.com/titaniumtown/egui.git", rev = "b088efb9fa917845ecb54729a0d2fc592d2399e7", default-features = false, features = [
|
||||
"bytemuck",
|
||||
] }
|
||||
egui = { git = "https://github.com/titaniumtown/egui.git", default-features = false, features = [
|
||||
egui = { git = "https://github.com/titaniumtown/egui.git", rev = "b088efb9fa917845ecb54729a0d2fc592d2399e7", default-features = false, features = [
|
||||
"serde",
|
||||
] }
|
||||
bincode = "1.3"
|
||||
@ -94,22 +94,3 @@ wasm-bindgen-futures = "=0.4.54"
|
||||
|
||||
[package.metadata.cargo-all-features]
|
||||
skip_optional_dependencies = true #don't test optional dependencies, only features
|
||||
|
||||
# various dependency patches fix issues with nix complication such as:
|
||||
# ````
|
||||
# ln: failed to create symbolic link '/nix/store/plh3y4gfxgwcacjccv72f551y1k89x75-cargo-vendor-dir/ecolor-0.33.2/qb43vsx43av6kf4h9y4bsmisvbjlcxd1-ecolor-0.33.2': Permission denied
|
||||
# ````
|
||||
|
||||
[patch."https://github.com/emilk/egui_plot.git"]
|
||||
egui = { git = "https://github.com/titaniumtown/egui.git" }
|
||||
eframe = { git = "https://github.com/titaniumtown/egui.git" }
|
||||
epaint = { git = "https://github.com/titaniumtown/egui.git" }
|
||||
emath = { git = "https://github.com/titaniumtown/egui.git" }
|
||||
ecolor = { git = "https://github.com/titaniumtown/egui.git" }
|
||||
|
||||
[patch.crates-io]
|
||||
egui = { git = "https://github.com/titaniumtown/egui.git" }
|
||||
eframe = { git = "https://github.com/titaniumtown/egui.git" }
|
||||
epaint = { git = "https://github.com/titaniumtown/egui.git" }
|
||||
emath = { git = "https://github.com/titaniumtown/egui.git" }
|
||||
ecolor = { git = "https://github.com/titaniumtown/egui.git" }
|
||||
|
||||
30
build.rs
30
build.rs
@ -4,12 +4,11 @@ use std::{
|
||||
fs::File,
|
||||
io::{BufWriter, Write},
|
||||
path::Path,
|
||||
sync::Arc,
|
||||
};
|
||||
|
||||
use epaint::{
|
||||
text::{FontData, FontDefinitions, FontTweak},
|
||||
FontFamily,
|
||||
text::{FontData, FontDefinitions, FontTweak},
|
||||
};
|
||||
|
||||
use run_script::ScriptOptions;
|
||||
@ -105,38 +104,37 @@ fn main() {
|
||||
font_data: BTreeMap::from([
|
||||
(
|
||||
"Ubuntu-Light".to_owned(),
|
||||
Arc::new(FontData::from_owned(
|
||||
FontData::from_owned(
|
||||
font_stripper(
|
||||
"Ubuntu-Light.ttf",
|
||||
"ubuntu-light.ttf",
|
||||
[main_chars, vec!['∫']].concat(),
|
||||
)
|
||||
.unwrap(),
|
||||
)),
|
||||
),
|
||||
),
|
||||
(
|
||||
"NotoEmoji-Regular".to_owned(),
|
||||
Arc::new(FontData::from_owned(
|
||||
FontData::from_owned(
|
||||
font_stripper(
|
||||
"NotoEmoji-Regular.ttf",
|
||||
"noto-emoji.ttf",
|
||||
vec!['🌞', '🌙', '✖'],
|
||||
)
|
||||
.unwrap(),
|
||||
)),
|
||||
),
|
||||
),
|
||||
(
|
||||
"emoji-icon-font".to_owned(),
|
||||
Arc::new(
|
||||
FontData::from_owned(
|
||||
font_stripper("emoji-icon-font.ttf", "emoji-icon.ttf", vec!['⚙']).unwrap(),
|
||||
)
|
||||
.tweak(FontTweak {
|
||||
scale: 0.8,
|
||||
y_offset_factor: 0.07,
|
||||
y_offset: -0.0333,
|
||||
}),
|
||||
),
|
||||
FontData::from_owned(
|
||||
font_stripper("emoji-icon-font.ttf", "emoji-icon.ttf", vec!['⚙']).unwrap(),
|
||||
)
|
||||
.tweak(FontTweak {
|
||||
scale: 0.8,
|
||||
y_offset_factor: 0.07,
|
||||
y_offset: 0.0,
|
||||
baseline_offset_factor: -0.0333,
|
||||
}),
|
||||
),
|
||||
]),
|
||||
families: BTreeMap::from([
|
||||
|
||||
@ -45,8 +45,7 @@
|
||||
cargoLock = {
|
||||
lockFile = ./Cargo.lock;
|
||||
outputHashes = {
|
||||
"ecolor-0.33.2" = "sha256-jdQK55yKZptadwosrJXIhoQDGNeELQmPExWRsGc0VG0=";
|
||||
"egui_plot-0.34.0" = "sha256-CfqrpAnLNcB3StuZ9YSDTWih8OUVEa9SJi9RwS1i4ok=";
|
||||
"ecolor-0.25.0" = "sha256-9s5LCngwvIIL43txT6sBs4JlRXqmYt1Kw8hlDnwx+DI=";
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
@ -449,7 +449,7 @@ impl FunctionEntry {
|
||||
Some(integral_data) => {
|
||||
if integral_step > step {
|
||||
plot_ui.bar_chart(
|
||||
BarChart::new("integral bar chart", integral_data.0.clone())
|
||||
BarChart::new(integral_data.0.clone())
|
||||
.color(Color32::BLUE)
|
||||
.width(integral_step),
|
||||
);
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
use crate::{
|
||||
consts::COLORS, function_entry::FunctionEntry, misc::random_u64, widgets::widgets_ontop,
|
||||
};
|
||||
use egui::{Button, Id, Key, Modifiers, PopupCloseBehavior, TextEdit, WidgetText};
|
||||
use egui::{Button, Id, Key, Modifiers, TextEdit, WidgetText};
|
||||
use emath::vec2;
|
||||
use parsing::Movement;
|
||||
use serde::ser::SerializeStruct;
|
||||
@ -147,23 +147,17 @@ impl FunctionManager {
|
||||
|
||||
let autocomplete_popup_id = Id::new("autocomplete popup");
|
||||
|
||||
egui::popup_below_widget(
|
||||
ui,
|
||||
autocomplete_popup_id,
|
||||
&re,
|
||||
PopupCloseBehavior::CloseOnClickOutside,
|
||||
|ui| {
|
||||
hints.iter().enumerate().for_each(|(i, candidate)| {
|
||||
if ui
|
||||
.selectable_label(i == function.autocomplete.i, *candidate)
|
||||
.clicked()
|
||||
{
|
||||
clicked = true;
|
||||
function.autocomplete.i = i;
|
||||
}
|
||||
});
|
||||
},
|
||||
);
|
||||
egui::popup_below_widget(ui, autocomplete_popup_id, &re, |ui| {
|
||||
hints.iter().enumerate().for_each(|(i, candidate)| {
|
||||
if ui
|
||||
.selectable_label(i == function.autocomplete.i, *candidate)
|
||||
.clicked()
|
||||
{
|
||||
clicked = true;
|
||||
function.autocomplete.i = i;
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
if clicked {
|
||||
function
|
||||
@ -178,14 +172,10 @@ impl FunctionManager {
|
||||
|
||||
// Push cursor to end if needed
|
||||
if movement == Movement::Complete {
|
||||
// TODO! proper error handling
|
||||
let mut state =
|
||||
unsafe { TextEdit::load_state(ui.ctx(), te_id).unwrap_unchecked() };
|
||||
let ccursor = egui::text::CCursor::new(function.autocomplete.string.len());
|
||||
state
|
||||
.cursor
|
||||
.set_char_range(Some(egui::text::CCursorRange::one(ccursor)));
|
||||
|
||||
state.set_ccursor_range(Some(egui::text::CCursorRange::one(ccursor)));
|
||||
TextEdit::store_state(ui.ctx(), te_id, state);
|
||||
}
|
||||
}
|
||||
|
||||
27
src/lib.rs
27
src/lib.rs
@ -22,7 +22,6 @@ pub use crate::{
|
||||
cfg_if::cfg_if! {
|
||||
if #[cfg(target_arch = "wasm32")] {
|
||||
use wasm_bindgen::prelude::*;
|
||||
use web_sys::HtmlCanvasElement;
|
||||
|
||||
use lol_alloc::{FreeListAllocator, LockedAllocator};
|
||||
#[global_allocator]
|
||||
@ -50,28 +49,26 @@ cfg_if::cfg_if! {
|
||||
}
|
||||
}
|
||||
|
||||
/// Call this once from JavaScript to start your app.
|
||||
#[wasm_bindgen]
|
||||
pub async fn start(&self, canvas_id: HtmlCanvasElement) -> Result<(), wasm_bindgen::JsValue> {
|
||||
self.runner
|
||||
.start(
|
||||
canvas_id,
|
||||
eframe::WebOptions::default(),
|
||||
Box::new(|cc| Ok(Box::new(math_app::MathApp::new(cc)))),
|
||||
)
|
||||
.await
|
||||
}
|
||||
/// Call this once from JavaScript to start your app.
|
||||
#[wasm_bindgen]
|
||||
pub async fn start(&self, canvas_id: &str) -> Result<(), wasm_bindgen::JsValue> {
|
||||
self.runner
|
||||
.start(
|
||||
canvas_id,
|
||||
eframe::WebOptions::default(),
|
||||
Box::new(|cc| Box::new(math_app::MathApp::new(cc))),
|
||||
)
|
||||
.await
|
||||
}
|
||||
}
|
||||
|
||||
#[wasm_bindgen(start)]
|
||||
pub async fn start() {
|
||||
tracing::info!("Starting...");
|
||||
|
||||
let document = web_sys::window().unwrap().document().unwrap();
|
||||
let canvas = document.get_element_by_id("canvas").unwrap().dyn_into::<HtmlCanvasElement>().unwrap();
|
||||
|
||||
let web_handle = WebHandle::new();
|
||||
web_handle.start(canvas).await.unwrap()
|
||||
web_handle.start("canvas").await.unwrap()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -6,13 +6,13 @@ use crate::{
|
||||
};
|
||||
use eframe::App;
|
||||
use egui::{
|
||||
Button, CentralPanel, Color32, ComboBox, Context, CornerRadius, DragValue, Frame, Key, Layout,
|
||||
SidePanel, TopBottomPanel, Ui, Vec2, Window,
|
||||
Button, CentralPanel, Color32, ComboBox, Context, DragValue, Frame, Key, Layout, SidePanel,
|
||||
TopBottomPanel, Ui, Vec2, Window, style::Margin,
|
||||
};
|
||||
use egui_plot::Plot;
|
||||
|
||||
use emath::{Align, Align2};
|
||||
use epaint::{Margin, Rounding};
|
||||
use epaint::Rounding;
|
||||
use instant::Instant;
|
||||
use itertools::Itertools;
|
||||
use std::{io::Read, ops::BitXorAssign};
|
||||
@ -535,11 +535,11 @@ impl App for MathApp {
|
||||
// Central panel which contains the central plot (or an error created when parsing)
|
||||
CentralPanel::default()
|
||||
.frame(Frame {
|
||||
inner_margin: Margin::ZERO,
|
||||
corner_radius: CornerRadius::ZERO,
|
||||
inner_margin: Margin::symmetric(0.0, 0.0),
|
||||
rounding: Rounding::ZERO,
|
||||
// fill: crate::style::STYLE.window_fill(),
|
||||
fill: Color32::from_gray(27),
|
||||
..Frame::NONE
|
||||
..Frame::none()
|
||||
})
|
||||
.show(ctx, |ui| {
|
||||
// Display an error if it exists
|
||||
|
||||
16
src/misc.rs
16
src/misc.rs
@ -8,13 +8,13 @@ use parsing::FlatExWrapper;
|
||||
/// Implements traits that are useful when dealing with Vectors of egui's `Value`
|
||||
pub trait EguiHelper {
|
||||
/// Converts to `egui::plot::Values`
|
||||
fn to_values(self) -> PlotPoints<'static>;
|
||||
fn to_values(self) -> PlotPoints;
|
||||
|
||||
/// Converts to `egui::plot::Line`
|
||||
fn to_line(self) -> Line<'static>;
|
||||
fn to_line(self) -> Line;
|
||||
|
||||
/// Converts to `egui::plot::Points`
|
||||
fn to_points(self) -> Points<'static>;
|
||||
fn to_points(self) -> Points;
|
||||
|
||||
/// Converts Vector of Values into vector of tuples
|
||||
fn to_tuple(self) -> Vec<(f64, f64)>;
|
||||
@ -22,18 +22,18 @@ pub trait EguiHelper {
|
||||
|
||||
impl EguiHelper for Vec<PlotPoint> {
|
||||
#[inline(always)]
|
||||
fn to_values(self) -> PlotPoints<'static> {
|
||||
fn to_values(self) -> PlotPoints {
|
||||
PlotPoints::from(unsafe { std::mem::transmute::<Vec<PlotPoint>, Vec<[f64; 2]>>(self) })
|
||||
}
|
||||
|
||||
#[inline(always)]
|
||||
fn to_line(self) -> Line<'static> {
|
||||
Line::new("", self.to_values())
|
||||
fn to_line(self) -> Line {
|
||||
Line::new(self.to_values())
|
||||
}
|
||||
|
||||
#[inline(always)]
|
||||
fn to_points(self) -> Points<'static> {
|
||||
Points::new("", self.to_values())
|
||||
fn to_points(self) -> Points {
|
||||
Points::new(self.to_values())
|
||||
}
|
||||
|
||||
#[inline(always)]
|
||||
|
||||
@ -56,10 +56,9 @@
|
||||
margin-left: auto;
|
||||
display: block;
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
top: 0%;
|
||||
left: 50%;
|
||||
transform: translate(-50%, 0%);
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user