You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
114 lines
2.9 KiB
114 lines
2.9 KiB
#include "../../types.h" |
|
|
|
void *pPcxSPopupImage; |
|
void *pPcxProgBGImage; |
|
void *pPcxProgFillImage; |
|
void *pPcxSmlButImage; |
|
int dwSmlButWidth, dwSmlButHeight; |
|
SDL_Surface *msgSurface; |
|
SDL_Surface *cancleSurface; |
|
int w; |
|
|
|
void progress_Loade(char *msg) |
|
{ |
|
DWORD dwData[2]; |
|
|
|
LoadTitelArt("ui_art\\black.pcx"); |
|
LoadArtImage("ui_art\\spopup.pcx", &pPcxSPopupImage, 1); |
|
LoadArtImage("ui_art\\prog_bg.pcx", &pPcxProgBGImage, 1); |
|
LoadArtImage("ui_art\\prog_fil.pcx", &pPcxProgFillImage, 1); |
|
LoadArtImage("ui_art\\but_sml.pcx", &pPcxSmlButImage, 15, dwData); |
|
dwSmlButWidth = dwData[0]; |
|
dwSmlButHeight = dwData[1]; |
|
|
|
if (font != NULL) { |
|
SDL_Color color = palette->colors[224]; |
|
|
|
msgSurface = TTF_RenderUTF8_Solid(font, msg, color); |
|
cancleSurface = TTF_RenderUTF8_Solid(font, "Cancel", color); |
|
TTF_SizeUTF8(font, "Cancel", &w, NULL); |
|
} |
|
} |
|
|
|
void progress_Free() |
|
{ |
|
mem_free_dbg(pPcxTitleImage); |
|
pPcxTitleImage = NULL; |
|
mem_free_dbg(pPcxSPopupImage); |
|
pPcxSPopupImage = NULL; |
|
mem_free_dbg(pPcxProgBGImage); |
|
pPcxProgBGImage = NULL; |
|
mem_free_dbg(pPcxProgFillImage); |
|
pPcxProgFillImage = NULL; |
|
mem_free_dbg(pPcxSmlButImage); |
|
pPcxSmlButImage = NULL; |
|
SDL_FreeSurface(msgSurface); |
|
msgSurface = NULL; |
|
SDL_FreeSurface(cancleSurface); |
|
cancleSurface = NULL; |
|
} |
|
|
|
void progress_Render(int progress) |
|
{ |
|
DrawArtImage(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, 0, pPcxTitleImage); |
|
|
|
int x = GetCenterOffset(280); |
|
int y = GetCenterOffset(144, SCREEN_HEIGHT); |
|
|
|
BYTE mask = 250; |
|
BYTE maskWhite = 255; |
|
DrawArtImage(x, y, 284, 148, 0, pPcxSPopupImage); |
|
DrawArtImage(GetCenterOffset(228), y + 52, 232, 38, 0, pPcxProgBGImage, NULL, 228); |
|
if (progress) { |
|
DrawArtImage(GetCenterOffset(228), y + 52, 232, 38, 0, pPcxProgFillImage, NULL, 228 * progress / 100); |
|
} |
|
DrawArtImage(GetCenterOffset(dwSmlButWidth - 2), y + 99, dwSmlButWidth, dwSmlButHeight, 2, pPcxSmlButImage, NULL, dwSmlButWidth - 2); |
|
|
|
if (msgSurface) { |
|
SDL_Rect src_rect = { 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT }; |
|
SDL_Rect dsc_rect = { 64 + x + 50, 160 + y + 8, SCREEN_WIDTH, SCREEN_HEIGHT }; |
|
SDL_BlitSurface(msgSurface, NULL, pal_surface, &dsc_rect); |
|
dsc_rect.x = 64 + GetCenterOffset(w) - 1; |
|
dsc_rect.y = 160 + y + 99 + 4; |
|
SDL_BlitSurface(cancleSurface, NULL, pal_surface, &dsc_rect); |
|
} |
|
} |
|
|
|
int __stdcall UiProgressDialog(HWND window, char *msg, int enable, int(__cdecl *fnfunc)(), int rate) |
|
{ |
|
int delay = rate ? 1000 / rate : 50; |
|
|
|
SetFadeLevel(256); |
|
progress_Loade(msg); |
|
|
|
bool endMenu = false; |
|
int progress = 0; |
|
|
|
SDL_Event event; |
|
while (!endMenu && progress < 100) { |
|
CapFPS(); |
|
|
|
progress = fnfunc(); |
|
printf("progress %d\n", progress); |
|
|
|
progress_Render(progress); |
|
DrawMouse(); |
|
SetFadeLevel(256); |
|
|
|
while (SDL_PollEvent(&event)) { |
|
switch (event.type) { |
|
case SDL_KEYDOWN: |
|
case SDL_MOUSEBUTTONDOWN: |
|
endMenu = true; |
|
break; |
|
case SDL_QUIT: |
|
exit(0); |
|
} |
|
} |
|
} |
|
BlackPalette(); |
|
|
|
progress_Free(); |
|
|
|
return progress == 100; |
|
}
|
|
|