gui: change Style

Everything to `Monospace`, set all colors to `ACCENT_COLOR`,
round all corners, set all widget text to `255, 255, 255` (rgb).
This commit is contained in:
hinto.janai 2023-04-16 12:49:48 -04:00
parent 2dc77b6ff2
commit f1320b91bd
No known key found for this signature in database
GPG key ID: D47CE05FA175A499
9 changed files with 147 additions and 77 deletions

1
Cargo.lock generated
View file

@ -1968,6 +1968,7 @@ dependencies = [
"hyper-tls", "hyper-tls",
"image", "image",
"is_elevated", "is_elevated",
"lazy_static",
"log", "log",
"num-format", "num-format",
"num_cpus", "num_cpus",

View file

@ -7,6 +7,7 @@ documentation = "https://github.com/hinto-janai/gupax"
edition = "2021" edition = "2021"
[profile.release] [profile.release]
panic = "abort"
debug = false debug = false
strip = "symbols" strip = "symbols"
codegen-units = 1 codegen-units = 1
@ -45,6 +46,7 @@ figment = { version = "0.10.8", features = ["toml"] }
hyper = "0.14.20" hyper = "0.14.20"
hyper-tls = "0.5.0" hyper-tls = "0.5.0"
image = { version = "0.24.4", features = ["png"] } image = { version = "0.24.4", features = ["png"] }
lazy_static = "1.4.0"
log = "0.4.17" log = "0.4.17"
num_cpus = "1.13.1" num_cpus = "1.13.1"
num-format = { version = "0.4.3", default-features = false } num-format = { version = "0.4.3", default-features = false }

Binary file not shown.

Before

Width:  |  Height:  |  Size: 46 KiB

After

Width:  |  Height:  |  Size: 38 KiB

View file

@ -113,7 +113,7 @@ pub const WHITE: egui::Color32 = egui::Color32::WHITE;
pub const GRAY: egui::Color32 = egui::Color32::GRAY; pub const GRAY: egui::Color32 = egui::Color32::GRAY;
pub const LIGHT_GRAY: egui::Color32 = egui::Color32::LIGHT_GRAY; pub const LIGHT_GRAY: egui::Color32 = egui::Color32::LIGHT_GRAY;
pub const BLACK: egui::Color32 = egui::Color32::BLACK; pub const BLACK: egui::Color32 = egui::Color32::BLACK;
pub const DARK_GRAY: egui::Color32 = egui::Color32::from_rgb(18, 18, 18); pub const DARK_GRAY: egui::Color32 = egui::Color32::from_gray(13);
// [Duration] constants // [Duration] constants
pub const SECOND: std::time::Duration = std::time::Duration::from_secs(1); pub const SECOND: std::time::Duration = std::time::Duration::from_secs(1);
@ -248,15 +248,15 @@ pub const GUPAX_TAB_XMRIG: &str = "Set the tab Gupax starts on to: XMRig"
pub const GUPAX_SIMPLE: &str = pub const GUPAX_SIMPLE: &str =
r#"Use simple Gupax settings: r#"Use simple Gupax settings:
- Update button - Update button
- Basic toggles"#; - Basic toggles"#;
pub const GUPAX_ADVANCED: &str = pub const GUPAX_ADVANCED: &str =
r#"Use advanced Gupax settings: r#"Use advanced Gupax settings:
- Update button - Update button
- Basic toggles - Basic toggles
- P2Pool/XMRig binary path selector - P2Pool/XMRig binary path selector
- Gupax resolution sliders - Gupax resolution sliders
- Gupax start-up tab selector"#; - Gupax start-up tab selector"#;
pub const GUPAX_SELECT: &str = "Open a file explorer to select a file"; pub const GUPAX_SELECT: &str = "Open a file explorer to select a file";
pub const GUPAX_PATH_P2POOL: &str = "The location of the P2Pool binary: Both absolute and relative paths are accepted; A red [X] will appear if there is no file found at the given path"; pub const GUPAX_PATH_P2POOL: &str = "The location of the P2Pool binary: Both absolute and relative paths are accepted; A red [X] will appear if there is no file found at the given path";
pub const GUPAX_PATH_XMRIG: &str = "The location of the XMRig binary: Both absolute and relative paths are accepted; A red [X] will appear if there is no file found at the given path"; pub const GUPAX_PATH_XMRIG: &str = "The location of the XMRig binary: Both absolute and relative paths are accepted; A red [X] will appear if there is no file found at the given path";
@ -293,16 +293,16 @@ r#"WARNING: Use [--no-color] and make sure to set [--data-api <PATH>] & [--local
Start P2Pool with these arguments and override all below settings"#; Start P2Pool with these arguments and override all below settings"#;
pub const P2POOL_SIMPLE: &str = pub const P2POOL_SIMPLE: &str =
r#"Use simple P2Pool settings: r#"Use simple P2Pool settings:
- Remote remote Monero node - Remote remote Monero node
- Default P2Pool settings + Mini"#; - Default P2Pool settings + Mini"#;
pub const P2POOL_ADVANCED: &str = pub const P2POOL_ADVANCED: &str =
r#"Use advanced P2Pool settings: r#"Use advanced P2Pool settings:
- Terminal input - Terminal input
- Overriding command arguments - Overriding command arguments
- Manual node list - Manual node list
- P2Pool Main/Mini selection - P2Pool Main/Mini selection
- Out/In peer setting - Out/In peer setting
- Log level setting"#; - Log level setting"#;
pub const P2POOL_NAME: &str = "Add a unique name to identify this node; Only [A-Za-z0-9-_.] and spaces allowed; Max length = 30 characters"; pub const P2POOL_NAME: &str = "Add a unique name to identify this node; Only [A-Za-z0-9-_.] and spaces allowed; Max length = 30 characters";
pub const P2POOL_NODE_IP: &str = "Specify the Monero Node IP to connect to with P2Pool; It must be a valid IPv4 address or a valid domain name; Max length = 255 characters"; pub const P2POOL_NODE_IP: &str = "Specify the Monero Node IP to connect to with P2Pool; It must be a valid IPv4 address or a valid domain name; Max length = 255 characters";
pub const P2POOL_RPC_PORT: &str = "Specify the RPC port of the Monero node; [1-65535]"; pub const P2POOL_RPC_PORT: &str = "Specify the RPC port of the Monero node; [1-65535]";
@ -321,19 +321,19 @@ pub const LIST_CLEAR: &str = "Clear all current values";
// XMRig // XMRig
pub const XMRIG_SIMPLE: &str = pub const XMRIG_SIMPLE: &str =
r#"Use simple XMRig settings: r#"Use simple XMRig settings:
- Mine to local P2Pool (localhost:3333) - Mine to local P2Pool (localhost:3333)
- CPU thread slider - CPU thread slider
- HTTP API @ localhost:18088"#; - HTTP API @ localhost:18088"#;
pub const XMRIG_ADVANCED: &str = pub const XMRIG_ADVANCED: &str =
r#"Use advanced XMRig settings: r#"Use advanced XMRig settings:
- Terminal input - Terminal input
- Overriding command arguments - Overriding command arguments
- Custom payout address - Custom payout address
- CPU thread slider - CPU thread slider
- Manual pool list - Manual pool list
- Custom HTTP API IP/Port - Custom HTTP API IP/Port
- TLS setting - TLS setting
- Keepalive setting"#; - Keepalive setting"#;
pub const XMRIG_INPUT: &str = "Send a command to XMRig"; pub const XMRIG_INPUT: &str = "Send a command to XMRig";
pub const XMRIG_ARGUMENTS: &str = pub const XMRIG_ARGUMENTS: &str =
r#"WARNING: Use [--no-color] and make sure to set [--http-host <IP>] & [--http-port <PORT>] so that the [Status] tab can work! r#"WARNING: Use [--no-color] and make sure to set [--http-host <IP>] & [--http-port <PORT>] so that the [Status] tab can work!
@ -381,6 +381,98 @@ r#"Gupax is licensed under GPLv3.
For more information, see link below: For more information, see link below:
<https://github.com/hinto-janai/gupax>"#; <https://github.com/hinto-janai/gupax>"#;
//---------------------------------------------------------------------------------------------------- Visuals
use egui::epaint::{
Rounding,
Shadow,
Stroke
};
use egui::{
Color32,
Visuals,
style::Spacing,
};
use egui::style::{
Selection,
Widgets,
WidgetVisuals,
};
pub const ACCENT_COLOR: Color32 = Color32::from_rgb(200, 100, 100);
pub const BG: Color32 = Color32::from_gray(20);
lazy_static::lazy_static! {
/// This is based off [`Visuals::dark()`].
pub static ref VISUALS: Visuals = {
let selection = Selection {
bg_fill: ACCENT_COLOR,
stroke: Stroke::new(1.0, Color32::from_gray(255)),
};
let widgets = Widgets {
noninteractive: WidgetVisuals {
bg_fill: BG,
bg_stroke: Stroke::new(1.0, Color32::from_gray(60)), // separators, indentation lines
fg_stroke: Stroke::new(1.0, Color32::from_gray(140)), // normal text color
rounding: Rounding::same(10.0),
expansion: 0.0,
},
inactive: WidgetVisuals {
bg_fill: Color32::from_gray(50),
bg_stroke: Default::default(),
fg_stroke: Stroke::new(1.0, Color32::from_gray(180)), // button text
rounding: Rounding::same(10.0),
expansion: 0.0,
},
hovered: WidgetVisuals {
bg_fill: Color32::from_gray(80),
bg_stroke: Stroke::new(1.0, Color32::from_gray(150)), // e.g. hover over window edge or button
fg_stroke: Stroke::new(1.5, Color32::from_gray(240)),
rounding: Rounding::same(10.0),
expansion: 1.0,
},
active: WidgetVisuals {
bg_fill: Color32::from_gray(55),
bg_stroke: Stroke::new(1.0, Color32::WHITE),
fg_stroke: Stroke::new(2.0, Color32::WHITE),
rounding: Rounding::same(10.0),
expansion: 1.0,
},
open: WidgetVisuals {
bg_fill: Color32::from_gray(27),
bg_stroke: Stroke::new(1.0, Color32::from_gray(60)),
fg_stroke: Stroke::new(1.0, Color32::from_gray(210)),
rounding: Rounding::same(10.0),
expansion: 0.0,
},
};
Visuals {
dark_mode: true,
override_text_color: None,
widgets,
selection,
hyperlink_color: Color32::from_rgb(90, 170, 255),
faint_bg_color: Color32::from_additive_luminance(5), // visible, but barely so
extreme_bg_color: Color32::from_gray(10), // e.g. TextEdit background
code_bg_color: Color32::from_gray(64),
warn_fg_color: Color32::from_rgb(255, 143, 0), // orange
error_fg_color: Color32::from_rgb(255, 0, 0), // red
window_rounding: Rounding::same(6.0),
window_shadow: Shadow::big_dark(),
popup_shadow: Shadow::small_dark(),
resize_corner_size: 12.0,
text_cursor_width: 2.0,
text_cursor_preview: false,
clip_rect_margin: 3.0, // should be at least half the size of the widest frame stroke + max WidgetVisuals::expansion
button_frame: true,
collapsing_header_frame: false,
}
};
}
//---------------------------------------------------------------------------------------------------- TESTS //---------------------------------------------------------------------------------------------------- TESTS
#[cfg(test)] #[cfg(test)]
mod test { mod test {

View file

@ -109,7 +109,7 @@ impl crate::disk::Gupax {
ui.set_enabled(updating); ui.set_enabled(updating);
let prog = *lock2!(update,prog); let prog = *lock2!(update,prog);
let msg = format!("{}\n{}{}", *lock2!(update,msg), prog, "%"); let msg = format!("{}\n{}{}", *lock2!(update,msg), prog, "%");
ui.add_sized([width, height*1.4], Label::new(RichText::text_style(RichText::new(msg), Monospace))); ui.add_sized([width, height*1.4], Label::new(RichText::new(msg)));
let height = height/2.0; let height = height/2.0;
if updating { if updating {
ui.add_sized([width, height], Spinner::new().size(height)); ui.add_sized([width, height], Spinner::new().size(height));
@ -144,11 +144,10 @@ impl crate::disk::Gupax {
debug!("Gupax Tab | Rendering P2Pool/XMRig path selection"); debug!("Gupax Tab | Rendering P2Pool/XMRig path selection");
// P2Pool/XMRig binary path selection // P2Pool/XMRig binary path selection
ui.style_mut().override_text_style = Some(Monospace);
let height = height/28.0; let height = height/28.0;
let text_edit = (ui.available_width()/10.0)-SPACE; let text_edit = (ui.available_width()/10.0)-SPACE;
ui.group(|ui| { ui.group(|ui| {
ui.add_sized([ui.available_width(), height/2.0], Label::new(RichText::new("P2Pool/XMRig PATHs").underline().color(LIGHT_GRAY).text_style(TextStyle::Monospace))).on_hover_text("Gupax is online"); ui.add_sized([ui.available_width(), height/2.0], Label::new(RichText::new("P2Pool/XMRig PATHs").underline().color(LIGHT_GRAY))).on_hover_text("Gupax is online");
ui.separator(); ui.separator();
ui.horizontal(|ui| { ui.horizontal(|ui| {
if self.p2pool_path.is_empty() { if self.p2pool_path.is_empty() {
@ -196,7 +195,7 @@ impl crate::disk::Gupax {
debug!("Gupax Tab | Rendering [Tab] selector"); debug!("Gupax Tab | Rendering [Tab] selector");
ui.group(|ui| { ui.group(|ui| {
let width = (width/5.0)-(SPACE*1.93); let width = (width/5.0)-(SPACE*1.93);
ui.add_sized([ui.available_width(), height/2.0], Label::new(RichText::new("Default Tab").underline().color(LIGHT_GRAY).text_style(TextStyle::Monospace))).on_hover_text(GUPAX_TAB); ui.add_sized([ui.available_width(), height/2.0], Label::new(RichText::new("Default Tab").underline().color(LIGHT_GRAY))).on_hover_text(GUPAX_TAB);
ui.separator(); ui.separator();
ui.horizontal(|ui| { ui.horizontal(|ui| {
if ui.add_sized([width, height], SelectableLabel::new(self.tab == Tab::About, "About")).on_hover_text(GUPAX_TAB_ABOUT).clicked() { self.tab = Tab::About; } if ui.add_sized([width, height], SelectableLabel::new(self.tab == Tab::About, "About")).on_hover_text(GUPAX_TAB_ABOUT).clicked() { self.tab = Tab::About; }
@ -213,7 +212,7 @@ impl crate::disk::Gupax {
// Gupax App resolution sliders // Gupax App resolution sliders
debug!("Gupax Tab | Rendering resolution sliders"); debug!("Gupax Tab | Rendering resolution sliders");
ui.group(|ui| { ui.group(|ui| {
ui.add_sized([ui.available_width(), height/2.0], Label::new(RichText::new("Width/Height Adjust").underline().color(LIGHT_GRAY).text_style(TextStyle::Monospace))).on_hover_text(GUPAX_ADJUST); ui.add_sized([ui.available_width(), height/2.0], Label::new(RichText::new("Width/Height Adjust").underline().color(LIGHT_GRAY))).on_hover_text(GUPAX_ADJUST);
ui.separator(); ui.separator();
ui.vertical(|ui| { ui.vertical(|ui| {
let width = width/10.0; let width = width/10.0;

View file

@ -165,6 +165,7 @@ impl App {
fn cc(cc: &eframe::CreationContext<'_>, app: Self) -> Self { fn cc(cc: &eframe::CreationContext<'_>, app: Self) -> Self {
let resolution = cc.integration_info.window_info.size; let resolution = cc.integration_info.window_info.size;
init_text_styles(&cc.egui_ctx, resolution[0]); init_text_styles(&cc.egui_ctx, resolution[0]);
cc.egui_ctx.set_visuals(VISUALS.clone());
Self { Self {
resolution, resolution,
..app ..app
@ -734,13 +735,13 @@ fn init_text_styles(ctx: &egui::Context, width: f32) {
let scale = width / 30.0; let scale = width / 30.0;
let mut style = (*ctx.style()).clone(); let mut style = (*ctx.style()).clone();
style.text_styles = [ style.text_styles = [
(Small, FontId::new(scale/3.0, Proportional)), (Small, FontId::new(scale/3.0, egui::FontFamily::Monospace)),
(Body, FontId::new(scale/2.0, Proportional)), (Body, FontId::new(scale/2.0, egui::FontFamily::Monospace)),
(Button, FontId::new(scale/2.0, Proportional)), (Button, FontId::new(scale/2.0, egui::FontFamily::Monospace)),
(Monospace, FontId::new(scale/2.0, egui::FontFamily::Monospace)), (Monospace, FontId::new(scale/2.0, egui::FontFamily::Monospace)),
(Heading, FontId::new(scale/1.5, Proportional)), (Heading, FontId::new(scale/1.5, egui::FontFamily::Monospace)),
(Name("Tab".into()), FontId::new(scale*1.2, Proportional)), (Name("Tab".into()), FontId::new(scale*1.2, egui::FontFamily::Monospace)),
(Name("Bottom".into()), FontId::new(scale/2.0, Proportional)), (Name("Bottom".into()), FontId::new(scale/2.0, egui::FontFamily::Monospace)),
(Name("MonospaceSmall".into()), FontId::new(scale/2.5, egui::FontFamily::Monospace)), (Name("MonospaceSmall".into()), FontId::new(scale/2.5, egui::FontFamily::Monospace)),
(Name("MonospaceLarge".into()), FontId::new(scale/1.5, egui::FontFamily::Monospace)), (Name("MonospaceLarge".into()), FontId::new(scale/1.5, egui::FontFamily::Monospace)),
].into(); ].into();
@ -1327,7 +1328,6 @@ impl eframe::App for App {
ui.add_sized([width, height], Hyperlink::from_label_and_url("Click here for more info.", "https://xmrig.com/docs/miner/randomx-optimization-guide")) ui.add_sized([width, height], Hyperlink::from_label_and_url("Click here for more info.", "https://xmrig.com/docs/miner/randomx-optimization-guide"))
}, },
Debug => { Debug => {
ui.style_mut().override_text_style = Some(Monospace);
egui::Frame::none().fill(DARK_GRAY).show(ui, |ui| { egui::Frame::none().fill(DARK_GRAY).show(ui, |ui| {
let width = ui.available_width(); let width = ui.available_width();
let height = ui.available_height(); let height = ui.available_height();
@ -1418,7 +1418,6 @@ impl eframe::App for App {
let height = ui.available_height()/4.0; let height = ui.available_height()/4.0;
let mut sudo = lock!(self.sudo); let mut sudo = lock!(self.sudo);
let hide = sudo.hide; let hide = sudo.hide;
ui.style_mut().override_text_style = Some(Monospace);
if sudo.testing { if sudo.testing {
ui.add_sized([width, height], Spinner::new().size(height)); ui.add_sized([width, height], Spinner::new().size(height));
ui.set_enabled(false); ui.set_enabled(false);
@ -1480,11 +1479,7 @@ impl eframe::App for App {
let height = self.height/15.0; let height = self.height/15.0;
ui.add_space(4.0); ui.add_space(4.0);
ui.horizontal(|ui| { ui.horizontal(|ui| {
let style = ui.style_mut(); ui.style_mut().override_text_style = Some(Name("Tab".into()));
style.override_text_style = Some(Name("Tab".into()));
style.visuals.widgets.inactive.fg_stroke.color = Color32::from_rgb(100, 100, 100);
style.visuals.selection.bg_fill = Color32::from_rgb(255, 120, 120);
style.visuals.selection.stroke = Stroke { width: 5.0, color: Color32::from_rgb(255, 255, 255) };
if ui.add_sized([width, height], SelectableLabel::new(self.tab == Tab::About, "About")).clicked() { self.tab = Tab::About; } if ui.add_sized([width, height], SelectableLabel::new(self.tab == Tab::About, "About")).clicked() { self.tab = Tab::About; }
ui.separator(); ui.separator();
if ui.add_sized([width, height], SelectableLabel::new(self.tab == Tab::Status, "Status")).clicked() { self.tab = Tab::Status; } if ui.add_sized([width, height], SelectableLabel::new(self.tab == Tab::Status, "Status")).clicked() { self.tab = Tab::Status; }
@ -1852,24 +1847,21 @@ path_xmr: {:#?}\n
ui.vertical_centered(|ui| { ui.vertical_centered(|ui| {
ui.set_max_height(max_height); ui.set_max_height(max_height);
// Display [Gupax] banner // Display [Gupax] banner
let link_width = width/15.0; let link_width = width/14.0;
self.img.banner.show_max_size(ui, Vec2::new(width, height*3.0)); self.img.banner.show_max_size(ui, Vec2::new(width, height*3.0));
ui.add_sized([width, height], Label::new("Gupax is a GUI for mining")); ui.add_sized([width, height], Label::new("is a GUI for mining"));
ui.add_sized([link_width, height], Hyperlink::from_label_and_url("[Monero]", "https://www.github.com/monero-project/monero")); ui.add_sized([link_width, height], Hyperlink::from_label_and_url("[Monero]", "https://www.github.com/monero-project/monero"));
ui.add_sized([width, height], Label::new("on")); ui.add_sized([width, height], Label::new("on"));
ui.add_sized([link_width, height], Hyperlink::from_label_and_url("[P2Pool]", "https://www.github.com/SChernykh/p2pool")); ui.add_sized([link_width, height], Hyperlink::from_label_and_url("[P2Pool]", "https://www.github.com/SChernykh/p2pool"));
ui.add_sized([width, height], Label::new("using")); ui.add_sized([width, height], Label::new("using"));
ui.add_sized([link_width, height], Hyperlink::from_label_and_url("[XMRig]", "https://www.github.com/xmrig/xmrig")); ui.add_sized([link_width, height], Hyperlink::from_label_and_url("[XMRig]", "https://www.github.com/xmrig/xmrig"));
ui.add_space(SPACE*3.0); ui.add_space(SPACE*2.0);
ui.style_mut().override_text_style = Some(Monospace);
ui.add_sized([width, height], Label::new(KEYBOARD_SHORTCUTS)); ui.add_sized([width, height], Label::new(KEYBOARD_SHORTCUTS));
ui.style_mut().override_text_style = Some(Body); ui.add_space(SPACE*2.0);
ui.add_space(SPACE*3.0);
ui.add_sized([width, height], Label::new("egui is licensed under MIT & Apache-2.0"));
ui.add_sized([width, height], Label::new("Gupax, P2Pool, and XMRig are licensed under GPLv3"));
if cfg!(debug_assertions) { ui.label(format!("Gupax is running in debug mode - {}", self.now.elapsed().as_secs_f64())); } if cfg!(debug_assertions) { ui.label(format!("Gupax is running in debug mode - {}", self.now.elapsed().as_secs_f64())); }
ui.label(format!("Gupax has been running for: {}", lock!(self.pub_sys).gupax_uptime));
}); });
} }
Tab::Status => { Tab::Status => {

View file

@ -42,7 +42,6 @@ impl crate::disk::P2pool {
if self.simple { if self.simple {
let height = height / 2.4; let height = height / 2.4;
let width = width - SPACE; let width = width - SPACE;
ui.style_mut().override_text_style = Some(Monospace);
egui::Frame::none().fill(DARK_GRAY).show(ui, |ui| { egui::Frame::none().fill(DARK_GRAY).show(ui, |ui| {
ui.style_mut().override_text_style = Some(Name("MonospaceSmall".into())); ui.style_mut().override_text_style = Some(Name("MonospaceSmall".into()));
egui::ScrollArea::vertical().stick_to_bottom(true).max_width(width).max_height(height).auto_shrink([false; 2]).show_viewport(ui, |ui, _| { egui::ScrollArea::vertical().stick_to_bottom(true).max_width(width).max_height(height).auto_shrink([false; 2]).show_viewport(ui, |ui, _| {
@ -53,7 +52,6 @@ impl crate::disk::P2pool {
} else { } else {
let height = height / 2.8; let height = height / 2.8;
let width = width - SPACE; let width = width - SPACE;
ui.style_mut().override_text_style = Some(Monospace);
egui::Frame::none().fill(DARK_GRAY).show(ui, |ui| { egui::Frame::none().fill(DARK_GRAY).show(ui, |ui| {
ui.style_mut().override_text_style = Some(Name("MonospaceSmall".into())); ui.style_mut().override_text_style = Some(Name("MonospaceSmall".into()));
egui::ScrollArea::vertical().stick_to_bottom(true).max_width(width).max_height(height).auto_shrink([false; 2]).show_viewport(ui, |ui, _| { egui::ScrollArea::vertical().stick_to_bottom(true).max_width(width).max_height(height).auto_shrink([false; 2]).show_viewport(ui, |ui, _| {
@ -77,7 +75,6 @@ impl crate::disk::P2pool {
debug!("P2Pool Tab | Rendering [Arguments]"); debug!("P2Pool Tab | Rendering [Arguments]");
ui.group(|ui| { ui.horizontal(|ui| { ui.group(|ui| { ui.horizontal(|ui| {
let width = (width/10.0) - SPACE; let width = (width/10.0) - SPACE;
ui.style_mut().override_text_style = Some(Monospace);
ui.add_sized([width, text_edit], Label::new("Command arguments:")); ui.add_sized([width, text_edit], Label::new("Command arguments:"));
ui.add_sized([ui.available_width(), text_edit], TextEdit::hint_text(TextEdit::singleline(&mut self.arguments), r#"--wallet <...> --host <...>"#)).on_hover_text(P2POOL_ARGUMENTS); ui.add_sized([ui.available_width(), text_edit], TextEdit::hint_text(TextEdit::singleline(&mut self.arguments), r#"--wallet <...> --host <...>"#)).on_hover_text(P2POOL_ARGUMENTS);
self.arguments.truncate(1024); self.arguments.truncate(1024);
@ -90,7 +87,6 @@ impl crate::disk::P2pool {
ui.group(|ui| { ui.group(|ui| {
let width = width - SPACE; let width = width - SPACE;
ui.spacing_mut().text_edit_width = (width)-(SPACE*3.0); ui.spacing_mut().text_edit_width = (width)-(SPACE*3.0);
ui.style_mut().override_text_style = Some(Monospace);
let text; let text;
let color; let color;
let len = format!("{:02}", self.address.len()); let len = format!("{:02}", self.address.len());
@ -152,11 +148,11 @@ impl crate::disk::P2pool {
debug!("P2Pool Tab | Rendering [ComboBox] of Remote Nodes"); debug!("P2Pool Tab | Rendering [ComboBox] of Remote Nodes");
let ip_location = crate::node::format_ip_location(&self.node, false); let ip_location = crate::node::format_ip_location(&self.node, false);
let text = RichText::new(format!("{}ms | {}", ms, ip_location)).color(color); let text = RichText::new(format!("{}ms | {}", ms, ip_location)).color(color);
ComboBox::from_id_source("remote_nodes").selected_text(RichText::text_style(text, Monospace)).show_ui(ui, |ui| { ComboBox::from_id_source("remote_nodes").selected_text(text).show_ui(ui, |ui| {
for data in lock!(ping).nodes.iter() { for data in lock!(ping).nodes.iter() {
let ms = crate::node::format_ms(data.ms); let ms = crate::node::format_ms(data.ms);
let ip_location = crate::node::format_ip_location(data.ip, true); let ip_location = crate::node::format_ip_location(data.ip, true);
let text = RichText::text_style(RichText::new(format!("{} | {}", ms, ip_location)).color(data.color), Monospace); let text = RichText::new(format!("{} | {}", ms, ip_location)).color(data.color);
ui.selectable_value(&mut self.node, data.ip.to_string(), text); ui.selectable_value(&mut self.node, data.ip.to_string(), text);
} }
}); });
@ -206,7 +202,7 @@ impl crate::disk::P2pool {
let pinging = lock!(ping).pinging; let pinging = lock!(ping).pinging;
ui.set_enabled(pinging); ui.set_enabled(pinging);
let prog = lock!(ping).prog.round(); let prog = lock!(ping).prog.round();
let msg = RichText::text_style(RichText::new(format!("{} ... {}%", lock!(ping).msg, prog)), Monospace); let msg = RichText::new(format!("{} ... {}%", lock!(ping).msg, prog));
let height = height / 1.25; let height = height / 1.25;
ui.add_space(5.0); ui.add_space(5.0);
ui.add_sized([width, height], Label::new(msg)); ui.add_sized([width, height], Label::new(msg));
@ -243,7 +239,6 @@ impl crate::disk::P2pool {
ui.group(|ui| { ui.group(|ui| {
let width = width/10.0; let width = width/10.0;
ui.vertical(|ui| { ui.vertical(|ui| {
ui.style_mut().override_text_style = Some(Monospace);
ui.spacing_mut().text_edit_width = width*3.32; ui.spacing_mut().text_edit_width = width*3.32;
ui.horizontal(|ui| { ui.horizontal(|ui| {
let text; let text;
@ -336,10 +331,10 @@ impl crate::disk::P2pool {
// [Ping List] // [Ping List]
debug!("P2Pool Tab | Rendering [Node List]"); debug!("P2Pool Tab | Rendering [Node List]");
let text = RichText::new(format!("{}. {}", self.selected_index+1, self.selected_name)); let text = RichText::new(format!("{}. {}", self.selected_index+1, self.selected_name));
ComboBox::from_id_source("manual_nodes").selected_text(RichText::text_style(text, Monospace)).show_ui(ui, |ui| { ComboBox::from_id_source("manual_nodes").selected_text(text).show_ui(ui, |ui| {
let mut n = 0; let mut n = 0;
for (name, node) in node_vec.iter() { for (name, node) in node_vec.iter() {
let text = RichText::text_style(RichText::new(format!("{}. {}\n IP: {}\n RPC: {}\n ZMQ: {}", n+1, name, node.ip, node.rpc, node.zmq)), Monospace); let text = RichText::new(format!("{}. {}\n IP: {}\n RPC: {}\n ZMQ: {}", n+1, name, node.ip, node.rpc, node.zmq));
if ui.add(SelectableLabel::new(self.selected_name == *name, text)).clicked() { if ui.add(SelectableLabel::new(self.selected_name == *name, text)).clicked() {
self.selected_index = n; self.selected_index = n;
let node = node.clone(); let node = node.clone();

View file

@ -55,7 +55,6 @@ pub fn show(&mut self, sys: &Arc<Mutex<Sys>>, p2pool_api: &Arc<Mutex<PubP2poolAp
debug!("Status Tab | Rendering [Gupax]"); debug!("Status Tab | Rendering [Gupax]");
ui.set_min_height(min_height); ui.set_min_height(min_height);
ui.add_sized([width, height], Label::new(RichText::new("[Gupax]").color(LIGHT_GRAY).text_style(TextStyle::Name("MonospaceLarge".into())))).on_hover_text("Gupax is online"); ui.add_sized([width, height], Label::new(RichText::new("[Gupax]").color(LIGHT_GRAY).text_style(TextStyle::Name("MonospaceLarge".into())))).on_hover_text("Gupax is online");
ui.style_mut().override_text_style = Some(Monospace);
let sys = lock!(sys); let sys = lock!(sys);
ui.add_sized([width, height], Label::new(RichText::new("Uptime").underline().color(BONE))).on_hover_text(STATUS_GUPAX_UPTIME); ui.add_sized([width, height], Label::new(RichText::new("Uptime").underline().color(BONE))).on_hover_text(STATUS_GUPAX_UPTIME);
ui.add_sized([width, height], Label::new(sys.gupax_uptime.to_string())); ui.add_sized([width, height], Label::new(sys.gupax_uptime.to_string()));
@ -77,8 +76,8 @@ pub fn show(&mut self, sys: &Arc<Mutex<Sys>>, p2pool_api: &Arc<Mutex<PubP2poolAp
ui.set_enabled(p2pool_alive); ui.set_enabled(p2pool_alive);
ui.set_min_height(min_height); ui.set_min_height(min_height);
ui.add_sized([width, height], Label::new(RichText::new("[P2Pool]").color(LIGHT_GRAY).text_style(TextStyle::Name("MonospaceLarge".into())))).on_hover_text("P2Pool is online").on_disabled_hover_text("P2Pool is offline"); ui.add_sized([width, height], Label::new(RichText::new("[P2Pool]").color(LIGHT_GRAY).text_style(TextStyle::Name("MonospaceLarge".into())))).on_hover_text("P2Pool is online").on_disabled_hover_text("P2Pool is offline");
let height = height/1.4;
ui.style_mut().override_text_style = Some(Name("MonospaceSmall".into())); ui.style_mut().override_text_style = Some(Name("MonospaceSmall".into()));
let height = height/1.4;
let api = lock!(p2pool_api); let api = lock!(p2pool_api);
ui.add_sized([width, height], Label::new(RichText::new("Uptime").underline().color(BONE))).on_hover_text(STATUS_P2POOL_UPTIME); ui.add_sized([width, height], Label::new(RichText::new("Uptime").underline().color(BONE))).on_hover_text(STATUS_P2POOL_UPTIME);
ui.add_sized([width, height], Label::new(format!("{}", api.uptime))); ui.add_sized([width, height], Label::new(format!("{}", api.uptime)));
@ -112,7 +111,6 @@ pub fn show(&mut self, sys: &Arc<Mutex<Sys>>, p2pool_api: &Arc<Mutex<PubP2poolAp
ui.set_enabled(xmrig_alive); ui.set_enabled(xmrig_alive);
ui.set_min_height(min_height); ui.set_min_height(min_height);
ui.add_sized([width, height], Label::new(RichText::new("[XMRig]").color(LIGHT_GRAY).text_style(TextStyle::Name("MonospaceLarge".into())))).on_hover_text("XMRig is online").on_disabled_hover_text("XMRig is offline"); ui.add_sized([width, height], Label::new(RichText::new("[XMRig]").color(LIGHT_GRAY).text_style(TextStyle::Name("MonospaceLarge".into())))).on_hover_text("XMRig is online").on_disabled_hover_text("XMRig is offline");
ui.style_mut().override_text_style = Some(Monospace);
let api = lock!(xmrig_api); let api = lock!(xmrig_api);
ui.add_sized([width, height], Label::new(RichText::new("Uptime").underline().color(BONE))).on_hover_text(STATUS_XMRIG_UPTIME); ui.add_sized([width, height], Label::new(RichText::new("Uptime").underline().color(BONE))).on_hover_text(STATUS_XMRIG_UPTIME);
ui.add_sized([width, height], Label::new(format!("{}", api.uptime))); ui.add_sized([width, height], Label::new(format!("{}", api.uptime)));
@ -136,7 +134,6 @@ pub fn show(&mut self, sys: &Arc<Mutex<Sys>>, p2pool_api: &Arc<Mutex<PubP2poolAp
let api = lock!(gupax_p2pool_api); let api = lock!(gupax_p2pool_api);
let text = height / 25.0; let text = height / 25.0;
let log = height / 2.8; let log = height / 2.8;
ui.style_mut().override_text_style = Some(Monospace);
// Payout Text + PayoutView buttons // Payout Text + PayoutView buttons
ui.group(|ui| { ui.group(|ui| {
ui.horizontal(|ui| { ui.horizontal(|ui| {
@ -178,7 +175,6 @@ pub fn show(&mut self, sys: &Arc<Mutex<Sys>>, p2pool_api: &Arc<Mutex<PubP2poolAp
}); });
drop(api); drop(api);
// Payout/Share Calculator // Payout/Share Calculator
ui.style_mut().override_text_style = Some(Monospace);
let button = (width/20.0)-(SPACE*1.666); let button = (width/20.0)-(SPACE*1.666);
ui.group(|ui| { ui.horizontal(|ui| { ui.group(|ui| { ui.horizontal(|ui| {
ui.set_min_width(width-SPACE); ui.set_min_width(width-SPACE);
@ -276,7 +272,6 @@ pub fn show(&mut self, sys: &Arc<Mutex<Sys>>, p2pool_api: &Arc<Mutex<PubP2poolAp
let text = height / 20.0; let text = height / 20.0;
let double = text * 2.0; let double = text * 2.0;
let log = height / 3.0; let log = height / 3.0;
ui.style_mut().override_text_style = Some(Monospace);
// [0], The user's CPU (most likely). // [0], The user's CPU (most likely).
let cpu = &benchmarks[0]; let cpu = &benchmarks[0];

View file

@ -43,7 +43,6 @@ impl crate::disk::Xmrig {
if self.simple { if self.simple {
let height = height / 1.5; let height = height / 1.5;
let width = width - SPACE; let width = width - SPACE;
ui.style_mut().override_text_style = Some(Monospace);
egui::Frame::none().fill(DARK_GRAY).show(ui, |ui| { egui::Frame::none().fill(DARK_GRAY).show(ui, |ui| {
ui.style_mut().override_text_style = Some(Name("MonospaceSmall".into())); ui.style_mut().override_text_style = Some(Name("MonospaceSmall".into()));
egui::ScrollArea::vertical().stick_to_bottom(true).max_width(width).max_height(height).auto_shrink([false; 2]).show_viewport(ui, |ui, _| { egui::ScrollArea::vertical().stick_to_bottom(true).max_width(width).max_height(height).auto_shrink([false; 2]).show_viewport(ui, |ui, _| {
@ -54,7 +53,6 @@ impl crate::disk::Xmrig {
} else { } else {
let height = height / 2.8; let height = height / 2.8;
let width = width - SPACE; let width = width - SPACE;
ui.style_mut().override_text_style = Some(Monospace);
egui::Frame::none().fill(DARK_GRAY).show(ui, |ui| { egui::Frame::none().fill(DARK_GRAY).show(ui, |ui| {
ui.style_mut().override_text_style = Some(Name("MonospaceSmall".into())); ui.style_mut().override_text_style = Some(Name("MonospaceSmall".into()));
egui::ScrollArea::vertical().stick_to_bottom(true).max_width(width).max_height(height).auto_shrink([false; 2]).show_viewport(ui, |ui, _| { egui::ScrollArea::vertical().stick_to_bottom(true).max_width(width).max_height(height).auto_shrink([false; 2]).show_viewport(ui, |ui, _| {
@ -78,7 +76,6 @@ impl crate::disk::Xmrig {
debug!("XMRig Tab | Rendering [Arguments]"); debug!("XMRig Tab | Rendering [Arguments]");
ui.group(|ui| { ui.horizontal(|ui| { ui.group(|ui| { ui.horizontal(|ui| {
let width = (width/10.0) - SPACE; let width = (width/10.0) - SPACE;
ui.style_mut().override_text_style = Some(Monospace);
ui.add_sized([width, text_edit], Label::new("Command arguments:")); ui.add_sized([width, text_edit], Label::new("Command arguments:"));
ui.add_sized([ui.available_width(), text_edit], TextEdit::hint_text(TextEdit::singleline(&mut self.arguments), r#"--url <...> --user <...> --config <...>"#)).on_hover_text(XMRIG_ARGUMENTS); ui.add_sized([ui.available_width(), text_edit], TextEdit::hint_text(TextEdit::singleline(&mut self.arguments), r#"--url <...> --user <...> --config <...>"#)).on_hover_text(XMRIG_ARGUMENTS);
self.arguments.truncate(1024); self.arguments.truncate(1024);
@ -89,7 +86,6 @@ impl crate::disk::Xmrig {
ui.group(|ui| { ui.group(|ui| {
let width = width - SPACE; let width = width - SPACE;
ui.spacing_mut().text_edit_width = (width)-(SPACE*3.0); ui.spacing_mut().text_edit_width = (width)-(SPACE*3.0);
ui.style_mut().override_text_style = Some(Monospace);
let text; let text;
let color; let color;
let len = format!("{:02}", self.address.len()); let len = format!("{:02}", self.address.len());
@ -142,7 +138,6 @@ impl crate::disk::Xmrig {
ui.group(|ui| { ui.group(|ui| {
let width = width/10.0; let width = width/10.0;
ui.vertical(|ui| { ui.vertical(|ui| {
ui.style_mut().override_text_style = Some(Monospace);
ui.spacing_mut().text_edit_width = width*3.32; ui.spacing_mut().text_edit_width = width*3.32;
ui.horizontal(|ui| { ui.horizontal(|ui| {
let text; let text;
@ -234,10 +229,10 @@ impl crate::disk::Xmrig {
// [Node List] // [Node List]
debug!("XMRig Tab | Rendering [Node List] ComboBox"); debug!("XMRig Tab | Rendering [Node List] ComboBox");
let text = RichText::new(format!("{}. {}", self.selected_index+1, self.selected_name)); let text = RichText::new(format!("{}. {}", self.selected_index+1, self.selected_name));
ComboBox::from_id_source("manual_pool").selected_text(RichText::text_style(text, Monospace)).show_ui(ui, |ui| { ComboBox::from_id_source("manual_pool").selected_text(text).show_ui(ui, |ui| {
let mut n = 0; let mut n = 0;
for (name, pool) in pool_vec.iter() { for (name, pool) in pool_vec.iter() {
let text = RichText::text_style(RichText::new(format!("{}. {}\n IP: {}\n Port: {}\n Rig: {}", n+1, name, pool.ip, pool.port, pool.rig)), Monospace); let text = format!("{}. {}\n IP: {}\n Port: {}\n Rig: {}", n+1, name, pool.ip, pool.port, pool.rig);
if ui.add(SelectableLabel::new(self.selected_name == *name, text)).clicked() { if ui.add(SelectableLabel::new(self.selected_name == *name, text)).clicked() {
self.selected_index = n; self.selected_index = n;
let pool = pool.clone(); let pool = pool.clone();
@ -356,7 +351,6 @@ impl crate::disk::Xmrig {
ui.group(|ui| { ui.horizontal(|ui| { ui.group(|ui| { ui.horizontal(|ui| {
ui.vertical(|ui| { ui.vertical(|ui| {
let width = width/10.0; let width = width/10.0;
ui.style_mut().override_text_style = Some(Monospace);
ui.spacing_mut().text_edit_width = width*2.39; ui.spacing_mut().text_edit_width = width*2.39;
// HTTP API // HTTP API
ui.horizontal(|ui| { ui.horizontal(|ui| {