X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Flibgame%2Ftext.c;h=b771c1a3159056524f0f71a3fd701affe5a4ba70;hb=14b5ed161164a42c7513700fe101c4bd2e3b63e3;hp=8f8bf8f6d9f4fbfbcaa2b4ad125298832bfc969a;hpb=6e44f03074b9b879f97c4ce873962649f9699d2e;p=rocksndiamonds.git diff --git a/src/libgame/text.c b/src/libgame/text.c index 8f8bf8f6..b771c1a3 100644 --- a/src/libgame/text.c +++ b/src/libgame/text.c @@ -195,10 +195,14 @@ void getFontCharSource(int font_nr, char c, Bitmap **bitmap, int *x, int *y) int maxWordLengthInString(char *text) { char *text_ptr; - int max_word_len = 0; + int word_len = 0, max_word_len = 0; for (text_ptr = text; *text_ptr; text_ptr++) - max_word_len = (*text_ptr != ' ' ? max_word_len + 1 : 0); + { + word_len = (*text_ptr != ' ' ? word_len + 1 : 0); + + max_word_len = MAX(word_len, max_word_len); + } return max_word_len; } @@ -210,9 +214,45 @@ int maxWordLengthInString(char *text) void DrawInitTextExt(char *text, int ypos, int font_nr, boolean force) { +#if 1 +#if 0 + static unsigned int progress_delay = 0; + unsigned int progress_delay_value = 100; /* (in milliseconds) */ +#endif + + // LimitScreenUpdates(TRUE); // (ignore "force" for now) + // LimitScreenUpdates(!force); + LimitScreenUpdates(TRUE); + + UPDATE_BUSY_STATE(); + +#if 0 + if (!force && !DelayReached(&progress_delay, progress_delay_value)) + return; +#endif + + if (window != NULL && + gfx.draw_init_text && + gfx.num_fonts > 0 && + gfx.font_bitmap_info[font_nr].bitmap != NULL) + { + int x = (video.width - getTextWidth(text, font_nr)) / 2; + int y = ypos; + int width = video.width; + int height = getFontHeight(font_nr); + + ClearRectangle(drawto, 0, y, width, height); + DrawTextExt(drawto, x, y, text, font_nr, BLIT_OPAQUE); + + BlitBitmap(drawto, window, 0, 0, video.width, video.height, 0, 0); + } +#else static unsigned int progress_delay = 0; unsigned int progress_delay_value = 100; /* (in milliseconds) */ + // LimitScreenUpdates(TRUE); // (ignore "force" for now) + LimitScreenUpdates(!force); + UPDATE_BUSY_STATE(); if (!force && !DelayReached(&progress_delay, progress_delay_value)) @@ -234,9 +274,16 @@ void DrawInitTextExt(char *text, int ypos, int font_nr, boolean force) /* this makes things significantly faster than directly drawing to window */ BlitBitmap(drawto, window, 0, y, width, height, 0, y); } +#endif } void DrawInitText(char *text, int ypos, int font_nr) +{ + // DrawInitTextExt(text, ypos, font_nr, TRUE); + DrawInitTextExt(text, ypos, font_nr, FALSE); +} + +void DrawInitTextAlways(char *text, int ypos, int font_nr) { DrawInitTextExt(text, ypos, font_nr, TRUE); } @@ -314,10 +361,23 @@ void DrawText(int x, int y, char *text, int font_nr) DrawTextExt(drawto, x, y, text, font_nr, mask_mode); +#if 1 + if (IN_GFX_FIELD_FULL(x, y)) + redraw_mask |= REDRAW_FIELD; + else if (IN_GFX_DOOR_1(x, y)) + redraw_mask |= REDRAW_DOOR_1; + else if (IN_GFX_DOOR_2(x, y)) + redraw_mask |= REDRAW_DOOR_2; + else if (IN_GFX_DOOR_3(x, y)) + redraw_mask |= REDRAW_DOOR_3; + else + redraw_mask |= REDRAW_ALL; +#else if (x < gfx.dx) redraw_mask |= REDRAW_FIELD; else if (y < gfx.vy || gfx.vy == 0) redraw_mask |= REDRAW_DOOR_1; +#endif } void DrawTextExt(DrawBuffer *dst_bitmap, int dst_x, int dst_y, char *text,