I've created a simple ewl_label that does whats being talked about here. Shoudl 
be fully themeable. The theme only exists for default at the moment, and it 
isn't great.

If I missed the mark, let me know. At least the infrastructre is in there....

dan




> Yep, text should be more themeable than it is, so much to do, so little time.
> 
> Ok, a little talking on IRC with dj2 and some thinking on this over
> lunch has me leaning towards doing a combination of the things we've
> discussed.
> 
> I'm thinking we should resurrect ewl_label to use as we discussed with
> the part text. There never was a clear distinction between what was a
> label and what was text before, just single-line vs multi-line. I
> think we could define a label as a widget that is completely themed
> from Edje and text as a widget that is more programmatically
> controlled. This would allow you to create an edje with a text part,
> set the fill policy on the ewl_object to FILL, and then let the edje
> theme take care of internal alignment in the area EWL hands it.
> 
> We may still want to create the ewl_widget_text_set,
> ewl_widget_part_text_set API, any themed object could potentially have
> text that the programmer wants to set. We're also providing other
> mechanisms for the programmer to setup their own edje's so this goes
> hand-in-hand with that. If we do this, the ewl_label could just use
> this API for setting it's own text.
> 
> On 6/15/05, Simon Poole <[EMAIL PROTECTED]> wrote:
> > Nathan Ingersoll wrote:
> > > Well, you are not completely restricted to the global theme entries,
> > > as you can use /button/text/* as the keys to reference a text object
> > > nested inside of a button, but this doesn't allow for dynamic theming.
> > Yes.  It also also doesn't use the Ewl_Button's label text: it uses the
> > text specified in the Edje.
> > 
> > > It's not really an inconsistent case as widgets are creating evas
> > > objects for their display, but ewl_widget just handles the common case
> > > (edje) automatically. I don't think this text situation is ideal and
> > > your overall assessment is correct.
> > Fair point. I was thinking of Edje as not the common case, but (ideally)
> > the only case.  Not sure how valid that is.
> > 
> > > The fix kind of depends on what you are trying to accomplish. If you
> > > want to position the label inside of a button using Edje, then that
> > > text part really needs to be part of the same Edje as the button. EWL
> > > is focused on positioning widgets and doesn't provide a mechanism for
> > > Edje to work outside of it's own parts/programs collection. It would
> > > be nice if Edje contained an API for manipulating the Textblock and
> > > EWL could just wrap around this for text handling, but that's not
> > > without problems too.
> > What I specifically wanted to do today was create buttons with the
> > following behaviour:
> > 1. Text aligned top-left
> > 2. Font and font-size set in Edje
> > 3. Edje program grays out text when button is disabled
> > 4. Edje program highlights text on mouse down
> > 
> > IMHO these are all attributes of the button's theme, and therefore
> > *should* be done through the edje.
> > 
> > > One issue that complicates things is the fact the realized/unrealized
> > > states widgets can have. If a widget is realized, then unrealized,
> > > then realized again, any information that was kept exclusively in the
> > > edje is lost. This is a rare case right now, but last week I started
> > > some code to do object caching so we only have Edje's for the maximum
> > > number of items visible at a given time. This makes it more important
> > > that an EWL widget can rebuild it's current Edje state at arbitrary
> > > times. If we make a special case of setting text in an Edje, then that
> > > information could potentially get lost.
> > >
> > > Here's one possible solution, expand the ewl_widget API to include
> > > ewl_widget_text_part_set(Ewl_Widget *w, char *part, char *text) and
> > > ewl_widget_text_set(Ewl_Widget *w, char *text). The part set would
> > > create a hash table in the widget on first call that would contain a
> > > hash of part name/text pairs. Whenever the Edje object gets setup
> > > again, the hash table is iterated over and the text applied to the
> > > Edje. The text_set would wrap around the text_part_set, but would look
> > > up the part name in the theme with a key like /button/text. This would
> > > allow any Edje to contain text, and the application programmer to take
> > > advantage of it if they want the more dynamic theme possibilities.
> > 
> > I've knocked up a quick and dirty simplified Ewl_Button that does use
> > the Edje theme for its text.  Here's an excerpt:
> > 
> > static void
> > _apply_label(Rsd_Ewl_Button *b)
> > {
> >    Ewl_Widget *w = EWL_WIDGET(b);
> >    if (!w->theme_object) return;
> > 
> >    if (b->label) edje_object_part_text_set(w->theme_object, "text",
> > b->label);
> >    else edje_object_part_text_set(w->theme_object, "text", "");
> > }
> > 
> > void
> > rsd_ewl_button_realize_cb(Ewl_Widget *w, void *ev_data, void *user_data)
> > {
> >    _apply_label(RSD_EWL_BUTTON(w));
> > }
> > 
> > void
> > rsd_ewl_button_label_set(Rsd_Ewl_Button * b, char *l)
> > {
> >    if (b->label) free(b->label);
> >    if (l) b->label = strdup(l);
> >    else b->label = NULL;
> > 
> >    if (REALIZED(b)) _apply_label(b);
> > }
> > 
> > This is essentially doing what you're saying, so it's a basic
> > proof-of-concept, and it works.  As you rightly say, this stuff should
> > really be in ewl_widget, which would make it generic to any widget. And
> > ewl_widget_text_set(...) would allow the theme designer to specify
> > exactly which text parts should be under EWL's control.
> > 
> > >  It
> > > does complicate the API though, and it also, as you said, takes the
> > > text outside the EWL layout algorithms.
> > 
> > You're right.  Supporting two completely orthogonal ways of adding text
> > to a button would be a little confusing.
> > 
> > And yes, my button example above is no longer a Ewl_Container, because
> > the text is no longer part of Ewl's layout algorithm so it just wouldn't
> > make sense.
> > 
> > > I've resigned myself to reworking the editing system so that EWL
> > > contains all text/formatting and just pushes it out to the textblock
> > > for display. While we have discussed creating text in edje's, I have
> > > leaned towards keeping text handling as unified as possible, as single
> > > line text is just a subset of multi-line text and an entry is text
> > > that can be changed through input.
> > >
> > > After all of that, it comes down to "I don't know". There are a fair
> > > number of options depending on the level of work and what you're
> > > willing to give up. The ideal solution from what I've looked at so far
> > > would be textblock support in Edje, and then finish the EWL text/entry
> > > to push out text display through that API, and have the API provide a
> > > set of coord/position mapping functions.
> > >
> > > Thoughts?
> > 
> > Don't know either!  I certainly approached EWL expecting the text to be
> > themeable, and I still think this is a reasonable expectation.
> > 
> > Even if some widgets cannot be explicitly defined by Edje because
> > they're a fixed collection of other widgets (e.g. ewl_fileselector), I
> > would probably still expect the basic building blocks to be themeable --
> > including text.
> > 
> > If there is a route which means all text in EWL is always using the Edje
> > representation, then I personally think that is way preferable.  Do you
> > agree with this line of thinking?
> > 
> > Trouble is, I think putting textblock support in Edje lies beyond my
> > understanding of EFL at the moment.  I can imagine it would be a lot of
> > work.
> > 
> > I'm happy to create a patch to provide the ewl_widget_text_part_set(...)
> > ewl_widget_text_set(...) functions if you think that is a sensible next
> > step (given that it probably *will* totally confuse the API!).
> > 
> > --
> > Simon Poole
> > www.appliancestudio.com
> > 
> >
> 
> 
> -------------------------------------------------------
> SF.Net email is sponsored by: Discover Easy Linux Migration Strategies
> from IBM. Find simple to follow Roadmaps, straightforward articles,
> informative Webcasts and more! Get everything you need to get up to
> speed, fast. http://ads.osdn.com/?ad_idt77&alloc_id492&op=click
> _______________________________________________
> enlightenment-devel mailing list
> enlightenment-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/enlightenment-devel
> 






-------------------------------------------------------
SF.Net email is sponsored by: Discover Easy Linux Migration Strategies
from IBM. Find simple to follow Roadmaps, straightforward articles,
informative Webcasts and more! Get everything you need to get up to
speed, fast. http://ads.osdn.com/?ad_idt77&alloc_id492&op=click
_______________________________________________
enlightenment-devel mailing list
enlightenment-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel

Reply via email to