Updating branch refs/heads/master
         to 5698714a4e4235fa457dcc349487945b8bf93773 (commit)
       from b285c76bcac9b894c871716f8ee2b9144cd2b7b6 (commit)

commit 5698714a4e4235fa457dcc349487945b8bf93773
Author: Sean Davis <smd.seanda...@gmail.com>
Date:   Mon Aug 19 22:50:52 2013 -0400

    Start reimplementing gst-logo

 src/parole-player.c |  127 +++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 127 insertions(+)

diff --git a/src/parole-player.c b/src/parole-player.c
index 0a5a604..ab6f403 100644
--- a/src/parole-player.c
+++ b/src/parole-player.c
@@ -121,6 +121,9 @@ static gboolean            parole_audiobox_expose_event 
(GtkWidget *w, GdkEventE
 /*
  * GtkBuilder Callbacks
  */
+void on_content_area_size_allocate (GtkWidget *widget, GtkAllocation 
*allocation, ParolePlayer *player);
+
+ 
 gboolean        parole_player_configure_event_cb        (GtkWidget *widget, 
                                                         GdkEventConfigure *ev, 
                                                         ParolePlayer *player);
@@ -335,6 +338,8 @@ struct ParolePlayerPrivate
     GtkWidget          *control; /* contains all play button*/
     GtkWidget          *fullscreen_button;
     GtkWidget          *fullscreen_image;
+    GdkPixbuf       *logo;
+    gboolean        scale_logo;
     
     GtkWidget          *hbox_infobar;
     GtkWidget          *infobar;
@@ -2756,6 +2761,122 @@ parole_audiobox_expose_event (GtkWidget *w, 
GdkEventExpose *ev, ParolePlayer *pl
     return FALSE;
 }
 
+void
+on_content_area_size_allocate (GtkWidget *widget, GtkAllocation *allocation, 
ParolePlayer *player)
+{
+    g_print("size allocate\n");
+    g_return_if_fail (allocation != NULL);
+    
+    gtk_widget_set_allocation(widget, allocation);
+
+    if ( gtk_widget_get_realized (widget) )
+    {  
+       player->priv->scale_logo = TRUE;
+       
+       gtk_widget_queue_draw (widget);
+       }
+}
+
+static void
+parole_draw_logo (ParolePlayer *player)
+{
+    static GdkPixbuf *pix = NULL;
+#if GTK_CHECK_VERSION(3, 0, 0)
+    cairo_region_t *region;
+    GdkRGBA *color;
+    cairo_t *cr;
+#else
+    GdkRegion *region;
+#endif
+    GdkRectangle rect;
+    GtkWidget *widget;
+    GtkAllocation *allocation = g_new0 (GtkAllocation, 1);
+
+    widget = GTK_WIDGET (player->priv->eventbox_output);
+
+    if ( !gtk_widget_get_window(widget) )
+       return;
+
+    rect.x = 0;
+    rect.y = 0;
+    
+    gtk_widget_get_allocation(widget, allocation);
+    rect.width = allocation->width;
+    rect.height = allocation->height;
+
+#if GTK_CHECK_VERSION(3, 0, 0)
+    region = cairo_region_create_rectangle(&rect);
+#else
+    region = gdk_region_rectangle (&rect);
+#endif
+    
+    gdk_window_begin_paint_region (gtk_widget_get_window(widget),
+                                  region);
+
+#if GTK_CHECK_VERSION(3, 0, 0)
+    cairo_region_destroy (region);
+
+    GdkWindow *window;
+    cairo_surface_t *target;
+
+    window = gtk_widget_get_window (widget);
+
+    //target = cairo_get_group_target (cr);
+    
+    /* Clear to parent-relative pixmap
+    * We need to use direct X access here because GDK doesn't know about
+    * the parent relative pixmap. */
+    //cairo_surface_flush (target);
+
+    XClearArea (GDK_WINDOW_XDISPLAY (window),
+                GDK_WINDOW_XID (window),
+                0, 0,
+                allocation->width, allocation->height,
+                False);/*
+    cairo_surface_mark_dirty_rectangle (target,
+                                        0, 0,
+                                        allocation->width, 
allocation->height);*/
+#else
+    gdk_region_destroy (region);
+    
+    gdk_window_clear_area (gtk_widget_get_window(widget),
+                          0, 0,
+                          allocation->width,
+                          allocation->height);
+#endif
+
+    if (player->priv->scale_logo)
+    {
+       if (pix)
+           g_object_unref (pix);
+       pix = gdk_pixbuf_scale_simple (player->priv->logo,
+                                      allocation->width,
+                                      allocation->height,
+                                      GDK_INTERP_BILINEAR);
+       player->priv->scale_logo = FALSE;
+    }
+
+#if GTK_CHECK_VERSION(3, 0, 0)
+    cr = gdk_cairo_create (gtk_widget_get_window(widget));
+    gdk_cairo_set_source_pixbuf (cr, pix, 0, 0);
+    cairo_paint (cr);
+    cairo_destroy (cr);
+#else
+    gdk_draw_pixbuf (GDK_DRAWABLE (gtk_widget_get_window(widget)),
+                    gtk_widget_get_style(widget)->fg_gc[0],
+                    pix,
+                    0, 0, 0, 0,
+                    allocation->width,
+                    allocation->height,
+                    GDK_RGB_DITHER_NONE,
+                    0, 0);
+#endif
+
+    gdk_window_end_paint (gtk_widget_get_window(GTK_WIDGET 
(player->priv->eventbox_output)));
+    
+    g_free(allocation);
+}
+
 gboolean
 parole_player_configure_event_cb (GtkWidget *widget, GdkEventConfigure *ev, 
ParolePlayer *player)
 {
@@ -2770,6 +2891,8 @@ parole_player_configure_event_cb (GtkWidget *widget, 
GdkEventConfigure *ev, Paro
                      NULL);
     }
     
+    parole_draw_logo(player);
+    
     return FALSE;
 }
 
