diff --git a/Cargo.lock b/Cargo.lock
index 8298a16..775a143 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -1747,7 +1747,7 @@ dependencies = [
[[package]]
name = "minidump-debugger"
-version = "0.2.1"
+version = "0.2.2"
dependencies = [
"breakpad-symbols",
"clap 3.2.15",
diff --git a/src/ui_processed.rs b/src/ui_processed.rs
index 02fc64e..fc902c3 100644
--- a/src/ui_processed.rs
+++ b/src/ui_processed.rs
@@ -1,7 +1,10 @@
+use std::ops::Range;
+
use crate::processor::ProcessingStatus;
use crate::{MyApp, Tab};
use eframe::egui;
-use egui::{Color32, ComboBox, Context, FontId, Ui};
+use egui::text::LayoutJob;
+use egui::{Color32, ComboBox, Context, FontId, TextFormat, Ui};
use egui_extras::{Size, StripBuilder, TableBody, TableBuilder};
use minidump_common::utils::basename;
use minidump_processor::{CallStack, ProcessState, StackFrame};
@@ -329,7 +332,34 @@ impl MyApp {
let col5 = {
let mut label = String::new();
crate::frame_signature(&mut label, frame).unwrap();
- fonts.layout(label, font.clone(), Color32::BLACK, col5_width)
+ let fname = &label[..];
+ let parsed = parse_function_name(fname);
+ let parts = [
+ (0..parsed.type_name.start, false),
+ (parsed.type_name.clone(), true),
+ (parsed.type_name.end..parsed.func_name.start, false),
+ (parsed.func_name.clone(), true),
+ (parsed.func_name.end..fname.len(), false),
+ ];
+
+ let mut job = LayoutJob::default();
+ job.wrap.max_width = col5_width;
+ for (range, is_bold) in parts {
+ job.append(
+ &fname[range],
+ 0.0,
+ TextFormat {
+ font_id: font.clone(),
+ color: if is_bold {
+ Color32::BLACK
+ } else {
+ Color32::GRAY
+ },
+ ..Default::default()
+ },
+ );
+ }
+ fonts.layout_job(job)
};
let row_height = col1
@@ -422,8 +452,34 @@ impl MyApp {
fonts.layout(label, font.clone(), Color32::BLACK, col4_width)
};
let col5 = {
- let label = frame.function_name.clone();
- fonts.layout(label, font.clone(), Color32::BLACK, col5_width)
+ let fname = &frame.function_name;
+ let parsed = parse_function_name(fname);
+ let parts = [
+ (0..parsed.type_name.start, false),
+ (parsed.type_name.clone(), true),
+ (parsed.type_name.end..parsed.func_name.start, false),
+ (parsed.func_name.clone(), true),
+ (parsed.func_name.end..fname.len(), false),
+ ];
+
+ let mut job = LayoutJob::default();
+ job.wrap.max_width = col5_width;
+ for (range, is_bold) in parts {
+ job.append(
+ &fname[range],
+ 0.0,
+ TextFormat {
+ font_id: font.clone(),
+ color: if is_bold {
+ Color32::BLACK
+ } else {
+ Color32::GRAY
+ },
+ ..Default::default()
+ },
+ );
+ }
+ fonts.layout_job(job)
};
let row_height = col1
@@ -462,3 +518,118 @@ impl MyApp {
});
}
}
+
+struct ParsedFuncName {
+ type_name: Range