X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Finit.c;h=a10e8e6bf80ad5b0f277531c85fddf3ae54e2bad;hb=994cb017022c658f115e3c9fc927d8a0cc83832c;hp=b1f5af0eedf6461643b345cf2ce06b0833667521;hpb=8e0c58b2a77c271b485e403cc6edd6ba6e0125cc;p=rocksndiamonds.git diff --git a/src/init.c b/src/init.c index b1f5af0e..a10e8e6b 100644 --- a/src/init.c +++ b/src/init.c @@ -215,10 +215,15 @@ static void ReinitializeGraphics() InitGraphicInfo(); /* initialize graphic info from config file */ InitFontInfo(bitmap_font_initial, - new_graphic_info[IMG_MENU_FONT_BIG].bitmap, - new_graphic_info[IMG_MENU_FONT_MEDIUM].bitmap, - new_graphic_info[IMG_MENU_FONT_SMALL].bitmap, - new_graphic_info[IMG_MENU_FONT_EM].bitmap); + new_graphic_info[IMG_FONT_BIG].bitmap, + new_graphic_info[IMG_FONT_MEDIUM].bitmap, + new_graphic_info[IMG_FONT_SMALL].bitmap, + new_graphic_info[IMG_FONT_EM].bitmap); + + SetMainBackgroundBitmap(new_graphic_info[IMG_BACKGROUND_DEFAULT].bitmap); + SetDoorBackgroundBitmap(new_graphic_info[IMG_BACKGROUND_DOOR].bitmap ? + new_graphic_info[IMG_BACKGROUND_DOOR].bitmap : + new_graphic_info[IMG_BACKGROUND_DEFAULT].bitmap); InitGadgets(); InitToons(); @@ -481,7 +486,7 @@ void InitGfxBackground() fieldbuffer = bitmap_db_field; SetDrawtoField(DRAW_BACKBUFFER); - BlitBitmap(new_graphic_info[IMG_MENU_BACK].bitmap, backbuffer, + BlitBitmap(new_graphic_info[IMG_GLOBAL_BORDER].bitmap, backbuffer, 0, 0, WIN_XSIZE, WIN_YSIZE, 0, 0); ClearRectangle(backbuffer, REAL_SX, REAL_SY, FULL_SXSIZE, FULL_SYSIZE); ClearRectangle(bitmap_db_door, 0, 0, 3 * DXSIZE, DYSIZE + VYSIZE); @@ -701,9 +706,9 @@ void InitElementInfo() element_info[i].graphic[GFX_ACTION_DEFAULT] = IMG_CHAR_START + (i - EL_CHAR_START); - for (i=EL_GENERIC_START; i<=EL_GENERIC_END; i++) + for (i=EL_CUSTOM_START; i<=EL_CUSTOM_END; i++) element_info[i].graphic[GFX_ACTION_DEFAULT] = - IMG_GENERIC_START + (i - EL_GENERIC_START); + IMG_CUSTOM_START + (i - EL_CUSTOM_START); i = 0; while (element_to_graphic[i].element > -1) @@ -772,11 +777,18 @@ void InitElementInfo() static void InitGraphicInfo() { + static boolean clipmasks_initialized = FALSE; static int gfx_action[NUM_IMAGE_FILES]; Bitmap *src_bitmap; int src_x, src_y; int first_frame, last_frame; int i; +#if defined(TARGET_X11_NATIVE_PERFORMANCE_WORKAROUND) + Pixmap src_pixmap; + XGCValues clip_gc_values; + unsigned long clip_gc_valuemask; + GC copy_clipmask_gc = None; +#endif image_files = getCurrentImageList(); @@ -799,6 +811,22 @@ static void InitGraphicInfo() i++; } +#if defined(TARGET_X11_NATIVE_PERFORMANCE_WORKAROUND) + if (clipmasks_initialized) + { + for (i=0; iclip_mask, + clip_gc_valuemask, &clip_gc_values); + } + + new_graphic_info[i].clip_mask = + XCreatePixmap(display, window->drawable, TILEX, TILEY, 1); + + src_pixmap = src_bitmap->clip_mask; + XCopyArea(display, src_pixmap, new_graphic_info[i].clip_mask, + copy_clipmask_gc, src_x, src_y, TILEX, TILEY, 0, 0); + + clip_gc_values.graphics_exposures = False; + clip_gc_values.clip_mask = new_graphic_info[i].clip_mask; + clip_gc_valuemask = GCGraphicsExposures | GCClipMask; + new_graphic_info[i].clip_gc = + XCreateGC(display, window->drawable, clip_gc_valuemask, &clip_gc_values); +#endif } + +#if defined(TARGET_X11_NATIVE_PERFORMANCE_WORKAROUND) + if (copy_clipmask_gc) + XFreeGC(display, copy_clipmask_gc); +#endif + + clipmasks_initialized = TRUE; } static void InitSoundInfo()