[DFB] 显示字符串 走马灯效果

来源:互联网 发布:营销软件开发 编辑:程序博客网 时间:2024/05/23 01:57

//字体显示
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>

#include <directfb/directfb.h>

static IDirectFB            *dfb = NULL;
static IDirectFBSurface        *primary = NULL;
static IDirectFBFont        *font = NULL;//IDerectFBFont为测量字符的接口,用于计量字符串或单个字符,查询/选择编码等

static char *text = "DirectFB Chinsung !";//此为需要显示的字符
static int screen_width        = 0;
static int screen_height    = 0;

int main()
{
    int i, width;
    DFBFontDescription        font_dsc;
    DFBSurfaceDescription    dsc;

    DirectFBInit(0, 0);
    DirectFBCreate(&dfb);

    dfb->SetCooperativeLevel(dfb, DFSCL_FULLSCREEN);

    dsc.flags = DSDESC_CAPS;                        //建立用于创建primary的描述
    dsc.caps  = DSCAPS_PRIMARY | DSCAPS_FLIPPING;

    dfb->CreateSurface(dfb, &dsc, &primary);//利用先前的dsc描述创建一个IDirectFBSurface
    primary->GetSize(primary, &screen_width, &screen_height);//将primary刚才获取到的屏幕长宽赋给screen_width和screen_height
   
    font_dsc.flags = DFDESC_HEIGHT;
    font_dsc.height = 48;    //设置DFBFontDescription相应属性,这里将字高设为 48

    dfb->CreateFont(dfb, "./simkai.ttf", &font_dsc, &font);//利用刚刚设置好的DFBFontDescription创建字体对象
    primary->SetFont(primary, font);    //设置primary要使用的字体对象,这里为font
    font->GetStringWidth(font, text, -1, &width);//设置要使用的字体的宽度,并将其结果赋给width

    //走马灯效果
    for(i = screen_width; i > -width; --i){
        //清空屏幕
        primary->SetColor(primary, 0x0, 0x0, 0x0, 0xff);               
        primary->FillRectangle(primary, 0, 0, screen_width, screen_height);

        //显示字符串
        primary->SetColor (primary, 0x80, 0x0, 0x20, 0x80);
        primary->DrawString (primary, text, -1, i, screen_height/2, DSTF_LEFT);

        primary->Flip (primary, NULL, DSFLIP_WAITFORSYNC); //最后Flip一下使前面的操作在屏幕上可见
    }

    font->Release(font);
    primary->Release(primary);
    dfb->Release(dfb);

    return 0;

}

原创粉丝点击