[cairo] Porting GTK+ to use Cairo
spitzak at d2.com
Tue May 11 13:08:01 PDT 2004
On Tuesday 11 May 2004 10:00 am, Jost Boekemeier wrote:
> * Not cairo related, but what do you think is the best way to route
> events to the widgets and to associate a cursor with each widget? I
> think I need a "event grid" on the server-side, i.e. a grid composed of
> input-only windows. Or are there cheaper structures available on the
> server side that provide such a functionality? But maybe this "event
> grid" is nonsense, see below.
> * gtk related: Why do most gtk widgets ask for pointer motion events? I
> can understand why someone wants button[x] motion events but why does
> the menu or menuitem for example want motion events when no button is
> pressed? I think the only reason is that X has no "pointer moved less
> than delta pixels, send tooltip event" so one has to implement this on
> the client-side. Or are there other reasons?
> If we want the x/y position for most of the widgets anyway, we don't
> need an "event grid", we can just select pointer motion events for the
> top-level window to track the pointer -- setting the cursor for the
> current position would require a message back to the server, but that's
It is certainly been my experience that it is *MUCH* cheaper to just watch
the mouse move around than to communicate (and update) the location of every
widget to the server. In addition, you can make the mouse respond exactly the
way you want, and not have to put up with bugs and mistakes in the windowing
system, and there are no synchronization bugs. Portability is much easier
this way. For these reasons GTK, Qt, and FLTK all use server windows only for
the outermost framed window, no information about internal widgets are sent
to the server. This is unlike Motif and Xt and most older toolkits.
Just set the cursor for the entire window as you detect the mouse crossing
the widget boundaries. This is provably more efficient then sending a cursor
for every widget.
Most arguments for sending the widgets to the server assumme a server that
also does all the drawing and the majority of the event handling for widgets.
If this is not true then sending any information about the widgets can only
increase communication overhead.
,~,~,~,~ ~ ~ ~ ~
/\_ _|_========___ Bill Spitzak
~~~/\/\\~~~~~~\____________/~~~~~~~~ spitzak at d2.com
More information about the cairo