📄 g2_control_pd.c
字号:
/******************************************************************************* Copyright (C) 1998-2001 Ljubomir Milanovic & Horst Wagner** This file is part of the g2 library**** This library is free software; you can redistribute it and/or** modify it under the terms of the GNU Lesser General Public** License as published by the Free Software Foundation; either** version 2.1 of the License, or (at your option) any later version.**** This 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** Lesser General Public License for more details.**** You should have received a copy of the GNU Lesser General Public** License along with this library; if not, write to the Free Software** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA******************************************************************************/#include <stdio.h>#include <stdlib.h>#include <math.h>#include "g2.h"#include "g2_device.h"#include "g2_physical_device.h"#include "g2_util.h"#include "g2_funix.h"/* * * Flush output * */void g2_flush_pd(g2_physical_device *pd){ if(pd->ff[g2_Flush].fun!=NULL) { pd->ff[g2_Flush].fun(pd->pid, pd->pdp); } else { /* emulate ... with .... */ }}/* * * Save output * */void g2_save_pd(g2_physical_device *pd){ if(pd->ff[g2_Save].fun!=NULL) { pd->ff[g2_Save].fun(pd->pid, pd->pdp); } else { /* emulate ... with .... */ }}/* * * Clear device * */void g2_clear_pd(g2_physical_device *pd){ if(pd->ff[g2_Clear].fun!=NULL) { pd->ff[g2_Clear].fun(pd->pid, pd->pdp); } else { /* emulate ... with .... */ }}/* * * Set pen * */void g2_pen_pd(g2_physical_device *pd, int color){ if(pd->ff[g2_Pen].fun!=NULL) { pd->ff[g2_Pen].fun(pd->pid, pd->pdp, color); } else { /* emulate ... with .... */ }}/* * * Set background color * */void g2_set_background_pd(g2_physical_device *pd, int color){ if(pd->ff[g2_SetBackground].fun!=NULL) { pd->ff[g2_SetBackground].fun(pd->pid, pd->pdp, color); } else { /* emulate ... with .... */ }}/* * * Set ink * */int g2_ink_pd(g2_physical_device *pd, double red, double green, double blue){ int rv=-1; if(pd->ff[g2_Ink].fun!=NULL) { rv=pd->ff[g2_Ink].fun(pd->pid, pd->pdp, red, green, blue); } else { /* emulate ... with .... */ } return rv;}/* * * Clear palette * */void g2_clear_palette_pd(g2_physical_device *pd){ if(pd->ff[g2_ClearPalette].fun!=NULL) { pd->ff[g2_ClearPalette].fun(pd->pid, pd->pdp); } else { /* emulate ... with .... */ }}/* * * Allocate basic colors * */void g2_allocate_basic_colors_pd(g2_physical_device *pd){ double ct[3]={0.0, 0.5, 1.0}; int r, g, b; if(pd->ff[g2_Ink].fun!=NULL) { pd->ff[g2_Ink].fun(pd->pid, pd->pdp, /* white */ 1.0, 1.0, 1.0); pd->ff[g2_Ink].fun(pd->pid, pd->pdp, /* black */ 0.0, 0.0, 0.0); for(r=0;r<3;r++) for(g=0;g<3;g++) for(b=0;b<3;b++) if((r==2 && g==2 && b==2) || (r==0 && g==0 && b==0)) continue; else pd->ff[g2_Ink].fun(pd->pid, pd->pdp, ct[r], ct[g], ct[b]); } }/* * * Set font size * */void g2_set_font_size_pd(g2_physical_device *pd, double size){ int is; double ds; if(pd->ff[g2_SetFontSize].fun!=NULL) { switch(pd->coor_type) { case g2_IntCoor: is=dtoi(size*fabs(pd->a22)); /* to pd coordinates */ pd->ff[g2_SetFontSize].fun(pd->pid, pd->pdp, is); break; case g2_DoubleCoor: ds=size*fabs(pd->a22); /* to pd coordinates */ pd->ff[g2_SetFontSize].fun(pd->pid, pd->pdp, ds); break; } } else { /* emulate ... with .... */ }}/* * * Set line width * */void g2_set_line_width_pd(g2_physical_device *pd, double w){ int iw; double dw; if(pd->ff[g2_SetLineWidth].fun!=NULL) { switch(pd->coor_type) { case g2_IntCoor: iw=dtoi(w*fabs(pd->a22)); /* to pd coordinates */ pd->ff[g2_SetLineWidth].fun(pd->pid, pd->pdp, iw); break; case g2_DoubleCoor: dw=w*fabs(pd->a22); /* to pd coordinates */ pd->ff[g2_SetLineWidth].fun(pd->pid, pd->pdp, dw); break; } } else { /* emulate ... with .... */ }}/* * * Set dash * */void g2_set_dash_pd(g2_physical_device *pd, int N, double *dashes){ int j; double *dd=NULL; int *id=NULL; if(pd->ff[g2_SetDash].fun!=NULL) { switch(pd->coor_type) { case g2_IntCoor: if(dashes!=NULL) { id=g2_malloc(N*sizeof(int)); for(j=0;j<N;j++) id[j]=dtoi(dashes[j]*fabs(pd->a22)); pd->ff[g2_SetDash].fun(pd->pid, pd->pdp, N, id); g2_free(id); } else pd->ff[g2_SetDash].fun(pd->pid, pd->pdp, 0, NULL); break; case g2_DoubleCoor: if(dashes!=NULL) { dd=g2_malloc(N*sizeof(double)); for(j=0;j<N;j++) dd[j]=dashes[j]*fabs(pd->a22); pd->ff[g2_SetDash].fun(pd->pid, pd->pdp, N, dd); g2_free(dd); break; } else pd->ff[g2_SetDash].fun(pd->pid, pd->pdp, 0, NULL); } } else { /* emulate ... with .... */ }}/* * * Query pointer position and button state * */void g2_query_pointer_pd(g2_physical_device *pd, double *x, double *y, unsigned int *button){ int ix, iy; double dx, dy; if(pd->ff[g2_QueryPointer].fun!=NULL) { switch(pd->coor_type) { case g2_IntCoor: pd->ff[g2_QueryPointer].fun(pd->pid, pd->pdp, &ix, &iy, button); g2_pdc2uc(pd, ix, iy, x, y); break; case g2_DoubleCoor: pd->ff[g2_QueryPointer].fun(pd->pid, pd->pdp, &dx, &dy, button); g2_pdc2uc(pd, dx, dy, x, y); break; } } else { /* no emulation for query pointer */ }}/* * * Get low level handles * */void g2_get_pd_handles_pd(g2_physical_device *pd, void *handles[G2_PD_HANDLES_SIZE]){ if(pd->ff[g2_GetPDHandles].fun!=NULL) { pd->ff[g2_GetPDHandles].fun(pd->pid, pd->pdp, handles); } else { /* no emulation for low level handles */ }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -