From c6fe9971d8c93aa91f262ac85f755e98557dcd3c Mon Sep 17 00:00:00 2001 From: boreddevnl Date: Tue, 17 Mar 2026 15:48:42 +0100 Subject: [PATCH] BFIX: export bugs in word.c and fixed explorer always ZTop in wm --- disk.img | Bin 67108864 -> 67108864 bytes src/userland/gui/word.c | 688 +++++++++++++++++++++++++++++++++------- src/wm/wm.c | 43 ++- 3 files changed, 609 insertions(+), 122 deletions(-) diff --git a/disk.img b/disk.img index 26b400993eda641610648418149d2ab9a0fb040b..78298b4d596cc5a27dcad5aaff047ce018dba85d 100644 GIT binary patch delta 85723 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 a@F(~S{0;sA{{#Pm|G=*LtEjC0tp5X-;l~63 delta 100674 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 diff --git a/src/userland/gui/word.c b/src/userland/gui/word.c index 1a7552e..a000744 100644 --- a/src/userland/gui/word.c +++ b/src/userland/gui/word.c @@ -41,6 +41,10 @@ static _Bool selection_started = 0; static int sel_start_para = -1, sel_start_run = -1, sel_start_pos = -1; static int sel_end_para = -1, sel_end_run = -1, sel_end_pos = -1; +static int current_page_size = 0; // 0=A4, 1=A3, 2=A2 +static const int page_widths[] = { 595, 842, 1191 }; +static const int page_heights[] = { 842, 1191, 1684 }; + #define MAX_PARAGRAPHS 256 #define MAX_RUNS_PER_PARAGRAPH 64 #define MAX_RUN_TEXT 128 @@ -86,6 +90,9 @@ static char open_filename[256] = ""; static _Bool file_modified = 0; static int scroll_y = 0; +static _Bool is_dragging_scrollbar = 0; +static int scrollbar_drag_offset_y = 0; + static _Bool is_in_selection(int p, int r, int c); static int win_w = 800; @@ -140,6 +147,8 @@ static void set_active_font(ui_window_t win, int idx) { } } +static void ensure_cursor_visible(ui_window_t win); + static void save_undo_state(void) { UndoState *s = &undo_stack[undo_head]; s->para_count = para_count; @@ -194,7 +203,22 @@ static void init_doc(void) { r->color = current_text_color; } -static void handle_arrows(char c) { +static void update_formatting_state(void) { + if (cursor_para != -1 && cursor_run != -1) { + if (cursor_para < para_count && cursor_run < paragraphs[cursor_para].run_count) { + TextRun *r = ¶graphs[cursor_para].runs[cursor_run]; + is_bold = r->bold; + is_italic = r->italic; + is_underline = r->underline; + current_font_idx = r->font_idx; + current_font_size = r->font_size; + current_text_color = r->color; + align_mode = paragraphs[cursor_para].align; + } + } +} + +static void handle_arrows(ui_window_t win, char c) { if (c == 17) { if (cursor_para > 0) { cursor_para--; @@ -232,6 +256,8 @@ static void handle_arrows(char c) { cursor_pos = 0; } } + update_formatting_state(); + ensure_cursor_visible(win); } static void split_run(int p_idx, int r_idx, int pos) { @@ -306,14 +332,28 @@ static void delete_selection(void) { file_modified = 1; } -static void insert_char(char c) { - if (sel_start_para != -1) { +static void insert_char(ui_window_t win, char c) { + _Bool has_selection = 0; + if (sel_start_para != -1 && sel_end_para != -1) { + if (!(sel_start_para == sel_end_para && sel_start_run == sel_end_run && sel_start_pos == sel_end_pos)) { + has_selection = 1; + } + } + + if (has_selection) { delete_selection(); if (c == '\b') return; + } else { + if (sel_start_para != -1) { + sel_start_para = -1; + sel_end_para = -1; + } } if (c < 32 && c != '\n' && c != '\b') { - handle_arrows(c); + if (c >= 17 && c <= 20) { + handle_arrows(win, c); + } return; } @@ -382,9 +422,9 @@ static void insert_char(char c) { for(int i=cursor_para+1; irun_count == 0) prev->run_count = 1; - } + } file_modified = 1; + ensure_cursor_visible(win); return; } @@ -413,6 +453,7 @@ static void insert_char(char c) { cursor_run = 0; cursor_pos = 0; file_modified = 1; + ensure_cursor_visible(win); return; } @@ -462,6 +503,7 @@ static void insert_char(char c) { cursor_pos++; file_modified = 1; } + ensure_cursor_visible(win); } static bool str_contains(const char *haystack, const char *needle) { @@ -492,6 +534,15 @@ static void append_pdf_float(char *buf, int *len, int val) { buf[(*len)++] = ' '; } +static void get_page_size(int *pw, int *ph) { + if (current_page_size >= 0 && current_page_size <= 2) { + *pw = page_widths[current_page_size]; + *ph = page_heights[current_page_size]; + } else { + *pw = 595; *ph = 842; + } +} + static void export_pdf(void) { char name[256]; if (open_filename[0] == 0) string_copy(name, "document.pdf"); @@ -501,34 +552,86 @@ static void export_pdf(void) { if (fd < 0) return; int offset = 0; - int xref[32]; + int xref[1024]; // Increase xref size to handle more objects int obj_count = 1; #define WRITE_STR(s) do { sys_write_fs(fd, s, string_len(s)); offset += string_len(s); } while(0) WRITE_STR("%PDF-1.4\n"); - xref[obj_count++] = offset; + int catalog_obj = obj_count++; + xref[catalog_obj] = offset; WRITE_STR("1 0 obj\n<< /Type /Catalog /Pages 2 0 R >>\nendobj\n"); - xref[obj_count++] = offset; - WRITE_STR("2 0 obj\n<< /Type /Pages /Kids [3 0 R] /Count 1 >>\nendobj\n"); + int pages_obj = obj_count++; + int page_obj_ids[256]; + int total_pdf_pages = 0; - xref[obj_count++] = offset; - WRITE_STR("3 0 obj\n<< /Type /Page /Parent 2 0 R /MediaBox [0 0 595 842] /Contents 4 0 R /Resources << /Font << " - "/F1 5 0 R /F2 6 0 R /F3 7 0 R /F4 8 0 R " - "/F5 9 0 R /F6 10 0 R /F7 11 0 R /F8 12 0 R " - "/F9 13 0 R /F10 14 0 R /F11 15 0 R /F12 16 0 R >> >> >>\nendobj\n"); + int resources_obj = obj_count++; + xref[resources_obj] = offset; + WRITE_STR("3 0 obj\n<< /ProcSet [/PDF /Text] /Font << "); + for(int i=1; i<=12; i++) { + WRITE_STR("/F"); + char f_n[16]; itoa(i, f_n); WRITE_STR(f_n); + WRITE_STR(" "); + char fo_n[16]; itoa(3+i, fo_n); WRITE_STR(fo_n); + WRITE_STR(" 0 R "); + } + WRITE_STR(">> >>\nendobj\n"); - char stream[8192]; + // Write 12 fonts + const char *base_fonts[12] = { + "Helvetica", "Helvetica-Bold", "Helvetica-Oblique", "Helvetica-BoldOblique", + "Times-Roman", "Times-Bold", "Times-Italic", "Times-BoldItalic", + "Courier", "Courier-Bold", "Courier-Oblique", "Courier-BoldOblique" + }; + for(int i=0; i<12; i++) { + xref[obj_count++] = offset; // 4 to 15 + char num[16]; + itoa(obj_count - 1, num); + WRITE_STR(num); + WRITE_STR(" 0 obj\n<< /Type /Font /Subtype /Type1 /BaseFont /"); + WRITE_STR(base_fonts[i]); + WRITE_STR(" >>\nendobj\n"); + } + + static char stream[65536]; stream[0] = 0; int slen = 0; #define S_WRITE(s) do { string_copy(stream + slen, s); slen += string_len(s); } while(0) + int pw, ph; + get_page_size(&pw, &ph); + + // Initial page + page_obj_ids[total_pdf_pages++] = obj_count; + xref[obj_count++] = offset; // Page obj + int current_page_obj = obj_count - 1; + int current_contents_obj = obj_count; + + // We will write the Page object: + char num1[16]; itoa(current_page_obj, num1); + WRITE_STR(num1); WRITE_STR(" 0 obj\n<< /Type /Page /Parent 2 0 R /MediaBox [0 0 "); + char num2[16]; itoa(pw, num2); WRITE_STR(num2); WRITE_STR(" "); + char num3[16]; itoa(ph, num3); WRITE_STR(num3); WRITE_STR("] /Contents "); + char num4[16]; itoa(current_contents_obj, num4); WRITE_STR(num4); WRITE_STR(" 0 R /Resources 3 0 R >>\nendobj\n"); + + // Starting Contents + xref[obj_count++] = offset; // Contents obj + current_contents_obj = obj_count - 1; + char cont_buf[64]; + itoa(current_contents_obj, cont_buf); + WRITE_STR(cont_buf); WRITE_STR(" 0 obj\n"); + + // We will leave length empty and calculate exactly later + int length_placeholder_offset = offset; + WRITE_STR("<< /Length 00000000 >>\nstream\n"); // 8 chars for length + S_WRITE("BT\n"); - float cur_y = 800.0f; + float cur_y = (float)ph - 42.0f; // 42 is top margin + float bottom_margin = 40.0f; for(int p=0; palign == 1) px = (595 - tw) / 2; - else if (para->align == 2) px = 595 - 20 - tw; + if (para->align == 1) px = (pw - tw) / 2; + else if (para->align == 2) px = pw - 20 - tw; + float max_lh = 15.0f; + for(int r=0; rrun_count; r++) { + if (para->runs[r].font_size > max_lh) max_lh = para->runs[r].font_size; + } + + if (cur_y - max_lh < bottom_margin) { + S_WRITE("ET\n"); + sys_write_fs(fd, stream, slen); offset += slen; + sys_write_fs(fd, "\nendstream\nendobj\n", 18); offset += 18; + + // Patch length + int current_offset = sys_seek(fd, 0, 1); + sys_seek(fd, length_placeholder_offset + 12, 0); // "12" is the offset to '00000000' part of "/Length 00000000" + char num_len[16]; itoa(slen, num_len); + int pad = 8 - (int)string_len(num_len); + for(int k=0; k>\nendobj\n"); + + xref[obj_count++] = offset; // New Contents obj + current_contents_obj = obj_count - 1; + char n_cont_buf[64]; itoa(current_contents_obj, n_cont_buf); + WRITE_STR(n_cont_buf); WRITE_STR(" 0 obj\n"); + + length_placeholder_offset = offset; + WRITE_STR("<< /Length 00000000 >>\nstream\n"); + + S_WRITE("BT\n"); + } + char tm_buf[64]; int tlen = 0; string_copy(tm_buf, "1 0 0 1 "); tlen += 8; @@ -559,10 +707,10 @@ static void export_pdf(void) { string_copy(tm_buf + tlen, num); tlen += string_len(num); string_copy(tm_buf + tlen, " Tm\n"); tlen += 4; tm_buf[tlen] = 0; + S_WRITE(tm_buf); char align_cmt[32]; - int a_len = 0; string_copy(align_cmt, "%ALIGN_0\n"); align_cmt[7] = '0' + para->align; S_WRITE(align_cmt); @@ -625,57 +773,59 @@ static void export_pdf(void) { } } - float max_lh = 15.0f; - for(int r=0; rrun_count; r++) { - if (para->runs[r].font_size > max_lh) max_lh = para->runs[r].font_size; - } cur_y -= (max_lh + 5.0f); } S_WRITE("ET\n"); - - xref[obj_count++] = offset; - sys_write_fs(fd, "4 0 obj\n<< /Length ", 19); offset += 19; - char num[16]; - itoa(slen, num); - sys_write_fs(fd, num, string_len(num)); offset += string_len(num); - sys_write_fs(fd, " >>\nstream\n", 11); offset += 11; - + + // Finalize the last pending page stream sys_write_fs(fd, stream, slen); offset += slen; - sys_write_fs(fd, "\nendstream\nendobj\n", 18); offset += 18; - const char *base_fonts[12] = { - "Helvetica", "Helvetica-Bold", "Helvetica-Oblique", "Helvetica-BoldOblique", - "Times-Roman", "Times-Bold", "Times-Italic", "Times-BoldItalic", - "Courier", "Courier-Bold", "Courier-Oblique", "Courier-BoldOblique" - }; - for(int i=0; i<12; i++) { - xref[obj_count++] = offset; - char num[16]; - itoa(i + 5, num); - WRITE_STR(num); - WRITE_STR(" 0 obj\n<< /Type /Font /Subtype /Type1 /BaseFont /"); - WRITE_STR(base_fonts[i]); - WRITE_STR(" >>\nendobj\n"); - } + // Patch length of last page + int current_offset = sys_seek(fd, 0, 1); + sys_seek(fd, length_placeholder_offset + 12, 0); + char num_len[16]; itoa(slen, num_len); + int pad = 8 - (int)string_len(num_len); + for(int k=0; k>\nendobj\n"); + + + int final_xref_offset = offset; + WRITE_STR("xref\n0 "); + char num_total_obj[16]; + itoa(total_objects, num_total_obj); WRITE_STR(num_total_obj); WRITE_STR("\n0000000000 65535 f \n"); + for(int i=1; i>\nstartxref\n"); + WRITE_STR("trailer\n<< /Size "); + char num_trailer[16]; + itoa(total_objects, num_trailer); WRITE_STR(num_trailer); + WRITE_STR(" /Root 1 0 R >>\nstartxref\n"); char xnum[16]; - itoa(xref_offset, xnum); + itoa(final_xref_offset, xnum); WRITE_STR(xnum); WRITE_STR("\n%%EOF\n"); @@ -683,7 +833,7 @@ static void export_pdf(void) { file_modified = 0; } -static void load_file(const char* path) { +static void load_file(ui_window_t win, const char* path) { int fd = sys_open(path, "r"); if (fd < 0) return; int size = sys_size(fd); @@ -770,12 +920,12 @@ static void load_file(const char* path) { i++; while(i < size && buf[i] != ')') { if (buf[i] == '\\' && i+1 < size) i++; - insert_char(buf[i]); + insert_char(win, buf[i]); i++; } } else if ((buf[i] == 'T' && buf[i+1] == 'd') || (buf[i] == 'T' && buf[i+1] == 'm')) { - insert_char('\n'); + insert_char(win, '\n'); i += 2; } else { @@ -784,7 +934,7 @@ static void load_file(const char* path) { } } else { for(int i=0; i 1.0f) scale = 1.0f; // Don't scale up if window is huge + + int page_w = (int)(pw * scale); + int page_h = (int)(ph * scale); + + int doc_x = 20 + (doc_view_w - page_w) / 2; int doc_y = 50 - scroll_y; - int doc_w = win_w - 40; ui_draw_rect(win, 0, 40, win_w, win_h - 40, COLOR_DARK_BG); - ui_draw_rect(win, doc_x, 50, doc_w, win_h, COLOR_WHITE); - int cur_y = doc_y + 10; + int current_page = 0; + + // Draw first page background + int bg_y = doc_y + current_page * (page_h + 20); + int draw_h = page_h; + if (bg_y < 40) { + draw_h -= (40 - bg_y); + bg_y = 40; + } + if (draw_h > 0 && bg_y < win_h) { + ui_draw_rect(win, doc_x, bg_y, page_w, draw_h, COLOR_WHITE); + } + + cur_y = doc_y + current_page * (page_h + 20) + 10; for(int p=0; p doc_w - 20) { + if (line_w + cw > page_w - 20) { break; } line_w += cw; @@ -994,11 +1182,27 @@ static void draw_document(ui_window_t win) { end_char = 0; } + int line_h = (int)(max_h * para->spacing) + 4; + + if (cur_y + line_h > doc_y + current_page * (page_h + 20) + page_h - 10) { + current_page++; + int next_bg_y = doc_y + current_page * (page_h + 20); + int next_draw_h = page_h; + if (next_bg_y < 40) { + next_draw_h -= (40 - next_bg_y); + next_bg_y = 40; + } + if (next_draw_h > 0 && next_bg_y < win_h) { + ui_draw_rect(win, doc_x, next_bg_y, page_w, next_draw_h, COLOR_WHITE); + } + cur_y = doc_y + current_page * (page_h + 20) + 10; + } + int cur_x = doc_x + 10; if (para->align == 1) { - cur_x = doc_x + 10 + (doc_w - 20 - line_w) / 2; + cur_x = doc_x + 10 + (page_w - 20 - line_w) / 2; } else if (para->align == 2) { - cur_x = doc_x + 10 + (doc_w - 20 - line_w); + cur_x = doc_x + 10 + (page_w - 20 - line_w); } int d_run = start_run; @@ -1026,27 +1230,30 @@ static void draw_document(ui_window_t win) { int y_offset = 0; if (max_h > run_h) y_offset = max_h - run_h; - if (cur_y + max_h > 40 && cur_y < win_h) { + int text_y = cur_y + y_offset; + if (text_y + run_h > 40 && text_y < win_h) { for(int i=0; itext[d_char + i], 0}; _Bool in_sel = is_in_selection(p, d_run, d_char + i); uint32_t text_col = in_sel ? COLOR_WHITE : run->color; int cw = ui_get_string_width_scaled(buf, run->font_size); - if (in_sel) { - ui_draw_rect(win, cur_x, cur_y + y_offset + 4, cw, run_h, COLOR_BLUE); - } - - if (run->italic) { - ui_draw_string_scaled_sloped(win, cur_x, cur_y + y_offset, buf, text_col, run->font_size, 0.2f); - if (run->bold) ui_draw_string_scaled_sloped(win, cur_x+1, cur_y + y_offset, buf, text_col, run->font_size, 0.2f); - } else { - ui_draw_string_scaled(win, cur_x, cur_y + y_offset, buf, text_col, run->font_size); - if (run->bold) ui_draw_string_scaled(win, cur_x+1, cur_y + y_offset, buf, text_col, run->font_size); - } - - if (run->underline) { - ui_draw_rect(win, cur_x, cur_y + max_h - 2, cw, 1, text_col); + if (text_y + run_h > 40) { + if (in_sel) { + ui_draw_rect(win, cur_x, text_y + 4, cw, run_h, COLOR_BLUE); + } + + if (run->italic) { + ui_draw_string_scaled_sloped(win, cur_x, text_y, buf, text_col, run->font_size, 0.2f); + if (run->bold) ui_draw_string_scaled_sloped(win, cur_x+1, text_y, buf, text_col, run->font_size, 0.2f); + } else { + ui_draw_string_scaled(win, cur_x, text_y, buf, text_col, run->font_size); + if (run->bold) ui_draw_string_scaled(win, cur_x+1, text_y, buf, text_col, run->font_size); + } + + if (run->underline) { + ui_draw_rect(win, cur_x, cur_y + max_h - 2, cw, 1, text_col); + } } cur_x += cw; } @@ -1067,7 +1274,6 @@ static void draw_document(ui_window_t win) { } if (line_cursor_x != -1 && cur_y > 40 && cur_y < win_h) { - int target_h = max_h; if (cursor_para < para_count && cursor_run < paragraphs[cursor_para].run_count) { set_active_font(win, paragraphs[cursor_para].runs[cursor_run].font_idx); int fh = ui_get_font_height_scaled(paragraphs[cursor_para].runs[cursor_run].font_size); @@ -1093,6 +1299,102 @@ static void draw_document(ui_window_t win) { } set_active_font(win, 0); + + int content_h = current_page * (page_h + 20) + page_h + 20; + if (content_h > win_h - 40) { + int sb_x = win_w - 12; + int sb_w = 12; + int sb_h = win_h - 40; + float ratio = (float)(win_h - 40) / (float)content_h; + int thumb_h = (int)(sb_h * ratio); + if (thumb_h < 20) thumb_h = 20; + int max_scroll = content_h - (win_h - 40); + if (scroll_y > max_scroll) scroll_y = max_scroll; + int thumb_y = 40 + (int)(((float)scroll_y / max_scroll) * (sb_h - thumb_h)); + + ui_draw_rect(win, sb_x, 40, sb_w, sb_h, 0xFF303030); + ui_draw_rounded_rect_filled(win, sb_x+2, thumb_y+2, sb_w-4, thumb_h-4, 4, 0xFF606060); + } +} + +static void ensure_cursor_visible(ui_window_t win) { + int pw, ph; + get_page_size(&pw, &ph); + int doc_view_w = win_w - 40; + float scale = (float)doc_view_w / (float)pw; + if (scale > 1.0f) scale = 1.0f; + int page_w = (int)(pw * scale); + int page_h = (int)(ph * scale); + + int cur_y = 10; + int current_page = 0; + int target_y = -1; + + for(int p=0; prun_count) { + int max_h = 16; + int r_idx = start_run; + int c_idx = start_char; + int end_run = start_run; int end_char = start_char; + int line_w = 0; + int last_space_run = -1; int last_space_char = -1; int last_space_w = 0; + + while(r_idx < para->run_count) { + TextRun *run = ¶->runs[r_idx]; + set_active_font(win, run->font_idx); + int fh = ui_get_font_height_scaled(run->font_size); + if (fh > max_h) max_h = fh; + + while(c_idx < run->len) { + char buf[2] = {run->text[c_idx], 0}; + int cw = ui_get_string_width_scaled(buf, run->font_size); + if (run->text[c_idx] == ' ') { last_space_run = r_idx; last_space_char = c_idx; last_space_w = line_w + cw; } + if (line_w + cw > page_w - 20) break; + line_w += cw; + c_idx++; + } + if (c_idx < run->len) break; + r_idx++; c_idx = 0; + } + if (r_idx < para->run_count || (r_idx == para->run_count - 1 && c_idx < para->runs[r_idx].len)) { + if (last_space_run != -1 && (last_space_run > start_run || last_space_char > start_char)) { end_run = last_space_run; end_char = last_space_char; line_w = last_space_w; } + else { end_run = r_idx; end_char = c_idx; } + } else { end_run = para->run_count; end_char = 0; } + + int line_h = (int)(max_h * para->spacing) + 4; + if (cur_y + line_h > current_page * (page_h + 20) + page_h - 10) { + current_page++; + cur_y = current_page * (page_h + 20) + 10; + } + + if (p == cursor_para) { + if (cursor_run >= start_run && cursor_run <= end_run) { + _Bool is_in = 0; + if (cursor_run == start_run && cursor_run == end_run) { + if (cursor_pos >= start_char && cursor_pos <= end_char) is_in = 1; + } else if (cursor_run == start_run) { + if (cursor_pos >= start_char) is_in = 1; + } else if (cursor_run == end_run) { + if (cursor_pos <= end_char) is_in = 1; + } else { is_in = 1; } + + if (is_in) target_y = cur_y; + } + } + + cur_y += line_h; + start_run = end_run; start_char = end_char; + } + } + + if (target_y != -1) { + if (target_y - scroll_y < 50) scroll_y = target_y - 50; + else if (target_y - scroll_y > win_h - 120) scroll_y = target_y - (win_h - 120); + if (scroll_y < 0) scroll_y = 0; + } } static void update_selection(int p, int r, int char_pos) { @@ -1194,6 +1496,22 @@ static void apply_style_to_selection(void) { file_modified = 1; } +static void apply_align_to_selection(int mode) { + align_mode = mode; + active_dropdown = 0; + + if (sel_start_para != -1 && sel_end_para != -1) { + int s = sel_start_para < sel_end_para ? sel_start_para : sel_end_para; + int e = sel_start_para > sel_end_para ? sel_start_para : sel_end_para; + for (int p = s; p <= e; p++) { + paragraphs[p].align = mode; + } + } else if (cursor_para != -1) { + paragraphs[cursor_para].align = mode; + } + file_modified = 1; +} + static void handle_click(ui_window_t win, int x, int y) { if (active_dialog == 1) { int dw = 300; int dh = 150; @@ -1228,15 +1546,23 @@ static void handle_click(ui_window_t win, int x, int y) { return; } + if (active_dropdown == 3) { + if (x >= 530 && x < 580 && y >= 32 && y < 32 + 3*20) { + current_page_size = (y - 32) / 20; + printf("Selected page size: %d\n", current_page_size); + } + active_dropdown = 0; + return; + } + if (y < 40) { if (x >= 10 && x < 34) { is_bold = !is_bold; active_dropdown = 0; apply_style_to_selection(); } else if (x >= 40 && x < 64) { is_italic = !is_italic; active_dropdown = 0; apply_style_to_selection(); } else if (x >= 70 && x < 94) { is_underline = !is_underline; active_dropdown = 0; apply_style_to_selection(); } - - else if (x >= 110 && x < 134) { align_mode = 0; active_dropdown = 0; if (cursor_para != -1) paragraphs[cursor_para].align = 0; } - else if (x >= 140 && x < 164) { align_mode = 1; active_dropdown = 0; if (cursor_para != -1) paragraphs[cursor_para].align = 1; } - else if (x >= 170 && x < 194) { align_mode = 2; active_dropdown = 0; if (cursor_para != -1) paragraphs[cursor_para].align = 2; } - else if (x >= 200 && x < 224) { align_mode = 3; active_dropdown = 0; if (cursor_para != -1) paragraphs[cursor_para].align = 3; } + else if (x >= 110 && x < 134) { apply_align_to_selection(0); } + else if (x >= 140 && x < 164) { apply_align_to_selection(1); } + else if (x >= 170 && x < 194) { apply_align_to_selection(2); } + else if (x >= 200 && x < 224) { apply_align_to_selection(3); } else if (x >= 240 && x < 360) { active_dropdown = 1; @@ -1258,19 +1584,102 @@ static void handle_click(ui_window_t win, int x, int y) { perform_undo(); active_dropdown = 0; } - else if (x >= win_w - 50 && x < win_w - 10) { + else if (x >= 530 && x < 580) { + active_dropdown = 3; + } + else if (x >= 590 && x < 630) { active_dialog = 1; string_copy(dialog_input, open_filename[0] ? open_filename : "document.pdf"); dialog_input_len = string_len(dialog_input); active_dropdown = 0; } } else { - int doc_x = 20; + int pw, ph; + get_page_size(&pw, &ph); + + int doc_view_w = win_w - 40; + float scale = (float)doc_view_w / (float)pw; + if (scale > 1.0f) scale = 1.0f; + + int page_w = (int)(pw * scale); + int page_h = (int)(ph * scale); + + int content_h = 0; + int dummy_y = 10; + int dummy_page = 0; + for(int p=0; prun_count) { + int max_h = 16; int end_run = start_run; int end_char = start_char; int line_w = 0; + int r_idx = start_run; int c_idx = start_char; int last_space_run = -1; int last_space_char = -1; int last_space_w = 0; + while(r_idx < para->run_count) { + TextRun *run = ¶->runs[r_idx]; + set_active_font(win, run->font_idx); + int fh = ui_get_font_height_scaled(run->font_size); + if (fh > max_h) max_h = fh; + while(c_idx < run->len) { + char buf[2] = {run->text[c_idx], 0}; + int cw = ui_get_string_width_scaled(buf, run->font_size); + if (run->text[c_idx] == ' ') { last_space_run = r_idx; last_space_char = c_idx; last_space_w = line_w + cw; } + if (line_w + cw > page_w - 20) break; + line_w += cw; + c_idx++; + } + if (c_idx < run->len) break; + r_idx++; c_idx = 0; + } + if (r_idx < para->run_count || (r_idx == para->run_count - 1 && c_idx < para->runs[r_idx].len)) { + if (last_space_run != -1 && (last_space_run > start_run || last_space_char > start_char)) { end_run = last_space_run; end_char = last_space_char; line_w = last_space_w; } + else { end_run = r_idx; end_char = c_idx; } + } else { end_run = para->run_count; end_char = 0; } + + int line_h = (int)(max_h * para->spacing) + 4; + if (dummy_y + line_h > dummy_page * (page_h + 20) + page_h - 10) { dummy_page++; dummy_y = dummy_page * (page_h + 20) + 10; } + dummy_y += line_h; + start_run = end_run; start_char = end_char; + if (start_run < para->run_count && para->runs[start_run].text[start_char] == ' ') { + start_char++; + if (start_char >= para->runs[start_run].len) { start_char = 0; start_run++; } + } + } + } + content_h = dummy_page * (page_h + 20) + page_h + 20; + + int sb_x = win_w - 12; + int sb_w = 12; + int sb_h = win_h - 40; + int thumb_y = 40; + int thumb_h = 0; + int max_scroll = 0; + if (content_h > win_h - 40) { + float ratio = (float)(win_h - 40) / (float)content_h; + thumb_h = (int)(sb_h * ratio); + if (thumb_h < 20) thumb_h = 20; + max_scroll = content_h - (win_h - 40); + if (scroll_y > max_scroll) scroll_y = max_scroll; + thumb_y = 40 + (int)(((float)scroll_y / max_scroll) * (sb_h - thumb_h)); + } + + if (content_h > win_h - 40 && x >= sb_x && x < sb_x + sb_w) { + if (y >= thumb_y && y < thumb_y + thumb_h) { + is_dragging_scrollbar = 1; + scrollbar_drag_offset_y = y - thumb_y; + } else { + if (y < thumb_y) scroll_y -= (win_h - 40); + else scroll_y += (win_h - 40); + if (scroll_y < 0) scroll_y = 0; + if (scroll_y > max_scroll) scroll_y = max_scroll; + } + return; + } + + int doc_x = 20 + (doc_view_w - page_w) / 2; int doc_y = 50 - scroll_y; - int doc_w = win_w - 40; int target_y = y; int target_x = x; int cur_y = doc_y + 10; + int current_page = 0; for(int p=0; ptext[c_idx], 0}; int cw = ui_get_string_width_scaled(buf, run->font_size); if (run->text[c_idx] == ' ') { last_space_run = r_idx; last_space_char = c_idx; last_space_w = line_w + cw; } - if (line_w + cw > doc_w - 20) break; + if (line_w + cw > page_w - 20) break; line_w += cw; c_idx++; } @@ -1311,10 +1720,16 @@ static void handle_click(ui_window_t win, int x, int y) { } int line_h = (int)(max_h * para->spacing) + 4; + + if (cur_y + line_h > doc_y + current_page * (page_h + 20) + page_h - 10) { + current_page++; + cur_y = doc_y + current_page * (page_h + 20) + 10; + } + if (target_y >= cur_y && target_y < cur_y + line_h) { int cur_x = doc_x + 10; - if (para->align == 1) cur_x = doc_x + 10 + (doc_w - 20 - line_w) / 2; - else if (para->align == 2) cur_x = doc_x + 10 + (doc_w - 20 - line_w); + if (para->align == 1) cur_x = doc_x + 10 + (page_w - 20 - line_w) / 2; + else if (para->align == 2) cur_x = doc_x + 10 + (page_w - 20 - line_w); int d_run = start_run; int d_char = start_char; @@ -1433,13 +1848,14 @@ int main(int argc, char **argv) { (void)argv; ui_window_t win = ui_window_create("BoredWord", 100, 100, win_w, win_h); if (!win) return 1; + ui_window_set_resizable(win, 1); load_fonts(); set_active_font(win, 0); init_doc(); if (argc > 1) { - load_file(argv[1]); + load_file(win, argv[1]); } gui_event_t ev; @@ -1449,6 +1865,14 @@ int main(int argc, char **argv) { while (ui_get_event(win, &ev)) { if (ev.type == GUI_EVENT_PAINT) { needs_repaint = 1; + } else if (ev.type == GUI_EVENT_RESIZE) { + win_w = ev.arg1; + win_h = ev.arg2; + needs_repaint = 1; + } else if (ev.type == GUI_EVENT_MOUSE_WHEEL) { + scroll_y -= ev.arg2 * 30; // arg2 is scroll amount + if (scroll_y < 0) scroll_y = 0; + needs_repaint = 1; } else if (ev.type == GUI_EVENT_MOUSE_DOWN) { if (ev.arg1 >= 0 && ev.arg1 < win_w && ev.arg2 >= 0 && ev.arg2 < win_h) { if (ev.arg2 < 40 || active_dialog == 1 || active_dropdown != 0) { @@ -1460,24 +1884,70 @@ int main(int argc, char **argv) { handle_click(win, ev.arg1, ev.arg2); selection_started = 0; - if (cursor_para != -1 && cursor_run != -1) { - TextRun *r = ¶graphs[cursor_para].runs[cursor_run]; - is_bold = r->bold; - is_italic = r->italic; - is_underline = r->underline; - current_font_idx = r->font_idx; - current_font_size = r->font_size; - current_text_color = r->color; - align_mode = paragraphs[cursor_para].align; - } + update_formatting_state(); + } } needs_repaint = 1; + needs_repaint = 1; } else if (ev.type == GUI_EVENT_MOUSE_UP) { is_dragging = 0; + is_dragging_scrollbar = 0; needs_repaint = 1; } else if (ev.type == GUI_EVENT_MOUSE_MOVE) { - if (is_dragging && ev.arg2 >= 40 && active_dialog == 0 && active_dropdown == 0) { + if (is_dragging_scrollbar) { + int pw, ph; get_page_size(&pw, &ph); + int doc_view_w = win_w - 40; + float scale = (float)doc_view_w / (float)pw; if (scale > 1.0f) scale = 1.0f; + int page_w = (int)(pw * scale); + int page_h = (int)(ph * scale); + + int content_h = 0; + int dummy_y = 10; int dummy_page = 0; + for(int p=0; prun_count) { + int max_h = 16; int end_run = start_run; int end_char = start_char; int line_w = 0; + int r_idx = start_run; int c_idx = start_char; int last_space_run = -1; int last_space_char = -1; int last_space_w = 0; + while(r_idx < para->run_count) { + TextRun *run = ¶->runs[r_idx]; set_active_font(win, run->font_idx); + int fh = ui_get_font_height_scaled(run->font_size); if (fh > max_h) max_h = fh; + while(c_idx < run->len) { + char buf[2] = {run->text[c_idx], 0}; int cw = ui_get_string_width_scaled(buf, run->font_size); + if (run->text[c_idx] == ' ') { last_space_run = r_idx; last_space_char = c_idx; last_space_w = line_w + cw; } + if (line_w + cw > page_w - 20) break; + line_w += cw; c_idx++; + } + if (c_idx < run->len) break; + r_idx++; c_idx = 0; + } + if (r_idx < para->run_count || (r_idx == para->run_count - 1 && c_idx < para->runs[r_idx].len)) { + if (last_space_run != -1 && (last_space_run > start_run || last_space_char > start_char)) { end_run = last_space_run; end_char = last_space_char; line_w = last_space_w; } + else { end_run = r_idx; end_char = c_idx; } + } else { end_run = para->run_count; end_char = 0; } + int line_h = (int)(max_h * para->spacing) + 4; + if (dummy_y + line_h > dummy_page * (page_h + 20) + page_h - 10) { dummy_page++; dummy_y = dummy_page * (page_h + 20) + 10; } + dummy_y += line_h; start_run = end_run; start_char = end_char; + if (start_run < para->run_count && para->runs[start_run].text[start_char] == ' ') { start_char++; if (start_char >= para->runs[start_run].len) { start_char = 0; start_run++; } } + } + } + content_h = dummy_page * (page_h + 20) + page_h + 20; + + if (content_h > win_h - 40) { + int sb_h = win_h - 40; + float ratio = (float)(win_h - 40) / (float)content_h; + int thumb_h = (int)(sb_h * ratio); + if (thumb_h < 20) thumb_h = 20; + int max_scroll = content_h - (win_h - 40); + + int new_thumb_y = ev.arg2 - scrollbar_drag_offset_y; + if (new_thumb_y < 40) new_thumb_y = 40; + if (new_thumb_y > 40 + sb_h - thumb_h) new_thumb_y = 40 + sb_h - thumb_h; + + scroll_y = (int)(((float)(new_thumb_y - 40) / (sb_h - thumb_h)) * max_scroll); + needs_repaint = 1; + } + } else if (is_dragging && ev.arg2 >= 40 && active_dialog == 0 && active_dropdown == 0) { handle_click(win, ev.arg1, ev.arg2); needs_repaint = 1; } @@ -1493,7 +1963,7 @@ int main(int argc, char **argv) { dialog_input[dialog_input_len] = 0; } } else { - insert_char((char)ev.arg1); + insert_char(win, (char)ev.arg1); } needs_repaint = 1; } else if (ev.type == GUI_EVENT_CLOSE) { @@ -1502,8 +1972,8 @@ int main(int argc, char **argv) { } if (needs_repaint) { - draw_toolbar(win); draw_document(win); + draw_toolbar(win); draw_dropdowns(win); draw_dialogs(win); ui_mark_dirty(win, 0, 0, win_w, win_h); diff --git a/src/wm/wm.c b/src/wm/wm.c index e24faa5..804bcfc 100644 --- a/src/wm/wm.c +++ b/src/wm/wm.c @@ -2070,19 +2070,33 @@ void wm_handle_right_click(int x, int y) { } // 2. Check Explorer Items if (!is_dragging_file) { - bool is_dir; - if (explorer_get_file_at(drag_start_x, drag_start_y, drag_file_path, &is_dir)) { - is_dragging_file = true; - drag_icon_type = is_dir ? 1 : 0; - drag_src_win = NULL; - - // Find which explorer window was clicked to clear its state - for (int w = 0; w < window_count; w++) { - Window *win = all_windows[w]; - if (win->visible && rect_contains(win->x, win->y, win->w, win->h, drag_start_x, drag_start_y)) { - if (str_starts_with(win->title, "Files")) { - drag_src_win = win; - explorer_clear_click_state(win); + Window *topmost_at_drag = NULL; + int tops_z = -1; + for (int w = 0; w < window_count; w++) { + Window *w_ptr = all_windows[w]; + if (w_ptr->visible && rect_contains(w_ptr->x, w_ptr->y, w_ptr->w, w_ptr->h, drag_start_x, drag_start_y)) { + if (w_ptr->z_index > tops_z) { + topmost_at_drag = w_ptr; + tops_z = w_ptr->z_index; + } + } + } + + if (!topmost_at_drag || str_starts_with(topmost_at_drag->title, "Files")) { + bool is_dir; + if (explorer_get_file_at(drag_start_x, drag_start_y, drag_file_path, &is_dir)) { + is_dragging_file = true; + drag_icon_type = is_dir ? 1 : 0; + drag_src_win = NULL; + + // Find which explorer window was clicked to clear its state + for (int w = 0; w < window_count; w++) { + Window *win = all_windows[w]; + if (win->visible && rect_contains(win->x, win->y, win->w, win->h, drag_start_x, drag_start_y)) { + if (str_starts_with(win->title, "Files")) { + drag_src_win = win; + explorer_clear_click_state(win); + } } } } @@ -2435,6 +2449,9 @@ void wm_handle_right_click(int x, int y) { } } } + } + + if (is_dragging_file) { is_dragging_file = false; force_redraw = true; }