Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add touch_controls boolean to get_player_window_information() #14092

Merged
merged 3 commits into from
Dec 17, 2023
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
5 changes: 5 additions & 0 deletions doc/lua_api.md
Original file line number Diff line number Diff line change
Expand Up @@ -5350,6 +5350,11 @@ Utilities
-- HUD Scaling multiplier
-- Equal to the setting `hud_scaling` multiplied by `dpi / 96`
real_hud_scaling = 1,

-- Whether the touchscreen controls are enabled.
-- Usually (but not always) `true` on Android.
-- Requires at least Minetest 5.9.0.
grorp marked this conversation as resolved.
Show resolved Hide resolved
touch_controls = false,
}
```

Expand Down
4 changes: 4 additions & 0 deletions doc/menu_lua_api.md
Original file line number Diff line number Diff line change
Expand Up @@ -249,6 +249,10 @@ GUI
-- HUD Scaling multiplier
-- Equal to the setting `hud_scaling` multiplied by `dpi / 96`
real_hud_scaling = 1,

-- Whether the touchscreen controls are enabled.
-- Usually (but not always) `true` on Android.
touch_controls = false,
}
```

Expand Down
5 changes: 4 additions & 1 deletion games/devtest/mods/testfullscreenfs/init.lua
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@ local function show_fullscreen_fs(name)
print(dump(window))

local size = { x = window.max_formspec_size.x * 1.1, y = window.max_formspec_size.y * 1.1 }
local touch_text = window.touch_controls and "Touch controls enabled" or
"Touch controls disabled"
local fs = {
"formspec_version[4]",
("size[%f,%f]"):format(size.x, size.y),
Expand All @@ -16,7 +18,8 @@ local function show_fullscreen_fs(name)
("button[%f,%f;1,1;%s;%s]"):format(size.x - 1, size.y - 1, "br", "BR"),
("button[%f,%f;1,1;%s;%s]"):format(0, size.y - 1, "bl", "BL"),

("label[%f,%f;%s]"):format(size.x / 2, size.y / 2, "Fullscreen")
("label[%f,%f;%s]"):format(size.x / 2, size.y / 2, "Fullscreen"),
("label[%f,%f;%s]"):format(size.x / 2, size.y / 2 + 1, touch_text),
}

minetest.show_formspec(name, "testfullscreenfs:fs", table.concat(fs))
Expand Down
1 change: 1 addition & 0 deletions src/client/client.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1439,6 +1439,7 @@ void Client::sendUpdateClientInfo(const ClientDynamicInfo& info)
pkt << info.real_gui_scaling;
pkt << info.real_hud_scaling;
pkt << (f32)info.max_fs_size.X << (f32)info.max_fs_size.Y;
pkt << info.touch_controls;

Send(&pkt);
}
Expand Down
12 changes: 10 additions & 2 deletions src/clientdynamicinfo.h
Original file line number Diff line number Diff line change
Expand Up @@ -33,11 +33,13 @@ struct ClientDynamicInfo
f32 real_gui_scaling;
f32 real_hud_scaling;
v2f32 max_fs_size;
bool touch_controls;

bool equal(const ClientDynamicInfo &other) const {
sfan5 marked this conversation as resolved.
Show resolved Hide resolved
return render_target_size == other.render_target_size &&
abs(real_gui_scaling - other.real_gui_scaling) < 0.001f &&
abs(real_hud_scaling - other.real_hud_scaling) < 0.001f;
abs(real_hud_scaling - other.real_hud_scaling) < 0.001f &&
touch_controls == other.touch_controls;
}

#ifndef SERVER
Expand All @@ -48,10 +50,16 @@ struct ClientDynamicInfo
f32 hud_scaling = g_settings->getFloat("hud_scaling", 0.5f, 20.0f);
f32 real_gui_scaling = gui_scaling * density;
f32 real_hud_scaling = hud_scaling * density;
#ifdef HAVE_TOUCHSCREENGUI
bool touch_controls = true;
#else
bool touch_controls = false;
#endif

return {
screen_size, real_gui_scaling, real_hud_scaling,
ClientDynamicInfo::calculateMaxFSSize(screen_size, gui_scaling)
ClientDynamicInfo::calculateMaxFSSize(screen_size, gui_scaling),
touch_controls
};
}
#endif
Expand Down
6 changes: 5 additions & 1 deletion src/network/serverpackethandler.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1866,13 +1866,17 @@ void Server::handleCommand_HaveMedia(NetworkPacket *pkt)

void Server::handleCommand_UpdateClientInfo(NetworkPacket *pkt)
{
ClientDynamicInfo info;
ClientDynamicInfo info{};
grorp marked this conversation as resolved.
Show resolved Hide resolved
*pkt >> info.render_target_size.X;
*pkt >> info.render_target_size.Y;
*pkt >> info.real_gui_scaling;
*pkt >> info.real_hud_scaling;
*pkt >> info.max_fs_size.X;
*pkt >> info.max_fs_size.Y;
try {
// added in 5.9.0
*pkt >> info.touch_controls;
} catch (PacketError &e) {}

session_t peer_id = pkt->getPeerId();
RemoteClient *client = getClient(peer_id, CS_Invalid);
Expand Down
4 changes: 4 additions & 0 deletions src/script/lua_api/l_mainmenu.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -946,6 +946,10 @@ int ModApiMainMenu::l_get_window_info(lua_State *L)
lua_pushnumber(L, info.real_hud_scaling);
lua_settable(L, top);

lua_pushstring(L, "touch_controls");
lua_pushboolean(L, info.touch_controls);
lua_settable(L, top);

return 1;
}

Expand Down
5 changes: 5 additions & 0 deletions src/script/lua_api/l_server.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -317,6 +317,11 @@ int ModApiServer::l_get_player_window_information(lua_State *L)
lua_pushstring(L, "real_hud_scaling");
lua_pushnumber(L, dynamic->real_hud_scaling);
lua_settable(L, dyn_table);

lua_pushstring(L, "touch_controls");
lua_pushboolean(L, dynamic->touch_controls);
lua_settable(L, dyn_table);

return 1;
}

Expand Down