信息科学与技术学院学士学位论文
while(goon)
{
if( SDL_PollEvent( &event ) ) {
if( event.type == SDL_KEYDOWN ) {
process_key(event.key.keysym.sym);
// 若是按键按下
// 利用轮询机制检测事件的到来
}
else if( event.type == SDL_QUIT ) {
process_back(); } } } }
static void process_key(int keyval) {
switch(keyval)
{
case SDLK_UP:
process_page_up(); break;
// 显示上一页
case SDLK_DOWN:
process_page_down(); break;
// 显示下一页
case SDLK_LEFT:
process_line_up(); // 显示上一行
31
信息科学与技术学院学士学位论文
break;
case SDLK_RIGHT:
process_line_down(); break;
// 显示下一行
case SDLK_LCTRL:
process_back(); break;
// 退出应用程序
case SDLK_LALT:
process_zoom(); break;
// 放大显示字体
case SDLK_RALT:
process_zoom_small(); break;
// 改变字体颜色
// 缩小显示字体
case SDLK_RCTRL:
if(color_id >= COLOR_MAX) { } else{ }
txt_main_window_free(); main_window_update();
// 屏幕刷新
color_id++; color_id = 0;
default: break;
} }
32
信息科学与技术学院学士学位论文
5.2.5 翻页显示
因有上下翻页,上下行显示,上下翻页原理是一样的,其主要思想就是不断改变当前的偏移为上、下页的偏移或者是相应的上、下行的偏移,最后更新窗口。以下为向下翻页的代码:
static void process_page_down() {
apply_surface( 0, 0, background, screen,NULL );
pgtxt->cur_offset = pgtxt->next_page_offset; // 设置当前的偏移为下一页的偏移 draw_string_down(font,(Uint16*)(buf_unicode+pgtxt->cur_offset),&text_rect,textC
olor,screen,&cct,&end_flag,1);
if(end_flag == SCREEN_END) { }
if(end_flag == FILE_END) { }
if(pgtxt->cur_offset >= 0) {
draw_string_up(font,(Uint16*)(buf_unicode+pgtxt->cur_offset-2),(Uint16*)buf_uni
//设置前一页以及前一行偏移
pgtxt->next_page_offset = pgtxt->next_line_offset = pgtxt->cur_offset;
// 已经到文件结束
pgtxt->next_page_offset = pgtxt->cur_offset + 2*(cct.page_char_count); pgtxt->next_line_offset = pgtxt->cur_offset + 2*(cct.line_char_count);
// 已经到屏幕结束
code,&text_rect,textColor,screen,&cct,&end_flag,0);
}
pgtxt->pre_page_offset = pgtxt->cur_offset - 2*(cct.page_char_count); pgtxt->pre_line_offset = pgtxt->cur_offset - 2*(cct.line_char_count);
33
信息科学与技术学院学士学位论文
SDL_Flip( screen ); }
5.2.6 字体放大显示
// 刷新屏幕
字体的放大显示和缩小显示的方法类似,下面为字体放大显示的主要代码。 void process_zoom() {
}
if(pgtxt->zoom >= 11)
pgtxt->zoom = 0;
// 总共设置的字体大小为12个
else
pgtxt->zoom++;
// 关闭当前的字体
TTF_CloseFont( font ); //Open the new font size
font = TTF_OpenFont(DEFAULT_TTF_PATH, font_table[pgtxt->zoom]); txt_main_window_free(); main_window_update();
// 释放当前主窗口 // 更新主窗口
5.3 本章小结
SDL知识点是整个开发过程必不或缺的,真个开发都是基于SDL库来开发的,
了解SDL基本概念和功能是整个程序开发首要也是最重要的条件。本章从SDL的概念首先出发,讲述了什么是SDL,SDL的功能,简单讲述了SDL的基本开发模版,然后详细介绍了整个编码的思想,包括主函数中主要开发流程、TXT主窗口的创建思想,根据命令接收分别进行上下翻页,上下行翻行,退出,改变字体颜色,以及放大、缩小字体等操作。
34
信息科学与技术学院学士学位论文
6 程序移植与验证
6.1 移植需求
移植程序与测试是整个过程的最后的环节,也是至关重要的一个环节,决定了
系统是否能运行在开发板上,是否可以进行电子书的阅读。在进行移植程序之前有必要对程序的移植做个移植需求分析,可以避免在移植过程中出现一些没必要的疏忽。
TXT电子书阅读器开发是基于SDL的开发,在运行程序时需要相应的库支持,
需要用到的库有如下:
libsdl1.2-dev,
libsdl-image1.2-dev,
libsdl-mixer1.2-dev,libsdl-ttf2.0-dev, libsparsehash-dev, libsdl-gfx1.2-dev libvorsidec_dev_1.0.2
移植程序到开发板上时需要用到的主要硬件是网线。
6.2 程序移植
将以上的库添加到根文件系统中 $ cp libsdl1.2-dev
/opt/filesystem/lib
$ cp libsdl-image1.2-dev /opt/filesystem/lib $ cp libsdl-mixer1.2-dev /opt/filesystem/lib $ cp libsdl-ttf2.0-dev /opt/filesystem/lib $ cp libsparsehash-dev $ cp libsdl-gfx1.2-dev
/opt/filesystem/lib /opt/filesystem/lib
$ cp libvorsidec_dev_1.0.2 /opt/filesystem/lib
为了验证阅读器功能是否可以正常运行,采用了利用网络文件传输协议将阅读器程序挂载的方式,而不是将程序进行烧录。
将程序拷贝到虚拟机上:
35