5#include <unordered_map>
77 std::unordered_map<int,std::string> m;
79 if (m.find(p.first) == m.end()) m.emplace(p.first, p.second);
88 std::unordered_map<std::string,int> m;
90 std::string key = p.second;
91 std::transform(key.begin(), key.end(), key.begin(), [](
unsigned char c){
92 return static_cast<char>(std::tolower(c));
94 m.emplace(std::move(key), p.first);
104 std::string name = it->second;
105 std::transform(name.begin(), name.end(), name.begin(), [](
unsigned char c){
106 return static_cast<char>(std::tolower(c));
113 std::string key = name;
114 std::transform(key.begin(), key.end(), key.begin(), [](
unsigned char c){
115 return static_cast<char>(std::tolower(c));
156 if (lua[
"_SDOM_IButtonObject_registered"].valid() && lua[
"_SDOM_IButtonObject_registered"].get_or(
false))
163 sol::table bs = lua[
"ButtonState"].valid() ? lua[
"ButtonState"] : lua.create_table();
165 auto set_if_absent = [&](sol::table &t,
const char* key,
int val){
166 if (!t[key].valid()) t[key] = val;
197 lua[
"ButtonState"] = bs;
200 if (!lua[
"button_state_from_name"].valid())
202 lua.set_function(
"button_state_from_name", [](
const std::string &name) -> sol::optional<int> {
204 if (!opt)
return sol::nullopt;
205 return static_cast<int>(*opt);
209 if (!lua[
"button_state_name_from_index"].valid())
211 lua.set_function(
"button_state_name_from_index", [](
int idx) -> sol::optional<std::string> {
213 if (!opt)
return sol::nullopt;
219 auto set_handle_if_absent = [&](
const char* name, sol::object value) {
220 if (!handle[name].valid())
221 handle[name] = value;
224 set_handle_if_absent(
"getState", sol::make_object(lua, [](
DisplayHandle h) -> sol::optional<int> {
225 if (!h.
isValid())
return sol::nullopt;
227 if (!btn)
return sol::nullopt;
228 return static_cast<int>(btn->
getState());
231 set_handle_if_absent(
"setState", sol::make_object(lua, [](
DisplayHandle h,
int state) {
238 set_handle_if_absent(
"isMouseHovered", sol::make_object(lua, [](
DisplayHandle h) ->
bool {
242 set_handle_if_absent(
"setMouseHovered", sol::make_object(lua, [](
DisplayHandle h,
bool v) {
248 set_handle_if_absent(
"isKeyFocused", sol::make_object(lua, [](
DisplayHandle h) ->
bool {
252 set_handle_if_absent(
"setKeyFocused", sol::make_object(lua, [](
DisplayHandle h,
bool v) {
259 lua[
"_SDOM_IButtonObject_registered"] =
true;
Definition SDOM_DisplayHandle.hpp:24
static sol::table ensure_handle_table(sol::state_view lua)
Definition SDOM_DisplayHandle.cpp:61
T * as() const
Definition SDOM_DisplayHandle.hpp:67
bool isValid() const
Definition SDOM_DisplayHandle.hpp:120
Contains all core classes and utilities for the SDOM library.
Definition lua_BindHelpers.hpp:7
static const std::unordered_map< int, std::string > button_state_to_string
Definition SDOM_IButtonObject.hpp:76
IconIndex
Definition SDOM_IconIndex.hpp:12
static std::optional< ButtonState > button_state_from_name(const std::string &name)
Definition SDOM_IButtonObject.hpp:111
static std::optional< std::string > button_state_name_from_index(ButtonState idx)
Definition SDOM_IButtonObject.hpp:100
static void set_if_absent(sol::table &handle, const char *name, auto &&fn)
Definition SDOM_AssetHandle.cpp:86
static const std::vector< std::pair< int, std::string > > button_state_pairs
Definition SDOM_IButtonObject.hpp:44
static const std::unordered_map< std::string, int > string_to_button_state
Definition SDOM_IButtonObject.hpp:87
ButtonState
Definition SDOM_IButtonObject.hpp:13