VIP inspection tooling #4
|
@ -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 },
|
||||
|
|
|
@ -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| {
|
||||
|
|
|
@ -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| {
|
||||
|
|
|
@ -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| {
|
||||
|
|
|
@ -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| {
|
||||
|
|
|
@ -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(®isters, 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);
|
||||
|
|
|
@ -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] {
|
||||
|
|
|
@ -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| {
|
||||
|
|
Loading…
Reference in New Issue