Connect to draw instead of expose events

This commit is contained in:
Paul Dicker
2025-04-02 19:03:46 +02:00
committed by Stéphane Lesimple
parent e75d73c74a
commit 6c88a55600
11 changed files with 44 additions and 75 deletions

View File

@@ -233,7 +233,7 @@ void GuiFreeLabelWithOnlineHelp(LabelWithOnlineHelp *lwoh)
* Add a paragraph of text to the help window
*/
static gboolean wrapper_fix_cb(GtkWidget *widget, GdkEventExpose *event, gpointer data)
static gboolean wrapper_fix_cb(GtkWidget *widget, cairo_t *cr, gpointer data)
{ int *last_width = (int*)data;
GtkAllocation a = {0};
gtk_widget_get_allocation(widget, &a);
@@ -276,7 +276,7 @@ void GuiAddHelpParagraph(LabelWithOnlineHelp *lwoh, char *format, ...)
which is, well, stupid. */
gtk_label_set_line_wrap(GTK_LABEL(label), TRUE);
g_signal_connect(label, "expose_event", G_CALLBACK(wrapper_fix_cb), get_new_int(lwoh));
g_signal_connect(label, "draw", G_CALLBACK(wrapper_fix_cb), get_new_int(lwoh));
}
/*
@@ -314,7 +314,7 @@ void GuiAddHelpListItem(LabelWithOnlineHelp *lwoh, char *format, ...)
which is, well, stupid. */
gtk_label_set_line_wrap(GTK_LABEL(label), TRUE);
g_signal_connect(label, "expose_event", G_CALLBACK(wrapper_fix_cb), get_new_int(lwoh));
g_signal_connect(label, "draw", G_CALLBACK(wrapper_fix_cb), get_new_int(lwoh));
}
/*

View File

@@ -591,9 +591,9 @@ static void render_sector(cairo_t *cr, raw_editor_context *rec)
}
}
/* Expose event handler */
/* Draw event handler */
static gboolean expose_cb(GtkWidget *widget, GdkEventExpose *event, gpointer data)
static gboolean draw_cb(GtkWidget *widget, cairo_t *cr, gpointer data)
{ raw_editor_context *rec = Closure->rawEditorContext;
if(!rec->layout)
@@ -601,11 +601,6 @@ static gboolean expose_cb(GtkWidget *widget, GdkEventExpose *event, gpointer dat
calculate_geometry(rec);
}
if(event->count) /* Exposure compression */
return TRUE;
cairo_t *cr = gdk_cairo_create(GDK_DRAWABLE(gtk_widget_get_window(widget)));
evaluate_vectors(rec);
render_sector(cr, rec);
@@ -1086,7 +1081,7 @@ void GuiCreateRawEditor(void)
rec->drawingArea = gtk_drawing_area_new();
gtk_widget_add_events(rec->drawingArea, GDK_BUTTON_PRESS_MASK);
gtk_box_pack_start(GTK_BOX(hbox), rec->drawingArea, TRUE, TRUE, 0);
g_signal_connect(G_OBJECT(rec->drawingArea), "expose_event", G_CALLBACK(expose_cb), NULL);
g_signal_connect(G_OBJECT(rec->drawingArea), "draw", G_CALLBACK(draw_cb), NULL);
g_signal_connect(G_OBJECT(rec->drawingArea), "button_press_event", G_CALLBACK(button_cb), NULL);
}

View File

