/*=========================================================================*/ /* DRIVERS.C - 10/02/95 */ /* Suporte para os drivers do CD. */ /*=========================================================================*/ /*- Bibliotecas padrao usadas: --------------------------------------------*/ #include #include #include /*- Inclusao das bibliotecas IUP e CD: ------------------------------------*/ #include #include #include /*- Prototypes e declaracoes do CDTest: -----------------------------------*/ #include "cdtest.h" /*- Contexto do CDTest (declarado em CDTEST.C): ---------------------------*/ extern tCTC ctgc; #ifdef CDTEST_WIN32 #define CLIPBOARD_WIN32 #define WMF #define PRINTER #endif #define CLIPBOARD #define CGM #define MF #define PS #define DXF #define DGN #define PDF static int LoadCanvas(char* ctx_name, cdContext* ctx, char *filename) { if (IupGetFile(filename) == 0) { newmetafile(filename, ctx); cdActivate(ctgc.iup_canvas); cdWriteMode(CD_REPLACE); cdLineStyle(CD_CONTINUOUS); cdLineWidth(1); cdBackground(CD_WHITE); cdBackOpacity(CD_TRANSPARENT); cdForeground(CD_BLACK); cdInteriorStyle(CD_SOLID); if (ctgc.stretch_play) { cdPlay(ctx, 0, ctgc.w-1, 0, ctgc.h-1, filename); sprintf(ctgc.status_line, "cdPlay(%s, 0, %d, 0, %d, %s)", ctx_name, ctgc.w-1, ctgc.h-1, filename); } else { cdPlay(ctx, 0, 0, 0, 0, filename); sprintf(ctgc.status_line, "cdPlay(%s, 0, 0, 0, 0, %s)", ctx_name, filename); } set_status(); } return IUP_DEFAULT; } static int SaveCanvas(char* ctx_name, cdContext* ctx, char *data) { cdCanvas *canvas; canvas = cdCreateCanvas(ctx, data); if (!canvas) { IupMessage("Error!", "Can not create canvas."); return IUP_DEFAULT; } cdActivate(canvas); cdPattern(10, 10, ctgc.pattern); cdStipple(10, 10, ctgc.stipple); cdInteriorStyle(CD_SOLID); if (ctgc.sim == 1) cdSimulate(CD_SIM_ALL); else cdSimulate(CD_SIM_NONE); putlist(canvas); cdKillCanvas(canvas); return IUP_DEFAULT; } /*-------------------------------------------------------------------------*/ /* Copia o conteudo do canvas para o clipboard do Windows, vetorial. */ /*-------------------------------------------------------------------------*/ #ifdef CLIPBOARD #include static int fClipBoard(void) { char data[1000]; sprintf(data, "%dx%d %g", ctgc.w, ctgc.h, ctgc.res); return SaveCanvas("CD_CLIPBOARD", CD_CLIPBOARD, data); } /*-------------------------------------------------------------------------*/ /* Copia o conteudo do canvas para o clipboard do Windows, BitMap. */ /*-------------------------------------------------------------------------*/ static int fClipBoardBitmap(void) { char data[1000]; sprintf(data, "%dx%d %g -b", ctgc.w, ctgc.h, ctgc.res); return SaveCanvas("CD_CLIPBOARD", CD_CLIPBOARD, data); } static int fClipBoardMetafile(void) { char data[1000]; #ifdef WIN32 sprintf(data, "%gx%g %g -m", ((double)ctgc.w)/ctgc.res, ((double)ctgc.h)/ctgc.res, ctgc.res); #else sprintf(data, "%p %gx%g %g", IupGetAttribute(IupGetHandle("cnvMain"), "XDISPLAY"), ((double)ctgc.w)/ctgc.res, ((double)ctgc.h)/ctgc.res, ctgc.res); #endif return SaveCanvas("CD_CLIPBOARD", CD_CLIPBOARD, data); } static int fClipBoardPaste(void) { char* data; newmetafile("", CD_CLIPBOARD); cdActivate(ctgc.iup_canvas); cdWriteMode(CD_REPLACE); cdLineStyle(CD_CONTINUOUS); cdLineWidth(1); cdBackground(CD_WHITE); cdBackOpacity(CD_TRANSPARENT); cdForeground(CD_BLACK); cdInteriorStyle(CD_SOLID); #ifdef WIN32 data = ""; #else data = IupGetAttribute(IupGetHandle("cnvMain"), "XDISPLAY"); #endif if (ctgc.stretch_play) { cdPlay(CD_CLIPBOARD, 0, ctgc.w-1, 0, ctgc.h-1, data); sprintf(ctgc.status_line, "cdPlay(CD_CLIPBOARD, 0, %d, 0, %d, \"\")", ctgc.w-1, ctgc.h-1); } else { cdPlay(CD_CLIPBOARD, 0, 0, 0, 0, data); sprintf(ctgc.status_line, "cdPlay(CD_CLIPBOARD, 0, 0, 0, 0, \"\")"); } set_status(); return IUP_DEFAULT; } #endif /*-------------------------------------------------------------------------*/ /* Copia o conteudo do canvas para um arquivo PostScript. */ /*-------------------------------------------------------------------------*/ #ifdef PS #include static int fPS(void) { char filename[1024]="*.ps"; char data[1024]; if (IupGetFile(filename)>=0) { sprintf(data, "%s -s%d", filename, (int)(ctgc.res * 25.4)); return SaveCanvas("CD_PS", CD_PS, data); } return IUP_DEFAULT; } static int fEPS(void) { char filename[1024]="*.eps"; char data[1024]; if (IupGetFile(filename)>=0) { sprintf(data, "%s -s%d -e -l0 -r0 -t0 -b0", filename, (int)(ctgc.res * 25.4)); return SaveCanvas("CD_PS", CD_PS, data); } return IUP_DEFAULT; } #endif #ifdef PDF #include static int fPDF(void) { char filename[1024]="*.pdf"; char data[1024]; if (IupGetFile(filename)>=0) { sprintf(data, "%s -s%d", filename, (int)(ctgc.res * 25.4)); return SaveCanvas("CD_PDF", CD_PDF, data); } return IUP_DEFAULT; } #endif /*-------------------------------------------------------------------------*/ /* Copia o conteudo do canvas para um arquivo CGM. */ /*-------------------------------------------------------------------------*/ #ifdef CGM #include static int fCGMb(void) { char filename[1024]="*.cgm"; char data[1000]; if (IupGetFile(filename)>=0) { sprintf(data, "%s %gx%g %g", filename, ((double)ctgc.w)/ctgc.res, ((double)ctgc.h)/ctgc.res, ctgc.res); return SaveCanvas("CD_CGM", CD_CGM, data); } return IUP_DEFAULT; } static int fCGMt(void) { char filename[1024]="*.cgm"; char data[1000]; if (IupGetFile(filename)>=0) { sprintf(data, "%s %gx%g %g -t", filename, ((double)ctgc.w)/ctgc.res, ((double)ctgc.h)/ctgc.res, ctgc.res); return SaveCanvas("CD_CGM", CD_CGM, data); } return IUP_DEFAULT; } static int fPlayCGM(void) { char filename[1024]="*.cgm"; return LoadCanvas("CD_CGM", CD_CGM, filename); } #endif /*-------------------------------------------------------------------------*/ /* Copia o conteudo do canvas para um arquivo DXF. */ /*-------------------------------------------------------------------------*/ #ifdef DXF #include static int fDXF(void) { char filename[1024]="*.dxf"; char data[1000]; if (IupGetFile(filename)>=0) { sprintf(data, "%s %gx%g %g", filename, ((double)ctgc.w)/ctgc.res, ((double)ctgc.h)/ctgc.res, ctgc.res); return SaveCanvas("CD_DXF", CD_DXF, data); } return IUP_DEFAULT; } #endif /*-------------------------------------------------------------------------*/ /* Copia o conteudo do canvas para um arquivo DGN. */ /*-------------------------------------------------------------------------*/ #ifdef DGN #include static int fDGN(void) { char filename[1024]="*.dgn"; char data[1000]; if (IupGetFile(filename)>=0) { sprintf(data, "%s %gx%g %g -sseed2d.dgn", filename, ((double)ctgc.w)/ctgc.res, ((double)ctgc.h)/ctgc.res, ctgc.res); return SaveCanvas("CD_DGN", CD_DGN, data); } return IUP_DEFAULT; } #endif #ifdef MF #include /*-------------------------------------------------------------------------*/ /* Copia o conteudo do canvas para um arquivo metafile do CD. */ /*-------------------------------------------------------------------------*/ static int fMF(void) { char filename[1024]="*.mf"; char data[1000]; if (IupGetFile(filename)>=0) { sprintf(data, "%s %gx%g %g", filename, ((double)ctgc.w)/ctgc.res, ((double)ctgc.h)/ctgc.res, ctgc.res); return SaveCanvas("CD_METAFILE", CD_METAFILE, data); } return IUP_DEFAULT; } /*-------------------------------------------------------------------------*/ /* Copia o conteudo do canvas para um arquivo metafile do CD. */ /*-------------------------------------------------------------------------*/ static int fPlayMF(void) { char filename[1024]="*.mf"; return LoadCanvas("CD_METAFILE", CD_METAFILE, filename); } #endif /*-------------------------------------------------------------------------*/ /* Copia o conteudo do canvas para um arquivo WMF. */ /*-------------------------------------------------------------------------*/ #ifdef WMF #include static int fWMF(void) { char filename[1024]="*.wmf"; char data[1000]; if (IupGetFile(filename)>=0) { sprintf(data, "%s %dx%d %g", filename, ctgc.w, ctgc.h, ctgc.res); return SaveCanvas("CD_WMF", CD_WMF, data); } return IUP_DEFAULT; } static int fPlayWMF(void) { char filename[1024]="*.wmf"; return LoadCanvas("CD_WMF", CD_WMF, filename); } /*-------------------------------------------------------------------------*/ /* Copia o conteudo do canvas para um arquivo EMF. */ /*-------------------------------------------------------------------------*/ #include static int fEMF(void) { char filename[1024]="*.emf"; char data[1000]; if (IupGetFile(filename)>=0) { sprintf(data, "%s %dx%d %g", filename, ctgc.w, ctgc.h, ctgc.res); return SaveCanvas("CD_EMF", CD_EMF, data); } return IUP_DEFAULT; } static int fPlayEMF(void) { char filename[1024]="*.emf"; return LoadCanvas("CD_EMF", CD_EMF, filename); } #endif /*-------------------------------------------------------------------------*/ /* Copia o conteudo do canvas para a impressora. */ /*-------------------------------------------------------------------------*/ #ifdef PRINTER #include static int fPrint(void) { char *data = "CDTEST.PRN -d"; return SaveCanvas("CD_PRINTER", CD_PRINTER, data); return IUP_DEFAULT; } #endif /*-------------------------------------------------------------------------*/ /* Inicializa os menus de Save e Open. */ /*-------------------------------------------------------------------------*/ void DriversInit(void) { #ifdef MF IupSetFunction("cmdMF", (Icallback) fMF); IupSetFunction("cmdPlayMF", (Icallback) fPlayMF); #endif #ifdef PS IupSetAttribute(IupGetHandle("itPS"), IUP_ACTIVE, IUP_YES); IupSetAttribute(IupGetHandle("itEPS"), IUP_ACTIVE, IUP_YES); IupSetFunction("cmdPS", (Icallback) fPS); IupSetFunction("cmdEPS", (Icallback) fEPS); #endif #ifdef PDF IupSetAttribute(IupGetHandle("itPDF"), IUP_ACTIVE, IUP_YES); IupSetFunction("cmdPDF", (Icallback) fPDF); #endif #ifdef CLIPBOARD IupSetAttribute(IupGetHandle("itClipBoardMetafile"), IUP_ACTIVE, IUP_YES); IupSetAttribute(IupGetHandle("itClipBoardPaste"), IUP_ACTIVE, IUP_YES); IupSetFunction("cmdClipBoardMetafile", (Icallback)fClipBoardMetafile); IupSetFunction("cmdClipBoardPaste", (Icallback)fClipBoardPaste); #endif #ifdef CLIPBOARD_WIN32 IupSetAttribute(IupGetHandle("itClipBoardBitmap"), IUP_ACTIVE, IUP_YES); IupSetAttribute(IupGetHandle("itClipBoard"), IUP_ACTIVE, IUP_YES); IupSetFunction("cmdClipBoardBitmap", (Icallback)fClipBoardBitmap); IupSetFunction("cmdClipBoard", (Icallback)fClipBoard); #endif #ifdef DXF IupSetAttribute(IupGetHandle("itDXF"), IUP_ACTIVE, IUP_YES); IupSetFunction("cmdDXF", (Icallback) fDXF); #endif #ifdef DGN IupSetAttribute(IupGetHandle("itDGN"), IUP_ACTIVE, IUP_YES); IupSetFunction("cmdDGN", (Icallback) fDGN); #endif #ifdef CGM IupSetAttribute(IupGetHandle("itCGMb"), IUP_ACTIVE, IUP_YES); IupSetFunction("cmdCGMb", (Icallback) fCGMb); IupSetAttribute(IupGetHandle("itCGMt"), IUP_ACTIVE, IUP_YES); IupSetFunction("cmdCGMt", (Icallback) fCGMt); IupSetAttribute(IupGetHandle("itPlayCGM"), IUP_ACTIVE, IUP_YES); IupSetFunction("cmdPlayCGM", (Icallback) fPlayCGM); #endif #ifdef WMF IupSetAttribute(IupGetHandle("itEMF"), IUP_ACTIVE, IUP_YES); IupSetAttribute(IupGetHandle("itWMF"), IUP_ACTIVE, IUP_YES); IupSetFunction("cmdEMF", (Icallback) fEMF); IupSetFunction("cmdWMF", (Icallback) fWMF); IupSetAttribute(IupGetHandle("itPlayEMF"), IUP_ACTIVE, IUP_YES); IupSetAttribute(IupGetHandle("itPlayWMF"), IUP_ACTIVE, IUP_YES); IupSetFunction("cmdPlayEMF", (Icallback) fPlayEMF); IupSetFunction("cmdPlayWMF", (Icallback) fPlayWMF); #endif #ifdef PRINTER IupSetAttribute(IupGetHandle("itPrint"), IUP_ACTIVE, IUP_YES); IupSetFunction("cmdPrint", (Icallback) fPrint); #endif }