New widgets hierarchy on Elementary

It’s been a while since I last posted here, but my work with and for the EFL (Enlightenment Foundation Libraries) has not stopped at all during this time!

The EFL have had a lot more momentum these days, since Tizen 1.0 was launched, having these libraries as important building blocks of the whole architecture of this system.

My current work has been on an important part of that stack — the native widgets library. Note that despite Tizen 1.0 being all about web apps, future releases will open up for native applications, as it was announced at the last Tizen Developer Conference, which took place at San Francisco, California.

I had the chance to attend to this Tizen conference myself, thanks to my employer ProFUSION Embedded Systems. In our stand, people were able to know our services and see, live, lots of demonstrations of native Tizen applications with rich UIs. The beauty of those UIs were made possible in great part by the use of Elementary.

Elementary is a nice widget set library, which grew fast to the current state where we got lots of widgets and nice UI-infrastructure tools. You can have an idea of the library by looking at its documentation web page.

One of the drawbacks of Elementary, because it grew that fast, is that it had no notion of widget inheritance and code reuse on the widgets base — all of them where flat, inheriting from a same internal “widget” class.

My current work has been to rework all of Elementary internals, so that we create an intelligent widget inheritance schema. I had to analyse the purpose and behavior of each widget in order to categorize them and come up with class patterns.

With that, we aim to gain a lot of code reuse and ease of maintainability. Besides, we can use commonly namespaced API calls to act on widgets belonging to a same class. What we had previously was a messy “hooks” system, in which the developer of a widget had to hook-up the widget to whichever feature it would support, and all the features were exposed and accessed in the API via general elm_object_<feature>() calls. Those would work on widgets that supported them and fail silently on the others. Now we’ll be much cleaner on what each widget supports, in syntax too.

In a not distant future, we’ll have a definitive way (present on Elementary’s API) to extend and create widgets by Elementary users, at run time. My work already provides that, but the API on creating new widgets is still subject to changes — consider it unstable.

The current state of my work on that hierarchy can be seen on the following picture:

I’ve been working hard to have all of the missing widgets (which are few) on this picture too. If you have any suggestions or doubts on this work, just ping me at freenode (“glima”) or email me. I hope you all enjoy the fruits of it 🙂

Finally, I must say this work on Elementary is being sponsored by Samsung Electronics. Thank you for your great effort on Linux and Tizen 🙂


Leave a comment

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.