I want to make a circle in Gtk GLArea. Which can be moved with the help of the mouse pointer. Here is a script, on which i want to draw the movable circles. Can anyone tell me how to do this?
//gcc $( pkg-config –cflags gtk4 ) -o bb glTriangle_gtk4.c $( pkg-config –libs gtk4 epoxy ) -lm
#include <epoxy/gl.h>
#include <epoxy/glx.h>
#include <gtk/gtk.h>
float xx, yy;
static void on_realize(GtkGLArea *area) {
gtk_gl_area_make_current (area);
if (gtk_gl_area_get_error (area) != NULL)
return;
}
static gboolean
on_render(GtkGLArea *area, GdkGLContext *context) {
glClearColor (0, 0, 0, 0);
glClear (GL_COLOR_BUFFER_BIT);
/*draw circle ?*/
return TRUE;
}
void pointer_motion_event (GtkEventController *gesture,
gdouble x,
gdouble y,
gpointer user_data)
{
GdkModifierType state = gtk_event_controller_get_current_event_state(gesture);
if (state & GDK_BUTTON1_MASK) {
g_print ("mouse pointer %0.0f %0.0fn", x, y);
xx = (float)x;
yy = (float)y;
}
}
static void
activate (GtkApplication* app,
gpointer user_data)
{
GtkWidget *window;
window = gtk_application_window_new (app);
gtk_window_set_title (GTK_WINDOW (window), "gtkGL");
gtk_window_set_default_size (GTK_WINDOW (window), 415, 300);
GtkWidget *area = gtk_gl_area_new ();
gtk_window_set_child ((GtkWindow *)window, area);
g_signal_connect (area, "realize", G_CALLBACK(on_realize), NULL);
g_signal_connect (area, "render", G_CALLBACK (on_render), NULL);
GtkEventController *gesture_pos;
gesture_pos = gtk_event_controller_motion_new ();
gtk_widget_add_controller (area, (GtkEventController *)gesture_pos);
gtk_event_controller_set_propagation_phase((GtkEventController *)gesture_pos, GTK_PHASE_CAPTURE);
g_signal_connect (gesture_pos, "motion", G_CALLBACK (pointer_motion_event), area);
gtk_window_present (GTK_WINDOW (window));
gtk_widget_show (window);
}
int
main (int argc,
char **argv)
{
GtkApplication *app;
int status;
app = gtk_application_new ("org.gtk.example", G_APPLICATION_DEFAULT_FLAGS);
g_signal_connect (app, "activate", G_CALLBACK (activate), NULL);
status = g_application_run (G_APPLICATION (app), argc, argv);
g_object_unref (app);
return status;
}