static gboolean _GuiGtkDrawingArea_exposeCallback (GuiObject widget, GdkEventExpose *expose, gpointer void_me) { trace (U"begin"); iam (GuiDrawingArea); Melder_assert (me); // TODO: that helps against the damaged regions outside the rect where the // Graphics drawing is done, but where does that margin come from in the // first place?? Additionally this causes even more flickering //gdk_window_clear_area ((GTK_WIDGET (widget)) -> window, expose->area.x, expose->area.y, expose->area.width, expose->area.height); if (my d_exposeCallback) { struct structGuiDrawingArea_ExposeEvent event { me, 0 }; event. x = expose -> area. x; event. y = expose -> area. y; event. width = expose -> area. width; event. height = expose -> area. height; try { //GdkRectangle rect = { event. x, event. y, event. width, event. height }; //gdk_window_begin_paint_rect ((GTK_WIDGET (widget)) -> window, & rect); trace (U"send the expose callback"); trace (U"locale is ", Melder_peek8to32 (setlocale (LC_ALL, nullptr))); my d_exposeCallback (my d_exposeBoss, & event); trace (U"the expose callback finished"); trace (U"locale is ", Melder_peek8to32 (setlocale (LC_ALL, nullptr))); //gdk_window_end_paint ((GTK_WIDGET (widget)) -> window); //gdk_window_flush ((GTK_WIDGET (widget)) -> window); //gdk_flush (); } catch (MelderError) { Melder_flushError (U"Redrawing not completed"); } trace (U"the expose callback handled drawing"); return true; } trace (U"GTK will handle redrawing"); return false; }
void _GuiMacDrawingArea_update (GuiObject widget) { iam_drawingarea; if (my d_exposeCallback) { struct structGuiDrawingAreaExposeEvent event = { me }; _GuiMac_clipOnParent (widget); try { my d_exposeCallback (my d_exposeBoss, & event); } catch (MelderError) { Melder_flushError ("Redrawing not completed"); } GuiMac_clipOff (); } }
void _GuiWinDrawingArea_update (GuiObject widget) { iam_drawingarea; PAINTSTRUCT paintStruct; BeginPaint (widget -> window, & paintStruct); if (my d_exposeCallback) { struct structGuiDrawingAreaExposeEvent event = { me }; try { my d_exposeCallback (my d_exposeBoss, & event); } catch (MelderError) { Melder_flushError ("Redrawing not completed"); } } EndPaint (widget -> window, & paintStruct); }