diff options
author | Jaakko Keränen <jaakko.keranen@iki.fi> | 2020-08-05 10:45:56 +0300 |
---|---|---|
committer | Jaakko Keränen <jaakko.keranen@iki.fi> | 2020-08-05 10:45:56 +0300 |
commit | 2b1de0641335ab1a88aeafcc8911056f155e94c9 (patch) | |
tree | 058b34babb8eed6a44f1e1cd141b78acbb583844 /src/ui | |
parent | 32f0e0c110c803cd6f92fabf4c52d06aec5b1a69 (diff) |
Setting up document theming
Diffstat (limited to 'src/ui')
-rw-r--r-- | src/ui/documentwidget.c | 60 | ||||
-rw-r--r-- | src/ui/text.c | 4 | ||||
-rw-r--r-- | src/ui/text.h | 1 |
3 files changed, 49 insertions, 16 deletions
diff --git a/src/ui/documentwidget.c b/src/ui/documentwidget.c index a61d5b88..dbcf57eb 100644 --- a/src/ui/documentwidget.c +++ b/src/ui/documentwidget.c | |||
@@ -157,7 +157,7 @@ static int documentWidth_DocumentWidget_(const iDocumentWidget *d) { | |||
157 | const iWidget *w = constAs_Widget(d); | 157 | const iWidget *w = constAs_Widget(d); |
158 | const iRect bounds = bounds_Widget(w); | 158 | const iRect bounds = bounds_Widget(w); |
159 | return iMini(bounds.size.x - gap_UI * d->pageMargin * 2, | 159 | return iMini(bounds.size.x - gap_UI * d->pageMargin * 2, |
160 | fontSize_UI * 40 * d->textSizePercent / 100); | 160 | fontSize_UI * 38 * d->textSizePercent / 100); /* TODO: Add user preference .*/ |
161 | } | 161 | } |
162 | 162 | ||
163 | static iRect documentBounds_DocumentWidget_(const iDocumentWidget *d) { | 163 | static iRect documentBounds_DocumentWidget_(const iDocumentWidget *d) { |
@@ -168,11 +168,12 @@ static iRect documentBounds_DocumentWidget_(const iDocumentWidget *d) { | |||
168 | rect.pos.x = bounds.size.x / 2 - rect.size.x / 2; | 168 | rect.pos.x = bounds.size.x / 2 - rect.size.x / 2; |
169 | rect.pos.y = top_Rect(bounds) + margin; | 169 | rect.pos.y = top_Rect(bounds) + margin; |
170 | rect.size.y = height_Rect(bounds) - 2 * margin; | 170 | rect.size.y = height_Rect(bounds) - 2 * margin; |
171 | if (size_GmDocument(d->doc).y < rect.size.y) { | 171 | iInt2 docSize = addY_I2(size_GmDocument(d->doc), 0 /*-lineHeight_Text(banner_FontId) * 2*/); |
172 | if (docSize.y < rect.size.y) { | ||
172 | /* Center vertically if short. */ | 173 | /* Center vertically if short. */ |
173 | int offset = (rect.size.y - size_GmDocument(d->doc).y) / 2; | 174 | int offset = (rect.size.y - docSize.y) / 2; |
174 | rect.pos.y += offset; | 175 | rect.pos.y += offset; |
175 | rect.size.y = size_GmDocument(d->doc).y; | 176 | rect.size.y = docSize.y; |
176 | } | 177 | } |
177 | return rect; | 178 | return rect; |
178 | } | 179 | } |
@@ -324,11 +325,19 @@ static void updateSource_DocumentWidget_(iDocumentWidget *d) { | |||
324 | /* TODO: Do this in the background. However, that requires a text metrics calculator | 325 | /* TODO: Do this in the background. However, that requires a text metrics calculator |
325 | that does not try to cache the glyph bitmaps. */ | 326 | that does not try to cache the glyph bitmaps. */ |
326 | const enum iGmStatusCode statusCode = status_GmRequest(d->request); | 327 | const enum iGmStatusCode statusCode = status_GmRequest(d->request); |
327 | if (statusCode != input_GmStatusCode && | 328 | if (category_GmStatusCode(statusCode) != categoryInput_GmStatusCode) { |
328 | statusCode != sensitiveInput_GmStatusCode) { | ||
329 | iString str; | 329 | iString str; |
330 | /* Theming. */ { | ||
331 | if (isEmpty_String(d->titleUser)) { | ||
332 | setThemeSeed_GmDocument(d->doc, | ||
333 | collect_Block(newRange_Block(urlHost_String(d->url)))); | ||
334 | } | ||
335 | else { | ||
336 | setThemeSeed_GmDocument(d->doc, &d->titleUser->chars); | ||
337 | } | ||
338 | } | ||
330 | initBlock_String(&str, body_GmRequest(d->request)); | 339 | initBlock_String(&str, body_GmRequest(d->request)); |
331 | if (statusCode == success_GmStatusCode) { | 340 | if (category_GmStatusCode(statusCode) == categorySuccess_GmStatusCode) { |
332 | /* Check the MIME type. */ | 341 | /* Check the MIME type. */ |
333 | const iString *mime = meta_GmRequest(d->request); | 342 | const iString *mime = meta_GmRequest(d->request); |
334 | if (startsWith_String(mime, "text/plain")) { | 343 | if (startsWith_String(mime, "text/plain")) { |
@@ -997,14 +1006,11 @@ static void drawRun_DrawContext_(void *context, const iGmRun *run) { | |||
997 | } | 1006 | } |
998 | return; | 1007 | return; |
999 | } | 1008 | } |
1000 | iString text; | ||
1001 | /* TODO: making a copy is unnecessary; the text routines should accept Rangecc */ | ||
1002 | initRange_String(&text, run->text); | ||
1003 | enum iColorId fg = run->color; | 1009 | enum iColorId fg = run->color; |
1004 | const iGmDocument *doc = d->widget->doc; | 1010 | const iGmDocument *doc = d->widget->doc; |
1005 | const iBool isHover = | 1011 | const iBool isHover = |
1006 | run->linkId != 0 && d->widget->hoverLink && run->linkId == d->widget->hoverLink->linkId && | 1012 | (run->linkId != 0 && d->widget->hoverLink && run->linkId == d->widget->hoverLink->linkId && |
1007 | !isEmpty_Rect(run->bounds); | 1013 | !isEmpty_Rect(run->bounds)); |
1008 | const iInt2 visPos = add_I2(run->visBounds.pos, origin); | 1014 | const iInt2 visPos = add_I2(run->visBounds.pos, origin); |
1009 | /* Text markers. */ | 1015 | /* Text markers. */ |
1010 | fillRange_DrawContext_(d, run, teal_ColorId, d->widget->foundMark, &d->inFoundMark); | 1016 | fillRange_DrawContext_(d, run, teal_ColorId, d->widget->foundMark, &d->inFoundMark); |
@@ -1016,8 +1022,30 @@ static void drawRun_DrawContext_(void *context, const iGmRun *run) { | |||
1016 | fg = linkColor_GmDocument(doc, run->linkId); | 1022 | fg = linkColor_GmDocument(doc, run->linkId); |
1017 | } | 1023 | } |
1018 | } | 1024 | } |
1019 | drawString_Text(run->font, visPos, fg, &text); | 1025 | if (run->flags & siteBanner_GmRunFlag) { |
1020 | deinit_String(&text); | 1026 | fillRect_Paint( |
1027 | &d->paint, | ||
1028 | initCorners_Rect(topLeft_Rect(d->widgetBounds), | ||
1029 | init_I2(right_Rect(bounds_Widget(constAs_Widget(d->widget))), | ||
1030 | visPos.y + height_Rect(run->visBounds))), | ||
1031 | black_ColorId); | ||
1032 | const iChar icon = siteIcon_GmDocument(doc); | ||
1033 | iString bannerText; | ||
1034 | init_String(&bannerText); | ||
1035 | format_String(&bannerText, "%lc", (int) icon); | ||
1036 | //appendRange_String(&bannerText, run->text); | ||
1037 | const iInt2 iconSize = advanceN_Text(banner_FontId, cstr_String(&bannerText), 2); | ||
1038 | iInt2 bpos = add_I2(visPos, init_I2(0, lineHeight_Text(banner_FontId) / 2)); | ||
1039 | // draw_Text(run->font, bpos, fg, "%s", buf); | ||
1040 | // bpos.x += iconSize.x; | ||
1041 | drawRange_Text(run->font, bpos, fg, range_String(&bannerText)); | ||
1042 | bpos.x += iconSize.x + 3 * gap_Text; | ||
1043 | drawRange_Text(run->font, bpos, fg, run->text); | ||
1044 | deinit_String(&bannerText); | ||
1045 | } | ||
1046 | else { | ||
1047 | drawRange_Text(run->font, visPos, fg, run->text); | ||
1048 | } | ||
1021 | /* Presentation of links. */ | 1049 | /* Presentation of links. */ |
1022 | if (run->linkId) { | 1050 | if (run->linkId) { |
1023 | const int metaFont = paragraph_FontId; | 1051 | const int metaFont = paragraph_FontId; |
@@ -1124,7 +1152,7 @@ static void draw_DocumentWidget_(const iDocumentWidget *d) { | |||
1124 | .bounds = documentBounds_DocumentWidget_(d) | 1152 | .bounds = documentBounds_DocumentWidget_(d) |
1125 | }; | 1153 | }; |
1126 | init_Paint(&ctx.paint); | 1154 | init_Paint(&ctx.paint); |
1127 | fillRect_Paint(&ctx.paint, bounds, gray15_ColorId); | 1155 | fillRect_Paint(&ctx.paint, bounds, black_ColorId); |
1128 | setClip_Paint(&ctx.paint, bounds); | 1156 | setClip_Paint(&ctx.paint, bounds); |
1129 | render_GmDocument(d->doc, visibleRange_DocumentWidget_(d), drawRun_DrawContext_, &ctx); | 1157 | render_GmDocument(d->doc, visibleRange_DocumentWidget_(d), drawRun_DrawContext_, &ctx); |
1130 | clearClip_Paint(&ctx.paint); | 1158 | clearClip_Paint(&ctx.paint); |
diff --git a/src/ui/text.c b/src/ui/text.c index 0c4b8624..9468ea65 100644 --- a/src/ui/text.c +++ b/src/ui/text.c | |||
@@ -620,6 +620,10 @@ void drawString_Text(int fontId, iInt2 pos, int color, const iString *text) { | |||
620 | draw_Text_(fontId, pos, color, range_String(text)); | 620 | draw_Text_(fontId, pos, color, range_String(text)); |
621 | } | 621 | } |
622 | 622 | ||
623 | void drawRange_Text(int fontId, iInt2 pos, int color, iRangecc text) { | ||
624 | draw_Text_(fontId, pos, color, text); | ||
625 | } | ||
626 | |||
623 | void drawCentered_Text(int fontId, iRect rect, iBool alignVisual, int color, const char *format, ...) { | 627 | void drawCentered_Text(int fontId, iRect rect, iBool alignVisual, int color, const char *format, ...) { |
624 | iBlock chars; | 628 | iBlock chars; |
625 | init_Block(&chars, 0); { | 629 | init_Block(&chars, 0); { |
diff --git a/src/ui/text.h b/src/ui/text.h index 2068d51b..713ee1e7 100644 --- a/src/ui/text.h +++ b/src/ui/text.h | |||
@@ -79,6 +79,7 @@ void draw_Text (int fontId, iInt2 pos, int color, const char *text, | |||
79 | void drawAlign_Text (int fontId, iInt2 pos, int color, enum iAlignment align, const char *text, ...); | 79 | void drawAlign_Text (int fontId, iInt2 pos, int color, enum iAlignment align, const char *text, ...); |
80 | void drawCentered_Text (int fontId, iRect rect, iBool alignVisual, int color, const char *text, ...); | 80 | void drawCentered_Text (int fontId, iRect rect, iBool alignVisual, int color, const char *text, ...); |
81 | void drawString_Text (int fontId, iInt2 pos, int color, const iString *text); | 81 | void drawString_Text (int fontId, iInt2 pos, int color, const iString *text); |
82 | void drawRange_Text (int fontId, iInt2 pos, int color, iRangecc text); | ||
82 | 83 | ||
83 | SDL_Texture * glyphCache_Text (void); | 84 | SDL_Texture * glyphCache_Text (void); |
84 | 85 | ||