Add epi::App::initial_window_size to control initial native window size

This commit is contained in:
Emil Ernerfeldt 2021-02-23 20:28:55 +01:00
parent 049a7b0382
commit 02a65132e4
4 changed files with 22 additions and 3 deletions

View file

@ -57,6 +57,7 @@ impl epi::RepaintSignal for GliumRepaintSignal {
fn create_display(
title: &str,
initial_size_points: Option<Vec2>,
window_settings: Option<WindowSettings>,
is_resizable: bool,
event_loop: &glutin::event_loop::EventLoop<RequestRepaintEvent>,
@ -69,6 +70,11 @@ fn create_display(
if let Some(window_settings) = &window_settings {
window_builder = window_settings.initialize_size(window_builder);
} else if let Some(initial_size_points) = initial_size_points {
window_builder = window_builder.with_inner_size(glutin::dpi::LogicalSize {
width: initial_size_points.x as f64,
height: initial_size_points.y as f64,
});
}
let context_builder = glutin::ContextBuilder::new()
@ -135,7 +141,13 @@ pub fn run(mut app: Box<dyn epi::App>) -> ! {
let window_settings = deserialize_window_settings(&storage);
let event_loop = glutin::event_loop::EventLoop::with_user_event();
let display = create_display(app.name(), window_settings, app.is_resizable(), &event_loop);
let display = create_display(
app.name(),
app.initial_window_size(),
window_settings,
app.is_resizable(),
&event_loop,
);
let repaint_signal = std::sync::Arc::new(GliumRepaintSignal(std::sync::Mutex::new(
event_loop.create_proxy(),

View file

@ -38,6 +38,7 @@ impl epi::Storage for FileStorage {
fn flush(&mut self) {
if self.dirty {
// eprintln!("Persisted to {}", self.path.display());
serde_json::to_writer(std::fs::File::create(&self.path).unwrap(), &self.kv).unwrap();
self.dirty = false;
}
@ -46,11 +47,11 @@ impl epi::Storage for FileStorage {
// ----------------------------------------------------------------------------
pub fn read_json<T>(memory_json_path: impl AsRef<Path>) -> Option<T>
pub fn read_json<T>(json_path: impl AsRef<Path>) -> Option<T>
where
T: serde::de::DeserializeOwned,
{
match std::fs::File::open(memory_json_path) {
match std::fs::File::open(json_path) {
Ok(file) => {
let reader = std::io::BufReader::new(file);
match serde_json::from_reader(reader) {

View file

@ -7,6 +7,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
## Unreleased
* You can control the initial size of the native window with `App::initial_window_size`.
* You can control the maximum egui web canvas size with `App::max_size_points`.

View file

@ -87,6 +87,11 @@ pub trait App {
/// The name of your App.
fn name(&self) -> &str;
/// The initial size of the native window in points (logical pixels).
fn initial_window_size(&self) -> Option<egui::Vec2> {
None
}
/// Time between automatic calls to `save()`
fn auto_save_interval(&self) -> std::time::Duration {
std::time::Duration::from_secs(30)