From c9418688a19ba6a739d7938d1273020152d1416b Mon Sep 17 00:00:00 2001 From: "julian@kiedaisch.net" Date: Thu, 30 Apr 2020 16:11:51 +0200 Subject: [PATCH] Turned of artefacts while resizing window --- airplayServer.cpp | 47 ++++++++++++++++++++++++++++------------------- 1 file changed, 28 insertions(+), 19 deletions(-) diff --git a/airplayServer.cpp b/airplayServer.cpp index e88297e..4577aa7 100755 --- a/airplayServer.cpp +++ b/airplayServer.cpp @@ -72,6 +72,7 @@ struct GTK_STRUCT { gulong embed_xid; cairo_surface_t *surface = NULL; bool is_fullscreen = false; + bool is_active = false; }; static GTK_STRUCT * GTK_data = NULL; @@ -117,7 +118,7 @@ std::string find_mac() { iface_stream.open("/sys/class/net/wlp2s0/address"); } if (!iface_stream) { - printf("No wlp2s0"); + printf("No wlp2s0 \n"); return ""; } @@ -144,31 +145,37 @@ static void gtk_destroy (GtkWidget * widget, gpointer data) { } gboolean draw_callback (GtkWidget *widget, cairo_t *cr, gpointer data) { - guint width, height; - GdkRGBA color; - GtkStyleContext *context; - context = gtk_widget_get_style_context (widget); + if(!GTK_data->is_active) { - width = gtk_widget_get_allocated_width (widget); - height = gtk_widget_get_allocated_height (widget); + guint width, height; + GdkRGBA color; + GtkStyleContext *context; - gtk_render_background (context, cr, 0, 0, width, height); + context = gtk_widget_get_style_context (widget); - cairo_rectangle (cr, 0, 0, width, height); + width = gtk_widget_get_allocated_width (widget); + height = gtk_widget_get_allocated_height (widget); - gtk_style_context_get_color (context, - gtk_style_context_get_state (context), - &color); - gdk_cairo_set_source_rgba (cr, &color); + gtk_render_background (context, cr, 0, 0, width, height); - cairo_fill (cr); + cairo_rectangle (cr, 0, 0, width, height); - return FALSE; + gtk_style_context_get_color (context, + gtk_style_context_get_state (context), + &color); + gdk_cairo_set_source_rgba (cr, &color); + + cairo_fill (cr); + } + return FALSE; } void configure_callback(GtkWindow *window, GdkEvent *event, gpointer data) { - gtk_widget_queue_draw(GTK_data->video_window); + + if(!GTK_data->is_active) { + gtk_widget_queue_draw(GTK_data->video_window); + } } @@ -176,8 +183,6 @@ static gboolean click_callback(GtkWindow *window, GdkEventButton *event, gpointe if (event->button == 1 && event->type == GDK_2BUTTON_PRESS) { - printf("Double clicked!"); - if(GTK_data->is_fullscreen) { gtk_window_unfullscreen((GtkWindow*)GTK_data->app_window); GTK_data->is_fullscreen = false; @@ -271,7 +276,8 @@ int main(int argc, char *argv[]) { g_signal_connect (G_OBJECT (GTK_data->video_window), "draw",G_CALLBACK (draw_callback), NULL); g_signal_connect (G_OBJECT (GTK_data->app_window), "button-press-event" ,G_CALLBACK (click_callback), NULL); g_signal_connect (G_OBJECT (GTK_data->app_window), "key_press_event", G_CALLBACK (on_key_press), NULL); - g_signal_connect(G_OBJECT(GTK_data->app_window), "configure-event", G_CALLBACK(configure_callback), NULL); + g_signal_connect(G_OBJECT(GTK_data->video_window), "configure_event", G_CALLBACK(configure_callback), NULL); + GTK_data->video_window_xwindow = gtk_widget_get_window (GTK_data->video_window); GTK_data->embed_xid = GDK_WINDOW_XID (GTK_data->video_window_xwindow); @@ -297,10 +303,13 @@ int main(int argc, char *argv[]) { // Server callbacks extern "C" void conn_init(void *cls) { //video_renderer_update_background(video_renderer, 1); + GTK_data->is_active = true; } extern "C" void conn_destroy(void *cls) { + GTK_data->is_active = false; gtk_widget_queue_draw(GTK_data->video_window); + //int width = gtk_widget_get_allocated_width (GTK_data->video_window); //int height = gtk_widget_get_allocated_height (GTK_data->video_window); //video_renderer_update_background(video_renderer, -1, width, height);