Esempio n. 1
0
//画出窗口
//windowx:窗口指针
void window_draw(_window_obj *windowx)
{
    u8 winclosebtnsize = 0;	//关闭按钮的尺寸
    if(windowx == NULL) {
        return;    //无效,直接退出
    }
    if(windowx->type & (1 << 0)) { //圆角窗,仿android的时候,不支持按钮(放了难看)
        gui_draw_arcrectangle(windowx->left, windowx->top, windowx->width, windowx->captionheight, windowx->arcwinr, 1, windowx->captionbkcu, windowx->captionbkcd);									//画出标题栏
        gui_fill_rectangle(windowx->left, windowx->top + windowx->captionheight - windowx->arcwinr, windowx->arcwinr, windowx->arcwinr, windowx->captionbkcd);											//把下部分不需要的半圆形的部分填充掉1
        gui_fill_rectangle(windowx->left + windowx->width - windowx->arcwinr, windowx->top + windowx->captionheight - windowx->arcwinr, windowx->arcwinr, windowx->arcwinr, windowx->captionbkcd);			//把下部分不需要的半圆形的部分填充掉2

        gui_draw_arcrectangle(windowx->left, windowx->top + windowx->captionheight, windowx->width, windowx->height - windowx->captionheight, windowx->arcwinr, 1, windowx->windowbkc, windowx->windowbkc); //填充空白部分
        gui_fill_rectangle(windowx->left, windowx->top + windowx->captionheight, windowx->arcwinr, windowx->arcwinr, windowx->windowbkc);																//把上部分不需要的半圆形的部分填充掉1
        gui_fill_rectangle(windowx->left + windowx->width - windowx->arcwinr, windowx->top + windowx->captionheight, windowx->arcwinr, windowx->arcwinr, windowx->windowbkc);								//把上部分不需要的半圆形的部分填充掉2
        gui_draw_arcrectangle(windowx->left, windowx->top, windowx->width, windowx->height, windowx->arcwinr, 0, ARC_WIN_RIM_COLOR, ARC_WIN_RIM_COLOR); //画边框										//画出标题栏
    } else {	//方角窗
        //填充内部
        gui_fill_rectangle(windowx->left, windowx->top, windowx->width, windowx->captionheight / 2, windowx->captionbkcu); //填充上半部分
        gui_fill_rectangle(windowx->left, windowx->top + windowx->captionheight / 2, windowx->width, windowx->captionheight / 2, windowx->captionbkcd); //填充下半部分
        gui_fill_rectangle(windowx->left, windowx->top + windowx->captionheight - 1, windowx->width, windowx->height - windowx->captionheight, windowx->windowbkc); //填充内部
        //画边框
        gui_draw_rectangle(windowx->left, windowx->top, windowx->width, windowx->height, STD_WIN_RIM_OUTC); //画外框
        gui_draw_rectangle(windowx->left + 1, windowx->top + 1, windowx->width - 2, windowx->height - 2, STD_WIN_RIM_MIDC); //画中间框
        gui_draw_rectangle(windowx->left + 2, windowx->top + windowx->captionheight - 1, windowx->width - 4, windowx->height - windowx->captionheight - 1, STD_WIN_RIM_INC); //画内框
        if(windowx->type & (1 << 7)) {
            btn_draw(windowx->closebtn);//有按钮的时候需要画按钮.
            winclosebtnsize = WIN_BTN_SIZE;
        }
    }
    if(windowx->type & (1 << 5)) {
        gui_show_strmid(windowx->left, windowx->top, windowx->width, windowx->captionheight, windowx->captioncolor, windowx->font, windowx->caption);    //显示标题
    } else {
        gui_show_ptstr(windowx->left + WIN_BTN_OFFSIDE, windowx->top + (windowx->captionheight - windowx->font) / 2, windowx->left + windowx->width - 2 * WIN_BTN_OFFSIDE - winclosebtnsize, windowx->top + windowx->captionheight, 0, windowx->captioncolor, windowx->font, windowx->caption, 1);    //靠左显示caption
    }
}
Esempio n. 2
0
//画滚动条
//scbx:滚动条指针
void scrollbar_draw_scrollbar(_scrollbar_obj *scbx)
{
    u32 scbactlen = 0; //滚动条可以滚动的空间长度
    if(scbx == NULL) {
        return;    //无效,直接退出
    }
    gui_fill_rectangle(scbx->left, scbx->top, scbx->width, scbx->height, scbx->inbkcolor);
    gui_draw_rectangle(scbx->left, scbx->top, scbx->width, scbx->height, scbx->rimcolor);
    if((scbx->type & 0X03) == 0) { //标准滚动条
        if((scbx->type & 0x80) == 0) { //水平滚动条
            scrollbar_draw_btn(scbx->left, scbx->top, SCROLLBAR_PART_LEN, scbx->height, scbx->btncolor, scbx->rimcolor, SCROLLBAR_SIGN_RCOLOR, SCROLLBAR_SIGN_LEFT);
            scrollbar_draw_btn(scbx->left + scbx->width - SCROLLBAR_PART_LEN, scbx->top, SCROLLBAR_PART_LEN, scbx->height, scbx->btncolor, scbx->rimcolor, SCROLLBAR_SIGN_RCOLOR, SCROLLBAR_SIGN_RIGHT);
            scbactlen = scbx->width - 2 * SCROLLBAR_PART_LEN; //可供 滚动条滚动的空间范围
        } else { //垂直滚动条
            scrollbar_draw_btn(scbx->left, scbx->top, scbx->width, SCROLLBAR_PART_LEN, scbx->btncolor, scbx->rimcolor, SCROLLBAR_SIGN_RCOLOR, SCROLLBAR_SIGN_UP);
            scrollbar_draw_btn(scbx->left, scbx->top + scbx->height - SCROLLBAR_PART_LEN, scbx->width, SCROLLBAR_PART_LEN, scbx->btncolor, scbx->rimcolor, SCROLLBAR_SIGN_RCOLOR, SCROLLBAR_SIGN_DOWN);
            scbactlen = scbx->height - 2 * SCROLLBAR_PART_LEN; //可供 滚动条滚动的空间范围
        }
    } else { //没有两端按钮的滚动条
        if((scbx->type & 0x80) == 0) {
            scbactlen = scbx->width;    //水平滚动条
        } else {
            scbactlen = scbx->height;    //垂直滚动条
        }
    }
    if(scbx->itemsperpage > scbx->totalitems) {
        scbx->scbbarlen = scbactlen;
    } else {
        scbx->scbbarlen = (scbactlen * scbx->itemsperpage) / scbx->totalitems;    //得到滚动条的长度
    }
    scrollbar_setpos(scbx);
}
Esempio n. 3
0
//画滚动条的按键
//x,y,width,height:坐标及尺寸
//bkcolor:背景色
//rimcolor:边框颜色
//signcolor:符号的颜色
//signx:符号编号 0,上;1,下;2,左;3,右;4,垂直;5,水平;
void scrollbar_draw_btn(u16 x, u16 y, u16 width, u16 height, u16 bkcolor, u16 rimcolor, u16 signcolor, u8 signx)
{
    gui_fill_rectangle(x, y, width, height, bkcolor); //填充内部颜色
    gui_draw_rectangle(x, y, width, height, rimcolor); //画外边框
    if(width >= 8 && height >= 8) { //足够画图标
        scrollbar_draw_sign(x + width / 2 - 4, y + height / 2 - 4, signcolor, signx);
    }
}
//闹铃处理(尺寸:44*20)
//x,y:坐标
//返回值,处理结果
u8 calendar_alarm_msg(u16 x,u16 y)
{
	u8 rval=0;  			  	
  	u16 *lcdbuf=0;							//LCD显存 
   	lcdbuf=(u16*)gui_memin_malloc(44*20*2);	//申请内存 
 	if(lcdbuf)								//申请成功
	{
		app_read_bkcolor(x,y,44,20,lcdbuf);	//读取背景色
		gui_fill_rectangle(x,y,44,20,LIGHTBLUE);
		gui_draw_rectangle(x,y,44,20,BROWN);
		gui_show_num(x+2,y+2,2,RED,16,alarm.hour,0X81); 
 		gui_show_ptchar(x+2+16,y+2,x+2+16+8,y+2+16,0,RED,16,':',1);
		gui_show_num(x+2+24,y+2,2,RED,16,alarm.min,0X81); 
  		OSTaskSuspend(6); //挂起主任务
		while(rval==0)
		{
			tp_dev.scan(0);
			if(tp_dev.sta&TP_PRES_DOWN)//触摸屏被按下
			{
				if(app_tp_is_in_area(&tp_dev,x,y,44,20))//判断某个时刻,触摸屏的值是不是在某个区域内
				{
					rval=0XFF;//取消
					break;
				} 
			 }
			delay_ms(5);  
    		if(system_task_return)break;			//需要返回	 
		}	 
		app_recover_bkcolor(x,y,44,20,lcdbuf);	//读取背景色
	}else rval=1;
	system_task_return=0;
	alarm.ringsta&=~(1<<7);	//取消闹铃   
	calendar_alarm_init((_alarm_obj*)&alarm,&calendar);	//重新初始化闹钟
	gui_memin_free(lcdbuf); 
	OSTaskResume(6); 		//恢复主任务
	system_task_return=0;
	return rval;
}