@@ -2913,6 +3036,7 @@ parole_player_init (ParolePlayer *player)
     g_setenv("PULSE_PROP_media.role", "video", TRUE);
     
     player->priv = PAROLE_PLAYER_GET_PRIVATE (player);
+    player->priv->scale_logo = TRUE;
 
     player->priv->client_id = NULL;
     player->priv->sm_client = NULL;
@@ -3074,6 +3198,7 @@ parole_player_init (ParolePlayer *player)
     player->priv->fullscreen_button = GTK_WIDGET (gtk_builder_get_object 
(builder, "media_fullscreen"));
     player->priv->fullscreen_image = GTK_WIDGET (gtk_builder_get_object 
(builder, "image_media_fullscreen"));
     player->priv->eventbox_output = GTK_WIDGET (gtk_builder_get_object 
(builder, "content_area"));
+    player->priv->logo = gdk_pixbuf_new_from_file (g_strdup_printf 
("%s/parole.png", PIXMAPS_DIR), NULL);
     
     hpaned = GTK_WIDGET (gtk_builder_get_object (builder, "hpaned"));
     gtk_widget_style_get (hpaned, "handle-size", &player->priv->handle_width, 
NULL);
@@ -3123,6 +3248,8 @@ parole_player_init (ParolePlayer *player)
        gtk_widget_set_no_show_all (player->priv->infobar, TRUE);
 
        content_area = gtk_info_bar_get_content_area (GTK_INFO_BAR 
(player->priv->infobar));
+       g_signal_connect (content_area, "size-allocate",
+                     G_CALLBACK (on_content_area_size_allocate), player);
        // GtkWidget *audiotrack_box, *audiotrack_label, *subtitle_box, 
*subtitle_label;
        audiotrack_box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 6);
        audiotrack_label = gtk_label_new(_("Audio Track:"));
_______________________________________________
Xfce4-commits mailing list
Xfce4-commits@xfce.org
https://mail.xfce.org/mailman/listinfo/xfce4-commits

Reply via email to