SDL_TTF その3

前回に引き続き、今回もSDL_TTFを改良したプログラムを掲載します。

ゲームなどで使いやすいように、
ライブラリにして公開します。

関数についての細かい説明は、ダウンロードしたフォルダにソースコードが入っておりますので、適当に読んでください。

下のソースコードは、ライブラリ化したlibttfを使って、文字列を描画するサンプルプログラムです。



サンプル画像

SDL_ttf



ソースコードのダウンロード




SDL_TTFを使う場合の注意点として、文字コードの取り扱いに気をつける必要があります。
VC++のエディターだと、ソースコード内で記述したテキストの文字コードはJISコードになっていたと思います。




SDL_TTFに日本語等の2バイト文字を食わせる場合、文字コードは必ず
UnicodeUTF-8 にしておく必要があります。
でないと文字化けしてしまいます。


できれば何とかしてSJIS文字コードに対応した形でここに公開したかったが、情報が少ないうえ、かなり時間がかかりそうなので今回は見合わせました...(´・ω・`)




libttf.h





/****************************************
    概要:TTFフォント読み込み・描画
    詳細:SDL_TTFを使用して描画を行う
    ファイル名:libttf.h
*****************************************/
#ifndef FONT_TTF_H
#define FONT_TTF_H

#include <SDL/SDL.h>
#include <SDL/SDL_ttf.h>
#include <stdio.h>
#include <string.h>

#define TTF_MAXSIZE (72)

/****************************************/
/*              定数宣言                */
/****************************************/
enum DRAW_STYLE{    /*  フォントスタイル*/
    DRW_NORMAL = 0, /*  通常    */
    DRW_BOLD,       /*  太字    */
    DRW_ITALIC,     /*  斜体    */
    DRW_UNDERLINE,  /*  下線    */
    DRW_NUM,
};

typedef enum GRADATION_STYLE{
    GRD_DOWN,
    GRD_RIGHT,
    GRD_LEFT,
    GRD_UP,
    GRD_SLOPE_LEFT,
    GRD_SLOPE_RIGHT,
    GRD_MAX,
}GRD_STYLE;


/****************************************/
/*              色情報構造体            */
/****************************************/
typedef union {
    /*  文字列最初のフォントカラー  */
    Uint32  bit32;      /*色情報*/
    struct {
        Uint32  b : 8;  /*青    */
        Uint32  g : 8;  /*緑    */
        Uint32  r : 8;  /*赤    */
        Uint32  a : 8;  /*透過色*/
    } bit8;
} TTF_Color;

/****************************************/
/*          フォント情報構造体          */
/****************************************/
typedef struct ttf_info {
    int     style;  /*  スタイル        */
    int     interval;
    GRD_STYLE   gstyle;
    int     x;
    int     y;
    TTF_Color   color;
    TTF_Color   gradation;
}TTF_Info;

/****************************************/
/*              関数宣言                */
/****************************************/
int ttf_init(SDL_Surface *screen,const char *file_path, Uint8 size);
void ttf_dest(void);
int ttf_remake(const char *file_path, Uint8 size);
void ttf_color(Uint32 color);
SDL_Rect ttf_put(const char *str,int x,int y);
SDL_Rect ttf_put_color(const char *str,int x,int y, Uint32 color);
SDL_Rect ttf_put_effect(const char *str,TTF_Info *info);
SDL_Rect ttf_put_effect2(const char *str,TTF_Info *info);
void ttf_clean(void);


#endif
/****************************************
            end libttf.h
*****************************************/