From be6212936bd57db55043c741afb067f611ee4c71 Mon Sep 17 00:00:00 2001 From: mishas Date: Tue, 13 Nov 2007 16:58:49 +0000 Subject: [PATCH] some code to actuall deal with transparency (this commit does not even build) git-svn-id: file:///svnroot/simple-launcher/branches/new-items@257 3ba93dab-e023-0410-b42a-de7732cf370a --- applet-wrapper.cc | 36 +++++++++++++++++++++++++++++++++--- 1 file changed, 33 insertions(+), 3 deletions(-) diff --git a/applet-wrapper.cc b/applet-wrapper.cc index 059e753..9ea7f11 100644 --- a/applet-wrapper.cc +++ b/applet-wrapper.cc @@ -24,6 +24,7 @@ struct _SLAWrapperPrivate { void *applet; + GdkPixmap *background_pixmap; }; static void sla_wrapper_init(SLAWrapper *self); @@ -38,6 +39,9 @@ HD_DEFINE_PLUGIN(SLAWrapper, sla_wrapper, HILDON_DESKTOP_TYPE_HOME_ITEM) static void sla_wrapper_init(SLAWrapper *self) { GdkColormap *colormap = NULL; + self->priv = G_TYPE_INSTANCE_GET_PRIVATE(self, SLA_TYPE_WRAPPER); + self->priv->background_pixmap = NULL; + if ((colormap = gdk_screen_get_rgba_colormap(gdk_screen_get_default())) != NULL) { gtk_widget_set_colormap(GTK_WIDGET(self), colormap); } @@ -59,16 +63,42 @@ static void sla_wrapper_class_init(SLAWrapperClass *klass) { g_type_class_add_private(klass, sizeof(SLAWrapperPrivate)); // Do I need this? } -static void sla_wrapper_finalize(GObject *object) { -#if 0 - _SLAWrapperPrivate *priv = SLA_WRAPPER(object)->priv; +static void sla_wrapper_finalize(GObject *self) { + SLAWrapperPrivate *priv = SLA_WRAPPER(self)->priv; + if (priv->background_pixmap != NULL) { + g_object_unref(priv->background_pixmap); + priv->background_pixmap = NULL; + } +#if 0 free(priv->applet); #endif } static gboolean sla_wrapper_expose(GtkWidget *widget, GdkEventExpose *event) { if (GTK_WIDGET_DRAWABLE(widget)) { + cairo_t *cr; + + SLAWrapperPrivate *priv = SLA_WRAPPER(widget)->priv; + + if (priv->background_pixmap == NULL) { + priv->background_pixmap = gdk_pixmap_new(widget->window, SOME_WIDTH, SOME_HEIGHT, 32); + + cr = gdk_cairo_create(priv->background_pixmap); + + cairo_set_source_rgba(cr, OUR_R, OUR_G, OUR_B, OUR_A); + cairo_set_operator(cr, CAIRO_OPERATOR_SOURCE); + cairo_paint(cr); + cairo_destroy(cr); + } + + cr = gdk_cairo_create(widget->window); + gdk_cairo_set_source_pixmap(cr, priv->background_pixmap, 0, 0); + + cairo_set_operator(cr, CAIRO_OPERATOR_SOURCE); + cairo_paint(cr); + cairo_destroy(cr); + return GTK_WIDGET_CLASS(sla_wrapper_parent_class)->expose_event(widget, event); } else { return FALSE; -- 1.7.9.5