@@ -157,14 +157,11 @@ static void update_geometry(GtkWidget *widget)
Closure->readAdaptiveSpiral->my = a.height / 2;
}
/* Expose event handler */
/* Draw event handler */
static gboolean expose_cb(GtkWidget *widget, GdkEventExpose *event, gpointer data)
{ cairo_t *cr = gdk_cairo_create(GDK_DRAWABLE(gtk_widget_get_window(widget)));
static gboolean draw_cb(GtkWidget *widget, cairo_t *cr, gpointer data)
{
GuiSetSpiralWidget(Closure->readAdaptiveSpiral, widget);
if(event->count) /* Exposure compression */
return TRUE;
update_geometry(widget);
redraw_labels(cr, widget, ~0);
@@ -358,7 +355,7 @@ void GuiCreateAdaptiveReadWindow(GtkWidget *parent)
d_area = Closure->readAdaptiveDrawingArea = gtk_drawing_area_new();
gtk_box_pack_start(GTK_BOX(parent), d_area, TRUE, TRUE, 0);
g_signal_connect(G_OBJECT(d_area), "expose_event", G_CALLBACK(expose_cb), NULL);
g_signal_connect(G_OBJECT(d_area), "draw", G_CALLBACK(draw_cb), NULL);
Closure->readAdaptiveSpiral
= GuiCreateSpiral(Closure->grid, Closure->background, 10, 5,

View File

@@ -284,17 +284,16 @@ static void redraw_spiral_labels(cairo_t *cr)
GuiDrawSpiral(cr, Closure->readLinearSpiral);
}
static gboolean expose_curve_cb(GtkWidget *widget, GdkEventExpose *event, gpointer data)
{ cairo_t *cr = gdk_cairo_create(GDK_DRAWABLE(gtk_widget_get_window(widget)));
static gboolean draw_curve_cb(GtkWidget *widget, cairo_t *cr, gpointer data)
{
update_geometry();
redraw_curve(cr);
return TRUE;
}
static gboolean expose_spiral_cb(GtkWidget *widget, GdkEventExpose *event, gpointer data)
{ cairo_t *cr = gdk_cairo_create(GDK_DRAWABLE(gtk_widget_get_window(widget)));
GtkAllocation a = {0};
static gboolean draw_spiral_cb(GtkWidget *widget, cairo_t *cr, gpointer data)
{ GtkAllocation a = {0};
gtk_widget_get_allocation(widget, &a);
GuiSetSpiralWidget(Closure->readLinearSpiral, widget);
@@ -371,13 +370,13 @@ void GuiCreateLinearReadWindow(GtkWidget *parent)
curve = Closure->readLinearCurveArea = gtk_drawing_area_new();
gtk_box_pack_start(GTK_BOX(hbox), curve, TRUE, TRUE, 0);
g_signal_connect(G_OBJECT(curve), "expose_event", G_CALLBACK(expose_curve_cb), NULL);
g_signal_connect(G_OBJECT(curve), "draw", G_CALLBACK(draw_curve_cb), NULL);
Closure->readLinearSpiral = GuiCreateSpiral(Closure->grid, Closure->background, 10, 5, 1000);
spiral = gtk_drawing_area_new();
gtk_widget_set_size_request(spiral, Closure->readLinearSpiral->diameter + 20, -1);
gtk_box_pack_start(GTK_BOX(hbox), spiral, FALSE, FALSE, 0);
g_signal_connect(G_OBJECT(spiral), "expose_event", G_CALLBACK(expose_spiral_cb), NULL);
g_signal_connect(G_OBJECT(spiral), "draw", G_CALLBACK(draw_spiral_cb), NULL);
notebook = Closure->readLinearNotebook = gtk_notebook_new();
gtk_notebook_set_show_tabs(GTK_NOTEBOOK(notebook), FALSE);

View File

@@ -138,12 +138,11 @@ static void redraw_spiral(cairo_t *cr, RS01Widgets *wl)
}
/*
* expose event handler for the spiral
* Draw event handler for the spiral
*/
static gboolean expose_cb(GtkWidget *widget, GdkEventExpose *event, gpointer data)
{ cairo_t *cr = gdk_cairo_create(GDK_DRAWABLE(gtk_widget_get_window(widget)));
RS01Widgets *wl = (RS01Widgets*)data;
static gboolean draw_cb(GtkWidget *widget, cairo_t *cr, gpointer data)
{ RS01Widgets *wl = (RS01Widgets*)data;
GtkAllocation a = {0};
gtk_widget_get_allocation(widget, &a);
int w,h,size;
@@ -161,10 +160,6 @@ static gboolean expose_cb(GtkWidget *widget, GdkEventExpose *event, gpointer dat
wl->cmpSpiral->mx = a.width / 2;
wl->cmpSpiral->my = (wl->cmpSpiral->diameter + a.height - size)/2;
if(event->count) /* Exposure compression */
{ return TRUE;
}
/* Redraw the spiral */
redraw_spiral(cr, wl);
@@ -260,7 +255,7 @@ void CreateRS01VerifyWindow(Method *self, GtkWidget *parent)
d_area = wl->cmpDrawingArea = gtk_drawing_area_new();
gtk_widget_set_size_request(d_area, wl->cmpSpiral->diameter+20, -1);
gtk_container_add(GTK_CONTAINER(frame), d_area);
g_signal_connect(G_OBJECT(d_area), "expose_event", G_CALLBACK(expose_cb), (gpointer)wl);
g_signal_connect(G_OBJECT(d_area), "draw", G_CALLBACK(draw_cb), (gpointer)wl);
/*** Ecc info */

View File

@@ -277,16 +277,11 @@ static void redraw_curve(cairo_t *cr, RS01Widgets *wl)
}
/*
* Expose callback
* Draw callback
*/
static gboolean expose_cb(GtkWidget *widget, GdkEventExpose *event, gpointer data)
{ cairo_t *cr = gdk_cairo_create(GDK_DRAWABLE(gtk_widget_get_window(widget)));
RS01Widgets *wl = (RS01Widgets*)data;
if(event->count) /* Exposure compression */
{ return TRUE;
}
static gboolean draw_cb(GtkWidget *widget, cairo_t *cr, gpointer data)
{ RS01Widgets *wl = (RS01Widgets*)data;
update_geometry(wl);
redraw_curve(cr, wl);
@@ -334,7 +329,7 @@ void CreateRS01FWindow(Method *method, GtkWidget *parent)
d_area = wl->fixDrawingArea = gtk_drawing_area_new();
gtk_box_pack_start(GTK_BOX(parent), d_area, TRUE, TRUE, 0);
g_signal_connect(G_OBJECT (d_area), "expose_event", G_CALLBACK(expose_cb), (gpointer)wl);
g_signal_connect(G_OBJECT (d_area), "draw", G_CALLBACK(draw_cb), (gpointer)wl);
notebook = wl->fixNotebook = gtk_notebook_new();
gtk_notebook_set_show_tabs(GTK_NOTEBOOK(notebook), FALSE);

View File

@@ -131,12 +131,11 @@ static void redraw_spiral(cairo_t *cr, RS02Widgets *wl)
}
/*
* expose event handler for the spiral
* draw event handler for the spiral
*/
static gboolean expose_cb(GtkWidget *widget, GdkEventExpose *event, gpointer data)
{ cairo_t *cr = gdk_cairo_create(GDK_DRAWABLE(gtk_widget_get_window(widget)));
RS02Widgets *wl = (RS02Widgets*)data;
static gboolean draw_cb(GtkWidget *widget, cairo_t *cr, gpointer data)
{ RS02Widgets *wl = (RS02Widgets*)data;
GtkAllocation a = {0};
gtk_widget_get_allocation(widget, &a);
int w,h,size;
@@ -154,8 +153,7 @@ static gboolean expose_cb(GtkWidget *widget, GdkEventExpose *event, gpointer dat
wl->cmpSpiral->mx = a.width / 2;
wl->cmpSpiral->my = (wl->cmpSpiral->diameter + a.height - size)/2;
if(!event->count) /* Exposure compression */
redraw_spiral(cr, wl); /* Redraw the spiral */
redraw_spiral(cr, wl); /* Redraw the spiral */
return TRUE;
}
@@ -254,7 +252,7 @@ void CreateRS02VerifyWindow(Method *self, GtkWidget *parent)
d_area = wl->cmpDrawingArea = gtk_drawing_area_new();
gtk_widget_set_size_request(d_area, wl->cmpSpiral->diameter+20, -1);
gtk_container_add(GTK_CONTAINER(frame), d_area);
g_signal_connect(G_OBJECT(d_area), "expose_event", G_CALLBACK(expose_cb), (gpointer)wl);
g_signal_connect(G_OBJECT(d_area), "draw", G_CALLBACK(draw_cb), (gpointer)wl);
/*** Ecc data info */

View File

@@ -217,15 +217,11 @@ static void redraw_curve(cairo_t *cr, RS02Widgets *wl)
}
/*
* Expose callback
* Draw callback
*/
static gboolean expose_cb(GtkWidget *widget, GdkEventExpose *event, gpointer data)
{ cairo_t *cr = gdk_cairo_create(GDK_DRAWABLE(gtk_widget_get_window(widget)));
RS02Widgets *wl = (RS02Widgets*)data;
if(event->count) /* Exposure compression */
return TRUE;
static gboolean draw_cb(GtkWidget *widget, cairo_t *cr, gpointer data)
{ RS02Widgets *wl = (RS02Widgets*)data;
update_geometry(wl);
redraw_curve(cr, wl);
@@ -275,7 +271,7 @@ void CreateRS02FixWindow(Method *method, GtkWidget *parent)
d_area = wl->fixDrawingArea = gtk_drawing_area_new();
gtk_box_pack_start(GTK_BOX(parent), d_area, TRUE, TRUE, 0);
g_signal_connect(G_OBJECT (d_area), "expose_event", G_CALLBACK(expose_cb), (gpointer)wl);
g_signal_connect(G_OBJECT (d_area), "draw", G_CALLBACK(draw_cb), (gpointer)wl);
notebook = wl->fixNotebook = gtk_notebook_new();
gtk_notebook_set_show_tabs(GTK_NOTEBOOK(notebook), FALSE);

View File

@@ -141,12 +141,11 @@ static void redraw_spiral(cairo_t *cr, RS03Widgets *wl)
}
/*
* expose event handler for the spiral
* Draw event handler for the spiral
*/
static gboolean expose_cb(GtkWidget *widget, GdkEventExpose *event, gpointer data)
{ cairo_t *cr = gdk_cairo_create(GDK_DRAWABLE(gtk_widget_get_window(widget)));
RS03Widgets *wl = (RS03Widgets*)data;
static gboolean draw_cb(GtkWidget *widget, cairo_t *cr, gpointer data)
{ RS03Widgets *wl = (RS03Widgets*)data;
GtkAllocation a = {0};
gtk_widget_get_allocation(widget, &a);
int w,h,size;
@@ -164,8 +163,7 @@ static gboolean expose_cb(GtkWidget *widget, GdkEventExpose *event, gpointer dat
wl->cmpSpiral->mx = a.width / 2;
wl->cmpSpiral->my = (wl->cmpSpiral->diameter + a.height - size)/2;
if(!event->count) /* Exposure compression */
redraw_spiral(cr, wl); /* Redraw the spiral */
redraw_spiral(cr, wl); /* Redraw the spiral */
return TRUE;
}
@@ -273,7 +271,7 @@ void CreateRS03VerifyWindow(Method *self, GtkWidget *parent)
d_area = wl->cmpDrawingArea = gtk_drawing_area_new();
gtk_widget_set_size_request(d_area, wl->cmpSpiral->diameter+20, -1);
gtk_container_add(GTK_CONTAINER(frame), d_area);
g_signal_connect(G_OBJECT(d_area), "expose_event", G_CALLBACK(expose_cb), (gpointer)wl);
g_signal_connect(G_OBJECT(d_area), "draw", G_CALLBACK(draw_cb), (gpointer)wl);
/*** Image info */

View File

@@ -247,15 +247,11 @@ static void redraw_curve(cairo_t *cr, RS03Widgets *wl)
}
/*
* Expose callback
* Draw callback
*/
static gboolean expose_cb(GtkWidget *widget, GdkEventExpose *event, gpointer data)
{ cairo_t *cr = gdk_cairo_create(GDK_DRAWABLE(gtk_widget_get_window(widget)));
RS03Widgets *wl = (RS03Widgets*)data;
if(event->count) /* Exposure compression */
return TRUE;
static gboolean draw_cb(GtkWidget *widget, cairo_t *cr, gpointer data)
{ RS03Widgets *wl = (RS03Widgets*)data;
update_geometry(wl);
redraw_curve(cr, wl);
@@ -306,7 +302,7 @@ void CreateRS03FixWindow(Method *method, GtkWidget *parent)
d_area = wl->fixDrawingArea = gtk_drawing_area_new();
gtk_box_pack_start(GTK_BOX(parent), d_area, TRUE, TRUE, 0);
g_signal_connect(G_OBJECT (d_area), "expose_event", G_CALLBACK(expose_cb), (gpointer)wl);
g_signal_connect(G_OBJECT (d_area), "draw", G_CALLBACK(draw_cb), (gpointer)wl);
notebook = wl->fixNotebook = gtk_notebook_new();
gtk_notebook_set_show_tabs(GTK_NOTEBOOK(notebook), FALSE);

View File

@@ -40,7 +40,7 @@ static void toggle_cb(GtkWidget *widget, gpointer data)
Closure->welcomeMessage = state;
}
static gboolean expose_cb(GtkWidget *widget, GdkEventExpose *event, gpointer data)
static gboolean draw_cb(GtkWidget *widget, cairo_t *cr, gpointer data)
{ GtkWidget *box = (GtkWidget*)data;
if(!Closure->colors_initialized)
@@ -117,7 +117,7 @@ void GuiCreateWelcomePage(GtkNotebook *notebook)
ignore = gtk_label_new("welcome_tab");
box = show_msg ? gtk_vbox_new(FALSE, 0) : gtk_hbox_new(FALSE, 10);
g_signal_connect(G_OBJECT(align), "expose_event", G_CALLBACK(expose_cb), box);
g_signal_connect(G_OBJECT(align), "draw", G_CALLBACK(draw_cb), box);
gtk_notebook_append_page(notebook, align, ignore);
gtk_container_add(GTK_CONTAINER(align), box);