mirror of
https://github.com/love2d/love.git
synced 2026-08-12 08:30:56 +02:00
Add love.system.getTheme()
This function returns wetever the device theme is dark theme, light theme, or unknown.
This commit is contained in:
@@ -89,6 +89,11 @@ bool System::getConstant(System::PowerState in, const char *&out)
|
||||
return powerStates.find(in, out);
|
||||
}
|
||||
|
||||
bool System::getConstant(System::SystemTheme in, const char *&out)
|
||||
{
|
||||
return systemThemes.find(in, out);
|
||||
}
|
||||
|
||||
StringMap<System::PowerState, System::POWER_MAX_ENUM>::Entry System::powerEntries[] =
|
||||
{
|
||||
{"unknown", System::POWER_UNKNOWN},
|
||||
@@ -100,5 +105,14 @@ StringMap<System::PowerState, System::POWER_MAX_ENUM>::Entry System::powerEntrie
|
||||
|
||||
StringMap<System::PowerState, System::POWER_MAX_ENUM> System::powerStates(System::powerEntries, sizeof(System::powerEntries));
|
||||
|
||||
StringMap<System::SystemTheme, System::THEME_MAX_ENUM>::Entry System::systemThemeEntries[] =
|
||||
{
|
||||
{"unknown", System::THEME_UNKNOWN},
|
||||
{"light", System::THEME_LIGHT},
|
||||
{"dark", System::THEME_DARK}
|
||||
};
|
||||
|
||||
StringMap<System::SystemTheme, System::THEME_MAX_ENUM> System::systemThemes(System::systemThemeEntries, sizeof(System::systemThemeEntries));
|
||||
|
||||
} // system
|
||||
} // love
|
||||
|
||||
@@ -48,6 +48,14 @@ public:
|
||||
POWER_MAX_ENUM
|
||||
};
|
||||
|
||||
enum SystemTheme
|
||||
{
|
||||
THEME_UNKNOWN,
|
||||
THEME_LIGHT,
|
||||
THEME_DARK,
|
||||
THEME_MAX_ENUM
|
||||
};
|
||||
|
||||
System(const char *name);
|
||||
virtual ~System() {}
|
||||
|
||||
@@ -91,6 +99,13 @@ public:
|
||||
**/
|
||||
virtual PowerState getPowerInfo(int &seconds, int &percent) const = 0;
|
||||
|
||||
/**
|
||||
* Get information about the system theme.
|
||||
*
|
||||
* @return System theme, which can be either light, dark, or unknown.
|
||||
**/
|
||||
virtual SystemTheme getTheme() const = 0;
|
||||
|
||||
/**
|
||||
* Opens the specified URL with the user's default program to handle that
|
||||
* particular URL type.
|
||||
@@ -131,11 +146,14 @@ public:
|
||||
|
||||
static bool getConstant(const char *in, PowerState &out);
|
||||
static bool getConstant(PowerState in, const char *&out);
|
||||
static bool getConstant(SystemTheme in, const char *&out);
|
||||
|
||||
private:
|
||||
|
||||
static StringMap<PowerState, POWER_MAX_ENUM>::Entry powerEntries[];
|
||||
static StringMap<PowerState, POWER_MAX_ENUM> powerStates;
|
||||
static StringMap<SystemTheme, THEME_MAX_ENUM>::Entry systemThemeEntries[];
|
||||
static StringMap<SystemTheme, THEME_MAX_ENUM> systemThemes;
|
||||
|
||||
}; // System
|
||||
|
||||
|
||||
@@ -93,6 +93,15 @@ love::system::System::PowerState System::getPowerInfo(int &seconds, int &percent
|
||||
return state;
|
||||
}
|
||||
|
||||
System::SystemTheme System::getTheme() const
|
||||
{
|
||||
SDL_SystemTheme sdlstate = SDL_GetSystemTheme();
|
||||
SystemTheme state = THEME_UNKNOWN;
|
||||
systemThemes.find(sdlstate, state);
|
||||
|
||||
return state;
|
||||
}
|
||||
|
||||
bool System::openURL(const std::string &url) const
|
||||
{
|
||||
return SDL_OpenURL(url.c_str());
|
||||
@@ -128,6 +137,15 @@ EnumMap<System::PowerState, SDL_PowerState, System::POWER_MAX_ENUM>::Entry Syste
|
||||
|
||||
EnumMap<System::PowerState, SDL_PowerState, System::POWER_MAX_ENUM> System::powerStates(System::powerEntries, sizeof(System::powerEntries));
|
||||
|
||||
EnumMap<System::SystemTheme, SDL_SystemTheme, System::THEME_MAX_ENUM>::Entry System::systemThemeEntries[] =
|
||||
{
|
||||
{System::THEME_UNKNOWN, SDL_SYSTEM_THEME_UNKNOWN},
|
||||
{System::THEME_LIGHT, SDL_SYSTEM_THEME_LIGHT},
|
||||
{System::THEME_DARK, SDL_SYSTEM_THEME_DARK},
|
||||
};
|
||||
|
||||
EnumMap<System::SystemTheme, SDL_SystemTheme, System::THEME_MAX_ENUM> System::systemThemes(System::systemThemeEntries, sizeof(System::systemThemeEntries));
|
||||
|
||||
} // sdl
|
||||
} // system
|
||||
} // love
|
||||
|
||||
@@ -27,6 +27,7 @@
|
||||
|
||||
// SDL
|
||||
#include <SDL3/SDL_power.h>
|
||||
#include <SDL3/SDL_system.h>
|
||||
|
||||
namespace love
|
||||
{
|
||||
@@ -49,6 +50,7 @@ public:
|
||||
std::string getClipboardText() const override;
|
||||
|
||||
PowerState getPowerInfo(int &seconds, int &percent) const override;
|
||||
SystemTheme getTheme() const override;
|
||||
bool openURL(const std::string &url) const override;
|
||||
std::vector<std::string> getPreferredLocales() const override;
|
||||
|
||||
@@ -58,6 +60,8 @@ private:
|
||||
|
||||
static EnumMap<PowerState, SDL_PowerState, POWER_MAX_ENUM>::Entry powerEntries[];
|
||||
static EnumMap<PowerState, SDL_PowerState, POWER_MAX_ENUM> powerStates;
|
||||
static EnumMap<SystemTheme, SDL_SystemTheme, THEME_MAX_ENUM>::Entry systemThemeEntries[];
|
||||
static EnumMap<SystemTheme, SDL_SystemTheme, THEME_MAX_ENUM> systemThemes;
|
||||
|
||||
}; // System
|
||||
|
||||
|
||||
@@ -87,6 +87,15 @@ int w_getPowerInfo(lua_State *L)
|
||||
return 3;
|
||||
}
|
||||
|
||||
int w_getTheme(lua_State *L)
|
||||
{
|
||||
System::SystemTheme theme = instance()->getTheme();
|
||||
const char *str = "unknown";
|
||||
System::getConstant(theme, str);
|
||||
lua_pushstring(L, str);
|
||||
return 1;
|
||||
}
|
||||
|
||||
int w_openURL(lua_State *L)
|
||||
{
|
||||
std::string url = luax_checkstring(L, 1);
|
||||
@@ -131,6 +140,7 @@ static const luaL_Reg functions[] =
|
||||
{ "setClipboardText", w_setClipboardText },
|
||||
{ "getClipboardText", w_getClipboardText },
|
||||
{ "getPowerInfo", w_getPowerInfo },
|
||||
{ "getTheme", w_getTheme },
|
||||
{ "openURL", w_openURL },
|
||||
{ "vibrate", w_vibrate },
|
||||
{ "hasBackgroundMusic", w_hasBackgroundMusic },
|
||||
|
||||
Reference in New Issue
Block a user