17template <
typename Self,
typename Finished>
30 for(
const auto& itr : m_callbacks) {
31 m_cb_deleter(itr.second);
36 auto itr = m_callbacks.find(event);
37 if (itr != m_callbacks.end()) {
38 (*m_cb_trampoline)(itr->second, state);
42 void add(
const std::string& event,
void *cb) {
43 auto itr = m_callbacks.find(event);
44 if(itr != m_callbacks.end()) {
48 m_callbacks[event] = cb;
56 CallbacksHolder& operator=(
const WidgetState&) =
delete;
58 std::map<std::string, void*> m_callbacks;
85 float x()
const {
return float(
_x)/10.f; }
86 float y()
const {
return float(
_y)/10.f; }
87 float w()
const {
return float(
_w)/10.f; }
88 float h()
const {
return float(
_h)/10.f; }
103 template <
typename Self,
typename Finished>
107 WidgetState(uint16_t
uuid,
float x,
float y,
float w,
float h, uint16_t tab);
109 uint16_t
uuid()
const {
return m_uuid; }
111 std::string
getString(
const std::string& key, std::string def =
"")
const;
112 int64_t
getInt(
const std::string& key, int64_t def = 0)
const;
113 double getDouble(
const std::string& key,
double def = 0.0)
const;
114 bool getBool(
const std::string& key,
bool def =
false)
const;
116 bool set(
const std::string& key, rbjson::Value* value);
117 bool setInnerObjectProp(
const std::string& objectName,
const std::string& propertyName,
118 rbjson::Value* value);
123 return bool(m_cb_holder);
137 return std::unique_lock<std::mutex>(m_mutex);
143 static std::mutex m_mutex;
148 rbjson::Object& data() {
return m_data; }
150 void update(rbjson::Object* other) {
152 for (
auto itr : other->members()) {
153 const std::string name_str(itr.name, itr.name_len);
154 m_data.set(name_str, itr.value->copy());
155 markGlobalChangedLocked(name_str);
162 m_cb_holder.reset(
new CallbacksHolder(trampoline, deleter));
164 m_cb_holder->add(event, cb);
167 void call(
const std::string& event) {
170 m_cb_holder->call(
this, event);
173 void markChangedLocked(
const std::string& key);
174 void markGlobalChangedLocked(
const std::string& key);
175 inline bool wasChangedInTickLocked(
const char *key,
size_t key_len)
const;
177 bool popChanges(rbjson::Object& state);
178 bool remarkAllChanges();
180 rbjson::Object m_data;
181 std::unique_ptr<CallbacksHolder> m_cb_holder;
183 const uint16_t m_uuid;
185 uint16_t m_bloom_global;
186 uint16_t m_bloom_tick;
256 void setCss(
const std::string& propertyName,
const std::string& value) {
260 std::string
css(
const std::string& propertyName)
const {
265 return css->getString(propertyName);
void call(WidgetState *state, const std::string &event)
void(*) cb_trampoline_t(void *, WidgetState *)
void(*) cb_deleter_t(void *)
void add(const std::string &event, void *cb)