aboutsummaryrefslogtreecommitdiff
path: root/gcc/text-art/table.cc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/text-art/table.cc')
-rw-r--r--gcc/text-art/table.cc35
1 files changed, 35 insertions, 0 deletions
diff --git a/gcc/text-art/table.cc b/gcc/text-art/table.cc
index 2f857a0..2ea0da3 100644
--- a/gcc/text-art/table.cc
+++ b/gcc/text-art/table.cc
@@ -150,6 +150,26 @@ table::set_cell_span (rect_t span,
}
}
+/* If SPAN is unoccuped, set it to CONTENT.
+ Otherwise, discard CONTENT. */
+
+void
+table::maybe_set_cell_span (rect_t span,
+ table_cell_content &&content,
+ enum x_align x_align,
+ enum y_align y_align)
+{
+ gcc_assert (span.m_size.w > 0);
+ gcc_assert (span.m_size.h > 0);
+ for (int y = span.get_min_y (); y < span.get_next_y (); y++)
+ for (int x = span.get_min_x (); x < span.get_next_x (); x++)
+ {
+ if (m_occupancy.get (coord_t (x, y)) != -1)
+ return;
+ }
+ set_cell_span (span, std::move (content), x_align, y_align);
+}
+
canvas
table::to_canvas (const theme &theme, const style_manager &sm) const
{
@@ -189,6 +209,21 @@ table::debug () const
canvas.debug (false);
}
+/* Move OTHER's content this table, starting at OFFSET. */
+
+void
+table::add_other_table (table &&other,
+ table::coord_t offset)
+{
+ for (auto &&placement : other.m_placements)
+ {
+ set_cell_span (placement.m_rect + offset,
+ std::move (placement.m_content),
+ placement.m_x_align,
+ placement.m_y_align);
+ }
+}
+
const table::cell_placement *
table::get_placement_at (coord_t coord) const
{