handle whitespace + get batch vertex count
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/tag Build is passing Details

main
cosmonaut 2022-06-30 13:18:17 -07:00
parent e45aed1daa
commit 51a8fe333d
2 changed files with 43 additions and 1 deletions

View File

@ -174,6 +174,7 @@ WELLSPRINGAPI uint8_t Wellspring_Draw(
WELLSPRINGAPI void Wellspring_GetBufferData(
Wellspring_TextBatch *textBatch,
uint32_t* pVertexCount,
Wellspring_Vertex **pVertexBuffer,
uint32_t *pVertexBufferLengthInBytes,
uint32_t **pIndexBuffer,

View File

@ -362,6 +362,28 @@ static float Wellspring_INTERNAL_GetVerticalAlignOffset(
}
}
static inline uint32_t IsWhitespace(uint32_t codepoint)
{
switch (codepoint)
{
case 0x0020:
case 0x00A0:
case 0x1680:
case 0x202F:
case 0x205F:
case 0x3000:
return 1;
default:
if (codepoint > 0x2000 && codepoint <= 0x200A)
{
return 1;
}
return 0;
}
}
uint8_t Wellspring_TextBounds(
Wellspring_TextBatch* textBatch,
float x,
@ -405,6 +427,15 @@ uint8_t Wellspring_TextBounds(
continue;
}
if (IsWhitespace(codepoint))
{
int32_t ws_adv, ws_bearing;
stbtt_GetCodepointHMetrics(&myPacker->font->fontInfo, codepoint, &ws_adv, &ws_bearing);
x += myPacker->scale * ws_adv;
maxX += myPacker->scale * ws_adv;
continue;
}
rangeData = NULL;
/* Find the packed char data */
@ -537,6 +568,14 @@ uint8_t Wellspring_Draw(
continue;
}
if (IsWhitespace(codepoint))
{
int32_t ws_adv, ws_bearing;
stbtt_GetCodepointHMetrics(&myPacker->font->fontInfo, codepoint, &ws_adv, &ws_bearing);
x += myPacker->scale * ws_adv;
continue;
}
rangeData = NULL;
/* Find the packed char data */
@ -558,7 +597,7 @@ uint8_t Wellspring_Draw(
/* Requested char wasn't packed! */
return 0;
}
glyphIndex = stbtt_FindGlyphIndex(&myPacker->font->fontInfo, codepoint);
if (i > 0)
@ -652,12 +691,14 @@ uint8_t Wellspring_Draw(
void Wellspring_GetBufferData(
Wellspring_TextBatch *textBatch,
uint32_t *pVertexCount,
Wellspring_Vertex **pVertexBuffer,
uint32_t *pVertexBufferLengthInBytes,
uint32_t **pIndexBuffer,
uint32_t *pIndexBufferLengthInBytes
) {
Batch *batch = (Batch*) textBatch;
*pVertexCount = batch->vertexCount;
*pVertexBuffer = batch->vertices;
*pVertexBufferLengthInBytes = batch->vertexCount * sizeof(Wellspring_Vertex);
*pIndexBuffer = batch->indices;