diff options
author | Jaakko Keränen <jaakko.keranen@iki.fi> | 2021-07-06 07:04:29 +0300 |
---|---|---|
committer | Jaakko Keränen <jaakko.keranen@iki.fi> | 2021-07-06 07:04:29 +0300 |
commit | e1ff98965a4aec72418165424a0183e596df1ecb (patch) | |
tree | e01f245348ba39d2a2eb5fdffe5a8600e5928b96 /src/ui/text.h | |
parent | 5915a8509827bbad99731b0e8451f484bff1ac61 (diff) |
Text run measurement API change; bug fixes
The distinction between measure_Text and advance_Text was not very clear. Now there are only measure_Text functions that return both the bounds and the cursor position advancement, and the appropriate metrics are used by the caller.
Diffstat (limited to 'src/ui/text.h')
-rw-r--r-- | src/ui/text.h | 34 |
1 files changed, 23 insertions, 11 deletions
diff --git a/src/ui/text.h b/src/ui/text.h index ac9db405..0209e10a 100644 --- a/src/ui/text.h +++ b/src/ui/text.h | |||
@@ -148,13 +148,28 @@ void setContentFontSize_Text (float fontSizeFactor); /* affects all except `d | |||
148 | void resetFonts_Text (void); | 148 | void resetFonts_Text (void); |
149 | 149 | ||
150 | int lineHeight_Text (int fontId); | 150 | int lineHeight_Text (int fontId); |
151 | iInt2 measure_Text (int fontId, const char *text); | 151 | //iInt2 measure_Text (int fontId, const char *text); |
152 | iInt2 measureRange_Text (int fontId, iRangecc text); | 152 | //iInt2 measureRange_Text (int fontId, iRangecc text); |
153 | iRect visualBounds_Text (int fontId, iRangecc text); | 153 | iRect visualBounds_Text (int fontId, iRangecc text); |
154 | iInt2 advance_Text (int fontId, const char *text); | 154 | //iInt2 advance_Text (int fontId, const char *text); |
155 | iInt2 advanceN_Text (int fontId, const char *text, size_t n); /* `n` in characters */ | 155 | //iInt2 advanceN_Text (int fontId, const char *text, size_t n); /* `n` in characters */ |
156 | iInt2 advanceRange_Text (int fontId, iRangecc text); | 156 | //iInt2 advanceRange_Text (int fontId, iRangecc text); |
157 | iInt2 advanceWrapRange_Text (int fontId, int maxWidth, iRangecc text); | 157 | //iInt2 advanceWrapRange_Text (int fontId, int maxWidth, iRangecc text); |
158 | |||
159 | iDeclareType(TextMetrics) | ||
160 | |||
161 | struct Impl_TextMetrics { | ||
162 | iRect bounds; /* logical bounds: multiples of line height, horiz. advance */ | ||
163 | iInt2 advance; /* cursor offset */ | ||
164 | }; | ||
165 | |||
166 | iTextMetrics measureRange_Text (int fontId, iRangecc text); | ||
167 | iTextMetrics measureWrapRange_Text (int fontId, int maxWidth, iRangecc text); | ||
168 | iTextMetrics measureN_Text (int fontId, const char *text, size_t n); /* `n` in characters */ | ||
169 | |||
170 | iLocalDef iTextMetrics measure_Text(int fontId, const char *text) { | ||
171 | return measureRange_Text(fontId, range_CStr(text)); | ||
172 | } | ||
158 | 173 | ||
159 | iInt2 tryAdvance_Text (int fontId, iRangecc text, int width, const char **endPos); | 174 | iInt2 tryAdvance_Text (int fontId, iRangecc text, int width, const char **endPos); |
160 | iInt2 tryAdvanceNoWrap_Text (int fontId, iRangecc text, int width, const char **endPos); | 175 | iInt2 tryAdvanceNoWrap_Text (int fontId, iRangecc text, int width, const char **endPos); |
@@ -196,15 +211,12 @@ struct Impl_WrapText { | |||
196 | enum iWrapTextMode mode; | 211 | enum iWrapTextMode mode; |
197 | iBool (*wrapFunc)(iWrapText *, iRangecc wrappedText, int advance); | 212 | iBool (*wrapFunc)(iWrapText *, iRangecc wrappedText, int advance); |
198 | void * context; | 213 | void * context; |
199 | /* output */ | ||
200 | iInt2 cursor_out; | ||
201 | /* internal */ | 214 | /* internal */ |
202 | iRangecc wrapRange_; | 215 | iRangecc wrapRange_; |
203 | }; | 216 | }; |
204 | 217 | ||
205 | iRect measure_WrapText (iWrapText *, int fontId); | 218 | iTextMetrics measure_WrapText (iWrapText *, int fontId); |
206 | iInt2 advance_WrapText (iWrapText *, int fontId); | 219 | void draw_WrapText (iWrapText *, int fontId, iInt2 pos, int color); |
207 | void draw_WrapText (iWrapText *, int fontId, iInt2 pos, int color); | ||
208 | 220 | ||
209 | SDL_Texture * glyphCache_Text (void); | 221 | SDL_Texture * glyphCache_Text (void); |
210 | 222 | ||