Пример #1
0
bool
XFace::CreateFromXFace(const char *xfacedata)
{
#ifndef HAVE_COMPFACE_H
   return false;
#else
   if(data) delete [] data;
   if(xface) delete [] xface;
   initialised = false;

   xface = new char [2500];
   strncpy(xface, xfacedata, 2500);
   data = new char [5000];
   strncpy(data, xface, 5000);
   if(uncompface(data) < 0)
   {
      delete [] data;
      delete [] xface;
      data = xface = NULL;
      return false;
   }
   String out = strutil_enforceCRLF(wxString::FromAscii(xface));
   delete [] xface;
   xface = strutil_strdup(out.ToAscii());
   initialised = true;
   return true;
#endif
}
Пример #2
0
static void headerview_show_xface(HeaderView *headerview, MsgInfo *msginfo)
{
    gchar xface[2048];
    GdkPixmap *pixmap;
    GdkBitmap *mask;
    GtkWidget *hbox = headerview->hbox;

    if (!msginfo->xface || strlen(msginfo->xface) < 5) {
        if (headerview->image &&
                GTK_WIDGET_VISIBLE(headerview->image)) {
            gtk_widget_hide(headerview->image);
            gtk_widget_queue_resize(hbox);
        }
        return;
    }
    if (!GTK_WIDGET_VISIBLE(headerview->hbox)) return;

    strncpy(xface, msginfo->xface, sizeof(xface));

    if (uncompface(xface) < 0) {
        g_warning("uncompface failed\n");
        if (headerview->image)
            gtk_widget_hide(headerview->image);
        return;
    }

    create_xpm_from_xface(xpm_xface, xface);

    pixmap = gdk_pixmap_create_from_xpm_d
             (hbox->window, &mask, &hbox->style->white, xpm_xface);

    if (!headerview->image) {
        GtkWidget *image;

        image = gtk_image_new_from_pixmap(pixmap, mask);
        gtk_box_pack_start(GTK_BOX(hbox), image, FALSE, FALSE, 0);
        gtk_widget_show(image);
        headerview->image = image;
    } else {
        gtk_image_set_from_pixmap(GTK_IMAGE(headerview->image),
                                  pixmap, mask);
        gtk_widget_show(headerview->image);
    }

    gdk_pixmap_unref(pixmap);
}