⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 font.h

📁 下载来的一个看图软件的源代码
💻 H
字号:
/* libwmf ("ipa/x/font.h"): library for wmf conversion   Copyright (C) 2000 - various; see CREDITS, ChangeLog, and sources   The libwmf Library is free software; you can redistribute it and/or   modify it under the terms of the GNU Library General Public License as   published by the Free Software Foundation; either version 2 of the   License, or (at your option) any later version.   The libwmf Library is distributed in the hope that it will be useful,   but WITHOUT ANY WARRANTY; without even the implied warranty of   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU   Library General Public License for more details.   You should have received a copy of the GNU Library General Public   License along with the libwmf Library; see the file COPYING.  If not,   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,   Boston, MA 02111-1307, USA.  */static void wmf_x_draw_text (wmfAPI* API,wmfDrawText_t* draw_text){	wmf_x_t* ddata = WMF_X_GetData (API);	wmfFont* font = 0;	wmfRGB* bg = 0;	wmfD_Coord TL;	wmfD_Coord BR;	wmfD_Coord TR;	wmfD_Coord BL;	XPoint pt;	XPoint pts[5];	float font_height;	float font_ratio;	double theta;	double phi;	FT_Face face;	FT_F26Dot6 width;	FT_F26Dot6 height;	FT_Matrix matrix;	FT_Vector pen;	WMF_DEBUG (API,"wmf_[x_]draw_text");	setdefaultstyle (API);	if (WMF_DC_OPAQUE (draw_text->dc))	{	if ((draw_text->BR.x > draw_text->TL.x) && (draw_text->BR.y > draw_text->TL.y))		{	TL = draw_text->TL;			BR = draw_text->BR;			TR.x = draw_text->BR.x;			TR.y = draw_text->TL.y;			BL.x = draw_text->TL.x;			BL.y = draw_text->BR.y;		}		else		{	TL = draw_text->bbox.TL;			BR = draw_text->bbox.BR;			TR = draw_text->bbox.TR;			BL = draw_text->bbox.BL;		}		bg = WMF_DC_BACKGROUND (draw_text->dc);		XSetForeground (ddata->display,ddata->gc,get_color (API,bg));		pts[0] = x_translate (API,TL);		pts[1] = x_translate (API,TR);		pts[2] = x_translate (API,BR);		pts[3] = x_translate (API,BL);		pts[4] = pts[0];		if (ddata->window != None)		{	XFillPolygon (ddata->display,ddata->window,ddata->gc,pts,4,Convex,CoordModeOrigin);		}		if (ddata->pixmap != None)		{	XFillPolygon (ddata->display,ddata->pixmap,ddata->gc,pts,4,Convex,CoordModeOrigin);		}	}	else	{	bg = &wmf_white;	}	if (strlen (draw_text->str) > 1)	{	wmf_ipa_draw_text (API,draw_text,wmf_x_draw_text);		return;	}	font = WMF_DC_FONT (draw_text->dc);	face = WMF_FONT_FTFACE (font);	font_height = x_height (API,(float)  draw_text->font_height);	font_ratio  = x_width  (API,(float) (draw_text->font_height * draw_text->font_ratio));	font_ratio /= font_height;	width  = (FT_F26Dot6) (64 * font_height * font_ratio);	height = (FT_F26Dot6) (64 * font_height);	FT_Set_Char_Size (face,width,height,0,0);	theta = - WMF_TEXT_ANGLE (font);	phi = atan2 (sin (theta),font_ratio * cos (theta));	pt = x_translate_ft64 (API,draw_text->pt,&pen);	matrix.xx = (FT_Fixed) (  cos (phi) * 0x10000L);	matrix.xy = (FT_Fixed) (  sin (phi) * 0x10000L);	matrix.yx = (FT_Fixed) (- sin (phi) * 0x10000L);	matrix.yy = (FT_Fixed) (  cos (phi) * 0x10000L);	FT_Set_Transform (face,&matrix,&pen);	FT_Load_Char (face,draw_text->str[0],FT_LOAD_RENDER);	pt.x += face->glyph->bitmap_left;	pt.y -= face->glyph->bitmap_top;	x_draw_ftbitmap (API,&(face->glyph->bitmap),pt,WMF_DC_TEXTCOLOR (draw_text->dc),bg);}static void x_draw_ftbitmap (wmfAPI* API,FT_Bitmap* bitmap,XPoint pt,wmfRGB* fg,wmfRGB* bg){	wmf_x_t* ddata = WMF_X_GetData (API);	wmfRGB rgb;	float red;	float green;	float blue;	float grey; /* 1 = black(fg); 0 = white(bg) */	unsigned char* buffer;	unsigned long fg_pixel;	unsigned int row;	unsigned int rows;	unsigned int col;	unsigned int cols;	int x;	int y;	rows = bitmap->rows;	cols = bitmap->width;	fg_pixel = get_color (API,fg);	if (bitmap->pixel_mode == ft_pixel_mode_mono)	{	XSetForeground (ddata->display,ddata->gc,fg_pixel);	}	for (row = 0; row < rows; row++)	{	buffer = bitmap->buffer + row * bitmap->pitch;		y = pt.y + row;		for (col = 0; col < cols; col++)		{	if (bitmap->pixel_mode == ft_pixel_mode_grays)			{	grey = (float) buffer[col] / (float) (bitmap->num_grays - 1);			}			else if (bitmap->pixel_mode == ft_pixel_mode_mono)			{	grey = ((buffer[col>>3] << (col & 7)) & 128) ? 1 : 0;			}			else /* Unsupported ft_pixel_mode */			{	grey = 0;			}			if (grey > 0) /* if not background */			{	x = pt.x + col;				if ((grey >= 1) && (bitmap->pixel_mode != ft_pixel_mode_mono))				{	XSetForeground (ddata->display,ddata->gc,fg_pixel);				}				else /* find anti-aliased color */				{	red   = grey * (float) fg->r + (1 - grey) * (float) bg->r;					green = grey * (float) fg->g + (1 - grey) * (float) bg->g;					blue  = grey * (float) fg->b + (1 - grey) * (float) bg->b;					rgb = wmf_rgb_color (API,red/255,green/255,blue/255);					XSetForeground (ddata->display,ddata->gc,get_color (API,&rgb));				}				if (ddata->window != None)				{	XDrawPoint (ddata->display,ddata->window,ddata->gc,x,y);				}				if (ddata->pixmap != None)				{	XDrawPoint (ddata->display,ddata->pixmap,ddata->gc,x,y);				}			}		}	}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -