aboutsummaryrefslogtreecommitdiff
path: root/gdb/tui
diff options
context:
space:
mode:
authorTom Tromey <tom@tromey.com>2024-02-09 16:22:53 -0700
committerTom Tromey <tom@tromey.com>2024-03-01 18:15:35 -0700
commita6a3b67fa9052bba81ed91a38569c11ecb95baf1 (patch)
tree6f7ee22e31ef7887d292c0408cddf7b868ad1de2 /gdb/tui
parent668183c244d54cb69ce7f292a208c8eca60ad625 (diff)
downloadgdb-a6a3b67fa9052bba81ed91a38569c11ecb95baf1.zip
gdb-a6a3b67fa9052bba81ed91a38569c11ecb95baf1.tar.gz
gdb-a6a3b67fa9052bba81ed91a38569c11ecb95baf1.tar.bz2
Fix TUI text centering
In a couple of spots, the TUI tries to center some text in the window. Andrew noticed that the calculation is done strangely and the text ends up somewhat to the left of center. This patch fixes the problem. Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=31355
Diffstat (limited to 'gdb/tui')
-rw-r--r--gdb/tui/tui-data.c20
-rw-r--r--gdb/tui/tui-data.h6
-rw-r--r--gdb/tui/tui-regs.c12
-rw-r--r--gdb/tui/tui-winsource.c20
4 files changed, 22 insertions, 36 deletions
diff --git a/gdb/tui/tui-data.c b/gdb/tui/tui-data.c
index 38a87a2..03395d2 100644
--- a/gdb/tui/tui-data.c
+++ b/gdb/tui/tui-data.c
@@ -169,13 +169,23 @@ tui_win_info::set_title (std::string &&new_title)
/* See tui-data.h. */
void
-tui_win_info::display_string (int y, int x, const char *str) const
+tui_win_info::center_string (const char *str)
{
- int n = width - box_width () - x;
- if (n <= 0)
- return;
+ werase (handle.get ());
+ check_and_display_highlight_if_needed ();
+
+ int avail_width = width - box_size ();
+ int len = strlen (str);
+
+ int x_pos = box_width ();
+ if (len < avail_width)
+ x_pos += (avail_width - len) / 2;
+
+ int n = avail_width - x_pos;
+ gdb_assert (n > 0);
- mvwaddnstr (handle.get (), y, x, str, n);
+ mvwaddnstr (handle.get (), height / 2, x_pos, str, n);
+ refresh_window ();
}
/* See tui-data.h. */
diff --git a/gdb/tui/tui-data.h b/gdb/tui/tui-data.h
index 90ab01f..ce9c1a8 100644
--- a/gdb/tui/tui-data.h
+++ b/gdb/tui/tui-data.h
@@ -167,9 +167,9 @@ public:
const std::string &title () const
{ return m_title; }
- /* Display string STR in the window at position (Y,X), abbreviated if
- necessary. */
- void display_string (int y, int x, const char *str) const;
+ /* Clear the window, maybe draw the boarder, and then display string
+ STR centered in the window, abbreviated if necessary. */
+ void center_string (const char *str);
/* Display string STR in the window at the current cursor position,
abbreviated if necessary. */
diff --git a/gdb/tui/tui-regs.c b/gdb/tui/tui-regs.c
index e7c1839..05211eb 100644
--- a/gdb/tui/tui-regs.c
+++ b/gdb/tui/tui-regs.c
@@ -354,17 +354,7 @@ tui_data_window::first_data_item_displayed ()
void
tui_data_window::erase_data_content ()
{
- werase (handle.get ());
- check_and_display_highlight_if_needed ();
-
- const char *prompt = _("[ Register Values Unavailable ]");
- int half_width = (width - box_size ()) / 2;
- int x_pos;
- if (strlen (prompt) >= half_width)
- x_pos = 1;
- else
- x_pos = half_width - strlen (prompt);
- display_string (height / 2, x_pos, prompt);
+ center_string (_("[ Register Values Unavailable ]"));
}
/* See tui-regs.h. */
diff --git a/gdb/tui/tui-winsource.c b/gdb/tui/tui-winsource.c
index 2631714..6b8716c 100644
--- a/gdb/tui/tui-winsource.c
+++ b/gdb/tui/tui-winsource.c
@@ -222,23 +222,9 @@ tui_update_source_windows_with_line (struct symtab_and_line sal)
void
tui_source_window_base::do_erase_source_content (const char *str)
{
- int x_pos;
- int half_width = (width - box_size ()) / 2;
-
m_content.clear ();
- if (handle != NULL)
- {
- werase (handle.get ());
- check_and_display_highlight_if_needed ();
-
- if (strlen (str) >= half_width)
- x_pos = 1;
- else
- x_pos = half_width - strlen (str);
- display_string (height / 2, x_pos, str);
-
- refresh_window ();
- }
+ if (handle != nullptr)
+ center_string (str);
}
/* See tui-winsource.h. */
@@ -714,7 +700,7 @@ tui_source_window_base::update_exec_info (bool refresh_p)
if (src_element->is_exec_point)
element[TUI_EXEC_POS] = '>';
- display_string (i + box_width (), box_width (), element);
+ mvwaddstr (handle.get (), i + box_width (), box_width (), element);
show_line_number (i);
}