linux将时钟放在桌面上的,Linux 下的桌面指针时钟
Linux 下的桌面指針時鐘
一.開發背景
隨著科學技術的日益增加,軟件行業在有了新的突破。特別是在移動設備上更有著遠大的開發空間,目前,移動設備上,包括手機,筆記本,平板,發展的特別快,界面也越來越友好,給用戶更新的體現。
基于Linux系統的界面的很單調的問題上了,我做了一個簡單的桌面指針時鐘,就像是windows上的那樣,雖然不美觀,但是還有點實際應用,開放源碼僅供參考!
二.功能簡介
與普通的C語言程序一樣,本時鐘在終端里運行后(也可以雙擊可執行文件),會出現一個界面,會從系統中得到時間,并將相應的時間所對應的角度傳給相應的指針,并顯示到相應的位置上。
時間是系統時間,而且是運行的時候獲取,所以時鐘的轉動都是參考系統時間的。
滴答滴,滴答滴,時鐘不停的轉動,滴答滴,滴答滴小雨拍打著水花.......就像這首歌一樣,時鐘不停的轉動!
三.開發工具
C語言 + SDL圖像界面開發包(包括SDL的擴展庫SDL_image SDL_gfx)。
四.開發環境
Red Hat Linux ,由于C語言的移植性很好,SDL也可以跨平臺移植所以本源代碼可以在幾乎所有的系統上運行!本人已經在arm up6410 開發板上測試成功!但是有點卡(本人能力有限)!
五.界面顯示
源程序在Linux系統的截圖,本人能力有限,界面只能做成這樣了,有能力的可以修改一下!
六.主任寄語
本人只是個菜鳥,甚至連菜鳥都稱不上。就喜歡寫一些這樣類似的東西。希望大家運行測試一下,下面有代碼,你們可以對源碼進行更改,本人沒有任何意見,如果你們有什么意見和建議的話 可以發郵件給我!大家相互交流相互學習!
七.源代碼
#include
#include "SDL/SDL_rotozoom.h"
#include "SDL/SDL_image.h"
#include "math.h"
#include "string.h"
#include
#include"SDL/SDL_gfxPrimitives.h"
/*
初始化SDL 函數庫
SDL——INITEVERTHING 代表所有的 視頻音頻 圖片 ...
*/
SDL_Surface * screen = NULL;
SDL_Rect rect;
void Init()
{
if(SDL_Init(SDL_INIT_EVERYTHING)==-1)
{
printf("SDL_INIT fault !\n");
exit(0);
}
}
// 創建屏幕 640*480 0? SDL_SWSURFACE
void Create_Screen(int width , int height ,int bpp , Uint32 flags)
{
//SDL_Surface*screen = NULL;
screen= SDL_SetVideoMode(width , height,? bpp ,flags);
if(screen== NULL)
{
printf("SDL_SetVideoMode default!\n");
exit(1);
}
}
// 加載圖片傳遞文件的 絕對路徑
SDL_Surface * Image_Load(char *filename)
{
SDL_Surface*image = NULL;
image= IMG_Load(filename);
if(image== NULL)
{
printf("The image load default,maybe can't find %s?!!!\n",filename);
exit(0);
}
returnimage;
}
void Free_Image(SDL_Surface * image)
{
SDL_FreeSurface(image);
}
//用來顯示 image 圖片,rect 可以調節位置
int Show_Image(SDL_Surface * image,SDL_Rect*rect)
{
SDL_BlitSurface(image, NULL , screen , rect);
SDL_UpdateRect(screen, 0 , 0 , 0 , 0 );
return 0;
}
//找到圖片的中點坐標
SDL_Rect Set_Image(SDL_Surface *image,double zoom)
{
//doublex,y ;
SDL_Rectrect;
rect.x=? (screen->w - image->w ) / 2;
rect.y=? (screen->h - image->h ) / 2;
returnrect;
}
//改變秒針所對應的角度,一秒鐘走六度
SDL_Surface *Change_Angle_Sec(SDL_Surface*image ,double *angle)
{
SDL_Surface*change = NULL ;
SDL_Rectrect;
if(*angle <= -360)
{
*angle += 360;
}
*angle = *angle -6.0;
change = rotozoomSurfaceXY(image, *angle,1, 1, 1);
rect = Set_Image(change , 1);
Show_Image(change,&rect);
Free_Image(change);
returnchange;
}
SDL_Surface *Change_Angle_Min(SDL_Surface*image ,double *angle,double sec)
{
SDL_Surface*change = NULL ;
SDL_Rectrect;
//秒針周一圈 分周走 六度
if((sec== 0) || (sec == -360))
{
if(*angle <= -360)
{
*angle += 360;
}
*angle= *angle -6;
}
change = rotozoomSurfaceXY(image, *angle,1, 1, 1);
rect = Set_Image(change , 1);
Show_Image(change,&rect);
Free_Image(change);
returnchange;
}
SDL_Surface *Change_Angle_Hour(SDL_Surface*image ,double *angle,double min)
{
SDL_Surface*change = NULL ;
SDL_Rectrect;
//分針周一圈 走 六度
if(min== 360 || min ==60 || min == 120 || min ==180 || min ==240 || min == 300)
{
if(*angle < -360)
{
* angle += 360;
}
*angle= *angle -5;
}
change = rotozoomSurfaceXY(image, *angle,1, 1, 1);
rect = Set_Image(change , 1);
Show_Image(change,&rect);
Free_Image(change);
returnchange;
}
void Get_System_Time(double *hour,double*min,double *sec)
{
structtm *now;
time_tTime = time(NULL);
now= localtime( &Time );
//獲取當前的系統時間,然后根據當前時間設置圖片的角度!
*hour= (double)now->tm_hour;
*min= (double)now->tm_min;
*sec= (double)now->tm_sec;
printf("TheSystem Time Now : %d : %d : %d \n",(int)*hour,(int)*min,(int)*sec);
*sec= *sec *-6;
*min= *min *-6;
*hour= *hour *-30 + *min/12;
}
int main(int argc , char **argv)
{
intflag = 1;
Init();
SDL_Rectrect ;
rect.x= 80;
rect.y=0;
doublesec = 0,min = 0, hour = 0, zoom_xy = 1;
SDL_Surface*change = NULL,*image = NULL,*image_2 = NULL,*image_3 = NULL,* background =NULL;
Create_Screen(640,480,0,SDL_SWSURFACE);
boxColor(screen,0,0,640,480,0xffffffff);
Show_Image(screen,0);
image= Image_Load("./image/sec.png");
image_2= Image_Load("./image/min.png");
image_3= Image_Load("./image/hour.png");
background=Image_Load("./image/background.jpg");
Show_Image(background, &rect);
Get_System_Time(& hour,& min,& sec);//初始化時間讓各個指針各就各位
while(flag)
{
Change_Angle_Hour(image_3,&hour,min);//分別加載 hour min sec 圖片 顯示到屏幕上
Change_Angle_Min(image_2,&min,sec);
Change_Angle_Sec(image,&sec);
SDL_UpdateRect(screen, 0 , 0 , 0 ,0 );
//測試代碼用來顯示system time !
//printf("The Time Now : %lf : %lf :%lf \n",hour/-30 - min/-6,min/-6,sec/-6);
//延時一秒秒針走動 ! 這是函數很精確
SDL_Delay(1000);
//刷新整個圖片
Show_Image(background , &rect);
SDL_Event event;
while(SDL_PollEvent(&event))??? ?????? ?????? //將事件加入事件隊列隊列
{
switch(event.type)
{
case SDL_KEYDOWN:
if(event.key.keysym.sym== SDLK_ESCAPE)
{
flag = 0;
}break;
case SDL_QUIT:
{
flag = 0;
printf("\n\nquit!\n\n*************************\n");
}break;
}
}
}
}
Write by:douyuan888? 2012/12/31
總結
以上是生活随笔為你收集整理的linux将时钟放在桌面上的,Linux 下的桌面指针时钟的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 可以安装linux的u盘启动工具箱,自己
- 下一篇: linux 休眠定时唤醒_技术|如何自动