Hi, thank you for good questions.
Q1: You are partly right, but x and y are the top-left values of the query rect. w and h have hard coded values right now, but could potentially be adapted to the application context, distance from screen, DPI settings etc.
Q2: You are right, if you want to use the GazeAware or Activatable behavior, you need to update the EyeX Engine with the location of your interactors everytime the engine asks for it (i.e. whenever the user looks nearby your interactors).
Technically it is possible to use the OnGazePointData data stream, but then you need to take care of overlapping windows, hit testing, gaze data filtering, object snapping and input handling yourself. It does not sound so hard, but our experience is that many developers get stuck in details before they have the chance to make any useful interactions. But you are welcome to try 🙂
However, the other great benefit of using the high-level interactions provided by the EyeX Engine is to give a consistent experience to the end user. If you are running an operating system with hundreds of gaze-enabled applications and all of them behave differently, have different ways of filtering data and different key bindings, it will be very confusing for the user. So, using a client-server solution like the EyeX Engine provides enables a standardized way of interacting with the computer using your eyes and is one step towards the ultimate goal: integration into operating systems.