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;
72 template <
typename Self,
typename Finished>
76 WidgetState(uint16_t
uuid,
float x,
float y,
float w,
float h, uint16_t tab);
78 uint16_t
uuid()
const {
return m_uuid; }
79 const rbjson::Object&
data()
const {
return m_data; }
81 bool set(
const std::string& key, rbjson::Value* value);
82 bool setInnerObjectProp(
const std::string& objectName,
const std::string& propertyName,
83 rbjson::Value* value);
89 static std::mutex m_mutex;
94 rbjson::Object&
data() {
return m_data; }
96 void update(rbjson::Object* other) {
98 for (
auto itr : other->members()) {
99 m_data.set(itr.first, itr.second->copy());
100 markGlobalChangedLocked(itr.first);
107 m_cb_holder.reset(
new CallbacksHolder(trampoline, deleter));
109 m_cb_holder->add(event, cb);
112 void call(
const std::string& event) {
115 m_cb_holder->call(
this, event);
118 void markChangedLocked(
const std::string& key);
119 void markGlobalChangedLocked(
const std::string& key);
120 inline bool wasChangedInTickLocked(
const std::string& key)
const;
122 bool popChanges(rbjson::Object& state);
123 bool remarkAllChanges();
125 rbjson::Object m_data;
126 std::unique_ptr<CallbacksHolder> m_cb_holder;
128 const uint16_t m_uuid;
130 uint16_t m_bloom_global;
131 uint16_t m_bloom_tick;
158 return data().getDouble(
"x");
166 return data().getDouble(
"y");
174 return data().getDouble(
"w");
182 return data().getDouble(
"h");
190 return data().getInt(
"tab");
193 void setCss(
const std::string& propertyName,
const std::string& value) {
197 std::string
css(
const std::string& propertyName)
const {
198 auto*
css =
data().getObject(
"css");
201 return css->getString(propertyName);
void call(WidgetState *state, const std::string &event)
void(* cb_trampoline_t)(void *, WidgetState *)
void add(const std::string &event, void *cb)
void(* cb_deleter_t)(void *)