As we're moving towards EFL 2 and the EO API is being used instead of the legacy API, the actual theme API also needs to be modified to implement the new features in EO. And remove the unused features from legacy. So, in order to make it "simple" we may want to keep the same code for most widgets, but use different EDC groups to back EO vs. legacy objects.
This means that an application using EO API will not be using an old theme, and may even warn the user if the theme is too old. It should work, but may look terrible (eg. custom theme is white but new default theme is mostly black: your efl_add button is then black).
Thus, we should:
1. Create a new default-new.edj file. Make elementary load this file as well as default.edj.
2. Create new groups for the EO widgets, eg. "efl/button/default". All group, part, signal, message, text class, color class, and size class names need to match this "efl/" pattern.
3. Add if () in the C code of the widgets to switch between EO and Legacy strings. This will likely be doable with macros or simple get() functions.
4. Make extensive use of subgroups and higher level Edje features to design the widgets. See also T5716.
We might only need to support default styles at first, as except genlist most other widgets have only a single style //that is really used//. More styles can be added later. Genlist is no more in EO (replaced by an MVVM-backed list).