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

📄 coord.h

📁 下载来的一个看图软件的源代码
💻 H
字号:
/* libwmf ("player/coord.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.  *//* File to be included from player/player.c */#ifndef WMFPLAYER_COORD_H#define WMFPLAYER_COORD_H/** * Set the device origin coordinate. *  * @param API  the API handle * @param d_pt origin in device coordinates *  * Not really recommended. */void wmf_set_viewport_origin (wmfAPI* API,wmfD_Coord d_pt){	wmfPlayer_t* P = (wmfPlayer_t*) API->player_data;	P->Viewport_Origin = d_pt;}static wmfL_Coord L_Coord (wmfAPI* API,U16 u16_x,U16 u16_y){	wmfL_Coord l_pt;	l_pt.x = U16_2_S32 (u16_x);	l_pt.y = U16_2_S32 (u16_y);	return (l_pt);}static void D_Rect (wmfAPI* API,wmfD_Rect* d_r,U16 u16_x1,U16 u16_y1,U16 u16_x2,U16 u16_y2){	wmfL_Coord l_pt_1;	wmfL_Coord l_pt_2;	wmfD_Coord d_pt_1;	wmfD_Coord d_pt_2;	l_pt_1.x = U16_2_S32 (u16_x1);	l_pt_1.y = U16_2_S32 (u16_y1);	l_pt_2.x = U16_2_S32 (u16_x2);	l_pt_2.y = U16_2_S32 (u16_y2);	d_pt_1 = wmf_D_Coord_translate (API,l_pt_1);	d_pt_2 = wmf_D_Coord_translate (API,l_pt_2);	if (d_pt_1.x <= d_pt_2.x)	{	d_r->TL.x = d_pt_1.x;		d_r->BR.x = d_pt_2.x;	}	else	{	d_r->TL.x = d_pt_2.x;		d_r->BR.x = d_pt_1.x;	}	if (d_pt_1.y <= d_pt_2.y)	{	d_r->TL.y = d_pt_1.y;		d_r->BR.y = d_pt_2.y;	}	else	{	d_r->TL.y = d_pt_2.y;		d_r->BR.y = d_pt_1.y;	}}static void D_Coord_Register (wmfAPI* API,wmfD_Coord d_pt,float scope){	wmfPlayer_t* P = (wmfPlayer_t*) API->player_data;	if ((P->flags & PLAYER_TLBR_D_SET) == 0)	{	P->D_TL = d_pt;		P->D_BR = d_pt;		P->flags |= PLAYER_TLBR_D_SET;	}	scope = ABS (scope);	if (P->D_TL.x > (d_pt.x - scope)) P->D_TL.x = d_pt.x - scope;	if (P->D_TL.y > (d_pt.y - scope)) P->D_TL.y = d_pt.y - scope;	if (P->D_BR.x < (d_pt.x + scope)) P->D_BR.x = d_pt.x + scope;	if (P->D_BR.y < (d_pt.y + scope)) P->D_BR.y = d_pt.y + scope;}static wmfL_Coord wmf_L_Coord_translate (wmfAPI* API,wmfD_Coord d_pt){	wmfPlayer_t* P = (wmfPlayer_t*) API->player_data;	wmfL_Coord l_pt;	d_pt.x += P->Viewport_Origin.x;	d_pt.y += P->Viewport_Origin.y;	l_pt.x = (float) ((double) d_pt.x / PixelWidth (API));	l_pt.y = (float) ((double) d_pt.y / PixelHeight (API));	l_pt.x += P->dc->Window.Ox;	l_pt.y += P->dc->Window.Oy;	return (l_pt);}static wmfD_Coord wmf_D_Coord_translate (wmfAPI* API,wmfL_Coord l_pt){	wmfPlayer_t* P = (wmfPlayer_t*) API->player_data;	wmfD_Coord d_pt;	l_pt.x -= P->dc->Window.Ox;	l_pt.y -= P->dc->Window.Oy;	d_pt.x = (float) ((double) l_pt.x * PixelWidth (API));	d_pt.y = (float) ((double) l_pt.y * PixelHeight (API));	d_pt.x -= P->Viewport_Origin.x;	d_pt.y -= P->Viewport_Origin.y;	return (d_pt);}static void WmfSetMapMode (wmfAPI* API,U16 map_mode){	wmfPlayer_t* P = (wmfPlayer_t*) API->player_data;	switch (map_mode)	{	case (MM_TEXT): /* each unit is 1pt */ WMF_DEBUG (API,"map_mode: MM_TEXT");		P->dc->pixel_width  = 1;		P->dc->pixel_height = 1;	break;	case (MM_LOMETRIC): /* each unit is 0.1mm */ WMF_DEBUG (API,"map_mode: MM_LOMETRIC");		P->dc->pixel_width  = INCH_TO_POINT (MM_TO_INCH (0.1));		P->dc->pixel_height = INCH_TO_POINT (MM_TO_INCH (0.1));	break;	case (MM_HIMETRIC): /* each unit is 0.01mm */ WMF_DEBUG (API,"map_mode: MM_HIMETRIC");		P->dc->pixel_width  = INCH_TO_POINT (MM_TO_INCH (0.01));		P->dc->pixel_height = INCH_TO_POINT (MM_TO_INCH (0.01));	break;	case (MM_LOENGLISH): /* each unit is 0.01 inch */ WMF_DEBUG (API,"map_mode: MM_LOENGLISH");		P->dc->pixel_width  = INCH_TO_POINT (0.01);		P->dc->pixel_height = INCH_TO_POINT (0.01);	break;	case (MM_HIENGLISH): /* each unit is 0.001 inch */ WMF_DEBUG (API,"map_mode: MM_HIENGLISH");		P->dc->pixel_width  = INCH_TO_POINT (0.001);		P->dc->pixel_height = INCH_TO_POINT (0.001);	break;	case (MM_TWIPS): /* each unit is 1/1440 inch */ WMF_DEBUG (API,"map_mode: MM_TWIPS");		P->dc->pixel_width  = 0.05;		P->dc->pixel_height = 0.05;	break;	case (MM_ISOTROPIC):	case (MM_ANISOTROPIC): WMF_DEBUG (API,"map_mode: MM_[AN]ISOTROPIC");		/* scale here depends on window & viewport extents */		PixelWidth (API);		PixelHeight (API);	break;	default:		if (PLACEABLE (API))		{	WMF_DEBUG (API,"map_mode: MM_DPI (placeable)");			P->dc->pixel_width  = INCH_TO_POINT ((double) 1 / (double) DPI (API));			P->dc->pixel_height = INCH_TO_POINT ((double) 1 / (double) DPI (API));			map_mode = MM_DPI; /* [fjf] added this - uncertainly */		}		else		{	WMF_ERROR (API,"unexpected mapping mode!");			API->err = wmf_E_BadFormat;		}	break;	}	P->dc->map_mode = map_mode;}static double PixelWidth (wmfAPI* API){	wmfPlayer_t* P = (wmfPlayer_t*) API->player_data;	switch (P->dc->map_mode)	{	case (MM_ISOTROPIC):	/* scale here depends on window & viewport extents */	case (MM_ANISOTROPIC):		if (P->dc->Window.width == 0)		{	WMF_ERROR (API,"PixelWidth: window has bad size!");			API->err = wmf_E_BadFormat;			break;		}		if (P->Viewport_Width == 0)		{	WMF_ERROR (API,"PixelWidth: viewport has bad size!");			API->err = wmf_E_BadFormat;			break;		}		P->dc->pixel_width  = (double) P->Viewport_Width  / (double) P->dc->Window.width;	break;	case (MM_TEXT):      /* each unit is 1pt */	case (MM_LOMETRIC):  /* each unit is 0.1mm */	case (MM_HIMETRIC):  /* each unit is 0.01mm */	case (MM_LOENGLISH): /* each unit is 0.01 inch */	case (MM_HIENGLISH): /* each unit is 0.001 inch */	case (MM_TWIPS):     /* each unit is 1/1440 inch */	case (MM_DPI):       /* isotropic; placeable meta file */	break;	default:		if (!ERR (API))		{	WMF_ERROR (API,"unexpected mapping mode!");			API->err = wmf_E_Glitch;		}	break;	}	if (ERR (API)) return (1);	return (P->dc->pixel_width);}static double PixelHeight (wmfAPI* API){	wmfPlayer_t* P = (wmfPlayer_t*) API->player_data;	switch (P->dc->map_mode)	{	case (MM_ISOTROPIC):	/* scale here depends on window & viewport extents */	case (MM_ANISOTROPIC):		if (P->dc->Window.height == 0)		{	WMF_ERROR (API,"PixelHeight: window has bad size!");			API->err = wmf_E_BadFormat;			break;		}		if (P->Viewport_Height == 0)		{	WMF_ERROR (API,"PixelHeight: viewport has bad size!");			API->err = wmf_E_BadFormat;			break;		}		P->dc->pixel_height  = (double) P->Viewport_Height / (double) P->dc->Window.height;	break;	case (MM_TEXT):      /* each unit is 1pt */	case (MM_LOMETRIC):  /* each unit is 0.1mm */	case (MM_HIMETRIC):  /* each unit is 0.01mm */	case (MM_LOENGLISH): /* each unit is 0.01 inch */	case (MM_HIENGLISH): /* each unit is 0.001 inch */	case (MM_TWIPS):     /* each unit is 1/1440 inch */	case (MM_DPI):       /* isotropic; placeable meta file */	break;	default:		if (!ERR (API))		{	WMF_ERROR (API,"unexpected mapping mode!");			API->err = wmf_E_Glitch;		}	break;	}	if (ERR (API)) return (1);	return (P->dc->pixel_height);}#endif /* ! WMFPLAYER_COORD_H */

⌨️ 快捷键说明

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