HexEditor: Add gaps between byte groups

This commit is contained in:
Sam Atkins 2024-03-10 21:14:20 +00:00 committed by Sam Atkins
parent 4a2a40a3c8
commit d4c051ece2
2 changed files with 23 additions and 6 deletions

View file

@ -312,9 +312,10 @@ Optional<HexEditor::OffsetData> HexEditor::offset_at(Gfx::IntPoint position) con
auto hex_text_end_x = hex_end_x - m_padding;
absolute_x = clamp(absolute_x, hex_text_start_x, hex_text_end_x);
auto byte_x = (absolute_x - hex_text_start_x) / cell_width();
auto group_x = (absolute_x - hex_text_start_x) / group_width();
auto byte_within_group = (absolute_x - hex_text_start_x - group_x * group_width()) / cell_width();
auto byte_y = (absolute_y - hex_start_y) / line_height();
auto offset = (byte_y * bytes_per_row()) + byte_x;
auto offset = (byte_y * bytes_per_row()) + (group_x * bytes_per_group()) + byte_within_group;
if (offset >= m_document->size())
return {};
@ -666,11 +667,14 @@ void HexEditor::paint_event(GUI::PaintEvent& event)
if (byte_position >= m_document->size())
return;
auto group = column / bytes_per_group();
auto column_within_group = column % bytes_per_group();
auto const cell = m_document->get(byte_position);
auto const annotation = m_document->annotations().closest_annotation_at(byte_position);
Gfx::IntRect hex_display_rect_high_nibble {
static_cast<int>(hex_area_text_start_x + column * cell_width()),
static_cast<int>(hex_area_text_start_x + (group * group_width()) + (column_within_group * cell_width())),
row_text_y,
static_cast<int>(character_width()),
static_cast<int>(line_height() - m_line_spacing),
@ -686,7 +690,7 @@ void HexEditor::paint_event(GUI::PaintEvent& event)
Gfx::IntRect background_rect {
static_cast<int>(hex_display_rect_high_nibble.x() - character_width() / 2),
row_background_y,
static_cast<int>(cell_width()),
static_cast<int>(character_width() * 3),
static_cast<int>(line_height()),
};

View file

@ -116,10 +116,23 @@ private:
size_t total_rows() const { return ceil_div(m_content_length, bytes_per_row()); }
size_t line_height() const { return font().pixel_size_rounded_up() + m_line_spacing; }
size_t character_width() const { return font().glyph_fixed_width(); }
size_t cell_width() const { return character_width() * 3; }
size_t cell_gap() const { return character_width() / 2; }
size_t cell_width() const { return character_width() * 2 + cell_gap(); }
size_t group_gap() const { return character_width() * 1.5; }
size_t group_width() const
{
return (character_width() * 2 * bytes_per_group())
+ (cell_gap() * (bytes_per_group() - 1))
+ group_gap();
}
int offset_area_width() const { return m_padding + font().width_rounded_up("0X12345678"sv) + m_padding; }
int hex_area_width() const { return m_padding + bytes_per_row() * cell_width() + m_padding; }
int hex_area_width() const
{
return m_padding
+ groups_per_row() * group_width() - group_gap()
+ m_padding;
}
int text_area_width() const { return m_padding + bytes_per_row() * character_width() + m_padding; }
struct OffsetData {