#include <stdio.h>
#include <inttypes.h>
#include <interaction_lib/interaction_lib_c.h>
typedef struct focus_context
{
IL_InteractorId id;
size_t count;
} focus_context;
void gaze_focus_callback(IL_GazeFocusEvent evt, void* context)
{
printf("Interactor: %" PRIu64 ", focused: %s, timestamp: %" PRId64 " us\n",
evt.id,
evt.hasFocus ? "true" : "false",
evt.timestamp_us);
if (evt.hasFocus)
{
focus_context* focus = context;
focus->count = focus->id == evt.id ? focus->count + 1 : 1;
focus->id = evt.id;
}
}
int main(int argc, char* argv[])
{
IL_Context* intlib = NULL;
IL_CreateInteractionLib(&intlib, IL_FieldOfUse_Interactive);
const float width = 2560.0f;
const float height = 1440.0f;
const float offset = 0.0f;
IL_CoordinateTransformAddOrUpdateDisplayArea(intlib, width, height, 0, 0, 0, 0, NULL);
IL_CoordinateTransformSetOriginOffset(intlib, offset, offset);
const IL_InteractorId idA = 0;
const IL_InteractorId idB = 1;
const IL_InteractorId idC = 2;
const IL_InteractorId idD = 3;
const float size = 500.0f;
const IL_Rectangle rectA = { 0, 0, size, size };
const IL_Rectangle rectB = { width - size, 0, size, size };
const IL_Rectangle rectC = { 0, height - size, size, size };
const IL_Rectangle rectD = { width - size, height - size, size, size };
const float z = 0.0f;
IL_BeginInteractorUpdates(intlib);
IL_AddOrUpdateInteractor(intlib, idA, rectA, z);
IL_AddOrUpdateInteractor(intlib, idB, rectB, z);
IL_AddOrUpdateInteractor(intlib, idC, rectC, z);
IL_AddOrUpdateInteractor(intlib, idD, rectD, z);
IL_CommitInteractorUpdates(intlib);
focus_context focus = { IL_EMPTYINTERACTORID, 0 };
IL_SubscribeGazeFocusEvents(intlib, gaze_focus_callback, &focus);
printf("Starting interaction library update loop.\n");
const size_t max_focus_count = 3;
while (focus.count < max_focus_count)
{
IL_WaitAndUpdate(intlib, 1000);
}
printf("Interactor %" PRIu64 " got focused %zu times\n", focus.id, focus.count);
IL_DestroyInteractionLib(intlib);
return 0;
}