Skip to content

Commit

Permalink
Review DrawTextRecEx() formatting
Browse files Browse the repository at this point in the history
  • Loading branch information
raysan5 committed Feb 4, 2019
1 parent 01ace74 commit 5755c5e
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 19 deletions.
2 changes: 1 addition & 1 deletion src/raylib.h
Original file line number Diff line number Diff line change
Expand Up @@ -1135,7 +1135,7 @@ RLAPI void DrawText(const char *text, int posX, int posY, int fontSize, Color co
RLAPI void DrawTextEx(Font font, const char *text, Vector2 position, float fontSize, float spacing, Color tint); // Draw text using font and additional parameters
RLAPI void DrawTextRec(Font font, const char *text, Rectangle rec, float fontSize, float spacing, bool wordWrap, Color tint); // Draw text using font inside rectangle limits
RLAPI void DrawTextRecEx(Font font, const char *text, Rectangle rec, float fontSize, float spacing, bool wordWrap, Color tint,
int selectStart, int selectLength, Color selectText, Color selectBG); // Draw text using font inside rectangle limits with support for text selection
int selectStart, int selectLength, Color selectText, Color selectBack); // Draw text using font inside rectangle limits with support for text selection

// Text misc. functions
RLAPI int MeasureText(const char *text, int fontSize); // Measure string width for default font
Expand Down
39 changes: 21 additions & 18 deletions src/text.c
Original file line number Diff line number Diff line change
Expand Up @@ -787,7 +787,7 @@ void DrawTextRec(Font font, const char *text, Rectangle rec, float fontSize, flo

// Draw text using font inside rectangle limits with support for text selection
void DrawTextRecEx(Font font, const char *text, Rectangle rec, float fontSize, float spacing, bool wordWrap, Color tint,
int selectStart, int selectLength, Color selectText, Color selectBG)
int selectStart, int selectLength, Color selectText, Color selectBack)
{
int length = strlen(text);
int textOffsetX = 0; // Offset between characters
Expand All @@ -800,7 +800,7 @@ void DrawTextRecEx(Font font, const char *text, Rectangle rec, float fontSize, f
scaleFactor = fontSize/font.baseSize;

enum { MEASURE_STATE = 0, DRAW_STATE = 1 };
int state = wordWrap?MEASURE_STATE:DRAW_STATE;
int state = wordWrap? MEASURE_STATE : DRAW_STATE;
int startLine = -1; // Index where to begin drawing (where a line begins)
int endLine = -1; // Index where to stop drawing (where a line ends)

Expand Down Expand Up @@ -828,8 +828,8 @@ void DrawTextRecEx(Font font, const char *text, Rectangle rec, float fontSize, f
else index = GetGlyphIndex(font, (unsigned char)text[i]);

glyphWidth = (font.chars[index].advanceX == 0)?
(int)(font.chars[index].rec.width*scaleFactor + spacing):
(int)(font.chars[index].advanceX*scaleFactor + spacing);
(int)(font.chars[index].rec.width*scaleFactor + spacing):
(int)(font.chars[index].advanceX*scaleFactor + spacing);
}

// NOTE: When wordWrap is ON we first measure how much of the text we can draw
Expand All @@ -842,26 +842,27 @@ void DrawTextRecEx(Font font, const char *text, Rectangle rec, float fontSize, f
// the container.
if (state == MEASURE_STATE)
{
if((letter == ' ') || (letter == '\t') || (letter == '\n')) endLine = i;
if ((letter == ' ') || (letter == '\t') || (letter == '\n')) endLine = i;

if(textOffsetX + glyphWidth + 1 >= rec.width)
if ((textOffsetX + glyphWidth + 1) >= rec.width)
{
endLine = (endLine < 1) ? i : endLine;
if(i == endLine) endLine -= 1;
if(startLine + 1 == endLine ) endLine = i - 1;
if (i == endLine) endLine -= 1;
if ((startLine + 1) == endLine) endLine = i - 1;
state = !state;
}
else if(i + 1 == length)
else if ((i + 1) == length)
{
endLine = i;
state = !state;
}
else if(letter == '\n')
else if (letter == '\n')
{
state = !state;
}

if(state == DRAW_STATE) {
if (state == DRAW_STATE)
{
textOffsetX = 0;
i = startLine;
glyphWidth = 0;
Expand All @@ -872,14 +873,16 @@ void DrawTextRecEx(Font font, const char *text, Rectangle rec, float fontSize, f
{
if (letter == '\n')
{
if(!wordWrap){
if (!wordWrap)
{
textOffsetY += (int)((font.baseSize + font.baseSize/2)*scaleFactor);
textOffsetX = 0;
}
}
else
{
if(!wordWrap && textOffsetX + glyphWidth + 1 >= rec.width) {
if (!wordWrap && ((textOffsetX + glyphWidth + 1) >= rec.width))
{
textOffsetY += (int)((font.baseSize + font.baseSize/2)*scaleFactor);
textOffsetX = 0;
}
Expand All @@ -888,10 +891,10 @@ void DrawTextRecEx(Font font, const char *text, Rectangle rec, float fontSize, f

//draw selected
bool isGlyphSelected = false;
if(selectStart >= 0 && i >= selectStart && i < selectStart + selectLength) {
Rectangle strec = {rec.x + textOffsetX-1, rec.y + textOffsetY,
glyphWidth,(font.baseSize + font.baseSize/4)*scaleFactor};
DrawRectangleRec(strec, selectBG);
if ((selectStart >= 0) && (i >= selectStart) && (i < (selectStart + selectLength)))
{
Rectangle strec = {rec.x + textOffsetX-1, rec.y + textOffsetY, glyphWidth, (font.baseSize + font.baseSize/4)*scaleFactor };
DrawRectangleRec(strec, selectBack);
isGlyphSelected = true;
}

Expand All @@ -907,7 +910,7 @@ void DrawTextRecEx(Font font, const char *text, Rectangle rec, float fontSize, f
}
}

if (wordWrap && i == endLine)
if (wordWrap && (i == endLine))
{
textOffsetY += (int)((font.baseSize + font.baseSize/2)*scaleFactor);
textOffsetX = 0;
Expand Down

0 comments on commit 5755c5e

Please sign in to comment.