Re: [AD] user-defined events

[ Thread Index | Date Index | More lists.liballeg.org/allegro-developers Archives ]


On Friday 26 September 2008, Evert Glebbeek wrote:
> On 26 Sep 2008, at 20:58, Peter Wang wrote:
> > Here is a proposal for allowing user-defined events.
>
> Looks ok to me.
>
> > Do we need an ALLEGRO_USER_EVENT_SOURCE?
>
> I don't know. What would be the benefit? Maybe it'd just be a
> cosmetic thing?
>
> > Aside: I'm considering simplifying some of the internals (again) by
> > allocating events inside event *queues* instead of event sources.
> > So an
> > event source registered with two queues would create two copies of
> > each
> > event, one in each queue.  The upside is that we get rid of some ugly
> > reference counting, which is only needed for such a rare situation.
>
> I actually do that in the program I'm working on: when exiting it
> pops up a window asking whether you want to quit or not. That window
> uses its own event queue. I think I only did that because I was
> playing around anyway, I could have just reused the original queue.
> If it makes the code simpler, go for it!
>
> > You wouldn't need al_allocate_user_event() then. Instead, you'd
> > allocate
> > an event on the stack and fill it in.  It would be copied into each
> > event queue when you call al_emit_user_event().
>
> I think that makes sense, actually. However, it does sound like it
> might require a lot of (fairly simple) changes throughout the library?
>
> > +/* XXX Currently we have no formal way to allocate event type
> > numbers. */
> > +#define MY_EVENT_TYPE   1025
>
> True, and we probably want one. Even if we define
> ALLEGRO_EVENT_ABOVE_HERE_FREE_FOR_USERS (or something like that),
> it's possible addons will want to use a range of event types as well.
>
> How about the following: we make a function where a user can request
> the free "base number" for a range of events (say, 10), eg,
> int my_first_event = al_get_event_range(10);
> The user can then freely use numbers in the range my_first_event+0
> through my_first_event+9. The only downside is that users can't use a
> switch statement to identify their events.
>
> > +typedef struct ALLEGRO_USER_EVENT
> > +{
> > +   _AL_EVENT_HEADER(struct ALLEGRO_EVENT_SOURCE);
> > +   void *data1;
> > +   void *data2;
> > +   void *data3;
> > +   void *data4;
> > +} ALLEGRO_USER_EVENT;
>
> I know I said providing the user with one pointer would be fine, so I
> can't reasonably complain when you give them 4, but I do think the
> common case might be that you want one or two integers to pass
> informmation along. Maybe we can have two of those as well?

Or clone some of the extra variables that the old GUI code passes along.

> Evert
>

-- 
Thomas Fjellstrom
tfjellstrom@xxxxxxxxxx




Mail converted by MHonArc 2.6.19+ http://listengine.tuxfamily.org/