Bilal Elmoussaoui 72c2d8913e clutter: Drop static colors
There is literally zero reasons nowadays to still provide the tango color
palette as part of the Clutter API. End users of Mutter can define the
colors on their side if they want to.

The change simplifies https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3544

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3588>
2024-02-16 10:24:24 +00:00

235 lines
6.5 KiB
C

#include <stdlib.h>
#include <gmodule.h>
#include <clutter/clutter.h>
#include "test-utils.h"
#include "tests/clutter-test-utils.h"
typedef struct {
ClutterActor *stage;
GHashTable *devices;
} TestDevicesApp;
int
test_devices_main (int argc, char **argv);
static const gchar *
device_type_name (ClutterInputDevice *device)
{
ClutterInputDeviceType d_type;
d_type = clutter_input_device_get_device_type (device);
switch (d_type)
{
case CLUTTER_POINTER_DEVICE:
return "Pointer";
case CLUTTER_KEYBOARD_DEVICE:
return "Keyboard";
case CLUTTER_EXTENSION_DEVICE:
return "Extension";
case CLUTTER_PEN_DEVICE:
return "Pen";
case CLUTTER_ERASER_DEVICE:
return "Eraser";
case CLUTTER_CURSOR_DEVICE:
return "Cursor";
default:
return "Unknown";
}
}
static gboolean
stage_button_event_cb (ClutterActor *actor,
ClutterEvent *event,
TestDevicesApp *app)
{
ClutterInputDevice *device;
ClutterInputDevice *source_device;
ClutterActor *hand = NULL;
device = clutter_event_get_device (event);
source_device = clutter_event_get_source_device (event);
hand = g_hash_table_lookup (app->devices, device);
g_print ("Device: '%s' (type: %s, source: '%s')\n",
clutter_input_device_get_device_name (device),
device_type_name (device),
source_device != device
? clutter_input_device_get_device_name (source_device)
: "<same>");
if (hand != NULL)
{
gfloat event_x, event_y;
clutter_event_get_coords (event, &event_x, &event_y);
clutter_actor_set_position (hand, event_x, event_y);
}
return FALSE;
}
static gboolean
stage_motion_event_cb (ClutterActor *actor,
ClutterEvent *event,
TestDevicesApp *app)
{
ClutterInputDevice *device;
ClutterActor *hand = NULL;
device = clutter_event_get_device (event);
hand = g_hash_table_lookup (app->devices, device);
if (hand != NULL)
{
gfloat event_x, event_y;
clutter_event_get_coords (event, &event_x, &event_y);
clutter_actor_set_position (hand, event_x, event_y);
return TRUE;
}
return FALSE;
}
static void
seat_device_added_cb (ClutterSeat *seat,
ClutterInputDevice *device,
TestDevicesApp *app)
{
ClutterInputDeviceType device_type;
ClutterActor *hand = NULL;
g_print ("got a %s device '%s'\n",
device_type_name (device),
clutter_input_device_get_device_name (device));
device_type = clutter_input_device_get_device_type (device);
if (device_type == CLUTTER_POINTER_DEVICE ||
device_type == CLUTTER_PEN_DEVICE ||
device_type == CLUTTER_POINTER_DEVICE)
{
g_print ("*** enabling device '%s' ***\n",
clutter_input_device_get_device_name (device));
hand = clutter_test_utils_create_texture_from_file (TESTS_DATADIR
G_DIR_SEPARATOR_S
"redhand.png",
NULL);
g_hash_table_insert (app->devices, device, hand);
clutter_actor_add_child (app->stage, hand);
}
}
static void
seat_device_removed_cb (ClutterSeat *seat,
ClutterInputDevice *device,
TestDevicesApp *app)
{
ClutterInputDeviceType device_type;
ClutterActor *hand = NULL;
g_print ("removed a %s device '%s'\n",
device_type_name (device),
clutter_input_device_get_device_name (device));
device_type = clutter_input_device_get_device_type (device);
if (device_type == CLUTTER_POINTER_DEVICE ||
device_type == CLUTTER_PEN_DEVICE ||
device_type == CLUTTER_POINTER_DEVICE)
{
hand = g_hash_table_lookup (app->devices, device);
if (hand != NULL)
clutter_actor_add_child (app->stage, hand);
g_hash_table_remove (app->devices, device);
}
}
G_MODULE_EXPORT int
test_devices_main (int argc, char **argv)
{
ClutterActor *stage;
TestDevicesApp *app;
ClutterSeat *seat;
GList *stage_devices, *l;
clutter_test_init (&argc, &argv);
app = g_new0 (TestDevicesApp, 1);
app->devices = g_hash_table_new (g_direct_hash, g_direct_equal) ;
stage = clutter_test_get_stage ();
clutter_actor_set_background_color (stage, &CLUTTER_COLOR_INIT (114, 159, 207, 255));
clutter_stage_set_title (CLUTTER_STAGE (stage), "Devices");
g_signal_connect (stage,
"destroy", G_CALLBACK (clutter_test_quit),
NULL);
g_signal_connect (stage,
"motion-event", G_CALLBACK (stage_motion_event_cb),
app);
g_signal_connect (stage,
"button-press-event", G_CALLBACK (stage_button_event_cb),
app);
app->stage = stage;
clutter_actor_show (stage);
seat = clutter_backend_get_default_seat (clutter_get_default_backend ());
g_signal_connect (seat,
"device-added", G_CALLBACK (seat_device_added_cb),
app);
g_signal_connect (seat,
"device-removed", G_CALLBACK (seat_device_removed_cb),
app);
stage_devices = clutter_seat_list_devices (seat);
if (stage_devices == NULL)
g_error ("No input devices found.");
for (l = stage_devices; l != NULL; l = l->next)
{
ClutterInputDevice *device = l->data;
ClutterInputDeviceType device_type;
ClutterActor *hand = NULL;
g_print ("got a %s device '%s'\n",
device_type_name (device),
clutter_input_device_get_device_name (device));
device_type = clutter_input_device_get_device_type (device);
if (device_type == CLUTTER_POINTER_DEVICE ||
device_type == CLUTTER_PEN_DEVICE ||
device_type == CLUTTER_POINTER_DEVICE)
{
g_print ("*** enabling device '%s' ***\n",
clutter_input_device_get_device_name (device));
hand = clutter_test_utils_create_texture_from_file (TESTS_DATADIR
G_DIR_SEPARATOR_S
"redhand.png",
NULL);
g_hash_table_insert (app->devices, device, hand);
clutter_actor_add_child (stage, hand);
}
}
g_list_free (stage_devices);
clutter_test_main ();
return EXIT_SUCCESS;
}