基于嵌入式的TXT电子书阅读 - 图文(8)

2019-04-02 09:38

信息科学与技术学院学士学位论文

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


基于嵌入式的TXT电子书阅读 - 图文(8).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:汇编课程设计

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: