Open XuNeo opened 2 months ago
LVGL already has subject/objserver available, but it's in a poor state:
lvgl/src/others/observer/lv_observer.c
We can use lua for the same idea. Example of usage.
local subjectA = Subject() local subjectB = Subject() local obj = Object() obj.w = subjectA obj.h = Subject({subjectA, subjectB}, calculate = function(subjects) return subjects[0] + subjects[1] end ) subjectA.value = 123
Under the hood, we monitor the value of a property set to obj in obj.__newindex meta method, bind the property to a subject.
obj.__newindex
Also monitor subject.__newindex meta method, call the obj.set method with subject's actual value.
obj.set
Introduce the problem
LVGL already has subject/objserver available, but it's in a poor state:
lvgl/src/others/observer/lv_observer.c
Proposal
We can use lua for the same idea. Example of usage.
Under the hood, we monitor the value of a property set to obj in
obj.__newindex
meta method, bind the property to a subject.Also monitor subject.__newindex meta method, call the
obj.set
method with subject's actual value.