DirectFB 之 字体显示(2)
框架
示例代码
/**********************************************
* Author: younger.liucn@hotmail.com
* File name: dfbFont.c
* Description: dfbFont
* Version, Desc
* 1.1 Created
* 1.2 add config
**********************************************/ #include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <errno.h>
#include <string.h> #include <time.h>
#include <sys/time.h>
#include <directfb.h> #include "dfbFont.h" /* config information */ /*********************************************************
* log flags and func of debug and error infor.[Begin]
********************************************************/
//#define DFB_SYS_LAYER
//#define _DFB_DEBUG_ #define DFB_FONT_TYPE_1 "/home/liuyiy/DFB/Font/data/decker.ttf" #define WINDOW_TEXT_LEN_X_PER (0.5)
#define WINDOW_TEXT_LEN_Y_PER (0.1)
#define WINDOW_TEXT_OFFSET_X_PER (0.25)
#define WINDOW_TEXT_OFFSET_Y_PER (0.75) #ifdef _DFB_DEBUG_
#define DFB_DEBUG(format, ...) do { \
printf("[BootAnimation:%4dL]DEBUG: "format, __LINE__, ##__VA_ARGS__); \
} while (0)
#else
#define DFB_DEBUG(format, ...) do {} while (0)
#endif #define DFB_NOTICE(format, ...) do { \
printf("[BootAnimation:%4dL]INFO: "format, __LINE__, ##__VA_ARGS__); \
} while (0) #define DFB_ERROR(format, ...) do { \
printf("[BootAnimation:%4dL]ERROR: "format, __LINE__, ##__VA_ARGS__); \
} while (0)
/*********************************************************
* log flags and func of debug and error infor.[End]
********************************************************/ /*********************************************************
* Data structure and Global variants [Begin]
********************************************************/
/* 使用directFB画图所需的四个DFB资源 */
struct AnimationDsc {
IDirectFB *dfb;
IDirectFBDisplayLayer *layer;
IDirectFBWindow *window;
IDirectFBSurface *surface;
IDirectFBFont *font;
};
static struct AnimationDsc badsc; static char *testString = "Hello world! This is DirectFB!";
/*********************************************************
* Data structure and Global variants [End]
********************************************************/ /*********************************************************
* Some functions help animation [Begin]
********************************************************/ /*********************************************************
* Some functions help animation [End]
********************************************************/ void freeResources()
{
/* Release the window's surface. */
if(badsc.surface)
badsc.surface->Release(badsc.surface);
/* Release the window. */
if (badsc.window)
badsc.window->Release(badsc.window);
/* Release the layer. */
if (badsc.layer)
badsc.layer->Release(badsc.layer); badsc.dfb->Release(badsc.dfb); return ;
} static void initResources(int argc, char **argv)
{
DFBResult ret;
badsc.window = NULL;
badsc.surface = NULL;
badsc.dfb = NULL;
IDirectFB *dfb = NULL;
DFBWindowDescription desc;
DFBDisplayLayerConfig config; /* 初始化DirectFB */
DirectFBInit(&argc, &argv);
DirectFBCreate(&dfb);
if (!dfb) {
DFB_ERROR("directfb interface is NULL\n");
return ;
}
badsc.dfb = dfb; /* 初始化 display layer:其中DFB_LAYERID_USING设置为0.*/
ret = badsc.dfb->GetDisplayLayer(badsc.dfb, DFB_LAYERID_USING, &(badsc.layer));
if(ret != (DFBResult)DFB_OK) {
DFB_ERROR("Get layer(%d) failed!\n", DFB_LAYERID_USING);
goto fail;
} else {
DFB_DEBUG("Get layer(%d) independently.\n", DFB_LAYERID_USING);
} /* 获取display layer的配置,. */
badsc.layer->GetConfiguration(badsc.layer, &config); /* 设置window参数,并创建Window */
desc.flags = (DFBWindowDescriptionFlags)(DWDESC_POSX | DWDESC_POSY | DWDESC_WIDTH | DWDESC_HEIGHT | DWDESC_CAPS | DWDESC_OPTIONS);
DFB_NOTICE("Layer Screen width %d, height %d !\n", config.width, config.height);
desc.posx = WINDOW_TEXT_OFFSET_X_PER * config.width;
desc.posy = WINDOW_TEXT_OFFSET_Y_PER * config.height;
desc.width = WINDOW_TEXT_LEN_X_PER * config.width;
desc.height = WINDOW_TEXT_LEN_Y_PER * config.height;
desc.caps = (DFBWindowCapabilities)(DWCAPS_NODECORATION);
desc.options = (DFBWindowOptions) (DWOP_GHOST);
ret = badsc.layer->CreateWindow(badsc.layer, &desc, &(badsc.window));
if(ret != (DFBResult)DFB_OK) {
DFB_ERROR("Create window failed!\n");
goto fail;
} /* 设置透明度 */
ret = badsc.window->SetOpacity(badsc.window, 0xFF);
if(ret != (DFBResult)DFB_OK) {
DFB_ERROR("SetOpacity failed!\n");
goto fail;
} /* 获取window的surface. */
ret = badsc.window->GetSurface(badsc.window, &(badsc.surface));
if(ret != (DFBResult)DFB_OK) {
DFB_ERROR("SetOpacity failed!\n");
goto fail;
} return ;
fail:
freeResources();
return ;
} /* font init */
static initFont()
{
DFBFontDescription font_desc;
font_desc.flags = DFDESC_HEIGHT;
font_desc.height = 30;
badsc.dfb->CreateFont(badsc.dfb, DFB_FONT_TYPE_1, &font_desc, &badsc.font); return ;
} static void flipText(IDirectFBFont* font, IDirectFBSurface* surface, char* str) {
int w = 0, h = 0; surface->GetSize(surface, &w, &h);
surface->Clear(surface, 0x0, 0x0, 0x0, 0xff);
surface->SetFont(surface, font);
/* 设置前景颜色 */
surface->SetColor(surface, 0x00, 0xFF, 0x00, 0xFF);
surface->DrawString(surface, str, strlen(str), w / 2, h / 2, DSTF_CENTER);
/* 变换、更新surface buffer */
surface->Flip(surface, NULL, DSFLIP_WAITFORSYNC);
return ;
} static void doMovie()
{
int ret = 0, i = 0;
int width = 0, height = 0;
struct timespec before_draw, after_draw;
unsigned long elapsed_msec = 0, total_msec = 0;
IDirectFBSurface *primary = badsc.surface;
IDirectFBSurface *bg_sfc = NULL; DFB_NOTICE("Animation start ...\n");
flipText(badsc.font, primary, testString);
usleep(2*1000*1000); out:
primary->SetColor(primary, 0, 0, 0, 0);
primary->Clear(primary, 0, 0, 0, 0);
primary->Flip(primary, NULL, DSFLIP_WAITFORSYNC);
DFB_NOTICE("Animation exit with black screen...\n"); return ;
}
int main(int argc, char **argv)
{
DFB_NOTICE("Animation entry.\n");
initResources(argc, argv);
initFont();
doMovie();
freeResources(); DFB_NOTICE("Animation exit.\n");
return 0;
}
作者:Younger Liu,
本作品采用知识共享署名-非商业性使用-相同方式共享 3.0 未本地化版本许可协议进行许可。
DirectFB 之 字体显示(2)的更多相关文章
- DirectFB 之 字体显示
通过本文,可以简单地了解directfb字体内部运行机制. 简介 SetFont函数,是每次写字体前必须调用的一个函数,否则directfb程序将会报错.这个函数是将某种字体与某个surface相关联 ...
- python: HTML之 鼠标放上去下拉项字体显示不同颜色
鼠标放上去下拉项字体显示不同颜色 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "h ...
- CAD字体显示问号的解决办法
CAD字体显示问号的解决办法1.选中问号的文字,ctrl+1查看下文字样式,以standard为例.2.运行st命令,设置standard样式的字体名为windows自带的ttf字体,例如宋体或者仿宋 ...
- 关于JAVA应用中文字体显示小方框的问题解决
最近碰到linux下jboss应用中中文字体显示为小方框: “在JRE 5以上的java环境中,java会自动加载$JAVA_HOME/jre/lib/fonts目录下的字体.链接或复制宋体或微软雅黑 ...
- postman6 在Linux中,body和response字体显示不正常的解决方法
在Linux中,postman的body和response使用的默认字体如果没有安装的话,会导致字体和光标的位置不一致,例如字体显示长度只有30,而光标在70的位置,导致编辑困难. 经查找css的定义 ...
- 解决Android版Firefox字体显示过大的问题
在用Android版Firefox查看博客园首页发现中间区域的字体显示非常大,开始以为是首页css对移动版浏览器支持不好. 后来发现原来这是Firefox for Android的知名bug: Tha ...
- html lang="zh-cn"解决Mac版Firefox中文字体显示问题
这两天在Mac下被Firefox的中文字体显示问题所困扰.在Firefox中将Sans-serif字体设置为SimSun-ExtB(新宋体)或英文字体(这时会用Mac默认中文字体),如下图: 浏览园子 ...
- 解决苹果手机Safari浏览器下 字体显示为 蓝色的 问题
解决苹果手机 Safari浏览器下 字体显示为蓝色的 问题 近期测试同学测试,wap站上,底部文字在苹果8上面 ,使用 Safari浏览器打开,一直显示 蓝色字体 其他正常,寻找半天无解,最后 阳 ...
- sharpdevelop 调整代码字体显示大小
SharpDevelop中使用ctrl+鼠标滚轮可以调整代码的字体显示大小
随机推荐
- yii 常用一些调用 (增加中)
调用YII框架中 jquery:Yii::app()->clientScript->registerCoreScript('jquery'); framework/web/j ...
- 2.WP8.1开发_在顶部显示标题和进度
有时候加载页面的时候,需要在信号那一栏显示进度,或者把信号栏改成标题 1.确保显示状态栏.默认显示.如果不显示,可以在应用程序启动后手动用代码显示,代码如下: //取得状态栏 StatusBar ba ...
- MySQL表-----查询------
``模糊查询4.2.1[使用like进行模糊查询]注意:like运算副只用于字符串,所以仅与char和varchar数据类型联合使用例:select * from a where name like ...
- MyBatis原始dao开发及问题总结(五)
一.MyBatis原始Dao开发方式 1.原始dao开发需要程序员编写dao接口和dao接口实现类 编写UserDao接口:UserDao.java package codeRose.dao; pub ...
- XAMPP安装报错及解决
FROM:http://www.zeeronsolutions.com/installing-xampp-on-windows-7-user-account-control-uac-warning-m ...
- ActiveMQ Part 1 : 基本安装配置(windows 版本)
1. 安装启动服务 A) 首先下载并安装最新的 JDK(本文使用:jdk-8u66-windows-x64.exe) B) 从官网下载最新的安装包(本文下载版本为:http://activemq.ap ...
- RecyclerView中装饰者模式应用
近段时间一直在加班,在赶一个项目,现在项目接近尾声,那么需要对过去一段时间工作内容进行复盘,总结下比较好的解决方案,积累一些经验,我认为的学习方式,是「理论-实践-总结-分享」,这一种很好的沉淀方式. ...
- js获取url中的参数方法
直接调用函数即可,函数如下: function getURLParam(name) { return decodeURIComponent((new RegExp('[?|&]' + name ...
- cloud-init 工作原理 - 每天5分钟玩转 OpenStack(171)
cloud-init 是 linux 的一个工具,当系统启动时,cloud-init 可从 nova metadata 服务或者 config drive 中获取 metadata,完成包括但不限于下 ...
- 老李分享:开发python的unittest结果输出样式
老李分享:开发python的unittest结果输出样式 Python的unittest结果命令行输出,格式比较乱.为了提高格式输出的可读性,实现可以不同的颜色标识.所以准备扩展Python的un ...