Skip to content
This repository has been archived by the owner on Feb 11, 2021. It is now read-only.

Commit

Permalink
Correctly draw cursor based on position.
Browse files Browse the repository at this point in the history
Had to add UTF-8 functions utf8_length, utf8_next, utf8_advance.
  • Loading branch information
dewyatt committed Jul 25, 2010
1 parent 57dbfc8 commit b042dd7
Showing 1 changed file with 56 additions and 2 deletions.
58 changes: 56 additions & 2 deletions test/testime.c
Expand Up @@ -26,6 +26,48 @@ SDL_Rect textRect, markedRect;
Uint32 lineColor, backColor;
SDL_Color textColor = { 0, 0, 0 };
char text[MAX_TEXT_LENGTH], markedText[SDL_TEXTEDITINGEVENT_TEXT_SIZE];
int cursor = 0;

size_t utf8_length(unsigned char c)
{
c = (unsigned char)(0xff & c);
if (c < 0x80)
return 1;
else if ((c >> 5) ==0x6)
return 2;
else if ((c >> 4) == 0xe)
return 3;
else if ((c >> 3) == 0x1e)
return 4;
else
return 0;
}

char *utf8_next(char *p)
{
size_t len = utf8_length(*p);
size_t i = 0;
if (!len)
return 0;

for (; i < len; ++i)
{
++p;
if (!*p)
return 0;
}
return p;
}

char *utf8_advance(char *p, size_t distance)
{
size_t i = 0;
for (; i < distance && p; ++i)
{
p = utf8_next(p);
}
return p;
}

void usage()
{
Expand Down Expand Up @@ -181,6 +223,19 @@ void Redraw()
if (markedText[0])
{
#ifdef HAVE_SDL_TTF
if (cursor)
{
char *p = utf8_advance(markedText, cursor);
char c = 0;
if (!p)
p = &markedText[strlen(markedText)];

c = *p;
*p = 0;
TTF_SizeUTF8(font, markedText, &w, 0);
cursorRect.x += w;
*p = c;
}
RenderText(screen, font, markedText, markedRect.x, markedRect.y, textColor);
TTF_SizeUTF8(font, markedText, &w, &h);
#endif
Expand All @@ -190,8 +245,6 @@ void Redraw()
underlineRect.h = 2;
underlineRect.w = w;

cursorRect.x += w + 1;

SDL_FillRect(screen, &underlineRect, lineColor);
}

Expand Down Expand Up @@ -308,6 +361,7 @@ int main(int argc, char *argv[])
event.edit.text, event.edit.start, event.edit.length);

strcpy(markedText, event.edit.text);
cursor = event.edit.start;
Redraw();
break;

Expand Down

0 comments on commit b042dd7

Please sign in to comment.