mirror of
https://github.com/ZDoom/Raze.git
synced 2024-12-14 06:31:34 +00:00
20db6b0c78
SWC20 is a mod that contains a caption that is larger then the entire screen and was pushing the actual menu content out of it. Fixes #239
131 lines
3.7 KiB
Text
131 lines
3.7 KiB
Text
|
|
//-------------------------------------------------------------------------------------------
|
|
//
|
|
// Caption drawer
|
|
//
|
|
//-------------------------------------------------------------------------------------------
|
|
|
|
class BloodMenuDelegate : RazeMenuDelegate
|
|
{
|
|
override int DrawCaption(String title, Font fnt, int y, bool drawit)
|
|
{
|
|
let font = generic_ui? NewConsoleFont : BigFont; // this ignores the passed font intentionally.
|
|
let texid = TexMan.CheckForTexture("MENUBAR");
|
|
let texsize = TexMan.GetScaledSize(texid);
|
|
let fonth = font.GetGlyphHeight("A");
|
|
if (drawit)
|
|
{
|
|
int width = font.StringWidth(title);
|
|
if (texid.isValid())
|
|
{
|
|
double scalex = 1.; // Expand the box if the text is longer
|
|
if (texsize.X - 10 < width) scalex = width / (texsize.X - 10);
|
|
screen.DrawTexture(texid, false, 160, 20, DTA_FullscreenScale, FSMode_Fit320x200Top, DTA_CenterOffsetRel, true, DTA_ScaleX, scalex);
|
|
}
|
|
screen.DrawText(font, Font.CR_UNDEFINED, 160 - width / 2, 20 - fonth / 2, title, DTA_FullscreenScale, FSMode_Fit320x200Top);
|
|
}
|
|
double fx, fy, fw, fh;
|
|
[fx, fy, fw, fh] = Screen.GetFullscreenRect(320, 200, FSMode_ScaleToFit43Top);
|
|
int h = texid.isValid() && texsize.Y < 40? texsize.Y : fonth;
|
|
return int((y+h) * fh / 200); // This must be the covered height of the header in true pixels.
|
|
}
|
|
|
|
override bool DrawSelector(ListMenuDescriptor desc)
|
|
{
|
|
return true; // do not draw any selector.
|
|
}
|
|
|
|
}
|
|
|
|
//-------------------------------------------------------------------------------------------
|
|
//
|
|
// The dripping blood - partially native.
|
|
//
|
|
//-------------------------------------------------------------------------------------------
|
|
|
|
class ListMenuItemBloodDripDrawer : ListMenuItem
|
|
{
|
|
void Init(ListMenuDescriptor desc)
|
|
{
|
|
Super.Init(0, 0);
|
|
}
|
|
|
|
native override void Draw(bool selected, ListMenuDescriptor desc);
|
|
}
|
|
|
|
|
|
|
|
//=============================================================================
|
|
//
|
|
// text item
|
|
//
|
|
//=============================================================================
|
|
|
|
class ListMenuItemBloodTextItem : ListMenuItemTextItem
|
|
{
|
|
void Init(ListMenuDescriptor desc, String text, String hotkey, Name child, int param = 0)
|
|
{
|
|
Super.Init(desc, text, hotkey, child, param);
|
|
}
|
|
|
|
void InitDirect(double x, double y, int height, String hotkey, String text, Font font, int color, int color2, Name child, int param = 0)
|
|
{
|
|
Super.InitDirect(x, y, height, hotkey, text, font, color, color2, child, param);
|
|
}
|
|
|
|
override void Draw(bool selected, ListMenuDescriptor desc)
|
|
{
|
|
int shade = Selectable()? 32: 48;
|
|
int pal = 5;
|
|
let gamefont = generic_ui ? NewSmallFont : BigFont;
|
|
int xpos = mXpos - gamefont.StringWidth(mText) / 2;
|
|
int cr = generic_ui? Font.CR_GRAY : Font.CR_UNDEFINED;
|
|
int trans = generic_ui? 0 : Translation.MakeID(Translation_Remap, pal);
|
|
|
|
if (selected) shade = 32 - ((MSTime() * 120 / 1000) & 63);
|
|
|
|
Screen.DrawText(gamefont, Font.CR_UNDEFINED, xpos+1, mYpos+1, mText, DTA_Color, 0xff000000, DTA_FullscreenScale, FSMode_Fit320x200);
|
|
Screen.DrawText(gamefont, Font.CR_UNDEFINED, xpos, mYpos, mText, DTA_TranslationIndex, trans, DTA_Color, Build.shadeToLight(shade), DTA_FullscreenScale, FSMode_Fit320x200);
|
|
}
|
|
|
|
}
|
|
|
|
|
|
class ImageScrollerPageQavDrawer : ImageScrollerPage
|
|
{
|
|
String qavn;
|
|
voidptr qav;
|
|
|
|
void Init(ImageScrollerDescriptor desc, String qavname)
|
|
{
|
|
Super.Init();
|
|
qavn = qavname;
|
|
qav = null;
|
|
}
|
|
|
|
override void OnDestroy()
|
|
{
|
|
if (qav) DestroyQav(qav);
|
|
Super.OnDestroy();
|
|
}
|
|
|
|
override void Drawer(bool selected)
|
|
{
|
|
if (qav) DrawQav(qav);
|
|
}
|
|
|
|
override void OnStartPage()
|
|
{
|
|
qav = LoadQav(qavn);
|
|
}
|
|
|
|
override void OnEndPage()
|
|
{
|
|
if (qav) DestroyQav(qav);
|
|
qav = null;
|
|
}
|
|
|
|
native static voidptr LoadQav(string s);
|
|
native static void DestroyQav(voidptr s);
|
|
native static void DrawQav(voidptr s);
|
|
}
|