mirror of
https://codeberg.org/dnkl/foot.git
synced 2026-03-17 05:33:52 -04:00
grid: merge reflow_{uri,curly}_range_start(), and reflow_{uri,curly}_range_end()
This commit is contained in:
parent
0c7725217a
commit
73f6982cbe
1 changed files with 48 additions and 42 deletions
90
grid.c
90
grid.c
|
|
@ -634,58 +634,60 @@ grid_resize_without_reflow(
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
reflow_uri_range_start(struct row_range *range, struct row *new_row,
|
reflow_range_start(struct row_range *range, enum row_range_type type,
|
||||||
int new_col_idx)
|
struct row *new_row, int new_col_idx)
|
||||||
{
|
{
|
||||||
ensure_row_has_extra_data(new_row);
|
ensure_row_has_extra_data(new_row);
|
||||||
range_append_by_ref(
|
|
||||||
&new_row->extra->uri_ranges, new_col_idx, -1,
|
|
||||||
ROW_RANGE_URI, &range->data);
|
|
||||||
|
|
||||||
/* The reflowed range now owns the URI string */
|
struct row_ranges *new_ranges = NULL;
|
||||||
range->uri.uri = NULL;
|
switch (type) {
|
||||||
|
case ROW_RANGE_URI: new_ranges = &new_row->extra->uri_ranges; break;
|
||||||
|
case ROW_RANGE_CURLY: new_ranges = &new_row->extra->curly_ranges; break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (new_ranges == NULL)
|
||||||
|
BUG("unhandled range type");
|
||||||
|
|
||||||
|
range_append_by_ref(new_ranges, new_col_idx, -1, type, &range->data);
|
||||||
|
|
||||||
|
switch (type) {
|
||||||
|
case ROW_RANGE_URI: range->uri.uri = NULL; break; /* Owned by new_ranges */
|
||||||
|
case ROW_RANGE_CURLY: break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
reflow_uri_range_end(struct row_range *range, struct row *new_row,
|
reflow_range_end(struct row_range *range, enum row_range_type type,
|
||||||
int new_col_idx)
|
struct row *new_row, int new_col_idx)
|
||||||
{
|
{
|
||||||
struct row_data *extra = new_row->extra;
|
struct row_data *extra = new_row->extra;
|
||||||
xassert(extra->uri_ranges.count > 0);
|
struct row_ranges *ranges = NULL;
|
||||||
|
|
||||||
struct row_range *new_range =
|
switch (type) {
|
||||||
&extra->uri_ranges.v[extra->uri_ranges.count - 1];
|
case ROW_RANGE_URI: ranges = &extra->uri_ranges; break;
|
||||||
|
case ROW_RANGE_CURLY: ranges = &extra->curly_ranges; break;
|
||||||
|
}
|
||||||
|
|
||||||
xassert(new_range->uri.id == range->uri.id);
|
if (ranges == NULL)
|
||||||
|
BUG("unhandled range type");
|
||||||
|
|
||||||
|
xassert(ranges->count > 0);
|
||||||
|
|
||||||
|
struct row_range *new_range = &ranges->v[ranges->count - 1];
|
||||||
xassert(new_range->end < 0);
|
xassert(new_range->end < 0);
|
||||||
new_range->end = new_col_idx;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
switch (type) {
|
||||||
reflow_curly_range_start(struct row_range *range, struct row *new_row,
|
case ROW_RANGE_URI:
|
||||||
int new_col_idx)
|
xassert(new_range->uri.id == range->uri.id);
|
||||||
{
|
break;
|
||||||
ensure_row_has_extra_data(new_row);
|
|
||||||
range_append_by_ref(&new_row->extra->curly_ranges, new_col_idx, -1,
|
|
||||||
ROW_RANGE_CURLY, &range->data);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
case ROW_RANGE_CURLY:
|
||||||
|
xassert(new_range->curly.style == range->curly.style);
|
||||||
|
xassert(new_range->curly.color_src == range->curly.color_src);
|
||||||
|
xassert(new_range->curly.color == range->curly.color);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
|
||||||
reflow_curly_range_end(struct row_range *range, struct row *new_row,
|
|
||||||
int new_col_idx)
|
|
||||||
{
|
|
||||||
struct row_data *extra = new_row->extra;
|
|
||||||
xassert(extra->curly_ranges.count > 0);
|
|
||||||
|
|
||||||
struct row_range *new_range =
|
|
||||||
&extra->curly_ranges.v[extra->curly_ranges.count - 1];
|
|
||||||
|
|
||||||
xassert(new_range->curly.style == range->curly.style);
|
|
||||||
xassert(new_range->curly.color_src == range->curly.color_src);
|
|
||||||
xassert(new_range->curly.color == range->curly.color);
|
|
||||||
|
|
||||||
xassert(new_range->end < 0);
|
|
||||||
new_range->end = new_col_idx;
|
new_range->end = new_col_idx;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1115,10 +1117,12 @@ grid_resize_and_reflow(
|
||||||
xassert(uri_range != NULL);
|
xassert(uri_range != NULL);
|
||||||
|
|
||||||
if (uri_range->start == end - 1)
|
if (uri_range->start == end - 1)
|
||||||
reflow_uri_range_start(uri_range, new_row, new_col_idx - 1);
|
reflow_range_start(
|
||||||
|
uri_range, ROW_RANGE_URI, new_row, new_col_idx - 1);
|
||||||
|
|
||||||
if (uri_range->end == end - 1) {
|
if (uri_range->end == end - 1) {
|
||||||
reflow_uri_range_end(uri_range, new_row, new_col_idx - 1);
|
reflow_range_end(
|
||||||
|
uri_range, ROW_RANGE_URI, new_row, new_col_idx - 1);
|
||||||
grid_row_uri_range_destroy(uri_range);
|
grid_row_uri_range_destroy(uri_range);
|
||||||
uri_range++;
|
uri_range++;
|
||||||
}
|
}
|
||||||
|
|
@ -1128,10 +1132,12 @@ grid_resize_and_reflow(
|
||||||
xassert(curly_range != NULL);
|
xassert(curly_range != NULL);
|
||||||
|
|
||||||
if (curly_range->start == end - 1)
|
if (curly_range->start == end - 1)
|
||||||
reflow_curly_range_start(curly_range, new_row, new_col_idx - 1);
|
reflow_range_start(
|
||||||
|
curly_range, ROW_RANGE_CURLY, new_row, new_col_idx - 1);
|
||||||
|
|
||||||
if (curly_range->end == end - 1) {
|
if (curly_range->end == end - 1) {
|
||||||
reflow_curly_range_end(curly_range, new_row, new_col_idx - 1);
|
reflow_range_end(
|
||||||
|
curly_range, ROW_RANGE_CURLY, new_row, new_col_idx - 1);
|
||||||
grid_row_curly_range_destroy(curly_range);
|
grid_row_curly_range_destroy(curly_range);
|
||||||
curly_range++;
|
curly_range++;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue