105 lines
No EOL
3 KiB
Rust
105 lines
No EOL
3 KiB
Rust
// Copyright 2023 The Grim Developers
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
|
|
#![windows_subsystem = "windows"]
|
|
|
|
pub fn main() {
|
|
#[allow(dead_code)]
|
|
#[cfg(not(target_os = "android"))]
|
|
real_main();
|
|
}
|
|
|
|
#[allow(dead_code)]
|
|
#[cfg(not(target_os = "android"))]
|
|
fn real_main() {
|
|
#[cfg(debug_assertions)]
|
|
env_logger::builder()
|
|
.filter_level(log::LevelFilter::Info)
|
|
.parse_default_env()
|
|
.init();
|
|
|
|
use grim::gui::platform::Desktop;
|
|
use grim::gui::App;
|
|
use grim::AppConfig;
|
|
|
|
use std::sync::Arc;
|
|
use egui::pos2;
|
|
use egui::os::OperatingSystem;
|
|
use eframe::icon_data::from_png_bytes;
|
|
|
|
let platform = Desktop::default();
|
|
|
|
// Setup system theme if not set.
|
|
use dark_light::Mode;
|
|
if let None = AppConfig::dark_theme() {
|
|
let dark = match dark_light::detect() {
|
|
Mode::Dark => true,
|
|
Mode::Light => false,
|
|
Mode::Default => false
|
|
};
|
|
AppConfig::set_dark_theme(dark);
|
|
}
|
|
|
|
// Setup window size.
|
|
let (width, height) = AppConfig::window_size();
|
|
|
|
let mut viewport = egui::ViewportBuilder::default()
|
|
.with_min_inner_size([AppConfig::MIN_WIDTH, AppConfig::MIN_HEIGHT])
|
|
.with_inner_size([width, height]);
|
|
|
|
// Setup an icon.
|
|
if let Ok(icon) = from_png_bytes(include_bytes!("../img/icon.png")) {
|
|
viewport = viewport.with_icon(Arc::new(icon));
|
|
}
|
|
|
|
// Setup window position.
|
|
if let Some((x, y)) = AppConfig::window_pos() {
|
|
viewport = viewport.with_position(pos2(x, y));
|
|
}
|
|
|
|
// Setup window decorations.
|
|
viewport = viewport
|
|
.with_transparent(true)
|
|
.with_decorations(false);
|
|
|
|
let mut options = eframe::NativeOptions {
|
|
viewport,
|
|
..Default::default()
|
|
};
|
|
|
|
// Use Glow renderer for Windows.
|
|
let is_windows = OperatingSystem::from_target_os() == OperatingSystem::Windows;
|
|
options.renderer = if is_windows {
|
|
eframe::Renderer::Glow
|
|
} else {
|
|
eframe::Renderer::Wgpu
|
|
};
|
|
|
|
match grim::start(options.clone(), grim::app_creator(App::new(platform.clone()))) {
|
|
Ok(_) => {}
|
|
Err(e) => {
|
|
if is_windows {
|
|
panic!("{}", e);
|
|
}
|
|
// Start with another renderer on error.
|
|
options.renderer = eframe::Renderer::Glow;
|
|
match grim::start(options, grim::app_creator(App::new(platform))) {
|
|
Ok(_) => {}
|
|
Err(e) => {
|
|
panic!("{}", e);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
} |