Set size of message box, based on amount of text.
This commit is contained in:
parent
744d634f80
commit
28a4cda6fd
|
@ -20,6 +20,8 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|||
|
||||
#include "messageBox.h"
|
||||
|
||||
static void calculateMessageBoxHeight(MessageBox *msg);
|
||||
|
||||
static MessageBox head;
|
||||
static MessageBox *tail;
|
||||
|
||||
|
@ -79,6 +81,15 @@ void doMessageBox(void)
|
|||
}
|
||||
}
|
||||
|
||||
static void calculateMessageBoxHeight(MessageBox *msg)
|
||||
{
|
||||
limitTextWidth(575);
|
||||
|
||||
msg->height = getWrappedTextHeight(msg->body, 18);
|
||||
|
||||
limitTextWidth(0);
|
||||
}
|
||||
|
||||
int showingMessageBoxes(void)
|
||||
{
|
||||
return head.next != NULL;
|
||||
|
@ -91,9 +102,14 @@ void drawMessageBox(void)
|
|||
|
||||
if (msg && msg->time > 0)
|
||||
{
|
||||
if (!msg->height)
|
||||
{
|
||||
calculateMessageBoxHeight(msg);
|
||||
}
|
||||
|
||||
r.y = 50;
|
||||
r.w = 650;
|
||||
r.h = 110;
|
||||
r.h = msg->height + 40;
|
||||
r.x = (SCREEN_WIDTH - r.w) / 2;
|
||||
|
||||
SDL_SetRenderDrawBlendMode(app.renderer, SDL_BLENDMODE_BLEND);
|
||||
|
@ -105,7 +121,7 @@ void drawMessageBox(void)
|
|||
|
||||
drawText(r.x + 10, r.y + 5, 18, TA_LEFT, colors.cyan, msg->title);
|
||||
|
||||
limitTextWidth(550);
|
||||
limitTextWidth(575);
|
||||
|
||||
drawText(r.x + 10, r.y + 30, 18, TA_LEFT, colors.white, msg->body);
|
||||
|
||||
|
|
|
@ -21,6 +21,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|||
#include "../common.h"
|
||||
|
||||
extern void drawText(int x, int y, int size, int align, SDL_Color c, const char *format, ...);
|
||||
extern int getWrappedTextHeight(char *text, int size);
|
||||
extern void limitTextWidth(int width);
|
||||
extern void playSound(int sound);
|
||||
|
||||
|
|
|
@ -142,6 +142,38 @@ static void drawTextSplit(int x, int y, int size, int align, SDL_Color c, char *
|
|||
drawTextNormal(x, y, size, align, c, drawTextBuffer);
|
||||
}
|
||||
|
||||
int getWrappedTextHeight(char *text, int size)
|
||||
{
|
||||
char textBuffer[MAX_DESCRIPTION_LENGTH];
|
||||
char *token;
|
||||
int w, h, currentWidth;
|
||||
int y;
|
||||
|
||||
STRNCPY(textBuffer, text, MAX_DESCRIPTION_LENGTH);
|
||||
|
||||
token = strtok(textBuffer, " ");
|
||||
|
||||
y = 0;
|
||||
currentWidth = 0;
|
||||
|
||||
while (token)
|
||||
{
|
||||
textSize(token, size, &w, &h);
|
||||
|
||||
if (currentWidth + w > maxWidth)
|
||||
{
|
||||
currentWidth = 0;
|
||||
y += h;
|
||||
}
|
||||
|
||||
currentWidth += w;
|
||||
|
||||
token = strtok(NULL, " ");
|
||||
}
|
||||
|
||||
return y + h;
|
||||
}
|
||||
|
||||
static void textSize(char *text, int size, int *w, int *h)
|
||||
{
|
||||
if (!font[size])
|
||||
|
|
|
@ -296,6 +296,7 @@ struct MessageBox {
|
|||
char title[MAX_NAME_LENGTH];
|
||||
char body[MAX_DESCRIPTION_LENGTH];
|
||||
int time;
|
||||
int height;
|
||||
MessageBox *next;
|
||||
};
|
||||
|
||||
|
|
Loading…
Reference in New Issue