Hello everyone,

So there is an ongoing thread about what to do after we are done
making EFL easier to use... but I guess it would be nice to share a
bit of what we think it means and what we plan for this year. There is
a meta ticket to track all of that :
https://phab.enlightenment.org/T5301 , but let's discuss a bit more
the global goal here.

So for a year now we have been working on a new set of API for EFL, in
the idea of first refactoring our API and if possible making it
easier. This year, we are going to try focusing on making it easier to
use. But first, what does that means and for whom is it going to be
easier.

EFL has a lot of different developers with different needs and goal
using it. Here are my take on it, please if you do have other opinion
on this, share now ! It is the right time.

- The community/open source developers which has coallesced around
Enlightenment, Terminology and EFL over the year. Trying to get
something that look neat, is fast and that they enjoy working on. If
they stop having fun with EFL, they will move to something else. I
think that making it easy for them here, is quite different from other
category. There is little designer involved in the community per
application, but some are trying to provide coherent theme globally.
Everyone have there language of choice and won't have fun being forced
on something else. They want to get usable nice looking result quick.
Ideally something that integrate together nicely. Most of the
developers would like a more direct link to developers to push there
application.

- Embedded device developers, they usually write a single EFL
application that take over the entire screen. It is usually designed
by a professional and performance matters. They would like to spend
less time writing the UI part and mostly focus on the business part of
there application. Also they would like to have better confidance in
updating EFL.

- Application developers, in the branded proprietary sense of the
term. This people usually try to replicate the same visual feeling
accross different platform. They usually have little time and money to
learn anything on the platform and expect something very close to what
Android, iOS and Microsoft provide.

The first point here, is that we want to address the need of this 3
differents population. It is obvious from this description that Edje
isn't an answer for everyone.

For the community Edje is kind of ok, but writing a theme is way to
complex, time consuming and lack of documentation on what needs to be
provided. For embedded target, as Gustavo describe it, it does the job
quite fine. Finally for application developers, it doesn't work at
all. Does way to much for there needs and is way to different from
what they know.

To address this, we have come up with a serie of idea. The first thing
is that we should have a small set of defined style that have a
defined API (text part, message, signals). As each style is linked
with an elementary widget, the idea is to add a style section to .eo
file that provide the needed description and would generate a C
function dedicated to that style. There is a ticket for this at
https://phab.enlightenment.org/T5307 that will track the discussion on
how to do so. This should help the community by documenting a minimal
theme.

To further help application developers, we are going to add more use
of efl part and also document it's use per elementary widget.
Basically a button would have a background part (accessible with
efl_part(button, "bg")) that return a class that allow to directly
modify a few aspect of the theme like color and background picture.
This helper class will be available accross as many widget as possible
to make it easier to do simple branded apllication like other platform
provide. There is again a few ticket following this task, the main one
to discuss this idea would be https://phab.enlightenment.org/T5306 .
Another helper we are going to provide to application developers is an
animation framework. Something kind of like efx, but with Eo classes
basically (The ticket is there https://phab.enlightenment.org/T5337).
Finally something that we are not addressing yet, but would I think
make sense, is some way to describe simple layout (Like Android XML
file or Microsoft XAML). With Eo property it becomes quite easy to
automatically generate code for this.

For embedded developers, we do still have idea coming into edje to
improve its usability. One of the main idea is to introduce vector
graphic support (With limited SVG and maybe Android VG format
importer). The second idea that will also benefit for everyone is to
finally introduce a modern MVC framework.

We have been iterating over a MVC design for more than a year now. I
think we are nearing a design that start to look good. The funny part
is when I was trying to find some presentation to explain people about
MVC and the difference with what we were doing, I stumble on Microsoft
MVVM design pattern which is pretty close to the design we have
selected. So we will rename the work we have done from ProxyModel to
ViewModel to use the same naming convention as everyone else.

The main difference between MVC and MVVM is that it allow the
definition of a clean interface between View and Model. There isn't
really a ProxyModel or ViewModel interface, as they really are just a
Model that get data from another Model and interpret them into what
the View will actually display. This means you can easily reuse Model
and that you can test your Proxy/ViewModel without connecting it to an
actual View.

And last very nice benefit, I think, is that you are defining a
"connection" for each parameter of your widget. So to connect a View
with a Model, you are only setting the model and indicating which
property to fetch on the model. No need to deal with callback in many
case ! For an example (which is broken at the moment) of the idea you
can look at layout_model_connect.c in efl elementary example.

The most complex work will now be in writing this Proxy or View Model.
This is something we have to work on to make it easier. Most likely,
we have to make creation and manipulation of Eina_Value together with
Promise/Futur easier (And obviously Promise/Futur need to be finally
fixed, there is a ticket for this
https://phab.enlightenment.org/T5310). There are like 3 or more
different ticket related to MVVM in the top ticket, not to sure where
any discussion should happen, so maybe here is best.

Finally we are going to reduce the amount of widget we do support
(This should help people writing theme) and focus on a more useful set
of them (Merging feature when it makes sense and so on). There is way
too much ticket for this discussion, but they are all under that top
ticket. If there is anything specific to discuss, it should be on
those ticket, otherwise here.

There is a lot of work. Really. It is huge ! Also as pointed out in
other thread, until we try this new API, we won't know if we have
achieved the goal we have in mind. So as we roll this new API in, just
trying to use them in a branch and giving feedback will help.

Have fun !
-- 
Cedric BAIL

------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
enlightenment-devel mailing list
enlightenment-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel

Reply via email to