2020-05-15 21:59:10 +02:00
|
|
|
|
|
|
|
void ParseAndPaint()
|
|
|
|
{
|
|
|
|
list.count=0;
|
2020-05-16 00:00:20 +02:00
|
|
|
selection.cancel();
|
2021-01-04 14:17:12 +01:00
|
|
|
if (list.w != canvas.bufw) canvas.Init(list.x, list.y, list.w, screen.height);
|
2020-05-15 21:59:10 +02:00
|
|
|
Parse();
|
|
|
|
DrawPage();
|
|
|
|
}
|
|
|
|
|
|
|
|
void Parse()
|
|
|
|
{
|
|
|
|
dword off;
|
|
|
|
int line_end;
|
|
|
|
dword line_length=0;
|
|
|
|
dword line_start = io.buffer_data;
|
|
|
|
dword buflen = strlen(io.buffer_data) + io.buffer_data;
|
|
|
|
|
|
|
|
lines.drop();
|
|
|
|
lines.add(io.buffer_data);
|
|
|
|
|
|
|
|
for (off = io.buffer_data; off < buflen; off++)
|
|
|
|
{
|
|
|
|
line_length += list.font_w;
|
|
|
|
if (line_length + 30 >= list.w) || (ESBYTE[off] == 10)
|
|
|
|
{
|
|
|
|
//searching a 'white' for a normal word-break
|
|
|
|
for(line_end = off; line_end != line_start; line_end--)
|
|
|
|
{
|
|
|
|
if (__isWhite(ESBYTE[line_end])) { off=line_end+1; break; }
|
|
|
|
}
|
|
|
|
line_length = off - line_start * list.font_w;
|
|
|
|
list.count++;
|
|
|
|
lines.add(off);
|
|
|
|
line_start = off;
|
|
|
|
line_length = 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
lines.add(buflen);
|
|
|
|
list.count++;
|
|
|
|
}
|
|
|
|
|
|
|
|
void PaintVisible()
|
|
|
|
{
|
2020-05-20 21:34:09 +02:00
|
|
|
int i, ff;
|
|
|
|
signed s1, s2;
|
2020-05-16 00:00:20 +02:00
|
|
|
dword ydraw, absolute_y;
|
2020-05-15 21:59:10 +02:00
|
|
|
dword line_bg;
|
2020-05-16 00:00:20 +02:00
|
|
|
bool swapped_selection = false;
|
2020-05-15 21:59:10 +02:00
|
|
|
|
2020-05-17 00:01:17 +02:00
|
|
|
list.column_max = lines.len(list.cur_y);
|
2020-05-15 21:59:10 +02:00
|
|
|
list.CheckDoesValuesOkey();
|
|
|
|
if (selection.end_offset < selection.start_offset) {
|
2020-05-16 00:00:20 +02:00
|
|
|
swapped_selection = selection.swap_start_end();
|
2020-05-15 21:59:10 +02:00
|
|
|
}
|
|
|
|
|
2020-05-16 00:00:20 +02:00
|
|
|
for ( i=0; i < list.visible+1; i++)
|
2020-05-15 21:59:10 +02:00
|
|
|
{
|
2020-05-16 00:00:20 +02:00
|
|
|
ydraw = i * list.item_h;
|
|
|
|
absolute_y = i + list.first;
|
2020-05-15 21:59:10 +02:00
|
|
|
line_bg = theme.bg;
|
|
|
|
|
2020-05-16 00:00:20 +02:00
|
|
|
if (selection.start_y < absolute_y) && (selection.end_y > absolute_y) line_bg = selection.color;
|
2020-12-18 00:01:09 +01:00
|
|
|
canvas.DrawBar(0, ydraw, list.w, list.item_h, line_bg);
|
2020-05-15 21:59:10 +02:00
|
|
|
|
2020-05-16 00:00:20 +02:00
|
|
|
selection.draw(absolute_y);
|
2020-05-15 21:59:10 +02:00
|
|
|
|
2020-05-24 02:18:40 +02:00
|
|
|
if (search.visible) || (search_next) for (ff=0; ff<search.found.count; ff++) {
|
2020-05-20 21:34:09 +02:00
|
|
|
s1 = search.found.get(ff) - lines.get(absolute_y);
|
|
|
|
s2 = search.found.get(ff) - lines.get(absolute_y+1);
|
|
|
|
|
|
|
|
if (s2 > 0) break;
|
|
|
|
|
|
|
|
if (s1 > 0) && (s2 < 0) {
|
2020-12-18 00:01:09 +01:00
|
|
|
canvas.DrawBar(search.found.get(ff) - lines.get(absolute_y) * list.font_w + 3,
|
2020-05-20 21:34:09 +02:00
|
|
|
ydraw, strlen(#found_text) * list.font_w, list.item_h, theme.found);
|
2020-05-24 02:18:40 +02:00
|
|
|
search_next = false;
|
2020-05-20 21:34:09 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2020-12-18 00:01:09 +01:00
|
|
|
if (absolute_y<list.count) canvas.WriteText(3, ydraw+3, list.font_type, theme.text,
|
2020-05-17 00:01:17 +02:00
|
|
|
lines.get(absolute_y), lines.len(absolute_y));
|
2020-05-15 21:59:10 +02:00
|
|
|
}
|
|
|
|
|
2020-12-18 00:01:09 +01:00
|
|
|
PutPaletteImage(buf_data+8, canvas.bufw, list.h, list.x, list.y, 32, 0);
|
2020-05-15 21:59:10 +02:00
|
|
|
|
2020-05-16 00:00:20 +02:00
|
|
|
if (swapped_selection) selection.swap_start_end();
|
2020-05-15 21:59:10 +02:00
|
|
|
}
|