-
-
Notifications
You must be signed in to change notification settings - Fork 3.2k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
v9 discussion and changes #3298
Comments
|
Perspective distortion can be added in any minor version as it doesn't require a conceptual change. It's just an other option next to scale and rotation. |
Add control animation group to reduce the amount of independent control animation code. |
For this I checked GSAP stagger as inspiration/reference: https://greensock.com/docs/v3/Staggers |
Looks great. |
I added a reminder about staggers |
Placeholder:
|
Can't we do it now in v8.3? I added the other two to the list. |
@kisvegabor sure, we can do this in 8.3. |
Our platform supports HW acceleration on image format RGB565 and ARGB8888. |
@GorgonMeducer @kctan0805 |
Build-in thread-safe if it is practical. Thanks! ^_^ |
I find to it too complex to manage on our end compared to how simple it is to manage on the user's end 🙂 |
I merged the ROADMAP with the list of ideas in the first post. I collected the API breaking changes in to the "Plannel for v9" section. "Planned in general" contains ideas that can be added in any minor version therefore they not critical for v9. Please take a look at the list and tell what you think. My approach is to start with with the simple tasks (naming, minor refactoring) and let the few complex ones for later (masking, color formats, label features). |
what about PicoGL? |
@kisvegabor did you forget the 9paches-image widgets? |
@Cuixudong For for what purpose do you mean PicoGL? @GorgonMeducer It's already added here. |
@kisvegabor please keep me updated to the progress (I'll also check in periodically). I'll start updating the course as soon as its stable 😊 |
Thanks, @Mair. I think it will take at least a half year (probably more) to get close to release v9. |
I'm thinking about going back to a flatter directory structure. It means e.g. moving Do see any problems with it? |
Hi @kisvegabor , Having all the widgets in one place makes good sense and gets my vote 🙂 Cheers, Pete |
@kisvegabor Once you make this happen, please could you also update the PDSC file? lvgl/env_support/cmsis-pack/LVGL.lvgl.pdsc Lines 444 to 474 in 6104855
|
@GorgonMeducer |
@sukesh-ak Yes, sorry for not mentioning it clearly. I've just added it to the top comment here. It's a pretty new feature so please don't hesitate to let us know if you have any improvement ideas or find any issues. @calvin2021y |
Thanks will check it out. |
played with observers - super elegant and useful! I tried to deal with transient values which might become unavailable after a TTL (e.g. BLE beacon out of reach) In my example I dealt with invalidation by setting a magic value (INT_MAX) in a timeout and detecting this in the observer callbackso a label or color can be set accordingly maybe there's a more general way to convey "not available" to an observer? what about a user_data member in lv_subject_t which observers can inspect? edit: it occurred to me the easiest way is to set the type to LV_SUBJECT_TYPE_NONE, notify the observers and have the client inspect the type |
Thank you for the feedback, happy that you like it 🙂
Interesting idea! In general it's hard to give advice about it without knowing more about the details. Anyway, it's great that you have found a pleasing solution. |
it's really about conveying a value like None in Python sensor defective is not the same temperature as 0° - no value available is not the same as value zero any specific reason why observers have a user_data field, but subjects do not? |
I see now. In this case I think a special value is a good idea. A more advanced solution could be to have 3 subjects:
You can subscribe to the group the get notified if there are an errors or a new value.
Yes, oversight 😄 I've just added it in 767a44b |
yep, that would do it - need to explore subject groups appreciate the user data - escape hatch for the weird ;) edit: actually the subject user data opens another simple way of dealing with null values: setting the format string for a say
|
I'm missing how a subject group gets notified? I would think the sequence is to set all the member subjects, then "set the group" ? edit: ah I guess it's edit2: all working so far, including groups - no issues |
I've updated the docs of the observer to describe it in more detail. It will be compiled and updated in ~10 minutes. |
Challenge 1: It may looks like a huge challenging task but at simplest form it can be performed "on the fly" by actually utilizing lighting effects only over NON-FULLY-TRANSPARENT pixels (until refraction is involved). Different tricks can be used for fast calcs of any of mentioned lighting models in terms of pre-calculated tables etc. As current lv_obj are just "flat surfaces" stacked along (virtual) Z depth, for such an effect to achieve really impresive results, there is only one internal parameter required to current style elements lets call it thickness. So any border can have its own Z thickness, Padding too, PART_MAIN too, TEXT too etc. that would allow final rendering routine to properly distribute lighting effect on each part differentially based on that local Z offset of each part with respect to a Z position of object itself. Real shadowing is nothing else than taking whole rendered layer, removing chroma component from it (getting it as transparent gray-scaled image) and applying proper scaling, repositioning and blurring (depends on lighting model) with respect to position of light source, it is then applied as an overlay into shadow buffer which is propagated to "under" layer(s) until it reach the layer which material has marked property SHADOW_RECEVER. If material of that layer has also turned on property SHADOW_CASTER, than shadow buffer is "mixed" with shadow of that layer and propagated further until it reach layer with SHADOW_CASTER property turned off where it blends to rendered "surface" of that layer. So materials with marked SHADOW_RECEIVER property without SHADOW_CAST property will blend that shadow buffer from "above" layers into its surface buffer (which can change opacity (alpha) of that layer at those places where shadow is received). However, if SHADOW_CAST is also turned ON at such a layer, than whole shadow buffer is propagated further and actual transparency of surface of that layer is not altered by shadow. |
observer: I have a question on "directionality" (for the lack of a better term and before I try it out): for example, what about the other direction -"subject -> slider"? would not make it sense to change the slider position if the subject's value changed "externally" (eg set in application code)? if that were the case, the subject would be the only link between UI and application disclaimer: I might be missing something fundamental - total LVGL noob here |
@mhaberler It's bidirectional and should work in both ways. If change the slider the subject will be updated. If the subject is updated the slider will be updated too. @djixon |
@kisvegabor that seriously rocks ;) edit: read the code. two callbacks involved.. |
No worries, I have already used the observer in a few project but it's not community approved yet. 🙂 |
observer and animations: what would be the suggested way to run an animation on subject change? a combination of |
You can just the animation in an observer. |
I've added the schedule for the last weeks of v9 to the roadmap: Schedule
|
observers: compass widget adapted to use a subject group for updates |
@mhaberler Very nice! It seems you have used |
it’s just the compass widget from https://github.com/bareboat-necessities/bbn-m5stack-tough.git mutated to use observers: https://github.com/mhaberler/arduino3-playground/blob/lvgl8-observer/test-ui/custom/ui_compass.c it needs polishing (like disable updates when hidden) but works the nice part is: this is completely standalone, no dependencies on specific methods of retrieving values like in the original: https://github.com/bareboat-necessities/bbn-m5stack-tough/blob/main/bbn_m5tough_active_boat/ui_compass.h#L136-L155 so it should be a drop-in: add, instantiate, set subject, done! btw I found observing a subject which accidentally was not initialized produces a hang - maybe there’s a cheap test for the subject beint uninitialized and fail with a message? |
We could easily check |
I would add LV_SUBJECT_TYPE_INVALID as zero, and make LV_SUBJECT_TYPE_NONE > 0 |
Makes sense! Would you be interested in sending a PR with this update? |
yes will do |
I close this issue in favor of #4926 |
See the ROADMAP.
v9 schedule
A large update was merged to
master
which involves API changes as well. You can usemaster
to try out the latest changes but for production we recommend using therelease/v8.3
branch.Below you can see the main changes.
Built in drivers
General API changes
lv_obj_add_event_cb
is renamed tolv_obj_add_event
lv_disp_...
is renamed tolv_display_...
lv_btn_...
is renamed tolv_button_...
lv_btnmatrix_...
is renamed tolv_buttonmatrix_...
lv_img_...
is renamed tolv_image_...
zoom
is renamed toscale
angle
is renamed torotation
scr
is renamed toscreen
act
is renamed toactive
del
is renamed todelete
lv_obj_clear_flag
is renamed tolv_obj_remove_flag
lv_obj_clear_state
is renamed tolv_obj_remove_state
New color format management
LV_IMG_CF_...
was removed and was replaced byLV_COLOR_FORMAT_...
LV_COLOR_DEPTH 24
is supported for RGB888 renderingDisplay API
lv_disp_drv_t
andlv_disp_draw_buf_t
was removedLV_DISPLAY_RENDER_MODE_PARTIAL
This way the buffers can be smaller then the display to save RAM. At least 1/10 sceen size buffer(s) are recommended.LV_DISPLAY_RENDER_MODE_DIRECT
The buffer(s) has to be screen sized and LVGL will render into the correct location of the buffer. This way the buffer always contain the whole image. With 2 buffers the buffers' content are kept in sync automatically. (Old v7 behaviour)LV_DISPLAY_RENDER_MODE_FULL
Just always redraw the whole screenlv_display_add_event()
monitor_cb
is removed and aLV_EVENT_RENDER_READY
event is fired insteadlv_layer_bottom()
is added where any color can be set or any widget can be created.Color format of the display
lv_display_set_color_format(disp, LV_COLOR_FORMAT_...)
LV_COLOR_16_SWAP
is removed andlv_display_set_color_format(disp, LV_COLOR_FORMAT_NATIVE_REVERSED)
can be used insteaddisp_drv.scr_transp
was removed andlv_display_set_color_format(disp, LV_COLOR_FORMAT_NATIVE_ALPHA)
can be used insteadset_px_cb
is removed, you can add a custom color format converter withdisp->draw_ctx->buffer_convert = my_converter;
. As a reference see the built-in converterIndev API
lv_indev_drv_t
was removed and an input device can be created like this:Others
lv_msg
is removed and replaced by lv_observerlv_chart
ticks support was removed, lv_scale can be used insteadThe parallel rendering update is also merged to master on 2023.06.05.
lv_conf.h
was changed a lot too so don't forget to update it fromlv_conf_template.h
. You can read more about the parallel rendering changes here.I'll update this post if there will new changes or if something important is missing.
The text was updated successfully, but these errors were encountered: