亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? ttf.c

?? 美化linux的kernel啟動畫面的程序
?? C
?? 第 1 頁 / 共 2 頁
字號:
/* render true type fonts to fb0  * * (w) by stepan@suse.de, code reused from SDL_ttf * */#include <math.h>#include <stdio.h>#include <stdlib.h>#include <string.h>#include <assert.h>#include <freetype/freetype.h>#include <freetype/ftoutln.h>#include <freetype/ttnameid.h>#include "ttf.h"#define DEFAULT_PTSIZE  18/* FIXME: Right now we assume the gray-scale renderer Freetype is using *    supports 256 shades of gray, but we should instead key off of num_grays *       in the result FT_Bitmap after the FT_Render_Glyph() call. */#define NUM_GRAYS       256extern unsigned int fbbytes, fbx, fby, fblinelen, alpha;extern unsigned char *framebuffer;extern unsigned int fbypos, fbxpos;unsigned char *TTF_RenderUNICODE_Shaded(TTF_Font * font,					const unsigned short *text,					unsigned int fg, unsigned int bg);/* Cached glyph information */typedef struct cached_glyph {	int stored;	FT_UInt index;	FT_Bitmap bitmap;	FT_Bitmap pixmap;	int minx;	int maxx;	int miny;	int maxy;	int yoffset;	int advance;	unsigned short cached;} c_glyph;struct _TTF_Font {	/* Freetype2 maintains all sorts of useful info itself */	FT_Face face;	/* We'll cache these ourselves */	int height;	int ascent;	int descent;	int lineskip;	/* The font style */	int style;	/* Extra width in glyph bounds for text styles */	int glyph_overhang;	float glyph_italics;	/* Information in the font for underlining */	int underline_offset;	int underline_height;	/* Cache for style-transformed glyphs */	c_glyph *current;	c_glyph cache[256];	c_glyph scratch;};static void Flush_Glyph(c_glyph * glyph);static void Flush_Cache(TTF_Font * font){	int i;	int size = sizeof(font->cache) / sizeof(font->cache[0]);	for (i = 0; i < size; ++i) {		if (font->cache[i].cached) {			Flush_Glyph(&font->cache[i]);		}	}	if (font->scratch.cached) {		Flush_Glyph(&font->scratch);	}}/* character conversion *//* Macro to convert a character to a Unicode value -- assume already Unicode */#define UNICODE(c)      cstatic unsigned short *ASCII_to_UNICODE(unsigned short *unicode,					const char *text, int len){	int i;	for (i = 0; i < len; ++i) {		unicode[i] = ((const unsigned char *) text)[i];	}	unicode[i] = 0;	return unicode;}#if 0static unsigned short *UTF8_to_UNICODE(unsigned short *unicode,				       const char *utf8, int len){	int i, j;	unsigned short ch;	for (i = 0, j = 0; i < len; ++i, ++j) {		ch = ((const unsigned char *) utf8)[i];		if (ch >= 0xF0) {			ch = (unsigned short) (utf8[i] & 0x07) << 18;			ch |= (unsigned short) (utf8[++i] & 0x3F) << 12;			ch |= (unsigned short) (utf8[++i] & 0x3F) << 6;			ch |= (unsigned short) (utf8[++i] & 0x3F);		} else if (ch >= 0xE0) {			ch = (unsigned short) (utf8[i] & 0x3F) << 12;			ch |= (unsigned short) (utf8[++i] & 0x3F) << 6;			ch |= (unsigned short) (utf8[++i] & 0x3F);		} else if (ch >= 0xC0) {			ch = (unsigned short) (utf8[i] & 0x3F) << 6;			ch |= (unsigned short) (utf8[++i] & 0x3F);		}		unicode[j] = ch;	}	unicode[j] = 0;	return unicode;}#endif/* TTF stuff */static FT_Library library;static int TTF_initialized = 0;int TTF_Init(void){	int status;	FT_Error error;	status = 0;	error = FT_Init_FreeType(&library);	if (error) {		fprintf(stderr, "Couldn't init FreeType engine %d\n",			error);		status = -1;	} else {		TTF_initialized = 1;	}	return status;}void TTF_Quit(void){	if (TTF_initialized) {		FT_Done_FreeType(library);	}	TTF_initialized = 0;}#if 0SDL_Surface *TTF_RenderText_Solid(TTF_Font * font,				  const char *text, SDL_Color fg){	SDL_Surface *textbuf;	Uint16 *unicode_text;	int unicode_len;	/* Copy the Latin-1 text to a UNICODE text buffer */	unicode_len = strlen(text);	unicode_text =	    (Uint16 *) malloc((unicode_len + 1) * (sizeof *unicode_text));	if (unicode_text == NULL) {		TTF_SetError("Out of memory");		return (NULL);	}	ASCII_to_UNICODE(unicode_text, text, unicode_len);	RenderUnicode(font, unicode_text, fg);	/* Render the new text */	textbuf = TTF_RenderUNICODE_Solid(font, unicode_text, fg);	/* Free the text buffer and return */	free(unicode_text);	return (textbuf);}#endifunsigned char *TTF_RenderText_Shaded(TTF_Font * font, const char *text,				     unsigned int fg, unsigned int bg){	unsigned char *textbuf;	unsigned short *unicode_text;	int unicode_len;	/* Copy the Latin-1 text to a UNICODE text buffer */	unicode_len = strlen(text);	unicode_text =	    (unsigned short *) malloc((unicode_len + 1) *				      (sizeof *unicode_text));	if (unicode_text == NULL) {		printf("Out of memory\n");		return (NULL);	}	ASCII_to_UNICODE(unicode_text, text, unicode_len);	/* Render the new text */	textbuf = TTF_RenderUNICODE_Shaded(font, unicode_text, fg, bg);	/* Free the text buffer and return */	free(unicode_text);	return (textbuf);}void TTF_CloseFont(TTF_Font * font){	Flush_Cache(font);	FT_Done_Face(font->face);	free(font);}void TTF_SetFontStyle(TTF_Font * font, int style){	font->style = style;	Flush_Cache(font);}TTF_Font *TTF_OpenFontIndex(const char *file, int ptsize, long index){	TTF_Font *font;	FT_Error error;	FT_Face face;	FT_Fixed scale;	extern int strict_font;	font = (TTF_Font *) malloc(sizeof *font);	if (font == NULL) {		fprintf(stderr, "Out of memory\n");		return NULL;	}	memset(font, 0, sizeof(*font));	/* Open the font and create ancillary data */	error = FT_New_Face(library, file, 0, &font->face);	if (error && !strict_font)		error =		    FT_New_Memory_Face(library,				       (const FT_Byte *) luxisri_ttf,				       LUXISRI_SIZE, 0, &font->face);	if (error) {		printf("Couldn't load font file\n");		free(font);		return NULL;	}	if (index != 0) {		if (font->face->num_faces > index) {			FT_Done_Face(font->face);			error =			    FT_New_Face(library, file, index, &font->face);			if (error) {				printf("Couldn't get font face\n");				free(font);				return NULL;			}		} else {			fprintf(stderr, "No such font face\n");			free(font);			return NULL;		}	}	face = font->face;	/* Make sure that our font face is scalable (global metrics) */	if (!FT_IS_SCALABLE(face)) {		fprintf(stderr, "Font face is not scalable\n");		TTF_CloseFont(font);		return NULL;	}	/* Set the character size and use default DPI (72) */	error = FT_Set_Char_Size(font->face, 0, ptsize * 64, 0, 0);	if (error) {		fprintf(stderr, "Couldn't set font size\n");		TTF_CloseFont(font);		return NULL;	}	/* Get the scalable font metrics for this font */	scale = face->size->metrics.y_scale;	font->ascent = FT_CEIL(FT_MulFix(face->bbox.yMax, scale));	font->descent = FT_CEIL(FT_MulFix(face->bbox.yMin, scale));	font->height = font->ascent - font->descent + /* baseline */ 1;	font->lineskip = FT_CEIL(FT_MulFix(face->height, scale));	font->underline_offset =	    FT_FLOOR(FT_MulFix(face->underline_position, scale));	font->underline_height =	    FT_FLOOR(FT_MulFix(face->underline_thickness, scale));	if (font->underline_height < 1) {		font->underline_height = 1;	}#ifdef DEBUG_FONTS	printf("Font metrics:\n");	printf("\tascent = %d, descent = %d\n",	       font->ascent, font->descent);	printf("\theight = %d, lineskip = %d\n",	       font->height, font->lineskip);	printf("\tunderline_offset = %d, underline_height = %d\n",	       font->underline_offset, font->underline_height);#endif	/* Set the default font style */	font->style = TTF_STYLE_NORMAL;	font->glyph_overhang = face->size->metrics.y_ppem / 10;	/* x offset = cos(((90.0-12)/360)*2*M_PI), or 12 degree angle */	font->glyph_italics = 0.207f;	font->glyph_italics *= font->height;	return font;}TTF_Font *TTF_OpenFont(const char *file, int ptsize){	return TTF_OpenFontIndex(file, ptsize, 0);}static void Flush_Glyph(c_glyph * glyph){	glyph->stored = 0;	glyph->index = 0;	if (glyph->bitmap.buffer) {		free(glyph->bitmap.buffer);		glyph->bitmap.buffer = 0;	}	if (glyph->pixmap.buffer) {		free(glyph->pixmap.buffer);		glyph->pixmap.buffer = 0;	}	glyph->cached = 0;}static FT_Error Load_Glyph(TTF_Font * font, unsigned short ch,			   c_glyph * cached, int want){	FT_Face face;	FT_Error error;	FT_GlyphSlot glyph;	FT_Glyph_Metrics *metrics;	FT_Outline *outline;	assert(font);	assert(font->face);	face = font->face;	/* Load the glyph */	if (!cached->index) {		cached->index = FT_Get_Char_Index(face, ch);	}	error = FT_Load_Glyph(face, cached->index, FT_LOAD_DEFAULT);	if (error) {		return error;	}	/* Get our glyph shortcuts */	glyph = face->glyph;	metrics = &glyph->metrics;	outline = &glyph->outline;	/* Get the glyph metrics if desired */	if ((want & CACHED_METRICS) && !(cached->stored & CACHED_METRICS)) {		/* Get the bounding box */		cached->minx = FT_FLOOR(metrics->horiBearingX);		cached->maxx = cached->minx + FT_CEIL(metrics->width);		cached->maxy = FT_FLOOR(metrics->horiBearingY);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美怡红院视频| 国产精品自拍在线| 欧美又粗又大又爽| 亚洲综合自拍偷拍| 欧美性三三影院| 视频一区国产视频| 日韩精品一区国产麻豆| 国产一区二区三区黄视频| 久久久国际精品| 成人禁用看黄a在线| 一色桃子久久精品亚洲| 在线免费观看视频一区| 亚洲444eee在线观看| 日韩一级片在线观看| 精品中文字幕一区二区小辣椒| 久久日韩粉嫩一区二区三区| 国产精品91xxx| 亚洲精品国产无天堂网2021| 欧美日韩国产精品成人| 精东粉嫩av免费一区二区三区| 久久久久国色av免费看影院| 91在线视频在线| 亚洲一区二区三区中文字幕| 欧美一区二区观看视频| 成人污视频在线观看| 国产成人午夜片在线观看高清观看| 欧美国产一区视频在线观看| 91免费国产在线观看| 日韩不卡一二三区| 国产精品乱码人人做人人爱 | 国产精品网曝门| 99久久精品国产麻豆演员表| 亚洲国产综合色| 久久久久久久久99精品| 欧洲一区二区av| 国产精品一二二区| 亚洲伊人伊色伊影伊综合网| 欧美一级在线观看| 99精品桃花视频在线观看| 男女男精品视频| 亚洲欧洲国产日韩| www久久精品| 欧美视频在线一区二区三区| 国产成人无遮挡在线视频| 日韩精品电影一区亚洲| 中文字幕一区二区三区av| 精品三级在线观看| 欧美日韩精品久久久| 日韩欧美一级二级三级久久久| 成人免费视频视频| 久久97超碰国产精品超碰| 亚洲精品国产成人久久av盗摄| 精品国产伦理网| 欧美偷拍一区二区| 99精品视频中文字幕| 国产一区二区不卡| 蜜桃视频一区二区三区| 亚洲一区在线视频| 亚洲欧美一区二区在线观看| 国产亚洲一区字幕| 亚洲精品一线二线三线| 欧美高清激情brazzers| 欧美午夜寂寞影院| 91在线国产观看| av激情成人网| 成人国产精品免费观看动漫| 国产99久久久国产精品潘金 | 日韩欧美国产三级电影视频| 欧美性猛交xxxx乱大交退制版| av影院午夜一区| 国产91精品一区二区麻豆亚洲| 激情伊人五月天久久综合| 欧美aa在线视频| 日韩精品成人一区二区在线| 成人av影视在线观看| 国内精品伊人久久久久av影院| 日韩电影一区二区三区四区| 亚洲福利一区二区三区| 亚洲国产精品嫩草影院| 亚洲精品精品亚洲| 一区二区三区中文字幕电影 | 一区二区三区在线看| 亚洲人成网站色在线观看| 亚洲精品伦理在线| 一区二区三区中文在线| 一区二区三区中文免费| 亚洲自拍偷拍图区| 午夜在线电影亚洲一区| 日韩高清电影一区| 久久国产精品第一页| 国产一区 二区| 成人中文字幕电影| 91免费国产在线观看| 欧美主播一区二区三区| 欧美一级片在线观看| 精品国产一区二区在线观看| 久久蜜桃一区二区| 国产精品高潮呻吟| 亚洲与欧洲av电影| 免费在线观看精品| 成人在线一区二区三区| 91福利社在线观看| 日韩一区二区三免费高清| 久久久久久久网| 亚洲精品视频自拍| 日韩激情一二三区| 国产精品白丝av| 91福利在线导航| 欧美成人欧美edvon| 国产精品乱码一区二区三区软件| 一区二区三区日韩在线观看| 毛片不卡一区二区| hitomi一区二区三区精品| 欧美日韩日日摸| 久久精品夜夜夜夜久久| 一区二区三区在线观看国产| 日韩精品乱码免费| 国产69精品久久久久毛片| 欧美最猛性xxxxx直播| 久久亚洲二区三区| 一片黄亚洲嫩模| 韩国av一区二区三区在线观看| 91日韩精品一区| 精品免费视频一区二区| 一区二区三区产品免费精品久久75| 午夜在线成人av| 成人精品免费看| 日韩欧美一级在线播放| 亚洲在线视频网站| 国产.欧美.日韩| 91精品国产高清一区二区三区 | 91麻豆免费观看| 精品少妇一区二区三区免费观看| 亚洲丝袜制服诱惑| 久久99热狠狠色一区二区| 日本乱人伦一区| 国产女人18水真多18精品一级做| 午夜成人在线视频| www.欧美日韩| 久久久91精品国产一区二区三区| 亚洲成人自拍偷拍| 91蜜桃网址入口| 精品国产一区二区三区不卡| 性欧美大战久久久久久久久| 99久免费精品视频在线观看| 亚洲精品在线网站| 日本女优在线视频一区二区| 色天天综合久久久久综合片| 日本一区二区电影| 国产精品综合久久| 精品av久久707| 久久精品国产99久久6| 91精品在线一区二区| 亚洲伊人伊色伊影伊综合网| 一本久久a久久精品亚洲| 欧美国产综合一区二区| 国产河南妇女毛片精品久久久| 精品乱码亚洲一区二区不卡| 日本不卡视频一二三区| 欧美日韩三级视频| 亚洲成av人片在www色猫咪| 91国内精品野花午夜精品| 中文字幕在线不卡视频| 不卡av在线免费观看| 国产精品青草久久| a在线欧美一区| 亚洲欧美视频在线观看| 91丝袜国产在线播放| 亚洲同性同志一二三专区| 不卡视频一二三四| 日韩一区在线看| 色哟哟在线观看一区二区三区| 亚洲品质自拍视频| 在线视频欧美区| 亚洲成人免费影院| 欧美另类z0zxhd电影| 天天综合色天天综合| 日韩精品一区二区三区在线| 久久99精品国产91久久来源| 久久一二三国产| 波多野结衣中文字幕一区二区三区| 国产亚洲1区2区3区| 99久久伊人精品| 亚洲永久精品大片| 在线不卡a资源高清| 极品少妇xxxx偷拍精品少妇| 国产日韩高清在线| 色综合久久综合网欧美综合网| 亚洲一区二区三区影院| 欧美精品乱码久久久久久按摩| 蜜臀久久99精品久久久久宅男| 精品成人a区在线观看| 99在线精品一区二区三区| 一区二区高清视频在线观看| 欧美日韩一区视频| 国产一区二区电影| 亚洲激情av在线| 精品欧美乱码久久久久久| 成人av网站免费观看| 午夜久久电影网|