通过本文,可以简单地了解directfb字体内部运行机制。

简介

SetFont函数,是每次写字体前必须调用的一个函数,否则directfb程序将会报错。这个函数是将某种字体与某个surface相关联。

GetAscender与GetHeight调用该函数可以有效的确定字体的ascend和fontheight,这两个函数函数有利于我们的排版。

GetStringBreak (
IDirectFBFont * thiz,
const char * text,
int bytes,
int max_width,
int * ret_width,
int * ret_str_length,
const char ** ret_next_line
);

这个函数同样对我们很有用了,它可以确定某一行有多少个字符,该行是否写满,如果没有写满的话,
ret_next_line返回下一行第一个字符指针。

      ret_str_length 返回字母个数,或者汉字的个数,你不能直接在DrawString()函数中直接使用这个值,否则有可能出错,解决的办法如下:假如你能确定你字符的编码方式的话,假如是ascii编码,你可以直接使用该值,如果是Unicode编码,你需要做*2操作,最直接的办法是
假如ret_next_line不为空的话,(ret_next_line-text)*sizeof(char)这个值直接可以用了,注意,一定是不为空时才能这样。

      通过这三个函数,你可以轻松的实现界面的字体设置,排版,换行功能。

DFBResult DrawString (
IDirectFBSurface * thiz,
const char * text,
int bytes,
int x,
int y,
DFBSurfaceTextFlags flags
);

在指定位置根据指定的颜色,按照指定的对其方式flags画出某一个字符串text

示例

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <directfb.h> static IDirectFB *dfb = NULL;
static IDirectFBSurface *primary = NULL; static int screen_width = 0;
static int screen_height = 0; static IDirectFBFont *font_decker = NULL;
static IDirectFBFont *font_cuprum = NULL;
static IDirectFBFont *font_monaco = NULL;
static char *text1 = "DirectFB rulez! - decker.ttf";
static char *text2 = "DirectFB rulez! - cuprum.otf";
static char *text3 = "DirectFB rulez! - monaco.ttf"; #define DFBCHECK(x...) { \
DFBResult err = x; \
if(err != DFB_OK) { \
fprintf(stderr, "%s <%d>:\n\t", __FILE__, __LINE__); \
DirectFBErrorFatal(#x, err); \
} \
} int main(int argc, char **argv) {
DFBFontDescription font_dsc;
DFBSurfaceDescription dsc; DirectFBInit(&argc, &argv);
DirectFBCreate(&dfb);
dfb->SetCooperativeLevel(dfb, DFSCL_FULLSCREEN);
dsc.flags = DSDESC_CAPS;
dsc.caps = DSCAPS_PRIMARY | DSCAPS_FLIPPING; dfb->CreateSurface(dfb, &dsc, &primary);
primary->GetSize(primary, &screen_width, &screen_height); font_dsc.flags = DFDESC_HEIGHT;
font_dsc.height = 48; DFBCHECK(dfb->CreateFont(dfb, "./data/decker.ttf", &font_dsc, &font_decker));
DFBCHECK(dfb->CreateFont(dfb, "./data/Cuprum.otf", &font_dsc, &font_cuprum));
DFBCHECK(dfb->CreateFont(dfb, "./data/Monaco.ttf", &font_dsc, &font_monaco)); primary->SetColor(primary, 0x0, 0x0, 0x0, 0xff);
primary->FillRectangle(primary, 0, 0, screen_width, screen_height);
primary->SetColor(primary, 0x80, 0x0, 0x20, 0xff); primary->SetFont(primary, font_decker);
primary->DrawString(primary, text1, -1, 30, 100, DSTF_LEFT); primary->SetFont(primary, font_cuprum);
primary->DrawString(primary, text2, -1, 30, 200, DSTF_LEFT); primary->SetFont(primary, font_monaco);
primary->DrawString(primary, text3, -1, 30, 300, DSTF_LEFT); primary->Flip(primary, NULL, 0);
sleep(10); font_decker->Release(font_decker);
font_cuprum->Release(font_cuprum);
font_monaco->Release(font_monaco);
primary->Release(primary);
dfb->Release(dfb); return 0;
}

