Browse Source

DiabloUI: Handle logo like all the other elements

Adds the `animated` flag to `UiImage`, allowing us to
remove special handling for the logo.
pull/319/head
Gleb Mazovetskiy 7 years ago committed by Anders Jenbo
parent
commit
b536d0efa2
  1. 17
      SourceX/DiabloUI/diabloui.cpp
  2. 4
      SourceX/DiabloUI/diabloui.h
  3. 1
      SourceX/DiabloUI/dialogs.cpp
  4. 3
      SourceX/DiabloUI/mainmenu.cpp
  5. 3
      SourceX/DiabloUI/selconn.cpp
  6. 13
      SourceX/DiabloUI/selgame.cpp
  7. 3
      SourceX/DiabloUI/selhero.cpp
  8. 3
      SourceX/DiabloUI/selyesno.cpp
  9. 4
      SourceX/DiabloUI/title.cpp
  10. 17
      SourceX/DiabloUI/ui_item.h

17
SourceX/DiabloUI/diabloui.cpp

@ -627,7 +627,6 @@ void UiPollAndRender() {
UiFocusNavigation(&event);
}
UiRenderItems(gUiItems, gUiItemCnt);
DrawLogo();
DrawMouse();
UiFadeIn();
}
@ -651,7 +650,16 @@ void Render(const UiArtText &ui_art_text)
void Render(const UiImage &ui_image)
{
DrawArt(ui_image.rect.x, ui_image.rect.y, ui_image.art, ui_image.frame, ui_image.rect.w);
int x = ui_image.rect.x;
if ((ui_image.flags & UIS_CENTER) && ui_image.art != nullptr) {
const int x_offset = GetCenterOffset(ui_image.art->w(), ui_image.rect.w);
x += x_offset;
}
if (ui_image.animated) {
DrawAnimatedArt(ui_image.art, x, ui_image.rect.y);
} else {
DrawArt(x, ui_image.rect.y, ui_image.art, ui_image.frame, ui_image.rect.w);
}
}
void Render(const UiArtTextButton &ui_button)
@ -863,11 +871,6 @@ bool UiItemMouseEvents(SDL_Event *event, UiItem *items, std::size_t size)
return handled;
}
void DrawLogo(int t, int size)
{
DrawAnimatedArt(&ArtLogos[size], GetCenterOffset(ArtLogos[size].w()), t);
}
void DrawMouse()
{
SDL_GetMouseState(&MouseX, &MouseY);

4
SourceX/DiabloUI/diabloui.h

@ -27,6 +27,9 @@ extern Art ArtCursor;
extern Art ArtHero;
extern bool gbSpawned;
constexpr auto MAINMENU_BACKGROUND = UiImage(&ArtBackground, { 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT });
constexpr auto MAINMENU_LOGO = UiImage(&ArtLogos[LOGO_MED], /*animated=*/true, /*frame=*/0, { 0, 0, 0, 0 }, UIS_CENTER);
template <class T, size_t N>
constexpr size_t size(T (&)[N])
{
@ -41,7 +44,6 @@ bool UiFocusNavigation(SDL_Event *event);
bool UiItemMouseEvents(SDL_Event *event, UiItem *items, std::size_t size);
int GetCenterOffset(int w, int bw = 0);
void LoadPalInMem(const PALETTEENTRY *pPal);
void DrawLogo(int t = 0, int size = LOGO_MED);
void DrawMouse();
void LoadBackgroundArt(char *pszFile);
void SetMenu(int MenuId);

1
SourceX/DiabloUI/dialogs.cpp

@ -180,7 +180,6 @@ void DialogLoop(UiItem *items, std::size_t num_items, UiItem *render_behind, std
}
}
UiRenderItems(render_behind, render_behind_size);
DrawLogo();
UiRenderItems(items, num_items);
DrawMouse();
UiFadeIn();

3
SourceX/DiabloUI/mainmenu.cpp

@ -15,7 +15,8 @@ UiListItem MAINMENU_DIALOG_ITEMS[] = {
{"Exit Diablo", MAINMENU_EXIT_DIABLO}
};
UiItem MAINMENU_DIALOG[] = {
UiImage(&ArtBackground, { 0, 0, 640, 480 }),
MAINMENU_BACKGROUND,
MAINMENU_LOGO,
UiList(MAINMENU_DIALOG_ITEMS, 64, 192, 510, 43, UIS_HUGE | UIS_GOLD | UIS_CENTER),
UiArtText(nullptr, { 17, 444, 605, 21 }, UIS_SMALL)
};

3
SourceX/DiabloUI/selconn.cpp

@ -29,7 +29,8 @@ UiListItem SELCONN_DIALOG_ITEMS[] = {
#endif
};
UiItem SELCONNECT_DIALOG[] = {
UiImage(&ArtBackground, { 0, 0, 640, 480 }),
MAINMENU_BACKGROUND,
MAINMENU_LOGO,
UiArtText("Multi Player Game", { 24, 161, 590, 35 }, UIS_CENTER | UIS_BIG),
UiArtText(selconn_MaxPlayers, { 35, 218, 205, 21 }),
UiArtText("Requirements:", { 35, 256, 205, 21 }),

13
SourceX/DiabloUI/selgame.cpp

@ -21,7 +21,6 @@ int gbDifficulty;
static _SNETPROGRAMDATA *m_client_info;
extern DWORD provider;
constexpr UiImage SELGAME_BACKGROUND = UiImage(&ArtBackground, { 0, 0, 640, 480 });
constexpr UiArtTextButton SELGAME_OK = UiArtTextButton("OK", &UiFocusNavigationSelect, { 299, 427, 140, 35 }, UIS_CENTER | UIS_VCENTER | UIS_BIG | UIS_GOLD);
constexpr UiArtTextButton SELGAME_CANCEL = UiArtTextButton("CANCEL", &UiFocusNavigationEsc, { 449, 427, 140, 35 }, UIS_CENTER | UIS_VCENTER | UIS_BIG | UIS_GOLD);
@ -33,7 +32,8 @@ UiListItem SELDIFF_DIALOG_ITEMS[] = {
{ "Hell", DIFF_HELL }
};
UiItem SELDIFF_DIALOG[] = {
SELGAME_BACKGROUND,
MAINMENU_BACKGROUND,
MAINMENU_LOGO,
UiArtText("Create Game", { 24, 161, 590, 35 }, UIS_CENTER | UIS_BIG),
UiArtText(selgame_Label, { 34, 211, 205, 33 }, UIS_CENTER | UIS_BIG), // DIFF
SELGAME_DESCRIPTION,
@ -51,7 +51,8 @@ UiListItem SELUDPGAME_DIALOG_ITEMS[] = {
{ "Enter IP", 1 },
};
UiItem SELUDPGAME_DIALOG[] = {
SELGAME_BACKGROUND,
MAINMENU_BACKGROUND,
MAINMENU_LOGO,
SELUDPGAME_TITLE,
SELUDPGAME_DESCRIPTION_LABEL,
SELGAME_DESCRIPTION,
@ -62,7 +63,8 @@ UiItem SELUDPGAME_DIALOG[] = {
};
UiItem ENTERIP_DIALOG[] = {
SELGAME_BACKGROUND,
MAINMENU_BACKGROUND,
MAINMENU_LOGO,
SELUDPGAME_TITLE,
SELUDPGAME_DESCRIPTION_LABEL,
SELGAME_DESCRIPTION,
@ -73,7 +75,8 @@ UiItem ENTERIP_DIALOG[] = {
};
UiItem ENTERPASSWORD_DIALOG[] = {
SELGAME_BACKGROUND,
MAINMENU_BACKGROUND,
MAINMENU_LOGO,
SELUDPGAME_TITLE,
SELUDPGAME_DESCRIPTION_LABEL,
SELGAME_DESCRIPTION,

3
SourceX/DiabloUI/selhero.cpp

@ -35,7 +35,8 @@ BOOL(*gfnHeroDelete)
namespace {
UiItem SELHERO_DIALOG[] = {
UiImage(&ArtBackground, { 0, 0, 640, 480 }),
MAINMENU_BACKGROUND,
MAINMENU_LOGO,
UiArtText(title, { 24, 161, 590, 35 }, UIS_CENTER | UIS_BIG),
UiImage(&ArtHero, UI_NUM_CLASSES, { 30, 211, 180, 76 }),
UiArtText("Level:", { 39, 323, 110, 21 }, UIS_RIGHT),

3
SourceX/DiabloUI/selyesno.cpp

@ -19,7 +19,8 @@ UiListItem SELYESNO_DIALOG_ITEMS[] = {
};
UiItem SELYESNO_DIALOG[] = {
UiImage(&ArtBackground, { 0, 0, 640, 480 }),
MAINMENU_BACKGROUND,
MAINMENU_LOGO,
UiArtText(selyesno_title, { 24, 161, 590, 35 }, UIS_CENTER | UIS_BIG),
UiArtText(selyesno_confirmationMessage, { 120, 236, 280, 168 }, UIS_MED),
UiList(SELYESNO_DIALOG_ITEMS, 230, 390, 180, 35, UIS_CENTER | UIS_BIG | UIS_GOLD)

4
SourceX/DiabloUI/title.cpp

@ -18,7 +18,8 @@ void title_Free()
BOOL UiTitleDialog(int a1)
{
UiItem TITLESCREEN_DIALOG[] = {
UiImage(&ArtBackground, { 0, 0, 640, 480 }),
MAINMENU_BACKGROUND,
UiImage(&ArtLogos[LOGO_BIG], /*animated=*/true, /*frame=*/0, { 0, 182, 0, 0 }, UIS_CENTER),
UiArtText("Copyright \xA9 1996-2001 Blizzard Entertainment", { 49, 410, 550, 26 }, UIS_MED | UIS_CENTER)
};
@ -30,7 +31,6 @@ BOOL UiTitleDialog(int a1)
SDL_Event event;
while (!endMenu && SDL_GetTicks() < timeOut) {
UiRenderItems(TITLESCREEN_DIALOG, size(TITLESCREEN_DIALOG));
DrawLogo(182, LOGO_BIG);
UiFadeIn();
while (SDL_PollEvent(&event)) {

17
SourceX/DiabloUI/ui_item.h

@ -70,19 +70,26 @@ struct UiItemBase {
};
struct UiImage : public UiItemBase {
constexpr UiImage(Art *art, SDL_Rect rect, int flags = 0)
: UiImage(art, /*frame=*/0, rect, flags)
constexpr UiImage(Art *art, bool animated, int frame, SDL_Rect rect, int flags = 0)
: UiItemBase(rect, flags)
, art(art)
, animated(animated)
, frame(frame)
{
}
constexpr UiImage(Art *art, int frame, SDL_Rect rect, int flags = 0)
: UiItemBase(rect, flags)
, art(art)
, frame(frame)
: UiImage(art, /*animated=*/false, frame, rect, flags)
{
}
constexpr UiImage(Art *art, SDL_Rect rect, int flags = 0)
: UiImage(art, /*frame=*/0, rect, flags)
{
}
Art *art;
bool animated;
int frame;
};

Loading…
Cancel
Save