diff --git a/README.md b/README.md index 4f4a4a5..2987f87 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Gupax - WORK IN PROGRESS +# WORK IN PROGRESS - ETA: December 25th, 2022 ![banner.png](https://github.com/hinto-janaiyo/gupax/blob/main/images/banner.png) **Gupax** (*guh-picks*) is a cross-platform GUI for mining [**Monero**](https://github.com/monero-project/monero) on [**P2Pool**](https://github.com/SChernykh/p2pool), using [**XMRig**](https://github.com/xmrig/xmrig). diff --git a/src/gupax.rs b/src/gupax.rs index ddfd5c7..d385b1f 100644 --- a/src/gupax.rs +++ b/src/gupax.rs @@ -113,11 +113,11 @@ impl Gupax { ui.group(|ui| { let width = (width - SPACE*7.5)/4.0; let height = height/8.0; - let mut style = (*ctx.style()).clone(); - style.spacing.icon_width_inner = width / 8.0; - style.spacing.icon_width = width / 6.0; - style.spacing.icon_spacing = 20.0; - ctx.set_style(style); +// let mut style = (*ctx.style()).clone(); +// style.spacing.icon_width_inner = width / 8.0; +// style.spacing.icon_width = width / 6.0; +// style.spacing.icon_spacing = 20.0; +// ctx.set_style(style); ui.add_sized([width, height], Checkbox::new(&mut self.auto_update, "Auto-update")).on_hover_text(GUPAX_AUTO_UPDATE); ui.separator(); ui.add_sized([width, height], Checkbox::new(&mut self.update_via_tor, "Update via Tor")).on_hover_text(GUPAX_UPDATE_VIA_TOR); diff --git a/src/main.rs b/src/main.rs index a7c1e6d..2aa4523 100644 --- a/src/main.rs +++ b/src/main.rs @@ -71,6 +71,12 @@ pub struct App { tab: Tab, // What tab are we on? width: f32, // Top-level width height: f32, // Top-level height + // This is a one time trigger so [init_text_styles()] isn't + // called 60x a second when resizing the window. Instead, + // it only gets called if this bool is true and the user + // is hovering over egui (ctx.is_pointer_over_area()). + must_resize: bool, + first_frame: bool, // Is this the very first frame? // State og: Arc>, // og = Old state to compare against state: State, // state = Working state (current settings) @@ -127,6 +133,8 @@ impl App { ping: Arc::new(Mutex::new(Ping::new())), width: APP_DEFAULT_WIDTH, height: APP_DEFAULT_HEIGHT, + must_resize: false, + first_frame: true, og: Arc::new(Mutex::new(State::new())), state: State::new(), update: Arc::new(Mutex::new(Update::new(String::new(), PathBuf::new(), PathBuf::new(), true))), @@ -420,23 +428,14 @@ fn init_text_styles(ctx: &egui::Context, width: f32) { (Name("MonospaceSmall".into()), FontId::new(scale/2.5, egui::FontFamily::Monospace)), (Name("MonospaceLarge".into()), FontId::new(scale/1.5, egui::FontFamily::Monospace)), ].into(); -// style.visuals.selection.stroke = Stroke { width: 5.0, color: Color32::from_rgb(255, 255, 255) }; -// style.spacing.slider_width = scale; -// style.spacing.text_edit_width = scale; -// style.spacing.button_padding = Vec2::new(scale/2.0, scale/2.0); + style.spacing.icon_width_inner = width / 35.0; + style.spacing.icon_width = width / 25.0; + style.spacing.icon_spacing = 20.0; ctx.set_style(style); ctx.set_pixels_per_point(1.0); ctx.request_repaint(); } -//fn init_color(ctx: &egui::Context) { -// let mut style = (*ctx.style()).clone(); -// style.visuals.widgets.inactive.fg_stroke.color = Color32::from_rgb(100, 100, 100); -// style.visuals.selection.bg_fill = Color32::from_rgb(255, 125, 50); -// style.visuals.selection.stroke = Stroke { width: 5.0, color: Color32::from_rgb(255, 255, 255) }; -// ctx.set_style(style); -//} - fn init_logger(now: Instant) { use env_logger::fmt::Color; Builder::new().format(move |buf, record| { @@ -508,6 +507,7 @@ fn init_auto(app: &mut App) { } } +//---------------------------------------------------------------------------------------------------- Reset functions fn reset_state(path: &PathBuf) -> Result<(), TomlError> { match State::create_new(path) { Ok(_) => { info!("Resetting [state.toml] ... OK"); Ok(()) }, @@ -676,15 +676,28 @@ impl eframe::App for App { // *-------* // | DEBUG | // *-------* -// crate::node::ping(); -// std::process::exit(0); -// init_color(ctx); // This sets the top level Ui dimensions. // Used as a reference for other uis. - CentralPanel::default().show(ctx, |ui| { self.width = ui.available_width(); self.height = ui.available_height(); }); - // This sets fonts globally depending on the width. - init_text_styles(ctx, self.width); + CentralPanel::default().show(ctx, |ui| { + let available_width = ui.available_width(); + if self.width != available_width { + self.width = available_width; + self.must_resize = true; + }; + self.height = ui.available_height(); + }); + // This resizes fonts/buttons/etc globally depending on the width. + // This is separate from the [self.width != available_width] logic above + // because placing [init_text_styles()] above would mean calling it 60x a second + // while the user was readjusting the frame. It's a pretty heavy operation and looks + // buggy when calling it that many times. Looking for a [must_resize] in addtion to + // checking if the user is hovering over the app means that we only have call it once. + if self.must_resize && ctx.is_pointer_over_area(){ + info!("App | Resizing frame to match new internal resolution: [{}x{}]", self.width, self.height); + init_text_styles(ctx, self.width); + self.must_resize = false; + } // If [F11] was pressed, reverse [fullscreen] bool if ctx.input_mut().consume_key(Modifiers::NONE, Key::F11) { diff --git a/src/p2pool.rs b/src/p2pool.rs index 62a6b46..2717d72 100644 --- a/src/p2pool.rs +++ b/src/p2pool.rs @@ -166,11 +166,11 @@ impl P2pool { ui.horizontal(|ui| { let width = (width/2.0)-(SPACE*1.75); // [Auto-node] + [Auto-select] - let mut style = (*ctx.style()).clone(); - style.spacing.icon_width_inner = width / 16.0; - style.spacing.icon_width = width / 6.0; - style.spacing.icon_spacing = 20.0; - ctx.set_style(style); +// let mut style = (*ctx.style()).clone(); +// style.spacing.icon_width_inner = width / 16.0; +// style.spacing.icon_width = width / 6.0; +// style.spacing.icon_spacing = 20.0; +// ctx.set_style(style); ui.add_sized([width, height], Checkbox::new(&mut self.auto_select, "Auto-select")).on_hover_text(P2POOL_AUTO_SELECT); ui.separator(); ui.add_sized([width, height], Checkbox::new(&mut self.auto_node, "Auto-node")).on_hover_text(P2POOL_AUTO_NODE); diff --git a/src/xmrig.rs b/src/xmrig.rs index 0c46639..63bc423 100644 --- a/src/xmrig.rs +++ b/src/xmrig.rs @@ -341,7 +341,7 @@ impl Xmrig { ui.horizontal(|ui| { let text; let color; - let len = self.port.len(); + let len = self.api_port.len(); if self.api_port.is_empty() { text = format!("HTTP API Port [ {}/5 ]➖", len); color = LIGHT_GRAY; @@ -350,7 +350,7 @@ impl Xmrig { text = format!("HTTP API Port [ {}/5 ]✔", len); color = GREEN; } else { - text = format!(" Port [ {}/5 ]❌", len); + text = format!("HTTP API Port [ {}/5 ]❌", len); color = RED; incorrect_input = true; } @@ -367,11 +367,11 @@ impl Xmrig { ui.horizontal(|ui| { let width = (ui.available_width()/2.0)-11.0; let height = text_edit*2.0; - let mut style = (*ctx.style()).clone(); - style.spacing.icon_width_inner = width / 8.0; - style.spacing.icon_width = width / 6.0; - style.spacing.icon_spacing = 20.0; - ctx.set_style(style); +// let mut style = (*ctx.style()).clone(); +// style.spacing.icon_width_inner = width / 8.0; +// style.spacing.icon_width = width / 6.0; +// style.spacing.icon_spacing = 20.0; +// ctx.set_style(style); ui.add_sized([width, height], Checkbox::new(&mut self.tls, "TLS Connection")).on_hover_text(XMRIG_TLS); ui.separator(); ui.add_sized([width, height], Checkbox::new(&mut self.keepalive, "Keepalive")).on_hover_text(XMRIG_KEEPALIVE);