Esempio n. 1
0
//创建窗口
//top,left,width,height:坐标及尺寸.
//id:window的ID
//type:window类型
//[7]:0,没有关闭按钮.1,有关闭按钮
//[6]:0,不读取背景色.1,读取背景色.
//[5]:0,标题靠左.1,标题居中.
//[4:2]:保留
//[1:0]:0,标准的窗口(仿XP);1,圆边窗口(仿Android)
//font:窗体标题文字字体大小
_window_obj *window_creat(u16 left, u16 top, u16 width, u16 height, u8 id, u8 type, u8 font)
{
    _window_obj *window_crt;
    if(width < (WIN_BTN_SIZE + 20) || height < WIN_CAPTION_HEIGHT) {
        return NULL;    //尺寸不能太小
    }
    window_crt = (_window_obj *)gui_memin_malloc(sizeof(_window_obj)); //分配内存
    if(window_crt == NULL) {
        return NULL;    //内存分配不够.
    }
    window_crt->top = top;
    window_crt->left = left;
    window_crt->width = width;
    window_crt->height = height;
    window_crt->id = id;
    window_crt->type = type;
    window_crt->sta = 0;
    window_crt->caption = 0;
    window_crt->captionheight = WIN_CAPTION_HEIGHT;	//默认高度
    window_crt->font = font;							//设置字体大小
    window_crt->arcwinr = 6;							//默认圆角的半径


    window_crt->captionbkcu = WIN_CAPTION_UPC;	//默认caption上部分背景色
    window_crt->captionbkcd = WIN_CAPTION_DOWNC;	//默认caption下部分背景色
    window_crt->captioncolor = WIN_CAPTION_COLOR;	//默认caption的颜色
    window_crt->windowbkc = WIN_BODY_BKC;			//默认背景色

    if(type & (1 << 7)) { //需要关闭按钮(仅适用仿XP窗口)
        window_crt->closebtn = btn_creat(left + width - WIN_BTN_SIZE - WIN_BTN_OFFSIDE, top + (window_crt->captionheight - WIN_BTN_SIZE) / 2, WIN_BTN_SIZE, WIN_BTN_SIZE, 0, 2); //创建边角按钮
        if(window_crt->closebtn == NULL) {
            window_delete(window_crt);		//释放之前申请的内存
            return NULL;					//内存分配不够.
        }
        window_crt->closebtn->caption = "×";				//关闭图标
        window_crt->closebtn->bcfucolor = WIN_BTN_FUPC;	//默认松开的颜色
        window_crt->closebtn->bcfdcolor = WIN_BTN_FDOWNC;	//默认按下的颜色
        window_crt->closebtn->bkctbl[0] = WIN_BTN_RIMC;	//圆角按钮边框颜色
        window_crt->closebtn->bkctbl[1] = WIN_BTN_TP1C;	//第一行的颜色
        window_crt->closebtn->bkctbl[2] = WIN_BTN_UPHC;	//上半部分颜色
        window_crt->closebtn->bkctbl[3] = WIN_BTN_DNHC;	//下半部分颜色

    } else {
        window_crt->closebtn = NULL;
    }


    if(type & (1 << 6)) { //需要读取背景色
        window_crt->bkctbl = (u16 *)gui_memin_malloc(width * height * 2); //要分配完整的背景色表
        if(window_crt->bkctbl == NULL) {
            window_delete(window_crt);		//释放之前申请的内存
            return NULL;					//内存分配不够.
        }
        window_read_backcolor(window_crt);	//读取背景色
    }
    return window_crt;
}
Esempio n. 2
0
void window_init(window_t* newWindow){
	window_delete();
	if(newWindow != NULL){
		current_window = newWindow;
		current_window->event_handler(WINDOW_EVENT_ON_CREATE);
		current_window->redraw();
	}
}
Esempio n. 3
0
inline static void
deletewindow(struct editor *e, struct window *w)
{
        bool move = e->current_window->parent == w->parent;
        if (move)
                e->current_window = w->parent;

        window_delete(w);

        if (move)
                e->current_window = window_find_leaf(e->current_window);
}
Esempio n. 4
0
//////////////////////////////////////////////////////////////////////////////////////////
//测试
void win_test(u16 x, u16 y, u16 width, u16 height, u8 type, u16 cup, u16 cdown, u8 *caption)
{
    _window_obj *twin;
    twin = window_creat(x, y, width, height, 0, type, 16); //创建窗口
    if(twin == NULL) {
        return;    //创建失败.
    }
    twin->caption = caption;
    {
        twin->windowbkc = cup;
    }
    window_draw(twin);
    window_delete(twin);

}
Esempio n. 5
0
void
test(void) {
    Window* window = window_new("omikuji", 400, 300);
    Ticket* ticket = ticket_new_file("../res/omikuji.txt");

    while (window_is_open(window)) {
        WindowEvent event = window_poll_events(window);
        switch (event.type) {
            case WE_CLOSE: goto end; break;
            case WE_KEYBOARD:
                if (event.value == WE_KEY_A) {
                }
                break;
        }
        window_clear(window);
        window_render_ticket(window, ticket);
        window_display(window);
    }

end:
    ticket_delete(ticket);
    window_delete(window);    
}
Esempio n. 6
0
//在制定位置显示一个msg box
//x,y,width,height:坐标尺寸
//str:字符串
//caption:消息窗口名字
//font:字体大小
//color:颜色
//mode:
//[7]:0,没有关闭按钮.1,有关闭按钮
//[6]:0,不读取背景色.1,读取背景色.
//[5]:0,标题靠左.1,标题居中.
//[4:2]:保留
//[1]:0,不显示取消按键;1,显示取消按键.
//[0]:0,不显示OK按键;1,显示OK按键.
//返回值:
//0,没有任何按键按下/产生了错误.
//1,确认按钮按下了.
//2,取消按钮按下了.
u8 window_msg_box(u16 x, u16 y, u16 width, u16 height, u8 *str, u8 *caption, u8 font, u16 color, u8 mode)
{
    u8 rval = 0, res;
    u16 offx = 0, offy = 0;
    u16 temp, strheight = 0;

    _window_obj *twin = 0;	//窗体
    _btn_obj *okbtn = 0;		//确定按钮
    _btn_obj *cancelbtn = 0; //取消按钮

    if(width < 150 || height < (WIN_CAPTION_HEIGHT + font + 5)) {
        return 0;    //尺寸错误
    }
    twin = window_creat(x, y, width, height, 0, 1 | ((7 << 5)&mode), 16); //创建窗口
    if((mode & 0X03) == 0x03) {	//有两个按钮
        offy = MSG_BOX_BTN1_WIDTH;
        offx = (width - MSG_BOX_BTN1_WIDTH * 2) / 3;
    } else {	   			//只有一个按钮
        offy = MSG_BOX_BTN2_WIDTH;
        offx = (width - MSG_BOX_BTN2_WIDTH) / 2;
    }
    if(mode & (1 << 0)) { //需要显示OK按键
        okbtn = btn_creat(x + offx, y + height - MSG_BOX_BTN_HEIGHT - 10, offy, MSG_BOX_BTN_HEIGHT, 0, 0x02); //创建OK按钮
        if(okbtn == NULL) {
            rval = 1;
        } else {
            okbtn->caption = (u8 *)GUI_OK_CAPTION_TBL[gui_phy.language]; //确认
            okbtn->bkctbl[0] = 0X8452; //边框颜色
            okbtn->bkctbl[1] = 0XAD97; //第一行的颜色
            okbtn->bkctbl[2] = 0XAD97; //上半部分颜色
            okbtn->bkctbl[3] = 0X8452; //下半部分颜色
        }
    }
    if(mode & (1 << 1)) { //需要显示取消按键
        if(mode & (1 << 0)) {
            cancelbtn = btn_creat(x + offx * 2 + MSG_BOX_BTN1_WIDTH, y + height - MSG_BOX_BTN_HEIGHT - 10, offy, MSG_BOX_BTN_HEIGHT, 0, 0x02);    //创建cancel按钮
        } else {
            cancelbtn = btn_creat(x + offx, y + height - MSG_BOX_BTN_HEIGHT - 10, offy, MSG_BOX_BTN_HEIGHT, 0, 0x02);    //创建cancel按钮
        }
        if(cancelbtn == NULL) {
            rval = 1;
        } else {
            cancelbtn->caption = (u8 *)GUI_CANCEL_CAPTION_TBL[gui_phy.language]; //确认
            cancelbtn->bkctbl[0] = 0X8452; //边框颜色
            cancelbtn->bkctbl[1] = 0XAD97; //第一行的颜色
            cancelbtn->bkctbl[2] = 0XAD97; //上半部分颜色
            cancelbtn->bkctbl[3] = 0X8452; //下半部分颜色
        }
    }
    if(twin == NULL) {
        rval = 1;
    } else {
        twin->caption = caption;
        window_draw(twin);			//画出窗体
        btn_draw(okbtn);			//画按钮
        btn_draw(cancelbtn);		//画按钮
        if((mode & 0X03) == 0) {
            rval = 1; //不需要进入while
            strheight = height - (WIN_CAPTION_HEIGHT + 5);
        } else {
            strheight = height - (WIN_CAPTION_HEIGHT + 50 + 5);
        }

        temp = strlen((const char *)str) * (font / 2);	//得到字符串长度
        if(temp >= (width - 10)) {
            offx = 5;    //得到x的偏移
        } else {
            offx = (width - temp) / 2;
        }

        temp = gui_get_stringline(str, width - offx * 2, font) * font; //得到字符串要占用的行数(像素)
        if(temp >= strheight) {
            offy = 5;    //得到y的偏移
        } else {
            offy = (strheight - temp) / 2;
        }
        gui_show_string(str, x + offx, y + WIN_CAPTION_HEIGHT + offy, width - offx * 2, strheight, font, color);	//显示要显示的文字
    }
    //	system_task_return=0;//取消TPAD
    while(rval == 0) {
        tp_dev.scan(0);
        in_obj.get_key(&tp_dev, IN_TYPE_TOUCH);	//得到按键键值
        //在其他系统里面,用户可以自行去掉此句
        // 		if(system_task_return)//TPAD返回
        //		{
        //			rval=0XFE;//视为取消的情况,退出
        // 			break;
        //		}
        delay_ms(10);							//延时10ms
        if(okbtn) {
            res = btn_check(okbtn, &in_obj);		//确认按钮检测
            if(res) {
                if((okbtn->sta & 0X80) == 0) {	//有有效操作
                    rval = 0XFF;
                    break;//退出
                }
            }
        }
        if(cancelbtn) {
            res = btn_check(cancelbtn, &in_obj);	//返回按钮检测
            if(res) {
                if((cancelbtn->sta & 0X80) == 0) {	//有有效操作
                    rval = 0XFE;
                    break;//退出
                }
            }
        }
    }
    btn_delete(cancelbtn);	//删除按钮
    btn_delete(okbtn);		//删除按钮
    window_delete(twin);	//删除窗体
    if(rval == 0XFF) {
        return 1;    //确认
    }
    if(rval == 0XFE) {
        return 2;    //取消
    }
    return 0;	    		//错误或者无操作
}