DirectFB 之 字体显示的更多相关文章

  1. DirectFB 之 字体显示(2)

    框架 示例代码 /********************************************** * Author: younger.liucn@hotmail.com * File n ...

  2. python: HTML之 鼠标放上去下拉项字体显示不同颜色

    鼠标放上去下拉项字体显示不同颜色 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "h ...

  3. CAD字体显示问号的解决办法

    CAD字体显示问号的解决办法1.选中问号的文字,ctrl+1查看下文字样式,以standard为例.2.运行st命令,设置standard样式的字体名为windows自带的ttf字体,例如宋体或者仿宋 ...

  4. 关于JAVA应用中文字体显示小方框的问题解决

    最近碰到linux下jboss应用中中文字体显示为小方框: “在JRE 5以上的java环境中,java会自动加载$JAVA_HOME/jre/lib/fonts目录下的字体.链接或复制宋体或微软雅黑 ...

  5. postman6 在Linux中,body和response字体显示不正常的解决方法

    在Linux中,postman的body和response使用的默认字体如果没有安装的话,会导致字体和光标的位置不一致,例如字体显示长度只有30,而光标在70的位置,导致编辑困难. 经查找css的定义 ...

  6. 解决Android版Firefox字体显示过大的问题

    在用Android版Firefox查看博客园首页发现中间区域的字体显示非常大,开始以为是首页css对移动版浏览器支持不好. 后来发现原来这是Firefox for Android的知名bug: Tha ...

  7. html lang="zh-cn"解决Mac版Firefox中文字体显示问题

    这两天在Mac下被Firefox的中文字体显示问题所困扰.在Firefox中将Sans-serif字体设置为SimSun-ExtB(新宋体)或英文字体(这时会用Mac默认中文字体),如下图: 浏览园子 ...

  8. 解决苹果手机Safari浏览器下 字体显示为 蓝色的 问题

    解决苹果手机 Safari浏览器下   字体显示为蓝色的 问题 近期测试同学测试,wap站上,底部文字在苹果8上面 ,使用 Safari浏览器打开,一直显示 蓝色字体 其他正常,寻找半天无解,最后 阳 ...

  9. sharpdevelop 调整代码字体显示大小

    SharpDevelop中使用ctrl+鼠标滚轮可以调整代码的字体显示大小

随机推荐

  1. SignalR指定用户推送消息

    一.首先,在MVC项目中安装SingalR包(SingalR2.0需要.net4.5以上,VS2010可以安装1.1.3版本,本例为VS2010+SignalR1.1.3). 打开工具-NuGet程序 ...

  2. 【Android】TextView跑马灯效果

    老规矩,先上图看效果. 说明 TextView的跑马灯效果也就是指当你只想让TextView单行显示,可是文本内容却又超过一行时,自动从左往右慢慢滑动显示的效果就叫跑马灯效果. 其实,TextView ...

  3. java学习笔记 --- 面向对象3

    一.创建对象是做了些什么事情? 图解: 二.static关键字 (1)静态的意思.可以修饰成员变量和成员方法. (2)静态的特点: 1.静态是随着类的加载就加载了.也是随着类的消失而消失了. 2.静态 ...

  4. CentOS 中 YUM 安装桌面环境(转)

    使用 yum groupinstall 指令很容易就能安装上图形界面的桌面系统. 1. yum 的 group 指令 yum 可以以程序组的模式来安装成套的软件包.支持的软件包可以通过, # yum ...

  5. celldb.cc

    欢迎光临 celldb.cc 的新博客 老博客的内容就不搬迁了, 工作量太大. http://celldb.cc 主要功能: 1 话单基站轨迹分析 2 基站查询 3 邻近基站查询 4 CDMA根据城市 ...

  6. Spring MVC 处理异常的3种方式

    使用Spring MVC开发的博客网站时,遇到了如何处理业务层抛出的异常的问题,查阅到了spring官方博客-spring MVC中异常的处理,以下将会以登录模块为示例. 愚蠢的处理方式 处理异常遵循 ...

  7. Java变量和对象的作用域

    大多数程序设计语言都提供了"作用域"(Scope)的概念. 对于在作用域里定义的名字,作用域同时决定了它的"可见性"以及"存在时间".在C, ...

  8. Java核心编程快速学习

    Java核心编程部分的基础学习内容就不一一介绍了,本文的重点是JAVA中相对复杂的一些概念,主体内容如下图所示. 反射reflect是理解Java语言工作原理的基础,Java编译器首先需要将我们编写的 ...

  9. 【转】Android常用工具类

    主要介绍总结的Android开发中常用的工具类,大部分同样适用于Java. 目前包括HttpUtils.DownloadManagerPro.ShellUtils.PackageUtils.Prefe ...

  10. 老李分享:《Linux Shell脚本攻略》 要点(五)

    老李分享:<Linux Shell脚本攻略> 要点(五)   //1.打包.解包 [root@localhost program_test]# tar -cf output.tar 11. ...