From c5b1b019d7202edd26d9bab44297fc9c64cf47da Mon Sep 17 00:00:00 2001 From: UnknownShadow200 Date: Tue, 3 Sep 2019 19:52:42 +1000 Subject: [PATCH] Initial WIP on DPI scaling for in-game --- src/Camera.c | 2 +- src/Entity.c | 4 ++-- src/Entity.h | 2 +- src/Gui.c | 3 ++- src/Input.c | 2 +- src/Menus.c | 5 +++++ src/Screens.c | 7 +++---- src/Widgets.c | 21 +++++++++++---------- 8 files changed, 26 insertions(+), 20 deletions(-) diff --git a/src/Camera.c b/src/Camera.c index 4af320c39..065112944 100644 --- a/src/Camera.c +++ b/src/Camera.c @@ -44,7 +44,7 @@ static void PerspectiveCamera_GetPickedBlock(struct PickedPos* pos) { struct Entity* p = &LocalPlayer_Instance.Base; Vec3 dir = Vec3_GetDirVector(p->HeadY * MATH_DEG2RAD, p->HeadX * MATH_DEG2RAD); Vec3 eyePos = Entity_GetEyePosition(p); - float reach = LocalPlayer_Instance.ReachDistance; + float reach = LocalPlayer_Instance.ReachDistance; Picking_CalculatePickedBlock(eyePos, dir, reach, pos); } diff --git a/src/Entity.c b/src/Entity.c index dbc422ba9..fa30bc6cc 100644 --- a/src/Entity.c +++ b/src/Entity.c @@ -550,7 +550,7 @@ void Entities_RenderNames(double delta) { int i; if (Entities.NamesMode == NAME_MODE_NONE) return; - entities_closestId = Entities_GetCloset(&p->Base); + entities_closestId = Entities_GetClosest(&p->Base); if (!p->Hacks.CanSeeAllNames || Entities.NamesMode != NAME_MODE_ALL) return; Gfx_SetTexturing(true); @@ -634,7 +634,7 @@ void Entities_Remove(EntityID id) { Entities.List[id] = NULL; } -EntityID Entities_GetCloset(struct Entity* src) { +EntityID Entities_GetClosest(struct Entity* src) { Vec3 eyePos = Entity_GetEyePosition(src); Vec3 dir = Vec3_GetDirVector(src->HeadY * MATH_DEG2RAD, src->HeadX * MATH_DEG2RAD); float closestDist = MATH_POS_INF; diff --git a/src/Entity.h b/src/Entity.h index 0d33acfe5..00ac2b792 100644 --- a/src/Entity.h +++ b/src/Entity.h @@ -144,7 +144,7 @@ void Entities_RenderHoveredNames(double delta); /* Removes the given entity, raising EntityEvents.Removed event. */ void Entities_Remove(EntityID id); /* Gets the ID of the closest entity to the given entity. */ -EntityID Entities_GetCloset(struct Entity* src); +EntityID Entities_GetClosest(struct Entity* src); /* Draws shadows under entities, depending on Entities.ShadowsMode */ void Entities_DrawShadows(void); diff --git a/src/Gui.c b/src/Gui.c index 511d945da..3a82a216e 100644 --- a/src/Gui.c +++ b/src/Gui.c @@ -26,7 +26,8 @@ static cc_uint8 priorities[GUI_MAX_SCREENS]; void Widget_SetLocation(void* widget, cc_uint8 horAnchor, cc_uint8 verAnchor, int xOffset, int yOffset) { struct Widget* w = (struct Widget*)widget; w->horAnchor = horAnchor; w->verAnchor = verAnchor; - w->xOffset = xOffset; w->yOffset = yOffset; + w->xOffset = Display_ScaleX(xOffset); + w->yOffset = Display_ScaleY(yOffset); Widget_Reposition(w); } diff --git a/src/Input.c b/src/Input.c index 605cba7e3..cac56dfd4 100644 --- a/src/Input.c +++ b/src/Input.c @@ -466,7 +466,7 @@ static void MouseStateUpdate(int button, bool pressed) { /* defer getting the targeted entity, as it's a costly operation */ if (input_pickingId == -1) { p = &LocalPlayer_Instance.Base; - input_pickingId = Entities_GetCloset(p); + input_pickingId = Entities_GetClosest(p); } input_buttonsDown[button] = pressed; diff --git a/src/Menus.c b/src/Menus.c index b2b6df27b..2f099f794 100644 --- a/src/Menus.c +++ b/src/Menus.c @@ -1855,6 +1855,7 @@ static void MenuOptionsScreen_FreeInput(struct MenuOptionsScreen* s) { Elem_TryFree(s->widgets[i]); s->widgets[i] = NULL; } + Window_CloseKeyboard(); } static void MenuOptionsScreen_RedrawInput(struct MenuOptionsScreen* s) { @@ -2001,7 +2002,9 @@ static void MenuOptionsScreen_Input(void* screen, void* widget) { ANCHOR_CENTRE, ANCHOR_CENTRE, 240, 110); Menu_Button(s, i - 3, &s->Default, 200, MenuOptionsScreen_Default, ANCHOR_CENTRE, ANCHOR_CENTRE, 0, 150); + MenuOptionsScreen_RedrawInput(s); + Window_OpenKeyboard(); } static void MenuOptionsScreen_OnHacksChanged(void* screen) { @@ -2043,7 +2046,9 @@ static void MenuOptionsScreen_Render(void* screen, double delta) { } static void MenuOptionsScreen_Free(void* screen) { + struct MenuOptionsScreen* s = (struct MenuOptionsScreen*)screen; Event_UnregisterVoid(&UserEvents.HackPermissionsChanged, screen, MenuOptionsScreen_OnHacksChanged); + if (s->activeI >= 0) Window_CloseKeyboard(); } static void MenuOptionsScreen_OnResize(void* screen) { diff --git a/src/Screens.c b/src/Screens.c index 714a2d156..742efc0e4 100644 --- a/src/Screens.c +++ b/src/Screens.c @@ -347,9 +347,8 @@ static void StatusScreen_ContextLost(void* screen) { } static void StatusScreen_ContextRecreated(void* screen) { - static const String chars = String_FromConst("0123456789-, ()"); - static const String prefix = String_FromConst("Position: "); - static const String version = String_FromConst("0.30"); + static const String chars = String_FromConst("0123456789-, ()"); + static const String prefix = String_FromConst("Position: "); struct StatusScreen* s = (struct StatusScreen*)screen; struct TextWidget* line1 = &s->line1; @@ -374,7 +373,7 @@ static void StatusScreen_ContextRecreated(void* screen) { /* Swap around so 0.30 version is at top */ line2->yOffset = 2; line1->yOffset = s->posAtlas.tex.Y; - TextWidget_Set(line2, &version, &s->font); + TextWidget_SetConst(line2, "0.30", &s->font); Widget_Reposition(line1); Widget_Reposition(line2); diff --git a/src/Widgets.c b/src/Widgets.c index 9ece00c0b..1655561ee 100644 --- a/src/Widgets.c +++ b/src/Widgets.c @@ -88,11 +88,11 @@ void TextWidget_SetConst(struct TextWidget* w, const char* text, struct FontDesc *------------------------------------------------------ButtonWidget-------------------------------------------------------* *#########################################################################################################################*/ #define BUTTON_uWIDTH (200.0f / 256.0f) -#define BUTTON_MIN_WIDTH 40 -static struct Texture Button_ShadowTex = { GFX_NULL, Tex_Rect(0,0, 0,0), Widget_UV(0,66, 200,86) }; -static struct Texture Button_SelectedTex = { GFX_NULL, Tex_Rect(0,0, 0,0), Widget_UV(0,86, 200,106) }; -static struct Texture Button_DisabledTex = { GFX_NULL, Tex_Rect(0,0, 0,0), Widget_UV(0,46, 200,66) }; +static struct Texture btnShadowTex = { GFX_NULL, Tex_Rect(0,0, 0,0), Widget_UV(0,66, 200,86) }; +static struct Texture btnSelectedTex = { GFX_NULL, Tex_Rect(0,0, 0,0), Widget_UV(0,86, 200,106) }; +static struct Texture btnDisabledTex = { GFX_NULL, Tex_Rect(0,0, 0,0), Widget_UV(0,46, 200,66) }; +static int btnMinHeight; static void ButtonWidget_Free(void* widget) { struct ButtonWidget* w = (struct ButtonWidget*)widget; @@ -117,8 +117,8 @@ static void ButtonWidget_Render(void* widget, double delta) { struct Texture back; float scale; - back = w->active ? Button_SelectedTex : Button_ShadowTex; - if (w->disabled) back = Button_DisabledTex; + back = w->active ? btnSelectedTex : btnShadowTex; + if (w->disabled) back = btnDisabledTex; back.ID = Gui_ClassicTexture ? Gui_GuiClassicTex : Gui_GuiTex; back.X = w->x; back.Width = w->width; @@ -156,7 +156,8 @@ void ButtonWidget_Make(struct ButtonWidget* w, int minWidth, Widget_LeftClick on Widget_Reset(w); w->VTABLE = &ButtonWidget_VTABLE; w->optName = NULL; - w->minWidth = minWidth; + w->minWidth = Display_ScaleX(minWidth); + btnMinHeight = Display_ScaleY(40); w->MenuClick = onClick; Widget_SetLocation(w, horAnchor, verAnchor, xOffset, yOffset); } @@ -174,7 +175,7 @@ void ButtonWidget_Set(struct ButtonWidget* w, const String* text, struct FontDes } w->width = max(w->tex.Width, w->minWidth); - w->height = max(w->tex.Height, BUTTON_MIN_WIDTH); + w->height = max(w->tex.Height, btnMinHeight); Widget_Reposition(w); } @@ -1441,8 +1442,8 @@ void MenuInputWidget_Create(struct MenuInputWidget* w, int width, int height, co w->base.VTABLE = &MenuInputWidget_VTABLE; w->base.caretPos = -1; - w->minWidth = width; - w->minHeight = height; + w->minWidth = Display_ScaleX(width); + w->minHeight = Display_ScaleY(height); w->desc = *desc; w->base.convertPercents = false;