VIP inspection tooling #4

Merged
SonicSwordcane merged 34 commits from vram into main 2025-02-24 04:01:18 +00:00
8 changed files with 78 additions and 29 deletions
Showing only changes of commit f7408ac9b7 - Show all commits

View File

@ -41,7 +41,7 @@ impl UiExt for Ui {
frame.inner_margin.top += 2.0;
let res = self.push_id(&title, |ui| {
frame.show(ui, |ui| {
ui.set_min_width(ui.available_width());
ui.set_max_width(ui.available_width());
add_contents(ui);
})
});
@ -143,6 +143,7 @@ pub struct NumberEdit<'a, T: Number> {
precision: usize,
min: Option<T>,
max: Option<T>,
desired_width: Option<f32>,
arrows: bool,
hex: bool,
}
@ -155,6 +156,7 @@ impl<'a, T: Number> NumberEdit<'a, T> {
precision: 3,
min: None,
max: None,
desired_width: None,
arrows: true,
hex: false,
}
@ -178,6 +180,13 @@ impl<'a, T: Number> NumberEdit<'a, T> {
Self { min, max, ..self }
}
pub fn desired_width(self, desired_width: f32) -> Self {
Self {
desired_width: Some(desired_width),
..self
}
}
pub fn arrows(self, arrows: bool) -> Self {
Self { arrows, ..self }
}
@ -246,9 +255,16 @@ impl<T: Number> Widget for NumberEdit<'_, T> {
})
});
}
let mut desired_width = self
.desired_width
.unwrap_or_else(|| ui.spacing().text_edit_width);
if self.arrows {
desired_width -= 16.0;
}
let text = TextEdit::singleline(&mut str)
.horizontal_align(Align::Max)
.id(id)
.desired_width(desired_width)
.margin(Margin {
left: 4.0,
right: if self.arrows { 20.0 } else { 4.0 },

View File

@ -195,7 +195,7 @@ impl AppWindow for BgMapWindow {
CentralPanel::default().show(ctx, |ui| {
ui.horizontal_top(|ui| {
StripBuilder::new(ui)
.size(Size::relative(0.3))
.size(Size::relative(0.3).at_most(200.0))
.size(Size::remainder())
.horizontal(|mut strip| {
strip.cell(|ui| {

View File

@ -259,7 +259,7 @@ impl AppWindow for CharacterDataWindow {
CentralPanel::default().show(ctx, |ui| {
ui.horizontal_top(|ui| {
StripBuilder::new(ui)
.size(Size::relative(0.3))
.size(Size::relative(0.3).at_most(200.0))
.size(Size::remainder())
.horizontal(|mut strip| {
strip.cell(|ui| {

View File

@ -161,7 +161,7 @@ impl AppWindow for FrameBufferWindow {
CentralPanel::default().show(ctx, |ui| {
ui.horizontal_top(|ui| {
StripBuilder::new(ui)
.size(Size::relative(0.3))
.size(Size::relative(0.3).at_most(200.0))
.size(Size::remainder())
.horizontal(|mut strip| {
strip.cell(|ui| {

View File

@ -216,7 +216,7 @@ impl AppWindow for ObjectWindow {
CentralPanel::default().show(ctx, |ui| {
ui.horizontal_top(|ui| {
StripBuilder::new(ui)
.size(Size::relative(0.3))
.size(Size::relative(0.3).at_most(200.0))
.size(Size::remainder())
.horizontal(|mut strip| {
strip.cell(|ui| {

View File

@ -39,15 +39,16 @@ impl RegisterWindow {
let mut intpnd = InterruptReg::parse(raw_intpnd);
ui.section("Interrupt", |ui| {
let width = ui.available_width();
let xspace = ui.spacing().item_spacing.x;
ui.with_layout(Layout::top_down_justified(Align::Center), |ui| {
TableBuilder::new(ui)
.id_salt("raw_values")
.columns(Column::exact(width * 0.5), 2)
.columns(Column::exact(width * 0.5 - xspace), 2)
.cell_layout(Layout::left_to_right(Align::Max))
.body(|mut body| {
body.row(row_height, |mut row| {
row.col(|ui| {
ui.add_sized(ui.available_size(), Label::new("INTENB"));
ui.label("INTENB");
});
row.col(|ui| {
let mut text = format!("{raw_intenb:04x}");
@ -73,8 +74,8 @@ impl RegisterWindow {
ui.add_space(8.0);
TableBuilder::new(ui)
.id_salt("flags")
.column(Column::exact(width * 0.5))
.columns(Column::exact(width * 0.25), 2)
.column(Column::exact(width * 0.5 - xspace))
.columns(Column::exact(width * 0.25 - xspace), 2)
.cell_layout(Layout::left_to_right(Align::Center).with_main_align(Align::RIGHT))
.body(|mut body| {
body.row(row_height, |mut row| {
@ -114,8 +115,8 @@ impl RegisterWindow {
add_row("LFBEND", &mut intenb.lfbend, &mut intpnd.lfbend);
add_row("SCANERR", &mut intenb.scanerr, &mut intpnd.scanerr);
});
ui.allocate_space(ui.available_size());
});
ui.allocate_space(ui.available_size());
});
if intpnd.update(&mut raw_intpnd) {
self.memory.write(self.sim_id, 0x0005f800, &raw_intpnd);
@ -129,6 +130,7 @@ impl RegisterWindow {
let row_height = self.row_height(ui);
let mut raw_dpstts = self.read_address(0x0005f820);
let mut dpstts = DisplayReg::parse(raw_dpstts);
ui.add_space(-ui.spacing().item_spacing.x);
ui.section("Display", |ui| {
let width = ui.available_width();
TableBuilder::new(ui)
@ -211,6 +213,7 @@ impl RegisterWindow {
let row_height = self.row_height(ui);
let [mut raw_xpstts, raw_xpctrl] = self.read_address(0x0005f840);
let mut xpstts = DrawingReg::parse(raw_xpstts);
ui.add_space(-ui.spacing().item_spacing.x);
ui.section("Drawing", |ui| {
let width = ui.available_width();
TableBuilder::new(ui)
@ -308,10 +311,13 @@ impl RegisterWindow {
fn show_colors(&mut self, ui: &mut Ui) {
let row_height = self.row_height(ui);
let registers = self.registers.borrow();
ui.add_space(-ui.spacing().item_spacing.x);
ui.section("Colors", |ui| {
let width = ui.available_width();
let xspace = ui.spacing().item_spacing.x;
TableBuilder::new(ui)
.column(Column::auto())
.columns(Column::remainder(), 4)
.column(Column::exact(width * 0.2 - xspace))
.columns(Column::exact(width * 0.20 - xspace), 4)
.cell_layout(Layout::left_to_right(Align::Max))
.body(|mut body| {
body.row(row_height, |mut row| {
@ -388,6 +394,7 @@ impl RegisterWindow {
.add(
NumberEdit::new(value)
.range(0..256)
.desired_width(width * 0.2)
.arrows(false)
.hex(true),
)
@ -398,7 +405,11 @@ impl RegisterWindow {
});
row.col(|ui| {
if ui
.add(NumberEdit::new(&mut c1).range(0..4).arrows(false))
.add(
NumberEdit::new(&mut c1)
.range(0..4)
.desired_width(ui.available_width() - xspace),
)
.changed()
{
*value = (*value & 0xfff3) | (c1 << 2);
@ -407,7 +418,11 @@ impl RegisterWindow {
});
row.col(|ui| {
if ui
.add(NumberEdit::new(&mut c2).range(0..4).arrows(false))
.add(
NumberEdit::new(&mut c2)
.range(0..4)
.desired_width(ui.available_width() - xspace),
)
.changed()
{
*value = (*value & 0xffcf) | (c2 << 4);
@ -416,7 +431,11 @@ impl RegisterWindow {
});
row.col(|ui| {
if ui
.add(NumberEdit::new(&mut c3).range(0..4).arrows(false))
.add(
NumberEdit::new(&mut c3)
.range(0..4)
.desired_width(ui.available_width() - xspace),
)
.changed()
{
*value = (*value & 0xff3f) | (c3 << 6);
@ -445,7 +464,11 @@ impl RegisterWindow {
row.col(|ui| {
let mut bkcol: u16 = read_address(&registers, 0x0005f870);
if ui
.add(NumberEdit::new(&mut bkcol).range(0..4).arrows(false))
.add(
NumberEdit::new(&mut bkcol)
.range(0..4)
.desired_width(ui.available_width() - xspace),
)
.changed()
{
self.memory.write(self.sim_id, 0x0005f870, &bkcol);
@ -478,12 +501,14 @@ impl RegisterWindow {
fn show_objects(&mut self, ui: &mut Ui) {
let row_height = self.row_height(ui);
ui.add_space(-ui.spacing().item_spacing.x);
ui.section("Objects", |ui| {
let width = ui.available_width();
let xspace = ui.spacing().item_spacing.x;
TableBuilder::new(ui)
.column(Column::exact(width * 0.25))
.column(Column::exact(width * 0.25))
.column(Column::exact(width * 0.5))
.column(Column::exact(width * 0.25 - xspace))
.column(Column::exact(width * 0.25 - xspace))
.column(Column::exact(width * 0.5 - xspace))
.cell_layout(Layout::left_to_right(Align::Center).with_main_align(Align::RIGHT))
.body(|mut body| {
body.row(row_height, |mut row| {
@ -526,11 +551,13 @@ impl RegisterWindow {
fn show_misc(&mut self, ui: &mut Ui) {
let row_height = self.row_height(ui);
let registers = self.registers.borrow();
ui.add_space(-ui.spacing().item_spacing.x);
ui.section("Misc.", |ui| {
let width = ui.available_width();
let xspace = ui.spacing().item_spacing.x;
TableBuilder::new(ui)
.column(Column::exact(width * 0.5))
.column(Column::exact(width * 0.5))
.column(Column::exact(width * 0.5 - xspace))
.column(Column::exact(width * 0.5 - xspace))
.cell_layout(Layout::left_to_right(Align::Center).with_main_align(Align::RIGHT))
.body(|mut body| {
body.row(row_height, |mut row| {
@ -626,12 +653,13 @@ impl AppWindow for RegisterWindow {
CentralPanel::default().show(ctx, |ui| {
ScrollArea::vertical().show(ui, |ui| {
ui.horizontal_top(|ui| {
let width = ui.available_width() - (ui.spacing().item_spacing.x * 8.0);
let xspace = ui.spacing().item_spacing.x;
let width = ui.available_width() - (xspace * 5.0);
StripBuilder::new(ui)
.size(Size::exact(width * 0.2))
.size(Size::exact(width * 0.2))
.size(Size::exact(width * 0.3))
.size(Size::exact(width * 0.2))
.size(Size::exact(width * 0.2 - xspace))
.size(Size::exact(width * 0.2 - xspace))
.size(Size::exact(width * 0.4 - xspace))
.size(Size::exact(width * 0.2 - xspace))
.horizontal(|mut strip| {
strip.cell(|ui| {
self.show_interrupts(ui);

View File

@ -1,9 +1,14 @@
use egui::{Color32, Image, ImageSource, Response, Sense, TextureOptions, Ui, Widget};
pub const GENERIC_PALETTE: [u8; 4] = [0, 64, 128, 255];
pub const GENERIC_PALETTE: [u8; 4] = [0, 32, 64, 128];
pub fn shade(brt: u8, color: Color32) -> Color32 {
color.gamma_multiply(brt as f32 / 255.0)
let corrected = if brt & 0x80 != 0 {
255
} else {
(brt << 1) | (brt >> 6)
};
color.gamma_multiply(corrected as f32 / 255.0)
}
pub fn generic_palette(color: Color32) -> [Color32; 4] {

View File

@ -453,7 +453,7 @@ impl AppWindow for WorldWindow {
CentralPanel::default().show(ctx, |ui| {
ui.horizontal_top(|ui| {
StripBuilder::new(ui)
.size(Size::relative(0.3))
.size(Size::relative(0.3).at_most(200.0))
.size(Size::remainder())
.horizontal(|mut strip| {
strip.cell(|ui| {