summaryrefslogtreecommitdiff
path: root/src/ui/documentwidget.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/ui/documentwidget.c')
-rw-r--r--src/ui/documentwidget.c23
1 files changed, 18 insertions, 5 deletions
diff --git a/src/ui/documentwidget.c b/src/ui/documentwidget.c
index b088fa74..de2abf0d 100644
--- a/src/ui/documentwidget.c
+++ b/src/ui/documentwidget.c
@@ -513,6 +513,10 @@ const iString *url_DocumentWidget(const iDocumentWidget *d) {
513 return d->url; 513 return d->url;
514} 514}
515 515
516const iGmDocument *document_DocumentWidget(const iDocumentWidget *d) {
517 return d->doc;
518}
519
516void setUrlFromCache_DocumentWidget(iDocumentWidget *d, const iString *url, iBool isFromCache) { 520void setUrlFromCache_DocumentWidget(iDocumentWidget *d, const iString *url, iBool isFromCache) {
517 if (cmpStringSc_String(d->url, url, &iCaseInsensitive)) { 521 if (cmpStringSc_String(d->url, url, &iCaseInsensitive)) {
518 set_String(d->url, url); 522 set_String(d->url, url);
@@ -583,8 +587,9 @@ static void scroll_DocumentWidget_(iDocumentWidget *d, int offset) {
583 refresh_Widget(as_Widget(d)); 587 refresh_Widget(as_Widget(d));
584} 588}
585 589
586static void scrollTo_DocumentWidget_(iDocumentWidget *d, int documentY) { 590static void scrollTo_DocumentWidget_(iDocumentWidget *d, int documentY, iBool centered) {
587 d->scrollY = documentY - documentBounds_DocumentWidget_(d).size.y / 2; 591 d->scrollY = documentY - (centered ? documentBounds_DocumentWidget_(d).size.y / 2 :
592 lineHeight_Text(paragraph_FontId));
588 scroll_DocumentWidget_(d, 0); /* clamp it */ 593 scroll_DocumentWidget_(d, 0); /* clamp it */
589} 594}
590 595
@@ -781,7 +786,7 @@ static iBool handleCommand_DocumentWidget_(iDocumentWidget *d, const char *cmd)
781 if (midLoc) { 786 if (midLoc) {
782 mid = findRunAtLoc_GmDocument(d->doc, midLoc); 787 mid = findRunAtLoc_GmDocument(d->doc, midLoc);
783 if (mid) { 788 if (mid) {
784 scrollTo_DocumentWidget_(d, mid_Rect(mid->bounds).y); 789 scrollTo_DocumentWidget_(d, mid_Rect(mid->bounds).y, iTrue);
785 } 790 }
786 } 791 }
787 refresh_Widget(w); 792 refresh_Widget(w);
@@ -923,6 +928,14 @@ static iBool handleCommand_DocumentWidget_(iDocumentWidget *d, const char *cmd)
923 arg_Command(cmd) * height_Rect(documentBounds_DocumentWidget_(d))); 928 arg_Command(cmd) * height_Rect(documentBounds_DocumentWidget_(d)));
924 return iTrue; 929 return iTrue;
925 } 930 }
931 else if (equal_Command(cmd, "document.goto") && document_App() == d) {
932 const char *loc = pointerLabel_Command(cmd, "loc");
933 const iGmRun *run = findRunAtLoc_GmDocument(d->doc, loc);
934 if (run) {
935 scrollTo_DocumentWidget_(d, run->visBounds.pos.y, iFalse);
936 }
937 return iTrue;
938 }
926 else if ((equal_Command(cmd, "find.next") || equal_Command(cmd, "find.prev")) && 939 else if ((equal_Command(cmd, "find.next") || equal_Command(cmd, "find.prev")) &&
927 document_App() == d) { 940 document_App() == d) {
928 const int dir = equal_Command(cmd, "find.next") ? +1 : -1; 941 const int dir = equal_Command(cmd, "find.next") ? +1 : -1;
@@ -943,7 +956,7 @@ static iBool handleCommand_DocumentWidget_(iDocumentWidget *d, const char *cmd)
943 if (d->foundMark.start) { 956 if (d->foundMark.start) {
944 const iGmRun *found; 957 const iGmRun *found;
945 if ((found = findRunAtLoc_GmDocument(d->doc, d->foundMark.start)) != NULL) { 958 if ((found = findRunAtLoc_GmDocument(d->doc, d->foundMark.start)) != NULL) {
946 scrollTo_DocumentWidget_(d, mid_Rect(found->bounds).y); 959 scrollTo_DocumentWidget_(d, mid_Rect(found->bounds).y, iTrue);
947 } 960 }
948 } 961 }
949 } 962 }
@@ -1353,7 +1366,7 @@ static void draw_DocumentWidget_(const iDocumentWidget *d) {
1353 fillRect_Paint(&ctx.paint, bounds, tmBackground_ColorId); 1366 fillRect_Paint(&ctx.paint, bounds, tmBackground_ColorId);
1354 setClip_Paint(&ctx.paint, bounds); 1367 setClip_Paint(&ctx.paint, bounds);
1355 render_GmDocument(d->doc, visibleRange_DocumentWidget_(d), drawRun_DrawContext_, &ctx); 1368 render_GmDocument(d->doc, visibleRange_DocumentWidget_(d), drawRun_DrawContext_, &ctx);
1356 clearClip_Paint(&ctx.paint); 1369 unsetClip_Paint(&ctx.paint);
1357 draw_Widget(w); 1370 draw_Widget(w);
1358} 1371}
1359 1372