Re: [問題] 非GL的xscreensaver?
※ 引述《soom ()》之銘言:
: 因為小弟手邊有一部舊P4的機器必須要跑螢幕保護程式同時又做LAMP服務
: 但是其內建的顯示晶片在Debian GNU/Linux 5底下似乎抓不到可用的Driver
: 所以想找一個輕量一點的螢幕保護程式,只要將指定帳號內某資料夾
: (ex. /home/user/Desktop/pic )的圖片檔以slideshow方式循環播出
: 查找xscreensaver的faq可以看到他建議使用ChBg或xv
: ( http://www.jwz.org/xscreensaver/faq.html#slideshow )
: 但在Debian 5的套件庫中似乎都找不到可用的套件,ChBg是unstable
: xv則是連影子都看不到。直接抓source下來編也都是Error收場
: 不知道有沒有類似功能的軟體可以使用?
: 還是只能砍掉重練(囧)
如果你沒有一定非要是螢幕保護程式不可的話...下面這個非常精簡的小程式就可以用
另外,這個程式只有 54 行,其實也是適合拿來當作 gtk+ 的範例程式啦 XD
以下程式碼以 GNU GPL2 授權釋出,請存檔成 slideshow.c
編譯方式:gcc `pkg-config gtk+-2.0 --cflags --libs` slideshow.c -o slideshow
使用方式:slideshow <換圖的間隔秒數> <包含圖檔的目錄名>
結束方式:使用 Window manager 的關閉視窗熱鍵,例如 Alt+F4
#include <gtk/gtk.h>
#include <stdlib.h>
static GtkWidget *win, *img;
static GList *files = NULL, *f = NULL;
gboolean on_timeout(gpointer user_data){
GdkPixbuf* pix;
_retry:
g_debug(f->data);
pix = gdk_pixbuf_new_from_file_at_scale(f->data,
img->allocation.width, img->allocation.height,
TRUE, NULL);
f = f->next ? f->next : files;
if(pix){
gtk_image_set_from_pixbuf(img, pix);
g_object_unref(pix);
}
else if( f != files )
goto _retry;
return TRUE;
}
static gboolean on_init(gpointer user_data){
on_timeout(user_data);
return FALSE;
}
void get_files(const char* path){
char* fn;
GDir* dir = g_dir_open(path, 0, NULL);
if(!dir) return;
while(fn = g_dir_read_name(dir)){
files = g_list_prepend(files, g_build_filename(path,fn,NULL));
if(g_file_test(files->data, G_FILE_TEST_IS_DIR))
get_files(files->data);
}
g_dir_close(dir);
}
int main(int argc, char** argv){
GdkColor black={0};
gtk_init(&argc, &argv);
if(argc < 3) return 1;
get_files(argv[2]);
if(!files) return 1;
f=files;
win = gtk_window_new(GTK_WINDOW_TOPLEVEL);
img = gtk_image_new();
gtk_container_add(win, img);
gtk_window_fullscreen(win);
gtk_widget_modify_bg(win, GTK_STATE_NORMAL, &black);
g_timeout_add(atoi(argv[1])*1000, on_timeout, NULL);
g_timeout_add(500, on_init, NULL);
g_signal_connect(win, "delete-event", G_CALLBACK(gtk_main_quit), NULL);
gtk_widget_show_all(win);
gtk_main();
return 0;
}
在這種用途來說,gtk+ 算是也滿好用的。 如果你用 pygtk,程式又會更短了!
--
個人網頁: http://pcman.sayya.org/ 上面有自畫像及各種聯絡資訊
Blog: http://pcman.sayya.org/blog.php?id=pcman
PCMan 全系列 BBS 連線軟體 http://pcman.ptt.cc/ http://pcmanx.csie.net/
新酷音輸入法 for Windows http://chewing.csie.net/
IE Tab Firefox plugin/extension http://ietab.mozdev.org/
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 59.114.121.121
※ 編輯: HZYSoft 來自: 59.114.121.121 (02/19 04:27)
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 3 篇):