瀏覽代碼

Review DrawTextRecEx() formatting

pull/747/head
Ray 6 年之前
父節點
當前提交
5755c5e310
共有 2 個檔案被更改,包括 22 行新增19 行删除
  1. +1
    -1
      src/raylib.h
  2. +21
    -18
      src/text.c

+ 1
- 1
src/raylib.h 查看文件

@ -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 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 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, 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 // Text misc. functions
RLAPI int MeasureText(const char *text, int fontSize); // Measure string width for default font RLAPI int MeasureText(const char *text, int fontSize); // Measure string width for default font

+ 21
- 18
src/text.c 查看文件

@ -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 // 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, 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 length = strlen(text);
int textOffsetX = 0; // Offset between characters int textOffsetX = 0; // Offset between characters
@ -800,7 +800,7 @@ void DrawTextRecEx(Font font, const char *text, Rectangle rec, float fontSize, f
scaleFactor = fontSize/font.baseSize; scaleFactor = fontSize/font.baseSize;
enum { MEASURE_STATE = 0, DRAW_STATE = 1 }; 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 startLine = -1; // Index where to begin drawing (where a line begins)
int endLine = -1; // Index where to stop drawing (where a line ends) int endLine = -1; // Index where to stop drawing (where a line ends)
@ -828,8 +828,8 @@ void DrawTextRecEx(Font font, const char *text, Rectangle rec, float fontSize, f
else index = GetGlyphIndex(font, (unsigned char)text[i]); else index = GetGlyphIndex(font, (unsigned char)text[i]);
glyphWidth = (font.chars[index].advanceX == 0)? 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 // NOTE: When wordWrap is ON we first measure how much of the text we can draw
@ -842,26 +842,27 @@ void DrawTextRecEx(Font font, const char *text, Rectangle rec, float fontSize, f
// the container. // the container.
if (state == MEASURE_STATE) 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; 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; state = !state;
} }
else if(i + 1 == length)
else if ((i + 1) == length)
{ {
endLine = i; endLine = i;
state = !state; state = !state;
} }
else if(letter == '\n')
else if (letter == '\n')
{ {
state = !state; state = !state;
} }
if(state == DRAW_STATE) {
if (state == DRAW_STATE)
{
textOffsetX = 0; textOffsetX = 0;
i = startLine; i = startLine;
glyphWidth = 0; glyphWidth = 0;
@ -872,14 +873,16 @@ void DrawTextRecEx(Font font, const char *text, Rectangle rec, float fontSize, f
{ {
if (letter == '\n') if (letter == '\n')
{ {
if(!wordWrap){
if (!wordWrap)
{
textOffsetY += (int)((font.baseSize + font.baseSize/2)*scaleFactor); textOffsetY += (int)((font.baseSize + font.baseSize/2)*scaleFactor);
textOffsetX = 0; textOffsetX = 0;
} }
} }
else else
{ {
if(!wordWrap && textOffsetX + glyphWidth + 1 >= rec.width) {
if (!wordWrap && ((textOffsetX + glyphWidth + 1) >= rec.width))
{
textOffsetY += (int)((font.baseSize + font.baseSize/2)*scaleFactor); textOffsetY += (int)((font.baseSize + font.baseSize/2)*scaleFactor);
textOffsetX = 0; textOffsetX = 0;
} }
@ -888,10 +891,10 @@ void DrawTextRecEx(Font font, const char *text, Rectangle rec, float fontSize, f
//draw selected //draw selected
bool isGlyphSelected = false; 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) && p">(i < p">(selectStart + selectLength)))
{
class="n">Rectangle class="n">strec class="o">= class="p">{rec.x + textOffsetX-1, rec.y + textOffsetY, glyphWidth, (font.baseSize + font.baseSize/4)*scaleFactor };
DrawRectangleRec(strec, selectBack);
isGlyphSelected = true; isGlyphSelected = true;
} }
@ -907,7 +910,7 @@ void DrawTextRecEx(Font font, const char *text, Rectangle rec, float fontSize, f
} }
} }
if (wordWrap && i == endLine)
if (wordWrap && p">(i == endLine))
{ {
textOffsetY += (int)((font.baseSize + font.baseSize/2)*scaleFactor); textOffsetY += (int)((font.baseSize + font.baseSize/2)*scaleFactor);
textOffsetX = 0; textOffsetX = 0;

Loading…
取消
儲存