implement external bbs window scrolling.
@@ -809,8 +809,8 @@ | ||
809 | 809 | gdra_lin(target, p1, p2, 1, lnpat, G_STORE); |
810 | 810 | |
811 | 811 | p1.y = p2.y; |
812 | - p1.x = ctx->view_l; | |
813 | - p2.x = ctx->view_r; | |
812 | + p1.x = 0; | |
813 | + p2.x = ctx->view_r - ctx->view_l; | |
814 | 814 | gdra_lin(target, p1, p2, 1, lnpat, G_STORE); |
815 | 815 | |
816 | 816 | return 0; |
@@ -1023,11 +1023,37 @@ | ||
1023 | 1023 | ctx->view_b += dv; |
1024 | 1024 | } |
1025 | 1025 | |
1026 | -EXPORT VOID extbbslist_editcontext_getdrawrect(extbbslist_editcontext_t *ctx, W *l, W *t, W *r, W *b) | |
1026 | +EXPORT VOID extbbslist_editcontext_getdrawrect(extbbslist_editcontext_t *ctx, GID gid, W *l, W *t, W *r, W *b) | |
1027 | 1027 | { |
1028 | + extbbslist_item_t *senti, *item; | |
1029 | + W max = 0, width; | |
1030 | + FSSPEC fspec; | |
1031 | + | |
1032 | + gget_fon(gid, &fspec, NULL); | |
1033 | + fspec.size.h = fspec.size.v / 2; | |
1034 | + gset_fon(gid, &fspec); | |
1035 | + | |
1036 | + senti = extbbslist_editcontext_sentinelnode(ctx); | |
1037 | + item = extbbslist_item_nextnode(senti); | |
1038 | + for (;;) { | |
1039 | + if (item == senti) { | |
1040 | + break; | |
1041 | + } | |
1042 | + | |
1043 | + width = gget_stw(gid, item->url.tc, item->url.tc_len, NULL, NULL); | |
1044 | + if (width < 0) { | |
1045 | + continue; | |
1046 | + } | |
1047 | + if (width > max) { | |
1048 | + max = width; | |
1049 | + } | |
1050 | + | |
1051 | + item = extbbslist_item_nextnode(item); | |
1052 | + } | |
1053 | + | |
1028 | 1054 | *l = 0; |
1029 | 1055 | *t = 0; |
1030 | - *r = 200; | |
1056 | + *r = EXTBBSLIST_TITLE_WIDTH + 8 + max + 4; | |
1031 | 1057 | *b = EXTBBSLIST_ENTRY_HEIGHT * ctx->num; |
1032 | 1058 | } |
1033 | 1059 |
@@ -60,6 +60,6 @@ | ||
60 | 60 | IMPORT VOID extbbslist_editcontext_setviewrect(extbbslist_editcontext_t *ctx, W l, W t, W r, W b); |
61 | 61 | IMPORT VOID extbbslist_editcontext_getviewrect(extbbslist_editcontext_t *ctx, W *l, W *t, W *r, W *b); |
62 | 62 | IMPORT VOID extbbslist_editcontext_scrollviewrect(extbbslist_editcontext_t *ctx, W dh, W dv); |
63 | -IMPORT VOID extbbslist_editcontext_getdrawrect(extbbslist_editcontext_t *ctx, W *l, W *t, W *r, W *b); | |
63 | +IMPORT VOID extbbslist_editcontext_getdrawrect(extbbslist_editcontext_t *ctx, GID gid, W *l, W *t, W *r, W *b); | |
64 | 64 | |
65 | 65 | #endif |
@@ -866,8 +866,9 @@ | ||
866 | 866 | { |
867 | 867 | TC title[128]; |
868 | 868 | TC url[256]; |
869 | - W title_len, url_len; | |
869 | + W title_len, url_len, l, t, r, b; | |
870 | 870 | TCURL_CHECK_VALID_BBSURL ret; |
871 | + GID gid; | |
871 | 872 | |
872 | 873 | title_len = registerexternalwindow_getboradnametext(bchanl->registerexternalwindow, title, 128); |
873 | 874 | if (title_len < 0) { |
@@ -906,6 +907,9 @@ | ||
906 | 907 | registerexternalwindow_setboradnametext(bchanl->registerexternalwindow, NULL, 0); |
907 | 908 | registerexternalwindow_seturltext(bchanl->registerexternalwindow, NULL, 0); |
908 | 909 | |
910 | + gid = externalbbswindow_getGID(bchanl->externalbbswindow); | |
911 | + extbbslist_editcontext_getdrawrect(bchanl->bbsmenu.editctx, gid, &l, &t, &r, &b); | |
912 | + externalbbswindow_setdrawrect(bchanl->externalbbswindow, l, t, r, b); | |
909 | 913 | externalbbswindow_requestredisp(bchanl->externalbbswindow); |
910 | 914 | |
911 | 915 | return True; |
@@ -1694,7 +1698,8 @@ | ||
1694 | 1698 | RECT work; |
1695 | 1699 | #define BCHANL_SELECTMENU_STRBUF_LENGTH 256 |
1696 | 1700 | TC str[BCHANL_SELECTMENU_STRBUF_LENGTH]; |
1697 | - W index, len = 0; | |
1701 | + W index, len = 0, l, t, r, b; | |
1702 | + GID gid; | |
1698 | 1703 | |
1699 | 1704 | switch(sel) { |
1700 | 1705 | case BCHANL_MAINMENU_SELECT_CLOSE: /* [終了] */ |
@@ -1727,6 +1732,9 @@ | ||
1727 | 1732 | externalbbswindow_getworkrect(bchanl->externalbbswindow, &work); |
1728 | 1733 | extbbslist_editcontext_setviewrect(bchanl->bbsmenu.editctx, 0, 0, work.c.right - work.c.left, work.c.bottom - work.c.top); |
1729 | 1734 | externalbbswindow_setworkrect(bchanl->externalbbswindow, 0, 0, work.c.right - work.c.left, work.c.bottom - work.c.top); |
1735 | + gid = externalbbswindow_getGID(bchanl->externalbbswindow); | |
1736 | + extbbslist_editcontext_getdrawrect(bchanl->bbsmenu.editctx, gid, &l, &t, &r, &b); | |
1737 | + externalbbswindow_setdrawrect(bchanl->externalbbswindow, l, t, r, b); | |
1730 | 1738 | } |
1731 | 1739 | break; |
1732 | 1740 | case BCHANL_MAINMENU_SELECT_EXTBBS_REGISTER: |
@@ -1765,6 +1773,9 @@ | ||
1765 | 1773 | break; |
1766 | 1774 | } |
1767 | 1775 | extbbslist_editcontext_deleteitem(bchanl->bbsmenu.editctx, index); |
1776 | + gid = externalbbswindow_getGID(bchanl->externalbbswindow); | |
1777 | + extbbslist_editcontext_getdrawrect(bchanl->bbsmenu.editctx, gid, &l, &t, &r, &b); | |
1778 | + externalbbswindow_setdrawrect(bchanl->externalbbswindow, l, t, r, b); | |
1768 | 1779 | externalbbswindow_requestredisp(bchanl->externalbbswindow); |
1769 | 1780 | } |
1770 | 1781 | break; |
@@ -2043,8 +2054,8 @@ | ||
2043 | 2054 | bchanl_externalbbswindow_draw(bchanl); |
2044 | 2055 | break; |
2045 | 2056 | case BCHANLHMIEVENT_TYPE_EXTERNALBBSWINDOW_RESIZE: |
2057 | + bchanl_externalbbswindow_resize(bchanl, evt->data.externalbbswindow_resize.work_sz); | |
2046 | 2058 | break; |
2047 | - bchanl_externalbbswindow_resize(bchanl, evt->data.externalbbswindow_resize.work_sz); | |
2048 | 2059 | case BCHANLHMIEVENT_TYPE_EXTERNALBBSWINDOW_CLOSE: |
2049 | 2060 | bchanl_externalbbswindow_close(bchanl); |
2050 | 2061 | break; |