summaryrefslogtreecommitdiff
path: root/src/ui/text.h
diff options
context:
space:
mode:
authorJaakko Keränen <jaakko.keranen@iki.fi>2021-07-06 07:04:29 +0300
committerJaakko Keränen <jaakko.keranen@iki.fi>2021-07-06 07:04:29 +0300
commite1ff98965a4aec72418165424a0183e596df1ecb (patch)
treee01f245348ba39d2a2eb5fdffe5a8600e5928b96 /src/ui/text.h
parent5915a8509827bbad99731b0e8451f484bff1ac61 (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.h34
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
148void resetFonts_Text (void); 148void resetFonts_Text (void);
149 149
150int lineHeight_Text (int fontId); 150int lineHeight_Text (int fontId);
151iInt2 measure_Text (int fontId, const char *text); 151//iInt2 measure_Text (int fontId, const char *text);
152iInt2 measureRange_Text (int fontId, iRangecc text); 152//iInt2 measureRange_Text (int fontId, iRangecc text);
153iRect visualBounds_Text (int fontId, iRangecc text); 153iRect visualBounds_Text (int fontId, iRangecc text);
154iInt2 advance_Text (int fontId, const char *text); 154//iInt2 advance_Text (int fontId, const char *text);
155iInt2 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 */
156iInt2 advanceRange_Text (int fontId, iRangecc text); 156//iInt2 advanceRange_Text (int fontId, iRangecc text);
157iInt2 advanceWrapRange_Text (int fontId, int maxWidth, iRangecc text); 157//iInt2 advanceWrapRange_Text (int fontId, int maxWidth, iRangecc text);
158
159iDeclareType(TextMetrics)
160
161struct Impl_TextMetrics {
162 iRect bounds; /* logical bounds: multiples of line height, horiz. advance */
163 iInt2 advance; /* cursor offset */
164};
165
166iTextMetrics measureRange_Text (int fontId, iRangecc text);
167iTextMetrics measureWrapRange_Text (int fontId, int maxWidth, iRangecc text);
168iTextMetrics measureN_Text (int fontId, const char *text, size_t n); /* `n` in characters */
169
170iLocalDef iTextMetrics measure_Text(int fontId, const char *text) {
171 return measureRange_Text(fontId, range_CStr(text));
172}
158 173
159iInt2 tryAdvance_Text (int fontId, iRangecc text, int width, const char **endPos); 174iInt2 tryAdvance_Text (int fontId, iRangecc text, int width, const char **endPos);
160iInt2 tryAdvanceNoWrap_Text (int fontId, iRangecc text, int width, const char **endPos); 175iInt2 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
205iRect measure_WrapText (iWrapText *, int fontId); 218iTextMetrics measure_WrapText (iWrapText *, int fontId);
206iInt2 advance_WrapText (iWrapText *, int fontId); 219void draw_WrapText (iWrapText *, int fontId, iInt2 pos, int color);
207void draw_WrapText (iWrapText *, int fontId, iInt2 pos, int color);
208 220
209SDL_Texture * glyphCache_Text (void); 221SDL_Texture * glyphCache_Text (void);
210 222