diff options
author | Jaakko Keränen <jaakko.keranen@iki.fi> | 2021-02-24 12:41:10 +0200 |
---|---|---|
committer | Jaakko Keränen <jaakko.keranen@iki.fi> | 2021-02-24 12:41:10 +0200 |
commit | 740c95a2b0eda0297865b739d780474cea13e75c (patch) | |
tree | 3e7628f1efdcdba64a8fe5409d1cd147d7b4258a /src/ui/inputwidget.c | |
parent | 8f104a9916070fceb53aa5e3f4ad8dfecc40055d (diff) |
UI font consistency
Try to minimize the number of fonts in the UI. Input fields now use the same UI font as everything else. The monospace font was originally used because the widget required one, but that is no longer the case.
Diffstat (limited to 'src/ui/inputwidget.c')
-rw-r--r-- | src/ui/inputwidget.c | 38 |
1 files changed, 27 insertions, 11 deletions
diff --git a/src/ui/inputwidget.c b/src/ui/inputwidget.c index 58a47610..76053f8b 100644 --- a/src/ui/inputwidget.c +++ b/src/ui/inputwidget.c | |||
@@ -201,8 +201,12 @@ void setHint_InputWidget(iInputWidget *d, const char *hintText) { | |||
201 | } | 201 | } |
202 | 202 | ||
203 | void setContentPadding_InputWidget(iInputWidget *d, int left, int right) { | 203 | void setContentPadding_InputWidget(iInputWidget *d, int left, int right) { |
204 | d->leftPadding = left; | 204 | if (left >= 0) { |
205 | d->rightPadding = right; | 205 | d->leftPadding = left; |
206 | } | ||
207 | if (right >= 0) { | ||
208 | d->rightPadding = right; | ||
209 | } | ||
206 | refresh_Widget(d); | 210 | refresh_Widget(d); |
207 | } | 211 | } |
208 | 212 | ||
@@ -863,25 +867,37 @@ static void draw_InputWidget_(const iInputWidget *d) { | |||
863 | /* Cursor blinking. */ | 867 | /* Cursor blinking. */ |
864 | if (isFocused && d->cursorVis) { | 868 | if (isFocused && d->cursorVis) { |
865 | iString cur; | 869 | iString cur; |
866 | if (d->cursor < size_Array(&d->text)) { | 870 | iInt2 curSize; |
867 | if (~d->inFlags & isSensitive_InputWidgetFlag) { | 871 | if (d->mode == overwrite_InputMode) { |
868 | initUnicodeN_String(&cur, constAt_Array(&d->text, d->cursor), 1); | 872 | /* Block cursor that overlaps a character. */ |
873 | if (d->cursor < size_Array(&d->text)) { | ||
874 | if (~d->inFlags & isSensitive_InputWidgetFlag) { | ||
875 | initUnicodeN_String(&cur, constAt_Array(&d->text, d->cursor), 1); | ||
876 | } | ||
877 | else { | ||
878 | initUnicodeN_String(&cur, &sensitiveChar_, 1); | ||
879 | } | ||
869 | } | 880 | } |
870 | else { | 881 | else { |
871 | initUnicodeN_String(&cur, &sensitiveChar_, 1); | 882 | initCStr_String(&cur, " "); |
872 | } | 883 | } |
884 | curSize = addX_I2(advance_Text(d->font, cstr_String(&cur)), iMin(2, gap_UI / 4)); | ||
873 | } | 885 | } |
874 | else { | 886 | else { |
875 | initCStr_String(&cur, " "); | 887 | /* Bar cursor. */ |
888 | curSize = init_I2(gap_UI / 2, lineHeight_Text(d->font)); | ||
876 | } | 889 | } |
877 | /* The `gap_UI` offsets below are a hack. They are used because for some reason the | 890 | /* The `gap_UI` offsets below are a hack. They are used because for some reason the |
878 | cursor rect and the glyph inside don't quite position like during `run_Text_()`. */ | 891 | cursor rect and the glyph inside don't quite position like during `run_Text_()`. */ |
879 | const iInt2 prefixSize = advanceN_Text(d->font, cstr_String(text), d->cursor); | 892 | const iInt2 prefixSize = advanceN_Text(d->font, cstr_String(text), d->cursor); |
880 | const iInt2 curPos = addX_I2(textOrigin, prefixSize.x); | 893 | const iInt2 curPos = addX_I2(textOrigin, prefixSize.x + |
881 | const iRect curRect = { curPos, addX_I2(advance_Text(d->font, cstr_String(&cur)), iMin(2, gap_UI / 4)) }; | 894 | (d->mode == insert_InputMode ? -curSize.x / 2 : 0)); |
895 | const iRect curRect = { curPos, curSize }; | ||
882 | fillRect_Paint(&p, curRect, uiInputCursor_ColorId); | 896 | fillRect_Paint(&p, curRect, uiInputCursor_ColorId); |
883 | draw_Text(d->font, addX_I2(curPos, iMin(1, gap_UI / 8)), uiInputCursorText_ColorId, "%s", cstr_String(&cur)); | 897 | if (d->mode == overwrite_InputMode) { |
884 | deinit_String(&cur); | 898 | draw_Text(d->font, addX_I2(curPos, iMin(1, gap_UI / 8)), uiInputCursorText_ColorId, "%s", cstr_String(&cur)); |
899 | deinit_String(&cur); | ||
900 | } | ||
885 | } | 901 | } |
886 | delete_String(text); | 902 | delete_String(text); |
887 | drawChildren_Widget(w); | 903 | drawChildren_Widget(w); |