X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Ftools.c;h=85cee1ddac6fc2a02421c485d1d982ffe87206de;hb=d6d1c9d93fa318a7e49304f008dd6a965a5dc48c;hp=ff28a2c1785e1c8cc45034335d054891248374b9;hpb=2dea3ce5bd001ba9119808d9b7b271e868f844bb;p=rocksndiamonds.git diff --git a/src/tools.c b/src/tools.c index ff28a2c1..85cee1dd 100644 --- a/src/tools.c +++ b/src/tools.c @@ -194,14 +194,20 @@ void RedrawPlayfield(boolean force_redraw, int x, int y, int width, int height) BlitBitmap(drawto, window, x, y, width, height, x, y); } +void DrawMaskedBorder_Rect(int x, int y, int width, int height) +{ + Bitmap *bitmap = graphic_info[IMG_GLOBAL_BORDER].bitmap; + + SetClipOrigin(bitmap, bitmap->stored_clip_gc, 0, 0); + BlitBitmapMasked(bitmap, backbuffer, x, y, width, height, x, y); +} + void DrawMaskedBorder_FIELD() { if (game_status >= GAME_MODE_TITLE && game_status <= GAME_MODE_PLAYING && border.draw_masked[game_status]) - BlitBitmapMasked(graphic_info[IMG_GLOBAL_BORDER].bitmap, backbuffer, - REAL_SX, REAL_SY, FULL_SXSIZE, FULL_SYSIZE, - REAL_SX, REAL_SY); + DrawMaskedBorder_Rect(REAL_SX, REAL_SY, FULL_SXSIZE, FULL_SYSIZE); } void DrawMaskedBorder_DOOR_1() @@ -209,16 +215,14 @@ void DrawMaskedBorder_DOOR_1() if (border.draw_masked[GFX_SPECIAL_ARG_DOOR] && (game_status != GAME_MODE_EDITOR || border.draw_masked[GFX_SPECIAL_ARG_EDITOR])) - BlitBitmapMasked(graphic_info[IMG_GLOBAL_BORDER].bitmap, backbuffer, - DX, DY, DXSIZE, DYSIZE, DX, DY); + DrawMaskedBorder_Rect(DX, DY, DXSIZE, DYSIZE); } void DrawMaskedBorder_DOOR_2() { if (border.draw_masked[GFX_SPECIAL_ARG_DOOR] && game_status != GAME_MODE_EDITOR) - BlitBitmapMasked(graphic_info[IMG_GLOBAL_BORDER].bitmap, backbuffer, - VX, VY, VXSIZE, VYSIZE, VX, VY); + DrawMaskedBorder_Rect(VX, VY, VXSIZE, VYSIZE); } void DrawMaskedBorder_DOOR_3() @@ -1728,8 +1732,14 @@ static void DrawPreviewLevelLabelExt(int mode) if (strlen(label_text) > 0) { +#if 1 + int text_width = getTextWidth(label_text, font_nr); + int lxpos = SX + menu.main.text.level_info_2.x - text_width / 2; + int lypos = SY + menu.main.text.level_info_2.y; +#else int lxpos = SX + (SXSIZE - getTextWidth(label_text, font_nr)) / 2; int lypos = MICROLABEL2_YPOS; +#endif DrawText(lxpos, lypos, label_text, font_nr); } @@ -1747,8 +1757,14 @@ static void DrawPreviewLevelLabelExt(int mode) if (strlen(label_text) > 0) { +#if 1 + int text_width = getTextWidth(label_text, font_nr); + int lxpos = SX + menu.main.text.level_info_2.x - text_width / 2; + int lypos = SY + menu.main.text.level_info_2.y; +#else int lxpos = SX + (SXSIZE - getTextWidth(label_text, font_nr)) / 2; int lypos = MICROLABEL2_YPOS; +#endif DrawText(lxpos, lypos, label_text, font_nr); } @@ -1773,7 +1789,8 @@ void DrawPreviewLevel(boolean restart) if (restart) { - from_x = from_y = 0; + from_x = preview.xoffset; + from_y = preview.yoffset; scroll_direction = MV_RIGHT; label_state = 1; label_counter = 0; @@ -1790,13 +1807,20 @@ void DrawPreviewLevel(boolean restart) char label_text[MAX_OUTPUT_LINESIZE + 1]; int font_nr = FONT_TEXT_1; int max_len_label_text = SXSIZE / getFontWidth(font_nr); + int text_width; int lxpos, lypos; strncpy(label_text, leveldir_current->name, max_len_label_text); label_text[max_len_label_text] = '\0'; +#if 1 + text_width = getTextWidth(label_text, font_nr); + lxpos = SX + menu.main.text.level_info_1.x - text_width / 2; + lypos = SY + menu.main.text.level_info_1.y; +#else lxpos = SX + (SXSIZE - getTextWidth(label_text, font_nr)) / 2; lypos = SY + MICROLABEL1_YPOS; +#endif DrawText(lxpos, lypos, label_text, font_nr); }