/* 设置墙纸
* for fluxbox:
* ~/.fluxbox/apps:
* [startup] {feh --bg-scale ~/pictures/bg.jpg && ~/bin/qiang ~/pictures/bg2.jpg}
*/
#include <stdlib.h>
#include <gtk/gtk.h>
#include <gdk-pixbuf/gdk-pixbuf.h>
gint zoom_quality = (gint)GDK_INTERP_BILINEAR;
int main( int argc, char *argv[] )
{
GtkWidget *image=NULL;
GdkScreen *screen=NULL;
GdkWindow *rootwindow=NULL;
GdkPixmap *pixmap=NULL;
GdkPixbuf *pixbuf=NULL;
GdkPixbuf *pb=NULL;
GError *error = NULL;
char *filename=NULL;
gint width=0, height=0;
if (argc != 2) {
printf ("Haha!\n");
printf("Usage: ./a.out filename.jpg\n");
return 0;
}
gtk_init (&argc, &argv);
filename = argv[1] ;
pixbuf = gdk_pixbuf_new_from_file(filename, &error);
if (error) {
printf("001\n");
exit(0);
}
image = gtk_image_new_from_pixbuf (pixbuf);
screen = gtk_widget_get_screen (image) ;
rootwindow = gdk_screen_get_root_window(screen);
width = gdk_screen_width();
height = gdk_screen_height();
pb = gdk_pixbuf_scale_simple(pixbuf, width, height, (GdkInterpType)zoom_quality);
gdk_pixbuf_render_pixmap_and_mask (pb, &pixmap, NULL, 128);
gdk_window_set_back_pixmap(rootwindow, pixmap, FALSE);
gdk_window_clear(rootwindow);
g_object_unref(pb);
g_object_unref(pixmap);
gdk_flush();
// gtk_main ();
return 0;
}
|