diff options
author | scuri <scuri> | 2008-10-17 06:10:33 +0000 |
---|---|---|
committer | scuri <scuri> | 2008-10-17 06:10:33 +0000 |
commit | 7b52cc13af4e85f1ca2deb6b6c77de9c95ea0dcf (patch) | |
tree | d0857278bde2eff784227c57dcaf930346ceb7ac /test |
First commit - moving from LuaForge to SourceForge
Diffstat (limited to 'test')
61 files changed, 14216 insertions, 0 deletions
diff --git a/test/cdtest/.cvsignore b/test/cdtest/.cvsignore new file mode 100644 index 0000000..1da6c19 --- /dev/null +++ b/test/cdtest/.cvsignore @@ -0,0 +1,16 @@ +obj +bin +william +so_locations +*.dep +*.wdep +*.loh +.plan +.project +*.err +Makefile +*.make +*.suo +*.ncb +*.opt +*.user diff --git a/test/cdtest/cdtest.bat b/test/cdtest/cdtest.bat new file mode 100644 index 0000000..3249300 --- /dev/null +++ b/test/cdtest/cdtest.bat @@ -0,0 +1,3 @@ +@echo off +REM Script generated automatically by tecmake v3.10 +..\bin\Win32\cdtest.exe %* diff --git a/test/cdtest/cdtest.c b/test/cdtest/cdtest.c new file mode 100644 index 0000000..bf701b9 --- /dev/null +++ b/test/cdtest/cdtest.c @@ -0,0 +1,2662 @@ +/*=========================================================================*/ +/* CDTEST.C - 09/12/95 */ +/* Canvas Draw Test. */ +/*=========================================================================*/ + +/*- Convenccoes Usadas: ---------------------------------------------------*/ +/* - Identificadores de funccoes associadas a um callback comeccam por f. */ +/* Ex: fResize, fRepaint. */ +/* - Identificadores de constantes sao escritos em maiusculas. */ +/* Ex: LINE, ARC, NEWPOINT. */ +/* - Identificadores de funcoes internas do programa sao escritas em */ +/* minusculas. */ +/* Ex: newpolypoint, dellist. */ +/*-------------------------------------------------------------------------*/ + +#include <stdio.h> +#include <string.h> +#include <stdlib.h> + +#include <iup.h> +#include <cd.h> +#include <wd.h> +#include <cdiup.h> +#include <cdpicture.h> +#include <cddbuf.h> +#include <cdirgb.h> +#include <cdgdiplus.h> +#include <iupkey.h> + +#include "cdtest.h" + +/*- Contexto do CD Test: --------------------------------------------------*/ +tCTC ctgc; + +/*- Parametros geometricos da primitiva sendo desenhada: ------------------*/ +tLinePos line_pos; +tBoxPos box_pos; +tPixelPos pixel_pos; +tMarkPos mark_pos; +tArcPos arc_pos; + +//#define USE_GDIPLUS + +#ifdef USE_GDIPLUS +static const int use_gdiplus = 1; +#else +static const int use_gdiplus = 0; +#endif + +static const int antialias = 1; + + +/*-------------------------------------------------------------------------*/ +/* Associa os call-backs do IUP. */ +/*-------------------------------------------------------------------------*/ +void setcallbacks(void) +{ + IupSetFunction("cmdFileExit", (Icallback) fFileExit); + + IupSetFunction("cmdEditClear", (Icallback) fEditClear); + IupSetFunction("cmdEditUndo", (Icallback) fEditUndo); + + IupSetFunction("cmdHelpAbout", (Icallback) fHelpAbout); + IupSetFunction("cmdCloseAbout", (Icallback) fCloseAbout); + + IupSetFunction("cmdWDCanvas", (Icallback) fWDCanvas); + IupSetFunction("cmdCloseWD", (Icallback) fCloseWD); + IupSetFunction("cmdPICCanvas", (Icallback) fPICCanvas); + IupSetFunction("cmdClosePIC", (Icallback) fClosePIC); + + IupSetFunction("cmdShowDialog", (Icallback) fShowDialog); + IupSetFunction("cmdLine", (Icallback) fLine); + IupSetFunction("cmdRect", (Icallback) fRect); + IupSetFunction("cmdBox", (Icallback) fBox); + IupSetFunction("cmdArc", (Icallback) fArc); + IupSetFunction("cmdSector", (Icallback) fSector); + IupSetFunction("cmdChord", (Icallback) fChord); + IupSetFunction("cmdPixel", (Icallback) fPixel); + IupSetFunction("cmdMark", (Icallback) fMark); + IupSetFunction("cmdText", (Icallback) fText); + IupSetFunction("cmdPoly", (Icallback) fPoly); + + IupSetFunction("cmdOptions", (Icallback) fOptions); + IupSetFunction("cmdOptionsHide", (Icallback) fOptionsHide); + IupSetFunction("cmdAttributes", (Icallback) fAttributes); + IupSetFunction("cmdAttributesHide", (Icallback) fAttributesHide); + IupSetFunction("cmdMsgHide", (Icallback) fMsgHide); + IupSetFunction("cmdSimulate", (Icallback) fSimulate); + IupSetFunction("cmdStretchPlay", (Icallback) fStretchPlay); + + IupSetFunction("cmdWriteMode", (Icallback) fWriteMode); + IupSetFunction("cmdLineStyle", (Icallback) fLineStyle); + IupSetFunction("cmdLineCap", (Icallback) fLineCap); + IupSetFunction("cmdLineJoin", (Icallback) fLineJoin); + IupSetFunction("cmdFillMode", (Icallback) fFillMode); + IupSetFunction("cmdFontStyle", (Icallback) fFontStyle); + IupSetFunction("cmdFontTypeFace", (Icallback) fFontTypeFace); + IupSetFunction("cmdMarkType", (Icallback) fMarkType); + IupSetFunction("cmdTextAlignment", (Icallback) fTextAlignment); + IupSetFunction("cmdHatchStyle", (Icallback) fHatchStyle); + IupSetFunction("cmdOpacity", (Icallback) fOpacity); + + IupSetFunction("cmdNoBuffering", (Icallback) fNoBuffering); + IupSetFunction("cmdImageBuffer", (Icallback) fImageBuffer); + IupSetFunction("cmdRGBBuffer", (Icallback) fRGBBuffer); + + IupSetFunction("cmdInteger", (Icallback) fInteger); + IupSetFunction("cmdReal", (Icallback) fReal); + IupSetFunction("cmdDraw", (Icallback) fDraw); + + IupSetFunction("cmdSolid", (Icallback) fSolid); + IupSetFunction("cmdHatch", (Icallback) fHatch); + IupSetFunction("cmdStipple", (Icallback) fStipple); + IupSetFunction("cmdPattern", (Icallback) fPattern); + + IupSetFunction("cmdOpenLines", (Icallback) fOpenLines); + IupSetFunction("cmdClosedLines", (Icallback) fClosedLines); + IupSetFunction("cmdFill", (Icallback) fFill); + IupSetFunction("cmdPolyClip", (Icallback) fPolyClip); + IupSetFunction("cmdPolyBezier", (Icallback) fPolyBezier); + + IupSetFunction("cmdClip", (Icallback) fClip); + IupSetFunction("cmdClipArea", (Icallback) fClipArea); + IupSetFunction("cmdClipOff", (Icallback) fClipOff); + IupSetFunction("cmdClipPoly", (Icallback) fClipPoly); + + IupSetFunction("cmdImage", (Icallback) fImage); + IupSetFunction("cmdImagePut", (Icallback) fImagePut); + IupSetFunction("cmdImageGet", (Icallback) fImageGet); + + IupSetFunction("cmdImageRGB", (Icallback) fImageRGB); + IupSetFunction("cmdImageRGBPut", (Icallback) fImageRGBPut); + IupSetFunction("cmdImageRGBGet", (Icallback) fImageRGBGet); +} + +/*-------------------------------------------------------------------------*/ +/* Inicializa o stipple e o pattern exemplo. */ +/*-------------------------------------------------------------------------*/ +void initsamples(void) +{ + int i; + + /* zera os vetores */ + for (i=0; i<100; i++) { + ctgc.stipple[i] = 0; + ctgc.pattern[i] = 0xffffffl; + } + + /* especificaccao do stipple */ + ctgc.stipple[11] = 1; /*------------*/ + ctgc.stipple[21] = 1; /* 0123456789*/ + ctgc.stipple[31] = 1; /* */ + ctgc.stipple[41] = 1; /*9 0000000000*/ + ctgc.stipple[51] = 1; /*8 0000111110*/ + /*7 0001000110*/ + ctgc.stipple[12] = 1; /*6 0010001010*/ + ctgc.stipple[52] = 1; /*5 0111110010*/ + ctgc.stipple[62] = 1; /*4 0100010010*/ + /*3 0100010100*/ + ctgc.stipple[13] = 1; /*2 0100011000*/ + ctgc.stipple[53] = 1; /*1 0111110000*/ + ctgc.stipple[73] = 1; /*0 0000000000*/ + /*------------*/ + ctgc.stipple[14] = 1; + ctgc.stipple[54] = 1; + ctgc.stipple[84] = 1; + + ctgc.stipple[15] = 1; ctgc.stipple[26] = 1; + ctgc.stipple[25] = 1; ctgc.stipple[66] = 1; + ctgc.stipple[35] = 1; ctgc.stipple[86] = 1; + ctgc.stipple[45] = 1; + ctgc.stipple[55] = 1; ctgc.stipple[48] = 1; + ctgc.stipple[85] = 1; ctgc.stipple[58] = 1; + ctgc.stipple[68] = 1; + ctgc.stipple[37] = 1; ctgc.stipple[78] = 1; + ctgc.stipple[77] = 1; ctgc.stipple[88] = 1; + ctgc.stipple[87] = 1; + + + /* especificaccao do stipple */ + ctgc.pattern[11] = CD_RED; /*------------*/ + ctgc.pattern[21] = CD_RED; /* 0123456789*/ + ctgc.pattern[31] = CD_RED; /* */ + ctgc.pattern[41] = CD_RED; /*9 WWWWWWWWWW*/ + ctgc.pattern[51] = CD_RED; /*8 WWWWGGGGGW*/ + ctgc.pattern[12] = CD_RED; /*7 WWWGGGGGBW*/ + ctgc.pattern[22] = CD_RED; /*6 WWGGGGGBBW*/ + ctgc.pattern[32] = CD_RED; /*5 WrrrrrBBBW*/ + ctgc.pattern[42] = CD_RED; /*4 WrrrrrBBBW*/ + ctgc.pattern[52] = CD_RED; /*3 WrrrrrBBWW*/ + ctgc.pattern[13] = CD_RED; /*2 WrrrrrBWWW*/ + ctgc.pattern[23] = CD_RED; /*1 WrrrrrWWWW*/ + ctgc.pattern[33] = CD_RED; /*0 WWWWWWWWWW*/ + ctgc.pattern[43] = CD_RED; /*------------*/ + ctgc.pattern[53] = CD_RED; + ctgc.pattern[14] = CD_RED; ctgc.pattern[15] = CD_RED; + ctgc.pattern[24] = CD_RED; ctgc.pattern[25] = CD_RED; + ctgc.pattern[34] = CD_RED; ctgc.pattern[35] = CD_RED; + ctgc.pattern[44] = CD_RED; ctgc.pattern[45] = CD_RED; + ctgc.pattern[54] = CD_RED; ctgc.pattern[55] = CD_RED; + + ctgc.pattern[26] = CD_BLUE; ctgc.pattern[37] = CD_BLUE; + ctgc.pattern[36] = CD_BLUE; ctgc.pattern[47] = CD_BLUE; + ctgc.pattern[46] = CD_BLUE; ctgc.pattern[57] = CD_BLUE; + ctgc.pattern[56] = CD_BLUE; ctgc.pattern[67] = CD_BLUE; + + ctgc.pattern[48] = CD_BLUE; ctgc.pattern[62] = CD_GREEN; + ctgc.pattern[58] = CD_BLUE; ctgc.pattern[63] = CD_GREEN; + ctgc.pattern[68] = CD_BLUE; ctgc.pattern[64] = CD_GREEN; + ctgc.pattern[78] = CD_BLUE; ctgc.pattern[65] = CD_GREEN; + ctgc.pattern[66] = CD_GREEN; + + ctgc.pattern[73] = CD_GREEN; ctgc.pattern[84] = CD_GREEN; + ctgc.pattern[74] = CD_GREEN; ctgc.pattern[85] = CD_GREEN; + ctgc.pattern[75] = CD_GREEN; ctgc.pattern[86] = CD_GREEN; + ctgc.pattern[76] = CD_GREEN; ctgc.pattern[87] = CD_GREEN; + ctgc.pattern[77] = CD_GREEN; ctgc.pattern[88] = CD_GREEN; + + ctgc.dashes[0] = 10; + ctgc.dashes[1] = 2; + ctgc.dashes[2] = 5; + ctgc.dashes[3] = 2; +} + +/*-------------------------------------------------------------------------*/ +/* Inicializa o CD Test. */ +/*-------------------------------------------------------------------------*/ +void CDTestInit(void) +{ + memset(&ctgc, 0, sizeof(ctgc)); + + if (use_gdiplus) + { +#ifdef USE_GDIPLUS + cdInitGdiPlus(); +#endif + } + + /* inicializaccao dos drivers */ + DriversInit(); + + /* mostra o dialogo principal */ + IupShow(IupGetHandle("dlgMain")); + + /* inicializaccao da barra de cores */ + ColorBarInit(IupGetHandle("dlgMain"), IupGetHandle("cnvColorBar"), &ctgc.foreground, &ctgc.background); + + /* cria o canvas do CD associado ao canvas do IUP */ + if (use_gdiplus) cdUseContextPlus(1); + ctgc.iup_canvas = cdCreateCanvas(CD_IUP, IupGetHandle("cnvMain")); + if (!antialias) cdCanvasSetAttribute(ctgc.iup_canvas, "ANTIALIAS", "0"); + cdActivate(ctgc.iup_canvas); + if (use_gdiplus) cdUseContextPlus(0); + + /* associa os call-backs */ + setcallbacks(); + + /* os call-backs do canvas devem ser associados depois de sua criacao */ + IupSetFunction("cmdRepaint", (Icallback) fRepaint); + IupSetFunction("cmdMotionCB", (Icallback) fMotionCB); + IupSetFunction("cmdButtonCB", (Icallback) fButtonCB); + IupSetFunction("cmdResizeCB", (Icallback) fResizeCB); + IupSetFunction("cmdGetFocusCB", (Icallback) fGetFocusCB); + + /* inicializaccao do contexto */ + ctgc.write_mode = CD_REPLACE; + ctgc.line_style = CD_CONTINUOUS; + ctgc.line_cap = CD_CAPFLAT; + ctgc.line_join = CD_MITER; + ctgc.fill_mode = CD_EVENODD; + ctgc.line_width = 1; + ctgc.font_style = CD_PLAIN; + ctgc.font_typeface = CD_SYSTEM; + ctgc.font_size = CD_STANDARD; + ctgc.text_alignment = CD_BASE_LEFT; + ctgc.text_orientation = 0; + ctgc.back_opacity = CD_TRANSPARENT; + ctgc.mark_type = CD_STAR; + ctgc.poly_mode = CD_OPEN_LINES; + ctgc.interior_style = CD_SOLID; + ctgc.hatch = CD_HORIZONTAL; + ctgc.following = FALSE; + ctgc.foreground = CD_BLACK; + ctgc.background = CD_WHITE; + ctgc.head = NULL; + ctgc.test_image = NULL; + ctgc.sim = 0; + ctgc.stretch_play = 0; + ctgc.dlg_x = IUP_CENTER; + ctgc.dlg_y = IUP_CENTER; + ctgc.visible = 0; + + /* inicializa os vetores stipple e pattern */ + initsamples(); + + /* inicializa o CDTest com a primitiva LINE */ + ctgc.dlg_cur_prim = IupGetHandle("dlgLB"); + ctgc.bt_cur_prim = IupGetHandle("btCurPrim"); + ctgc.cur_prim = LINE; + + /* inicializaccao do Canvas do IUP */ + cdActivate(ctgc.iup_canvas); + cdFont(ctgc.font_typeface,ctgc.font_style,ctgc.font_size); + cdBackground(ctgc.background); + cdClear(); + cdGetCanvasSize(&(ctgc.w),&(ctgc.h),NULL,NULL); + ctgc.bpp = cdGetColorPlanes(); + + { + double mm, xres; + cdPixel2MM(1, 0, &mm, NULL); + xres = 1.0/mm; + ctgc.res = xres; + } + + /* inicializa o canvas off-screen de double-bufering */ + ctgc.buffering = NO_BUFFER; + ctgc.buffer_canvas = NULL; + + /* inicializa o clipping */ + ctgc.clip_mode = CD_CLIPOFF; + cdGetClipArea(&(ctgc.clip_xmin), &(ctgc.clip_xmax), + &(ctgc.clip_ymin), &(ctgc.clip_ymax)); + + /* zera o buffer temporario de pontos */ + ctgc.num_points = 0; + + /* a lista de primitivas jah estah vazia, nao hah o que apagar */ + IupSetAttribute(IupGetHandle("itEditUndo"), IUP_ACTIVE, IUP_NO); + + /* atualiza o tamanho do canvas em pixels na barra de titulo */ + sprintf(ctgc.title, "CDTest 5.3 (%dx%d - %dbpp)", ctgc.w, ctgc.h, ctgc.bpp); + IupSetAttribute(IupGetHandle("dlgMain"), IUP_TITLE, ctgc.title); + + /* inicializa a barra de status */ + sprintf(ctgc.status_line, "LEFT click and drag."); + set_status(); + + /* inicializa a posiccao do mouse */ + mouse_pos(0, 0); + + /* constroi os dialogos do CDTest sem mostra-los */ + IupMap(IupGetHandle("dlgLB")); + IupMap(IupGetHandle("dlgAS")); + IupMap(IupGetHandle("dlgPixel")); + IupMap(IupGetHandle("dlgImage")); + IupMap(IupGetHandle("dlgImageRGB")); + IupMap(IupGetHandle("dlgMark")); + IupMap(IupGetHandle("dlgText")); + IupMap(IupGetHandle("dlgClip")); + IupMap(IupGetHandle("dlgAttributes")); + IupMap(IupGetHandle("dlgWDCanvas")); + IupMap(IupGetHandle("dlgPICCanvas")); + + /* cria o canvas WD */ + if (use_gdiplus) cdUseContextPlus(1); + ctgc.wd_canvas = cdCreateCanvas(CD_IUP, IupGetHandle("cnvWDCanvas")); + ctgc.pic_canvas = cdCreateCanvas(CD_IUP, IupGetHandle("cnvPICCanvas")); + ctgc.picture = cdCreateCanvas(CD_PICTURE, ""); + if (use_gdiplus) cdUseContextPlus(0); + + /* CDTEST default values */ + cdActivate(ctgc.picture); + cdLineStyleDashes(ctgc.dashes, 4); + cdPattern(10, 10, ctgc.pattern); + cdStipple(10, 10, ctgc.stipple); + cdInteriorStyle(CD_SOLID); + + cdActivate(ctgc.wd_canvas); + cdLineStyleDashes(ctgc.dashes, 4); + cdPattern(10, 10, ctgc.pattern); + cdStipple(10, 10, ctgc.stipple); + cdInteriorStyle(CD_SOLID); + + /* reativa o canvas IUP */ + cdActivate(ctgc.iup_canvas); + cdLineStyleDashes(ctgc.dashes, 4); + cdPattern(10, 10, ctgc.pattern); + cdStipple(10, 10, ctgc.stipple); + cdInteriorStyle(CD_SOLID); +} + +static void CDTestClose(void) +{ + dellist(); + + ColorBarClose(); + + if (ctgc.buffer_canvas) cdKillCanvas(ctgc.buffer_canvas); + if (ctgc.test_image) cdKillImage(ctgc.test_image); + cdKillCanvas(ctgc.picture); + cdKillCanvas(ctgc.pic_canvas); + cdKillCanvas(ctgc.wd_canvas); + cdKillCanvas(ctgc.iup_canvas); + + IupDestroy(IupGetHandle("dlgLB")); + IupDestroy(IupGetHandle("dlgAS")); + IupDestroy(IupGetHandle("dlgPixel")); + IupDestroy(IupGetHandle("dlgImage")); + IupDestroy(IupGetHandle("dlgImageRGB")); + IupDestroy(IupGetHandle("dlgMark")); + IupDestroy(IupGetHandle("dlgText")); + IupDestroy(IupGetHandle("dlgClip")); + IupDestroy(IupGetHandle("dlgAttributes")); + IupDestroy(IupGetHandle("dlgWDCanvas")); + IupDestroy(IupGetHandle("dlgPICCanvas")); + + IupDestroy(IupGetHandle("dlgMain")); +} + +static int iscurvisible(void) +{ + char* vis = IupGetAttribute(ctgc.dlg_cur_prim, IUP_VISIBLE); + if (!vis) + return 0; + return strcmp(vis, IUP_YES) == 0? 1: 0; +} + +/*-------------------------------------------------------------------------*/ +/* Copia o conteudo da lista de primitivas para o dispositivo ativo. */ +/*-------------------------------------------------------------------------*/ +void putlist(cdCanvas *target) +{ + tList *temp; + int wdc_w, wdc_h, wd = 0; + + /* ativa o canvas destino */ + cdActivate(target); + + if (target == ctgc.wd_canvas) + { + cdGetCanvasSize(&wdc_w, &wdc_h, NULL, NULL); + wdWindow(0, ctgc.w, 0, ctgc.h); + wdViewport(0, wdc_w, 0, wdc_h); + wd = 1; + } + + /* limpa o canvas com a cor de fundo */ + cdBackground(ctgc.background); + cdClear(); + cdClipArea(ctgc.clip_xmin, ctgc.clip_xmax, ctgc.clip_ymin, ctgc.clip_ymax); + cdClip(ctgc.clip_mode); + + /* coloca a lista de primitivas no canvas */ + for (temp = ctgc.head; temp; temp = (tList *) temp->next) + { + switch (temp->type) { + case LINE: + cdWriteMode(temp->par.lineboxpar.write_mode); + cdLineCap(temp->par.lineboxpar.line_cap); + cdLineJoin(temp->par.lineboxpar.line_join); + cdLineStyle(temp->par.lineboxpar.line_style); + cdLineWidth(temp->par.lineboxpar.line_width); + cdForeground(temp->par.lineboxpar.foreground); + if (wd) + wdLine(temp->par.lineboxpar.x1, temp->par.lineboxpar.y1, + temp->par.lineboxpar.x2, temp->par.lineboxpar.y2); + else + cdLine(temp->par.lineboxpar.x1, temp->par.lineboxpar.y1, + temp->par.lineboxpar.x2, temp->par.lineboxpar.y2); + break; + case RECT: + cdWriteMode(temp->par.lineboxpar.write_mode); + cdLineCap(temp->par.lineboxpar.line_cap); + cdLineJoin(temp->par.lineboxpar.line_join); + cdLineStyle(temp->par.lineboxpar.line_style); + cdLineWidth(temp->par.lineboxpar.line_width); + cdForeground(temp->par.lineboxpar.foreground); + if (wd) + wdRect(temp->par.lineboxpar.x1, temp->par.lineboxpar.x2, + temp->par.lineboxpar.y1, temp->par.lineboxpar.y2); + else + cdRect(temp->par.lineboxpar.x1, temp->par.lineboxpar.x2, + temp->par.lineboxpar.y1, temp->par.lineboxpar.y2); + break; + case BOX: + cdWriteMode(temp->par.lineboxpar.write_mode); + cdLineCap(temp->par.lineboxpar.line_cap); + cdLineJoin(temp->par.lineboxpar.line_join); + cdLineStyle(temp->par.lineboxpar.line_style); + cdLineWidth(temp->par.lineboxpar.line_width); + cdForeground(temp->par.lineboxpar.foreground); + cdBackground(temp->par.lineboxpar.background); + cdBackOpacity(temp->par.lineboxpar.back_opacity); + cdHatch(temp->par.lineboxpar.hatch); + cdInteriorStyle(temp->par.lineboxpar.interior_style); + if (wd) + wdBox(temp->par.lineboxpar.x1, temp->par.lineboxpar.x2, + temp->par.lineboxpar.y1, temp->par.lineboxpar.y2); + else + cdBox(temp->par.lineboxpar.x1, temp->par.lineboxpar.x2, + temp->par.lineboxpar.y1, temp->par.lineboxpar.y2); + break; + case ARC: + cdWriteMode(temp->par.arcsectorpar.write_mode); + cdLineCap(temp->par.arcsectorpar.line_cap); + cdLineJoin(temp->par.arcsectorpar.line_join); + cdLineStyle(temp->par.arcsectorpar.line_style); + cdLineWidth(temp->par.arcsectorpar.line_width); + cdForeground(temp->par.arcsectorpar.foreground); + if (wd) + wdArc(temp->par.arcsectorpar.xc, temp->par.arcsectorpar.yc, + temp->par.arcsectorpar.w, temp->par.arcsectorpar.h, + temp->par.arcsectorpar.angle1, temp->par.arcsectorpar.angle2); + else + cdArc(temp->par.arcsectorpar.xc, temp->par.arcsectorpar.yc, + temp->par.arcsectorpar.w, temp->par.arcsectorpar.h, + temp->par.arcsectorpar.angle1, temp->par.arcsectorpar.angle2); + break; + case CHORD: + cdWriteMode(temp->par.arcsectorpar.write_mode); + cdLineCap(temp->par.arcsectorpar.line_cap); + cdLineJoin(temp->par.arcsectorpar.line_join); + cdLineStyle(temp->par.arcsectorpar.line_style); + cdLineWidth(temp->par.arcsectorpar.line_width); + cdForeground(temp->par.arcsectorpar.foreground); + cdBackground(temp->par.arcsectorpar.background); + cdBackOpacity(temp->par.arcsectorpar.back_opacity); + cdHatch(temp->par.arcsectorpar.hatch); + cdInteriorStyle(temp->par.arcsectorpar.interior_style); + if (wd) + wdChord(temp->par.arcsectorpar.xc, temp->par.arcsectorpar.yc, + temp->par.arcsectorpar.w, temp->par.arcsectorpar.h, + temp->par.arcsectorpar.angle1, temp->par.arcsectorpar.angle2); + else + cdChord(temp->par.arcsectorpar.xc, temp->par.arcsectorpar.yc, + temp->par.arcsectorpar.w, temp->par.arcsectorpar.h, + temp->par.arcsectorpar.angle1, temp->par.arcsectorpar.angle2); + break; + case SECTOR: + cdWriteMode(temp->par.arcsectorpar.write_mode); + cdLineCap(temp->par.arcsectorpar.line_cap); + cdLineJoin(temp->par.arcsectorpar.line_join); + cdLineStyle(temp->par.arcsectorpar.line_style); + cdLineWidth(temp->par.arcsectorpar.line_width); + cdForeground(temp->par.arcsectorpar.foreground); + cdBackground(temp->par.arcsectorpar.background); + cdBackOpacity(temp->par.arcsectorpar.back_opacity); + cdHatch(temp->par.arcsectorpar.hatch); + cdInteriorStyle(temp->par.arcsectorpar.interior_style); + if (wd) + wdSector(temp->par.arcsectorpar.xc, temp->par.arcsectorpar.yc, + temp->par.arcsectorpar.w, temp->par.arcsectorpar.h, + temp->par.arcsectorpar.angle1, temp->par.arcsectorpar.angle2); + else + cdSector(temp->par.arcsectorpar.xc, temp->par.arcsectorpar.yc, + temp->par.arcsectorpar.w, temp->par.arcsectorpar.h, + temp->par.arcsectorpar.angle1, temp->par.arcsectorpar.angle2); + break; + case PIXEL: + cdWriteMode(temp->par.pixelpar.write_mode); + cdPixel(temp->par.pixelpar.x, temp->par.pixelpar.y, + temp->par.pixelpar.foreground); + break; + case MARK: + cdWriteMode(temp->par.markpar.write_mode); + cdMarkSize(temp->par.markpar.mark_size); + cdMarkType(temp->par.markpar.mark_type); + cdForeground(temp->par.markpar.foreground); + if (wd) + wdMark(temp->par.markpar.x, temp->par.markpar.y); + else + cdMark(temp->par.markpar.x, temp->par.markpar.y); + break; + case TEXT: + cdWriteMode(temp->par.textpar.write_mode); + cdForeground(temp->par.textpar.foreground); + cdBackground(temp->par.textpar.background); + cdBackOpacity(temp->par.textpar.back_opacity); + cdTextAlignment(temp->par.textpar.text_alignment); + cdTextOrientation(temp->par.textpar.text_orientation); + cdFont(temp->par.textpar.font_typeface, + temp->par.textpar.font_style, + temp->par.textpar.font_size); + if (wd) + wdText(temp->par.textpar.x, temp->par.textpar.y, + temp->par.textpar.s); + else + cdText(temp->par.textpar.x, temp->par.textpar.y, + temp->par.textpar.s); + break; + case POLY: { + int i; + cdForeground(temp->par.polypar.foreground); + cdBackground(temp->par.polypar.background); + cdWriteMode(temp->par.polypar.write_mode); + cdLineCap(temp->par.polypar.line_cap); + cdLineJoin(temp->par.polypar.line_join); + cdLineStyle(temp->par.polypar.line_style); + cdLineWidth(temp->par.polypar.line_width); + cdFillMode(temp->par.polypar.fill_mode); + cdBackOpacity(temp->par.polypar.back_opacity); + cdHatch(temp->par.polypar.hatch); + cdInteriorStyle(temp->par.polypar.interior_style); + cdBegin(temp->par.polypar.poly_mode); + if (wd) + for (i=0; (i<temp->par.polypar.num_points); i++) { + wdVertex(temp->par.polypar.points[i].x, + temp->par.polypar.points[i].y); + } + else + for (i=0; (i<temp->par.polypar.num_points); i++) { + cdVertex(temp->par.polypar.points[i].x, + temp->par.polypar.points[i].y); + } + cdEnd(); + break; + case META: + cdWriteMode(CD_REPLACE); + cdLineStyle(CD_CONTINUOUS); + cdLineWidth(1); + cdBackground(CD_WHITE); + cdBackOpacity(CD_TRANSPARENT); + cdForeground(CD_BLACK); + cdInteriorStyle(CD_SOLID); + if (ctgc.stretch_play) + { + if (wd) + cdPlay(temp->par.metapar.ctx, 0, wdc_w-1, 0, wdc_h-1, temp->par.metapar.filename); + else + cdPlay(temp->par.metapar.ctx, 0, ctgc.w-1, 0, ctgc.h-1, temp->par.metapar.filename); + } + else + cdPlay(temp->par.metapar.ctx, 0, 0, 0, 0, temp->par.metapar.filename); + break; + default: + break; + } + } + } + + /* volta o clip-mode para o corrente */ + cdClip(ctgc.clip_mode); +} + +/*-------------------------------------------------------------------------*/ +/* Copia o conteudo da lista de primitivas no canvas WD. */ +/*-------------------------------------------------------------------------*/ +int fWDRepaint(void) +{ + putlist(ctgc.wd_canvas); + + /* reativa o canvas iup */ + cdActivate(ctgc.iup_canvas); + + return IUP_DEFAULT; +} + +int fPICRepaint(void) +{ + int w, h; + putlist(ctgc.picture); + + cdActivate(ctgc.pic_canvas); + cdGetCanvasSize(&w, &h, NULL, NULL); + cdClear(); + if (ctgc.stretch_play) + cdPlay(CD_PICTURE, 0, w-1, 0, h-1, ctgc.picture); + else + cdPlay(CD_PICTURE, 0, 0, 0, 0, ctgc.picture); + + /* reativa o canvas iup */ + cdActivate(ctgc.iup_canvas); + + return IUP_DEFAULT; +} + +/*-------------------------------------------------------------------------*/ +/* Redesenha o canvas. */ +/*-------------------------------------------------------------------------*/ +void updatecanvas(void) +{ + if (ctgc.buffering == NO_BUFFER) + putlist(ctgc.iup_canvas); + else + { + cdActivate(ctgc.iup_canvas); + cdClip(CD_CLIPOFF); + + putlist(ctgc.buffer_canvas); + cdFlush(); + + cdActivate(ctgc.iup_canvas); + cdClip(ctgc.clip_mode); + } + + if (ctgc.wd_dialog) + fWDRepaint(); + + if (ctgc.pic_dialog) + fPICRepaint(); +} + +/*-------------------------------------------------------------------------*/ +/* Redesenha o canvas. */ +/*-------------------------------------------------------------------------*/ +int fRepaint(void) +{ + int i; + + /* ativa o canvas na tela */ + cdActivate(ctgc.iup_canvas); + wdViewport(0, ctgc.w, 0, ctgc.h); + + /* desliga o clipping durante o evento Repaint */ + cdClip(CD_CLIPOFF); + + /* double-buffering? */ + cdWriteMode(CD_REPLACE); + updatecanvas(); + + /* se o evento repaint for gerado durante o rubber band...*/ + /* ...eh preciso restaurar o estado anterior */ + if (ctgc.following) { + cdWriteMode(CD_NOT_XOR); + cdForeground(CD_BLACK); + cdLineStyle(CD_CONTINUOUS); + cdLineWidth(1); + switch (ctgc.cur_prim) { + case POLY: + for (i=0; (i<ctgc.num_points-1); i++) { + cdLine(ctgc.points[i].x, ctgc.points[i].y, + ctgc.points[i+1].x, ctgc.points[i+1].y); + } + polygon(REPAINT, 0, 0); + break; + case LINE: + line(REPAINT, 0, 0); + break; + case ARC: + case CHORD: + case SECTOR: + arc(REPAINT, 0, 0); + break; + case RECT: + case BOX: + box(REPAINT, 0, 0); + break; + default: + break; + } + } + + /* restaura o estado de clipping anterior ao evento Repaint */ + cdClip(ctgc.clip_mode); + + return IUP_DEFAULT; +} + +/*-------------------------------------------------------------------------*/ +/* Ativa o canvas WD. */ +/*-------------------------------------------------------------------------*/ +int fWDCanvas(void) +{ + IupShow(IupGetHandle("dlgWDCanvas")); + ctgc.wd_dialog = TRUE; + IupSetFunction("cmdWDRepaint", (Icallback)fWDRepaint); + fWDRepaint(); + return IUP_DEFAULT; +} + +int fPICCanvas(void) +{ + IupShow(IupGetHandle("dlgPICCanvas")); + ctgc.pic_dialog = TRUE; + IupSetFunction("cmdPICRepaint", (Icallback)fPICRepaint); + fPICRepaint(); + return IUP_DEFAULT; +} + +/*-------------------------------------------------------------------------*/ +/* Desativa o canvas WD. */ +/*-------------------------------------------------------------------------*/ +int fCloseWD(void) +{ + ctgc.wd_dialog = FALSE; + return IUP_DEFAULT; +} + +int fClosePIC(void) +{ + ctgc.pic_dialog = FALSE; + return IUP_DEFAULT; +} + +/*-------------------------------------------------------------------------*/ +/* Apaga a ultima primitiva desenhada. */ +/*-------------------------------------------------------------------------*/ +int fEditUndo(void) +{ + /* apaga a ultima primitiva da fila */ + dellast(); + /* se nao ha mais primitivas na fila, desabilita o undo */ + if (ctgc.head == NULL) + IupSetAttribute(IupGetHandle("itEditUndo"), IUP_ACTIVE, IUP_NO); + + updatecanvas(); + + return IUP_DEFAULT; +} + +int fSimulate(Ihandle *self, int v) +{ + ignore(self); + + cdActivate(ctgc.iup_canvas); + + if (v == 1) + { + if (ctgc.sim == 1) + return IUP_DEFAULT; + + ctgc.sim = 1; + cdSimulate(CD_SIM_ALL); + sprintf(ctgc.status_line, "cdSimulate(CD_SIM_ALL)"); + } + else + { + if (ctgc.sim == 0) + return IUP_DEFAULT; + + ctgc.sim = 0; + cdSimulate(CD_SIM_NONE); + sprintf(ctgc.status_line, "cdSimulate(CD_SIM_NONE)"); + } + + set_status(); + updatecanvas(); + return IUP_DEFAULT; +} + +int fStretchPlay(Ihandle *self, int v) +{ + ignore(self); + ctgc.stretch_play = v; + updatecanvas(); + return IUP_DEFAULT; +} + +/*-------------------------------------------------------------------------*/ +/* Tchau. */ +/*-------------------------------------------------------------------------*/ +int fFileExit(void) +{ + IupHide(ctgc.dlg_cur_prim); + return IUP_CLOSE; +} + +/*-------------------------------------------------------------------------*/ +/* Funcao associada ao toggle OpenLines. */ +/*-------------------------------------------------------------------------*/ +int fOpenLines(void) +{ + ctgc.poly_mode = CD_OPEN_LINES; + sprintf(ctgc.status_line, "cdBegin(CD_OPEN_LINES)"); + set_status(); + return IUP_DEFAULT; +} + +/*-------------------------------------------------------------------------*/ +/* Funcao associada ao toggle ClosedLines. */ +/*-------------------------------------------------------------------------*/ +int fClosedLines(void) +{ + ctgc.poly_mode = CD_CLOSED_LINES; + sprintf(ctgc.status_line, "cdBegin(CD_CLOSED_LINES)"); + set_status(); + return IUP_DEFAULT; +} + +int fPolyBezier(void) +{ + ctgc.poly_mode = CD_BEZIER; + sprintf(ctgc.status_line, "cdBegin(CD_BEZIER)"); + set_status(); + return IUP_DEFAULT; +} + +/*-------------------------------------------------------------------------*/ +/* Funcao associada ao toggle Fill. */ +/*-------------------------------------------------------------------------*/ +int fFill(void) +{ + ctgc.poly_mode = CD_FILL; + sprintf(ctgc.status_line, "cdBegin(CD_FILL)"); + set_status(); + return IUP_DEFAULT; +} + +/*-------------------------------------------------------------------------*/ +/* Funcao associada ao toggle Clip. */ +/*-------------------------------------------------------------------------*/ +int fPolyClip(void) +{ + ctgc.poly_mode = CD_CLIP; + sprintf(ctgc.status_line, "cdBegin(CD_CLIP)"); + set_status(); + return IUP_DEFAULT; +} + +/*-------------------------------------------------------------------------*/ +/* Funcao associada ao toggle Solid. */ +/*-------------------------------------------------------------------------*/ +int fSolid(void) +{ + ctgc.interior_style = CD_SOLID; + sprintf(ctgc.status_line, "cdInteriorStyle(CD_SOLID)"); + set_status(); + cdInteriorStyle(CD_SOLID); + return IUP_DEFAULT; +} + +/*-------------------------------------------------------------------------*/ +/* Funcao associada ao toggle Hatch. */ +/*-------------------------------------------------------------------------*/ +int fHatch(void) +{ + ctgc.interior_style = CD_HATCH; + cdInteriorStyle(CD_HATCH); + sprintf(ctgc.status_line, "cdInteriorStyle(CD_HATCH)"); + set_status(); + return IUP_DEFAULT; +} + +/*-------------------------------------------------------------------------*/ +/* Funcao associada ao toggle Stipple. */ +/*-------------------------------------------------------------------------*/ +int fStipple(void) +{ + ctgc.interior_style = CD_STIPPLE; + cdInteriorStyle(CD_STIPPLE); + sprintf(ctgc.status_line, "cdInteriorStyle(CD_STIPPLE)"); + set_status(); + return IUP_DEFAULT; +} + +/*-------------------------------------------------------------------------*/ +/* Funcao associada ao toggle Pattern. */ +/*-------------------------------------------------------------------------*/ +int fPattern(void) +{ + ctgc.interior_style = CD_PATTERN; + cdInteriorStyle(CD_PATTERN); + sprintf(ctgc.status_line, "cdInteriorStyle(CD_PATTERN)"); + set_status(); + return IUP_DEFAULT; +} + +/*-------------------------------------------------------------------------*/ +/* Seleciona o a opacidade do fundo. */ +/*-------------------------------------------------------------------------*/ +int fOpacity(Ihandle *self, char *t, int o, int v) +{ + ignore(t); + ignore(self); + if (v == 0) return IUP_DEFAULT; + switch (o) { + case 1: + ctgc.back_opacity = CD_OPAQUE; + sprintf(ctgc.status_line, "cdBackOpacity(CD_OPAQUE)"); + break; + case 2: + ctgc.back_opacity = CD_TRANSPARENT; + sprintf(ctgc.status_line, "cdBackOpacity(CD_TRANSPARENT)"); + break; + } + set_status(); + return IUP_DEFAULT; +} + + +/*-------------------------------------------------------------------------*/ +/* Seleciona o modo de repaint para imagem do servidor. */ +/*-------------------------------------------------------------------------*/ +int fImageBuffer(Ihandle *self, int v) +{ + ignore(self); + + /* se o toggle foi para o estado ligado... */ + if (v) { + switch (ctgc.buffering) { + case IMAGE_BUFFER: + break; + case IMAGERGB_BUFFER: + /* mata o canvas do buffer anterior */ + if (ctgc.buffer_canvas) cdKillCanvas(ctgc.buffer_canvas); + ctgc.buffer_canvas = NULL; + /* prosegue como se nao houvesse o buffer anterior */ + case NO_BUFFER: + /* cria o canvas do buffer */ + if (use_gdiplus) cdUseContextPlus(1); + ctgc.buffer_canvas = cdCreateCanvas(CD_DBUFFER, ctgc.iup_canvas); + if (!antialias) cdCanvasSetAttribute(ctgc.buffer_canvas, "ANTIALIAS", "0"); + if (use_gdiplus) cdUseContextPlus(0); + /* se nao consegui criar o canvas... */ + if (!ctgc.buffer_canvas) { + /* desabilita o double-buffering */ + ctgc.buffering = NO_BUFFER; + sprintf(ctgc.status_line, "Error creating CD_DBUFFER canvas."); + set_status(); + } + else { + /* seta o modo de escrita para double-buffering em imagem do servidor */ + ctgc.buffering = IMAGE_BUFFER; + /* reconstroe o stipple e o pattern no canvas do buffer */ + cdActivate(ctgc.buffer_canvas); + cdLineStyleDashes(ctgc.dashes, 4); + 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); + /* atualiza o buffer */ + updatecanvas(); + /* muda a linha de status */ + sprintf(ctgc.status_line, "CD_DBUFFER buffer active."); + set_status(); + } + + break; + } + } + return IUP_DEFAULT; +} + +/*-------------------------------------------------------------------------*/ +/* Seleciona o modo de repaint para imagem RGB. */ +/*-------------------------------------------------------------------------*/ +int fRGBBuffer(Ihandle *self, int v) +{ + ignore(self); + + if (v) { + switch (ctgc.buffering) { + case IMAGERGB_BUFFER: + break; + case IMAGE_BUFFER: + /* mata o canvas do buffer anterior */ + if (ctgc.buffer_canvas) cdKillCanvas(ctgc.buffer_canvas); + ctgc.buffer_canvas = NULL; + /* prossegue como se nao houvesse o buffer anterior */ + case NO_BUFFER: + /* cria o canvas do buffer */ + ctgc.buffer_canvas = cdCreateCanvas(CD_DBUFFERRGB, ctgc.iup_canvas); + if (!antialias) cdCanvasSetAttribute(ctgc.buffer_canvas, "ANTIALIAS", "0"); + /* se nao consegui criar o canvas... */ + if (!ctgc.buffer_canvas) { + /* mata a imagem alocada */ + /* desabilita o double-buffering */ + ctgc.buffering = NO_BUFFER; + sprintf(ctgc.status_line, "Error creating CD_DBUFFERRGB canvas."); + set_status(); + } + else { + /* seta o modo de escrita para double-buffering em imagem RGB */ + ctgc.buffering = IMAGERGB_BUFFER; + /* reconstroe o stipple e o pattern no canvas do buffer */ + cdActivate(ctgc.buffer_canvas); + cdLineStyleDashes(ctgc.dashes, 4); + 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); + /* atualiza o buffer */ + updatecanvas(); + /* muda a linha de status */ + sprintf(ctgc.status_line, "CD_DBUFFERRGB buffer active."); + set_status(); + } + break; + } + } + return IUP_DEFAULT; +} + +/*-------------------------------------------------------------------------*/ +/* Seleciona o modo de repaint para escrita diretamente na tela. */ +/*-------------------------------------------------------------------------*/ +int fNoBuffering(Ihandle *self, int v) +{ + ignore(self); + + /* se foi para double-buffering, atualiza o buffer off-screen */ + if (v) { + switch (ctgc.buffering) { + case IMAGERGB_BUFFER: + /* mata o canvas */ + if (ctgc.buffer_canvas) cdKillCanvas(ctgc.buffer_canvas); + ctgc.buffer_canvas = NULL; + /* passa a desenhar diretamente na tela */ + ctgc.buffering = NO_BUFFER; + /* atualiza o buffer */ + updatecanvas(); + break; + case IMAGE_BUFFER: + /* mata o canvas */ + if (ctgc.buffer_canvas) cdKillCanvas(ctgc.buffer_canvas); + ctgc.buffer_canvas = NULL; + /* passa a desenhar diretamente na tela */ + ctgc.buffering = NO_BUFFER; + /* atualiza o buffer */ + updatecanvas(); + break; + case NO_BUFFER: + break; + } + } + /* muda a linha de status */ + sprintf(ctgc.status_line, "Now drawing on-screen."); + set_status(); + + return IUP_DEFAULT; +} + +/*-------------------------------------------------------------------------*/ +/* Funcoes da barra de estilos.. */ +/*-------------------------------------------------------------------------*/ +int fMarkType(Ihandle *self, char *t, int o, int v) +{ + ignore(t); + ignore(self); + if (v == 0) return IUP_DEFAULT; + switch (o) { + case 1: + ctgc.mark_type = CD_PLUS; + sprintf(ctgc.status_line, "cdMarkType(CD_PLUS)"); + break; + case 2: + ctgc.mark_type = CD_STAR; + sprintf(ctgc.status_line, "cdMarkType(CD_STAR)"); + break; + case 3: + ctgc.mark_type = CD_CIRCLE; + sprintf(ctgc.status_line, "cdMarkType(CD_CIRCLE)"); + break; + case 4: + ctgc.mark_type = CD_X; + sprintf(ctgc.status_line, "cdMarkType(CD_X)"); + break; + case 5: + ctgc.mark_type = CD_BOX; + sprintf(ctgc.status_line, "cdMarkType(CD_BOX)"); + break; + case 6: + ctgc.mark_type = CD_DIAMOND; + sprintf(ctgc.status_line, "cdMarkType(CD_DIAMOND)"); + break; + case 7: + ctgc.mark_type = CD_HOLLOW_CIRCLE; + sprintf(ctgc.status_line, "cdMarkType(CD_HOLLOW_CIRCLE)"); + break; + case 8: + ctgc.mark_type = CD_HOLLOW_BOX; + sprintf(ctgc.status_line, "cdMarkType(CD_HOLLOW_BOX)"); + break; + case 9: + ctgc.mark_type = CD_HOLLOW_DIAMOND; + sprintf(ctgc.status_line, "cdMarkType(CD_HOLLOW_DIAMOND)"); + break; + } + set_status(); + return IUP_DEFAULT; +} + +int fWriteMode(Ihandle *self, char *t, int o, int v) +{ + ignore(t); + ignore(self); + if (v == 0) return IUP_DEFAULT; + switch (o) { + case 1: + ctgc.write_mode = CD_REPLACE; + sprintf(ctgc.status_line, "cdWriteMode(CD_REPLACE)"); + break; + case 2: + ctgc.write_mode = CD_XOR; + sprintf(ctgc.status_line, "cdWriteMode(CD_XOR)"); + break; + case 3: + ctgc.write_mode = CD_NOT_XOR; + sprintf(ctgc.status_line, "cdWriteMode(CD_NOT_XOR)"); + break; + } + set_status(); + return IUP_DEFAULT; +} + +int fLineStyle(Ihandle *self, char *t, int o, int v) +{ + ignore(t); + ignore(self); + if (v == 0) return IUP_DEFAULT; + switch (o) { + case 1: + ctgc.line_style = CD_CONTINUOUS; + sprintf(ctgc.status_line, "cdLineStyle(CD_CONTINUOUS)"); + break; + case 2: + ctgc.line_style = CD_DASHED; + sprintf(ctgc.status_line, "cdLineStyle(CD_DASHED)"); + break; + case 3: + ctgc.line_style = CD_DOTTED; + sprintf(ctgc.status_line, "cdLineStyle(CD_DOTTED)"); + break; + case 4: + ctgc.line_style = CD_DASH_DOT; + sprintf(ctgc.status_line, "cdLineStyle(CD_DASH_DOT)"); + break; + case 5: + ctgc.line_style = CD_DASH_DOT_DOT; + sprintf(ctgc.status_line, "cdLineStyle(CD_DASH_DOT_DOT)"); + break; + case 6: + ctgc.line_style = CD_CUSTOM; + sprintf(ctgc.status_line, "cdLineStyle(CD_CUSTOM)"); + break; + } + set_status(); + return IUP_DEFAULT; +} + +int fLineCap(Ihandle *self, char *t, int o, int v) +{ + ignore(t); + ignore(self); + if (v == 0) return IUP_DEFAULT; + switch (o) { + case 1: + ctgc.line_cap = CD_CAPFLAT; + sprintf(ctgc.status_line, "cdLineCap(CD_CAPFLAT)"); + break; + case 2: + ctgc.line_cap = CD_CAPSQUARE; + sprintf(ctgc.status_line, "cdLineCap(CD_CAPSQUARE)"); + break; + case 3: + ctgc.line_cap = CD_CAPROUND; + sprintf(ctgc.status_line, "cdLineCap(CD_CAPROUND)"); + break; + } + set_status(); + return IUP_DEFAULT; +} + +int fLineJoin(Ihandle *self, char *t, int o, int v) +{ + ignore(t); + ignore(self); + if (v == 0) return IUP_DEFAULT; + switch (o) { + case 1: + ctgc.line_join = CD_MITER; + sprintf(ctgc.status_line, "cdLineJoin(CD_MITER)"); + break; + case 2: + ctgc.line_join = CD_BEVEL; + sprintf(ctgc.status_line, "cdLineJoin(CD_BEVEL)"); + break; + case 3: + ctgc.line_join = CD_ROUND; + sprintf(ctgc.status_line, "cdLineJoin(CD_ROUND)"); + break; + } + set_status(); + return IUP_DEFAULT; +} + +int fFillMode(Ihandle *self, char *t, int o, int v) +{ + ignore(t); + ignore(self); + if (v == 0) return IUP_DEFAULT; + switch (o) { + case 1: + ctgc.fill_mode = CD_EVENODD; + sprintf(ctgc.status_line, "cdFillMode(CD_EVENODD)"); + break; + case 2: + ctgc.fill_mode = CD_WINDING; + sprintf(ctgc.status_line, "cdFillMode(CD_WINDING)"); + break; + } + set_status(); + return IUP_DEFAULT; +} + +char* font_style[4] = {"CD_PLAIN", "CD_BOLD", "CD_ITALIC", "CD_BOLD_ITALIC"}; +char* font_face[4] = {"CD_SYSTEM", "CD_COURIER", "CD_TIMES_ROMAN", "CD_HELVETICA"}; + +int fFontStyle(Ihandle *self, char *t, int o, int v) +{ + ignore(t); + ignore(self); + if (v == 0) return IUP_DEFAULT; + switch (o) { + case 1: + ctgc.font_style = CD_PLAIN; + break; + case 2: + ctgc.font_style = CD_BOLD; + break; + case 3: + ctgc.font_style = CD_ITALIC; + break; + case 4: + ctgc.font_style = CD_BOLD_ITALIC; + break; + } + ctgc.font_size = IupGetInt(IupGetHandle("txtFontSize"), IUP_VALUE); + sprintf(ctgc.status_line, "cdFont(%s, %s, %d)", font_face[ctgc.font_typeface], font_style[ctgc.font_style], ctgc.font_size); + set_status(); + return IUP_DEFAULT; +} + + +int fFontTypeFace(Ihandle *self, char *t, int o, int v) +{ + ignore(t); + ignore(self); + if (v == 0) return IUP_DEFAULT; + switch (o) { + case 1: + ctgc.font_typeface = CD_SYSTEM; + break; + case 2: + ctgc.font_typeface = CD_COURIER; + break; + case 3: + ctgc.font_typeface = CD_TIMES_ROMAN; + break; + case 4: + ctgc.font_typeface = CD_HELVETICA; + break; + } + ctgc.font_size = IupGetInt(IupGetHandle("txtFontSize"), IUP_VALUE); + sprintf(ctgc.status_line, "cdFont(%s, %s, %d)", font_face[ctgc.font_typeface], font_style[ctgc.font_style], ctgc.font_size); + set_status(); + return IUP_DEFAULT; +} + +int fTextAlignment(Ihandle *self, char *t, int o, int v) +{ + ignore(t); + ignore(self); + if (v == 0) return IUP_DEFAULT; + switch (o) { + case 1: + ctgc.text_alignment = CD_NORTH; + sprintf(ctgc.status_line, "cdTextAlignment(CD_NORTH)"); + break; + case 2 : + ctgc.text_alignment = CD_SOUTH; + sprintf(ctgc.status_line, "cdTextAlignment(CD_SOUTH)"); + break; + case 3: + ctgc.text_alignment = CD_EAST; + sprintf(ctgc.status_line, "cdTextAlignment(CD_EAST)"); + break; + case 4: + ctgc.text_alignment = CD_WEST; + sprintf(ctgc.status_line, "cdTextAlignment(CD_WEST)"); + break; + case 5: + ctgc.text_alignment = CD_NORTH_EAST; + sprintf(ctgc.status_line, "cdTextAlignment(CD_NORTH_EAST)"); + break; + case 6: + ctgc.text_alignment = CD_NORTH_WEST; + sprintf(ctgc.status_line, "cdTextAlignment(CD_NORTH_WEST)"); + break; + case 7: + ctgc.text_alignment = CD_SOUTH_EAST; + sprintf(ctgc.status_line, "cdTextAlignment(CD_SOUTH_EAST)"); + break; + case 8: + ctgc.text_alignment = CD_SOUTH_WEST; + sprintf(ctgc.status_line, "cdTextAlignment(CD_SOUTH_WEST)"); + break; + case 9: + ctgc.text_alignment = CD_CENTER; + sprintf(ctgc.status_line, "cdTextAlignment(CD_CENTER)"); + break; + case 10: + ctgc.text_alignment = CD_BASE_LEFT; + sprintf(ctgc.status_line, "cdTextAlignment(CD_BASE_LEFT)"); + break; + case 11: + ctgc.text_alignment = CD_BASE_CENTER; + sprintf(ctgc.status_line, "cdTextAlignment(CD_BASE_CENTER)"); + break; + case 12: + ctgc.text_alignment = CD_BASE_RIGHT; + sprintf(ctgc.status_line, "cdTextAlignment(CD_BASE_RIGHT)"); + break; + } + set_status(); + return IUP_DEFAULT; +} + +int fHatchStyle(Ihandle *self, char *t, int o, int v) +{ + ignore(t); + ignore(self); + if (v == 0) return IUP_DEFAULT; + switch (o) { + case 1: + ctgc.hatch = CD_HORIZONTAL; + sprintf(ctgc.status_line, "cdHatch(CD_HORIZONTAL)"); + break; + case 2 : + ctgc.hatch = CD_VERTICAL; + sprintf(ctgc.status_line, "cdHatch(CD_VERTICAL)"); + break; + case 3: + ctgc.hatch = CD_FDIAGONAL; + sprintf(ctgc.status_line, "cdHatch(CD_FDIAGONAL)"); + break; + case 4: + ctgc.hatch = CD_BDIAGONAL; + sprintf(ctgc.status_line, "cdHatch(CD_BDIAGONAL)"); + break; + case 5: + ctgc.hatch = CD_CROSS; + sprintf(ctgc.status_line, "cdHatch(CD_CROSS)"); + break; + case 6: + ctgc.hatch = CD_DIAGCROSS; + sprintf(ctgc.status_line, "cdHatch(CD_DIAGCROSS)"); + break; + } + set_status(); + cdHatch(ctgc.hatch); + return IUP_DEFAULT; +} + +/*-------------------------------------------------------------------------*/ +/* Atualiza a linha de estatus do CDTest. */ +/*-------------------------------------------------------------------------*/ +void set_status(void) +{ + IupSetAttribute(IupGetHandle("lbStatusLine"), IUP_TITLE, ctgc.status_line); +} + +/*-------------------------------------------------------------------------*/ +/* Atualiza a posiccao do mouse no dialogo principal. */ +/*-------------------------------------------------------------------------*/ +void mouse_pos(int x, int y) +{ + /* salva a posiccao do mouse no contexto */ + ctgc.x = x; + ctgc.y = y; + + /* atualiza a posiccao do mouse no feedback para o usuario */ + sprintf(ctgc.mouse_pos, "(%4d,%4d)", x, y); + IupSetAttribute(IupGetHandle("lbMousePos"), IUP_TITLE, ctgc.mouse_pos); +} + +/*-------------------------------------------------------------------------*/ +/* Mostra a caixa de dialogo corrente. */ +/*-------------------------------------------------------------------------*/ +int fShowDialog(void) +{ + if (ctgc.dlg_cur_prim != NULL) { + IupShowXY(ctgc.dlg_cur_prim, ctgc.dlg_x, ctgc.dlg_y); + } + return IUP_DEFAULT; +} + +/*-------------------------------------------------------------------------*/ +/* Ativa a seleccao de area de clip. */ +/*-------------------------------------------------------------------------*/ +int fClip(Ihandle* self) +{ + if (ctgc.cur_prim == POLY) { + fButtonCB(NULL, IUP_BUTTON3, 0, 0, 0, 0); + } + IupSetAttribute(ctgc.bt_cur_prim, IUP_IMAGE, "imgClip"); + ctgc.following = FALSE; + ctgc.cur_prim = CLIP; + ctgc.visible = iscurvisible(); + IupHide(ctgc.dlg_cur_prim); + if (ctgc.visible) + { + ctgc.dlg_x = IupGetInt(ctgc.dlg_cur_prim, IUP_X); + ctgc.dlg_y = IupGetInt(ctgc.dlg_cur_prim, IUP_Y); + } + ctgc.dlg_cur_prim = IupGetHandle("dlgClip"); + sprintf(ctgc.status_line, "LEFT click and drag to set. RIGHT clip to disable."); + set_status(); + if (ctgc.visible || IupGetAttribute(self, "ISMENU")) + IupShowXY(ctgc.dlg_cur_prim, ctgc.dlg_x, ctgc.dlg_y); + return IUP_DEFAULT; +} + +/*-------------------------------------------------------------------------*/ +/* Atualiza a area de clipping. */ +/*-------------------------------------------------------------------------*/ +int fClipArea(void) +{ + ctgc.clip_mode = CD_CLIPAREA; + ctgc.clip_xmin = IupGetInt(IupGetHandle("txtClipXmin"), IUP_VALUE); + ctgc.clip_xmax = IupGetInt(IupGetHandle("txtClipXmax"), IUP_VALUE); + ctgc.clip_ymin = IupGetInt(IupGetHandle("txtClipYmin"), IUP_VALUE); + ctgc.clip_ymax = IupGetInt(IupGetHandle("txtClipYmax"), IUP_VALUE); + cdClipArea(ctgc.clip_xmin,ctgc.clip_xmax,ctgc.clip_ymin,ctgc.clip_ymax); + cdClip(CD_CLIPAREA); + sprintf(ctgc.status_line, "cdClipArea( %d, %d, %d, %d)", + ctgc.clip_xmin,ctgc.clip_xmax,ctgc.clip_ymin,ctgc.clip_ymax); + set_status(); + updatecanvas(); + return IUP_DEFAULT; +} + +/*-------------------------------------------------------------------------*/ +/* Atualiza poligono de clipping. */ +/*-------------------------------------------------------------------------*/ +int fClipPoly(void) +{ + ctgc.clip_mode=CD_CLIPPOLYGON; + cdClip(CD_CLIPPOLYGON); + sprintf(ctgc.status_line, "cdClip(CD_CLIPPOLYGON)"); + set_status(); + updatecanvas(); + return IUP_DEFAULT; +} + +/*-------------------------------------------------------------------------*/ +/* Desativa o Clipping. */ +/*-------------------------------------------------------------------------*/ +int fClipOff(void) +{ + ctgc.clip_mode = CD_CLIPOFF; + cdClip(CD_CLIPOFF); + sprintf(ctgc.status_line, "cdClip(CD_CLIPOFF)"); + set_status(); + updatecanvas(); + return IUP_DEFAULT; +} + +/*-------------------------------------------------------------------------*/ +/* Prepara a seleccao de imagens. */ +/*-------------------------------------------------------------------------*/ +int fImage(Ihandle* self) +{ + if (ctgc.cur_prim == POLY) { + fButtonCB(NULL, IUP_BUTTON3, 0, 0, 0, 0); + } + IupSetAttribute(ctgc.bt_cur_prim, IUP_IMAGE, "imgImage"); + ctgc.cur_prim = IMAGE; + ctgc.following = FALSE; + ctgc.visible = iscurvisible(); + IupHide(ctgc.dlg_cur_prim); + if (ctgc.visible) + { + ctgc.dlg_x = IupGetInt(ctgc.dlg_cur_prim, IUP_X); + ctgc.dlg_y = IupGetInt(ctgc.dlg_cur_prim, IUP_Y); + } + ctgc.dlg_cur_prim = IupGetHandle("dlgImage"); + sprintf(ctgc.status_line, "LEFT click and drag to get. RIGHT click to put."); + set_status(); + if (ctgc.visible || IupGetAttribute(self, "ISMENU")) + IupShowXY(ctgc.dlg_cur_prim, ctgc.dlg_x, ctgc.dlg_y); + return IUP_DEFAULT; +} + +/*-------------------------------------------------------------------------*/ +/* Pega a imagem. */ +/*-------------------------------------------------------------------------*/ +int fImageGet(void) +{ + int x, y, width, height; + + /* mata a image */ + if (ctgc.test_image != NULL) { + cdKillImage(ctgc.test_image); + } + + x = IupGetInt(IupGetHandle("txtImageX"), IUP_VALUE); + y = IupGetInt(IupGetHandle("txtImageY"), IUP_VALUE); + + width = IupGetInt(IupGetHandle("txtImageW"), IUP_VALUE); + height = IupGetInt(IupGetHandle("txtImageH"), IUP_VALUE); + + if (width*height != 0) + { + if (ctgc.buffering) + cdActivate(ctgc.buffer_canvas); + else + cdActivate(ctgc.iup_canvas); + + ctgc.test_image = cdCreateImage(width, height); + if (ctgc.test_image != NULL) + { + cdGetImage(ctgc.test_image, x, y); + sprintf(ctgc.status_line, "cdGetImage( image, %d, %d)", x, y); + set_status(); + } + + cdActivate(ctgc.iup_canvas); + } + return IUP_DEFAULT; +} + +/*-------------------------------------------------------------------------*/ +/* Coloca a imagem. */ +/*-------------------------------------------------------------------------*/ +int fImagePut(void) +{ + int x, y; + + x = IupGetInt(IupGetHandle("txtImageX"), IUP_VALUE); + y = IupGetInt(IupGetHandle("txtImageY"), IUP_VALUE); + + if (ctgc.test_image != NULL) + { + if (ctgc.buffering) + { + cdActivate(ctgc.iup_canvas); + cdClip(CD_CLIPOFF); + + cdActivate(ctgc.buffer_canvas); + } + else + cdActivate(ctgc.iup_canvas); + + cdWriteMode(ctgc.write_mode); + cdPutImage(ctgc.test_image, x, y); + sprintf(ctgc.status_line, "cdPutImage( image, %d, %d)", x, y); + set_status(); + + if (ctgc.buffering) + { + cdFlush(); + + cdActivate(ctgc.iup_canvas); + cdClip(ctgc.clip_mode); + } + } + return IUP_DEFAULT; +} + +/*-------------------------------------------------------------------------*/ +/* Prepara a seleccao de imagens. */ +/*-------------------------------------------------------------------------*/ +int fImageRGB(Ihandle* self) +{ + if (ctgc.cur_prim == POLY) { + fButtonCB(NULL, IUP_BUTTON3, 0, 0, 0, 0); + } + IupSetAttribute(ctgc.bt_cur_prim, IUP_IMAGE, "imgImageRGB"); + ctgc.cur_prim = RGB; + ctgc.following = FALSE; + ctgc.visible = iscurvisible(); + IupHide(ctgc.dlg_cur_prim); + if (ctgc.visible) + { + ctgc.dlg_x = IupGetInt(ctgc.dlg_cur_prim, IUP_X); + ctgc.dlg_y = IupGetInt(ctgc.dlg_cur_prim, IUP_Y); + } + ctgc.dlg_cur_prim = IupGetHandle("dlgImageRGB"); + sprintf(ctgc.status_line, "LEFT click and drag to get. RIGHT click to put."); + set_status(); + if (ctgc.visible || IupGetAttribute(self, "ISMENU")) + IupShowXY(ctgc.dlg_cur_prim, ctgc.dlg_x, ctgc.dlg_y); + return IUP_DEFAULT; +} + +/*-------------------------------------------------------------------------*/ +/* Pega a imagem. */ +/*-------------------------------------------------------------------------*/ +int fImageRGBGet(void) +{ + int x, y; + + x = IupGetInt(IupGetHandle("txtImageRGBX"), IUP_VALUE); + y = IupGetInt(IupGetHandle("txtImageRGBY"), IUP_VALUE); + ctgc.rgb_w = IupGetInt(IupGetHandle("txtImageRGBW"), IUP_VALUE); + ctgc.rgb_h = IupGetInt(IupGetHandle("txtImageRGBH"), IUP_VALUE); + + if (ctgc.red) free(ctgc.red); + ctgc.red = (unsigned char *) malloc (ctgc.rgb_w*ctgc.rgb_h*sizeof(unsigned char)); + if (ctgc.green) free(ctgc.green); + ctgc.green = (unsigned char *) malloc (ctgc.rgb_w*ctgc.rgb_h*sizeof(unsigned char)); + if (ctgc.blue) free(ctgc.blue); + ctgc.blue = (unsigned char *) malloc (ctgc.rgb_w*ctgc.rgb_h*sizeof(unsigned char)); + + if ((ctgc.red!=NULL)&&(ctgc.green!=NULL)&&(ctgc.blue!=NULL)) { + sprintf(ctgc.status_line, "cdGetImageRGB( r, g, b, %d, %d, %d, %d)", + x, y, ctgc.rgb_w, ctgc.rgb_h); + set_status(); + + if (ctgc.buffering) + cdActivate(ctgc.buffer_canvas); + else + cdActivate(ctgc.iup_canvas); + + cdGetImageRGB(ctgc.red, ctgc.green, ctgc.blue, x, y, ctgc.rgb_w, ctgc.rgb_h); + + cdActivate(ctgc.iup_canvas); + } + return IUP_DEFAULT; +} + +/*-------------------------------------------------------------------------*/ +/* Joga a imagem na tela. */ +/*-------------------------------------------------------------------------*/ +int fImageRGBPut(void) +{ + int x, y; + + x = IupGetInt(IupGetHandle("txtImageRGBX"), IUP_VALUE); + y = IupGetInt(IupGetHandle("txtImageRGBY"), IUP_VALUE); + + if ((ctgc.red!=NULL)&&(ctgc.green!=NULL)&&(ctgc.blue!=NULL)) + { + if (ctgc.buffering) + { + cdActivate(ctgc.iup_canvas); + cdClip(CD_CLIPOFF); + + cdActivate(ctgc.buffer_canvas); + } + else + cdActivate(ctgc.iup_canvas); + + cdWriteMode(ctgc.write_mode); + sprintf(ctgc.status_line, "cdPutImageRGB( %d, %d, r, g, b, %d, %d, %d, %d)", + ctgc.rgb_w, ctgc.rgb_h, x, y, ctgc.rgb_w, ctgc.rgb_h); + set_status(); + cdPutImageRGB(ctgc.rgb_w, ctgc.rgb_h, ctgc.red, ctgc.green, ctgc.blue, x, y, ctgc.rgb_w, ctgc.rgb_h); + + if (ctgc.buffering) + { + cdFlush(); + + cdActivate(ctgc.iup_canvas); + cdClip(ctgc.clip_mode); + } + } + return IUP_DEFAULT; +} + +/*-------------------------------------------------------------------------*/ +/* Muda a primitiva corrente. */ +/*-------------------------------------------------------------------------*/ +int fLine(Ihandle* self) +{ + if (ctgc.cur_prim != LINE) { + IupSetAttribute(ctgc.bt_cur_prim, IUP_IMAGE, "imgLine"); + if (ctgc.cur_prim == POLY) { /* termina o poligono em andamento */ + fButtonCB(NULL, IUP_BUTTON3, 0, 0, 0, 0); + } + ctgc.cur_prim = LINE; + ctgc.following = FALSE; + ctgc.visible = iscurvisible(); + IupHide(ctgc.dlg_cur_prim); /* esconde o dialogo anterior */ + if (ctgc.visible) + { + ctgc.dlg_x = IupGetInt(ctgc.dlg_cur_prim, IUP_X); + ctgc.dlg_y = IupGetInt(ctgc.dlg_cur_prim, IUP_Y); + } + ctgc.dlg_cur_prim = IupGetHandle("dlgLB"); + IupSetAttribute(ctgc.dlg_cur_prim, IUP_TITLE, "Line Parameters"); + } + sprintf(ctgc.status_line, "LEFT click and drag."); + set_status(); + if (ctgc.visible || IupGetAttribute(self, "ISMENU")) + IupShowXY(ctgc.dlg_cur_prim, ctgc.dlg_x, ctgc.dlg_y); + return IUP_DEFAULT; +} + +/*-------------------------------------------------------------------------*/ +/* Muda a primitiva corrente. */ +/*-------------------------------------------------------------------------*/ +int fRect(Ihandle* self) +{ + if (ctgc.cur_prim != RECT) { + IupSetAttribute(ctgc.bt_cur_prim, IUP_IMAGE, "imgRect"); + if (ctgc.cur_prim == POLY) { + fButtonCB(NULL, IUP_BUTTON3, 0, 0, 0, 0); + } + ctgc.cur_prim = RECT; + ctgc.following = FALSE; + ctgc.visible = iscurvisible(); + IupHide(ctgc.dlg_cur_prim); + if (ctgc.visible) + { + ctgc.dlg_x = IupGetInt(ctgc.dlg_cur_prim, IUP_X); + ctgc.dlg_y = IupGetInt(ctgc.dlg_cur_prim, IUP_Y); + } + ctgc.dlg_cur_prim = IupGetHandle("dlgLB"); + IupSetAttribute(ctgc.dlg_cur_prim, IUP_TITLE, "Rect Parameters"); + } + sprintf(ctgc.status_line, "LEFT click and drag."); + set_status(); + if (ctgc.visible || IupGetAttribute(self, "ISMENU")) + IupShowXY(ctgc.dlg_cur_prim, ctgc.dlg_x, ctgc.dlg_y); + return IUP_DEFAULT; +} + +int fBox(Ihandle* self) +{ + if (ctgc.cur_prim != BOX) { + IupSetAttribute(ctgc.bt_cur_prim, IUP_IMAGE, "imgBox"); + if (ctgc.cur_prim == POLY) { + fButtonCB(NULL, IUP_BUTTON3, 0, 0, 0, 0); + } + ctgc.cur_prim = BOX; + ctgc.following = FALSE; + ctgc.visible = iscurvisible(); + IupHide(ctgc.dlg_cur_prim); + if (ctgc.visible) + { + ctgc.dlg_x = IupGetInt(ctgc.dlg_cur_prim, IUP_X); + ctgc.dlg_y = IupGetInt(ctgc.dlg_cur_prim, IUP_Y); + } + ctgc.dlg_cur_prim = IupGetHandle("dlgLB"); + IupSetAttribute(ctgc.dlg_cur_prim, IUP_TITLE, "Box Parameters"); + } + sprintf(ctgc.status_line, "LEFT click and drag."); + set_status(); + if (ctgc.visible || IupGetAttribute(self, "ISMENU")) + IupShowXY(ctgc.dlg_cur_prim, ctgc.dlg_x, ctgc.dlg_y); + return IUP_DEFAULT; +} + +/*-------------------------------------------------------------------------*/ +/* Muda a primitiva corrente. */ +/*-------------------------------------------------------------------------*/ +int fArc(Ihandle* self) +{ + if (ctgc.cur_prim != ARC) { + IupSetAttribute(ctgc.bt_cur_prim, IUP_IMAGE, "imgArc"); + if (ctgc.cur_prim == POLY) { + fButtonCB(NULL, IUP_BUTTON3, 0, 0, 0, 0); + } + ctgc.cur_prim = ARC; + ctgc.following = FALSE; + ctgc.visible = iscurvisible(); + IupHide(ctgc.dlg_cur_prim); + if (ctgc.visible) + { + ctgc.dlg_x = IupGetInt(ctgc.dlg_cur_prim, IUP_X); + ctgc.dlg_y = IupGetInt(ctgc.dlg_cur_prim, IUP_Y); + } + ctgc.dlg_cur_prim = IupGetHandle("dlgAS"); + IupSetAttribute(ctgc.dlg_cur_prim, IUP_TITLE, "Arc Parameters"); + } + sprintf(ctgc.status_line, "LEFT click at center and drag."); + set_status(); + if (ctgc.visible || IupGetAttribute(self, "ISMENU")) + IupShowXY(ctgc.dlg_cur_prim, ctgc.dlg_x, ctgc.dlg_y); + return IUP_DEFAULT; +} + +/*-------------------------------------------------------------------------*/ +/* Muda a primitiva corrente. */ +/*-------------------------------------------------------------------------*/ +int fSector(Ihandle* self) +{ + if (ctgc.cur_prim != SECTOR) { + IupSetAttribute(ctgc.bt_cur_prim, IUP_IMAGE, "imgSector"); + if (ctgc.cur_prim == POLY) { + fButtonCB(NULL, IUP_BUTTON3, 0, 0, 0, 0); + } + ctgc.cur_prim = SECTOR; + ctgc.following = FALSE; + ctgc.visible = iscurvisible(); + IupHide(ctgc.dlg_cur_prim); + if (ctgc.visible) + { + ctgc.dlg_x = IupGetInt(ctgc.dlg_cur_prim, IUP_X); + ctgc.dlg_y = IupGetInt(ctgc.dlg_cur_prim, IUP_Y); + } + ctgc.dlg_cur_prim = IupGetHandle("dlgAS"); + IupSetAttribute(ctgc.dlg_cur_prim, IUP_TITLE, "Sector Parameters"); + } + sprintf(ctgc.status_line, "LEFT click at center and drag."); + set_status(); + if (ctgc.visible || IupGetAttribute(self, "ISMENU")) + IupShowXY(ctgc.dlg_cur_prim, ctgc.dlg_x, ctgc.dlg_y); + return IUP_DEFAULT; +} + +int fChord(Ihandle* self) +{ + if (ctgc.cur_prim != CHORD) { + IupSetAttribute(ctgc.bt_cur_prim, IUP_IMAGE, "imgChord"); + if (ctgc.cur_prim == POLY) { + fButtonCB(NULL, IUP_BUTTON3, 0, 0, 0, 0); + } + ctgc.cur_prim = CHORD; + ctgc.following = FALSE; + ctgc.visible = iscurvisible(); + IupHide(ctgc.dlg_cur_prim); + if (ctgc.visible) + { + ctgc.dlg_x = IupGetInt(ctgc.dlg_cur_prim, IUP_X); + ctgc.dlg_y = IupGetInt(ctgc.dlg_cur_prim, IUP_Y); + } + ctgc.dlg_cur_prim = IupGetHandle("dlgAS"); + IupSetAttribute(ctgc.dlg_cur_prim, IUP_TITLE, "Chord Parameters"); + } + sprintf(ctgc.status_line, "LEFT click at center and drag."); + set_status(); + if (ctgc.visible || IupGetAttribute(self, "ISMENU")) + IupShowXY(ctgc.dlg_cur_prim, ctgc.dlg_x, ctgc.dlg_y); + return IUP_DEFAULT; +} + +/*-------------------------------------------------------------------------*/ +/* Muda a primitiva corrente. */ +/*-------------------------------------------------------------------------*/ +int fPixel(Ihandle* self) +{ + if (ctgc.cur_prim != PIXEL) { + IupSetAttribute(ctgc.bt_cur_prim, IUP_IMAGE, "imgPixel"); + if (ctgc.cur_prim == POLY) { + fButtonCB(NULL, IUP_BUTTON3, 0, 0, 0, 0); + } + ctgc.cur_prim = PIXEL; + ctgc.following = FALSE; + ctgc.visible = iscurvisible(); + IupHide(ctgc.dlg_cur_prim); + if (ctgc.visible) + { + ctgc.dlg_x = IupGetInt(ctgc.dlg_cur_prim, IUP_X); + ctgc.dlg_y = IupGetInt(ctgc.dlg_cur_prim, IUP_Y); + } + ctgc.dlg_cur_prim = IupGetHandle("dlgPixel"); + } + sprintf(ctgc.status_line, "LEFT click."); + set_status(); + if (ctgc.visible || IupGetAttribute(self, "ISMENU")) + IupShowXY(ctgc.dlg_cur_prim, ctgc.dlg_x, ctgc.dlg_y); + return IUP_DEFAULT; +} + +/*-------------------------------------------------------------------------*/ +/* Muda a primitiva corrente. */ +/*-------------------------------------------------------------------------*/ +int fMark(Ihandle* self) +{ + if (ctgc.cur_prim != MARK) { + IupSetAttribute(ctgc.bt_cur_prim, IUP_IMAGE, "imgMark"); + if (ctgc.cur_prim == POLY) { + fButtonCB(NULL, IUP_BUTTON3, 0, 0, 0, 0); + } + ctgc.cur_prim = MARK; + ctgc.following = FALSE; + ctgc.visible = iscurvisible(); + IupHide(ctgc.dlg_cur_prim); + if (ctgc.visible) + { + ctgc.dlg_x = IupGetInt(ctgc.dlg_cur_prim, IUP_X); + ctgc.dlg_y = IupGetInt(ctgc.dlg_cur_prim, IUP_Y); + } + ctgc.dlg_cur_prim = IupGetHandle("dlgMark"); + } + sprintf(ctgc.status_line, "LEFT click."); + set_status(); + if (ctgc.visible || IupGetAttribute(self, "ISMENU")) + IupShowXY(ctgc.dlg_cur_prim, ctgc.dlg_x, ctgc.dlg_y); + return IUP_DEFAULT; +} + +/*-------------------------------------------------------------------------*/ +/* Muda a primitiva corrente. */ +/*-------------------------------------------------------------------------*/ +int fText(Ihandle* self) +{ + if (ctgc.cur_prim != TEXT) { + IupSetAttribute(ctgc.bt_cur_prim, IUP_IMAGE, "imgText"); + if (ctgc.cur_prim == POLY) { + fButtonCB(NULL, IUP_BUTTON3, 0, 0, 0, 0); + } + ctgc.cur_prim = TEXT; + ctgc.following = FALSE; + ctgc.visible = iscurvisible(); + IupHide(ctgc.dlg_cur_prim); + if (ctgc.visible) + { + ctgc.dlg_x = IupGetInt(ctgc.dlg_cur_prim, IUP_X); + ctgc.dlg_y = IupGetInt(ctgc.dlg_cur_prim, IUP_Y); + } + ctgc.dlg_cur_prim = IupGetHandle("dlgText"); + } + sprintf(ctgc.status_line, "LEFT click."); + set_status(); + if (ctgc.visible || IupGetAttribute(self, "ISMENU")) + IupShowXY(ctgc.dlg_cur_prim, ctgc.dlg_x, ctgc.dlg_y); + return IUP_DEFAULT; +} + +/*-------------------------------------------------------------------------*/ +/* Muda a primitiva corrente. */ +/*-------------------------------------------------------------------------*/ +int fPoly(Ihandle* self) +{ + if (ctgc.cur_prim != POLY) { + IupSetAttribute(ctgc.bt_cur_prim, IUP_IMAGE, "imgPoly"); + ctgc.cur_prim = POLY; + ctgc.following = FALSE; + ctgc.visible = iscurvisible(); + IupHide(ctgc.dlg_cur_prim); + if (ctgc.visible) + { + ctgc.dlg_x = IupGetInt(ctgc.dlg_cur_prim, IUP_X); + ctgc.dlg_y = IupGetInt(ctgc.dlg_cur_prim, IUP_Y); + } + ctgc.dlg_cur_prim = IupGetHandle("dlgPoly"); + /* zera o buffer temporario de pontos */ + ctgc.num_points = 0; + } + sprintf(ctgc.status_line, "LEFT click to add vertex. RIGHT click to end."); + set_status(); + if (ctgc.visible || IupGetAttribute(self, "ISMENU")) + IupShowXY(ctgc.dlg_cur_prim, ctgc.dlg_x, ctgc.dlg_y); + return IUP_DEFAULT; +} + +int fOptions(void) +{ + IupShow(IupGetHandle("dlgOptions")); + return IUP_DEFAULT; +} + +int fOptionsHide(void) +{ + IupHide(IupGetHandle("dlgOptions")); + return IUP_DEFAULT; +} + + +/*-------------------------------------------------------------------------*/ +/* Mostra a caixa de dialogo Attributes. */ +/*-------------------------------------------------------------------------*/ +int fAttributes(void) +{ + IupShow(IupGetHandle("dlgAttributes")); + return IUP_DEFAULT; +} + +/*-------------------------------------------------------------------------*/ +/* Esconde o dialogo de Attributes. */ +/*-------------------------------------------------------------------------*/ +int fAttributesHide(void) +{ + ctgc.font_size = IupGetInt(IupGetHandle("txtFontSize"), IUP_VALUE); + cdFont(ctgc.font_typeface,ctgc.font_style,ctgc.font_size); + IupHide(IupGetHandle("dlgAttributes")); + return IUP_DEFAULT; +} + +/*-------------------------------------------------------------------------*/ +/* Esconde o dialogo de primitiva corrente. */ +/*-------------------------------------------------------------------------*/ +int fMsgHide(void) +{ + IupHide(ctgc.dlg_cur_prim); + ctgc.dlg_x = IupGetInt(ctgc.dlg_cur_prim, IUP_X); + ctgc.dlg_y = IupGetInt(ctgc.dlg_cur_prim, IUP_Y); + return IUP_DEFAULT; +} + +/*-------------------------------------------------------------------------*/ +/* Filtra inteiros. */ +/*-------------------------------------------------------------------------*/ +int fInteger(Ihandle *self, int c) +{ + ignore(self); + if (isdigit(c) || c == '-') + return IUP_DEFAULT; + else if ((c==K_TAB) || (c==K_CR) || (c==K_LEFT) || + (c==K_RIGHT) || (c==K_DEL) || (c==K_BS) || (c==K_sTAB)) + return IUP_DEFAULT; + else + return IUP_IGNORE; +} + +/*-------------------------------------------------------------------------*/ +/* Filtra reais. */ +/*-------------------------------------------------------------------------*/ +int fReal(Ihandle *self, int c) +{ + ignore(self); + if (isdigit(c)) + return IUP_DEFAULT; + else if ((c==K_TAB) || (c==K_CR) || (c==K_LEFT) || + (c==K_RIGHT) || (c==K_DEL) || (c==K_BS) || (c==K_sTAB)) + return IUP_DEFAULT; + else if ((c=='.') || (c=='e') || (c=='E') || (c=='+') || (c=='-')) + return IUP_DEFAULT; + else + return IUP_IGNORE; +} + +/*-------------------------------------------------------------------------*/ +/* Desenha a primitiva entrada na caixa de dialogo ativa. */ +/*-------------------------------------------------------------------------*/ +void draw(void) +{ + int a, b; + + IupSetAttribute(IupGetHandle("itEditUndo"), IUP_ACTIVE, IUP_YES); + ctgc.line_width = IupGetInt(IupGetHandle("txtLineWidth"), IUP_VALUE); + if (ctgc.line_width < 1) ctgc.line_width = 1; + ctgc.font_size = IupGetInt(IupGetHandle("txtFontSize"), IUP_VALUE); + + /* escolhe entre o canvas na tela e o off-screen */ + if (ctgc.buffering) + { + cdActivate(ctgc.iup_canvas); + cdClip(CD_CLIPOFF); + + cdActivate(ctgc.buffer_canvas); + } + else + cdActivate(ctgc.iup_canvas); + + /* atualiza os atributos */ + cdWriteMode(ctgc.write_mode); + cdLineStyle(ctgc.line_style); + cdLineCap(ctgc.line_cap); + cdLineJoin(ctgc.line_join); + cdLineWidth(ctgc.line_width); + cdForeground(ctgc.foreground); + cdBackground(ctgc.background); + cdHatch(ctgc.hatch); + cdFillMode(ctgc.fill_mode); + cdInteriorStyle(ctgc.interior_style); + cdBackOpacity(ctgc.back_opacity); + + cdClipArea(ctgc.clip_xmin,ctgc.clip_xmax,ctgc.clip_ymin,ctgc.clip_ymax); + cdClip(ctgc.clip_mode); + + switch (ctgc.cur_prim) { + case LINE: + /* atualiza a linha de status */ + sprintf(ctgc.status_line, "cdLine( %d, %d, %d, %d)", line_pos.x1, + line_pos.y1, line_pos.x2, line_pos.y2); + set_status(); + /* desenha a line na tela */ + cdLine(line_pos.x1, line_pos.y1, line_pos.x2, line_pos.y2); + /* arquiva a line */ + newline(line_pos.x1, line_pos.y1, line_pos.x2, line_pos.y2); + break; + case RECT: + /* atualiza a linha de status */ + sprintf(ctgc.status_line,"cdRect( %d, %d, %d, %d)",box_pos.xmin, + box_pos.xmax, box_pos.ymin, box_pos.ymax); + set_status(); + /* desenha a box na tela */ + cdRect(box_pos.xmin, box_pos.xmax, box_pos.ymin, box_pos.ymax); + /* armazena a box */ + newrect(box_pos.xmin, box_pos.xmax, box_pos.ymin, box_pos.ymax); + break; + case BOX: + /* atualiza a linha de status */ + sprintf(ctgc.status_line,"cdBox( %d, %d, %d, %d)",box_pos.xmin, + box_pos.xmax, box_pos.ymin, box_pos.ymax); + set_status(); + /* desenha a box na tela */ + cdBox(box_pos.xmin, box_pos.xmax, box_pos.ymin, box_pos.ymax); + /* armazena a box */ + newbox(box_pos.xmin, box_pos.xmax, box_pos.ymin, box_pos.ymax); + break; + case ARC: + arc_pos.angle1 = IupGetFloat(IupGetHandle("txtASAngle1"),IUP_VALUE); + arc_pos.angle2 = IupGetFloat(IupGetHandle("txtASAngle2"),IUP_VALUE); + /* atualiza a linha de status */ + sprintf(ctgc.status_line,"cdArc( %d, %d, %d, %d, %.5G, %.5G)", arc_pos.xc, + arc_pos.yc, arc_pos.w, arc_pos.h, arc_pos.angle1, arc_pos.angle2); + set_status(); + /* desenha o arc na tela */ + cdArc(arc_pos.xc, arc_pos.yc, arc_pos.w, arc_pos.h, arc_pos.angle1, + arc_pos.angle2); + /* armazena o arc */ + newarc(arc_pos.xc, arc_pos.yc, arc_pos.w, arc_pos.h, arc_pos.angle1, + arc_pos.angle2); + break; + case SECTOR: + arc_pos.angle1 = IupGetFloat(IupGetHandle("txtASAngle1"),IUP_VALUE); + arc_pos.angle2 = IupGetFloat(IupGetHandle("txtASAngle2"),IUP_VALUE); + /* atualiza a linha de status */ + sprintf(ctgc.status_line,"cdSector( %d, %d, %d, %d, %.5G, %.5G)", arc_pos.xc, + arc_pos.yc, arc_pos.w, arc_pos.h, arc_pos.angle1, arc_pos.angle2); + set_status(); + /* desenha o sector na tela */ + cdSector(arc_pos.xc, arc_pos.yc, arc_pos.w, arc_pos.h, arc_pos.angle1, + arc_pos.angle2); + /* armazena o sector */ + newsector(arc_pos.xc, arc_pos.yc, arc_pos.w, arc_pos.h, arc_pos.angle1, + arc_pos.angle2); + break; + case CHORD: + arc_pos.angle1 = IupGetFloat(IupGetHandle("txtASAngle1"),IUP_VALUE); + arc_pos.angle2 = IupGetFloat(IupGetHandle("txtASAngle2"),IUP_VALUE); + /* atualiza a linha de status */ + sprintf(ctgc.status_line,"cdChord( %d, %d, %d, %d, %.5G, %.5G)", arc_pos.xc, + arc_pos.yc, arc_pos.w, arc_pos.h, arc_pos.angle1, arc_pos.angle2); + set_status(); + /* desenha o sector na tela */ + cdChord(arc_pos.xc, arc_pos.yc, arc_pos.w, arc_pos.h, arc_pos.angle1, + arc_pos.angle2); + /* armazena o sector */ + newchord(arc_pos.xc, arc_pos.yc, arc_pos.w, arc_pos.h, arc_pos.angle1, + arc_pos.angle2); + break; + case PIXEL: + /* atualiza a linha de status */ + sprintf(ctgc.status_line, "cdPixel( %d, %d, 0x%.6lx )",pixel_pos.x, pixel_pos.y,ctgc.foreground); + set_status(); + /* desenha o pixel na tela */ + cdPixel(pixel_pos.x, pixel_pos.y, ctgc.foreground); + /* armazena o pixel */ + newpixel(pixel_pos.x, pixel_pos.y); + break; + case MARK: + mark_pos.size = IupGetInt(IupGetHandle("txtMarkSize"),IUP_VALUE); + /* atualiza a linha de status */ + sprintf(ctgc.status_line,"cdMark( %d, %d)", mark_pos.x, mark_pos.y); + set_status(); + /* armazena a marca */ + newmark(mark_pos.x, mark_pos.y, mark_pos.size); + /* desenha a marca na tela */ + cdMarkType(ctgc.mark_type); + cdMarkSize(mark_pos.size); + cdMark(mark_pos.x, mark_pos.y); + break; + case TEXT: + if (IupGetAttribute(IupGetHandle("txtTextS"),IUP_VALUE)) { + a=IupGetInt(IupGetHandle("txtTextX"),IUP_VALUE); + b=IupGetInt(IupGetHandle("txtTextY"),IUP_VALUE); + sprintf(ctgc.status_line," cdText( %d, %d, ""%.3s""...)", a, b, + IupGetAttribute(IupGetHandle("txtTextS"),IUP_VALUE)); + set_status(); + ctgc.text_orientation = IupGetInt(IupGetHandle("txtTextOrientation"),IUP_VALUE); + newtext(a,b,IupGetAttribute(IupGetHandle("txtTextS"),IUP_VALUE)); + cdFont(ctgc.font_typeface,ctgc.font_style,ctgc.font_size); + cdTextAlignment(ctgc.text_alignment); + cdTextOrientation(ctgc.text_orientation); + cdText(a,b,IupGetAttribute(IupGetHandle("txtTextS"),IUP_VALUE)); + } + case POLY: + if (ctgc.num_points > 1) { + cdBegin(ctgc.poly_mode); + for (a=0; (a<ctgc.num_points); a++) { + cdVertex(ctgc.points[a].x,ctgc.points[a].y); + } + cdEnd(); + if (ctgc.poly_mode != CD_CLIP) + newpoly(); + ctgc.num_points = 0; + } + break; + default: + break; + } + + if (ctgc.buffering) + { + cdFlush(); + + cdActivate(ctgc.iup_canvas); + cdClip(ctgc.clip_mode); + } +} + +/*-------------------------------------------------------------------------*/ +/* Desenha a primitiva entrada na caixa de dialogo corrente. */ +/*-------------------------------------------------------------------------*/ +int fDraw(void) +{ + /* atualiza os dados entrados na caixa de dialogo no contexto da */ + /* primitiva corrente */ + switch (ctgc.cur_prim) { + case LINE: + line_pos.x1 = IupGetInt(IupGetHandle("txtLBX1"), IUP_VALUE); + line_pos.x2 = IupGetInt(IupGetHandle("txtLBX2"), IUP_VALUE); + line_pos.y1 = IupGetInt(IupGetHandle("txtLBY1"), IUP_VALUE); + line_pos.y2 = IupGetInt(IupGetHandle("txtLBY2"), IUP_VALUE); + break; + case RECT: + case BOX: + box_pos.xmin = IupGetInt(IupGetHandle("txtLBX1"), IUP_VALUE); + box_pos.xmax = IupGetInt(IupGetHandle("txtLBX2"), IUP_VALUE); + box_pos.ymin = IupGetInt(IupGetHandle("txtLBY1"), IUP_VALUE); + box_pos.ymax = IupGetInt(IupGetHandle("txtLBY2"), IUP_VALUE); + break; + case ARC: + case CHORD: + case SECTOR: + arc_pos.xc = IupGetInt(IupGetHandle("txtASXC"), IUP_VALUE); + arc_pos.yc = IupGetInt(IupGetHandle("txtASYC"), IUP_VALUE); + arc_pos.w = IupGetInt(IupGetHandle("txtASW"), IUP_VALUE); + arc_pos.h = IupGetInt(IupGetHandle("txtASH"), IUP_VALUE); + break; + case PIXEL: + pixel_pos.x = IupGetInt(IupGetHandle("txtPixelX"), IUP_VALUE); + pixel_pos.y = IupGetInt(IupGetHandle("txtPixelY"), IUP_VALUE); + break; + case MARK: + mark_pos.x = IupGetInt(IupGetHandle("txtMarkX"), IUP_VALUE); + mark_pos.y = IupGetInt(IupGetHandle("txtMarkY"), IUP_VALUE); + break; + default: + break; + } + + /* efetivamente desenha a primitiva */ + draw(); + + return IUP_DEFAULT; +} + +/*-------------------------------------------------------------------------*/ +/* Mostra a janelinha de apresentacao. */ +/*-------------------------------------------------------------------------*/ +int fHelpAbout(void) +{ + IupSetAttribute(IupGetHandle("lblVersion"), IUP_TITLE, cdVersion()); + IupShow(IupGetHandle("dlgHelpAbout")); + return IUP_DEFAULT; +} + +/*-------------------------------------------------------------------------*/ +/* Mata a janelinha de apresentacao. */ +/*-------------------------------------------------------------------------*/ +int fCloseAbout(void) +{ + IupHide(IupGetHandle("dlgHelpAbout")); + return IUP_DEFAULT; +} + +/*-------------------------------------------------------------------------*/ +/* Limpa o canvas e a lista de primitivas. */ +/*-------------------------------------------------------------------------*/ +int fEditClear(void) +{ + /* mata a lista de primitivas */ + dellist(); + + /* torna inativo a opcap undo */ + IupSetAttribute(IupGetHandle("itEditUndo"), IUP_ACTIVE, IUP_NO); + + updatecanvas(); + + sprintf(ctgc.status_line, "cdClear()"); + set_status(); + + return IUP_DEFAULT; +} + +/*-------------------------------------------------------------------------*/ +/* Funcao associada ao ganho de focus do canvas. */ +/*-------------------------------------------------------------------------*/ +int fGetFocusCB(Ihandle *self) +{ + ignore(self); + /* avisa ao CD que o focus foi recebido, */ + /* para que ele restaure o contexto grafico */ + cdActivate(ctgc.iup_canvas); + return IUP_DEFAULT; +} + +/*-------------------------------------------------------------------------*/ +/* Funcao associada ao movimento do mouse. */ +/*-------------------------------------------------------------------------*/ +int fMotionCB(Ihandle *self, int x, int y, char *r) +{ + ignore(self); + ignore(r); + + cdActivate(ctgc.iup_canvas); + cdUpdateYAxis(&y); + mouse_pos(x, y); + + if (ctgc.following) { + switch(ctgc.cur_prim) { + case LINE: + line(MOVE, x, y); + follow(x, y); + break; + case RECT: + case BOX: + box(MOVE, x, y); + follow(x, y); + break; + case CLIP: + box(MOVE, x, y); + follow(x, y); + break; + case ARC: /* ARC e SECTOR... */ + case SECTOR: /* sao equivalentes */ + case CHORD: + arc(MOVE, x, y); + follow(x, y); + break; + case IMAGE: + box(MOVE, x, y); + follow(x, y); + break; + case RGB: + box(MOVE, x, y); + follow(x, y); + break; + case POLY: + polygon(MOVE, x, y); + break; + default: + break; + } + } + return IUP_DEFAULT; +} + +/*-------------------------------------------------------------------------*/ +/* Funcao associada ao botao do mouse. */ +/*-------------------------------------------------------------------------*/ +int fButtonCB(Ihandle *self, int b, int e, int x, int y, char *r) +{ + ignore(self); + ignore(r); + + cdActivate(ctgc.iup_canvas); + cdWriteMode(CD_NOT_XOR); + cdForeground(CD_BLACK); + cdLineStyle(CD_CONTINUOUS); + cdLineWidth(1); + cdClip(CD_CLIPOFF); + + cdUpdateYAxis(&y); + mouse_pos(x, y); + + if (b == IUP_BUTTON1) { + if (e) { + switch(ctgc.cur_prim) { + case LINE: + follow(x, y); + line(NEWPOINT, x, y); + line_pos.x1 = x; + line_pos.y1 = y; + ctgc.following = TRUE; + break; + case RECT: + case BOX: + follow(x, y); + box(NEWPOINT, x, y); + box_pos.x = x; + box_pos.y = y; + ctgc.following = TRUE; + break; + case CLIP: + box(NEWPOINT, x, y); + follow(x, y); + ctgc.following = TRUE; + break; + case ARC: /* ARC e SECTOR... */ + case SECTOR: /* sao equivalentes */ + case CHORD: + follow(x, y); + arc(CENTER, x, y); + arc_pos.xc = x; + arc_pos.yc = y; + ctgc.following = TRUE; + break; + case MARK: + case PIXEL: + case TEXT: + follow(x, y); + draw(); + break; + case IMAGE: + follow(x, y); + box(NEWPOINT, x, y); + ctgc.following = TRUE; + break; + case RGB: + follow(x, y); + box(NEWPOINT, x, y); + ctgc.following = TRUE; + break; + default: + break; + } + } + else { + switch(ctgc.cur_prim) { + case LINE: + if (ctgc.following) { + ctgc.following = FALSE; + line(CLOSE, x, y); + cdClip(ctgc.clip_mode); + draw(); + } + break; + case RECT: + case BOX: + if (ctgc.following) { + ctgc.following = FALSE; + box(CLOSE, x, y); + cdClip(ctgc.clip_mode); + draw(); + } + break; + case CLIP: + if (ctgc.following) { + ctgc.following = FALSE; + box(CLOSE, x, y); + fClipArea(); + } + break; + case ARC: /* ARC e SECTOR... */ + case SECTOR: /* ...sao equivalentes */ + case CHORD: + if (ctgc.following) { + ctgc.following = FALSE; + arc(CLOSE, x, y); + cdClip(ctgc.clip_mode); + draw(); + arc_pos.w = 0; + arc_pos.h = 0; + } + break; + case POLY: + cdActivate(ctgc.iup_canvas); + polygon(NEWPOINT, x, y); + newpolypoint(x, y); + sprintf(ctgc.status_line, "cdVertex( %d, %d)", x, y); + set_status(); + ctgc.following = TRUE; + break; + case IMAGE: + if (ctgc.following) { + ctgc.following = FALSE; + box(CLOSE, x, y); + cdClip(ctgc.clip_mode); + fImageGet(); + } + break; + case RGB: + if (ctgc.following) { + ctgc.following = FALSE; + box(CLOSE, x, y); + cdClip(ctgc.clip_mode); + fImageRGBGet(); + } + break; + default: + break; + } + } + } + else if (b == IUP_BUTTON3) { + if (e) { + switch (ctgc.cur_prim) { + case IMAGE: + cdClip(ctgc.clip_mode); + follow(x, y); + fImagePut(); + break; + case RGB: + cdClip(ctgc.clip_mode); + follow(x, y); + fImageRGBPut(); + break; + case CLIP: + fClipOff(); + break; + default: + break; + } + } + else { + switch (ctgc.cur_prim) { + case POLY: + cdActivate(ctgc.iup_canvas); + ctgc.following = FALSE; + polygon(CLOSE, x, y); + sprintf(ctgc.status_line, "cdEnd()"); + set_status(); + fDraw(); + break; + default: + break; + } + } + } + + return IUP_DEFAULT; +} + +/*-------------------------------------------------------------------------*/ +/* Funcao associada ao resize do canvas. */ +/*-------------------------------------------------------------------------*/ +int fResizeCB(Ihandle *self, int width, int height) +{ + ignore(self); + + /* atualiza o contexto do programa */ + ctgc.w = width; + ctgc.h = height; + + /* atualiza o tamanho do canvas em pixels no titulo */ + sprintf(ctgc.title, "CDTest 5.3 (%dx%d - %dbpp)", ctgc.w, ctgc.h, ctgc.bpp); + IupSetAttribute(IupGetHandle("dlgMain"), IUP_TITLE, ctgc.title); + + /* reconstroi o buffer off-screen, se necessario */ + if (ctgc.buffering) + cdActivate(ctgc.buffer_canvas); + else + cdActivate(ctgc.iup_canvas); + + return IUP_DEFAULT; +} + +void cdtest_loadled(void); + +/*-------------------------------------------------------------------------*/ +/* Rotina principal. */ +/*-------------------------------------------------------------------------*/ +void main(void) +{ + char *err = NULL; + + /* inicializa o IUP */ + IupOpen(); + + /* carrega o LED */ +#ifdef USE_LED + err = IupLoad("cdtest.led"); +#else + cdtest_loadled(); +#endif + + if (!err) + { + /* inicializa o CDTest */ + CDTestInit(); + } + else + { + /* imprime uma mensagem de erro */ + IupMessage("LED Error:", err); + IupClose(); + return; + } + + IupMainLoop(); + + CDTestClose(); + + IupClose(); +} + diff --git a/test/cdtest/cdtest.dsp b/test/cdtest/cdtest.dsp new file mode 100644 index 0000000..80c1421 --- /dev/null +++ b/test/cdtest/cdtest.dsp @@ -0,0 +1,107 @@ +# Microsoft Developer Studio Project File - Name="cdtest" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Application" 0x0101 + +CFG=cdtest - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "cdtest.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "cdtest.mak" CFG="cdtest - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "cdtest - Win32 Debug" (based on "Win32 (x86) Application") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +MTL=midl.exe +RSC=rc.exe + +!IF "$(CFG)" == "cdtest - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "..\bin" +# PROP BASE Intermediate_Dir "..\obj\cdtest" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "..\bin" +# PROP Intermediate_Dir "..\obj\cdtest" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /MTd /I "..\..\include" /I "..\..\..\iup\include" /Z7 /W3 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "CDTEST_WIN32" /D "_CRT_SECURE_NO_DEPRECATE" /D "_MBCS" /Fp"..\obj/cdtest.pch" /Fo"$(IntDir)/" /Fd"..\obj/cdtest" /GZ /c /GX +# ADD CPP /nologo /MTd /I "..\..\include" /I "..\..\..\iup\include" /Z7 /W3 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "CDTEST_WIN32" /D "_CRT_SECURE_NO_DEPRECATE" /D "_MBCS" /Fp"..\obj/cdtest.pch" /Fo"$(IntDir)/" /Fd"..\obj/cdtest" /GZ /c /GX +# ADD BASE MTL /nologo /D"_DEBUG" /mktyplib203 /tlb"..\bin\cdtest.tlb" /win32 +# ADD MTL /nologo /D"_DEBUG" /mktyplib203 /tlb"..\bin\cdtest.tlb" /win32 +# ADD BASE RSC /l 1046 /d "_DEBUG" +# ADD RSC /l 1046 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib comctl32.lib cd.lib cdiup.lib cdgdiplus.lib iup.lib gdiplus.lib cdpdflib.lib /nologo /out:"..\bin\cdtest.exe" /incremental:yes /libpath:"..\..\lib" /libpath:"..\..\..\iup\lib" /debug /pdb:"..\bin\cdtest.pdb" /pdbtype:sept /subsystem:windows /MACHINE:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib comctl32.lib cd.lib cdiup.lib cdgdiplus.lib iup.lib gdiplus.lib cdpdflib.lib /nologo /out:"..\bin\cdtest.exe" /incremental:yes /libpath:"..\..\lib" /libpath:"..\..\..\iup\lib" /debug /pdb:"..\bin\cdtest.pdb" /pdbtype:sept /subsystem:windows /MACHINE:I386 + +!ENDIF + +# Begin Target + +# Name "cdtest - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" +# Begin Source File + +SOURCE=Cdtest.c +# End Source File +# Begin Source File + +SOURCE=.\cdtest.led +# End Source File +# Begin Source File + +SOURCE=cdtest.rc +# End Source File +# Begin Source File + +SOURCE=cdtest_led.c +# End Source File +# Begin Source File + +SOURCE=Colorbar.c +# End Source File +# Begin Source File + +SOURCE=Drivers.c +# End Source File +# Begin Source File + +SOURCE=List.c +# End Source File +# Begin Source File + +SOURCE=Rubber.c +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl" +# Begin Source File + +SOURCE=Cdtest.h +# End Source File +# End Group +# End Target +# End Project + diff --git a/test/cdtest/cdtest.h b/test/cdtest/cdtest.h new file mode 100644 index 0000000..f670cc6 --- /dev/null +++ b/test/cdtest/cdtest.h @@ -0,0 +1,415 @@ +/*=========================================================================*/ +/* CDTEST.H - 05/12/95. */ +/*=========================================================================*/ +#ifndef CDTEST_H +#define CDTEST_H + +/*- Constantes: -----------------------------------------------------------*/ +#define MAXPOINTS 300 + +/*- Macros: ---------------------------------------------------------------*/ +#define isdigit(_) (((_)>='0') && ((_)<='9')) +#define ignore(_) (void)(_) + +/*-------------------------------------------------------------------------*/ +/* Tipos enumerados. */ +/*-------------------------------------------------------------------------*/ +typedef enum { + LINE, + RECT, + BOX, + ARC, + SECTOR, + CHORD, + PIXEL, + MARK, + TEXT, + POLY, + CLIP, + IMAGE, + RGB, + META +} tPrim; + +enum { + BACKGROUND, + FOREGROUND +}; + +enum { + NO_BUFFER, + IMAGE_BUFFER, + IMAGERGB_BUFFER +}; + +typedef enum { + NEWPOINT, + MOVE, + CLOSE, + CENTER, + REPAINT +} tRubber; + +#if ((!defined(FALSE))&&(!defined(TRUE))) +typedef enum { + FALSE, + TRUE +} tBoolean; +#else +#define tBoolean int +#endif + +/*-------------------------------------------------------------------------*/ +/* Definicao das estruturas de dados usadas. */ +/*-------------------------------------------------------------------------*/ +typedef struct { + int x, y; +} tPoint; + +typedef struct { + cdContext* ctx; + char *filename; +} tMeta; + +typedef struct { + int x1; + int y1; + int x2; + int y2; + int write_mode; + int line_style; + int line_width; + int line_cap; + int line_join; + int interior_style; + int back_opacity; + int hatch; + long foreground; + long background; +} tLB; /* cdLine ou cdBox ou cdRect */ + +typedef struct { + int xc; + int yc; + int w; + int h; + double angle1; + double angle2; + int write_mode; + int line_style; + int line_width; + int line_cap; + int line_join; + int interior_style; + int back_opacity; + int hatch; + long foreground; + long background; +} tAS; /* cdArc e cdSector e Chord */ + +typedef struct { + int x; + int y; + int write_mode; + long foreground; +} tPixel; /* cdPixel */ + +typedef struct { + int x; + int y; + int write_mode; + int mark_type; + int mark_size; + long foreground; +} tMark; /* cdMark */ + +typedef struct { + int x; + int y; + char *s; + int write_mode; + int font_size; + int font_style; + int font_typeface; + int back_opacity; + double text_orientation; + int text_alignment; + long foreground; + long background; +} tText; /* cdText */ + +typedef struct { + int poly_mode; + int write_mode; + int line_style; + int line_width; + int line_cap; + int line_join; + int fill_mode; + int back_opacity; + int interior_style; + int hatch; + long foreground; + long background; + int num_points; + tPoint *points; +} tPoly; /* cdBegin, cdVertex e cdEnd */ + +typedef struct tnode { + tPrim type; + union { + tLB lineboxpar; + tAS arcsectorpar; + tPoly polypar; + tPixel pixelpar; + tMark markpar; + tText textpar; + tMeta metapar; + } par; + struct tnode *next; +} tList; + +/*-------------------------------------------------------------------------*/ +/* Contexto do CD Test. */ +/*-------------------------------------------------------------------------*/ +typedef struct { + cdCanvas *iup_canvas; /* canvas do iup */ + int w, h; /* largura e altura do canvas */ + double res; + int bpp; + + cdCanvas *wd_canvas; /* canvas IUP p/ WD */ + int wd_dialog; /* se o dialogo do canvas WD estah na tela */ + + cdCanvas *pic_canvas; /* canvas IUP p/ Picture */ + cdCanvas *picture; /* Picture */ + int pic_dialog; /* se o dialogo do canvas Picture estah na tela */ + + cdCanvas *buffer_canvas; /* canvas para double-buffering */ + int buffering; + + Ihandle *dlg_cur_prim; /* handle do dialogo de primitiva ativo */ + Ihandle *bt_cur_prim; /* handle do botao da primitiva corente */ + + tPrim cur_prim; /* primitiva corrente */ + tBoolean following; /* flag de rubber-band */ + int dlg_x; + int dlg_y; + int visible; + + int write_mode; /* atributos do CD */ + int line_cap; + int line_join; + int line_style; + int line_width; + int fill_mode; + int font_typeface; + int font_style; + int font_size; + int text_alignment; + double text_orientation; + int back_opacity; + int mark_type; + int poly_mode; + long foreground; + long background; + int interior_style; + int hatch; + + unsigned char stipple[100];/* sample stipple */ + long pattern[100]; /* sample pattern */ + int dashes[4]; /* sample dash */ + + int clip_xmin; + int clip_xmax; + int clip_ymin; + int clip_ymax; + int clip_mode; + + unsigned char *red; /* imagem RGB */ + unsigned char *green; + unsigned char *blue; + int rgb_w, rgb_h; /* largura e altura da imagem RGB */ + + cdImage *test_image; /* imagem off-screen para testes */ + + int num_points; /* numero de pontos no poligono corrente */ + tPoint points[MAXPOINTS]; /* armazanamento temporario do poligono */ + + char status_line[256]; /* linha de status */ + char title[80]; /* barra de titulo do programa */ + + int x, y; /* posiccao do mouse no canvas */ + char mouse_pos[40]; /* posiccao do mouse em uma string */ + + int sim; /* flag para simulacao */ + int stretch_play; + + tList *head; /* lista de primitivas */ +} tCTC; /* CD Test Context */ + +extern tCTC ctgc; + +/* parametros geometricos das primitivas */ +typedef struct { + int x1, x2, y1, y2; +} tLinePos; + +typedef struct { + int xmin, xmax, ymin, ymax; + int x, y; +} tBoxPos; + +typedef struct { + int x, y; +} tPixelPos; + +typedef struct { + int x, y; + int size; +} tMarkPos; + +typedef struct { + int xc, yc; + int w, h; + double angle1, angle2; +} tArcPos; + +/*-------------------------------------------------------------------------*/ +/* Funccoes do modulo CDTEST.C. */ +/*-------------------------------------------------------------------------*/ +int fEditUndo(void); +int fEditClear(void); + +int fRepaint(void); +int fFileExit(void); +int fOK(void); +int fOpenLines(void); +int fClosedLines(void); +int fPolyBezier(void); +int fFill(void); +int fSolid(void); +int fHatch(void); +int fStipple(void); +int fPattern(void); + +int fPolyClip(void); +int fClipPoly(void); + +int fWDCanvas(void); +int fCloseWD(void); +int fWDRepaint(void); + +int fPICCanvas(void); +int fClosePIC(void); +int fPICRepaint(void); + +int fOpacity(Ihandle *, char *, int, int); +int fMarkType(Ihandle *, char *, int, int); + +int fNoBuffering(Ihandle *, int); +int fImageBuffer(Ihandle *, int); +int fRGBBuffer(Ihandle *, int); + +int fWriteMode(Ihandle *, char *, int, int); +int fLineStyle(Ihandle *, char *, int, int); +int fLineCap(Ihandle *, char *, int, int); +int fLineJoin(Ihandle *, char *, int, int); +int fFillMode(Ihandle *, char *, int, int); +int fFontStyle(Ihandle *, char *, int, int); +int fFontTypeFace(Ihandle *, char *, int, int); +int fTextAlignment(Ihandle *, char *, int, int); +int fHatchStyle(Ihandle *, char *, int, int); + +int fColor(Ihandle *); + +int fClip(Ihandle *); +int fClipArea(void); +int fClipOff(void); + +int fImage(Ihandle *); +int fImagePut(void); +int fImageGet(void); + +int fImageRGB(Ihandle *); +int fImageRGBPut(void); +int fImageRGBGet(void); + +int fLine(Ihandle *); +int fRect(Ihandle *); +int fBox(Ihandle *); +int fArc(Ihandle *); +int fSector(Ihandle *); +int fChord(Ihandle *); +int fPixel(Ihandle *); +int fMark(Ihandle *); +int fText(Ihandle *); +int fPoly(Ihandle *); + +int fShowDialog(void); + +int fStretchPlay(Ihandle*, int); +int fSimulate(Ihandle *, int); +int fOptionsHide(void); +int fOptions(void); +int fAttributes(void); +int fAttributesHide(void); +int fMsgHide(void); + +int fInteger(Ihandle *, int); +int fReal(Ihandle *, int); + +int fDraw(void); + +int fHelpAbout(void); +int fCloseAbout(void); + +int fMotionCB(Ihandle *, int, int, char *); +int fButtonCB(Ihandle *, int, int, int, int, char *); +int fResizeCB(Ihandle *, int, int); +int fGetFocusCB(Ihandle *); + +void set_status(void); +void mouse_pos(int, int); +void putlist(cdCanvas *target); +void draw(void); + +/*-------------------------------------------------------------------------*/ +/* Funccoes do modulo RUBBER.C. */ +/*-------------------------------------------------------------------------*/ +void follow(int, int); +void line(tRubber, int, int); +void box(tRubber, int, int); +void arc(tRubber, int, int); +void polygon(tRubber, int, int); + +/*-------------------------------------------------------------------------*/ +/* Funccoes do modulo LIST.C. */ +/*-------------------------------------------------------------------------*/ +int newpolypoint(int, int); +int newline(int, int, int, int); +int newrect(int, int, int, int); +int newbox(int, int, int, int); +int newarc(int, int, int, int, double, double); +int newsector(int, int, int, int, double, double); +int newchord(int, int, int, int, double, double); +int newpixel(int, int); +int newmark(int, int, int); +int newtext(int, int, char *); +int newmetafile(char *, cdContext* ctx); +int newpoly(void); +void dellist(void); +void dellast(void); + +/*-------------------------------------------------------------------------*/ +/* Funccoes do modulo DRIVERS.C. */ +/*-------------------------------------------------------------------------*/ +void DriversInit(void); + +/*-------------------------------------------------------------------------*/ +/* Funccoes do modulo COLORBAR.C. */ +/*-------------------------------------------------------------------------*/ +int ColorBarInit(Ihandle *parent, Ihandle *canvas, long *foreground, long *background); +void ColorBarClose(void); + +#endif diff --git a/test/cdtest/cdtest.ico b/test/cdtest/cdtest.ico Binary files differnew file mode 100644 index 0000000..ba4b8af --- /dev/null +++ b/test/cdtest/cdtest.ico diff --git a/test/cdtest/cdtest.led b/test/cdtest/cdtest.led new file mode 100644 index 0000000..1f2c412 --- /dev/null +++ b/test/cdtest/cdtest.led @@ -0,0 +1,1508 @@ +#===========================================================================# +# CDTEST.LED - 05/12/95 # +#===========================================================================# + +#---------------------------------------------------------------------------# +# Icones da Barra de Primitivas. # +#---------------------------------------------------------------------------# +imgLine = IMAGE +[ + 0 = "BGCOLOR", + 1 = "0 0 0" +] +(18, 18, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +) + +imgClip = IMAGE +[ + 0 = "BGCOLOR", + 1 = "0 0 0" +] +(18, 18, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0, + 0,0,0,1,1,0,0,0,0,0,0,0,0,0,1,0,0,0, + 0,0,0,1,1,0,0,0,0,0,0,0,0,1,0,0,0,0, + 0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0, + 0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0, + 0,0,0,1,1,0,0,0,0,0,1,1,1,0,0,0,0,0, + 0,0,0,1,1,0,0,0,0,1,0,1,1,0,0,0,0,0, + 0,0,0,1,1,0,0,0,1,0,0,1,1,0,0,0,0,0, + 0,0,0,1,1,0,0,1,0,0,0,1,1,0,0,0,0,0, + 0,0,0,1,1,0,1,0,0,0,0,1,1,0,0,0,0,0, + 0,0,0,1,1,1,0,0,0,0,0,1,1,0,0,0,0,0, + 0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0, + 0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +) + +imgImage = IMAGE +[ + 0 = "BGCOLOR", + 1 = "0 0 0", + 2 = "255 255 255", + 3 = "153 153 153" +] +(18, 18, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0, + 0,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0, + 0,0,0,0,1,1,2,2,2,2,2,1,1,0,0,0,0,0, + 0,0,0,0,1,1,2,2,2,2,2,1,1,0,0,0,0,0, + 0,0,0,1,1,2,1,1,2,1,1,2,1,1,0,0,0,0, + 0,0,0,1,2,2,1,2,2,2,1,2,2,1,0,0,0,0, + 0,0,0,1,2,2,2,2,1,2,2,2,2,1,0,0,0,0, + 0,0,0,1,1,2,2,2,1,3,2,2,1,1,0,0,0,0, + 0,0,0,0,1,2,2,2,2,1,2,2,1,3,0,0,0,0, + 0,0,0,0,1,2,2,2,1,1,2,2,1,3,0,0,0,0, + 0,0,0,0,1,2,2,2,2,2,2,2,1,3,0,0,0,0, + 0,0,0,0,0,1,2,1,3,1,2,1,3,0,0,0,0,0, + 0,0,0,0,0,1,2,2,1,3,2,1,3,0,0,0,0,0, + 0,0,0,0,0,0,1,2,2,2,1,3,0,0,0,0,0,0, + 0,0,0,0,0,0,0,1,1,1,3,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,1,2,1,3,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,1,2,1,3,0,0,0,0,0,0,0 +) + +imgImageRGB = IMAGE +[ + 0 = "BGCOLOR", + 1 = "255 0 0", + 2 = "0 255 0", + 3 = "0 0 255" +] +(18, 18, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,0,0,0, + 0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,0,0,0, + 0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,0,0,0, + 0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,0,0,0, + 0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,0,0,0, + 0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,0,0,0, + 0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,0,0,0, + 0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,0,0,0, + 0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,0,0,0, + 0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +) + +imgBox = IMAGE +[ + 0 = "BGCOLOR", + 1 = "0 0 0", + 2 = "255 255 255" +] +( + 18, 18, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0, + 0,0,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0, + 0,0,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0, + 0,0,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0, + 0,0,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0, + 0,0,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0, + 0,0,1,1,1,1,1,1,2,2,2,2,2,2,2,2,0,0, + 0,0,1,1,1,1,1,1,2,2,2,2,2,2,2,2,0,0, + 0,0,1,1,1,1,1,1,2,2,2,2,2,2,2,2,0,0, + 0,0,1,1,1,1,1,1,2,2,2,2,2,2,2,2,0,0, + 0,0,1,1,1,1,1,1,2,2,2,2,2,2,2,2,0,0, + 0,0,0,0,0,0,0,0,2,2,2,2,2,2,2,2,0,0, + 0,0,0,0,0,0,0,0,2,2,2,2,2,2,2,2,0,0, + 0,0,0,0,0,0,0,0,2,2,2,2,2,2,2,2,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +) + +imgRect = IMAGE +[ + 0 = "BGCOLOR", + 1 = "0 0 0", + 2 = "255 255 255" +] +( + 18, 18, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0, + 0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0, + 0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0, + 0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0, + 0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0, + 0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0, + 0,0,1,0,0,0,0,0,2,2,2,2,2,2,2,2,0,0, + 0,0,1,0,0,0,0,0,2,0,0,0,1,0,0,2,0,0, + 0,0,1,0,0,0,0,0,2,0,0,0,1,0,0,2,0,0, + 0,0,1,0,0,0,0,0,2,0,0,0,1,0,0,2,0,0, + 0,0,1,1,1,1,1,1,2,1,1,1,1,0,0,2,0,0, + 0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,2,0,0, + 0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,2,0,0, + 0,0,0,0,0,0,0,0,2,2,2,2,2,2,2,2,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +) + +imgSector = IMAGE +[ + 0 = "BGCOLOR", + 1 = "0 0 0" , + 2 = "255 255 255" +] +(18, 18, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0, + 0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0, + 0,0,0,1,1,1,1,1,1,1,1,1,1,2,0,0,0,0, + 0,0,1,1,1,1,1,1,1,1,1,1,2,2,2,0,0,0, + 0,0,1,1,1,1,1,1,1,1,1,2,2,2,2,0,0,0, + 0,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,0,0, + 0,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,0,0, + 0,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,0,0, + 0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0, + 0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0, + 0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0, + 0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0, + 0,0,0,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0, + 0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0, + 0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +) + +imgChord = IMAGE +[ + 0 = "BGCOLOR", + 1 = "0 0 0" , + 2 = "255 255 255" +] +(18, 18, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,1,1,2,2,2,0,0,0,0,0,0,0, + 0,0,0,0,1,1,1,1,1,2,2,2,2,0,0,0,0,0, + 0,0,0,1,1,1,1,1,1,1,2,2,2,2,0,0,0,0, + 0,0,1,1,1,1,1,1,1,1,1,2,2,2,2,0,0,0, + 0,0,1,1,1,1,1,1,1,1,1,1,2,2,2,0,0,0, + 0,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,0,0, + 0,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,0,0, + 0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,0,0, + 0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0, + 0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0, + 0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0, + 0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0, + 0,0,0,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0, + 0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0, + 0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +) + +imgArc = IMAGE +[ + 0 = "BGCOLOR", + 1 = "0 0 0", + 2 = "255 255 255" +] +(18, 18, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,2,2,2,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,2,0,0,0,2,0,0,0,0,0,0,0,0,0,0, + 0,0,2,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0, + 0,0,2,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0, + 0,0,2,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0, + 0,0,0,2,0,0,0,2,0,0,1,2,2,0,0,0,0,0, + 0,0,0,0,2,2,2,0,1,1,0,0,0,2,2,0,0,0, + 0,0,0,0,0,0,0,0,1,0,0,0,0,0,2,0,0,0, + 0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,2,0,0, + 0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,2,0,0, + 0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,2,0,0, + 0,0,0,0,0,0,0,0,1,0,0,0,0,0,2,0,0,0, + 0,0,0,0,0,0,0,0,1,1,0,0,0,2,2,0,0,0, + 0,0,0,0,0,0,0,0,0,0,1,1,2,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +) + +imgText = IMAGE +[ + 0 = "BGCOLOR", + 1 = "255 255 255", + 2 = "0 0 0" +] +(18, 18, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,2,2,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,2,2,2,2,0,0,0,0,0,0,0,0,0,0, + 0,0,0,2,2,0,0,2,2,0,0,1,1,0,0,0,0,0, + 0,0,2,2,0,0,0,0,2,2,0,0,1,0,0,0,0,0, + 0,0,2,2,0,0,0,0,2,2,0,0,1,0,0,0,0,0, + 0,0,2,2,0,0,0,0,2,2,0,0,1,1,1,1,0,0, + 0,0,2,2,2,2,2,2,2,2,0,0,1,0,0,0,1,0, + 0,0,2,2,0,0,0,0,2,2,0,0,1,0,0,0,1,0, + 0,0,2,2,0,0,0,0,2,2,0,0,1,0,0,0,1,0, + 0,0,2,2,0,0,0,0,2,2,0,0,1,0,0,0,1,0, + 0,0,2,2,0,0,0,0,2,2,0,1,1,1,1,1,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +) + +imgPoly = IMAGE +[ + 0 = "BGCOLOR", + 1 = "0 0 0" +] +(18, 18, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,1,1,1,0,0,0,0,1,1,1,0,0, + 0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0, + 0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0, + 0,0,1,1,1,1,0,0,0,0,1,1,1,0,0,0,0,0, + 0,0,0,1,1,1,0,0,0,0,1,1,0,0,0,0,0,0, + 0,0,0,0,1,1,1,0,0,1,1,1,0,0,0,0,0,0, + 0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0, + 0,0,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0, + 0,0,0,1,1,1,1,0,0,0,1,1,1,1,0,0,0,0, + 0,0,0,1,1,0,0,0,0,0,0,1,1,1,1,0,0,0, + 0,0,1,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0, + 0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +) + +imgMark = IMAGE +[ + 0 = "BGCOLOR", + 1 = "0 0 0" +] +(18, 18, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0, + 0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0, + 0,0,0,0,0,1,0,0,1,0,0,1,0,0,0,0,0,0, + 0,0,0,0,0,0,1,0,1,0,1,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0, + 0,0,0,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0, + 0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,1,0,1,0,1,0,0,0,0,0,0,0, + 0,0,0,0,0,1,0,0,1,0,0,1,0,0,0,0,0,0, + 0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0, + 0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +) + +imgPixel = IMAGE +[ + 0 = "BGCOLOR", + 1 = "0 0 0", + 2 = "255 255 255" +] +(18, 18, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,2,2,0,0,0,0,0,0,0,2,2,0,0,0,0, + 0,0,0,2,2,0,0,0,0,0,0,0,2,2,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,2,2,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,2,2,0,0,0,1,1,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +) + +#---------------------------------------------------------------------------# +# Descricao dos Menus. # +#---------------------------------------------------------------------------# +mnOpen = MENU +( + ITEM("MF...", cmdPlayMF), + itPlayCGM = ITEM[ACTIVE=NO]("CGM...", cmdPlayCGM), + itPlayEMF = ITEM[ACTIVE=NO]("EMF...", cmdPlayEMF), + itPlayWMF = ITEM[ACTIVE=NO]("WMF...", cmdPlayWMF) +) + +mnSave = MENU +( + ITEM("MF...", cmdMF), + itPDF = ITEM[ACTIVE=NO]("PDF...", cmdPDF), + itPS = ITEM[ACTIVE=NO]("PS...", cmdPS), + itEPS = ITEM[ACTIVE=NO]("EPS...", cmdEPS), + itCGMt = ITEM[ACTIVE=NO]("CGMt...", cmdCGMt), + itCGMb = ITEM[ACTIVE=NO]("CGMb...", cmdCGMb), + itDGN = ITEM[ACTIVE=NO]("DGN...", cmdDGN), + itDXF = ITEM[ACTIVE=NO]("DXF...", cmdDXF), + itEMF = ITEM[ACTIVE=NO]("EMF...", cmdEMF), + itWMF = ITEM[ACTIVE=NO]("WMF...", cmdWMF) +) + +mnFile = MENU +( + SUBMENU[KEY=K_O]("Open", mnOpen), + SEPARATOR(), + SUBMENU[KEY=K_S]("Save", mnSave), + SEPARATOR(), + itPrint = ITEM[KEY=K_P]("Print...", cmdPrint), + SEPARATOR(), + ITEM[KEY=K_x]("Exit", cmdFileExit) +) + +mnEdit = MENU +( + itEditUndo = ITEM("Undo", cmdEditUndo), + SEPARATOR(), + itClipBoard = ITEM[ACTIVE=NO]("Copy as EMF/WMF", cmdClipBoard), + itClipBoardBitmap = ITEM[ACTIVE=NO]("Copy as Bitmap", cmdClipBoardBitmap), + itClipBoardMetafile = ITEM[ACTIVE=NO]("Copy as CD Metafile", cmdClipBoardMetafile), + itClipBoardPaste = ITEM[ACTIVE=NO]("Paste", cmdClipBoardPaste), + SEPARATOR(), + ITEM("Clear", cmdEditClear), + SEPARATOR(), + ITEM("Options...", cmdOptions) +) + +mnPrimitives = MENU +( + ITEM("Pixel...", cmdPixel), + ITEM("Mark...", cmdMark), + ITEM("Line...", cmdLine), + ITEM("Polygon...", cmdPoly), + ITEM("Rect...", cmdRect), + ITEM("Box...", cmdBox), + ITEM("Arc...", cmdArc), + ITEM("Sector...", cmdSector), + ITEM("Chord...", cmdChord), + ITEM("Text...", cmdText), + SEPARATOR(), + ITEM("Server Image...", cmdImage), + ITEM("RGB Image...", cmdImageRGB) +) + +mnDraw = MENU[ISMENU=YES] +( + SUBMENU[KEY=K_P]("Primitives", mnPrimitives), + SEPARATOR(), + ITEM("Clipping...", cmdClip), + ITEM("Attributes...", cmdAttributes), + SEPARATOR(), + itWDCanvas = ITEM("Show WD Canvas", cmdWDCanvas), + itPICCanvas = ITEM("Show Picture Canvas", cmdPICCanvas) +) + +mnHelp = MENU +( + ITEM("About...", cmdHelpAbout) +) + +mnMain = MENU +( + SUBMENU[KEY=K_mF]("File", mnFile), + SUBMENU[KEY=K_mE]("Edit", mnEdit), + SUBMENU[KEY=K_mD]("Draw", mnDraw), + SUBMENU[KEY=K_mH]("Help", mnHelp) +) + +#===========================================================================# +# Barras de Ferramentas. # +#===========================================================================# + +#---------------------------------------------------------------------------# +# Barra de status. # +#---------------------------------------------------------------------------# +lbStatusLine = LABEL[EXPAND=HORIZONTAL]("Esta eh a barra de status do CDTest.") + +#---------------------------------------------------------------------------# +# Barra de Primitivas. # +#---------------------------------------------------------------------------# + +btLine = BUTTON[IMAGE=imgLine, TIP="Line"]("",cmdLine) +btBox = BUTTON[IMAGE=imgBox, TIP="Box"]("",cmdBox) +btRect = BUTTON[IMAGE=imgRect, TIP="Rect"]("",cmdRect) +btArc = BUTTON[IMAGE=imgArc, TIP="Arc"]("", cmdArc) +btSector = BUTTON[IMAGE=imgSector, TIP="Sector"]("", cmdSector) +btChord = BUTTON[IMAGE=imgChord, TIP="Chord"]("", cmdChord) +btPixel = BUTTON[IMAGE=imgPixel, TIP="Pixel"]("", cmdPixel) +btMark = BUTTON[IMAGE=imgMark, TIP="Mark"]("", cmdMark) +btText = BUTTON[IMAGE=imgText, TIP="Text"]("", cmdText) +btPoly = BUTTON[IMAGE=imgPoly, TIP="Polygon"]("", cmdPoly) + +btImageRGB = BUTTON[IMAGE=imgImageRGB, TIP="RGB Image"]("", cmdImageRGB) +btImage = BUTTON[IMAGE=imgImage, TIP="Server Image"]("", cmdImage) +btClip = BUTTON[IMAGE=imgClip, TIP="Clipping Area"]("", cmdClip) + +btCurPrim = BUTTON[IMAGE=imgLine, TIP="Show primitive dialog"]("", cmdShowDialog) + +lbMousePos = LABEL[SIZE=90]("( , )") + +PrimBar = VBOX[GAP=2] +( + btCurPrim, + FILL[SIZE=20](), + btPixel, + btMark, + btLine, + btPoly, + btRect, + btBox, + btArc, + btSector, + btChord, + btText, + FILL[SIZE=5](), + btImage, + btImageRGB, + FILL[SIZE=5](), + btClip, + FILL[SIZE=30]() +) + +#---------------------------------------------------------------------------# +# Barra de Cores. # +#---------------------------------------------------------------------------# +cnvColorBar = CANVAS +[ + BUTTON_CB = cmdColorBarButtonCB, + RESIZE_CB = cmdColorBarResizeCB, + SIZE = 220x12, + BORDER = NO, + EXPAND = NO +] +(cmdColorBarRepaint) + +#===========================================================================# +# Dialogo Principal # +#===========================================================================# + +#---------------------------------------------------------------------------# +# Canvas para visualizacao das primitivas. # +#---------------------------------------------------------------------------# +cnvMain = CANVAS +[ + MOTION_CB=cmdMotionCB, + BUTTON_CB=cmdButtonCB, + RESIZE_CB=cmdResizeCB +] +(cmdRepaint) + +#---------------------------------------------------------------------------# +# Area de trabalho. # +#---------------------------------------------------------------------------# +DeskTop = VBOX +( + FILL[SIZE=5](), + HBOX + ( + FILL[SIZE=5](), + PrimBar, + FILL[SIZE=2](), + VBOX + ( + FILL[SIZE=2](), + lbMousePos, + FILL[SIZE=5](), + cnvMain, + FILL[SIZE=2](), + cnvColorBar, + FILL[SIZE=5](), + lbStatusLine + ), + FILL[SIZE=5]() + ), + FILL[SIZE=5]() +) + +#---------------------------------------------------------------------------# +# Dialogo principal. # +#---------------------------------------------------------------------------# +dlgMain = DIALOG +[ + TITLE = "CD Test 5.3", + MENU = mnMain, + ICON = "CdTestIcon", + K_cZ = cmdEditUndo, + GETFOCUS_CB = cmdGetFocusCB, + KILLFOCUS_CB = cmdKillFocusCB, + CLOSE_CB = cmdFileExit +] +(DeskTop) + +#===========================================================================# +# Especificacao dos dialogos auxiliares. # +#===========================================================================# + +#---------------------------------------------------------------------------# +# Dialogo com o canvas para exibiccao de primitivas WD. # +#---------------------------------------------------------------------------# +cnvWDCanvas = CANVAS[BORDER=NO](cmdWDRepaint) +dlgWDCanvas = DIALOG +[ + TITLE = "WD Canvas", + CLISE_CB = cmdCloseWD, + SIZE = 200x200, + PARENTDIALOG="dlgMain", + GAP=5x5 +] +(cnvWDCanvas) + +cnvPICCanvas = CANVAS[BORDER=NO](cmdPICRepaint) +dlgPICCanvas = DIALOG +[ + TITLE = "PIC Canvas", + CLISE_CB = cmdClosePIC, + SIZE = 200x200, + PARENTDIALOG="dlgMain", + GAP=5x5 +] +(cnvPICCanvas) + +#---------------------------------------------------------------------------# +# Dialogo Options # +#---------------------------------------------------------------------------# +btOptionsHide = BUTTON[SIZE=30]("Hide", cmdOptionsHide) + +tgSimulate = TOGGLE[VALUE=OFF, SIZE=55]("Simulate", cmdSimulate) +tgStretchPlay = TOGGLE[VALUE=OFF, SIZE=70]("Stretch Play", cmdStretchPlay) + +tgNoBuffering = TOGGLE[VALUE=ON]("No buffering", cmdNoBuffering) +tgImageBuffer = TOGGLE("CD_DBUFFER", cmdImageBuffer) +tgRGBBuffer = TOGGLE("CD_DBUFFERRGB", cmdRGBBuffer) + +rdBuffering = RADIO +( + VBOX + ( + tgNoBuffering, + tgImageBuffer, + tgRGBBuffer + ) +) + +OptionsDesktop = VBOX +( + VBOX[GAP=2] + ( + FRAME[TITLE="Buffering:", MARGIN=5x5, SIZE=80] + ( + rdBuffering + ), + FILL[SIZE=10](), + tgSimulate, + tgStretchPlay, + FILL[SIZE=10](), + btOptionsHide, + FILL[SIZE=2]() + ) +) + +dlgOptions = DIALOG +[ + TITLE="Options", + PARENTDIALOG="dlgMain", + MAXBOX=NO, + MINBOX=NO, + RESIZE=NO, + MARGIN=5x2 +] +(OptionsDesktop) + +#---------------------------------------------------------------------------# +# Dialogo Attributes # +#---------------------------------------------------------------------------# +lstTextAlignment = LIST +[ + 1="CD_NORTH", + 2="CD_SOUTH", + 3="CD_EAST", + 4="CD_WEST", + 5="CD_NORTH_EAST", + 6="CD_NORTH_WEST", + 7="CD_SOUTH_EAST", + 8="CD_SOUTH_WEST", + 9="CD_CENTER", + 10="CD_BASE_LEFT", + 11="CD_BASE_CENTER", + 12="CD_BASE_RIGHT", + DROPDOWN=YES, + VALUE=10, + SIZE=89 +] +(cmdTextAlignment) + +txtMarkSize = TEXT[NC=4, SIZE=20x12, VALUE="10"](cmdInteger) + +lstMarkType = LIST +[ + 1="CD_PLUS", + 2="CD_STAR", + 3="CD_CIRCLE", + 4="CD_X", + 5="CD_BOX", + 6="CD_DIAMOND", + 7="CD_HOLLOW_CIRCLE", + 8="CD_HOLLOW_BOX", + 9="CD_HOLLOW_DIAMOND", + DROPDOWN=YES, + VALUE=2, + SIZE=80 +](cmdMarkType) + +lstWriteMode = LIST +[ + 1="CD_REPLACE", + 2="CD_XOR", + 3="CD_NOT_XOR", + VALUE=1, + DROPDOWN=YES, + SIZE=80 +] +(cmdWriteMode) + +lstFontTypeFace = LIST +[ + 1="CD_SYSTEM", + 2="CD_COURIER", + 3="CD_TIMES_ROMAN", + 4="CD_HELVETICA", + VALUE=1, + DROPDOWN=YES, + SIZE=80 +] +(cmdFontTypeFace) + +lstLineCap = LIST +[ + 1="CD_CAPFLAT", + 2="CD_CAPSQUARE", + 3="CD_CAPROUND", + VALUE=1, + DROPDOWN=YES, + SIZE=80 +] +(cmdLineCap) + +lstLineJoin = LIST +[ + 1="CD_BEVEL", + 2="CD_MITER", + 3="CD_ROUND", + VALUE=1, + DROPDOWN=YES, + SIZE=80 +] +(cmdLineJoin) + +lstFillMode = LIST +[ + 1="CD_EVENODD", + 2="CD_WINDING", + VALUE=1, + DROPDOWN=YES, + SIZE=80 +] +(cmdFillMode) + +lstFontStyle = LIST +[ + 1="CD_PLAIN", + 2="CD_BOLD", + 3="CD_ITALIC", + 4="CD_BOLD_ITALIC", + VALUE=1, + DROPDOWN=YES, + SIZE=80 +] +(cmdFontStyle) + +txtLineWidth = TEXT[SIZE=30, NC=3, VALUE="1"](cmdInteger) +txtFontSize = TEXT[SIZE=30, NC=3, VALUE="12"](cmdInteger) +txtTextOrientation = TEXT[SIZE=30, NC=3, VALUE="0"](cmdInteger) + +lstLineStyle = LIST +[ + 1="CD_CONTINUOUS", + 2="CD_DASHED", + 3="CD_DOTTED", + 4="CD_DASH_DOT", + 5="CD_DASH_DOT_DOT", + 6="CD_CUSTOM", + VALUE=1, + DROPDOWN=YES, + SIZE=80 +] +(cmdLineStyle) + +tgSolid = TOGGLE[VALUE=ON] ("CD_SOLID", cmdSolid) +tgHatch = TOGGLE("CD_HATCH", cmdHatch) +tgStipple = TOGGLE("CD_STIPPLE", cmdStipple) +tgPattern = TOGGLE("CD_PATTERN", cmdPattern) + +lstOpacity = LIST +[ + 1="CD_OPAQUE", + 2="CD_TRANSPARENT", + VALUE=2, + DROPDOWN=YES, + SIZE=80, + ACTIVE=YES +] +(cmdOpacity) + +lstHatchStyle = LIST +[ + 1="CD_HORIZONTAL", + 2="CD_VERTICAL", + 3="CD_FDIAGONAL", + 4="CD_BDIAGONAL", + 5="CD_CROSS", + 6="CD_DIAGCROSS", + VALUE=1, + DROPDOWN=YES, + SIZE=80, + ACTIVE=YES +] +(cmdHatchStyle) + +btAttributesHide = BUTTON[SIZE=30]("Hide", cmdAttributesHide) + +rdInteriorStyle = RADIO +( + VBOX + ( + tgSolid, + tgHatch, + tgStipple, + tgPattern + ) +) + +AttributesDesktop = VBOX +( + HBOX + ( + VBOX[GAP=2] + ( + LABEL("Write Mode:"), + lstWriteMode, + FILL[SIZE=4](), + FRAME[TITLE="Fill Attributes", MARGIN=5x5] + ( + VBOX + ( + LABEL("Back Opacity:"), + lstOpacity, + FILL[SIZE=2](), + LABEL("Fill Mode:"), + lstFillMode, + FILL[SIZE=2](), + FRAME[TITLE="Interior Style:", MARGIN=5x5, SIZE=80] + ( + rdInteriorStyle + ), + FILL[SIZE=2](), + LABEL("Hatch Style:"), + lstHatchStyle + ) + ), + FILL[SIZE=10](), + FRAME[TITLE="Mark Attributes", MARGIN=5x5] + ( + VBOX + ( + LABEL("Mark Type:"), + lstMarkType, + FILL[SIZE=2](), + LABEL("Mark Size:"), + txtMarkSize + ) + ), + FILL[SIZE=10](), + btAttributesHide + ), + VBOX[GAP=2] + ( + FRAME[TITLE="Text Attributes", MARGIN=5x5] + ( + VBOX + ( + LABEL("Font Typeface:"), + lstFontTypeFace, + FILL[SIZE=2](), + LABEL("Font Style:"), + lstFontStyle, + FILL[SIZE=2](), + LABEL("Font Size:"), + txtFontSize, + FILL[SIZE=2](), + LABEL[SIZE=x9]("Text Alignment:"), + lstTextAlignment, + FILL[SIZE=2](), + LABEL[SIZE=x9]("Text Orientation:"), + txtTextOrientation + ) + ), + FILL[SIZE=10](), + FRAME[TITLE="Line Attributes", MARGIN=5x5] + ( + VBOX + ( + LABEL("Line Style:"), + lstLineStyle, + FILL[SIZE=2](), + LABEL("Line Width:"), + txtLineWidth, + FILL[SIZE=2](), + LABEL("Line Cap:"), + lstLineCap, + FILL[SIZE=2](), + LABEL("Line Join:"), + lstLineJoin + ) + ) + ) + ) +) + +dlgAttributes = DIALOG +[ + TITLE="Attributes", + PARENTDIALOG="dlgMain", + MAXBOX=NO, + MINBOX=NO, + RESIZE=NO, + CLOSE_CB=cmdAttributesHide, + MARGIN=5x2 +] +(AttributesDesktop) + +#---------------------------------------------------------------------------# +# Dialogo Line ou Box ou Rect. # +#---------------------------------------------------------------------------# +txtLBX1 = TEXT[NC=8, SIZE=30x12, VALUE="0"](cmdInteger) +txtLBX2 = TEXT[NC=8, SIZE=30x12, VALUE="0"](cmdInteger) +txtLBY1 = TEXT[NC=8, SIZE=30x12, VALUE="0"](cmdInteger) +txtLBY2 = TEXT[NC=8, SIZE=30x12, VALUE="0"](cmdInteger) + +btLBDraw = BUTTON[SIZE=30]("Draw", cmdDraw) +btLBHide = BUTTON[SIZE=30]("Hide", cmdMsgHide) + +LBData = VBOX +( + HBOX[ALIGNMENT=ACENTER] + ( + LABEL[SIZE=15x9]("X1:"), + txtLBX1, + FILL[SIZE=5](), + LABEL[SIZE=15x9]("Y1:"), + txtLBY1 + ), + HBOX[ALIGNMENT=ACENTER] + ( + LABEL[SIZE=15x9]("X2:"), + txtLBX2, + FILL[SIZE=5](), + LABEL[SIZE=15x9]("Y2:"), + txtLBY2 + ) +) + +LBDeskTop = VBOX +( + HBOX + ( + FILL(), + LBData, + FILL() + ), + HBOX + ( + FILL(), + btLBDraw, + FILL[SIZE=5](), + btLBHide, + FILL() + ) +) + +dlgLB = DIALOG +[ + TITLE="Line Parameters", + PARENTDIALOG="dlgMain", + MAXBOX=NO, + MINBOX=NO, + RESIZE=NO, + CLOSE_CB=cmdMsgHide, + MARGIN=5x5 +] +(LBDeskTop) + +#---------------------------------------------------------------------------# +# Dialogo Arc ou Sector. # +#---------------------------------------------------------------------------# +txtASXC = TEXT[NC=4, SIZE=30x12, VALUE="0"](cmdInteger) +txtASYC = TEXT[NC=4, SIZE=30x12, VALUE="0"](cmdInteger) +txtASW = TEXT[NC=4, SIZE=30x12, VALUE="0"](cmdInteger) +txtASH = TEXT[NC=4, SIZE=30x12, VALUE="0"](cmdInteger) +txtASAngle1 = TEXT[NC=10, SIZE=30x12, VALUE="0"](cmdReal) +txtASAngle2 = TEXT[NC=10, SIZE=30x12, VALUE="360"](cmdReal) + +btASDraw = BUTTON[SIZE=30]("Draw", cmdDraw) +btASHide = BUTTON[SIZE=30]("Hide", cmdMsgHide) + +ASData = VBOX +( + HBOX[ALIGNMENT=ACENTER] + ( + LABEL[SIZE=30x9]("Xc:"), + txtASXC, + FILL[SIZE=5](), + LABEL[SIZE=30x9]("Yc:"), + txtASYC + ), + HBOX[ALIGNMENT=ACENTER] + ( + LABEL[SIZE=30x9]("W:"), + txtASW, + FILL[SIZE=5](), + LABEL[SIZE=30x9]("H:"), + txtASH + ), + HBOX[ALIGNMENT=ACENTER] + ( + LABEL[SIZE=30x9]("Angle1:"), + txtASAngle1, + FILL[SIZE=5](), + LABEL[SIZE=30x9]("Angle2:"), + txtASAngle2 + ) +) + +ASDeskTop = VBOX +( + HBOX + ( + FILL(), + ASData, + FILL() + ), + HBOX + ( + FILL(), + btASDraw, + FILL[SIZE=5](), + btASHide, + FILL() + ) +) + +dlgAS = DIALOG +[ + PARENTDIALOG="dlgMain", + TITLE="Arc Parameters", + MAXBOX=NO, + MINBOX=NO, + RESIZE=NO, + CLOSE_CB=cmdMsgHide, + MARGIN=5x5 +] +(ASDeskTop) + +#---------------------------------------------------------------------------# +# Dialogo Pixel. # +#---------------------------------------------------------------------------# +txtPixelX = TEXT[NC=5, SIZE=30x12, VALUE="0"](cmdInteger) +txtPixelY = TEXT[NC=5, SIZE=30x12, VALUE="0"](cmdInteger) + +btPixelDraw = BUTTON[SIZE=30]("Draw", cmdDraw) +btPixelHide = BUTTON[SIZE=30]("Hide", cmdMsgHide) + +PixelData = VBOX +( + HBOX[ALIGNMENT=ACENTER] + ( + LABEL[SIZE=10x9]("X:"), + txtPixelX, + FILL[SIZE=5](), + LABEL[SIZE=10x9]("Y:"), + txtPixelY + ) +) + +PixelDeskTop = VBOX +( + HBOX + ( + FILL(), + PixelData, + FILL() + ), + HBOX + ( + FILL(), + btPixelDraw, + FILL[SIZE=5](), + btPixelHide, + FILL() + ) +) + +dlgPixel = DIALOG +[ + PARENTDIALOG="dlgMain", + TITLE="Pixel Parameters", + MAXBOX=NO, + MINBOX=NO, + RESIZE=NO, + CLOSE_CB=cmdMsgHide, + MARGIN=5x5 +] +(PixelDeskTop) + +#---------------------------------------------------------------------------# +# Dialogo Mark. # +#---------------------------------------------------------------------------# +txtMarkX = TEXT[NC=5, SIZE=30x12, VALUE="0"](cmdInteger) +txtMarkY = TEXT[NC=5, SIZE=30x12, VALUE="0"](cmdInteger) + +btMarkDraw = BUTTON[SIZE=30]("Draw", cmdDraw) +btMarkHide = BUTTON[SIZE=30]("Hide", cmdMsgHide) + +MarkData = VBOX +( + HBOX[ALIGNMENT=ACENTER] + ( + FILL(), + LABEL[SIZE=10x9]("X:"), + txtMarkX, + FILL[SIZE=5](), + LABEL[SIZE=10x9]("Y:"), + txtMarkY, + FILL() + ) +) + +MarkDeskTop = VBOX +( + HBOX + ( + FILL(), + MarkData, + FILL() + ), + HBOX + ( + FILL(), + btMarkDraw, + FILL[SIZE=5](), + btMarkHide, + FILL() + ) +) + +dlgMark = DIALOG +[ + PARENTDIALOG="dlgMain", + TITLE="Mark Parameters", + MAXBOX=NO, + MINBOX=NO, + RESIZE=NO, + CLOSE_CB=cmdMsgHide, + MARGIN=5x5 +] +(MarkDeskTop) + +#---------------------------------------------------------------------------# +# Dialogo Text. # +#---------------------------------------------------------------------------# +txtTextX = TEXT[NC=5, SIZE=30x12, VALUE="0"](cmdInteger) +txtTextY = TEXT[NC=5, SIZE=30x12, VALUE="0"](cmdInteger) +txtTextS = TEXT[NC=100, SIZE=89x12, VALUE="Text"](cmdString) + +btTextDraw = BUTTON[SIZE=30]("Draw", cmdDraw) +btTextHide = BUTTON[SIZE=30]("Hide", cmdMsgHide) + +TextData = VBOX +( + HBOX[ALIGNMENT=ACENTER] + ( + LABEL[SIZE=10x9]("X:"), + txtTextX, + FILL[SIZE=5](), + LABEL[SIZE=10x9]("Y:"), + txtTextY + ), + HBOX + ( + VBOX + ( + LABEL[SIZE=25x9]("Text:"), + txtTextS + ) + ) +) + +TextDeskTop = VBOX +( + HBOX + ( + FILL(), + TextData, + FILL() + ), + HBOX + ( + FILL(), + btTextDraw, + FILL[SIZE=5](), + btTextHide, + FILL() + ) +) + +dlgText = DIALOG +[ + PARENTDIALOG="dlgMain", + TITLE="Text Parameters", + MAXBOX=NO, + MINBOX=NO, + CLOSE_CB=cmdMsgHide, + RESIZE=NO, + MARGIN=5x5 +] +(TextDeskTop) + +#---------------------------------------------------------------------------# +# Dialogo Poly. # +#---------------------------------------------------------------------------# +tgOpenLines = TOGGLE[VALUE=ON]("CD_OPEN_LINES", cmdOpenLines) +tgClosedLines = TOGGLE("CD_CLOSED_LINES", cmdClosedLines) +tgFilled = TOGGLE("CD_FILL", cmdFill) +tgClip = TOGGLE("CD_CLIP", cmdPolyClip) +tgBezier = TOGGLE("CD_BEZIER", cmdPolyBezier) + +btPolyHide = BUTTON[SIZE=30]("Hide", cmdMsgHide) + +rdMode = RADIO +( + VBOX + ( + tgOpenLines, + tgClosedLines, + tgFilled, + tgClip, + tgBezier + ) +) + +PolyDesktop = VBOX +( + FILL[SIZE=5](), + HBOX + ( + FILL(), + FRAME[TITLE="Polygon Mode:"] + ( + HBOX + ( + FILL[SIZE=5](), + rdMode + ) + ), + FILL() + ), + FILL[SIZE=10](), + HBOX + ( + FILL(), + btPolyHide, + FILL() + ), + FILL[SIZE=5]() +) + +dlgPoly = DIALOG +[ + PARENTDIALOG="dlgMain", + TITLE="Polygon Parameters", + MAXBOX=NO, + MINBOX=NO, + RESIZE=NO, + CLOSE_CB=cmdMsgHide +] +(PolyDesktop) + +#---------------------------------------------------------------------------# +# Dialogo Clip. # +#---------------------------------------------------------------------------# +txtClipXmin = TEXT[NC=5, SIZE=30x12, VALUE="0"](cmdInteger) +txtClipXmax = TEXT[NC=5, SIZE=30x12, VALUE="0"](cmdInteger) +txtClipYmin = TEXT[NC=5, SIZE=30x12, VALUE="0"](cmdInteger) +txtClipYmax = TEXT[NC=5, SIZE=30x12, VALUE="0"](cmdInteger) + +btClipOff = BUTTON[SIZE=30]("Off", cmdClipOff) +btClipArea = BUTTON[SIZE=30]("Area", cmdClipArea) +btClipPoly = BUTTON[SIZE=50]("Polygon", cmdClipPoly) +btClipHide = BUTTON[SIZE=30]("Hide", cmdMsgHide) + +ClipData = VBOX +( + HBOX[ALIGNMENT=ACENTER] + ( + LABEL[SIZE=25x9]("Xmin:"), + txtClipXmin, + FILL[SIZE=5](), + LABEL[SIZE=25x9]("Ymin:"), + txtClipYmin + ), + HBOX[ALIGNMENT=ACENTER] + ( + LABEL[SIZE=25x9]("Xmax:"), + txtClipXmax, + FILL[SIZE=5](), + LABEL[SIZE=25x9]("Ymax:"), + txtClipYmax + ) +) + +ClipDeskTop = VBOX +( + HBOX + ( + FILL(), + ClipData, + FILL() + ), + HBOX + ( + FILL(), + btClipOff, + FILL[SIZE=5](), + btClipArea, + FILL[SIZE=5](), + btClipPoly, + FILL[SIZE=5](), + btClipHide, + FILL() + ) +) + +dlgClip = DIALOG +[ + PARENTDIALOG="dlgMain", + TITLE="Clipping", + MAXBOX=NO, + CLOSE_CB=cmdMsgHide, + MINBOX=NO, + RESIZE=NO, + MARGIN=5x5 +] +(ClipDeskTop) + +#---------------------------------------------------------------------------# +# Dialogo Image. # +#---------------------------------------------------------------------------# +txtImageX = TEXT[NC=5, SIZE=30x12, VALUE="0"](cmdInteger) +txtImageY = TEXT[NC=5, SIZE=30x12, VALUE="0"](cmdInteger) +txtImageW = TEXT[NC=5, SIZE=30x12, VALUE="0"](cmdInteger) +txtImageH = TEXT[NC=5, SIZE=30x12, VALUE="0"](cmdInteger) + +btImagePut = BUTTON[SIZE=30]("Put", cmdImagePut) +btImageGet = BUTTON[SIZE=30]("Get", cmdImageGet) +btImageHide = BUTTON[SIZE=30]("Hide", cmdMsgHide) + +ImageData = VBOX +( + HBOX[ALIGNMENT=ACENTER] + ( + LABEL[SIZE=30x9]("X:"), + txtImageX, + FILL[SIZE=5](), + LABEL[SIZE=30x9]("Y:"), + txtImageY + ), + HBOX[ALIGNMENT=ACENTER] + ( + LABEL[SIZE=30x9]("Width:"), + txtImageW, + FILL[SIZE=5](), + LABEL[SIZE=30x9]("Height:"), + txtImageH + ) +) + +ImageDeskTop = VBOX +( + HBOX + ( + FILL(), + ImageData, + FILL() + ), + HBOX + ( + FILL(), + btImageGet, + FILL[SIZE=5](), + btImagePut, + FILL[SIZE=5](), + btImageHide, + FILL() + ) +) + +dlgImage = DIALOG +[ + PARENTDIALOG="dlgMain", + TITLE="Server Image", + MAXBOX=NO, + MINBOX=NO, + CLOSE_CB=cmdMsgHide, + RESIZE=NO, + MARGIN=5x5 +] +(ImageDeskTop) + +#---------------------------------------------------------------------------# +# Dialogo ImageRGB. # +#---------------------------------------------------------------------------# +txtImageRGBX = TEXT[NC=5, SIZE=30x12, VALUE="0"](cmdInteger) +txtImageRGBY = TEXT[NC=5, SIZE=30x12, VALUE="0"](cmdInteger) +txtImageRGBW = TEXT[NC=5, SIZE=30x12, VALUE="0"](cmdInteger) +txtImageRGBH = TEXT[NC=5, SIZE=30x12, VALUE="0"](cmdInteger) + +btImageRGBPut = BUTTON[SIZE=30]("Put", cmdImageRGBPut) +btImageRGBGet = BUTTON[SIZE=30]("Get", cmdImageRGBGet) +btImageRGBHide = BUTTON[SIZE=30]("Hide", cmdMsgHide) + +ImageRGBData = VBOX +( + HBOX[ALIGNMENT=ACENTER] + ( + LABEL[SIZE=30x9]("X:"), + txtImageRGBX, + FILL[SIZE=5](), + LABEL[SIZE=30x9]("Y:"), + txtImageRGBY + ), + HBOX[ALIGNMENT=ACENTER] + ( + LABEL[SIZE=30x9]("Width:"), + txtImageRGBW, + FILL[SIZE=5](), + LABEL[SIZE=30x9]("Height:"), + txtImageRGBH + ) +) + +ImageRGBDeskTop = VBOX +( + HBOX + ( + FILL(), + ImageRGBData, + FILL() + ), + HBOX + ( + FILL(), + btImageRGBGet, + FILL[SIZE=5](), + btImageRGBPut, + FILL[SIZE=5](), + btImageRGBHide, + FILL() + ) +) + +dlgImageRGB = DIALOG +[ + PARENTDIALOG="dlgMain", + TITLE="RGB Image", + MAXBOX=NO, + MINBOX=NO, + CLOSE_CB=cmdMsgHide, + RESIZE=NO, + MARGIN=5x5 +] +(ImageRGBDeskTop) + +#---------------------------------------------------------------------------# +# Dialogo About. # +#---------------------------------------------------------------------------# + +btCDTest = BUTTON("Close", cmdCloseAbout) + +AboutDeskTop = HBOX[MARGIN=5x5, GAP=2] +( + FILL(), + VBOX[ALIGNMENT=ACENTER]( + LABEL("CD Test 5.3"), + FILL[SIZE=5](), + LABEL("Antonio Scuri"), + LABEL("Diego Nehab"), + FILL[SIZE=5](), + LABEL("Tecgraf/PUC-Rio"), + FILL[SIZE=5](), + LABEL("CD Library Version"), + lblVersion = LABEL(""), + btCDTest + ), + FILL() +) + +dlgHelpAbout = DIALOG +[ + PARENTDIALOG="dlgMain", + TITLE="About", + MAXBOX=NO, + MINBOX=NO, + RESIZE=NO +] +(AboutDeskTop) + + +
\ No newline at end of file diff --git a/test/cdtest/cdtest.rc b/test/cdtest/cdtest.rc new file mode 100644 index 0000000..c7e3ebc --- /dev/null +++ b/test/cdtest/cdtest.rc @@ -0,0 +1 @@ +CdTestIcon ICON "cdtest.ico" diff --git a/test/cdtest/cdtest.sln b/test/cdtest/cdtest.sln new file mode 100644 index 0000000..fb19d0c --- /dev/null +++ b/test/cdtest/cdtest.sln @@ -0,0 +1,16 @@ +Microsoft Visual Studio Solution File, Format Version 9.00 +# Visual Studio 2005 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "cdtest", "cdtest.vcproj", "{A7E49FB8-700A-45EC-9174-FB1C2C7E83C9}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {A7E49FB8-700A-45EC-9174-FB1C2C7E83C9}.Debug|Win32.ActiveCfg = Debug|Win32 + {A7E49FB8-700A-45EC-9174-FB1C2C7E83C9}.Debug|Win32.Build.0 = Debug|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/test/cdtest/cdtest.vcproj b/test/cdtest/cdtest.vcproj new file mode 100644 index 0000000..2323676 --- /dev/null +++ b/test/cdtest/cdtest.vcproj @@ -0,0 +1,161 @@ +<?xml version="1.0" encoding="Windows-1252"?> +<VisualStudioProject + ProjectType="Visual C++" + Version="8.00" + Name="cdtest" + ProjectGUID="{A7E49FB8-700A-45EC-9174-FB1C2C7E83C9}" + > + <Platforms> + <Platform + Name="Win32" + /> + </Platforms> + <ToolFiles> + </ToolFiles> + <Configurations> + <Configuration + Name="Debug|Win32" + OutputDirectory="..\bin" + IntermediateDirectory="..\obj\cdtest" + ConfigurationType="1" + InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops" + UseOfMFC="0" + ATLMinimizesCRunTimeLibraryUsage="false" + CharacterSet="2" + > + <Tool + Name="VCPreBuildEventTool" + /> + <Tool + Name="VCCustomBuildTool" + /> + <Tool + Name="VCXMLDataGeneratorTool" + /> + <Tool + Name="VCWebServiceProxyGeneratorTool" + /> + <Tool + Name="VCMIDLTool" + PreprocessorDefinitions="_DEBUG" + MkTypLibCompatible="true" + SuppressStartupBanner="true" + TargetEnvironment="1" + TypeLibraryName="..\bin/cdtest.tlb" + /> + <Tool + Name="VCCLCompilerTool" + Optimization="0" + AdditionalIncludeDirectories="..\..\include,..\..\..\iup\include" + PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;CDTEST_WIN32;_CRT_SECURE_NO_DEPRECATE" + RuntimeLibrary="1" + PrecompiledHeaderFile="..\obj/cdtest.pch" + AssemblerListingLocation="" + ObjectFile="$(IntDir)/" + ProgramDataBaseFileName="..\obj/cdtest" + WarningLevel="3" + SuppressStartupBanner="true" + DebugInformationFormat="1" + /> + <Tool + Name="VCManagedResourceCompilerTool" + /> + <Tool + Name="VCResourceCompilerTool" + PreprocessorDefinitions="_DEBUG" + Culture="1046" + /> + <Tool + Name="VCPreLinkEventTool" + /> + <Tool + Name="VCLinkerTool" + AdditionalOptions="/MACHINE:I386" + AdditionalDependencies="comctl32.lib cd.lib cdiup.lib cdgdiplus.lib iup.lib gdiplus.lib cdpdflib.lib" + OutputFile="..\bin/cdtest.exe" + LinkIncremental="2" + SuppressStartupBanner="true" + AdditionalLibraryDirectories="..\..\lib,..\..\..\iup\lib" + GenerateDebugInformation="true" + ProgramDatabaseFile="..\bin/cdtest.pdb" + SubSystem="2" + /> + <Tool + Name="VCALinkTool" + /> + <Tool + Name="VCManifestTool" + /> + <Tool + Name="VCXDCMakeTool" + /> + <Tool + Name="VCBscMakeTool" + /> + <Tool + Name="VCFxCopTool" + /> + <Tool + Name="VCAppVerifierTool" + /> + <Tool + Name="VCWebDeploymentTool" + /> + <Tool + Name="VCPostBuildEventTool" + /> + </Configuration> + </Configurations> + <References> + </References> + <Files> + <Filter + Name="Source Files" + Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" + > + <File + RelativePath="Cdtest.c" + > + </File> + <File + RelativePath=".\cdtest.led" + > + </File> + <File + RelativePath="cdtest.rc" + > + </File> + <File + RelativePath="cdtest_led.c" + > + </File> + <File + RelativePath="Colorbar.c" + > + </File> + <File + RelativePath="Drivers.c" + > + </File> + <File + RelativePath="List.c" + > + </File> + <File + RelativePath="Rubber.c" + > + </File> + </Filter> + <Filter + Name="Header Files" + Filter="h;hpp;hxx;hm;inl" + > + <File + RelativePath="Cdtest.h" + > + </File> + </Filter> + </Files> + <Globals> + </Globals> +</VisualStudioProject> diff --git a/test/cdtest/cdtest_led.c b/test/cdtest/cdtest_led.c new file mode 100644 index 0000000..b48b467 --- /dev/null +++ b/test/cdtest/cdtest_led.c @@ -0,0 +1,1590 @@ +/* Arquivo gerado automaticamente por ledc 2.5 */ + +#include <stdlib.h> +#include <stdarg.h> +#include <iup.h> + +static Ihandle* named[ 172 ]; + +static Ihandle* decl( char* name, Ihandle* elem, char* first, ...) +{ + char *attr, *val; + va_list arg; + va_start (arg, first); + attr = first; + while (attr) + { + val = va_arg(arg,char*); + IupSetAttribute( elem, attr, val ); + attr = va_arg(arg,char*); + } + va_end (arg); + if(name) IupSetHandle( name, elem ); + return elem; +} + +static void image_imgLine (void) +{ + char map[] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -1 }; + + decl( "imgLine", IupImage( 18, 18, map ), + "0", "BGCOLOR", + "1", "0 0 0", 0 ); +} + +static void image_imgClip (void) +{ + char map[] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, + 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, + 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -1 }; + + decl( "imgClip", IupImage( 18, 18, map ), + "0", "BGCOLOR", + "1", "0 0 0", 0 ); +} + +static void image_imgImage (void) +{ + char map[] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 1, 2, 2, 2, 2, 2, 1, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 1, 2, 2, 2, 2, 2, 1, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 0, 0, 0, 0, + 0, 0, 0, 1, 2, 2, 1, 2, 2, 2, 1, 2, 2, 1, 0, 0, 0, 0, + 0, 0, 0, 1, 2, 2, 2, 2, 1, 2, 2, 2, 2, 1, 0, 0, 0, 0, + 0, 0, 0, 1, 1, 2, 2, 2, 1, 3, 2, 2, 1, 1, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 2, 2, 2, 2, 1, 2, 2, 1, 3, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 2, 2, 2, 1, 1, 2, 2, 1, 3, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 2, 2, 2, 2, 2, 2, 2, 1, 3, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 2, 1, 3, 1, 2, 1, 3, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 2, 2, 1, 3, 2, 1, 3, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1, 2, 2, 2, 1, 3, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 3, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, + -1 }; + + decl( "imgImage", IupImage( 18, 18, map ), + "0", "BGCOLOR", + "1", "0 0 0", + "2", "255 255 255", + "3", "153 153 153", 0 ); +} + +static void image_imgImageRGB (void) +{ + char map[] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 0, 0, 0, + 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 0, 0, 0, + 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 0, 0, 0, + 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 0, 0, 0, + 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 0, 0, 0, + 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 0, 0, 0, + 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 0, 0, 0, + 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 0, 0, 0, + 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 0, 0, 0, + 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -1 }; + + decl( "imgImageRGB", IupImage( 18, 18, map ), + "0", "BGCOLOR", + "1", "255 0 0", + "2", "0 255 0", + "3", "0 0 255", 0 ); +} + +static void image_imgBox (void) +{ + char map[] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, + 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, + 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, + 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, + 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, + 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, + 0, 0, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, + 0, 0, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, + 0, 0, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, + 0, 0, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, + 0, 0, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -1 }; + + decl( "imgBox", IupImage( 18, 18, map ), + "0", "BGCOLOR", + "1", "0 0 0", + "2", "255 255 255", 0 ); +} + +static void image_imgRect (void) +{ + char map[] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, + 0, 0, 1, 0, 0, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 2, 0, 0, + 0, 0, 1, 0, 0, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 2, 0, 0, + 0, 0, 1, 0, 0, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 2, 0, 0, + 0, 0, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 0, 0, 2, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 2, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 2, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -1 }; + + decl( "imgRect", IupImage( 18, 18, map ), + "0", "BGCOLOR", + "1", "0 0 0", + "2", "255 255 255", 0 ); +} + +static void image_imgSector (void) +{ + char map[] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 0, 0, 0, 0, + 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 0, 0, 0, + 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 0, 0, 0, + 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 0, 0, + 0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 0, 0, + 0, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, + 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, + 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, + 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -1 }; + + decl( "imgSector", IupImage( 18, 18, map ), + "0", "BGCOLOR", + "1", "0 0 0", + "2", "255 255 255", 0 ); +} + +static void image_imgChord (void) +{ + char map[] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 0, 0, 0, 0, + 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 0, 0, 0, + 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 0, 0, 0, + 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 0, 0, + 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 0, 0, + 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 0, 0, + 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, + 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, + 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -1 }; + + decl( "imgChord", IupImage( 18, 18, map ), + "0", "BGCOLOR", + "1", "0 0 0", + "2", "255 255 255", 0 ); +} + +static void image_imgArc (void) +{ + char map[] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 1, 2, 2, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 2, 2, 2, 0, 1, 1, 0, 0, 0, 2, 2, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 2, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 2, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 2, 2, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -1 }; + + decl( "imgArc", IupImage( 18, 18, map ), + "0", "BGCOLOR", + "1", "0 0 0", + "2", "255 255 255", 0 ); +} + +static void image_imgText (void) +{ + char map[] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, 1, 1, 0, 0, 0, 0, 0, + 0, 0, 2, 2, 0, 0, 0, 0, 2, 2, 0, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 2, 2, 0, 0, 0, 0, 2, 2, 0, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 2, 2, 0, 0, 0, 0, 2, 2, 0, 0, 1, 1, 1, 1, 0, 0, + 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 1, 0, 0, 0, 1, 0, + 0, 0, 2, 2, 0, 0, 0, 0, 2, 2, 0, 0, 1, 0, 0, 0, 1, 0, + 0, 0, 2, 2, 0, 0, 0, 0, 2, 2, 0, 0, 1, 0, 0, 0, 1, 0, + 0, 0, 2, 2, 0, 0, 0, 0, 2, 2, 0, 0, 1, 0, 0, 0, 1, 0, + 0, 0, 2, 2, 0, 0, 0, 0, 2, 2, 0, 1, 1, 1, 1, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -1 }; + + decl( "imgText", IupImage( 18, 18, map ), + "0", "BGCOLOR", + "1", "255 255 255", + "2", "0 0 0", 0 ); +} + +static void image_imgPoly (void) +{ + char map[] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, + 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, + 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, + 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -1 }; + + decl( "imgPoly", IupImage( 18, 18, map ), + "0", "BGCOLOR", + "1", "0 0 0", 0 ); +} + +static void image_imgMark (void) +{ + char map[] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -1 }; + + decl( "imgMark", IupImage( 18, 18, map ), + "0", "BGCOLOR", + "1", "0 0 0", 0 ); +} + +static void image_imgPixel (void) +{ + char map[] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 0, 0, + 0, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -1 }; + + decl( "imgPixel", IupImage( 18, 18, map ), + "0", "BGCOLOR", + "1", "0 0 0", + "2", "255 255 255", 0 ); +} + + +void cdtest_loadled (void) +{ + image_imgLine (); + image_imgClip (); + image_imgImage (); + image_imgImageRGB (); + image_imgBox (); + image_imgRect (); + image_imgSector (); + image_imgChord (); + image_imgArc (); + image_imgText (); + image_imgPoly (); + image_imgMark (); + image_imgPixel (); + named[0] = decl( "mnOpen", IupMenu( + IupItem( "MF...", "cmdPlayMF" ), + named[1] = decl( "itPlayCGM", IupItem( "CGM...", "cmdPlayCGM" ), + "ACTIVE", "NO", 0 ), + named[2] = decl( "itPlayEMF", IupItem( "EMF...", "cmdPlayEMF" ), + "ACTIVE", "NO", 0 ), + named[3] = decl( "itPlayWMF", IupItem( "WMF...", "cmdPlayWMF" ), + "ACTIVE", "NO", 0 ), + NULL), 0 ); + named[4] = decl( "mnSave", IupMenu( + IupItem( "MF...", "cmdMF" ), + named[5] = decl( "itPDF", IupItem( "PDF...", "cmdPDF" ), + "ACTIVE", "NO", 0 ), + named[6] = decl( "itPS", IupItem( "PS...", "cmdPS" ), + "ACTIVE", "NO", 0 ), + named[7] = decl( "itEPS", IupItem( "EPS...", "cmdEPS" ), + "ACTIVE", "NO", 0 ), + named[8] = decl( "itCGMt", IupItem( "CGMt...", "cmdCGMt" ), + "ACTIVE", "NO", 0 ), + named[9] = decl( "itCGMb", IupItem( "CGMb...", "cmdCGMb" ), + "ACTIVE", "NO", 0 ), + named[10] = decl( "itDGN", IupItem( "DGN...", "cmdDGN" ), + "ACTIVE", "NO", 0 ), + named[11] = decl( "itDXF", IupItem( "DXF...", "cmdDXF" ), + "ACTIVE", "NO", 0 ), + named[12] = decl( "itEMF", IupItem( "EMF...", "cmdEMF" ), + "ACTIVE", "NO", 0 ), + named[13] = decl( "itWMF", IupItem( "WMF...", "cmdWMF" ), + "ACTIVE", "NO", 0 ), + NULL), 0 ); + named[14] = decl( "mnFile", IupMenu( + decl( 0, IupSubmenu( "Open", + named[0] /* mnOpen */ + ), + "KEY", "K_O", 0 ), + IupSeparator(), + decl( 0, IupSubmenu( "Save", + named[4] /* mnSave */ + ), + "KEY", "K_S", 0 ), + IupSeparator(), + named[15] = decl( "itPrint", IupItem( "Print...", "cmdPrint" ), + "KEY", "K_P", 0 ), + IupSeparator(), + decl( 0, IupItem( "Exit", "cmdFileExit" ), + "KEY", "K_x", 0 ), + NULL), 0 ); + named[16] = decl( "mnEdit", IupMenu( + named[17] = decl( "itEditUndo", IupItem( "Undo", "cmdEditUndo" ), 0 ), + IupSeparator(), + named[18] = decl( "itClipBoard", IupItem( "Copy as EMF/WMF", "cmdClipBoard" ), + "ACTIVE", "NO", 0 ), + named[19] = decl( "itClipBoardBitmap", IupItem( "Copy as Bitmap", "cmdClipBoardBitmap" ), + "ACTIVE", "NO", 0 ), + named[20] = decl( "itClipBoardMetafile", IupItem( "Copy as CD Metafile", "cmdClipBoardMetafile" ), + "ACTIVE", "NO", 0 ), + named[21] = decl( "itClipBoardPaste", IupItem( "Paste", "cmdClipBoardPaste" ), + "ACTIVE", "NO", 0 ), + IupSeparator(), + IupItem( "Clear", "cmdEditClear" ), + IupSeparator(), + IupItem( "Options...", "cmdOptions" ), + NULL), 0 ); + named[22] = decl( "mnPrimitives", IupMenu( + IupItem( "Pixel...", "cmdPixel" ), + IupItem( "Mark...", "cmdMark" ), + IupItem( "Line...", "cmdLine" ), + IupItem( "Polygon...", "cmdPoly" ), + IupItem( "Rect...", "cmdRect" ), + IupItem( "Box...", "cmdBox" ), + IupItem( "Arc...", "cmdArc" ), + IupItem( "Sector...", "cmdSector" ), + IupItem( "Chord...", "cmdChord" ), + IupItem( "Text...", "cmdText" ), + IupSeparator(), + IupItem( "Server Image...", "cmdImage" ), + IupItem( "RGB Image...", "cmdImageRGB" ), + NULL), 0 ); + named[23] = decl( "mnDraw", IupMenu( + decl( 0, IupSubmenu( "Primitives", + named[22] /* mnPrimitives */ + ), + "KEY", "K_P", 0 ), + IupSeparator(), + IupItem( "Clipping...", "cmdClip" ), + IupItem( "Attributes...", "cmdAttributes" ), + IupSeparator(), + named[24] = decl( "itWDCanvas", IupItem( "Show WD Canvas", "cmdWDCanvas" ), 0 ), + named[25] = decl( "itPICCanvas", IupItem( "Show Picture Canvas", "cmdPICCanvas" ), 0 ), + NULL), + "ISMENU", "YES", 0 ); + named[26] = decl( "mnHelp", IupMenu( + IupItem( "About...", "cmdHelpAbout" ), + NULL), 0 ); + named[27] = decl( "mnMain", IupMenu( + decl( 0, IupSubmenu( "File", + named[14] /* mnFile */ + ), + "KEY", "K_mF", 0 ), + decl( 0, IupSubmenu( "Edit", + named[16] /* mnEdit */ + ), + "KEY", "K_mE", 0 ), + decl( 0, IupSubmenu( "Draw", + named[23] /* mnDraw */ + ), + "KEY", "K_mD", 0 ), + decl( 0, IupSubmenu( "Help", + named[26] /* mnHelp */ + ), + "KEY", "K_mH", 0 ), + NULL), 0 ); + named[28] = decl( "lbStatusLine", IupLabel( "Esta eh a barra de status do CDTest." ), + "EXPAND", "HORIZONTAL", 0 ); + named[29] = decl( "btLine", IupButton( "", "cmdLine" ), + "IMAGE", "imgLine", + "TIP", "Line", 0 ); + named[30] = decl( "btBox", IupButton( "", "cmdBox" ), + "IMAGE", "imgBox", + "TIP", "Box", 0 ); + named[31] = decl( "btRect", IupButton( "", "cmdRect" ), + "IMAGE", "imgRect", + "TIP", "Rect", 0 ); + named[32] = decl( "btArc", IupButton( "", "cmdArc" ), + "IMAGE", "imgArc", + "TIP", "Arc", 0 ); + named[33] = decl( "btSector", IupButton( "", "cmdSector" ), + "IMAGE", "imgSector", + "TIP", "Sector", 0 ); + named[34] = decl( "btChord", IupButton( "", "cmdChord" ), + "IMAGE", "imgChord", + "TIP", "Chord", 0 ); + named[35] = decl( "btPixel", IupButton( "", "cmdPixel" ), + "IMAGE", "imgPixel", + "TIP", "Pixel", 0 ); + named[36] = decl( "btMark", IupButton( "", "cmdMark" ), + "IMAGE", "imgMark", + "TIP", "Mark", 0 ); + named[37] = decl( "btText", IupButton( "", "cmdText" ), + "IMAGE", "imgText", + "TIP", "Text", 0 ); + named[38] = decl( "btPoly", IupButton( "", "cmdPoly" ), + "IMAGE", "imgPoly", + "TIP", "Polygon", 0 ); + named[39] = decl( "btImageRGB", IupButton( "", "cmdImageRGB" ), + "IMAGE", "imgImageRGB", + "TIP", "RGB Image", 0 ); + named[40] = decl( "btImage", IupButton( "", "cmdImage" ), + "IMAGE", "imgImage", + "TIP", "Server Image", 0 ); + named[41] = decl( "btClip", IupButton( "", "cmdClip" ), + "IMAGE", "imgClip", + "TIP", "Clipping Area", 0 ); + named[42] = decl( "btCurPrim", IupButton( "", "cmdShowDialog" ), + "IMAGE", "imgLine", + "TIP", "Show primitive dialog", 0 ); + named[43] = decl( "lbMousePos", IupLabel( "( , )" ), + "SIZE", "90", 0 ); + named[44] = decl( "PrimBar", IupVbox( + named[42] /* btCurPrim */, + decl( 0, IupFill(), + "SIZE", "20", 0 ), + named[35] /* btPixel */, + named[36] /* btMark */, + named[29] /* btLine */, + named[38] /* btPoly */, + named[31] /* btRect */, + named[30] /* btBox */, + named[32] /* btArc */, + named[33] /* btSector */, + named[34] /* btChord */, + named[37] /* btText */, + decl( 0, IupFill(), + "SIZE", "5", 0 ), + named[40] /* btImage */, + named[39] /* btImageRGB */, + decl( 0, IupFill(), + "SIZE", "5", 0 ), + named[41] /* btClip */, + decl( 0, IupFill(), + "SIZE", "30", 0 ), + NULL), + "GAP", "2", 0 ); + named[45] = decl( "cnvColorBar", IupCanvas( "cmdColorBarRepaint" ), + "BUTTON_CB", "cmdColorBarButtonCB", + "RESIZE_CB", "cmdColorBarResizeCB", + "SIZE", "220x12", + "BORDER", "NO", + "EXPAND", "NO", 0 ); + named[46] = decl( "cnvMain", IupCanvas( "cmdRepaint" ), + "MOTION_CB", "cmdMotionCB", + "BUTTON_CB", "cmdButtonCB", + "RESIZE_CB", "cmdResizeCB", 0 ); + named[47] = decl( "DeskTop", IupVbox( + decl( 0, IupFill(), + "SIZE", "5", 0 ), + IupHbox( + decl( 0, IupFill(), + "SIZE", "5", 0 ), + named[44] /* PrimBar */, + decl( 0, IupFill(), + "SIZE", "2", 0 ), + IupVbox( + decl( 0, IupFill(), + "SIZE", "2", 0 ), + named[43] /* lbMousePos */, + decl( 0, IupFill(), + "SIZE", "5", 0 ), + named[46] /* cnvMain */, + decl( 0, IupFill(), + "SIZE", "2", 0 ), + named[45] /* cnvColorBar */, + decl( 0, IupFill(), + "SIZE", "5", 0 ), + named[28] /* lbStatusLine */, + NULL), + decl( 0, IupFill(), + "SIZE", "5", 0 ), + NULL), + decl( 0, IupFill(), + "SIZE", "5", 0 ), + NULL), 0 ); + named[48] = decl( "dlgMain", IupDialog( + named[47] /* DeskTop */ + ), + "TITLE", "CD Test 5.3", + "MENU", "mnMain", + "ICON", "CdTestIcon", + "K_cZ", "cmdEditUndo", + "GETFOCUS_CB", "cmdGetFocusCB", + "KILLFOCUS_CB", "cmdKillFocusCB", + "CLOSE_CB", "cmdFileExit", 0 ); + named[49] = decl( "cnvWDCanvas", IupCanvas( "cmdWDRepaint" ), + "BORDER", "NO", 0 ); + named[50] = decl( "dlgWDCanvas", IupDialog( + named[49] /* cnvWDCanvas */ + ), + "TITLE", "WD Canvas", + "CLISE_CB", "cmdCloseWD", + "SIZE", "200x200", + "PARENTDIALOG", "dlgMain", + "GAP", "5x5", 0 ); + named[51] = decl( "cnvPICCanvas", IupCanvas( "cmdPICRepaint" ), + "BORDER", "NO", 0 ); + named[52] = decl( "dlgPICCanvas", IupDialog( + named[51] /* cnvPICCanvas */ + ), + "TITLE", "PIC Canvas", + "CLISE_CB", "cmdClosePIC", + "SIZE", "200x200", + "PARENTDIALOG", "dlgMain", + "GAP", "5x5", 0 ); + named[53] = decl( "btOptionsHide", IupButton( "Hide", "cmdOptionsHide" ), + "SIZE", "30", 0 ); + named[54] = decl( "tgSimulate", IupToggle( "Simulate", "cmdSimulate" ), + "VALUE", "OFF", + "SIZE", "55", 0 ); + named[55] = decl( "tgStretchPlay", IupToggle( "Stretch Play", "cmdStretchPlay" ), + "VALUE", "OFF", + "SIZE", "70", 0 ); + named[56] = decl( "tgNoBuffering", IupToggle( "No buffering", "cmdNoBuffering" ), + "VALUE", "ON", 0 ); + named[57] = decl( "tgImageBuffer", IupToggle( "CD_DBUFFER", "cmdImageBuffer" ), 0 ); + named[58] = decl( "tgRGBBuffer", IupToggle( "CD_DBUFFERRGB", "cmdRGBBuffer" ), 0 ); + named[59] = decl( "rdBuffering", IupRadio( + IupVbox( + named[56] /* tgNoBuffering */, + named[57] /* tgImageBuffer */, + named[58] /* tgRGBBuffer */, + NULL) + ), 0 ); + named[60] = decl( "OptionsDesktop", IupVbox( + decl( 0, IupVbox( + decl( 0, IupFrame( + named[59] /* rdBuffering */ + ), + "TITLE", "Buffering:", + "MARGIN", "5x5", + "SIZE", "80", 0 ), + decl( 0, IupFill(), + "SIZE", "10", 0 ), + named[54] /* tgSimulate */, + named[55] /* tgStretchPlay */, + decl( 0, IupFill(), + "SIZE", "10", 0 ), + named[53] /* btOptionsHide */, + decl( 0, IupFill(), + "SIZE", "2", 0 ), + NULL), + "GAP", "2", 0 ), + NULL), 0 ); + named[61] = decl( "dlgOptions", IupDialog( + named[60] /* OptionsDesktop */ + ), + "TITLE", "Options", + "PARENTDIALOG", "dlgMain", + "MAXBOX", "NO", + "MINBOX", "NO", + "RESIZE", "NO", + "MARGIN", "5x2", 0 ); + named[62] = decl( "lstTextAlignment", IupList( "cmdTextAlignment" ), + "1", "CD_NORTH", + "2", "CD_SOUTH", + "3", "CD_EAST", + "4", "CD_WEST", + "5", "CD_NORTH_EAST", + "6", "CD_NORTH_WEST", + "7", "CD_SOUTH_EAST", + "8", "CD_SOUTH_WEST", + "9", "CD_CENTER", + "10", "CD_BASE_LEFT", + "11", "CD_BASE_CENTER", + "12", "CD_BASE_RIGHT", + "DROPDOWN", "YES", + "VALUE", "10", + "SIZE", "89", 0 ); + named[63] = decl( "txtMarkSize", IupText( "cmdInteger" ), + "NC", "4", + "SIZE", "20x12", + "VALUE", "10", 0 ); + named[64] = decl( "lstMarkType", IupList( "cmdMarkType" ), + "1", "CD_PLUS", + "2", "CD_STAR", + "3", "CD_CIRCLE", + "4", "CD_X", + "5", "CD_BOX", + "6", "CD_DIAMOND", + "7", "CD_HOLLOW_CIRCLE", + "8", "CD_HOLLOW_BOX", + "9", "CD_HOLLOW_DIAMOND", + "DROPDOWN", "YES", + "VALUE", "2", + "SIZE", "80", 0 ); + named[65] = decl( "lstWriteMode", IupList( "cmdWriteMode" ), + "1", "CD_REPLACE", + "2", "CD_XOR", + "3", "CD_NOT_XOR", + "VALUE", "1", + "DROPDOWN", "YES", + "SIZE", "80", 0 ); + named[66] = decl( "lstFontTypeFace", IupList( "cmdFontTypeFace" ), + "1", "CD_SYSTEM", + "2", "CD_COURIER", + "3", "CD_TIMES_ROMAN", + "4", "CD_HELVETICA", + "VALUE", "1", + "DROPDOWN", "YES", + "SIZE", "80", 0 ); + named[67] = decl( "lstLineCap", IupList( "cmdLineCap" ), + "1", "CD_CAPFLAT", + "2", "CD_CAPSQUARE", + "3", "CD_CAPROUND", + "VALUE", "1", + "DROPDOWN", "YES", + "SIZE", "80", 0 ); + named[68] = decl( "lstLineJoin", IupList( "cmdLineJoin" ), + "1", "CD_BEVEL", + "2", "CD_MITER", + "3", "CD_ROUND", + "VALUE", "1", + "DROPDOWN", "YES", + "SIZE", "80", 0 ); + named[69] = decl( "lstFillMode", IupList( "cmdFillMode" ), + "1", "CD_EVENODD", + "2", "CD_WINDING", + "VALUE", "1", + "DROPDOWN", "YES", + "SIZE", "80", 0 ); + named[70] = decl( "lstFontStyle", IupList( "cmdFontStyle" ), + "1", "CD_PLAIN", + "2", "CD_BOLD", + "3", "CD_ITALIC", + "4", "CD_BOLD_ITALIC", + "VALUE", "1", + "DROPDOWN", "YES", + "SIZE", "80", 0 ); + named[71] = decl( "txtLineWidth", IupText( "cmdInteger" ), + "SIZE", "30", + "NC", "3", + "VALUE", "1", 0 ); + named[72] = decl( "txtFontSize", IupText( "cmdInteger" ), + "SIZE", "30", + "NC", "3", + "VALUE", "12", 0 ); + named[73] = decl( "txtTextOrientation", IupText( "cmdInteger" ), + "SIZE", "30", + "NC", "3", + "VALUE", "0", 0 ); + named[74] = decl( "lstLineStyle", IupList( "cmdLineStyle" ), + "1", "CD_CONTINUOUS", + "2", "CD_DASHED", + "3", "CD_DOTTED", + "4", "CD_DASH_DOT", + "5", "CD_DASH_DOT_DOT", + "6", "CD_CUSTOM", + "VALUE", "1", + "DROPDOWN", "YES", + "SIZE", "80", 0 ); + named[75] = decl( "tgSolid", IupToggle( "CD_SOLID", "cmdSolid" ), + "VALUE", "ON", 0 ); + named[76] = decl( "tgHatch", IupToggle( "CD_HATCH", "cmdHatch" ), 0 ); + named[77] = decl( "tgStipple", IupToggle( "CD_STIPPLE", "cmdStipple" ), 0 ); + named[78] = decl( "tgPattern", IupToggle( "CD_PATTERN", "cmdPattern" ), 0 ); + named[79] = decl( "lstOpacity", IupList( "cmdOpacity" ), + "1", "CD_OPAQUE", + "2", "CD_TRANSPARENT", + "VALUE", "2", + "DROPDOWN", "YES", + "SIZE", "80", + "ACTIVE", "YES", 0 ); + named[80] = decl( "lstHatchStyle", IupList( "cmdHatchStyle" ), + "1", "CD_HORIZONTAL", + "2", "CD_VERTICAL", + "3", "CD_FDIAGONAL", + "4", "CD_BDIAGONAL", + "5", "CD_CROSS", + "6", "CD_DIAGCROSS", + "VALUE", "1", + "DROPDOWN", "YES", + "SIZE", "80", + "ACTIVE", "YES", 0 ); + named[81] = decl( "btAttributesHide", IupButton( "Hide", "cmdAttributesHide" ), + "SIZE", "30", 0 ); + named[82] = decl( "rdInteriorStyle", IupRadio( + IupVbox( + named[75] /* tgSolid */, + named[76] /* tgHatch */, + named[77] /* tgStipple */, + named[78] /* tgPattern */, + NULL) + ), 0 ); + named[83] = decl( "AttributesDesktop", IupVbox( + IupHbox( + decl( 0, IupVbox( + IupLabel( "Write Mode:" ), + named[65] /* lstWriteMode */, + decl( 0, IupFill(), + "SIZE", "4", 0 ), + decl( 0, IupFrame( + IupVbox( + IupLabel( "Back Opacity:" ), + named[79] /* lstOpacity */, + decl( 0, IupFill(), + "SIZE", "2", 0 ), + IupLabel( "Fill Mode:" ), + named[69] /* lstFillMode */, + decl( 0, IupFill(), + "SIZE", "2", 0 ), + decl( 0, IupFrame( + named[82] /* rdInteriorStyle */ + ), + "TITLE", "Interior Style:", + "MARGIN", "5x5", + "SIZE", "80", 0 ), + decl( 0, IupFill(), + "SIZE", "2", 0 ), + IupLabel( "Hatch Style:" ), + named[80] /* lstHatchStyle */, + NULL) + ), + "TITLE", "Fill Attributes", + "MARGIN", "5x5", 0 ), + decl( 0, IupFill(), + "SIZE", "10", 0 ), + decl( 0, IupFrame( + IupVbox( + IupLabel( "Mark Type:" ), + named[64] /* lstMarkType */, + decl( 0, IupFill(), + "SIZE", "2", 0 ), + IupLabel( "Mark Size:" ), + named[63] /* txtMarkSize */, + NULL) + ), + "TITLE", "Mark Attributes", + "MARGIN", "5x5", 0 ), + decl( 0, IupFill(), + "SIZE", "10", 0 ), + named[81] /* btAttributesHide */, + NULL), + "GAP", "2", 0 ), + decl( 0, IupVbox( + decl( 0, IupFrame( + IupVbox( + IupLabel( "Font Typeface:" ), + named[66] /* lstFontTypeFace */, + decl( 0, IupFill(), + "SIZE", "2", 0 ), + IupLabel( "Font Style:" ), + named[70] /* lstFontStyle */, + decl( 0, IupFill(), + "SIZE", "2", 0 ), + IupLabel( "Font Size:" ), + named[72] /* txtFontSize */, + decl( 0, IupFill(), + "SIZE", "2", 0 ), + decl( 0, IupLabel( "Text Alignment:" ), + "SIZE", "x9", 0 ), + named[62] /* lstTextAlignment */, + decl( 0, IupFill(), + "SIZE", "2", 0 ), + decl( 0, IupLabel( "Text Orientation:" ), + "SIZE", "x9", 0 ), + named[73] /* txtTextOrientation */, + NULL) + ), + "TITLE", "Text Attributes", + "MARGIN", "5x5", 0 ), + decl( 0, IupFill(), + "SIZE", "10", 0 ), + decl( 0, IupFrame( + IupVbox( + IupLabel( "Line Style:" ), + named[74] /* lstLineStyle */, + decl( 0, IupFill(), + "SIZE", "2", 0 ), + IupLabel( "Line Width:" ), + named[71] /* txtLineWidth */, + decl( 0, IupFill(), + "SIZE", "2", 0 ), + IupLabel( "Line Cap:" ), + named[67] /* lstLineCap */, + decl( 0, IupFill(), + "SIZE", "2", 0 ), + IupLabel( "Line Join:" ), + named[68] /* lstLineJoin */, + NULL) + ), + "TITLE", "Line Attributes", + "MARGIN", "5x5", 0 ), + NULL), + "GAP", "2", 0 ), + NULL), + NULL), 0 ); + named[84] = decl( "dlgAttributes", IupDialog( + named[83] /* AttributesDesktop */ + ), + "TITLE", "Attributes", + "PARENTDIALOG", "dlgMain", + "MAXBOX", "NO", + "MINBOX", "NO", + "RESIZE", "NO", + "CLOSE_CB", "cmdAttributesHide", + "MARGIN", "5x2", 0 ); + named[85] = decl( "txtLBX1", IupText( "cmdInteger" ), + "NC", "8", + "SIZE", "30x12", + "VALUE", "0", 0 ); + named[86] = decl( "txtLBX2", IupText( "cmdInteger" ), + "NC", "8", + "SIZE", "30x12", + "VALUE", "0", 0 ); + named[87] = decl( "txtLBY1", IupText( "cmdInteger" ), + "NC", "8", + "SIZE", "30x12", + "VALUE", "0", 0 ); + named[88] = decl( "txtLBY2", IupText( "cmdInteger" ), + "NC", "8", + "SIZE", "30x12", + "VALUE", "0", 0 ); + named[89] = decl( "btLBDraw", IupButton( "Draw", "cmdDraw" ), + "SIZE", "30", 0 ); + named[90] = decl( "btLBHide", IupButton( "Hide", "cmdMsgHide" ), + "SIZE", "30", 0 ); + named[91] = decl( "LBData", IupVbox( + decl( 0, IupHbox( + decl( 0, IupLabel( "X1:" ), + "SIZE", "15x9", 0 ), + named[85] /* txtLBX1 */, + decl( 0, IupFill(), + "SIZE", "5", 0 ), + decl( 0, IupLabel( "Y1:" ), + "SIZE", "15x9", 0 ), + named[87] /* txtLBY1 */, + NULL), + "ALIGNMENT", "ACENTER", 0 ), + decl( 0, IupHbox( + decl( 0, IupLabel( "X2:" ), + "SIZE", "15x9", 0 ), + named[86] /* txtLBX2 */, + decl( 0, IupFill(), + "SIZE", "5", 0 ), + decl( 0, IupLabel( "Y2:" ), + "SIZE", "15x9", 0 ), + named[88] /* txtLBY2 */, + NULL), + "ALIGNMENT", "ACENTER", 0 ), + NULL), 0 ); + named[92] = decl( "LBDeskTop", IupVbox( + IupHbox( + IupFill(), + named[91] /* LBData */, + IupFill(), + NULL), + IupHbox( + IupFill(), + named[89] /* btLBDraw */, + decl( 0, IupFill(), + "SIZE", "5", 0 ), + named[90] /* btLBHide */, + IupFill(), + NULL), + NULL), 0 ); + named[93] = decl( "dlgLB", IupDialog( + named[92] /* LBDeskTop */ + ), + "TITLE", "Line Parameters", + "PARENTDIALOG", "dlgMain", + "MAXBOX", "NO", + "MINBOX", "NO", + "RESIZE", "NO", + "CLOSE_CB", "cmdMsgHide", + "MARGIN", "5x5", 0 ); + named[94] = decl( "txtASXC", IupText( "cmdInteger" ), + "NC", "4", + "SIZE", "30x12", + "VALUE", "0", 0 ); + named[95] = decl( "txtASYC", IupText( "cmdInteger" ), + "NC", "4", + "SIZE", "30x12", + "VALUE", "0", 0 ); + named[96] = decl( "txtASW", IupText( "cmdInteger" ), + "NC", "4", + "SIZE", "30x12", + "VALUE", "0", 0 ); + named[97] = decl( "txtASH", IupText( "cmdInteger" ), + "NC", "4", + "SIZE", "30x12", + "VALUE", "0", 0 ); + named[98] = decl( "txtASAngle1", IupText( "cmdReal" ), + "NC", "10", + "SIZE", "30x12", + "VALUE", "0", 0 ); + named[99] = decl( "txtASAngle2", IupText( "cmdReal" ), + "NC", "10", + "SIZE", "30x12", + "VALUE", "360", 0 ); + named[100] = decl( "btASDraw", IupButton( "Draw", "cmdDraw" ), + "SIZE", "30", 0 ); + named[101] = decl( "btASHide", IupButton( "Hide", "cmdMsgHide" ), + "SIZE", "30", 0 ); + named[102] = decl( "ASData", IupVbox( + decl( 0, IupHbox( + decl( 0, IupLabel( "Xc:" ), + "SIZE", "30x9", 0 ), + named[94] /* txtASXC */, + decl( 0, IupFill(), + "SIZE", "5", 0 ), + decl( 0, IupLabel( "Yc:" ), + "SIZE", "30x9", 0 ), + named[95] /* txtASYC */, + NULL), + "ALIGNMENT", "ACENTER", 0 ), + decl( 0, IupHbox( + decl( 0, IupLabel( "W:" ), + "SIZE", "30x9", 0 ), + named[96] /* txtASW */, + decl( 0, IupFill(), + "SIZE", "5", 0 ), + decl( 0, IupLabel( "H:" ), + "SIZE", "30x9", 0 ), + named[97] /* txtASH */, + NULL), + "ALIGNMENT", "ACENTER", 0 ), + decl( 0, IupHbox( + decl( 0, IupLabel( "Angle1:" ), + "SIZE", "30x9", 0 ), + named[98] /* txtASAngle1 */, + decl( 0, IupFill(), + "SIZE", "5", 0 ), + decl( 0, IupLabel( "Angle2:" ), + "SIZE", "30x9", 0 ), + named[99] /* txtASAngle2 */, + NULL), + "ALIGNMENT", "ACENTER", 0 ), + NULL), 0 ); + named[103] = decl( "ASDeskTop", IupVbox( + IupHbox( + IupFill(), + named[102] /* ASData */, + IupFill(), + NULL), + IupHbox( + IupFill(), + named[100] /* btASDraw */, + decl( 0, IupFill(), + "SIZE", "5", 0 ), + named[101] /* btASHide */, + IupFill(), + NULL), + NULL), 0 ); + named[104] = decl( "dlgAS", IupDialog( + named[103] /* ASDeskTop */ + ), + "PARENTDIALOG", "dlgMain", + "TITLE", "Arc Parameters", + "MAXBOX", "NO", + "MINBOX", "NO", + "RESIZE", "NO", + "CLOSE_CB", "cmdMsgHide", + "MARGIN", "5x5", 0 ); + named[105] = decl( "txtPixelX", IupText( "cmdInteger" ), + "NC", "5", + "SIZE", "30x12", + "VALUE", "0", 0 ); + named[106] = decl( "txtPixelY", IupText( "cmdInteger" ), + "NC", "5", + "SIZE", "30x12", + "VALUE", "0", 0 ); + named[107] = decl( "btPixelDraw", IupButton( "Draw", "cmdDraw" ), + "SIZE", "30", 0 ); + named[108] = decl( "btPixelHide", IupButton( "Hide", "cmdMsgHide" ), + "SIZE", "30", 0 ); + named[109] = decl( "PixelData", IupVbox( + decl( 0, IupHbox( + decl( 0, IupLabel( "X:" ), + "SIZE", "10x9", 0 ), + named[105] /* txtPixelX */, + decl( 0, IupFill(), + "SIZE", "5", 0 ), + decl( 0, IupLabel( "Y:" ), + "SIZE", "10x9", 0 ), + named[106] /* txtPixelY */, + NULL), + "ALIGNMENT", "ACENTER", 0 ), + NULL), 0 ); + named[110] = decl( "PixelDeskTop", IupVbox( + IupHbox( + IupFill(), + named[109] /* PixelData */, + IupFill(), + NULL), + IupHbox( + IupFill(), + named[107] /* btPixelDraw */, + decl( 0, IupFill(), + "SIZE", "5", 0 ), + named[108] /* btPixelHide */, + IupFill(), + NULL), + NULL), 0 ); + named[111] = decl( "dlgPixel", IupDialog( + named[110] /* PixelDeskTop */ + ), + "PARENTDIALOG", "dlgMain", + "TITLE", "Pixel Parameters", + "MAXBOX", "NO", + "MINBOX", "NO", + "RESIZE", "NO", + "CLOSE_CB", "cmdMsgHide", + "MARGIN", "5x5", 0 ); + named[112] = decl( "txtMarkX", IupText( "cmdInteger" ), + "NC", "5", + "SIZE", "30x12", + "VALUE", "0", 0 ); + named[113] = decl( "txtMarkY", IupText( "cmdInteger" ), + "NC", "5", + "SIZE", "30x12", + "VALUE", "0", 0 ); + named[114] = decl( "btMarkDraw", IupButton( "Draw", "cmdDraw" ), + "SIZE", "30", 0 ); + named[115] = decl( "btMarkHide", IupButton( "Hide", "cmdMsgHide" ), + "SIZE", "30", 0 ); + named[116] = decl( "MarkData", IupVbox( + decl( 0, IupHbox( + IupFill(), + decl( 0, IupLabel( "X:" ), + "SIZE", "10x9", 0 ), + named[112] /* txtMarkX */, + decl( 0, IupFill(), + "SIZE", "5", 0 ), + decl( 0, IupLabel( "Y:" ), + "SIZE", "10x9", 0 ), + named[113] /* txtMarkY */, + IupFill(), + NULL), + "ALIGNMENT", "ACENTER", 0 ), + NULL), 0 ); + named[117] = decl( "MarkDeskTop", IupVbox( + IupHbox( + IupFill(), + named[116] /* MarkData */, + IupFill(), + NULL), + IupHbox( + IupFill(), + named[114] /* btMarkDraw */, + decl( 0, IupFill(), + "SIZE", "5", 0 ), + named[115] /* btMarkHide */, + IupFill(), + NULL), + NULL), 0 ); + named[118] = decl( "dlgMark", IupDialog( + named[117] /* MarkDeskTop */ + ), + "PARENTDIALOG", "dlgMain", + "TITLE", "Mark Parameters", + "MAXBOX", "NO", + "MINBOX", "NO", + "RESIZE", "NO", + "CLOSE_CB", "cmdMsgHide", + "MARGIN", "5x5", 0 ); + named[119] = decl( "txtTextX", IupText( "cmdInteger" ), + "NC", "5", + "SIZE", "30x12", + "VALUE", "0", 0 ); + named[120] = decl( "txtTextY", IupText( "cmdInteger" ), + "NC", "5", + "SIZE", "30x12", + "VALUE", "0", 0 ); + named[121] = decl( "txtTextS", IupText( "cmdString" ), + "NC", "100", + "SIZE", "89x12", + "VALUE", "Text", 0 ); + named[122] = decl( "btTextDraw", IupButton( "Draw", "cmdDraw" ), + "SIZE", "30", 0 ); + named[123] = decl( "btTextHide", IupButton( "Hide", "cmdMsgHide" ), + "SIZE", "30", 0 ); + named[124] = decl( "TextData", IupVbox( + decl( 0, IupHbox( + decl( 0, IupLabel( "X:" ), + "SIZE", "10x9", 0 ), + named[119] /* txtTextX */, + decl( 0, IupFill(), + "SIZE", "5", 0 ), + decl( 0, IupLabel( "Y:" ), + "SIZE", "10x9", 0 ), + named[120] /* txtTextY */, + NULL), + "ALIGNMENT", "ACENTER", 0 ), + IupHbox( + IupVbox( + decl( 0, IupLabel( "Text:" ), + "SIZE", "25x9", 0 ), + named[121] /* txtTextS */, + NULL), + NULL), + NULL), 0 ); + named[125] = decl( "TextDeskTop", IupVbox( + IupHbox( + IupFill(), + named[124] /* TextData */, + IupFill(), + NULL), + IupHbox( + IupFill(), + named[122] /* btTextDraw */, + decl( 0, IupFill(), + "SIZE", "5", 0 ), + named[123] /* btTextHide */, + IupFill(), + NULL), + NULL), 0 ); + named[126] = decl( "dlgText", IupDialog( + named[125] /* TextDeskTop */ + ), + "PARENTDIALOG", "dlgMain", + "TITLE", "Text Parameters", + "MAXBOX", "NO", + "MINBOX", "NO", + "CLOSE_CB", "cmdMsgHide", + "RESIZE", "NO", + "MARGIN", "5x5", 0 ); + named[127] = decl( "tgOpenLines", IupToggle( "CD_OPEN_LINES", "cmdOpenLines" ), + "VALUE", "ON", 0 ); + named[128] = decl( "tgClosedLines", IupToggle( "CD_CLOSED_LINES", "cmdClosedLines" ), 0 ); + named[129] = decl( "tgFilled", IupToggle( "CD_FILL", "cmdFill" ), 0 ); + named[130] = decl( "tgClip", IupToggle( "CD_CLIP", "cmdPolyClip" ), 0 ); + named[131] = decl( "tgBezier", IupToggle( "CD_BEZIER", "cmdPolyBezier" ), 0 ); + named[132] = decl( "btPolyHide", IupButton( "Hide", "cmdMsgHide" ), + "SIZE", "30", 0 ); + named[133] = decl( "rdMode", IupRadio( + IupVbox( + named[127] /* tgOpenLines */, + named[128] /* tgClosedLines */, + named[129] /* tgFilled */, + named[130] /* tgClip */, + named[131] /* tgBezier */, + NULL) + ), 0 ); + named[134] = decl( "PolyDesktop", IupVbox( + decl( 0, IupFill(), + "SIZE", "5", 0 ), + IupHbox( + IupFill(), + decl( 0, IupFrame( + IupHbox( + decl( 0, IupFill(), + "SIZE", "5", 0 ), + named[133] /* rdMode */, + NULL) + ), + "TITLE", "Polygon Mode:", 0 ), + IupFill(), + NULL), + decl( 0, IupFill(), + "SIZE", "10", 0 ), + IupHbox( + IupFill(), + named[132] /* btPolyHide */, + IupFill(), + NULL), + decl( 0, IupFill(), + "SIZE", "5", 0 ), + NULL), 0 ); + named[135] = decl( "dlgPoly", IupDialog( + named[134] /* PolyDesktop */ + ), + "PARENTDIALOG", "dlgMain", + "TITLE", "Polygon Parameters", + "MAXBOX", "NO", + "MINBOX", "NO", + "RESIZE", "NO", + "CLOSE_CB", "cmdMsgHide", 0 ); + named[136] = decl( "txtClipXmin", IupText( "cmdInteger" ), + "NC", "5", + "SIZE", "30x12", + "VALUE", "0", 0 ); + named[137] = decl( "txtClipXmax", IupText( "cmdInteger" ), + "NC", "5", + "SIZE", "30x12", + "VALUE", "0", 0 ); + named[138] = decl( "txtClipYmin", IupText( "cmdInteger" ), + "NC", "5", + "SIZE", "30x12", + "VALUE", "0", 0 ); + named[139] = decl( "txtClipYmax", IupText( "cmdInteger" ), + "NC", "5", + "SIZE", "30x12", + "VALUE", "0", 0 ); + named[140] = decl( "btClipOff", IupButton( "Off", "cmdClipOff" ), + "SIZE", "30", 0 ); + named[141] = decl( "btClipArea", IupButton( "Area", "cmdClipArea" ), + "SIZE", "30", 0 ); + named[142] = decl( "btClipPoly", IupButton( "Polygon", "cmdClipPoly" ), + "SIZE", "50", 0 ); + named[143] = decl( "btClipHide", IupButton( "Hide", "cmdMsgHide" ), + "SIZE", "30", 0 ); + named[144] = decl( "ClipData", IupVbox( + decl( 0, IupHbox( + decl( 0, IupLabel( "Xmin:" ), + "SIZE", "25x9", 0 ), + named[136] /* txtClipXmin */, + decl( 0, IupFill(), + "SIZE", "5", 0 ), + decl( 0, IupLabel( "Ymin:" ), + "SIZE", "25x9", 0 ), + named[138] /* txtClipYmin */, + NULL), + "ALIGNMENT", "ACENTER", 0 ), + decl( 0, IupHbox( + decl( 0, IupLabel( "Xmax:" ), + "SIZE", "25x9", 0 ), + named[137] /* txtClipXmax */, + decl( 0, IupFill(), + "SIZE", "5", 0 ), + decl( 0, IupLabel( "Ymax:" ), + "SIZE", "25x9", 0 ), + named[139] /* txtClipYmax */, + NULL), + "ALIGNMENT", "ACENTER", 0 ), + NULL), 0 ); + named[145] = decl( "ClipDeskTop", IupVbox( + IupHbox( + IupFill(), + named[144] /* ClipData */, + IupFill(), + NULL), + IupHbox( + IupFill(), + named[140] /* btClipOff */, + decl( 0, IupFill(), + "SIZE", "5", 0 ), + named[141] /* btClipArea */, + decl( 0, IupFill(), + "SIZE", "5", 0 ), + named[142] /* btClipPoly */, + decl( 0, IupFill(), + "SIZE", "5", 0 ), + named[143] /* btClipHide */, + IupFill(), + NULL), + NULL), 0 ); + named[146] = decl( "dlgClip", IupDialog( + named[145] /* ClipDeskTop */ + ), + "PARENTDIALOG", "dlgMain", + "TITLE", "Clipping", + "MAXBOX", "NO", + "CLOSE_CB", "cmdMsgHide", + "MINBOX", "NO", + "RESIZE", "NO", + "MARGIN", "5x5", 0 ); + named[147] = decl( "txtImageX", IupText( "cmdInteger" ), + "NC", "5", + "SIZE", "30x12", + "VALUE", "0", 0 ); + named[148] = decl( "txtImageY", IupText( "cmdInteger" ), + "NC", "5", + "SIZE", "30x12", + "VALUE", "0", 0 ); + named[149] = decl( "txtImageW", IupText( "cmdInteger" ), + "NC", "5", + "SIZE", "30x12", + "VALUE", "0", 0 ); + named[150] = decl( "txtImageH", IupText( "cmdInteger" ), + "NC", "5", + "SIZE", "30x12", + "VALUE", "0", 0 ); + named[151] = decl( "btImagePut", IupButton( "Put", "cmdImagePut" ), + "SIZE", "30", 0 ); + named[152] = decl( "btImageGet", IupButton( "Get", "cmdImageGet" ), + "SIZE", "30", 0 ); + named[153] = decl( "btImageHide", IupButton( "Hide", "cmdMsgHide" ), + "SIZE", "30", 0 ); + named[154] = decl( "ImageData", IupVbox( + decl( 0, IupHbox( + decl( 0, IupLabel( "X:" ), + "SIZE", "30x9", 0 ), + named[147] /* txtImageX */, + decl( 0, IupFill(), + "SIZE", "5", 0 ), + decl( 0, IupLabel( "Y:" ), + "SIZE", "30x9", 0 ), + named[148] /* txtImageY */, + NULL), + "ALIGNMENT", "ACENTER", 0 ), + decl( 0, IupHbox( + decl( 0, IupLabel( "Width:" ), + "SIZE", "30x9", 0 ), + named[149] /* txtImageW */, + decl( 0, IupFill(), + "SIZE", "5", 0 ), + decl( 0, IupLabel( "Height:" ), + "SIZE", "30x9", 0 ), + named[150] /* txtImageH */, + NULL), + "ALIGNMENT", "ACENTER", 0 ), + NULL), 0 ); + named[155] = decl( "ImageDeskTop", IupVbox( + IupHbox( + IupFill(), + named[154] /* ImageData */, + IupFill(), + NULL), + IupHbox( + IupFill(), + named[152] /* btImageGet */, + decl( 0, IupFill(), + "SIZE", "5", 0 ), + named[151] /* btImagePut */, + decl( 0, IupFill(), + "SIZE", "5", 0 ), + named[153] /* btImageHide */, + IupFill(), + NULL), + NULL), 0 ); + named[156] = decl( "dlgImage", IupDialog( + named[155] /* ImageDeskTop */ + ), + "PARENTDIALOG", "dlgMain", + "TITLE", "Server Image", + "MAXBOX", "NO", + "MINBOX", "NO", + "CLOSE_CB", "cmdMsgHide", + "RESIZE", "NO", + "MARGIN", "5x5", 0 ); + named[157] = decl( "txtImageRGBX", IupText( "cmdInteger" ), + "NC", "5", + "SIZE", "30x12", + "VALUE", "0", 0 ); + named[158] = decl( "txtImageRGBY", IupText( "cmdInteger" ), + "NC", "5", + "SIZE", "30x12", + "VALUE", "0", 0 ); + named[159] = decl( "txtImageRGBW", IupText( "cmdInteger" ), + "NC", "5", + "SIZE", "30x12", + "VALUE", "0", 0 ); + named[160] = decl( "txtImageRGBH", IupText( "cmdInteger" ), + "NC", "5", + "SIZE", "30x12", + "VALUE", "0", 0 ); + named[161] = decl( "btImageRGBPut", IupButton( "Put", "cmdImageRGBPut" ), + "SIZE", "30", 0 ); + named[162] = decl( "btImageRGBGet", IupButton( "Get", "cmdImageRGBGet" ), + "SIZE", "30", 0 ); + named[163] = decl( "btImageRGBHide", IupButton( "Hide", "cmdMsgHide" ), + "SIZE", "30", 0 ); + named[164] = decl( "ImageRGBData", IupVbox( + decl( 0, IupHbox( + decl( 0, IupLabel( "X:" ), + "SIZE", "30x9", 0 ), + named[157] /* txtImageRGBX */, + decl( 0, IupFill(), + "SIZE", "5", 0 ), + decl( 0, IupLabel( "Y:" ), + "SIZE", "30x9", 0 ), + named[158] /* txtImageRGBY */, + NULL), + "ALIGNMENT", "ACENTER", 0 ), + decl( 0, IupHbox( + decl( 0, IupLabel( "Width:" ), + "SIZE", "30x9", 0 ), + named[159] /* txtImageRGBW */, + decl( 0, IupFill(), + "SIZE", "5", 0 ), + decl( 0, IupLabel( "Height:" ), + "SIZE", "30x9", 0 ), + named[160] /* txtImageRGBH */, + NULL), + "ALIGNMENT", "ACENTER", 0 ), + NULL), 0 ); + named[165] = decl( "ImageRGBDeskTop", IupVbox( + IupHbox( + IupFill(), + named[164] /* ImageRGBData */, + IupFill(), + NULL), + IupHbox( + IupFill(), + named[162] /* btImageRGBGet */, + decl( 0, IupFill(), + "SIZE", "5", 0 ), + named[161] /* btImageRGBPut */, + decl( 0, IupFill(), + "SIZE", "5", 0 ), + named[163] /* btImageRGBHide */, + IupFill(), + NULL), + NULL), 0 ); + named[166] = decl( "dlgImageRGB", IupDialog( + named[165] /* ImageRGBDeskTop */ + ), + "PARENTDIALOG", "dlgMain", + "TITLE", "RGB Image", + "MAXBOX", "NO", + "MINBOX", "NO", + "CLOSE_CB", "cmdMsgHide", + "RESIZE", "NO", + "MARGIN", "5x5", 0 ); + named[167] = decl( "btCDTest", IupButton( "Close", "cmdCloseAbout" ), 0 ); + named[168] = decl( "AboutDeskTop", IupHbox( + IupFill(), + decl( 0, IupVbox( + IupLabel( "CD Test 5.3" ), + decl( 0, IupFill(), + "SIZE", "5", 0 ), + IupLabel( "Antonio Scuri" ), + IupLabel( "Diego Nehab" ), + decl( 0, IupFill(), + "SIZE", "5", 0 ), + IupLabel( "Tecgraf/PUC-Rio" ), + decl( 0, IupFill(), + "SIZE", "5", 0 ), + IupLabel( "CD Library Version" ), + named[169] = decl( "lblVersion", IupLabel( "" ), 0 ), + named[167] /* btCDTest */, + NULL), + "ALIGNMENT", "ACENTER", 0 ), + IupFill(), + NULL), + "MARGIN", "5x5", + "GAP", "2", 0 ); + named[170] = decl( "dlgHelpAbout", IupDialog( + named[168] /* AboutDeskTop */ + ), + "PARENTDIALOG", "dlgMain", + "TITLE", "About", + "MAXBOX", "NO", + "MINBOX", "NO", + "RESIZE", "NO", 0 ); +} diff --git a/test/cdtest/colobar.h b/test/cdtest/colobar.h new file mode 100644 index 0000000..263cb53 --- /dev/null +++ b/test/cdtest/colobar.h @@ -0,0 +1,7 @@ +#ifndef COLORBAR_H +#define COLORBAR_H + +int ColorBarInit(Ihandle *parent, Ihandle *canvas, long int *fc, long int *bc); +void ColorBarClose(void); + +#endif diff --git a/test/cdtest/colorbar.c b/test/cdtest/colorbar.c new file mode 100644 index 0000000..c83f539 --- /dev/null +++ b/test/cdtest/colorbar.c @@ -0,0 +1,565 @@ +/*=========================================================================*/ +/* COLORBAR.C - 03/03/96 */ +/* Color Bar implementation. */ +/*=========================================================================*/ + +/*- Constantes: -----------------------------------------------------------*/ +#define NUMCOLORS 16 + +/*- Bibliotecas padrao usadas ---------------------------------------------*/ +#include <stdio.h> +#include <string.h> +#include <stdlib.h> +#include <time.h> + +/*- Inclusao das bibliotecas IUP e CD: ------------------------------------*/ +#include <iup.h> +#include <cd.h> +#include <cdiup.h> +#include <iupkey.h> + +/*- Declaraccoes e Prototypes: --------------------------------------------*/ +#include "cdtest.h" + +#undef isdigit +#include <ctype.h> + + +/*- Globais: --------------------------------------------------------------*/ +static struct { + cdCanvas *bar_canvas; /* canvas da colorbar */ + cdCanvas *other_canvas; /* canvas ativo anteriormente */ + int w, h; /* dimensoes do canvas */ + int bgr, bgg, bgb; /* cor de fundo do dialogo pai */ + int bci, fci; /* indice das cores correntes */ + long *p_foreground, *p_background; /* variaveis do usuario */ + long colors[NUMCOLORS]; /* palheta interna */ + int bounds[2*(NUMCOLORS+1)]; /* fronteiras dos elementos da palheta */ +} colorbar; /* contexto da colorbar */ + +/*- Dialogo para mudancca da cor da palheta: ------------------------------*/ +static struct { + Ihandle *dialog; + Ihandle *red; + Ihandle *green; + Ihandle *blue; + Ihandle *alpha; + Ihandle *bt_ok; + Ihandle *bt_cancel; + int to_change; +} color_change; + +/*- Macros: ---------------------------------------------------------------*/ +#define ignore(_) (void)(_) + +/*-------------------------------------------------------------------------*/ +/* Filtra inteiros. */ +/*-------------------------------------------------------------------------*/ +static int integer(Ihandle *self, int c) +{ + ignore(self); + + if (isdigit(c)) { + return IUP_DEFAULT; + } + else if ((c==K_TAB) || (c==K_CR) || (c==K_LEFT) || + (c==K_RIGHT) || (c==K_DEL) || (c==K_BS) || (c==K_sTAB)) { + return IUP_DEFAULT; + } + else { + return IUP_IGNORE; + } +} + +/*-------------------------------------------------------------------------*/ +/* Retorna a cor de indice i. */ +/*-------------------------------------------------------------------------*/ +static long getcolor(int i) +{ + if (i<=NUMCOLORS) { + return colorbar.colors[i-1]; + } + else return 0; +} + +/*-------------------------------------------------------------------------*/ +/* Mostra a caixa de dialogo Color Change. */ +/*-------------------------------------------------------------------------*/ +static void color_change_show(int c) +{ + unsigned char r, g, b, a; + long color; + char s[4]; + + /* mostra o dialogo Color Change */ + IupShow(color_change.dialog); + + /* mostra a cor atual */ + color = getcolor(c); + cdDecodeColor(color, &r, &g, &b); + sprintf(s, "%d", r); + IupSetAttribute(color_change.red, IUP_VALUE, s); + sprintf(s, "%d", g); + IupSetAttribute(color_change.green, IUP_VALUE, s); + sprintf(s, "%d", b); + IupSetAttribute(color_change.blue, IUP_VALUE, s); + + a = cdDecodeAlpha(color); + sprintf(s, "%d", a); + IupSetAttribute(color_change.alpha, IUP_VALUE, s); + + /* salva cor a ser alterada no contexto */ + color_change.to_change = c; +} + + +/*-------------------------------------------------------------------------*/ +/* Cancela a operaccao de mudancca de cor. */ +/*-------------------------------------------------------------------------*/ +static int color_change_cancel(void) +{ + IupHide(color_change.dialog); + + return IUP_DEFAULT; +} + +/*-------------------------------------------------------------------------*/ +/* Determina as fronteiras dos elementos da palheta. */ +/*-------------------------------------------------------------------------*/ +static void bounds(int dx, int p, int *x) +{ + int i; /* contador dos intervalos */ + int j; /* indice do vetor x */ + int k; /* inicio do intervalo */ + int e; /* erro da aproximacao inteira */ + int _2p; /* dobro do numero de intervalos */ + int q; /* quociente da divisao inteira */ + int _2r; /* dobro do resto da divisao inteira */ + + /* inicializa as variaveis */ + k = 0; /* inicio do primeiro intervalo */ + j = 0; /* indice do vetor x */ + e = 0; /* inicializa o erro */ + _2p = p << 1; /* dobro do numero de intervalos */ + _2r = (dx % p) << 1; /* dobro do resto da divisao inteira */ + q = dx / p; /* quociente da divisao inteira */ + + /* gera o vetor de intervalos */ + for (i=0; i<p; i++) { /* para p intervalos */ + e += _2r; /* incrementa o erro */ + x[j++] = k; /* inicio do intervalo */ + if (e >= p) { /* estourou? */ + e -= _2p; /* ajusta o novo limite */ + k += q + 1; /* arredonda para cima */ + } + else { + k += q; /* arredonda para baixo */ + } + x[j++] = k - 2; /* fim do intervalo */ + } +} + +/*-------------------------------------------------------------------------*/ +/* Acha a cor onde o mouse foi clicado por busca binaria. Retorna zero se */ +/* o click foi fora de qualquer cor. */ +/*-------------------------------------------------------------------------*/ +static int findwhere(int x, int y, int c1, int c2) +{ + int mid; + + /* so pode ser este ou o click foi fora */ + if (c1 == c2) { + if ((x > colorbar.bounds[c1<<1]) && (x < colorbar.bounds[(c1<<1) + 1])) { + if ((y > 0) && (y < (colorbar.h-1))) return c1; + else return 0; + } + else return 0; + } + + /* elemento intermediario */ + mid = (c1 + c2)>>1; + + /* se o click estah a direita do elemento intermediario */ + if (x > colorbar.bounds[(mid<<1) + 1]) return findwhere(x, y, mid+1, c2); + + /* se estah a esquerda do elemento intermediario */ + else if (x < colorbar.bounds[mid<<1]) return findwhere(x, y, c1, mid-1); + + /* estah no meio do intermediario e a vertical estah legal, eh esse */ + else if ((y > 0) && (y < (colorbar.h-1))) return mid; + + /* o programa nunca chega aqui, mas o compilador fica feliz */ + return 0; +} + +/*-------------------------------------------------------------------------*/ +/* Desenha a moldura do elemento da palheta. */ +/*-------------------------------------------------------------------------*/ +static void hollowbox(int xmin, int xmax, int ymin, int ymax) +{ + cdForeground(cdEncodeColor(255, 255, 255)); + cdLine(xmin, ymin, xmax, ymin); + cdLine(xmax, ymin+1, xmax, ymax); + + cdForeground(cdEncodeColor(102, 102, 102)); + cdLine(xmin, ymin+1, xmin, ymax); + cdLine(xmin+1, ymax, xmax-1, ymax); +} + + +/*-------------------------------------------------------------------------*/ +/* Muda a cor de indice i e retorna a anterior. */ +/*-------------------------------------------------------------------------*/ +static long changecolor(int i, long color) +{ + long temp; + + if (i<=NUMCOLORS) { + temp = colorbar.colors[i-1]; + colorbar.colors[i-1] = color; + return temp; + } + else return 0; +} + + +/*-------------------------------------------------------------------------*/ +/* Inicializa o vetor de cores. */ +/*-------------------------------------------------------------------------*/ +static void resetcolors(void) +{ + colorbar.colors[ 0] = cdEncodeColor( 0, 0, 0); + colorbar.colors[ 1] = cdEncodeColor(153, 153, 153); + colorbar.colors[ 2] = cdEncodeColor(178, 178, 178); + colorbar.colors[ 3] = cdEncodeColor(255, 255, 255); + colorbar.colors[ 4] = cdEncodeColor(255, 255, 0); + colorbar.colors[ 5] = cdEncodeColor(255, 0, 0); + colorbar.colors[ 6] = cdEncodeColor(255, 0, 255); + colorbar.colors[ 7] = cdEncodeColor( 0, 255, 255); + colorbar.colors[ 8] = cdEncodeColor( 0, 0, 255); + colorbar.colors[ 9] = cdEncodeColor( 0, 255, 0); + colorbar.colors[10] = cdEncodeColor(128, 128, 0); + colorbar.colors[11] = cdEncodeColor(128, 0, 0); + colorbar.colors[12] = cdEncodeColor(128, 0, 128); + colorbar.colors[13] = cdEncodeColor( 0, 128, 128); + colorbar.colors[14] = cdEncodeColor( 0, 0, 128); + colorbar.colors[15] = cdEncodeColor( 0, 128, 0); +} + +/*-------------------------------------------------------------------------*/ +/* Desenha a ColorBar. */ +/*-------------------------------------------------------------------------*/ +static int fColorBarRepaint(void) +{ + int i; + double dt; + + /* salva o canvas ativo no momento */ + colorbar.other_canvas = cdActiveCanvas(); + + /* ativa o canvas da colorbar */ + if (cdActivate(colorbar.bar_canvas) == CD_ERROR) { + printf("Color Bar Error: Unable to activate canvas."); + return 1; + } + cdClear(); + + /* desenha as cores da palheta */ + for (i=2; i<=2*NUMCOLORS; i+=2) { + cdForeground(getcolor(i>>1)); + cdBox(colorbar.bounds[i], colorbar.bounds[i+1], 1, colorbar.h-1); + hollowbox(colorbar.bounds[i], colorbar.bounds[i+1], 1, colorbar.h-1); + } + + /* desenha o fedback */ + dt = (colorbar.w-1)/(NUMCOLORS+1); + /* desenha a cor de fundo */ + cdForeground(getcolor(colorbar.bci)); + cdBox(1, (int)(2.0*dt/3.0), 1, (int)(2.0*(colorbar.h-1)/3.0)); + hollowbox(1, (int)(2.0*dt/3.0), 1, (int)(2.0*(colorbar.h-1)/3.0)); + /* desenha a cor de frente */ + cdForeground(getcolor(colorbar.fci)); + cdBox((int)(dt/3.0), (int)(dt)-1, (int)((colorbar.h-1)/3.0)+1, colorbar.h-1); + hollowbox((int)(dt/3.0), (int)(dt)-1, (int)((colorbar.h-1)/3.0)+1, colorbar.h-1); + + /* restaura o canvas anteriormente ativo */ + cdActivate(colorbar.other_canvas); + + return IUP_DEFAULT; +} + +/*-------------------------------------------------------------------------*/ +/* Funcao associada ao botao do mouse. */ +/*-------------------------------------------------------------------------*/ +static int fColorBarButtonCB(Ihandle *self, int b, int e, int x, int y, char *r) +{ + int c; + + ignore(self); + ignore(r); + + /* salva o canvas ativo no momento */ + colorbar.other_canvas = cdActiveCanvas(); + + /* ativa o canvas da colorbar */ + if (cdActivate(colorbar.bar_canvas) == CD_ERROR) { + printf("Color Bar Error: Unable to activate canvas."); + return 1; + } + + /* converte para coordenadas do canvas */ + cdUpdateYAxis(&y); + + /* se o botao foi pressionado */ + if (e) { + + /* acha onde foi o click */ + c = findwhere(x, y, 1, 16); + + /* se o click foi dentro de alguma cor... */ + if (c != 0) { + + /* botao da esquerda eh mudancca de cor de foreground */ + if (b == IUP_BUTTON1) { + + /* se for double-click */ + if ((isdouble(r)) && (c == colorbar.fci) ) { + + /* mostra o dialogo */ + color_change_show(c); + } + + /* muda a cor de frente corrente */ + else { + + /* largura de cada celula */ + double dt; + unsigned char r, g, b; + + /* altera a variavel do usuario */ + *(colorbar.p_foreground) = getcolor(c); + + /* altera o indice da cor de frente corrente */ + colorbar.fci = c; + + cdDecodeColor(getcolor(colorbar.fci), &r, &g, &b); + sprintf(ctgc.status_line, "cdForeground(cdEncodeColor(%d, %d, %d))", (int)r, (int)g, (int)b); + set_status(); + + /* altera o feedback no primeiro elemento da palheta */ + dt = (colorbar.w-1)/(NUMCOLORS+1); + cdForeground(getcolor(colorbar.fci)); + cdBox((int)(dt/3.0), (int)(dt)-1, (int)((colorbar.h-1)/3.0)+1, colorbar.h-1); + hollowbox((int)(dt/3.0), (int)(dt)-1, (int)((colorbar.h-1)/3.0)+1, colorbar.h-1); + } + + } + + else if (b == IUP_BUTTON3) { + + /* largura de cada celula */ + double dt; + unsigned char r, g, b; + + /* altera a variavel do usuario */ + *(colorbar.p_background) = getcolor(c); + + /* altera o indice da cor de frente corrente */ + colorbar.bci = c; + + cdDecodeColor(getcolor(colorbar.bci), &r, &g, &b); + sprintf(ctgc.status_line, "cdBackground(cdEncodeColor(%d, %d, %d))", (int)r, (int)g, (int)b); + set_status(); + + /* altera o feedback no primeiro elemento da palheta */ + dt = (colorbar.w-1)/(NUMCOLORS+1); + cdForeground(getcolor(colorbar.bci)); + cdBox(1, (int)(2.0*dt/3.0), 1, (int)(2.0*(colorbar.h-1)/3.0)); + hollowbox(1, (int)(2.0*dt/3.0), 1, (int)(2.0*(colorbar.h-1)/3.0)); + cdForeground(getcolor(colorbar.fci)); + cdBox((int)(dt/3.0), (int)(dt)-1, (int)((colorbar.h-1)/3.0)+1, colorbar.h-1); + hollowbox((int)(dt/3.0), (int)(dt)-1, (int)((colorbar.h-1)/3.0)+1, colorbar.h-1); + } + + } + + } + + /* restaura o canvas anteriormente ativo */ + cdActivate(colorbar.other_canvas); + + return IUP_DEFAULT; +} + +/*-------------------------------------------------------------------------*/ +/* Callback associado ao resize do canvas. */ +/*-------------------------------------------------------------------------*/ +static int fColorBarResizeCB(Ihandle *self, int w, int h) +{ + ignore(self); + + /* atualiza as dimensoes do canvas */ + colorbar.w = w; + colorbar.h = h; + + /* atualiza as fronteiras dos elementos da palheta */ + bounds(colorbar.w, NUMCOLORS+1, colorbar.bounds); + + return IUP_DEFAULT; +} + +/*-------------------------------------------------------------------------*/ +/* Confirma a mudanca de cores. */ +/*-------------------------------------------------------------------------*/ +static int color_change_ok(void) +{ + int r, g, b, a; + long new_color; + + /* pega os novos valores */ + r = IupGetInt(color_change.red, IUP_VALUE); + g = IupGetInt(color_change.green, IUP_VALUE); + b = IupGetInt(color_change.blue, IUP_VALUE); + a = IupGetInt(color_change.alpha, IUP_VALUE); + + /* se todos forem validos */ + if ((r<256)&&(g<256)&&(b<256)) { + + /* esconde a caixa de dialogo */ + IupHide(color_change.dialog); + + /* atualiza a cor no contexto */ + new_color = cdEncodeColor((unsigned char)r, (unsigned char) g, (unsigned char) b); + new_color = cdEncodeAlpha(new_color, (unsigned char)a); + changecolor(color_change.to_change, new_color); + + colorbar.fci = color_change.to_change; + + /* redesenha a colorbar */ + fColorBarRepaint(); + + /* altera a variavel do usuario */ + *(colorbar.p_foreground) = new_color; + + } + + return IUP_DEFAULT; +} + +/*-------------------------------------------------------------------------*/ +/* Inicializa a ColorBar. */ +/*-------------------------------------------------------------------------*/ +void ColorBarClose(void) +{ + cdKillCanvas(colorbar.bar_canvas); + IupDestroy(color_change.dialog); +} + +int ColorBarInit(Ihandle *parent, Ihandle *canvas, long *foreground, long *background) +{ + char *bg_color; + + /* pega a cor de fundo do dialogo parente */ + bg_color = IupGetAttribute(parent, "BGCOLOR"); + if (bg_color == NULL) { + printf("Color Bar Error: Unable to get bg_color."); + return 0; + } + sscanf(bg_color, "%d %d %d", &colorbar.bgr, &colorbar.bgg, &colorbar.bgb); + + /* inicializa as cores de fundo e de frente defaults */ + colorbar.fci = 1; + colorbar.bci = 4; + + /* pega o enderecco das variaveis do usuario */ + colorbar.p_foreground = foreground; + colorbar.p_background = background; + + /* inicializa a palheta interna de cores */ + resetcolors(); + + /* cria o canvas do CD */ + colorbar.bar_canvas = cdCreateCanvas(CD_IUP, canvas); + if (colorbar.bar_canvas == NULL) { + printf("Color Bar Error: Unable to create canvas."); + return 0; + } + + /* salva o canvas ativo no momento */ + colorbar.other_canvas = cdActiveCanvas(); + + /* ativa o canvas da colorbar */ + if (cdActivate(colorbar.bar_canvas) == CD_ERROR) { + printf("Color Bar Error: Unable to activate canvas."); + return 0; + } + + /* pega as dimensoes do canvas pela primeira vez */ + cdGetCanvasSize(&colorbar.w, &colorbar.h, NULL, NULL); + + /* restaura o canvas anteriormente ativo */ + if (colorbar.other_canvas != NULL) cdActivate(colorbar.other_canvas); + + /* cria o vetor com as fronteiras dos elementos da palheta */ + bounds(colorbar.w, NUMCOLORS+1, colorbar.bounds); + + /* associa os callbacks */ + IupSetFunction("cmdColorBarButtonCB", (Icallback) fColorBarButtonCB); + IupSetFunction("cmdColorBarRepaint", (Icallback) fColorBarRepaint); + IupSetFunction("cmdColorBarResizeCB", (Icallback) fColorBarResizeCB); + + /* desenha a barra de cores pela primeira vez */ + fColorBarRepaint(); + + /* inicializa o dialogo de troca de cores da palheta */ + color_change.dialog = IupDialog( + IupVbox( + IupHbox( + IupLabel("R:"), + color_change.red = IupText("cmdInteger"), + IupLabel("G:"), + color_change.green = IupText("cmdInteger"), + IupLabel("B:"), + color_change.blue = IupText("cmdInteger"), + IupLabel("A:"), + color_change.alpha = IupText("cmdInteger"), + NULL + ), + IupHbox( + IupFill(), + color_change.bt_ok = IupButton("OK", "cmdColorChangeOK"), + color_change.bt_cancel = IupButton("Cancel", "cmdColorChangeCancel"), + IupFill(), + NULL + ), + NULL + ) + ); + + /* atributos do dialogo */ + IupSetAttribute(color_change.dialog, IUP_TITLE, "Color Change:"); + IupSetAttribute(color_change.dialog, IUP_MARGIN, "5x5"); + IupSetAttribute(color_change.dialog, IUP_GAP, "5"); + IupSetAttribute(color_change.dialog, "MAXBOX", "NO"); + IupSetAttribute(color_change.dialog, "MINBOX", "NO"); + IupSetAttribute(color_change.dialog, "PARENTDIALOG", "dlgMain"); + + /* atributos dos texts */ + IupSetFunction("cmdInteger", (Icallback) integer); + IupSetAttribute(color_change.red, "NC", "3"); + IupSetAttribute(color_change.green, "NC", "3"); + IupSetAttribute(color_change.blue, "NC", "3"); + IupSetAttribute(color_change.alpha, "NC", "3"); + IupSetAttribute(color_change.red, "SIZE", "24"); + IupSetAttribute(color_change.green, "SIZE", "24"); + IupSetAttribute(color_change.blue, "SIZE", "24"); + IupSetAttribute(color_change.alpha, "SIZE", "24"); + + /* atributos dos botoes */ + IupSetAttribute(color_change.bt_ok, IUP_SIZE, "30"); + IupSetAttribute(color_change.bt_cancel, IUP_SIZE, "30"); + IupSetFunction("cmdColorChangeCancel", (Icallback) color_change_cancel); + IupSetFunction("cmdColorChangeOK", (Icallback) color_change_ok); + + return 1; +} diff --git a/test/cdtest/config.mak b/test/cdtest/config.mak new file mode 100644 index 0000000..9453944 --- /dev/null +++ b/test/cdtest/config.mak @@ -0,0 +1,24 @@ +APPNAME = cdtest + +SRC = cdtest.c cdtest_led.c colorbar.c drivers.c list.c rubber.c + +ifeq "$(TEC_SYSNAME)" "Win32" + SRC += cdtest.rc +endif + +USE_CD=Yes +USE_IUP=Yes + +cdtest_led.c: cdtest.led + ledc -f cdtest_loadled -o cdtest_led.c cdtest.led + +USE_STATIC = Yes + +#IUP = ../../../iup +CD = ../.. + +ifneq ($(findstring Win, $(TEC_SYSNAME)), ) + LIBS = cdpdflib +else + SLIB = $(CD)/lib/$(TEC_UNAME)/libcdpdflib.a +endif diff --git a/test/cdtest/drivers.c b/test/cdtest/drivers.c new file mode 100644 index 0000000..93918d5 --- /dev/null +++ b/test/cdtest/drivers.c @@ -0,0 +1,457 @@ +/*=========================================================================*/ +/* DRIVERS.C - 10/02/95 */ +/* Suporte para os drivers do CD. */ +/*=========================================================================*/ + +/*- Bibliotecas padrao usadas: --------------------------------------------*/ +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +/*- Inclusao das bibliotecas IUP e CD: ------------------------------------*/ +#include <iup.h> +#include <cd.h> +#include <cdiup.h> + +/*- 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 <cdclipbd.h> + +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 <cdps.h> + +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 <cdpdf.h> + +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 <cdcgm.h> + +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 <cddxf.h> + +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 <cddgn.h> + +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 <cdmf.h> +/*-------------------------------------------------------------------------*/ +/* 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 <cdwmf.h> + +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 <cdemf.h> + +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 <cdprint.h> + +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 +} diff --git a/test/cdtest/list.c b/test/cdtest/list.c new file mode 100644 index 0000000..a41c5bc --- /dev/null +++ b/test/cdtest/list.c @@ -0,0 +1,278 @@ +/*=========================================================================*/ +/* LIST.C 10/12/95 */ +/* Funcoes para a manipulacao da lista de primitivas. */ +/*=========================================================================*/ + +/*- Bibliotecas padrao usadas ---------------------------------------------*/ +#include <stdio.h> +#include <stdlib.h> +#include <math.h> +#include <string.h> + +/*- Inclusao das bibliotecas IUP e CD: ------------------------------------*/ +#include <iup.h> +#include <cd.h> +#include <cdiup.h> + +/*- Prototypes e declaracoes do CD Test: ----------------------------------*/ +#include "cdtest.h" + +/*- Contexto do CD Test (declarado em CDTEST.C): --------------------------*/ +extern tCTC ctgc; + +/*-------------------------------------------------------------------------*/ +/* Adiciona um ponto ao poligono temporario corrente. */ +/*-------------------------------------------------------------------------*/ +int newpolypoint(int x, int y) +{ + if (ctgc.num_points <= MAXPOINTS) { + ctgc.points[ctgc.num_points].x = x; + ctgc.points[ctgc.num_points].y = y; + ctgc.num_points++; + return TRUE; + } + else return FALSE; +} + +tList* newNode(void) +{ + tList *newnode = (tList *) malloc(sizeof (tList)); + newnode->next = NULL; + + if (ctgc.head != NULL) + { + tList *temp; + for(temp = ctgc.head; temp->next; temp = (tList *)temp->next); + temp->next = newnode; /* coloca o novo item no final da lista */ + } + else + ctgc.head = newnode; + + return newnode; +} + +/*-------------------------------------------------------------------------*/ +/* Adiciona uma linha/rect/caixa a lista de primitivas. */ +/*-------------------------------------------------------------------------*/ + +static int newtLB(int x1, int y1, int x2, int y2, int type) +{ + tList* newnode = newNode(); + + newnode->type = type; + newnode->par.lineboxpar.x1 = x1; + newnode->par.lineboxpar.x2 = x2; + newnode->par.lineboxpar.y1 = y1; + newnode->par.lineboxpar.y2 = y2; + newnode->par.lineboxpar.foreground = ctgc.foreground; + newnode->par.lineboxpar.background = ctgc.background; + newnode->par.lineboxpar.line_style = ctgc.line_style; + newnode->par.lineboxpar.line_width = ctgc.line_width; + newnode->par.lineboxpar.write_mode = ctgc.write_mode; + newnode->par.lineboxpar.line_cap = ctgc.line_cap; + newnode->par.lineboxpar.line_join = ctgc.line_join; + newnode->par.lineboxpar.interior_style = ctgc.interior_style; + newnode->par.lineboxpar.back_opacity = ctgc.back_opacity; + newnode->par.lineboxpar.hatch = ctgc.hatch; + + return TRUE; +} + +int newline(int x1, int y1, int x2, int y2) +{ + return newtLB(x1, y1, x2, y2, LINE); +} + +int newrect(int x1, int x2, int y1, int y2) +{ + return newtLB(x1, y1, x2, y2, RECT); +} + +int newbox(int x1, int x2, int y1, int y2) +{ + return newtLB(x1, y1, x2, y2, BOX); +} + +/*-------------------------------------------------------------------------*/ +/* Adiciona um arc/sector/chord a lista de primitivas. */ +/*-------------------------------------------------------------------------*/ +static int newtAS(int xc, int yc, int w, int h, double angle1, double angle2, int type) +{ + tList* newnode = newNode(); + + newnode->type = type; + newnode->par.arcsectorpar.xc = xc; + newnode->par.arcsectorpar.yc = yc; + newnode->par.arcsectorpar.w = w; + newnode->par.arcsectorpar.h = h; + newnode->par.arcsectorpar.angle1 = angle1; + newnode->par.arcsectorpar.angle2 = angle2; + newnode->par.arcsectorpar.foreground = ctgc.foreground; + newnode->par.arcsectorpar.background = ctgc.background; + newnode->par.arcsectorpar.line_style = ctgc.line_style; + newnode->par.arcsectorpar.line_width = ctgc.line_width; + newnode->par.arcsectorpar.line_cap = ctgc.line_cap; + newnode->par.arcsectorpar.line_join = ctgc.line_join; + newnode->par.arcsectorpar.write_mode = ctgc.write_mode; + newnode->par.arcsectorpar.interior_style = ctgc.interior_style; + newnode->par.arcsectorpar.back_opacity = ctgc.back_opacity; + newnode->par.arcsectorpar.hatch = ctgc.hatch; + + return TRUE; +} + +int newarc(int xc, int yc, int w, int h, double angle1, double angle2) +{ + return newtAS(xc, yc, w, h, angle1, angle2, ARC); +} + +int newsector(int xc, int yc, int w, int h, double angle1, double angle2) +{ + return newtAS(xc, yc, w, h, angle1, angle2, SECTOR); +} + +int newchord(int xc, int yc, int w, int h, double angle1, double angle2) +{ + return newtAS(xc, yc, w, h, angle1, angle2, CHORD); +} + +/*-------------------------------------------------------------------------*/ +/* Adiciona um pixel a lista de primitivas. */ +/*-------------------------------------------------------------------------*/ +int newpixel(int x, int y) +{ + tList* newnode = newNode(); + + newnode->type = PIXEL; + newnode->par.pixelpar.x = x; + newnode->par.pixelpar.y = y; + newnode->par.pixelpar.foreground = ctgc.foreground; + newnode->par.pixelpar.write_mode = ctgc.write_mode; + + return TRUE; +} + +/*-------------------------------------------------------------------------*/ +/* Adiciona um metafile a lista de primitivas. */ +/*-------------------------------------------------------------------------*/ +int newmetafile(char *filename, cdContext* ctx) +{ + tList* newnode = newNode(); + + newnode->type = META; + newnode->par.metapar.filename = (char *) malloc(strlen(filename) + 1); + newnode->par.metapar.ctx = ctx; + strcpy(newnode->par.metapar.filename, filename); + + return TRUE; +} + +/*-------------------------------------------------------------------------*/ +/* Adiciona uma marca a lista de primitivas. */ +/*-------------------------------------------------------------------------*/ +int newmark(int x, int y, int mark_size) +{ + tList* newnode = newNode(); + + newnode->type = MARK; + newnode->par.markpar.x = x; + newnode->par.markpar.y = y; + newnode->par.markpar.mark_size = mark_size; + newnode->par.markpar.foreground = ctgc.foreground; + newnode->par.markpar.write_mode = ctgc.write_mode; + newnode->par.markpar.mark_type = ctgc.mark_type; + + return TRUE; +} + +/*-------------------------------------------------------------------------*/ +/* Adiciona um texto a lista de primitivas. */ +/*-------------------------------------------------------------------------*/ +int newtext(int x, int y, char *s) +{ + tList* newnode = newNode(); + + newnode->type = TEXT; + newnode->par.textpar.x = x; + newnode->par.textpar.y = y; + newnode->par.textpar.foreground = ctgc.foreground; + newnode->par.textpar.background = ctgc.background; + newnode->par.textpar.font_style = ctgc.font_style; + newnode->par.textpar.font_typeface = ctgc.font_typeface; + newnode->par.textpar.font_size = ctgc.font_size; + newnode->par.textpar.write_mode = ctgc.write_mode; + newnode->par.textpar.back_opacity = ctgc.back_opacity; + newnode->par.textpar.text_alignment = ctgc.text_alignment; + newnode->par.textpar.text_orientation = ctgc.text_orientation; + newnode->par.textpar.s = (char *) malloc(strlen(s) + 1); + strcpy(newnode->par.textpar.s, s); + + return TRUE; +} + +/*-------------------------------------------------------------------------*/ +/* Adiciona um poligono a lista de primitivas. */ +/*-------------------------------------------------------------------------*/ +int newpoly(void) +{ + tList* newnode = newNode(); + + newnode->type = POLY; + newnode->par.polypar.foreground = ctgc.foreground; + newnode->par.polypar.background = ctgc.background; + newnode->par.polypar.line_style = ctgc.line_style; + newnode->par.polypar.line_width = ctgc.line_width; + newnode->par.polypar.write_mode = ctgc.write_mode; + newnode->par.polypar.fill_mode = ctgc.fill_mode; + newnode->par.polypar.line_cap = ctgc.line_cap; + newnode->par.polypar.line_join = ctgc.line_join; + newnode->par.polypar.poly_mode = ctgc.poly_mode; + newnode->par.polypar.interior_style = ctgc.interior_style; + newnode->par.polypar.back_opacity = ctgc.back_opacity; + newnode->par.polypar.hatch = ctgc.hatch; + newnode->par.polypar.points = (tPoint *) malloc(ctgc.num_points*sizeof(tPoint)); + newnode->par.polypar.num_points = ctgc.num_points; + memcpy(newnode->par.polypar.points, ctgc.points, ctgc.num_points*sizeof(tPoint)); + newnode->next = NULL; + + return TRUE; +} + +/*-------------------------------------------------------------------------*/ +/* Mata a lista de primitivas. */ +/*-------------------------------------------------------------------------*/ +void dellist(void) +{ + tList *killer, *back; + + for (killer = ctgc.head; killer; killer = back) { + back = (tList *) (killer->next); + if (killer->type == TEXT) { /* se for TEXT... */ + free(killer->par.textpar.s); /* ...mata a string */ + } + if (killer->type == POLY) { /* se for POLY... */ + free(killer->par.polypar.points); /* ...mata os pontos */ + } + free(killer); + } + ctgc.head = NULL; +} + +/*-------------------------------------------------------------------------*/ +/* Mata a ultima primitiva. */ +/*-------------------------------------------------------------------------*/ +void dellast(void) +{ + tList *killer; + + if (ctgc.head == NULL ) return; + else if (ctgc.head->next == NULL) { + free(ctgc.head); + ctgc.head = NULL; + } + else { + for (killer = ctgc.head; killer->next->next; killer = killer->next); + free(killer->next); + killer->next = NULL; + } +} diff --git a/test/cdtest/rubber.c b/test/cdtest/rubber.c new file mode 100644 index 0000000..80a5921 --- /dev/null +++ b/test/cdtest/rubber.c @@ -0,0 +1,387 @@ +/*=========================================================================*/ +/* RUBBER.C - 10/12/95 */ +/* Funcoes para o desenho interativo das primitivas. */ +/*=========================================================================*/ + +/*- Bibliotecas padrao usadas ---------------------------------------------*/ +#include <stdio.h> +#include <stdlib.h> +#include <math.h> +#include <string.h> + +/*- Inclusao das bibliotecas IUP e CD: ------------------------------------*/ +#include <iup.h> +#include <cd.h> +#include <cdiup.h> + +/*- Prototypes e declaracoes do CD Test: ----------------------------------*/ +#include "cdtest.h" + +/*- Contexto do CD Test (declarado em CDTEST.C): --------------------------*/ +extern tCTC ctgc; + +/*- Parametros para o desenho das primitivas: -----------------------------*/ +extern tLinePos line_pos; +extern tBoxPos box_pos; +extern tPixelPos pixel_pos; +extern tMarkPos mark_pos; +extern tArcPos arc_pos; + +/*-------------------------------------------------------------------------*/ +/* Segue as coordenadas do mouse atualizando o TXT apropriado. */ +/*-------------------------------------------------------------------------*/ +void follow(int x, int y) +{ + static char mx[10], my[10]; + static char nx[10], ny[10]; + + sprintf(nx, "%d", x); + sprintf(ny, "%d", y); + + switch(ctgc.cur_prim) { + case PIXEL: + /* atualiza os parametros do pixel */ + pixel_pos.x = x; + pixel_pos.y = y; + /* atualiza a caixa de dialogo */ + sprintf(mx, "%d", x); + sprintf(my, "%d", y); + IupSetAttribute(IupGetHandle("txtPixelX"), IUP_VALUE, mx); + IupSetAttribute(IupGetHandle("txtPixelY"), IUP_VALUE, my); + break; + case MARK: + /* atualiza os parametros da mark */ + mark_pos.x = x; + mark_pos.y = y; + /* atualiza a caixa de dialogo */ + sprintf(mx, "%d", x); + sprintf(my, "%d", y); + IupSetAttribute(IupGetHandle("txtMarkX"), IUP_VALUE, mx); + IupSetAttribute(IupGetHandle("txtMarkY"), IUP_VALUE, my); + break; + case RECT: + case BOX: + /* atualiza os parametros da box */ + if (ctgc.following) { + if (x < box_pos.x) { + box_pos.xmin = x; + box_pos.xmax = box_pos.x; + } + else { + box_pos.xmax = x; + box_pos.xmin = box_pos.x; + } + + if (y < box_pos.y) { + box_pos.ymin = y; + box_pos.ymax = box_pos.y; + } + else { + box_pos.ymax = y; + box_pos.ymin = box_pos.y; + } + } + else { + box_pos.xmax = box_pos.xmin = x; + box_pos.ymax = box_pos.ymin = y; + } + /* atualiza a caixa de dialogo */ + sprintf(mx, "%d", box_pos.xmin); + sprintf(nx, "%d", box_pos.xmax); + sprintf(my, "%d", box_pos.ymin); + sprintf(ny, "%d", box_pos.ymax); + IupSetAttribute(IupGetHandle("txtLBX1"), IUP_VALUE, mx); + IupSetAttribute(IupGetHandle("txtLBX2"), IUP_VALUE, nx); + IupSetAttribute(IupGetHandle("txtLBY1"), IUP_VALUE, my); + IupSetAttribute(IupGetHandle("txtLBY2"), IUP_VALUE, ny); + break; + case LINE: + sprintf(mx, "%d", x); + sprintf(my, "%d", y); + line_pos.x2 = x; + line_pos.y2 = y; + if (ctgc.following) { + IupSetAttribute(IupGetHandle("txtLBX2"), IUP_VALUE, mx); + IupSetAttribute(IupGetHandle("txtLBY2"), IUP_VALUE, my); + } + else { + line_pos.x1 = x; + line_pos.y1 = y; + IupSetAttribute(IupGetHandle("txtLBX1"), IUP_VALUE, mx); + IupSetAttribute(IupGetHandle("txtLBX2"), IUP_VALUE, mx); + IupSetAttribute(IupGetHandle("txtLBY1"), IUP_VALUE, my); + IupSetAttribute(IupGetHandle("txtLBY2"), IUP_VALUE, my); + } + break; + case ARC: /* ARC e SECTOR... */ + case CHORD: + case SECTOR: /* ...sao equivalentes */ + if (ctgc.following) { + /* atualiza os parametros do arc */ + arc_pos.w = 2*abs(arc_pos.xc-x+1); + arc_pos.h = 2*abs(arc_pos.yc-y+1); + /* atualiza a caixa de dialogo */ + sprintf(mx, "%d", arc_pos.w); + sprintf(my, "%d", arc_pos.h); + IupSetAttribute(IupGetHandle("txtASW"), IUP_VALUE, mx); + IupSetAttribute(IupGetHandle("txtASH"), IUP_VALUE, my); + } + else { + /* atualiza os parametros do arc */ + arc_pos.xc = x; + arc_pos.xc = y; + /* atualiza a caixa de dialogo */ + sprintf(mx, "%d", x); + sprintf(my, "%d", y); + IupSetAttribute(IupGetHandle("txtASXC"), IUP_VALUE, mx); + IupSetAttribute(IupGetHandle("txtASYC"), IUP_VALUE, my); + } + break; + case TEXT: + IupSetAttribute(IupGetHandle("txtTextX"), IUP_VALUE, nx); + IupSetAttribute(IupGetHandle("txtTextY"), IUP_VALUE, ny); + break; + case CLIP: + if (ctgc.following) { + if (atoi(nx) >= atoi(mx)) { + IupSetAttribute(IupGetHandle("txtClipXmax"), IUP_VALUE, nx); + IupSetAttribute(IupGetHandle("txtClipXmin"), IUP_VALUE, mx); + } + else { + IupSetAttribute(IupGetHandle("txtClipXmin"), IUP_VALUE, nx); + IupSetAttribute(IupGetHandle("txtClipXmax"), IUP_VALUE, mx); + } + if (atoi(ny) >= atoi(my)) { + IupSetAttribute(IupGetHandle("txtClipYmax"), IUP_VALUE, ny); + IupSetAttribute(IupGetHandle("txtClipYmin"), IUP_VALUE, my); + } + else { + IupSetAttribute(IupGetHandle("txtClipYmin"), IUP_VALUE, ny); + IupSetAttribute(IupGetHandle("txtClipYmax"), IUP_VALUE, my); + } + } + else { + IupSetAttribute(IupGetHandle("txtClipXmin"), IUP_VALUE, nx); + IupSetAttribute(IupGetHandle("txtClipYmin"), IUP_VALUE, ny); + IupSetAttribute(IupGetHandle("txtClipXmax"), IUP_VALUE, nx); + IupSetAttribute(IupGetHandle("txtClipYmax"), IUP_VALUE, ny); + strcpy(mx, nx); + strcpy(my, ny); + } + break; + case IMAGE: + if (ctgc.following) { + if (atoi(mx) <= atoi(nx)) { + sprintf(nx, "%d", abs(atoi(nx)-atoi(mx))); + IupSetAttribute(IupGetHandle("txtImageW"), IUP_VALUE, nx); + } + else { + IupSetAttribute(IupGetHandle("txtImageX"), IUP_VALUE, nx); + sprintf(nx, "%d", abs(atoi(nx)-atoi(mx))); + IupSetAttribute(IupGetHandle("txtImageW"), IUP_VALUE, nx); + } + if (atoi(my) <= atoi(ny)) { + sprintf(ny, "%d", abs(atoi(ny)-atoi(my))); + IupSetAttribute(IupGetHandle("txtImageH"), IUP_VALUE, ny); + } + else { + IupSetAttribute(IupGetHandle("txtImageY"), IUP_VALUE, ny); + sprintf(ny, "%d", abs(atoi(ny)-atoi(my))); + IupSetAttribute(IupGetHandle("txtImageH"), IUP_VALUE, ny); + } + } + else { + IupSetAttribute(IupGetHandle("txtImageX"), IUP_VALUE, nx); + IupSetAttribute(IupGetHandle("txtImageY"), IUP_VALUE, ny); + strcpy(mx, nx); + strcpy(my, ny); + } + break; + case RGB: + if (ctgc.following) { + if (atoi(mx) <= atoi(nx)) { + sprintf(nx, "%d", abs(atoi(nx)-atoi(mx))); + IupSetAttribute(IupGetHandle("txtImageRGBW"), IUP_VALUE, nx); + } + else { + IupSetAttribute(IupGetHandle("txtImageRGBX"), IUP_VALUE, nx); + sprintf(nx, "%d", abs(atoi(nx)-atoi(mx))); + IupSetAttribute(IupGetHandle("txtImageRGBW"), IUP_VALUE, nx); + } + if (atoi(my) <= atoi(ny)) { + sprintf(ny, "%d", abs(atoi(ny)-atoi(my))); + IupSetAttribute(IupGetHandle("txtImageRGBH"), IUP_VALUE, ny); + } + else { + IupSetAttribute(IupGetHandle("txtImageRGBY"), IUP_VALUE, ny); + sprintf(ny, "%d", abs(atoi(ny)-atoi(my))); + IupSetAttribute(IupGetHandle("txtImageRGBH"), IUP_VALUE, ny); + } + } + else { + IupSetAttribute(IupGetHandle("txtImageRGBX"), IUP_VALUE, nx); + IupSetAttribute(IupGetHandle("txtImageRGBY"), IUP_VALUE, ny); + strcpy(mx, nx); + strcpy(my, ny); + } + break; + default: + break; + } +} + + +/*-------------------------------------------------------------------------*/ +/* Desenha uma linha em rubber band. */ +/*-------------------------------------------------------------------------*/ +void line(tRubber what, int x, int y) +{ + static int x1, x2, y1, y2; + static int lastwhat = CLOSE; + + switch (what) { + case NEWPOINT: + x1 = x2 = x; /* novo segmento comeca no... */ + y1 = y2 = y; /* ...fim do primeiro */ + break; + case MOVE: + if (lastwhat == MOVE) { + cdLine(x1, y1, x2, y2); /* apaga o segmento velho */ + } + cdLine(x1, y1, x, y); /* desenha o novo */ + x2 = x; /* o novo se... */ + y2 = y; /* ...torna velho */ + break; + case REPAINT: + cdLine(x1, y1, x2, y2); /* recupera o segmento perdido */ + return; /* nao modifica lastwhat */ + case CLOSE: + cdLine(x1, y1, x2, y2); /* apaga o ultimo segmento */ + break; + default: + break; + } + lastwhat = what; +} + +/*:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*/ +/* Desenha uma caixa vazia (funcao nao exportada). */ +/*:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*/ +static void frame(int x1, int y1, int x2, int y2) +{ + cdLine(x1, y1, x1, y2); + cdLine(x2, y1, x2, y2); + cdLine(x1, y1, x2, y1); + cdLine(x1, y2, x2, y2); +} + +/*-------------------------------------------------------------------------*/ +/* Desenha uma caixa em rubber band. */ +/*-------------------------------------------------------------------------*/ +void box(tRubber what, int x, int y) +{ + static int x1, x2, y1, y2; + static int lastwhat = CLOSE; + + switch (what) { + case NEWPOINT: + x1 = x2 = x; /* novo segmento comeca no... */ + y1 = y2 = y; /* fim do primeiro */ + break; + case MOVE: + if (lastwhat == MOVE) { + frame(x1, y1, x2, y2); /* apaga a caixa anterior */ + } + frame(x1, y1, x, y); /* desenha a nova */ + x2 = x; /* o novo se... */ + y2 = y; /* torna velho */ + break; + case REPAINT: + frame(x1, y1, x2, y2); /* restaura a caixa perdida */ + return; /* nao modifica lastwhat */ + case CLOSE: + frame(x1, y1, x2, y2); /* apaga a caixa definitiva */ + break; + default: + break; + } + lastwhat = what; +} + +/*-------------------------------------------------------------------------*/ +/* Desenha uma caixa centrada, em rubber band. */ +/*-------------------------------------------------------------------------*/ +void arc(tRubber what, int x, int y) +{ + static int xc, yc, y1, x1; + static int lastwhat = CLOSE; + + switch (what) { + case CENTER: + xc = x1 = x; /* novo segmento comeca no... */ + yc = y1 = y; /* fim do primeiro */ + break; + case MOVE: + if (lastwhat == MOVE) { + cdArc(xc, yc, 2*abs(xc-x1+1), 2*abs(yc-y1+1), 0, 360); + } + cdArc(xc, yc, 2*abs(xc-x+1), 2*abs(yc-y+1), 0, 360); + x1 = x; /* o novo se... */ + y1 = y; /* torna velho */ + break; + case REPAINT: + cdArc(xc, yc, 2*abs(xc-x1+1), 2*abs(yc-y1+1), 0, 360); + return; /* nao modifica lastwhat */ + case CLOSE: + cdArc(xc, yc, 2*abs(xc-x1+1), 2*abs(yc-y1+1), 0, 360); + break; + default: + break; + } + lastwhat = what; +} + +/*-------------------------------------------------------------------------*/ +/* Desenha o poligono em rubber band. */ +/*-------------------------------------------------------------------------*/ +void polygon(tRubber what, int x, int y) +{ + static int x1, x2, y1, y2; + static int lastwhat = CLOSE; + + switch (what) { + case NEWPOINT: + if (lastwhat != CLOSE) { + cdLine(x1, y1, x2, y2); /* ...apaga a anterior e... */ + cdLine(x1, y1, x, y); /* desenha a definitiva */ + } + x1 = x; /* novo segmento comeca no... */ + y1 = y; /* fim do primeiro */ + break; + case MOVE: + if (lastwhat == MOVE) { + cdLine(x1, y1, x2, y2); /* apaga o segmento velho */ + } + cdLine(x1, y1, x, y); /* desenha o novo */ + x2 = x; /* o novo se... */ + y2 = y; /* torna velho */ + break; + case REPAINT: + cdLine(x1, y1, x2, y2); /* recupera o segmento perdido */ + return; /* nao modifica lastwhat */ + case CLOSE: + if (lastwhat != CLOSE) { + int i; + cdLine(x1, y1, x2, y2); /* apaga o ultimo segmento */ + /* apaga o poligono temporario inteiro */ + for (i=0; (i<ctgc.num_points-1); i++) { + cdLine(ctgc.points[i].x, ctgc.points[i].y, + ctgc.points[i+1].x, ctgc.points[i+1].y); + } + } + break; + default: + break; + } + lastwhat = what; +} diff --git a/test/lua/cdalign.wlua b/test/lua/cdalign.wlua new file mode 100644 index 0000000..849d258 --- /dev/null +++ b/test/lua/cdalign.wlua @@ -0,0 +1,67 @@ +require("iupcdaux") -- utility module used in some samples + +dlg = iupcdaux.new_dialog(w, h) +cnv = dlg[1] -- retrieve the IUP canvas + +function DrawText(canvas, x, y, text, align) + canvas:TextAlignment(align) + canvas:Mark(x, y) + canvas:Text(x, y, text) + xmin, xmax, ymin, ymax = canvas:GetTextBox(x, y, text) + canvas:Rect(xmin, xmax, ymin, ymax) +end + +text_aligment = { + cd.NORTH, + cd.SOUTH, + cd.EAST, + cd.WEST, + cd.NORTH_EAST, + cd.NORTH_WEST, + cd.SOUTH_EAST, + cd.SOUTH_WEST, + cd.CENTER, + cd.BASE_LEFT, + cd.BASE_CENTER, + cd.BASE_RIGHT +} + +text_aligment_str = { + "NORTH", + "SOUTH", + "EAST", + "WEST", + "NORTH EAST", + "NORTH WEST", + "SOUTH EAST", + "SOUTH WEST", + "CENTER", + "BASE LEFT", + "BASE CENTER", + "BASE RIGHT" +} + + +-- custom function used in action callback +-- from the iupcdaux module +function cnv:Draw(canvas) + canvas:MarkSize(40) + canvas:Font("Courier", cd.PLAIN, 12) + + i = 1 + while (i <= 12) do + DrawText(canvas, 100, 35*i + 30, text_aligment_str[i], text_aligment[i]) + i = i + 1 + end +end + + +--tmpCanvas = cd.CreateCanvas(cd.PS, "cdalign.ps") +--tmpCanvas:Clear() +--cnv:Draw(tmpCanvas) +--tmpCanvas:Kill() + + +dlg:show() +iup.MainLoop() + diff --git a/test/lua/cdtext.wlua b/test/lua/cdtext.wlua new file mode 100644 index 0000000..556d02f --- /dev/null +++ b/test/lua/cdtext.wlua @@ -0,0 +1,59 @@ +require("iupcdaux") -- utility module used in some samples + +--require"cdluacontextplus" +--cd.UseContextPlus(1) + +dlg = iupcdaux.new_dialog(w, h) +cnv = dlg[1] -- retrieve the IUP canvas + +function DrawTextBox(canvas, x, y, text) + canvas:Mark(x, y) + canvas:Text(x, y, text) + w, h = canvas:GetTextSize(text) + xmin = x - w/2 + ymin = y - h/2 + xmax = x + w/2 + ymax = y + h/2 + canvas:Line(xmin, ymin, xmax, ymin) + canvas:Line(xmin, ymin, xmin, ymax) + canvas:Line(xmin, ymax, xmax, ymax) + canvas:Line(xmax, ymin, xmax, ymax) +end + +-- custom function used in action callback +-- from the iupcdaux module +function cnv:Draw(canvas) + + -- Available in ContextPlus drivers or in IMAGERGB driver + -- canvas:SetAttribute("ANTIALIAS", "1") + + canvas:TextAlignment(cd.CENTER) + canvas:MarkSize(40) + + canvas:Font("Courier", cd.PLAIN, 12) + local aa = canvas:GetAttribute("ANTIALIAS") + if (aa == "1") then + DrawTextBox(canvas, 130, 30, "ANTIALIAS=1") + else + DrawTextBox(canvas, 130, 30, "ANTIALIAS=0") + end + + canvas:Font("Courier", cd.ITALIC, 34) + DrawTextBox(canvas, 130, 160, "xxxxxppx") + + canvas:Font("Times", cd.PLAIN, 12) + DrawTextBox(canvas, 130, 290, "taaaa") + + canvas:Font("Times", cd.BOLD, 14) + DrawTextBox(canvas, 130, 370, "gggggggg") +end + + +--tmpCanvas = cd.CreateCanvas(cd.PS, "cdtext.ps") +--tmpCanvas:Clear() +--cnv:Draw(tmpCanvas) +--tmpCanvas:Kill() + + +dlg:show() +iup.MainLoop() diff --git a/test/lua/imagergb.wlua b/test/lua/imagergb.wlua new file mode 100644 index 0000000..b7c6f11 --- /dev/null +++ b/test/lua/imagergb.wlua @@ -0,0 +1,35 @@ +require("iupcdaux") -- utility module used in some samples + +w = 100 +h = 100 + +image_rgb = cd.CreateImageRGB(w, h) + +size = w * h +i = 0 +while i < size do + + if i < size/2 then + image_rgb.r[i] = 255 + image_rgb.g[i] = 0 + image_rgb.b[i] = 0 + else + image_rgb.r[i] = 0 + image_rgb.g[i] = 0 + image_rgb.b[i] = 255 + end + + i = i + 1 +end + +dlg = iupcdaux.new_dialog(w, h) +cnv = dlg[1] -- retrieve the IUP canvas + +-- custom function used in action callback +-- from the iupcdaux module +function cnv:Draw(canvas) + canvas:PutImageRectRGB(image_rgb, 0, 0, w, h, 0, 0, 0, 0) +end + +dlg:show() +iup.MainLoop() diff --git a/test/lua/iupcdaux.lua b/test/lua/iupcdaux.lua new file mode 100644 index 0000000..a56ac1a --- /dev/null +++ b/test/lua/iupcdaux.lua @@ -0,0 +1,45 @@ +require"cdlua" +require"cdluaiup" +require"iuplua" + +iupcdaux = {} +iupcdaux.count = 0 + +-- Function to easy create a new IUP dialog with an IUP canvas, +-- and a CD canvas pointing to that IUP canvas + +function iupcdaux.new_dialog(w, h) + + -- defaul size + w = w or 300 + h = h or 200 + + cnv = iup.canvas { bgcolor="255 255 255", rastersize=w.."x"..h } + dlg = iup.dialog { cnv; title="canvas_"..(iupcdaux.count+1) } + + function cnv:map_cb() + canvas = cd.CreateCanvas(cd.IUP, self) + self.canvas = canvas -- store the CD canvas in a IUP attribute + end + + function cnv:action() + canvas = self.canvas -- retrieve the CD canvas from the IUP attribute + canvas:Activate() + canvas:Clear() + + if (self.Draw) then + self:Draw(canvas) + end + end + + function dlg:close_cb() + cnv = self[1] + canvas = cnv.canvas -- retrieve the CD canvas from the IUP attribute + canvas:Kill() + self:destroy() + return iup.IGNORE -- because we destroy the dialog + end + + iupcdaux.count = iupcdaux.count + 1 + return dlg +end diff --git a/test/lua/iuplua_cdlua.wlua b/test/lua/iuplua_cdlua.wlua new file mode 100644 index 0000000..f595987 --- /dev/null +++ b/test/lua/iuplua_cdlua.wlua @@ -0,0 +1,58 @@ +require"iuplua" +require"cdlua" +require"cdluaiup" + +cnv = iup.canvas {size = "200x100"} + +box = iup.vbox{ + iup.button { title="Version" }, + cnv, + iup.button { title="Close" }, + } + +dlg = iup.dialog{box; title="Example IUPLUA/CDLUA"} + +function cnv:map_cb() + canvas = cd.CreateCanvas(cd.IUP, self) + self.canvas = canvas -- store the CD canvas in a IUP attribute +end + +function dlg:close_cb() + cnv = self[1][2] + canvas = cnv.canvas -- retrieve the CD canvas from the IUP attribute + canvas:Kill() + self:destroy() + return iup.IGNORE -- because we destroy the dialog +end + +bt_version = dlg[1][1] +function bt_version:action() + iup.Message("Version", "CD Version: " .. cd.Version() .. "\nIUP Version: " .. iup.Version() .. "\n" .. _VERSION) +end + +bt_close = dlg[1][3] +function bt_close:action() + return iup.CLOSE +end + +function cnv:action() + canvas = self.canvas -- retrieve the CD canvas from the IUP attribute + + canvas:Activate() + canvas:Clear() + canvas:Foreground (cd.RED) + canvas:Box (10, 55, 10, 55) + canvas:Foreground(cd.EncodeColor(255, 32, 140)) + canvas:Line(0, 0, 300, 100) +end + +function cnv:button_cb(b, e, x, y, r) + print ("Button: " .. "Button="..tostring(b).." Pressed="..tostring(e).." X="..tostring(x).." Y="..tostring(y) ) +end + +function cnv:resize_cb(w, h) + print("Resize: Width="..w.." Height="..h) +end + +dlg:show() +iup.MainLoop() diff --git a/test/lua/rubberband.wlua b/test/lua/rubberband.wlua new file mode 100644 index 0000000..595373a --- /dev/null +++ b/test/lua/rubberband.wlua @@ -0,0 +1,54 @@ +require("iupcdaux") -- utility module used in some samples + +dlg = iupcdaux.new_dialog(w, h) +cnv = dlg[1] -- retrieve the IUP canvas + + +function cnv:button_cb(button,pressed,x,y,r) + canvas = self.canvas -- retrieve the CD canvas from the IUP attribute + + -- start drag if button1 is pressed + if button ==iup.BUTTON1 and pressed == 1 then + y = canvas:UpdateYAxis(y) + + -- prepare for XOR + canvas:Foreground(cd.WHITE) + canvas:WriteMode(cd.XOR) + + xstart = x + ystart = y + drag = 1 + first = 1 + else + if (drag == 1) then + drag = 0 + canvas:Rect(xstart,xend,ystart,yend) + end + end +end + + +function cnv:motion_cb(x,y,r) + canvas = self.canvas -- retrieve the CD canvas from the IUP attribute + + if (drag == 1) then + y = canvas:UpdateYAxis(y) + + if (first == 1) then + first = 0 + else + canvas:Rect(xstart,xend,ystart,yend) + end + + canvas:Rect(xstart,x,ystart,y) + + xend = x + yend = y + end +end + +first = 1 +drag = 0 + +dlg:show() +iup.MainLoop() diff --git a/test/metafile.c b/test/metafile.c new file mode 100644 index 0000000..ab34795 --- /dev/null +++ b/test/metafile.c @@ -0,0 +1,107 @@ +#include <cd.h> +#include <cdmf.h> +void draw(); +int marktype; + +void main(void) +{ + cdCanvas *canvas; + canvas = cdCreateCanvas(CD_METAFILE,"TESTE.MF 100x100"); + cdActivate(canvas); + draw(); + cdKillCanvas(canvas); +} + +void draw(void) +{ + cdMarkSize(5) + cdMarkType(CD_PLUS); + cdMark(10,90); + cdMarkType(CD_STAR); + cdMark(20,90); + cdMarkType(CD_CIRCLE); + cdMark(30,90); + cdMarkType(CD_X); + cdMark(40,90); + cdMarkType(CD_BOX); + cdMark(50,90); + cdMarkType(CD_DIAMOND); + cdMark(60,90); + cdMarkType(CD_HOLLOW_CIRCLE); + cdMark(70,90); + cdMarkType(CD_HOLLOW_BOX); + cdMark(80,90); + cdMarkType(CD_HOLLOW_DIAMOND); + cdMark(90,90); + + cdLineStyle(CD_CONTINUOUS); + cdLine(10,80,80,80); + cdLineStyle(CD_DASHED); + cdLine(10,75,80,75); + cdLineStyle(CD_DOTTED); + cdLine(10,70,80,70); + cdLineStyle(CD_DASH_DOT); + cdLine(10,65,80,65); + cdLineStyle(CD_DASH_DOT_DOT); + cdLine(10,60,80,60); + + cdLineStyle(CD_CONTINUOUS); + + cdHatch(CD_HORIZONTAL); + + cdBegin(CD_FILL); + cdVertex(10,50); + cdVertex(50,50); + cdVertex(50,10); + cdVertex(10,10); + cdEnd(); + + cdHatch(CD_VERTICAL); + cdBegin(CD_FILL); + cdVertex(60,50); + cdVertex(100,50); + cdVertex(100,10); + cdVertex(60,10); + cdEnd(); + + cdHatch(CD_FDIAGONAL); + cdBegin(CD_FILL); + cdVertex(110,50); + cdVertex(150,50); + cdVertex(150,10); + cdVertex(110,10); + cdEnd(); + + cdHatch(CD_BDIAGONAL); + cdBegin(CD_FILL); + cdVertex(160,50); + cdVertex(200,50); + cdVertex(200,10); + cdVertex(160,10); + cdEnd(); + + cdHatch(CD_CROSS); + cdBegin(CD_FILL); + cdVertex(210,50); + cdVertex(250,50); + cdVertex(250,10); + cdVertex(210,10); + cdEnd(); + + cdHatch(CD_DIAGCROSS); + cdBegin(CD_FILL); + cdVertex(260,50); + cdVertex(300,50); + cdVertex(300,10); + cdVertex(260,10); + cdEnd(); + + cdFont(CD_SYSTEM,CD_BOLD,CD_STANDARD); + cdText(10,100,'Teste'); + cdFont(CD_COURIER,CD_BOLD,CD_STANDARD); + cdText(60,100,'Teste'); + cdFont(CD_TIMES_ROMAN,CD_BOLD,CD_STANDARD); + cdText(110,100,'Teste'); + cdFont(CD_HELVETICA,CD_BOLD,CD_STANDARD); + cdText(160,100,'Teste'); +} diff --git a/test/mf/align.mf b/test/mf/align.mf new file mode 100644 index 0000000..110ac39 --- /dev/null +++ b/test/mf/align.mf @@ -0,0 +1,45 @@ +CDMF 383 410 +27 255 255 255 +28 0 0 0 +13 1 +14 0 +15 0 +16 1 +18 0 +17 0 +21 0 0 12 +23 9 +33 0 +24 1 +25 10 +1 +25 5 +27 0 255 255 +12 151 328 +21 2 0 10 +8 151 329 TMWjfgoiuá +23 10 +8 150 328 TMWjfgoiuá +23 11 +8 151 327 TMWjfgoiuá +12 151 253 +23 0 +8 151 253 TMWjfgoiuá +23 1 +8 151 252 TMWjfgoiuá +23 2 +8 150 254 TMWjfgoiuá +23 3 +8 152 255 TMWjfgoiuá +12 285 335 +23 8 +8 285 336 TMWjfgoiuá +12 150 151 +23 4 +8 151 151 TMWjfgoiuá +23 5 +8 150 151 TMWjfgoiuá +23 6 +8 149 152 TMWjfgoiuá +23 7 +8 149 152 TMWjfgoiuá diff --git a/test/mf/alignorient.mf b/test/mf/alignorient.mf new file mode 100644 index 0000000..dbaa907 --- /dev/null +++ b/test/mf/alignorient.mf @@ -0,0 +1,44 @@ +CDMF 383 410 +27 255 255 255 +28 0 255 255 +13 1 +14 1 +15 0 +16 1 +18 0 +17 0 +21 0 0 12 +23 9 +33 60 +24 1 +25 10 +1 +25 5 +12 151 328 +21 2 0 24 +8 151 329 Text +23 10 +8 150 328 Text +23 11 +8 151 327 Text +12 151 253 +23 0 +8 151 253 Text +23 1 +8 151 252 Text +23 2 +8 150 254 Text +23 3 +8 152 255 Text +12 285 335 +23 8 +8 285 336 Text +12 150 151 +23 4 +8 151 151 Text +23 5 +8 150 151 Text +23 6 +8 149 152 Text +23 7 +8 149 152 Text diff --git a/test/mf/alignxor.mf b/test/mf/alignxor.mf new file mode 100644 index 0000000..0b7f25d --- /dev/null +++ b/test/mf/alignxor.mf @@ -0,0 +1,44 @@ +CDMF 383 410 +27 255 255 255 +28 0 255 255 +13 0 +14 1 +15 0 +16 1 +18 0 +17 0 +21 0 0 12 +23 9 +33 0 +24 1 +25 10 +1 +25 5 +12 151 328 +21 2 0 24 +8 151 329 Text +23 10 +8 150 328 Text +23 11 +8 151 327 Text +12 151 253 +23 0 +8 151 253 Text +23 1 +8 151 252 Text +23 2 +8 150 254 Text +23 3 +8 152 255 Text +12 285 335 +23 8 +8 285 336 Text +12 150 151 +23 4 +8 151 151 Text +23 5 +8 150 151 Text +23 6 +8 149 152 Text +23 7 +8 149 152 Text diff --git a/test/mf/arc.mf b/test/mf/arc.mf new file mode 100644 index 0000000..cf4a8b7 --- /dev/null +++ b/test/mf/arc.mf @@ -0,0 +1,25 @@ +CDMF 383 410 +27 255 255 255 +28 0 0 0 +13 1 +14 0 +15 0 +16 1 +18 0 +17 0 +21 0 0 12 +23 9 +33 0 +24 1 +25 10 +1 +13 0 +6 59 351 74 84 0 360 +6 185 348 86 76 0 180 +6 155 309 94 60 180 360 +6 307 284 86 84 180 360 +6 55 218 80 72 0 90 +6 181 190 66 84 90 180 +6 79 124 86 96 180 270 +6 236 150 82 92 45 100 +6 228 104 112 118 100 200 diff --git a/test/mf/circles.mf b/test/mf/circles.mf new file mode 100644 index 0000000..e1ea53c --- /dev/null +++ b/test/mf/circles.mf @@ -0,0 +1,47 @@ +CDMF 619334269 619334269 +27 255 255 255 +28 0 0 0 +13 1 +14 0 +15 0 +16 1 +60 0 +61 0 +18 0 +17 0 +74 0 12 System +23 9 +33 0 +20 10 10 +255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 +255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 +255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 +255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 0 0 255 0 0 255 255 255 255 255 255 255 255 255 255 +255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 0 0 255 0 0 255 0 0 255 255 255 255 255 255 255 +255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 0 0 255 0 0 255 0 0 255 255 255 255 255 255 255 +255 255 255 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 0 255 0 0 255 255 255 255 255 255 255 +255 255 255 255 255 255 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 0 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 19 10 10 +0 0 0 0 0 0 0 0 0 0 +0 1 1 1 1 1 0 0 0 0 +0 1 0 0 0 1 1 0 0 0 +0 1 0 0 0 1 0 1 0 0 +0 1 0 0 0 1 0 0 1 0 +0 1 1 1 1 1 0 0 1 0 +0 0 1 0 0 0 1 0 1 0 +0 0 0 1 0 0 0 1 1 0 +0 0 0 0 1 1 1 1 1 0 +0 0 0 0 0 0 0 0 0 0 +17 0 +1 +3 0 272 0 396 +6 582 376 788 718 0 360 +6 555 359 376 374 0 360 +6 537 360 124 116 0 360 +6 534 359 32 32 0 360 +6 534 359 8 8 0 360 +6 858 436 4 4 0 360 +6 869 425 4 6 0 360 +6 851 424 2 2 0 360 diff --git a/test/mf/cliparea.mf b/test/mf/cliparea.mf new file mode 100644 index 0000000..eb5a938 --- /dev/null +++ b/test/mf/cliparea.mf @@ -0,0 +1,80 @@ +CDMF 499 442 +27 255 255 255 +28 0 0 0 +13 1 +14 0 +15 0 +16 1 +18 0 +17 0 +21 0 0 12 +23 9 +33 0 +24 1 +25 10 +20 10 10 +255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 +255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 +255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 +255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 0 0 255 0 0 255 255 255 255 255 255 255 255 255 255 +255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 0 0 255 0 0 255 0 0 255 255 255 255 255 255 255 +255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 0 0 255 0 0 255 0 0 255 255 255 255 255 255 255 +255 255 255 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 0 255 0 0 255 255 255 255 255 255 255 +255 255 255 255 255 255 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 0 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 19 10 10 +0 0 0 0 0 0 0 0 0 0 +0 1 1 1 1 1 0 0 0 0 +0 1 0 0 0 1 1 0 0 0 +0 1 0 0 0 1 0 1 0 0 +0 1 0 0 0 1 0 0 1 0 +0 1 1 1 1 1 0 0 1 0 +0 0 1 0 0 0 1 0 1 0 +0 0 0 1 0 0 0 1 1 0 +0 0 0 0 1 1 1 1 1 0 +0 0 0 0 0 0 0 0 0 0 +1 +3 72 308 136 284 +2 1 +28 255 0 0 +18 0 +17 0 +5 7 369 38 368 +27 0 0 0 +4 144 347 376 144 +28 0 0 255 +4 214 329 362 161 +4 202 136 362 220 +4 18 282 169 83 +27 255 255 255 +34 27 161 211 318 +27 0 0 0 +6 56 190 114 72 0 360 +27 255 255 255 +18 0 +17 0 +7 166 150 52 60 0 360 +8 57 129 Text +8 92 132 Text +8 101 134 Text +8 166 278 Text +8 169 287 Text +8 206 285 Text +18 0 +17 0 +9 1 +10 190 260 +10 305 342 +10 399 254 +10 262 197 +10 181 220 +11 +18 0 +17 0 +9 0 +10 120 253 +10 72 324 +10 134 326 +10 141 294 +11 diff --git a/test/mf/fill.mf b/test/mf/fill.mf new file mode 100644 index 0000000..8367875 --- /dev/null +++ b/test/mf/fill.mf @@ -0,0 +1,48 @@ +CDMF 480 405 +27 255 255 255 +28 0 0 0 +13 1 +14 0 +15 0 +16 1 +18 0 +17 0 +21 0 0 12 +23 9 +33 0 +24 1 +25 10 +20 10 10 +255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 +255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 +255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 +255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 0 0 255 0 0 255 255 255 255 255 255 255 255 255 255 +255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 0 0 255 0 0 255 0 0 255 255 255 255 255 255 255 +255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 0 0 255 0 0 255 0 0 255 255 255 255 255 255 255 +255 255 255 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 0 255 0 0 255 255 255 255 255 255 255 +255 255 255 255 255 255 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 0 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 19 10 10 +0 0 0 0 0 0 0 0 0 0 +0 1 1 1 1 1 0 0 0 0 +0 1 0 0 0 1 1 0 0 0 +0 1 0 0 0 1 0 1 0 0 +0 1 0 0 0 1 0 0 1 0 +0 1 1 1 1 1 0 0 1 0 +0 0 1 0 0 0 1 0 1 0 +0 0 0 1 0 0 0 1 1 0 +0 0 0 0 1 1 1 1 1 0 +0 0 0 0 0 0 0 0 0 0 +1 +3 0 272 0 396 +28 255 0 0 +17 0 +13 0 +5 40 111 256 330 +17 1 +5 153 215 265 326 +17 2 +5 43 155 140 206 +17 3 +5 219 324 107 201 diff --git a/test/mf/fill_x_hollow.mf b/test/mf/fill_x_hollow.mf new file mode 100644 index 0000000..b8f429a --- /dev/null +++ b/test/mf/fill_x_hollow.mf @@ -0,0 +1,170 @@ +CDMF 1239 759 +27 255 255 255 +28 0 0 0 +13 1 +14 0 +15 0 +16 1 +60 0 +61 0 +18 0 +17 0 +74 0 12 System +23 9 +33 0 +20 10 10 +255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 +255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 +255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 +255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 0 0 255 0 0 255 255 255 255 255 255 255 255 255 255 +255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 0 0 255 0 0 255 0 0 255 255 255 255 255 255 255 +255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 0 0 255 0 0 255 0 0 255 255 255 255 255 255 255 +255 255 255 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 0 255 0 0 255 255 255 255 255 255 255 +255 255 255 255 255 255 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 0 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 19 10 10 +0 0 0 0 0 0 0 0 0 0 +0 1 1 1 1 1 0 0 0 0 +0 1 0 0 0 1 1 0 0 0 +0 1 0 0 0 1 0 1 0 0 +0 1 0 0 0 1 0 0 1 0 +0 1 1 1 1 1 0 0 1 0 +0 0 1 0 0 0 1 0 1 0 +0 0 0 1 0 0 0 1 1 0 +0 0 0 0 1 1 1 1 1 0 +0 0 0 0 0 0 0 0 0 0 +17 0 +1 +3 0 272 0 396 +18 0 +17 0 +20 10 10 +255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 +255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 +255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 +255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 0 0 255 0 0 255 255 255 255 255 255 255 255 255 255 +255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 0 0 255 0 0 255 0 0 255 255 255 255 255 255 255 +255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 0 0 255 0 0 255 0 0 255 255 255 255 255 255 255 +255 255 255 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 0 255 0 0 255 255 255 255 255 255 255 +255 255 255 255 255 255 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 0 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 19 10 10 +0 0 0 0 0 0 0 0 0 0 +0 1 1 1 1 1 0 0 0 0 +0 1 0 0 0 1 1 0 0 0 +0 1 0 0 0 1 0 1 0 0 +0 1 0 0 0 1 0 0 1 0 +0 1 1 1 1 1 0 0 1 0 +0 0 1 0 0 0 1 0 1 0 +0 0 0 1 0 0 0 1 1 0 +0 0 0 0 1 1 1 1 1 0 +0 0 0 0 0 0 0 0 0 0 +17 0 +1 +18 0 +17 0 +9 2 +10 55 428 +10 300 427 +10 121 345 +10 159 499 +10 252 334 +11 +18 0 +17 0 +9 2 +10 444 432 +10 637 430 +10 472 357 +10 529 502 +10 596 350 +11 +18 0 +17 0 +9 2 +10 499 98 +10 684 96 +10 680 215 +10 546 215 +10 546 171 +10 633 169 +10 634 132 +10 578 132 +10 578 258 +10 473 256 +11 +18 0 +17 0 +9 2 +10 90 94 +10 264 95 +10 259 220 +10 140 220 +10 141 149 +10 218 151 +10 218 117 +10 168 116 +10 168 255 +10 73 253 +11 +28 255 0 0 +9 0 +10 55 428 +10 300 427 +10 121 345 +10 159 499 +10 252 334 +11 +18 0 +17 0 +58 1 +9 0 +10 444 432 +10 637 430 +10 472 357 +10 529 502 +10 596 350 +11 +18 0 +17 0 +9 0 +10 499 98 +10 684 96 +10 680 215 +10 546 215 +10 546 171 +10 633 169 +10 634 132 +10 578 132 +10 578 258 +10 473 256 +11 +18 0 +17 0 +58 0 +9 0 +10 90 94 +10 264 95 +10 259 220 +10 140 220 +10 141 149 +10 218 151 +10 218 117 +10 168 116 +10 168 255 +10 73 253 +11 +28 0 0 0 +34 318 394 283 376 +28 255 0 0 +18 0 +17 0 +5 318 394 283 376 +28 0 0 0 +6 363 174 82 148 0 360 +28 255 0 0 +18 0 +17 0 +7 363 174 82 148 0 360 diff --git a/test/mf/font.mf b/test/mf/font.mf new file mode 100644 index 0000000..72f16ad --- /dev/null +++ b/test/mf/font.mf @@ -0,0 +1,49 @@ +CDMF 488 466 +27 255 255 255 +28 0 0 0 +13 1 +14 0 +15 0 +16 1 +18 0 +17 0 +21 0 0 12 +23 9 +33 0 +24 1 +25 10 +1 +3 0 382 0 409 +21 0 0 24 +13 0 +8 39 420 System +21 0 1 24 +8 48 383 System +21 0 2 24 +8 49 352 System +21 0 3 24 +8 67 317 System +21 1 3 24 +8 229 316 Courier +21 1 2 24 +8 236 352 Courier +21 1 1 24 +8 233 387 Courier +21 1 0 24 +8 229 430 Courier +21 2 0 24 +8 57 264 Times +21 2 1 24 +8 89 226 Times +21 2 2 24 +8 104 187 Times +21 2 3 24 +8 99 157 Times +21 3 0 24 +8 302 273 Helvetica +21 3 1 24 +8 326 238 Helvetica +21 3 2 24 +8 337 200 Helvetica +21 3 3 24 +8 336 145 Helvetica diff --git a/test/mf/grays.mf b/test/mf/grays.mf new file mode 100644 index 0000000..23a176c --- /dev/null +++ b/test/mf/grays.mf @@ -0,0 +1,59 @@ +CDMF 980 599 +27 255 255 255 +28 0 0 0 +13 1 +14 0 +15 0 +16 1 +18 0 +17 0 +21 0 0 12 +23 9 +33 0 +24 1 +25 10 +20 10 10 +255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 +255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 +255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 +255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 0 0 255 0 0 255 255 255 255 255 255 255 255 255 255 +255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 0 0 255 0 0 255 0 0 255 255 255 255 255 255 255 +255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 0 0 255 0 0 255 0 0 255 255 255 255 255 255 255 +255 255 255 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 0 255 0 0 255 255 255 255 255 255 255 +255 255 255 255 255 255 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 0 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 19 10 10 +0 0 0 0 0 0 0 0 0 0 +0 1 1 1 1 1 0 0 0 0 +0 1 0 0 0 1 1 0 0 0 +0 1 0 0 0 1 0 1 0 0 +0 1 0 0 0 1 0 0 1 0 +0 1 1 1 1 1 0 0 1 0 +0 0 1 0 0 0 1 0 1 0 +0 0 0 1 0 0 0 1 1 0 +0 0 0 0 1 1 1 1 1 0 +0 0 0 0 0 0 0 0 0 0 +17 0 +1 +3 0 272 0 396 +25 5 +12 167 511 +12 166 487 +12 167 472 +12 168 440 +12 167 423 +12 168 402 +12 167 377 +12 166 358 +12 166 329 +12 166 312 +31 227 512 0 0 0 +31 227 313 255 255 255 +31 232 401 128 128 128 +31 229 460 64 64 64 +31 232 348 192 192 192 +31 228 484 32 32 32 +31 230 431 96 96 96 +31 233 374 160 160 160 +31 232 326 224 224 224 diff --git a/test/mf/hatch.mf b/test/mf/hatch.mf new file mode 100644 index 0000000..d8e30d6 --- /dev/null +++ b/test/mf/hatch.mf @@ -0,0 +1,47 @@ +CDMF 472 410 +27 255 255 255 +28 0 0 0 +13 1 +14 0 +15 0 +16 1 +18 0 +17 0 +21 0 0 12 +23 9 +33 0 +24 1 +25 10 +1 +3 0 382 0 409 +28 255 0 0 +18 5 +17 0 +5 20 455 264 370 +5 21 452 124 229 +28 0 0 255 +18 0 +13 0 +5 29 78 286 347 +18 1 +5 97 142 285 346 +18 2 +5 165 214 286 345 +18 3 +5 231 287 285 346 +18 4 +5 307 366 284 346 +18 5 +5 386 438 286 347 +13 1 +5 383 439 142 202 +18 4 +5 308 362 145 203 +18 3 +5 234 290 144 202 +18 2 +5 163 218 142 203 +18 1 +5 99 149 140 208 +18 0 +5 28 87 141 208 diff --git a/test/mf/lines.mf b/test/mf/lines.mf new file mode 100644 index 0000000..1b91129 --- /dev/null +++ b/test/mf/lines.mf @@ -0,0 +1,44 @@ +CDMF 511 397 +27 255 255 255 +28 0 0 0 +13 1 +14 0 +15 0 +16 1 +18 0 +17 0 +21 0 0 12 +23 9 +33 0 +24 1 +25 10 +1 +3 0 272 0 396 +28 255 0 0 +13 0 +5 58 439 214 345 +5 59 454 40 158 +28 0 0 255 +4 74 318 419 315 +15 1 +4 79 294 409 286 +15 2 +4 81 276 414 260 +15 3 +4 79 258 416 236 +15 4 +4 77 231 411 223 +13 1 +4 81 49 417 47 +15 3 +4 84 63 427 59 +15 2 +4 88 80 443 75 +15 1 +4 78 100 440 93 +15 0 +4 79 122 436 113 +16 10 +4 76 201 438 201 +15 1 +4 80 174 441 176 diff --git a/test/mf/marks.mf b/test/mf/marks.mf new file mode 100644 index 0000000..2e3d561 --- /dev/null +++ b/test/mf/marks.mf @@ -0,0 +1,33 @@ +CDMF 511 397 +27 255 255 255 +28 0 0 0 +13 1 +14 0 +15 0 +16 1 +18 0 +17 0 +21 0 0 12 +23 9 +33 0 +24 1 +25 10 +1 +3 0 272 0 396 +25 15 +28 0 0 255 +12 37 344 +24 2 +12 84 343 +24 3 +12 129 335 +24 4 +12 173 332 +24 5 +12 227 334 +24 6 +12 274 331 +24 7 +12 297 329 +24 8 +12 338 319 diff --git a/test/mf/natal.mf b/test/mf/natal.mf new file mode 100644 index 0000000..85de77f --- /dev/null +++ b/test/mf/natal.mf @@ -0,0 +1,1933 @@ +CDMF 719 433 +27 255 255 255 +2 0 +1 +3 0 383 0 381 +2 0 +28 0 128 0 +27 255 255 255 +14 0 +15 0 +16 1 +18 0 +17 0 +13 0 +9 1 +10 297 384 +10 375 314 +10 313 310 +10 413 246 +10 331 243 +10 407 166 +10 328 165 +10 368 112 +10 243 115 +10 295 151 +10 228 153 +10 281 225 +10 210 229 +10 283 294 +10 226 299 +10 297 383 +11 +3 0 383 0 381 +2 0 +14 0 +31 285 351 0 128 0 +3 0 383 0 381 +2 0 +14 0 +31 301 356 0 128 0 +3 0 383 0 381 +2 0 +14 0 +31 285 338 0 128 0 +3 0 383 0 381 +2 0 +14 0 +31 275 331 0 128 0 +3 0 383 0 381 +2 0 +14 0 +31 318 332 0 128 0 +3 0 383 0 381 +2 0 +14 0 +31 299 332 0 128 0 +3 0 383 0 381 +2 0 +14 0 +31 297 313 0 128 0 +3 0 383 0 381 +2 0 +14 0 +31 307 289 0 128 0 +3 0 383 0 381 +2 0 +14 0 +31 296 267 0 128 0 +3 0 383 0 381 +2 0 +14 0 +31 274 254 0 128 0 +3 0 383 0 381 +2 0 +14 0 +31 256 253 0 128 0 +3 0 383 0 381 +2 0 +14 0 +31 252 253 0 128 0 +3 0 383 0 381 +2 0 +14 0 +31 252 246 0 128 0 +3 0 383 0 381 +2 0 +14 0 +31 293 243 0 128 0 +3 0 383 0 381 +2 0 +14 0 +31 295 244 0 128 0 +3 0 383 0 381 +2 0 +14 0 +31 292 272 0 128 0 +3 0 383 0 381 +2 0 +14 0 +31 290 277 0 128 0 +3 0 383 0 381 +2 0 +14 0 +31 345 271 0 128 0 +3 0 383 0 381 +2 0 +14 0 +31 363 260 0 128 0 +3 0 383 0 381 +2 0 +14 0 +31 387 254 0 128 0 +3 0 383 0 381 +2 0 +14 0 +31 374 258 0 128 0 +3 0 383 0 381 +2 0 +14 0 +31 300 256 0 128 0 +3 0 383 0 381 +2 0 +14 0 +31 310 254 0 128 0 +3 0 383 0 381 +2 0 +14 0 +31 312 244 0 128 0 +3 0 383 0 381 +2 0 +14 0 +31 323 264 0 128 0 +3 0 383 0 381 +2 0 +14 0 +31 316 267 0 128 0 +3 0 383 0 381 +2 0 +14 0 +31 302 238 0 128 0 +3 0 383 0 381 +2 0 +14 0 +31 282 198 0 128 0 +3 0 383 0 381 +2 0 +14 0 +31 319 193 0 128 0 +3 0 383 0 381 +2 0 +14 0 +31 325 216 0 128 0 +3 0 383 0 381 +2 0 +14 0 +31 350 193 0 128 0 +3 0 383 0 381 +2 0 +14 0 +31 365 187 0 128 0 +3 0 383 0 381 +2 0 +14 0 +31 331 182 0 128 0 +3 0 383 0 381 +2 0 +14 0 +31 236 176 0 128 0 +3 0 383 0 381 +2 0 +14 0 +31 281 169 0 128 0 +3 0 383 0 381 +2 0 +14 0 +31 270 169 0 128 0 +3 0 383 0 381 +2 0 +14 0 +31 277 195 0 128 0 +3 0 383 0 381 +2 0 +14 0 +31 297 219 0 128 0 +3 0 383 0 381 +2 0 +14 0 +31 299 215 0 128 0 +3 0 383 0 381 +2 0 +14 0 +31 291 171 0 128 0 +3 0 383 0 381 +2 0 +14 0 +31 306 164 0 128 0 +3 0 383 0 381 +2 0 +14 0 +31 309 147 0 128 0 +3 0 383 0 381 +2 0 +14 0 +31 273 137 0 128 0 +3 0 383 0 381 +2 0 +14 0 +31 295 128 0 128 0 +3 0 383 0 381 +2 0 +14 0 +31 363 119 0 128 0 +3 0 383 0 381 +2 0 +14 0 +31 317 119 0 128 0 +3 0 383 0 381 +2 0 +14 0 +31 320 123 0 128 0 +3 0 383 0 381 +2 0 +14 0 +31 321 127 0 128 0 +3 0 383 0 381 +2 0 +14 0 +31 341 123 0 128 0 +3 0 383 0 381 +2 0 +14 0 +31 342 127 0 128 0 +3 0 383 0 381 +2 0 +14 0 +31 318 143 0 128 0 +3 0 383 0 381 +2 0 +14 0 +31 316 163 0 128 0 +3 0 383 0 381 +2 0 +28 0 128 0 +27 0 128 0 +14 0 +15 0 +16 1 +18 0 +17 0 +13 0 +9 1 +10 297 382 +10 374 314 +10 316 310 +10 416 244 +10 338 240 +10 406 168 +10 329 164 +10 369 114 +10 243 114 +10 296 151 +10 235 153 +10 281 229 +10 208 229 +10 279 293 +10 238 302 +10 297 380 +11 +3 0 383 0 381 +2 0 +14 0 +25 5 +24 1 +28 255 255 255 +17 0 +15 0 +16 1 +4 107 123 111 127 +4 107 127 111 123 +4 107 125 111 125 +4 109 123 109 127 +17 0 +15 0 +16 1 +3 0 383 0 381 +2 0 +14 0 +25 5 +24 1 +28 255 255 255 +17 0 +15 0 +16 1 +4 294 224 298 228 +4 294 228 298 224 +4 294 226 298 226 +4 296 224 296 228 +17 0 +15 0 +16 1 +3 0 383 0 381 +2 0 +14 0 +25 5 +24 1 +28 255 255 255 +17 0 +15 0 +16 1 +4 318 173 322 177 +4 318 177 322 173 +4 318 175 322 175 +4 320 173 320 177 +17 0 +15 0 +16 1 +3 0 383 0 381 +2 0 +14 0 +25 5 +24 1 +28 255 255 255 +17 0 +15 0 +16 1 +4 293 165 297 169 +4 293 169 297 165 +4 293 167 297 167 +4 295 165 295 169 +17 0 +15 0 +16 1 +3 0 383 0 381 +2 0 +14 0 +25 5 +24 1 +28 255 255 255 +17 0 +15 0 +16 1 +4 294 164 298 168 +4 294 168 298 164 +4 294 166 298 166 +4 296 164 296 168 +17 0 +15 0 +16 1 +3 0 383 0 381 +2 0 +14 0 +25 5 +24 1 +28 153 153 153 +17 0 +15 0 +16 1 +4 153 62 157 66 +4 153 66 157 62 +4 153 64 157 64 +4 155 62 155 66 +17 0 +15 0 +16 1 +3 0 383 0 381 +2 0 +14 0 +25 5 +24 1 +28 153 153 153 +17 0 +15 0 +16 1 +4 251 95 255 99 +4 251 99 255 95 +4 251 97 255 97 +4 253 95 253 99 +17 0 +15 0 +16 1 +3 0 383 0 381 +2 0 +14 0 +15 0 +16 14 +28 153 153 153 +4 298 377 300 377 +3 0 383 0 381 +2 0 +14 0 +15 0 +16 14 +28 0 128 0 +4 300 379 245 308 +3 0 383 0 381 +2 0 +14 0 +15 0 +16 14 +28 0 128 0 +4 241 303 288 300 +3 0 383 0 381 +2 0 +14 0 +15 0 +16 14 +28 0 128 0 +4 288 297 217 232 +3 0 383 0 381 +2 0 +14 0 +15 0 +16 14 +28 0 128 0 +4 217 232 287 232 +3 0 383 0 381 +2 0 +14 0 +15 0 +16 14 +28 0 128 0 +4 286 229 227 156 +3 0 383 0 381 +2 0 +14 0 +15 0 +16 14 +28 0 128 0 +4 227 156 285 153 +3 0 383 0 381 +2 0 +14 0 +15 0 +16 14 +28 0 128 0 +4 285 152 228 104 +3 0 383 0 381 +2 0 +14 0 +15 0 +16 14 +28 0 128 0 +4 228 104 360 106 +3 0 383 0 381 +2 0 +14 0 +15 0 +16 14 +28 0 128 0 +4 359 112 324 166 +3 0 383 0 381 +2 0 +14 0 +15 0 +16 14 +28 0 128 0 +4 324 166 395 167 +3 0 383 0 381 +2 0 +14 0 +15 0 +16 14 +28 0 128 0 +4 392 177 331 238 +3 0 383 0 381 +2 0 +14 0 +15 0 +16 14 +28 0 128 0 +4 331 240 411 249 +3 0 383 0 381 +2 0 +14 0 +15 0 +16 14 +28 0 128 0 +4 411 249 310 312 +3 0 383 0 381 +2 0 +14 0 +15 0 +16 14 +28 0 128 0 +4 310 312 363 321 +3 0 383 0 381 +2 0 +14 0 +15 0 +16 14 +28 0 128 0 +4 363 321 302 375 +3 0 383 0 381 +2 0 +14 0 +15 0 +16 14 +28 0 128 0 +4 302 375 333 323 +3 0 383 0 381 +2 0 +14 0 +15 0 +16 14 +28 0 128 0 +4 319 322 292 367 +3 0 383 0 381 +2 0 +14 0 +15 0 +16 14 +28 0 128 0 +4 285 353 302 316 +3 0 383 0 381 +2 0 +14 0 +15 0 +16 14 +28 0 128 0 +4 273 335 333 243 +3 0 383 0 381 +2 0 +14 0 +15 0 +16 14 +28 0 128 0 +4 258 320 283 308 +3 0 383 0 381 +2 0 +14 0 +15 0 +16 14 +28 0 128 0 +4 303 309 348 253 +3 0 383 0 381 +2 0 +14 0 +15 0 +16 14 +28 0 128 0 +4 333 291 366 254 +3 0 383 0 381 +2 0 +14 0 +15 0 +16 14 +28 0 128 0 +4 369 266 377 261 +3 0 383 0 381 +2 0 +14 0 +15 0 +16 14 +28 0 128 0 +4 282 284 352 182 +3 0 383 0 381 +2 0 +14 0 +15 0 +16 14 +28 0 128 0 +4 328 235 374 174 +3 0 383 0 381 +2 0 +14 0 +15 0 +16 14 +28 0 128 0 +4 345 177 351 173 +3 0 383 0 381 +2 0 +14 0 +15 0 +16 14 +28 0 128 0 +4 294 286 313 234 +3 0 383 0 381 +2 0 +14 0 +15 0 +16 14 +28 0 128 0 +4 277 268 336 180 +3 0 383 0 381 +2 0 +14 0 +15 0 +16 14 +28 0 128 0 +4 257 267 274 244 +3 0 383 0 381 +2 0 +14 0 +15 0 +16 14 +28 0 128 0 +4 240 249 261 241 +3 0 383 0 381 +2 0 +14 0 +15 0 +16 14 +28 0 128 0 +4 288 238 323 169 +3 0 383 0 381 +2 0 +14 0 +15 0 +16 14 +28 0 128 0 +4 280 217 340 119 +3 0 383 0 381 +2 0 +14 0 +15 0 +16 14 +28 0 128 0 +4 268 200 315 116 +3 0 383 0 381 +2 0 +14 0 +15 0 +16 14 +28 0 128 0 +4 248 177 253 165 +3 0 383 0 381 +2 0 +14 0 +15 0 +16 14 +28 0 128 0 +4 255 187 263 170 +3 0 383 0 381 +2 0 +14 0 +15 0 +16 14 +28 0 128 0 +4 263 199 329 113 +3 0 383 0 381 +2 0 +14 0 +15 0 +16 14 +28 0 128 0 +4 282 141 306 112 +3 0 383 0 381 +2 0 +14 0 +15 0 +16 14 +28 0 128 0 +4 271 130 280 110 +3 0 383 0 381 +2 0 +14 0 +15 0 +16 14 +28 0 128 0 +4 261 123 264 106 +3 0 383 0 381 +2 0 +14 0 +15 0 +16 14 +28 0 128 0 +4 255 177 323 165 +3 0 383 0 381 +2 0 +14 0 +15 0 +16 14 +28 255 0 0 +27 0 128 0 +18 0 +17 0 +13 0 +7 245 307 10 8 0 360 +3 0 383 0 381 +2 0 +14 0 +15 0 +16 14 +28 255 0 0 +27 0 128 0 +18 0 +17 0 +13 0 +7 259 314 10 8 0 360 +3 0 383 0 381 +2 0 +14 0 +15 0 +16 14 +28 255 0 0 +27 0 128 0 +18 0 +17 0 +13 0 +7 277 343 6 10 0 360 +3 0 383 0 381 +2 0 +14 0 +15 0 +16 14 +28 255 0 0 +27 0 128 0 +18 0 +17 0 +13 0 +7 331 328 10 14 0 360 +3 0 383 0 381 +2 0 +14 0 +15 0 +16 14 +28 255 0 0 +27 0 128 0 +18 0 +17 0 +13 0 +7 357 322 6 6 0 360 +3 0 383 0 381 +2 0 +14 0 +15 0 +16 14 +28 255 0 0 +27 0 128 0 +18 0 +17 0 +13 0 +7 284 270 2 2 0 360 +3 0 383 0 381 +2 0 +14 0 +15 0 +16 14 +28 255 0 0 +27 0 128 0 +18 0 +17 0 +13 0 +7 297 296 8 6 0 360 +3 0 383 0 381 +2 0 +14 0 +15 0 +16 14 +28 255 0 0 +27 0 128 0 +18 0 +17 0 +13 0 +7 329 280 18 26 0 360 +3 0 383 0 381 +2 0 +14 0 +15 0 +16 14 +28 255 0 0 +27 0 128 0 +18 0 +17 0 +13 0 +7 356 260 8 8 0 360 +3 0 383 0 381 +2 0 +14 0 +15 0 +16 14 +28 255 0 0 +27 0 128 0 +18 0 +17 0 +13 0 +7 298 256 8 6 0 360 +3 0 383 0 381 +2 0 +14 0 +15 0 +16 14 +28 255 0 0 +27 0 128 0 +18 0 +17 0 +13 0 +7 271 254 8 8 0 360 +3 0 383 0 381 +2 0 +14 0 +15 0 +16 14 +28 255 0 0 +27 0 128 0 +18 0 +17 0 +13 0 +7 244 248 2 6 0 360 +3 0 383 0 381 +2 0 +14 0 +15 0 +16 14 +28 255 0 0 +27 0 128 0 +18 0 +17 0 +13 0 +7 284 235 22 14 0 360 +3 0 383 0 381 +2 0 +14 0 +15 0 +16 14 +28 255 0 0 +27 0 128 0 +18 0 +17 0 +13 0 +7 323 224 12 16 0 360 +3 0 383 0 381 +2 0 +14 0 +15 0 +16 14 +28 255 0 0 +27 0 128 0 +18 0 +17 0 +13 0 +7 341 204 12 16 0 360 +3 0 383 0 381 +2 0 +14 0 +15 0 +16 14 +28 255 0 0 +27 0 128 0 +18 0 +17 0 +13 0 +7 379 177 2 4 0 360 +3 0 383 0 381 +2 0 +14 0 +15 0 +16 14 +28 255 0 0 +27 0 128 0 +18 0 +17 0 +13 0 +7 337 177 10 4 0 360 +3 0 383 0 381 +2 0 +14 0 +15 0 +16 14 +28 255 0 0 +27 0 128 0 +18 0 +17 0 +13 0 +7 354 183 6 10 0 360 +3 0 383 0 381 +2 0 +14 0 +15 0 +16 14 +28 255 0 0 +27 0 128 0 +18 0 +17 0 +13 0 +7 356 172 4 10 0 360 +3 0 383 0 381 +2 0 +14 0 +15 0 +16 14 +28 255 0 0 +27 0 128 0 +18 0 +17 0 +13 0 +7 268 199 10 14 0 360 +3 0 383 0 381 +2 0 +14 0 +15 0 +16 14 +28 255 0 0 +27 0 128 0 +18 0 +17 0 +13 0 +7 294 205 4 6 0 360 +3 0 383 0 381 +2 0 +14 0 +15 0 +16 14 +28 255 0 0 +27 0 128 0 +18 0 +17 0 +13 0 +7 266 190 4 14 0 360 +3 0 383 0 381 +2 0 +14 0 +15 0 +16 14 +28 255 0 0 +27 0 128 0 +18 0 +17 0 +13 0 +7 240 174 8 6 0 360 +3 0 383 0 381 +2 0 +14 0 +15 0 +16 14 +28 255 0 0 +27 0 128 0 +18 0 +17 0 +13 0 +7 276 170 24 10 0 360 +3 0 383 0 381 +2 0 +14 0 +15 0 +16 14 +28 255 0 0 +27 0 128 0 +18 0 +17 0 +13 0 +7 309 165 0 4 0 360 +3 0 383 0 381 +2 0 +14 0 +15 0 +16 14 +28 255 0 0 +27 0 128 0 +18 0 +17 0 +13 0 +7 310 176 6 8 0 360 +3 0 383 0 381 +2 0 +14 0 +15 0 +16 14 +28 255 0 0 +27 0 128 0 +18 0 +17 0 +13 0 +7 314 158 2 4 0 360 +3 0 383 0 381 +2 0 +14 0 +15 0 +16 14 +28 255 0 0 +27 0 128 0 +18 0 +17 0 +13 0 +7 320 138 6 10 0 360 +3 0 383 0 381 +2 0 +14 0 +15 0 +16 14 +28 255 0 0 +27 0 128 0 +18 0 +17 0 +13 0 +7 338 114 6 2 0 360 +3 0 383 0 381 +2 0 +14 0 +15 0 +16 14 +28 255 0 0 +27 0 128 0 +18 0 +17 0 +13 0 +7 287 115 8 6 0 360 +3 0 383 0 381 +2 0 +14 0 +15 0 +16 14 +28 255 0 0 +27 0 128 0 +18 0 +17 0 +13 0 +7 291 131 6 4 0 360 +3 0 383 0 381 +2 0 +14 0 +15 0 +16 14 +28 255 0 0 +27 0 128 0 +18 0 +17 0 +13 0 +7 264 122 6 10 0 360 +3 0 383 0 381 +2 0 +14 0 +15 0 +16 14 +28 255 0 0 +27 0 128 0 +18 0 +17 0 +13 0 +7 244 111 6 6 0 360 +3 0 383 0 381 +2 0 +14 0 +15 0 +16 14 +28 255 0 0 +27 0 128 0 +18 0 +17 0 +13 0 +7 322 110 8 2 0 360 +3 0 383 0 381 +2 0 +14 0 +15 0 +16 14 +28 255 255 255 +27 0 128 0 +18 0 +17 0 +13 0 +7 287 359 0 0 0 360 +3 0 383 0 381 +2 0 +14 0 +25 12 +24 1 +28 255 255 255 +17 0 +15 0 +16 1 +4 273 355 285 367 +4 273 367 285 355 +4 273 361 285 361 +4 279 355 279 367 +17 0 +15 0 +16 14 +3 0 383 0 381 +2 0 +14 0 +25 12 +24 1 +28 255 255 255 +17 0 +15 0 +16 1 +4 309 352 321 364 +4 309 364 321 352 +4 309 358 321 358 +4 315 352 315 364 +17 0 +15 0 +16 14 +3 0 383 0 381 +2 0 +14 0 +25 12 +24 1 +28 255 255 255 +17 0 +15 0 +16 1 +4 309 318 321 330 +4 309 330 321 318 +4 309 324 321 324 +4 315 318 315 330 +17 0 +15 0 +16 14 +3 0 383 0 381 +2 0 +14 0 +25 12 +24 1 +28 255 255 255 +17 0 +15 0 +16 1 +4 279 299 291 311 +4 279 311 291 299 +4 279 305 291 305 +4 285 299 285 311 +17 0 +15 0 +16 14 +3 0 383 0 381 +2 0 +14 0 +25 12 +24 1 +28 255 255 255 +17 0 +15 0 +16 1 +4 268 267 280 279 +4 268 279 280 267 +4 268 273 280 273 +4 274 267 274 279 +17 0 +15 0 +16 14 +3 0 383 0 381 +2 0 +14 0 +25 12 +24 1 +28 255 255 255 +17 0 +15 0 +16 1 +4 269 242 281 254 +4 269 254 281 242 +4 269 248 281 248 +4 275 242 275 254 +17 0 +15 0 +16 14 +3 0 383 0 381 +2 0 +14 0 +25 12 +24 1 +28 255 255 255 +17 0 +15 0 +16 1 +4 237 236 249 248 +4 237 248 249 236 +4 237 242 249 242 +4 243 236 243 248 +17 0 +15 0 +16 14 +3 0 383 0 381 +2 0 +14 0 +25 12 +24 1 +28 255 255 255 +17 0 +15 0 +16 1 +4 214 239 226 251 +4 214 251 226 239 +4 214 245 226 245 +4 220 239 220 251 +17 0 +15 0 +16 14 +3 0 383 0 381 +2 0 +14 0 +25 12 +24 1 +28 255 255 255 +17 0 +15 0 +16 1 +4 212 206 224 218 +4 212 218 224 206 +4 212 212 224 212 +4 218 206 218 218 +17 0 +15 0 +16 14 +3 0 383 0 381 +2 0 +14 0 +25 12 +24 1 +28 255 255 255 +17 0 +15 0 +16 1 +4 280 240 292 252 +4 280 252 292 240 +4 280 246 292 246 +4 286 240 286 252 +17 0 +15 0 +16 14 +3 0 383 0 381 +2 0 +14 0 +25 12 +24 1 +28 255 255 255 +17 0 +15 0 +16 1 +4 344 249 356 261 +4 344 261 356 249 +4 344 255 356 255 +4 350 249 350 261 +17 0 +15 0 +16 14 +3 0 383 0 381 +2 0 +14 0 +25 12 +24 1 +28 255 255 255 +17 0 +15 0 +16 1 +4 342 287 354 299 +4 342 299 354 287 +4 342 293 354 293 +4 348 287 348 299 +17 0 +15 0 +16 14 +3 0 383 0 381 +2 0 +14 0 +25 12 +24 1 +28 255 255 255 +17 0 +15 0 +16 1 +4 376 264 388 276 +4 376 276 388 264 +4 376 270 388 270 +4 382 264 382 276 +17 0 +15 0 +16 14 +3 0 383 0 381 +2 0 +14 0 +25 12 +24 1 +28 255 255 255 +17 0 +15 0 +16 1 +4 380 229 392 241 +4 380 241 392 229 +4 380 235 392 235 +4 386 229 386 241 +17 0 +15 0 +16 14 +3 0 383 0 381 +2 0 +14 0 +25 12 +24 1 +28 255 255 255 +17 0 +15 0 +16 1 +4 380 241 392 253 +4 380 253 392 241 +4 380 247 392 247 +4 386 241 386 253 +17 0 +15 0 +16 14 +3 0 383 0 381 +2 0 +14 0 +25 12 +24 1 +28 255 255 255 +17 0 +15 0 +16 1 +4 311 283 323 295 +4 311 295 323 283 +4 311 289 323 289 +4 317 283 317 295 +17 0 +15 0 +16 14 +3 0 383 0 381 +2 0 +14 0 +25 12 +24 1 +28 255 255 255 +17 0 +15 0 +16 1 +4 306 339 318 351 +4 306 351 318 339 +4 306 345 318 345 +4 312 339 312 351 +17 0 +15 0 +16 14 +3 0 383 0 381 +2 0 +14 0 +25 12 +24 1 +28 255 255 255 +17 0 +15 0 +16 1 +4 299 359 311 371 +4 299 371 311 359 +4 299 365 311 365 +4 305 359 305 371 +17 0 +15 0 +16 14 +3 0 383 0 381 +2 0 +14 0 +25 12 +24 1 +28 255 255 255 +17 0 +15 0 +16 1 +4 277 325 289 337 +4 277 337 289 325 +4 277 331 289 331 +4 283 325 283 337 +17 0 +15 0 +16 14 +3 0 383 0 381 +2 0 +14 0 +25 12 +24 1 +28 255 255 255 +17 0 +15 0 +16 1 +4 259 315 271 327 +4 259 327 271 315 +4 259 321 271 321 +4 265 315 265 327 +17 0 +15 0 +16 14 +3 0 383 0 381 +2 0 +14 0 +25 12 +24 1 +28 255 255 255 +17 0 +15 0 +16 1 +4 306 282 318 294 +4 306 294 318 282 +4 306 288 318 288 +4 312 282 312 294 +17 0 +15 0 +16 14 +3 0 383 0 381 +2 0 +14 0 +25 12 +24 1 +28 255 255 255 +17 0 +15 0 +16 1 +4 308 236 320 248 +4 308 248 320 236 +4 308 242 320 242 +4 314 236 314 248 +17 0 +15 0 +16 14 +3 0 383 0 381 +2 0 +14 0 +25 12 +24 1 +28 255 255 255 +17 0 +15 0 +16 1 +4 294 215 306 227 +4 294 227 306 215 +4 294 221 306 221 +4 300 215 300 227 +17 0 +15 0 +16 14 +3 0 383 0 381 +2 0 +14 0 +25 12 +24 1 +28 255 255 255 +17 0 +15 0 +16 1 +4 290 191 302 203 +4 290 203 302 191 +4 290 197 302 197 +4 296 191 296 203 +17 0 +15 0 +16 14 +3 0 383 0 381 +2 0 +14 0 +25 12 +24 1 +28 255 255 255 +17 0 +15 0 +16 1 +4 248 156 260 168 +4 248 168 260 156 +4 248 162 260 162 +4 254 156 254 168 +17 0 +15 0 +16 14 +3 0 383 0 381 +2 0 +14 0 +25 12 +24 1 +28 255 255 255 +17 0 +15 0 +16 1 +4 216 157 228 169 +4 216 169 228 157 +4 216 163 228 163 +4 222 157 222 169 +17 0 +15 0 +16 14 +3 0 383 0 381 +2 0 +14 0 +25 12 +24 1 +28 255 255 255 +17 0 +15 0 +16 1 +4 246 187 258 199 +4 246 199 258 187 +4 246 193 258 193 +4 252 187 252 199 +17 0 +15 0 +16 14 +3 0 383 0 381 +2 0 +14 0 +25 12 +24 1 +28 255 255 255 +17 0 +15 0 +16 1 +4 296 182 308 194 +4 296 194 308 182 +4 296 188 308 188 +4 302 182 302 194 +17 0 +15 0 +16 14 +3 0 383 0 381 +2 0 +14 0 +25 12 +24 1 +28 255 255 255 +17 0 +15 0 +16 1 +4 360 175 372 187 +4 360 187 372 175 +4 360 181 372 181 +4 366 175 366 187 +17 0 +15 0 +16 14 +3 0 383 0 381 +2 0 +14 0 +25 12 +24 1 +28 255 255 255 +17 0 +15 0 +16 1 +4 398 170 410 182 +4 398 182 410 170 +4 398 176 410 176 +4 404 170 404 182 +17 0 +15 0 +16 14 +3 0 383 0 381 +2 0 +14 0 +25 12 +24 1 +28 255 255 255 +17 0 +15 0 +16 1 +4 355 208 367 220 +4 355 220 367 208 +4 355 214 367 214 +4 361 208 361 220 +17 0 +15 0 +16 14 +3 0 383 0 381 +2 0 +14 0 +25 12 +24 1 +28 255 255 255 +17 0 +15 0 +16 1 +4 323 210 335 222 +4 323 222 335 210 +4 323 216 335 216 +4 329 210 329 222 +17 0 +15 0 +16 14 +3 0 383 0 381 +2 0 +14 0 +25 12 +24 1 +28 255 255 255 +17 0 +15 0 +16 1 +4 324 183 336 195 +4 324 195 336 183 +4 324 189 336 189 +4 330 183 330 195 +17 0 +15 0 +16 14 +3 0 383 0 381 +2 0 +14 0 +25 12 +24 1 +28 255 255 255 +17 0 +15 0 +16 1 +4 323 152 335 164 +4 323 164 335 152 +4 323 158 335 158 +4 329 152 329 164 +17 0 +15 0 +16 14 +3 0 383 0 381 +2 0 +14 0 +25 12 +24 1 +28 255 255 255 +17 0 +15 0 +16 1 +4 328 131 340 143 +4 328 143 340 131 +4 328 137 340 137 +4 334 131 334 143 +17 0 +15 0 +16 14 +3 0 383 0 381 +2 0 +14 0 +25 12 +24 1 +28 255 255 255 +17 0 +15 0 +16 1 +4 334 110 346 122 +4 334 122 346 110 +4 334 116 346 116 +4 340 110 340 122 +17 0 +15 0 +16 14 +3 0 383 0 381 +2 0 +14 0 +25 12 +24 1 +28 255 255 255 +17 0 +15 0 +16 1 +4 289 109 301 121 +4 289 121 301 109 +4 289 115 301 115 +4 295 109 295 121 +17 0 +15 0 +16 14 +3 0 383 0 381 +2 0 +14 0 +25 12 +24 1 +28 255 255 255 +17 0 +15 0 +16 1 +4 284 135 296 147 +4 284 147 296 135 +4 284 141 296 141 +4 290 135 290 147 +17 0 +15 0 +16 14 +3 0 383 0 381 +2 0 +14 0 +25 12 +24 1 +28 255 255 255 +17 0 +15 0 +16 1 +4 267 127 279 139 +4 267 139 279 127 +4 267 133 279 133 +4 273 127 273 139 +17 0 +15 0 +16 14 +3 0 383 0 381 +2 0 +14 0 +25 12 +24 1 +28 255 255 255 +17 0 +15 0 +16 1 +4 259 111 271 123 +4 259 123 271 111 +4 259 117 271 117 +4 265 111 265 123 +17 0 +15 0 +16 14 +3 0 383 0 381 +2 0 +14 0 +25 12 +24 1 +28 255 255 255 +17 0 +15 0 +16 1 +4 233 109 245 121 +4 233 121 245 109 +4 233 115 245 115 +4 239 109 239 121 +17 0 +15 0 +16 14 +3 0 383 0 381 +2 0 +14 0 +25 12 +24 1 +28 255 255 255 +17 0 +15 0 +16 1 +4 303 107 315 119 +4 303 119 315 107 +4 303 113 315 113 +4 309 107 309 119 +17 0 +15 0 +16 14 +3 0 383 0 381 +2 0 +14 0 +25 12 +24 1 +28 255 255 255 +17 0 +15 0 +16 1 +4 317 111 329 123 +4 317 123 329 111 +4 317 117 329 117 +4 323 111 323 123 +17 0 +15 0 +16 14 +3 0 383 0 381 +2 0 +14 0 +25 12 +24 1 +28 255 255 255 +17 0 +15 0 +16 1 +4 312 134 324 146 +4 312 146 324 134 +4 312 140 324 140 +4 318 134 318 146 +17 0 +15 0 +16 14 +3 0 383 0 381 +2 0 +14 0 +25 12 +24 1 +28 255 255 255 +17 0 +15 0 +16 1 +4 313 191 325 203 +4 313 203 325 191 +4 313 197 325 197 +4 319 191 319 203 +17 0 +15 0 +16 14 +3 0 383 0 381 +2 0 +14 0 +25 12 +24 1 +28 255 255 0 +17 0 +15 0 +16 1 +4 295 377 307 389 +4 295 389 307 377 +4 295 383 307 383 +4 301 377 301 389 +17 0 +15 0 +16 14 +3 0 383 0 381 +2 0 +14 0 +25 22 +24 1 +28 255 255 0 +17 0 +15 0 +16 1 +4 292 369 314 391 +4 292 391 314 369 +4 292 380 314 380 +4 303 369 303 391 +17 0 +15 0 +16 14 +3 0 383 0 381 +2 0 +14 0 +25 22 +24 1 +28 255 255 0 +17 0 +15 0 +16 1 +4 287 371 309 393 +4 287 393 309 371 +4 287 382 309 382 +4 298 371 298 393 +17 0 +15 0 +16 14 +3 0 383 0 381 +2 0 +14 0 +25 22 +24 1 +28 255 255 0 +17 0 +15 0 +16 1 +4 292 380 314 402 +4 292 402 314 380 +4 292 391 314 391 +4 303 380 303 402 +17 0 +15 0 +16 14 +3 0 383 0 381 +2 0 +14 0 +25 22 +24 1 +28 255 255 0 +17 0 +15 0 +16 1 +4 287 370 309 392 +4 287 392 309 370 +4 287 381 309 381 +4 298 370 298 392 +17 0 +15 0 +16 14 +3 0 383 0 381 +2 0 +14 0 +25 22 +24 1 +28 255 255 0 +17 0 +15 0 +16 1 +4 287 372 309 394 +4 287 394 309 372 +4 287 383 309 383 +4 298 372 298 394 +17 0 +15 0 +16 14 +3 0 383 0 381 +2 0 +14 0 +25 22 +24 1 +28 255 255 0 +17 0 +15 0 +16 1 +4 290 373 312 395 +4 290 395 312 373 +4 290 384 312 384 +4 301 373 301 395 +17 0 +15 0 +16 14 +3 0 383 0 381 +2 0 +14 0 +25 22 +24 1 +28 255 255 0 +17 0 +15 0 +16 1 +4 292 373 314 395 +4 292 395 314 373 +4 292 384 314 384 +4 303 373 303 395 +17 0 +15 0 +16 14 +3 0 383 0 381 +2 0 +14 0 +25 22 +24 1 +28 255 255 0 +17 0 +15 0 +16 1 +4 294 373 316 395 +4 294 395 316 373 +4 294 384 316 384 +4 305 373 305 395 +17 0 +15 0 +16 14 +3 0 383 0 381 +2 0 +14 0 +25 22 +24 1 +28 255 255 0 +17 0 +15 0 +16 1 +4 291 383 313 405 +4 291 405 313 383 +4 291 394 313 394 +4 302 383 302 405 +17 0 +15 0 +16 14 +2 0 diff --git a/test/mf/poly.mf b/test/mf/poly.mf new file mode 100644 index 0000000..d299180 --- /dev/null +++ b/test/mf/poly.mf @@ -0,0 +1,88 @@ +CDMF 619334269 619334269 +27 255 255 255 +28 0 0 0 +13 1 +14 0 +15 0 +16 1 +60 0 +61 0 +18 0 +17 0 +74 0 12 System +23 9 +33 0 +20 10 10 +255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 +255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 +255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 +255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 0 0 255 0 0 255 255 255 255 255 255 255 255 255 255 +255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 0 0 255 0 0 255 0 0 255 255 255 255 255 255 255 +255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 0 0 255 0 0 255 0 0 255 255 255 255 255 255 255 +255 255 255 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 0 255 0 0 255 255 255 255 255 255 255 +255 255 255 255 255 255 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 0 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 19 10 10 +0 0 0 0 0 0 0 0 0 0 +0 1 1 1 1 1 0 0 0 0 +0 1 0 0 0 1 1 0 0 0 +0 1 0 0 0 1 0 1 0 0 +0 1 0 0 0 1 0 0 1 0 +0 1 1 1 1 1 0 0 1 0 +0 0 1 0 0 0 1 0 1 0 +0 0 0 1 0 0 0 1 1 0 +0 0 0 0 1 1 1 1 1 0 +0 0 0 0 0 0 0 0 0 0 +17 0 +1 +3 0 272 0 396 +18 0 +17 0 +58 0 +9 0 +10 55 428 +10 300 427 +10 121 345 +10 159 499 +10 252 334 +11 +18 0 +17 0 +58 1 +9 0 +10 444 432 +10 637 430 +10 472 357 +10 529 502 +10 596 350 +11 +18 0 +17 0 +9 0 +10 499 98 +10 684 96 +10 680 215 +10 546 215 +10 546 171 +10 633 169 +10 634 132 +10 578 132 +10 578 258 +10 473 256 +11 +18 0 +17 0 +58 0 +9 0 +10 90 94 +10 264 95 +10 259 220 +10 140 220 +10 141 149 +10 218 151 +10 218 117 +10 168 116 +10 168 255 +10 73 253 +11 diff --git a/test/mf/poly2.mf b/test/mf/poly2.mf new file mode 100644 index 0000000..387431c --- /dev/null +++ b/test/mf/poly2.mf @@ -0,0 +1,88 @@ +CDMF 619334269 619334269 +27 255 255 255 +28 0 0 0 +13 1 +14 0 +15 0 +16 1 +60 0 +61 0 +18 0 +17 0 +74 0 12 System +23 9 +33 0 +20 10 10 +255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 +255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 +255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 +255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 0 0 255 0 0 255 255 255 255 255 255 255 255 255 255 +255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 0 0 255 0 0 255 0 0 255 255 255 255 255 255 255 +255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 0 0 255 0 0 255 0 0 255 255 255 255 255 255 255 +255 255 255 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 0 255 0 0 255 255 255 255 255 255 255 +255 255 255 255 255 255 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 0 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 19 10 10 +0 0 0 0 0 0 0 0 0 0 +0 1 1 1 1 1 0 0 0 0 +0 1 0 0 0 1 1 0 0 0 +0 1 0 0 0 1 0 1 0 0 +0 1 0 0 0 1 0 0 1 0 +0 1 1 1 1 1 0 0 1 0 +0 0 1 0 0 0 1 0 1 0 +0 0 0 1 0 0 0 1 1 0 +0 0 0 0 1 1 1 1 1 0 +0 0 0 0 0 0 0 0 0 0 +17 0 +1 +3 0 272 0 396 +18 0 +17 0 +58 0 +9 2 +10 55 428 +10 300 427 +10 121 345 +10 159 499 +10 252 334 +11 +18 0 +17 0 +58 1 +9 2 +10 444 432 +10 637 430 +10 472 357 +10 529 502 +10 596 350 +11 +18 0 +17 0 +9 2 +10 499 98 +10 684 96 +10 680 215 +10 546 215 +10 546 171 +10 633 169 +10 634 132 +10 578 132 +10 578 258 +10 473 256 +11 +18 0 +17 0 +58 0 +9 2 +10 90 94 +10 264 95 +10 259 220 +10 140 220 +10 141 149 +10 218 151 +10 218 117 +10 168 116 +10 168 255 +10 73 253 +11 diff --git a/test/mf/poly3.mf b/test/mf/poly3.mf new file mode 100644 index 0000000..e9f06d1 --- /dev/null +++ b/test/mf/poly3.mf @@ -0,0 +1,136 @@ +CDMF 619334269 619334269 +27 255 255 255 +28 0 0 0 +13 1 +14 0 +15 0 +16 1 +60 0 +61 0 +18 0 +17 0 +74 0 12 System +23 9 +33 0 +20 10 10 +255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 +255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 +255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 +255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 0 0 255 0 0 255 255 255 255 255 255 255 255 255 255 +255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 0 0 255 0 0 255 0 0 255 255 255 255 255 255 255 +255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 0 0 255 0 0 255 0 0 255 255 255 255 255 255 255 +255 255 255 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 0 255 0 0 255 255 255 255 255 255 255 +255 255 255 255 255 255 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 0 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 19 10 10 +0 0 0 0 0 0 0 0 0 0 +0 1 1 1 1 1 0 0 0 0 +0 1 0 0 0 1 1 0 0 0 +0 1 0 0 0 1 0 1 0 0 +0 1 0 0 0 1 0 0 1 0 +0 1 1 1 1 1 0 0 1 0 +0 0 1 0 0 0 1 0 1 0 +0 0 0 1 0 0 0 1 1 0 +0 0 0 0 1 1 1 1 1 0 +0 0 0 0 0 0 0 0 0 0 +17 0 +1 +3 0 272 0 396 +18 0 +17 0 +58 0 +9 2 +10 55 428 +10 300 427 +10 121 345 +10 159 499 +10 252 334 +11 +18 0 +17 0 +58 1 +9 2 +10 444 432 +10 637 430 +10 472 357 +10 529 502 +10 596 350 +11 +18 0 +17 0 +9 2 +10 499 98 +10 684 96 +10 680 215 +10 546 215 +10 546 171 +10 633 169 +10 634 132 +10 578 132 +10 578 258 +10 473 256 +11 +18 0 +17 0 +58 0 +9 2 +10 90 94 +10 264 95 +10 259 220 +10 140 220 +10 141 149 +10 218 151 +10 218 117 +10 168 116 +10 168 255 +10 73 253 +11 +28 255 0 0 +58 0 +9 0 +10 55 428 +10 300 427 +10 121 345 +10 159 499 +10 252 334 +11 +18 0 +17 0 +58 1 +9 0 +10 444 432 +10 637 430 +10 472 357 +10 529 502 +10 596 350 +11 +18 0 +17 0 +9 0 +10 499 98 +10 684 96 +10 680 215 +10 546 215 +10 546 171 +10 633 169 +10 634 132 +10 578 132 +10 578 258 +10 473 256 +11 +18 0 +17 0 +58 0 +9 0 +10 90 94 +10 264 95 +10 259 220 +10 140 220 +10 141 149 +10 218 151 +10 218 117 +10 168 116 +10 168 255 +10 73 253 +11 diff --git a/test/mf/poly4.mf b/test/mf/poly4.mf new file mode 100644 index 0000000..83cf601 --- /dev/null +++ b/test/mf/poly4.mf @@ -0,0 +1,136 @@ +CDMF 619334269 619334269 +27 255 255 255 +28 0 0 0 +13 1 +14 0 +15 0 +16 1 +60 0 +61 0 +18 0 +17 0 +74 0 12 System +23 9 +33 0 +20 10 10 +255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 +255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 +255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 +255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 0 0 255 0 0 255 255 255 255 255 255 255 255 255 255 +255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 0 0 255 0 0 255 0 0 255 255 255 255 255 255 255 +255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 0 0 255 0 0 255 0 0 255 255 255 255 255 255 255 +255 255 255 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 0 255 0 0 255 255 255 255 255 255 255 +255 255 255 255 255 255 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 0 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 19 10 10 +0 0 0 0 0 0 0 0 0 0 +0 1 1 1 1 1 0 0 0 0 +0 1 0 0 0 1 1 0 0 0 +0 1 0 0 0 1 0 1 0 0 +0 1 0 0 0 1 0 0 1 0 +0 1 1 1 1 1 0 0 1 0 +0 0 1 0 0 0 1 0 1 0 +0 0 0 1 0 0 0 1 1 0 +0 0 0 0 1 1 1 1 1 0 +0 0 0 0 0 0 0 0 0 0 +17 0 +1 +3 0 272 0 396 +18 0 +17 0 +58 0 +9 0 +10 55 428 +10 300 427 +10 121 345 +10 159 499 +10 252 334 +11 +18 0 +17 0 +58 1 +9 0 +10 444 432 +10 637 430 +10 472 357 +10 529 502 +10 596 350 +11 +18 0 +17 0 +9 0 +10 499 98 +10 684 96 +10 680 215 +10 546 215 +10 546 171 +10 633 169 +10 634 132 +10 578 132 +10 578 258 +10 473 256 +11 +18 0 +17 0 +58 0 +9 0 +10 90 94 +10 264 95 +10 259 220 +10 140 220 +10 141 149 +10 218 151 +10 218 117 +10 168 116 +10 168 255 +10 73 253 +11 +28 255 0 0 +58 0 +9 2 +10 55 428 +10 300 427 +10 121 345 +10 159 499 +10 252 334 +11 +18 0 +17 0 +58 1 +9 2 +10 444 432 +10 637 430 +10 472 357 +10 529 502 +10 596 350 +11 +18 0 +17 0 +9 2 +10 499 98 +10 684 96 +10 680 215 +10 546 215 +10 546 171 +10 633 169 +10 634 132 +10 578 132 +10 578 258 +10 473 256 +11 +18 0 +17 0 +58 0 +9 2 +10 90 94 +10 264 95 +10 259 220 +10 140 220 +10 141 149 +10 218 151 +10 218 117 +10 168 116 +10 168 255 +10 73 253 +11 diff --git a/test/mf/poly5.mf b/test/mf/poly5.mf new file mode 100644 index 0000000..acbb116 --- /dev/null +++ b/test/mf/poly5.mf @@ -0,0 +1,89 @@ +CDMF 619334269 619334269 +27 255 255 255 +28 0 0 0 +13 1 +14 0 +15 0 +16 1 +60 0 +61 0 +18 0 +17 0 +74 0 12 System +23 9 +33 0 +20 10 10 +255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 +255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 +255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 +255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 0 0 255 0 0 255 255 255 255 255 255 255 255 255 255 +255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 0 0 255 0 0 255 0 0 255 255 255 255 255 255 255 +255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 0 0 255 0 0 255 0 0 255 255 255 255 255 255 255 +255 255 255 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 0 255 0 0 255 255 255 255 255 255 255 +255 255 255 255 255 255 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 0 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 19 10 10 +0 0 0 0 0 0 0 0 0 0 +0 1 1 1 1 1 0 0 0 0 +0 1 0 0 0 1 1 0 0 0 +0 1 0 0 0 1 0 1 0 0 +0 1 0 0 0 1 0 0 1 0 +0 1 1 1 1 1 0 0 1 0 +0 0 1 0 0 0 1 0 1 0 +0 0 0 1 0 0 0 1 1 0 +0 0 0 0 1 1 1 1 1 0 +0 0 0 0 0 0 0 0 0 0 +17 0 +1 +3 0 272 0 396 +18 0 +17 0 +28 255 0 0 +58 0 +9 0 +10 55 428 +10 300 427 +10 121 345 +10 159 499 +10 252 334 +11 +18 0 +17 0 +58 1 +9 0 +10 444 432 +10 637 430 +10 472 357 +10 529 502 +10 596 350 +11 +18 0 +17 0 +9 0 +10 499 98 +10 684 96 +10 680 215 +10 546 215 +10 546 171 +10 633 169 +10 634 132 +10 578 132 +10 578 258 +10 473 256 +11 +18 0 +17 0 +58 0 +9 0 +10 90 94 +10 264 95 +10 259 220 +10 140 220 +10 141 149 +10 218 151 +10 218 117 +10 168 116 +10 168 255 +10 73 253 +11 diff --git a/test/mf/sector.mf b/test/mf/sector.mf new file mode 100644 index 0000000..d889752 --- /dev/null +++ b/test/mf/sector.mf @@ -0,0 +1,22 @@ +CDMF 383 410 +27 255 255 255 +28 0 0 0 +13 1 +14 0 +15 0 +16 1 +18 0 +17 0 +21 0 0 12 +23 9 +33 0 +24 1 +25 10 +1 +13 0 +7 66 336 70 74 0 360 +7 181 348 74 88 45 100 +7 188 234 122 102 0 180 +7 126 96 150 100 180 360 +7 238 159 88 70 180 360 +7 309 63 76 68 100 200 diff --git a/test/screencapture.c b/test/screencapture.c new file mode 100644 index 0000000..1ac8d2c --- /dev/null +++ b/test/screencapture.c @@ -0,0 +1,36 @@ +#include <stdio.h> +#include <stdlib.h> +#include <cd.h> +#include <cdnative.h> +#include <im.h> + +void main() +{ + cdCanvas *cd_canvas; + unsigned char *red, *green, *blue; + int width, height, size; + + cd_canvas = cdCreateCanvas(CD_NATIVEWINDOW, NULL); + if (!cd_canvas) + { + printf("Error creating canvas.\n"); + return; + } + + cdActivate(cd_canvas); + + cdGetCanvasSize(&width, &height, NULL, NULL); + size = width * height; + red = (unsigned char*)calloc(size, 1); + green = (unsigned char*)calloc(size, 1); + blue = (unsigned char*)calloc(size, 1); + + cdGetImageRGB(red, green, blue, 0, 0, width, height); + imSaveRGB(width, height, IM_JPG|IM_COMPRESSED, red, green, blue, "scap.jpg"); + + cdKillCanvas(cd_canvas); + + free(red); + free(green); + free(blue); +} diff --git a/test/screencapture.mak b/test/screencapture.mak new file mode 100644 index 0000000..1744375 --- /dev/null +++ b/test/screencapture.mak @@ -0,0 +1,8 @@ +APPNAME = screencapture +APPTYPE = console + +USE_CD = Yes +USE_IUP = YEs +USE_IM = Yes + +SRC = screencapture.c diff --git a/test/simple/.cvsignore b/test/simple/.cvsignore new file mode 100644 index 0000000..c29a181 --- /dev/null +++ b/test/simple/.cvsignore @@ -0,0 +1,21 @@ +*.emf +*.mf +*.cgm +*.eps +*.ps +*.wmf +*.pdf +simple_debug.txt +so_locations +*.dep +*.wdep +*.loh +.plan +.project +*.err +Makefile +*.make +*.suo +*.ncb +*.opt +*.user diff --git a/test/simple/config.mak b/test/simple/config.mak new file mode 100644 index 0000000..319568a --- /dev/null +++ b/test/simple/config.mak @@ -0,0 +1,25 @@ +APPNAME = simple + +#SRC = simple.c simple_led.c iupmain.c +SRC = teste.cpp + +#DBG = Yes +USE_CD=Yes +USE_IUP=Yes + +simple_led.c: simple.led + ledc -f simple_loadled -o simple_led.c simple.led + +USE_STATIC = Yes + +#IUP = ../../../iup +#CD = ../.. + +USE_IM = Yes + +#ifneq ($(findstring Win, $(TEC_SYSNAME)), ) +# LIBS = cdpdflib cdgdiplus gdiplus +#else +# SLIB = $(CD)/lib/$(TEC_UNAME)/libcdpdflib.a $(CD)/lib/$(TEC_UNAME)/libcdxrender.a +# LIBS = Xrender Xft +#endif diff --git a/test/simple/gdiplustest.cpp b/test/simple/gdiplustest.cpp new file mode 100644 index 0000000..af7b643 --- /dev/null +++ b/test/simple/gdiplustest.cpp @@ -0,0 +1,116 @@ +#include <windows.h> +#include <gdiplus.h> +using namespace Gdiplus; + +/* Visual C++ 7.1 + SP1 + GDI+ 1.0 File Version 5.1.3102.2180 +*/ + +void DrawLineMarks(Graphics* graphics, Pen* greenPen, int x, int y, int w, int h) +{ + graphics->DrawLine(greenPen, x+w-1, y-5, x+w-1, y+5); // end markers + graphics->DrawLine(greenPen, x-5, y+h-1, x+5, y+h-1); +} + +void SimpleImageTest(HWND hWnd) +{ + int x, y; + Graphics* graphics = new Graphics(hWnd); + graphics->Clear(Color(255, 255, 255)); // white background + + Bitmap image(16, 16, PixelFormat24bppRGB); + image.SetResolution(graphics->GetDpiX(), graphics->GetDpiX()); + + /* black pixel border */ + for (y = 0; y < 16; y++) + image.SetPixel(0, y, Color(0, 0, 0)); + for (y = 0; y < 16; y++) + image.SetPixel(15, y, Color(0, 0, 0)); + for (x = 1; x < 15; x++) + image.SetPixel(x, 0, Color(0, 0, 0)); + for (x = 1; x < 15; x++) + image.SetPixel(x, 15, Color(0, 0, 0)); + + /* light yellow contents */ + for (y = 1; y < 15; y++) + for (x = 1; x < 15; x++) + image.SetPixel(x, y, Color(192, 192, 0)); + + Pen redPen(Color(255, 0, 0), 1); + redPen.SetDashStyle(DashStyleDash); + Pen greenPen(Color(0, 255, 0), 1); + greenPen.SetDashStyle(DashStyleDash); + + // I add {} to avoid reusing some Rect in the next test + + graphics->SetPixelOffsetMode(PixelOffsetModeHalf); // pixel center is (.5,.5) instead of (0, 0) + + // NO zoom + { + RectF actualRect(10, 10, 16, 16); + graphics->DrawImage(&image, 10, 10); + graphics->DrawRectangle(&redPen, actualRect); + DrawLineMarks(graphics, &greenPen, 10, 10, 16, 16); + } + + // zoom using Bilinear Interpolation + { + RectF zoomRect(50, 10, 160, 160); + graphics->SetInterpolationMode(InterpolationModeBilinear); + graphics->DrawImage(&image, zoomRect); + graphics->DrawRectangle(&redPen, zoomRect); + DrawLineMarks(graphics, &greenPen, 50, 10, 160, 160); + } + + // zoom using Nearest Neighborhood + { + RectF zoomRect2(250, 10, 160, 160); + graphics->SetInterpolationMode(InterpolationModeNearestNeighbor); + graphics->DrawImage(&image, zoomRect2); + graphics->DrawRectangle(&redPen, zoomRect2); + DrawLineMarks(graphics, &greenPen, 250, 10, 160, 160); + } + + + // Using a source image size, smaller than actual + + + // NO zoom + { + RectF actualRect3(10, 200, 16, 16); + graphics->DrawImage(&image, actualRect3, 0, 0, 16-1, 16-1, UnitPixel, NULL, NULL); + graphics->DrawRectangle(&redPen, actualRect3); + DrawLineMarks(graphics, &greenPen, 10, 400, 16, 16); + } + + // zoom using Bilinear Interpolation + { + RectF zoomRect6(50, 200, 160, 160); + graphics->SetInterpolationMode(InterpolationModeBilinear); + graphics->DrawImage(&image, zoomRect6, 0, 0, 16-1, 16-1, UnitPixel, NULL, NULL); + graphics->DrawRectangle(&redPen, zoomRect6); + DrawLineMarks(graphics, &greenPen, 50, 400, 160, 160); + } + + // zoom using Nearest Neighborhood + { + RectF zoomRect7(250, 200, 160, 160); + graphics->SetInterpolationMode(InterpolationModeNearestNeighbor); + graphics->DrawImage(&image, zoomRect7, 0, 0, 16-1, 16-1, UnitPixel, NULL, NULL); + graphics->DrawRectangle(&redPen, zoomRect7); + DrawLineMarks(graphics, &greenPen, 250, 400, 160, 160); + } + + delete graphics; +} + +#include <iup.h> + +extern "C" char* winData; +extern "C" void SimpleDrawTest(void); + +void SimpleDrawTest(void) +{ + HWND hWnd = (HWND)IupGetAttribute((Ihandle*)winData, "HWND"); + SimpleImageTest(hWnd); +} diff --git a/test/simple/iupmain.c b/test/simple/iupmain.c new file mode 100644 index 0000000..7db2672 --- /dev/null +++ b/test/simple/iupmain.c @@ -0,0 +1,83 @@ + +#include <iup.h> +#include <cd.h> + +#include "simple.h" + +int cmdExit(void) +{ + return IUP_CLOSE; +} + +void simple_loadled (void); + +int main(void) +{ + IupOpen(); + + cdInitContextPlus(); + + simple_loadled(); + + IupSetAttribute(IupGetHandle("SimpleDialog"), "PLACEMENT", "MAXIMIZED"); + IupShow(IupGetHandle("SimpleDialog")); + + SimpleCreateCanvas((char*)IupGetHandle("SimpleCanvas")); + + IupSetFunction("cmdExit", (Icallback) cmdExit); + + IupSetFunction("SimplePlayClipboard", (Icallback) SimplePlayClipboard); + IupSetFunction("SimplePlayCGMText", (Icallback) SimplePlayCGMText); + IupSetFunction("SimplePlayCGMBin", (Icallback) SimplePlayCGMBin); + IupSetFunction("SimplePlayMetafile", (Icallback) SimplePlayMetafile); + IupSetFunction("SimplePlayWMF", (Icallback) SimplePlayWMF); + IupSetFunction("SimplePlayEMF", (Icallback) SimplePlayEMF); + + IupSetFunction("SimpleDrawDebug", (Icallback) SimpleDrawDebug); + IupSetFunction("SimpleDrawWindow", (Icallback) SimpleDrawWindow); + IupSetFunction("SimpleDrawCGMText", (Icallback) SimpleDrawCGMText); + IupSetFunction("SimpleDrawCGMBin", (Icallback) SimpleDrawCGMBin); + IupSetFunction("SimpleDrawDXF", (Icallback) SimpleDrawDXF); + IupSetFunction("SimpleDrawDGN", (Icallback) SimpleDrawDGN); + IupSetFunction("SimpleDrawEMF", (Icallback) SimpleDrawEMF); + IupSetFunction("SimpleDrawMetafile", (Icallback) SimpleDrawMetafile); + IupSetFunction("SimpleDrawPDF", (Icallback) SimpleDrawPDF); + IupSetFunction("SimpleDrawPS", (Icallback) SimpleDrawPS); + IupSetFunction("SimpleDrawEPS", (Icallback) SimpleDrawEPS); + IupSetFunction("SimpleDrawWMF", (Icallback) SimpleDrawWMF); + IupSetFunction("SimpleDrawPrint", (Icallback) SimpleDrawPrint); + IupSetFunction("SimpleDrawPrintDialog", (Icallback) SimpleDrawPrintDialog); + IupSetFunction("SimpleDrawClipboardBitmap", (Icallback) SimpleDrawClipboardBitmap); + IupSetFunction("SimpleDrawClipboardMetafile", (Icallback) SimpleDrawClipboardMetafile); + IupSetFunction("SimpleDrawClipboardEMF", (Icallback) SimpleDrawClipboardEMF); + IupSetFunction("SimpleDrawImage", (Icallback) SimpleDrawImage); + IupSetFunction("SimpleDrawImageRGB", (Icallback) SimpleDrawImageRGB); + IupSetFunction("SimpleDrawSimulate", (Icallback) SimpleDrawSimulate); + + IupSetFunction("SimpleNotXor", (Icallback) SimpleNotXor); + IupSetFunction("SimpleXor", (Icallback) SimpleXor); + IupSetFunction("SimpleReplace", (Icallback) SimpleReplace); + IupSetFunction("SimpleClippingOff", (Icallback) SimpleClippingOff); + IupSetFunction("SimpleClippingArea", (Icallback) SimpleClippingArea); + IupSetFunction("SimpleClippingPolygon", (Icallback) SimpleClippingPolygon); + IupSetFunction("SimpleClippingRegion", (Icallback) SimpleClippingRegion); + IupSetFunction("SimpleContextPlus", (Icallback) SimpleContextPlus); + IupSetFunction("SimpleTransform", (Icallback) SimpleTransform); + + IupSetFunction("SimpleDrawAll", (Icallback) SimpleDrawAll); + IupSetFunction("SimpleDrawTextAlign", (Icallback) SimpleDrawTextAlign); + IupSetFunction("SimpleDrawTextFonts", (Icallback) SimpleDrawTextFonts); + IupSetFunction("SimpleDrawTest", (Icallback) SimpleDrawTest); + + IupSetFunction("SimpleRepaint", (Icallback) SimpleDrawRepaint); + + SimpleDrawWindow(); + + IupMainLoop(); + + SimpleKillCanvas(); + + IupClose(); + + return 1; +} diff --git a/test/simple/makefile.linux b/test/simple/makefile.linux new file mode 100644 index 0000000..5d014e0 --- /dev/null +++ b/test/simple/makefile.linux @@ -0,0 +1,18 @@ +CC = gcc + +CFLAGS = -I../cd/include -I../iup/include -I/usr/X11R6/include + +LIBS = -L../cd/lib/Linux26 -L../iup/lib/Linux26 -L/usr/X11R6/lib \ + -lcdiup -lcd -liup \ + -lXm -lXpm -lXmu -lXt -lXext -lX11 + +OBJS = simple.o iupmain.o + +simple.o: simple.c simple.h + $(CC) -o $@ -c simple.c $(CFLAGS) + +iupmain.o: iupmain.c simple.h + $(CC) -o $@ -c iupmain.c $(CFLAGS) + +simple: $(OBJS) + $(CC) -o $@ $(OBJS) $(LIBS) diff --git a/test/simple/makefile.mingw3 b/test/simple/makefile.mingw3 new file mode 100644 index 0000000..cf735e8 --- /dev/null +++ b/test/simple/makefile.mingw3 @@ -0,0 +1,20 @@ +CC = gcc + +CFLAGS = -I../cd/include -I../iup/include + +LIBS = -L../cd/lib/mingw3 -L../iup/lib/mingw3 \ + -lcdiup -lcd -liup \ + -lkernel32 -luser32 -lgdi32 -lcomdlg32 -lole32 -lcomctl32 + +OBJS = simple.o iupmain.o + +all: simple.exe + +simple.o: simple.c simple.h + $(CC) -o $@ -c simple.c $(CFLAGS) + +iupmain.o: iupmain.c simple.h + $(CC) -o $@ -c iupmain.c $(CFLAGS) + +simple.exe: $(OBJS) + $(CC) -o $@ $(OBJS) $(LIBS) diff --git a/test/simple/simple.bat b/test/simple/simple.bat new file mode 100644 index 0000000..fa8f118 --- /dev/null +++ b/test/simple/simple.bat @@ -0,0 +1,3 @@ +@echo off +REM Script generated automatically by tecmake v3.13 +..\bin\Win32\simple.exe %* diff --git a/test/simple/simple.c b/test/simple/simple.c new file mode 100644 index 0000000..efdee2e --- /dev/null +++ b/test/simple/simple.c @@ -0,0 +1,1312 @@ +/* + + Simple Draw Application + + Shows the same picture on several canvas. Used to quick test the CD library and + to demonstrate the use of CD library functions. + + This module uses only the CD library, there is another module to initialize the Window and its menus. + +*/ + + +#include "cd.h" +#include "cdcgm.h" +#include "cddgn.h" +#include "cddxf.h" +#include "cdclipbd.h" +#include "cdemf.h" +#include "cdimage.h" +#include "cdirgb.h" +#include "cdmf.h" +#include "cdprint.h" +#include "cdps.h" +#include "cdpdf.h" +#include "cdwmf.h" +#include "cdiup.h" +#include "cddbuf.h" +#include "cddebug.h" +#include "wd.h" +#include "cdgdiplus.h" + +#include "simple.h" + +#include <stdio.h> +#include <stdlib.h> +#include <memory.h> +#include <string.h> + +/* Global variables */ + +cdCanvas *winCanvas = NULL; /* The window drawing canvas */ +char* winData = NULL; +cdCanvas *dbCanvas = NULL; /* The double buffer canvas */ +cdCanvas *curCanvas = NULL; /* The current canvas */ + +int clipping = CD_CLIPOFF; /* Clipping flag, same as the CD */ +int write_mode = CD_REPLACE; /* Write Mode flag, same as the CD */ +int gdpiplus = 0; +int simple_draw = 0; +int use_transform = 0; +int simulate = 0; + +enum {DRAW_ALL, DRAW_TEXTFONTS, DRAW_TEXTALIGN, DRAW_TEST}; + +#define STYLE_SIZE 10 /* A small pattern and stipple size */ +long pattern[STYLE_SIZE*STYLE_SIZE]; /* Pattern buffer */ +unsigned char stipple[STYLE_SIZE*STYLE_SIZE]; /* Stipple buffer */ + +#define IMAGE_SIZE 100 +unsigned char red[IMAGE_SIZE*IMAGE_SIZE]; /* Red image buffer */ +unsigned char green[IMAGE_SIZE*IMAGE_SIZE]; /* Green image buffer */ +unsigned char blue[IMAGE_SIZE*IMAGE_SIZE]; /* Blue image buffer */ +unsigned char alpha[IMAGE_SIZE*IMAGE_SIZE]; /* Alpha image buffer */ + + +/* Prototype of the function that makes the drawing independent of canvas. */ +void SimpleDraw(void); + +void SimpleInitAlpha(int width, int height, unsigned char* _alpha) +{ + int c, l; + /* initialize the alpha image buffer with a degrade from transparent to opaque */ + for (l = 0; l < height; l++) + for (c = 0; c < width; c++) + _alpha[l*width + c] = (unsigned char)((c*255)/(width-1)); +} + +void SimpleCreateCanvasWindow(void) +{ + /* creates the canvas based in an existing window */ + if (gdpiplus) cdUseContextPlus(1); + winCanvas = cdCreateCanvas(CD_IUP, winData); + if (gdpiplus) cdUseContextPlus(0); + curCanvas = winCanvas; +} + +void SimpleCreateCanvas(char* data) +{ + int c, l; + + memset(pattern, 0xFF, STYLE_SIZE*STYLE_SIZE*4); + + pattern[11] = CD_RED; /*------------*/ + pattern[21] = CD_RED; /* 0123456789*/ + pattern[31] = CD_RED; /* */ + pattern[41] = CD_RED; /*9 WWWWWWWWWW*/ + pattern[51] = CD_RED; /*8 WWWWGGGGGW*/ + pattern[12] = CD_RED; /*7 WWWGGGGGBW*/ + pattern[22] = CD_RED; /*6 WWGGGGGBBW*/ + pattern[32] = CD_RED; /*5 WrrrrrBBBW*/ + pattern[42] = CD_RED; /*4 WrrrrrBBBW*/ + pattern[52] = CD_RED; /*3 WrrrrrBBWW*/ + pattern[13] = CD_RED; /*2 WrrrrrBWWW*/ + pattern[23] = CD_RED; /*1 WrrrrrWWWW*/ + pattern[33] = CD_RED; /*0 WWWWWWWWWW*/ + pattern[43] = CD_RED; /*------------*/ + pattern[53] = CD_RED; + pattern[14] = CD_RED; pattern[15] = CD_RED; + pattern[24] = CD_RED; pattern[25] = CD_RED; + pattern[34] = CD_RED; pattern[35] = CD_RED; + pattern[44] = CD_RED; pattern[45] = CD_RED; + pattern[54] = CD_RED; pattern[55] = CD_RED; + + pattern[26] = CD_BLUE; pattern[37] = CD_BLUE; + pattern[36] = CD_BLUE; pattern[47] = CD_BLUE; + pattern[46] = CD_BLUE; pattern[57] = CD_BLUE; + pattern[56] = CD_BLUE; pattern[67] = CD_BLUE; + + pattern[48] = CD_BLUE; pattern[62] = CD_GREEN; + pattern[58] = CD_BLUE; pattern[63] = CD_GREEN; + pattern[68] = CD_BLUE; pattern[64] = CD_GREEN; + pattern[78] = CD_BLUE; pattern[65] = CD_GREEN; + pattern[66] = CD_GREEN; + + pattern[73] = CD_GREEN; pattern[84] = CD_GREEN; + pattern[74] = CD_GREEN; pattern[85] = CD_GREEN; + pattern[75] = CD_GREEN; pattern[86] = CD_GREEN; + pattern[76] = CD_GREEN; pattern[87] = CD_GREEN; + pattern[77] = CD_GREEN; pattern[88] = CD_GREEN; + + /* initialize the stipple buffer with cross pattern */ + for (l = 0; l < STYLE_SIZE; l++) + for (c = 0; c < STYLE_SIZE; c++) + stipple[l*STYLE_SIZE + c] = (c % 4) == 0? 1: 0; + + SimpleInitAlpha(IMAGE_SIZE, IMAGE_SIZE, alpha); + + winData = data; + SimpleCreateCanvasWindow(); + SimpleDrawWindow(); +} + +int SimpleTransform(void) +{ + use_transform = !use_transform; + SimpleDrawRepaint(); + return 0; +} + +int SimpleContextPlus(void) +{ + gdpiplus = !gdpiplus; + SimpleKillCanvas(); + SimpleCreateCanvasWindow(); + SimpleDrawRepaint(); + return 0; +} + +void PlayCanvasDriver(cdContext* ctx, char* StrData) +{ + int w, h; + cdActivate(curCanvas); + cdBackground(CD_WHITE); + cdClear(); + cdGetCanvasSize(&w, &h, 0, 0); + cdPlay(ctx, 100, w-100, 100, h-100, StrData); +// cdPlay(ctx, 0, 0, 0, 0, StrData); +} + +int SimplePlayClipboard(void) +{ + PlayCanvasDriver(CD_CLIPBOARD, NULL); + return 0; +} + +int SimplePlayCGMBin(void) +{ + PlayCanvasDriver(CD_CGM, "simple_b.cgm"); + return 0; +} + +int SimplePlayCGMText(void) +{ + PlayCanvasDriver(CD_CGM, "simple_t.cgm"); + return 0; +} + +int SimplePlayMetafile(void) +{ + PlayCanvasDriver(CD_METAFILE, "simple.mf"); + return 0; +} + +int SimplePlayWMF(void) +{ + PlayCanvasDriver(CD_WMF, "simple.wmf"); + return 0; +} + +int SimplePlayEMF(void) +{ + PlayCanvasDriver(CD_EMF, "simple.emf"); + return 0; +} + +int SimpleDrawRepaint(void) +{ + cdActivate(curCanvas); + SimpleDraw(); + cdFlush(); + return 0; +} + +int SimpleDrawWindow(void) +{ + curCanvas = winCanvas; + return SimpleDrawRepaint(); +} + +void DrawCanvasDriver(cdContext* ctx, char* StrData) +{ + cdCanvas* tmpCanvas = cdCreateCanvas(ctx, StrData); + if (tmpCanvas == NULL) return; + cdActivate(tmpCanvas); + SimpleDraw(); + cdKillCanvas(tmpCanvas); + cdActivate(curCanvas); +} + +void DrawCanvasDriverSize(cdContext* ctx, char* name, int pixels) +{ + char StrData[100]; + int w, h; + double w_mm, h_mm; + cdActivate(curCanvas); + cdGetCanvasSize(&w, &h, &w_mm, &h_mm); + if (pixels) + sprintf(StrData, "%s %dx%d", name, w, h); + else + sprintf(StrData, "%s %gx%g", name, w_mm, h_mm); + DrawCanvasDriver(ctx, StrData); +} + +void DrawCanvasDriverSizeParam(cdContext* ctx, char* param) +{ + char StrData[100]; + int w, h; + cdActivate(curCanvas); + cdGetCanvasSize(&w, &h, 0, 0); + sprintf(StrData, "%dx%d %s", w, h, param); + DrawCanvasDriver(ctx, StrData); +} + +int SimpleDrawDebug(void) +{ + DrawCanvasDriverSize(CD_DEBUG, "simple_debug.txt", 0); + return 0; +} + +int SimpleDrawCGMText(void) +{ + DrawCanvasDriverSize(CD_CGM, "simple_t.cgm - t", 0); + return 0; +} + +int SimpleDrawCGMBin(void) +{ + DrawCanvasDriverSize(CD_CGM, "simple_b.cgm", 0); + return 0; +} + +int SimpleDrawDXF(void) +{ + DrawCanvasDriverSize(CD_DXF, "simple.dxf", 0); + return 0; +} + +int SimpleDrawDGN(void) +{ + DrawCanvasDriverSize(CD_DGN, "simple.dgn", 0); + return 0; +} + +int SimpleDrawEMF(void) +{ + if (gdpiplus) cdUseContextPlus(1); + DrawCanvasDriverSize(CD_EMF, "simple.emf", 1); + if (gdpiplus) cdUseContextPlus(0); + return 0; +} + +int SimpleDrawMetafile(void) +{ + DrawCanvasDriverSize(CD_METAFILE, "simple.mf", 0); + return 0; +} + +int SimpleDrawPS(void) +{ + DrawCanvasDriver(CD_PS, "simple.ps"); + return 0; +} + +int SimpleDrawPDF(void) +{ +// DrawCanvasDriver(CD_PDF, "simple.pdf"); + return 0; +} + +int SimpleDrawEPS(void) +{ + DrawCanvasDriver(CD_PS, "simple.eps -e"); + return 0; +} + +int SimpleDrawWMF(void) +{ + DrawCanvasDriverSize(CD_WMF, "simple.wmf", 1); + return 0; +} + +int SimpleDrawPrint(void) +{ + if (gdpiplus) cdUseContextPlus(1); + DrawCanvasDriver(CD_PRINTER, "simple print"); + if (gdpiplus) cdUseContextPlus(0); + return 0; +} + +int SimpleDrawPrintDialog(void) +{ + if (gdpiplus) cdUseContextPlus(1); + DrawCanvasDriver(CD_PRINTER, "simple -d"); + if (gdpiplus) cdUseContextPlus(0); + return 0; +} + +int SimpleDrawClipboardBitmap(void) +{ + if (gdpiplus) cdUseContextPlus(1); + DrawCanvasDriverSizeParam(CD_CLIPBOARD, "-b"); + if (gdpiplus) cdUseContextPlus(0); + return 0; +} + +int SimpleDrawClipboardMetafile(void) +{ + if (gdpiplus) cdUseContextPlus(1); + DrawCanvasDriverSizeParam(CD_CLIPBOARD, "-m"); + if (gdpiplus) cdUseContextPlus(0); + return 0; +} + +int SimpleDrawClipboardEMF(void) +{ + if (gdpiplus) cdUseContextPlus(1); + DrawCanvasDriverSizeParam(CD_CLIPBOARD, ""); + if (gdpiplus) cdUseContextPlus(0); + return 0; +} + +int SimpleReplace(void) +{ + write_mode = CD_REPLACE; + cdActivate(curCanvas); + SimpleDrawAll(); + return 0; +} + +int SimpleXor(void) +{ + write_mode = CD_XOR; + cdActivate(curCanvas); + SimpleDrawAll(); + return 0; +} + +int SimpleNotXor(void) +{ + write_mode = CD_NOT_XOR; + cdActivate(curCanvas); + SimpleDrawAll(); + return 0; +} + +int SimpleClippingOff(void) +{ + clipping = CD_CLIPOFF; + cdActivate(curCanvas); + SimpleDrawAll(); + return 0; +} + +int SimpleClippingArea(void) +{ + clipping = CD_CLIPAREA; + cdActivate(curCanvas); + SimpleDrawAll(); + return 0; +} + +int SimpleClippingPolygon(void) +{ + clipping = CD_CLIPPOLYGON; + cdActivate(curCanvas); + SimpleDrawAll(); + return 0; +} + +int SimpleClippingRegion(void) +{ + clipping = CD_CLIPREGION; + cdActivate(curCanvas); + SimpleDrawAll(); + return 0; +} + +void* CreateImageRGBA(int w, int h) +{ + void* myImage; + unsigned char * _alpha = malloc(w * h); + SimpleInitAlpha(w, h, _alpha); + cdSetAttribute("IMAGEALPHA", (char*)_alpha); + cdSetAttribute("IMAGEFORMAT", "32"); // afetara´ o proximo cdCreateImage + myImage = cdCreateImage(w, h); + cdSetAttribute("IMAGEFORMAT", NULL); // remove o atributo para nao afetar outros cdCreateImage + return myImage; +} + +int SimpleDrawImage(void) +{ + if (dbCanvas) cdKillCanvas(dbCanvas); + + if (gdpiplus) cdUseContextPlus(1); + dbCanvas = cdCreateCanvas(CD_DBUFFER, winCanvas); + if (gdpiplus) cdUseContextPlus(0); + + curCanvas = dbCanvas; + SimpleDrawRepaint(); + + return 0; +} + +int SimpleDrawImageRGB(void) +{ + if (dbCanvas) cdKillCanvas(dbCanvas); + + if (gdpiplus) cdUseContextPlus(1); + dbCanvas = cdCreateCanvas(CD_DBUFFERRGB, winCanvas); + if (gdpiplus) cdUseContextPlus(0); + + curCanvas = dbCanvas; + SimpleDrawRepaint(); + + return 0; +} + +int SimpleDrawSimulate(void) +{ + cdActivate(curCanvas); + + simulate = !simulate; + + if (simulate) + cdSimulate(CD_SIM_ALL); + else + cdSimulate(CD_SIM_NONE); + + SimpleDrawRepaint(); + + return 0; +} + +void SimpleKillCanvas(void) +{ + if (dbCanvas) + { + cdKillCanvas(dbCanvas); + dbCanvas = NULL; + } + if (winCanvas) + { + cdKillCanvas(winCanvas); + winCanvas = NULL; + } +} + +void SimpleDraw(void) +{ + if (simple_draw == DRAW_TEXTFONTS) + SimpleDrawTextFonts(); + else if (simple_draw == DRAW_TEXTALIGN) + SimpleDrawTextAlign(); + else if (simple_draw == DRAW_TEST) + SimpleDrawTest(); + else + SimpleDrawAll(); +} + +int SimpleDrawAll(void) +{ + int w, h; + cdGetCanvasSize(&w, &h, 0, 0); + + simple_draw = DRAW_ALL; + + wdViewport(0,w-1,0,h-1); + if (w>h) + wdWindow(0,(double)w/(double)h,0,1); + else + wdWindow(0,1,0,(double)h/(double)w); + + /* Clear the background to be white */ +// cdBackground(CD_WHITE); + cdBackground(CD_GREEN); + cdClear(); + + cdLineWidth(3); + cdForeground(cdEncodeAlpha(CD_DARK_MAGENTA, 128)); + cdRect(100, 200, 100, 200); + + cdBegin(CD_OPEN_LINES); + cdVertex(300, 250); + cdVertex(320, 270); + cdVertex(350, 260); + cdVertex(340, 200); + cdVertex(310, 210); + cdEnd(); + + cdInteriorStyle(CD_SOLID); + + cdForeground(CD_RED); + cdLineWidth(3); + { + int dashes[] = {20, 15, 5, 5}; + cdLineStyleDashes(dashes, 4); + } + cdLineStyle(CD_CUSTOM); + cdLine(0, 0, w-1, h-1); + + cdForeground(CD_BLUE); + cdLineWidth(10); + cdLineStyle(CD_DOTTED); + //cdLine(0, 0, 500, 500); +// wdLine(0, 1, 1, 0); + cdLine(0, h-1, w-1, 0); + + switch(clipping) + { + case CD_CLIPOFF: + cdClip(CD_CLIPOFF); + break; + case CD_CLIPAREA: + /* Defines the clipping area equals the canvas area minus a 100 pixels margin. */ + cdClipArea(100, w - 100, 100, h - 100); + cdClip(CD_CLIPAREA); + break; + case CD_CLIPPOLYGON: + cdBegin(CD_CLIP); + cdVertex(100, 100); + cdVertex(w - 100, 100); + cdVertex(w / 2, h - 100); + cdEnd(); + cdClip(CD_CLIPPOLYGON); + break; + case CD_CLIPREGION: + cdTextAlignment(CD_CENTER); + cdFont(CD_TIMES_ROMAN, CD_BOLD, 50); + + cdBegin(CD_REGION); + cdRegionCombineMode(CD_UNION); + cdBox(100, 200, 100, 200); + cdSector(w/2-50, h/2+50, 150, 150, 0, 360); + cdSector(w/2-50, h/2-50, 150, 150, 0, 360); + cdSector(w/2+50, h/2+50, 150, 150, 0, 360); + cdSector(w/2+50, h/2-50, 150, 150, 0, 360); + cdRegionCombineMode(CD_DIFFERENCE); + cdText(w/2, h/2, "TEXT"); + cdEnd(); +// cdOffsetRegion(-50, 50); + cdClip(CD_CLIPREGION); + + cdForeground(CD_DARK_RED); + cdBox(0,w,0,h); + break; + } + + switch(write_mode) + { + case CD_REPLACE: + cdWriteMode(CD_REPLACE); + break; + case CD_XOR: + cdWriteMode(CD_XOR); + break; + case CD_NOT_XOR: + cdWriteMode(CD_NOT_XOR); + break; + } + + if (use_transform) + { + cdCanvasTransform(cdActiveCanvas(), NULL); + cdCanvasTransformTranslate(cdActiveCanvas(), w/2, h/2); + cdCanvasTransformRotate(cdActiveCanvas(), 30); + cdCanvasTransformScale(cdActiveCanvas(), 0.5, 0.5); + cdCanvasTransformTranslate(cdActiveCanvas(), -w/2, -h/2); + } + +// cdSetfAttribute("ROTATE", "15 %d %d", w/2, h/2); + + cdLineStyle(CD_CONTINUOUS); + cdLineWidth(1); + cdBackOpacity(CD_TRANSPARENT); + + cdForeground(CD_MAGENTA); + cdSector(w-100, 100, 100, 100, 50, 180); + cdForeground(CD_RED); + cdArc(100, 100, 100, 100, 50, 180); + + cdForeground(CD_YELLOW); + cdBox(w/2 - 100, w/2 + 100, h/2 - 100, h/2 + 100); + + cdTextAlignment(CD_CENTER); + cdTextOrientation(70); + cdFont(CD_TIMES_ROMAN, CD_BOLD, 24); + + { + int rect[8]; + cdTextBounds(w/2, h/2, "cdMin Draw (çãí)", rect); + cdForeground(CD_RED); + cdBegin(CD_CLOSED_LINES); + cdVertex(rect[0], rect[1]); + cdVertex(rect[2], rect[3]); + cdVertex(rect[4], rect[5]); + cdVertex(rect[6], rect[7]); + cdEnd(); + } + cdForeground(CD_BLUE); + cdText(w/2, h/2, "cdMin Draw (çãí)"); + cdTextOrientation(0); + + wdBox(0.20, 0.30, 0.40, 0.50); + cdForeground(CD_RED); + wdLine(0.20, 0.40, 0.30, 0.50); + +// wdVectorTextDirection(0, 0, 1, 1); + wdVectorCharSize(0.07); + +// wdVectorText(0.1, 0.4, "ñç áéíóú àèìòù âêîôû äëïöü"); +// wdVectorText(0.1, 0.2, "ÑÇ ÁÉÍÓÚ ÀÈÌÒÙ ÂÊÎÔÛ ÄËÏÖÜ"); + //{ + // int i; + // char t[2]; + // char s[10]; + // int x = 20; + // int y = 0; + // t[1] = 0; + // for (i = 0; i < 256; i++) + // { + // int dx = 90; + // t[0] = (char)i; + // sprintf(s, "%d", i); + // cdText(x, y, s); + // cdText(x+dx, y, t); + // cdVectorText(x+2*dx, y, t); + // + // x += 3*dx + 2*dx/3; + // if ((i+1) % 7 == 0) + // { + // x = 20; + // y += 90; + // } + + // } + //} + + { + double rect[8]; + cdForeground(CD_RED); + if (gdpiplus) + wdGetVectorTextBounds("WDj-Plus", 0.25, 0.35, rect); + else + wdGetVectorTextBounds("WDj", 0.25, 0.35, rect); + cdBegin(CD_CLOSED_LINES); + wdVertex(rect[0], rect[1]); + wdVertex(rect[2], rect[3]); + wdVertex(rect[4], rect[5]); + wdVertex(rect[6], rect[7]); + cdEnd(); + } + + cdPixel(10, h/2+0, CD_RED); + cdPixel(11, h/2+1, CD_GREEN); + cdPixel(12, h/2+2, CD_BLUE); + + /* draws all the mark type possibilities */ + cdForeground(CD_RED); + cdMarkSize(30); + cdMarkType(CD_PLUS); + cdMark(200, 200); + cdMarkType(CD_CIRCLE); + cdMark(w - 200, 200); + cdMarkType(CD_HOLLOW_CIRCLE); + cdMark(200, h - 200); + cdMarkType(CD_DIAMOND); + cdMark(w - 200, h - 200); + + /* draws all the line style possibilities */ + cdLineWidth(1); + cdLineStyle(CD_CONTINUOUS); + cdLine(0, 10, w, 10); + cdLineStyle(CD_DASHED); + cdLine(0, 20, w, 20); + cdLineStyle(CD_DASH_DOT); + cdLine(0, 30, w, 30); + cdLineStyle(CD_DASH_DOT_DOT); + cdLine(0, 40, w, 40); + + /* draws all the hatch style possibilities */ + cdHatch(CD_VERTICAL); + cdBox(0, 50, h - 60, h); + cdHatch(CD_FDIAGONAL); + cdBox(50, 100, h - 60, h); + cdHatch(CD_BDIAGONAL); + cdBox(100, 150, h - 60, h); + cdHatch(CD_CROSS); + cdBox(150, 200, h - 60, h); + cdHatch(CD_HORIZONTAL); + cdBox(200, 250, h - 60, h); + cdHatch(CD_DIAGCROSS); + cdBox(250, 300, h - 60, h); + + /* closed polygon */ + cdBegin(CD_CLOSED_LINES); + cdVertex(w/2, h - 100); + cdVertex(w/2 + 50, h - 150); + cdVertex(w/2, h - 200); + cdVertex(w/2 - 50, h - 150); + cdEnd(); + + /* hatch filled polygon */ + cdHatch(CD_DIAGCROSS); + cdBegin(CD_FILL); + cdVertex(100, h/2); + cdVertex(150, h/2 + 50); + cdVertex(200, h/2); + cdVertex(150, h/2 - 50); + cdEnd(); + + /* pattern filled polygon */ + cdPattern(STYLE_SIZE, STYLE_SIZE, pattern); + cdBegin(CD_FILL); + cdVertex(w - 100, h/2); + cdVertex(w - 150, h/2 + 50); + cdVertex(w - 200, h/2); + cdVertex(w - 150, h/2 - 50); + cdEnd(); + + /* stipple filled polygon */ + cdStipple(STYLE_SIZE, STYLE_SIZE, stipple); + cdBegin(CD_FILL); + cdVertex(w/2, 100); + cdVertex(w/2 + 50, 150); + cdVertex(w/2, 200); + cdVertex(w/2 - 50, 150); + cdEnd(); + + cdBegin(CD_BEZIER); + cdVertex(100, 100); + cdVertex(150, 200); + cdVertex(180, 250); + cdVertex(180, 200); + cdVertex(180, 150); + cdVertex(150, 100); + cdVertex(300, 100); + cdEnd(); + + cdLineWidth(2); + cdLineStyle(CD_CONTINUOUS); + if (gdpiplus) + wdVectorText(0.25, 0.35, "WDj-Plus"); + else + wdVectorText(0.25, 0.35, "WDj"); + + /* always clear the image buffer contents */ +//#define IMAGE_SIZE 16 + memset(red, 0xFF, IMAGE_SIZE*IMAGE_SIZE/2); + memset(green, 0x5F, IMAGE_SIZE*IMAGE_SIZE/2); + memset(blue, 0x5F, IMAGE_SIZE*IMAGE_SIZE/2); + memset(red+IMAGE_SIZE*IMAGE_SIZE/2, 0x5F, IMAGE_SIZE*IMAGE_SIZE/2); + memset(green+IMAGE_SIZE*IMAGE_SIZE/2, 0x8F, IMAGE_SIZE*IMAGE_SIZE/2); + memset(blue+IMAGE_SIZE*IMAGE_SIZE/2, 0x5F, IMAGE_SIZE*IMAGE_SIZE/2); + memset(red+IMAGE_SIZE*(IMAGE_SIZE-1), 0, IMAGE_SIZE); + memset(green+IMAGE_SIZE*(IMAGE_SIZE-1), 0, IMAGE_SIZE); + memset(blue+IMAGE_SIZE*(IMAGE_SIZE-1), 0, IMAGE_SIZE); + memset(red, 0, IMAGE_SIZE); + memset(green, 0, IMAGE_SIZE); + memset(blue, 0, IMAGE_SIZE); + { + int i, offset; + for (i = 0; i < IMAGE_SIZE; i++) + { + offset = i*IMAGE_SIZE; + red[offset] = 0; + green[offset] = 0; + blue[offset] = 0; + red[offset+IMAGE_SIZE-1] = 0; + green[offset+IMAGE_SIZE-1] = 0; + blue[offset+IMAGE_SIZE-1] = 0; + } + } + + //cdSetAttribute("ANTIALIAS", "0"); +// cdGetImageRGB(red, green, blue, w/2 - 50, h/2-50, 100, 100); +// cdPutImageRectRGB(14, 13, red, green, blue, -20, -15, 649, 603, 0, 13, 0, 12); +// cdPutImageRectRGB(16, 16, red, green, blue, 10, 10, 608, 608, 5, 10, 5, 10); +// cdPutImageRectRGB(16, 16, red, green, blue, 10, 10, 64, 64, 5, 10, 5, 10); + +// cdPutImageRGB(IMAGE_SIZE, IMAGE_SIZE, red, green, blue, 100, h - 200, IMAGE_SIZE, IMAGE_SIZE); +// cdPutImageRGBA(IMAGE_SIZE, IMAGE_SIZE, red, green, blue, alpha, 100, h - 200, IMAGE_SIZE, IMAGE_SIZE); + cdPutImageRGB(IMAGE_SIZE, IMAGE_SIZE, red, green, blue, w - 400, h - 310, 3*IMAGE_SIZE, 3*IMAGE_SIZE); +// cdPutImageRGBA(IMAGE_SIZE, IMAGE_SIZE, red, green, blue, alpha, w - 400, h - 310, 3*IMAGE_SIZE, 3*IMAGE_SIZE); + + cdSetAttribute("ROTATE", NULL); + if (use_transform) + cdCanvasTransform(cdActiveCanvas(), NULL); + cdClip(CD_CLIPOFF); + cdFlush(); + + return 0; +} + +void DrawTextBox(int x, int y, char* text) +{ + int xmin, xmax, ymin, ymax; + + cdLineWidth(1); + cdLineStyle(CD_CONTINUOUS); + + /* bounding box */ + cdTextBox(x, y, text, &xmin, &xmax, &ymin, &ymax); + cdForeground(CD_GREEN); + cdRect(xmin, xmax, ymin, ymax); + + /* baseline */ + cdForeground(CD_RED); + cdLine(xmin, y, xmax, y); + + /* reference point */ + cdForeground(CD_BLUE); + cdMarkType(CD_PLUS); + cdMarkSize(30); + cdMark(x, y); + + cdForeground(CD_BLACK); + cdText(x, y, text); +} + +int SimpleDrawTextAlign(void) +{ + int w, h, i, xoff, yoff; + + int text_aligment[] = { + CD_NORTH, + CD_SOUTH, + CD_EAST, + CD_WEST, + CD_NORTH_EAST, + CD_NORTH_WEST, + CD_SOUTH_EAST, + CD_SOUTH_WEST, + CD_CENTER, + CD_BASE_CENTER, + CD_BASE_RIGHT, + CD_BASE_LEFT + }; + + char* text_aligment_str[] = { + "jNorth (Ãy)", + "jSouth (Ãy)", + "jEast (Ãy)", + "jWest (Ãy)", + "jNorth East (Ãy)", + "jNorth West (Ãy)", + "jSouth East (Ãy)", + "jSouth West (Ãy)", + "jCenter (Ãy)", + "jBase Center (Ãy)", + "jBase Right (Ãy)", + "jBase Left (Ãy)" + }; + + cdGetCanvasSize(&w, &h, 0, 0); + + cdBackground(CD_WHITE); + cdClear(); + + simple_draw = DRAW_TEXTALIGN; + +// cdTextOrientation(45); + + xoff = w/4; + yoff = h/7; + +//cdFont(CD_TIMES_ROMAN, CD_PLAIN, 14); + cdFont(CD_HELVETICA, CD_PLAIN, 18); + + for (i = 0; i < 12; i++) + { + cdTextAlignment(text_aligment[i]); + if (i < 6) + { + DrawTextBox(xoff, yoff*(i+1), text_aligment_str[i]); + } + else + { + DrawTextBox(3*xoff, yoff*(i-5), text_aligment_str[i]); + } + } + cdFlush(); + return 0; +} + +void DrawTextFont(int font, int size, int xoff, int yoff, char* text) +{ + cdFont(font, CD_PLAIN, size); + DrawTextBox(xoff, yoff, text); + + cdFont(font, CD_BOLD, size); + DrawTextBox(2*xoff, yoff, text); + + cdFont(font, CD_ITALIC, size); + DrawTextBox(3*xoff, yoff, text); + + cdFont(font, CD_BOLD_ITALIC, size); + DrawTextBox(4*xoff, yoff, text); +} + +int SimpleDrawTextFonts(void) +{ + int xoff, yoff, size; + + cdBackground(CD_WHITE); + cdClear(); + + simple_draw = DRAW_TEXTFONTS; + + xoff = 470; + yoff = 150; + size = -30; + + cdTextAlignment(CD_CENTER); + +// DrawTextFont(CD_COURIER, size, xoff, yoff, "Courier"); + +// DrawTextFont(CD_TIMES_ROMAN, size, xoff, 2*yoff, "Times Roman"); + +// DrawTextFont(CD_HELVETICA, size, xoff, 3*yoff, "Helvetica"); + +// DrawTextFont(CD_SYSTEM, size, xoff, 4*yoff, "System"); + + { +// static char native[50] = "Tecmedia, -60"; +// static char native[50] = "-*-helvetica-medium-r-*-*-8-*"; +// static char native[50] = "Edwardian Script ITC, 24"; +// cdSetAttribute("ADDFONTMAP","Edwardian Script ITC=ITCEDSCR"); + +// char native[50] = "Book Antiqua, 24"; +// cdSetAttribute("ADDFONTMAP", "Book Antiqua=BKANT"); + +// cdNativeFont("-d"); +// cdNativeFont(native); +// DrawTextBox(xoff, yoff, native); +// DrawTextBox(xoff, yoff, "The quick brown fox."); + } + + //cdNativeFont("Tecmedia, 36"); + + cdSetAttribute("ADDFONTMAP", "WingDings=WingDing"); + cdNativeFont("WingDings, 36"); + + cdText(500, 50, "X"); + //cdText(500, 50, "abcdefghijklmnopqrstuvwxyz"); + //cdText(500, 150, "ABCDEFGHIJKLMNOPQRSTUVWXYZ"); + //cdText(500, 250, "1234567890"); + //cdText(500, 350, "'\"!@#$%¨&*()_+-=[]^/;.,"); + + //cdFont(CD_COURIER, 0, 22); + //cdText(10, 60, "abcdefghijklmnopqrstuvwxyz"); + //cdText(10, 160, "ABCDEFGHIJKLMNOPQRSTUVWXYZ"); + //cdText(10, 260, "1234567890"); + //cdText(500, 360, "'\"!@#$%¨&*()_+-=[]^/;.,"); + + cdFlush(); + return 0; +} + +void SimpleDrawTest(void) +//void SimpleDrawMainTest(void) +{ + long pattern[16]; /* 4x4 pattern */ + int w, h; + int xmin, xmax, ymin, ymax; + + simple_draw = DRAW_TEST; + +/* notice that if we are not using world coordinates + it is harder to position all the objetcs we want. */ + cdGetCanvasSize(&w, &h, 0, 0); + + cdBackground(CD_WHITE); + cdClear(); + +/* pattern initialization */ + pattern[0] = CD_RED; pattern[1] = CD_RED; /* first line */ + pattern[2] = CD_YELLOW; pattern[3] = CD_YELLOW; + pattern[4] = CD_RED; pattern[5] = CD_RED; /* second line */ + pattern[6] = CD_YELLOW; pattern[7] = CD_YELLOW; + pattern[8] = CD_YELLOW; pattern[9] = CD_YELLOW; /* third line */ + pattern[10] = CD_YELLOW; pattern[11] = CD_YELLOW; + pattern[12] = CD_YELLOW; pattern[13] = CD_YELLOW; /* fourth line */ + pattern[14] = CD_YELLOW; pattern[15] = CD_YELLOW; + +/* set the line attributes */ + cdLineWidth(4); + cdLineStyle(CD_CONTINUOUS); + +/* in the center draw a pattern pizza + with a slice mising */ + cdPattern(4, 4, pattern); + cdSector(w/2, h/2, w/2, h/2, 45, 0); +/* draws a dark red border */ + cdForeground(CD_DARK_RED); + cdInteriorStyle(CD_HOLLOW); + cdSector(w/2, h/2, w/2, h/2, 45, 0); + +/* on the left a red hash diamond */ +/* notice the the default back opacity is transparent + and the pattern of the sector will still be visible + inside the hatch where the two objects intersect */ + cdForeground(CD_RED); + cdHatch(CD_DIAGCROSS); + cdBegin(CD_FILL); + cdVertex(w/4, h/4); + cdVertex(w/2-w/8, h/2); + cdVertex(w/4, 3*h/4); + cdVertex(w/8, h/2); + cdEnd(); + +/* draws a blue roof.*/ + cdForeground(CD_BLUE); + cdLine(w/8, h/2, w/4, 3*h/4); + cdLine(w/4, 3*h/4, w/2-w/8, h/2); + +/* draws a dashed ribbon on the right + with a custom color */ + cdForeground(cdEncodeColor(100, 25, 200)); + cdLineStyle(CD_DASH_DOT); + cdBegin(CD_BEZIER); + cdVertex(3*w/4-20, h/2-50); + cdVertex(3*w/4+150, 3*h/4-50); + cdVertex(3*w/4-150, 3*h/4-50); + cdVertex(3*w/4+20, h/2-50); + cdEnd(); + + cdFont(CD_HELVETICA, CD_BOLD, 40); + cdTextAlignment(CD_CENTER); + cdText(w/2, h/4-50, "Canvas Draw"); + cdTextBox(w/2, h/4-50, "Canvas Draw", &xmin, &xmax, &ymin, &ymax); + cdRect(xmin, xmax, ymin, ymax); + cdFlush(); +} + +void draw_wd(void) +{ + cdBackground(CD_WHITE); + cdClear(); + cdLineStyle(CD_CONTINUOUS); + cdLineWidth(1); + + wdVectorTextDirection(0, 0, 1, 1); + + wdVectorCharSize(0.1); + wdVectorText(0.25, 0.35, "Vector Text"); + + { + double rect[8]; + cdForeground(CD_RED); + wdGetVectorTextBounds("Vector Text", 0.25, 0.35, rect); + cdBegin(CD_CLOSED_LINES); + wdVertex(rect[0], rect[1]); + wdVertex(rect[2], rect[3]); + wdVertex(rect[4], rect[5]); + wdVertex(rect[6], rect[7]); + cdEnd(); + } + cdFlush(); +} + +void SimpleDrawTestHardCopy(void) +{ + int w, h; + cdGetCanvasSize(&w, &h, 0, 0); + + simple_draw = DRAW_ALL; + + wdViewport(0,w-1,0,h-1); + if (w>h) + wdWindow(0,(double)w/(double)h,0,1); + else + wdWindow(0,1,0,(double)h/(double)w); + + draw_wd(); + + wdHardcopy(CD_CLIPBOARD, "800x600", cdActiveCanvas(), draw_wd ); + cdFlush(); +} + +void SimpleDrawTestImageRGB(void) +{ + int size = 2048*2048; + unsigned char *red, *green, *blue; + cdCanvas* canvas = cdCreateCanvas(CD_IMAGERGB, "2048x2048"); + cdActivate(canvas); + + red = calloc(size, 1); + green = calloc(size, 1); + blue = calloc(size, 1); + + cdPutImageRectRGB(2048, 2048, red, green, blue, 0, 3, 2048, 2017, 0, 2047, 3, 2020); + + free(red); + free(green); + free(blue); + + cdKillCanvas(canvas); + cdFlush(); +} + +//void SimpleDrawTest(void) +void SimpleDrawVectorText(void) +{ + simple_draw = DRAW_TEST; + cdBackground(CD_WHITE); + cdClear(); + cdLineStyle(CD_CONTINUOUS); + cdLineWidth(1); + +// wdVectorText(0.1, 0.4, "ãõñç áéíóú àèìòù âêîôû äëïöü"); +// wdVectorText(0.1, 0.2, "ÃÕÑÇ ÁÉÍÓÚ ÀÈÌÒÙ ÂÊÎÔÛ ÄËÏÖÜ "); + cdVectorFont("../../etc/vectorfont26.txt"); /* original Simplex II */ + { + int i; + char t[2]; + char s[10]; + int x = 10; + int y = 600; + t[1] = 0; + cdFont(CD_COURIER, CD_BOLD, 14); + cdVectorCharSize(25); + for (i = 128; i < 256; i++) + { + int dx = 30; + t[0] = (char)i; + sprintf(s, "%3d", i); + cdForeground(CD_DARK_RED); + cdText(x, y, s); +// cdText(x+dx, y, t); + cdForeground(CD_BLACK); + cdVectorText(x+2*dx-10, y, t); + + x += 3*dx; + if ((i+1) % 8 == 0) + { + x = 10; + y -= 30; + } + } + //cdFont(CD_TIMES_ROMAN, CD_PLAIN, 24); + //cdVectorCharSize(24); + // for (i = 192; i < 256; i++) + // { + // int dx = 92; + // t[0] = (char)i; + // sprintf(s, "%d", i); + // cdText(x, y, s); + // cdText(x+dx, y, t); + // cdVectorText(x+2*dx, y, t); + // + // x += 3*dx + 2*dx/3; + // if ((i+1) % 4 == 0) + // { + // x = 30; + // y += 52; + // } + // } + } + cdFlush(); +} + +typedef struct _point +{ + double x, y; +} point; + +point* load_point_file(const char* file_name, int *count) +{ + float x, y; + point* point_list; + int max_count = 100, dummy; + FILE* file = fopen(file_name, "rb"); + if (!file) + return NULL; + + point_list = malloc(max_count*sizeof(point)); + + /* read header */ + fscanf(file, "##### %d\n", &dummy); + + *count = 0; + while (!feof(file)) + { + if (fscanf(file, "( %g | %g )\n", &x, &y) == 2) + { + if (*count == max_count) + { + max_count += 100; + point_list = realloc(point_list, max_count*sizeof(point)); + } + + point_list[*count].x = x; + point_list[*count].y = y; + + (*count)++; + } + } + + fclose(file); + + return point_list; +} + +point square[4] = { + {100,100}, + {200,100}, + {200,200}, + {100,200}, +}; + +point corner[6] = { + {100,100}, + {200,100}, + {200,200}, + {150,200}, + {150,300}, + {100,300}, +}; + +//void SimpleDrawTest(void) +void SimpleDrawPolygon(void) +{ + int count, i; + point* point_list; + char* file_name; + + simple_draw = DRAW_TEST; + cdBackground(CD_WHITE); + cdClear(); + cdLineStyle(CD_CONTINUOUS); + cdLineWidth(1); + cdInteriorStyle(CD_SOLID); + +// file_name = "D:\\Downloads\\TesteCdCanvas\\example_data\\continentes_geom_id_78_polygon_1_440x512.txt"; +// file_name = "D:\\Downloads\\TesteCdCanvas\\example_data\\continentes_geom_id_78_polygon_1_558x650.txt"; +// file_name = "D:\\Downloads\\TesteCdCanvas\\example_data\\guanabara_oceano_obj_id_5_geom_id_11_polygon_ring_2.txt"; + file_name = "D:\\Downloads\\TesteCdCanvas\\example_data\\guanabara_oceano_obj_id_5_geom_id_11_polygon_ring_6.txt"; +// file_name = "D:\\Downloads\\TesteCdCanvas\\example_data\\guanabara_oceano_obj_id_5_geom_id_11_polygon_ring_15.txt"; +// file_name = "D:\\Downloads\\TesteCdCanvas\\example_data\\guanabara_oceano_obj_id_5_geom_id_11_polygon_ring_34.txt"; +// file_name = "D:\\Downloads\\TesteCdCanvas\\example_data\\guanabara_oceano_obj_id_5_geom_id_11_polygon_ring_37.txt"; +// file_name = "D:\\Downloads\\TesteCdCanvas\\example_data\\guanabara_oceano_obj_id_5_geom_id_11_polygon_ring_53.txt"; +// file_name = "D:\\Downloads\\TesteCdCanvas\\example_data\\guanabara_oceano_obj_id_5_geom_id_11_polygon_ring_59.txt"; + +// point_list = square; +// count = 4; +// point_list = corner; +// count = 6; + + point_list = load_point_file(file_name, &count); + if (!point_list) + return; + + cdForeground(CD_BLACK); + cdBegin(CD_CLOSED_LINES); + for (i=0; i<count; i++) + { + cdVertex((int)point_list[i].x, (int)point_list[i].y); + } + cdEnd(); + + cdForeground(CD_RED); + cdBegin(CD_FILL); + for (i=0; i<count; i++) + { + cdVertex((int)point_list[i].x, (int)point_list[i].y); + } + cdEnd(); + + cdFlush(); + + free(point_list); +} diff --git a/test/simple/simple.dsp b/test/simple/simple.dsp new file mode 100644 index 0000000..c69b8df --- /dev/null +++ b/test/simple/simple.dsp @@ -0,0 +1,83 @@ +# Microsoft Developer Studio Project File - Name="simple" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Application" 0x0101 + +CFG=simple - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "simple.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "simple.mak" CFG="simple - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "simple - Win32 Debug" (based on "Win32 (x86) Application") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +MTL=midl.exe +RSC=rc.exe + +!IF "$(CFG)" == "simple - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "..\bin" +# PROP BASE Intermediate_Dir "..\obj\simple" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "..\bin" +# PROP Intermediate_Dir "..\obj\simple" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /MT /I "..\..\include" /I "..\..\..\iup\include" /Z7 /W4 /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "__CD__" /D "simple" /D "_CRT_SECURE_NO_DEPRECATE" /D "_MBCS" /Fp".\..\obj\simple/simple.pch" /Fo".\..\obj\simple/" /Fd".\..\obj\simple/" /GZ /c /GX +# ADD CPP /nologo /MT /I "..\..\include" /I "..\..\..\iup\include" /Z7 /W4 /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "__CD__" /D "simple" /D "_CRT_SECURE_NO_DEPRECATE" /D "_MBCS" /Fp".\..\obj\simple/simple.pch" /Fo".\..\obj\simple/" /Fd".\..\obj\simple/" /GZ /c /GX +# ADD BASE MTL /nologo /tlb".\..\bin\simple.tlb" /win32 +# ADD MTL /nologo /tlb".\..\bin\simple.tlb" /win32 +# ADD BASE RSC /l 1046 /d "_DEBUG" +# ADD RSC /l 1046 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib cd.lib cdiup.lib iup.lib comctl32.lib cdgdiplus.lib gdiplus.lib cdpdflib.lib iupcontrols.lib /nologo /out:"..\bin\simple.exe" /incremental:yes /libpath:"..\..\lib" /libpath:"..\..\..\iup\lib" /debug /pdb:".\..\bin\simple.pdb" /pdbtype:sept /subsystem:windows /MACHINE:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib cd.lib cdiup.lib iup.lib comctl32.lib cdgdiplus.lib gdiplus.lib cdpdflib.lib iupcontrols.lib /nologo /out:"..\bin\simple.exe" /incremental:yes /libpath:"..\..\lib" /libpath:"..\..\..\iup\lib" /debug /pdb:".\..\bin\simple.pdb" /pdbtype:sept /subsystem:windows /MACHINE:I386 + +!ENDIF + +# Begin Target + +# Name "simple - Win32 Debug" +# Begin Source File + +SOURCE=iupmain.c +# End Source File +# Begin Source File + +SOURCE=simple.c +# End Source File +# Begin Source File + +SOURCE=simple.h +# End Source File +# Begin Source File + +SOURCE=simple.led +# End Source File +# Begin Source File + +SOURCE=simple_led.c +# End Source File +# End Target +# End Project + diff --git a/test/simple/simple.h b/test/simple/simple.h new file mode 100644 index 0000000..123b31c --- /dev/null +++ b/test/simple/simple.h @@ -0,0 +1,54 @@ + +#ifndef __Simple_H +#define __Simple_H + +#include <cd.h> + +void SimpleCreateCanvas(char* data); +void SimpleKillCanvas(void); + +int SimplePlayClipboard(void); +int SimplePlayCGMBin(void); +int SimplePlayCGMText(void); +int SimplePlayMetafile(void); +int SimplePlayWMF(void); +int SimplePlayEMF(void); + +int SimpleDrawDebug(void); +int SimpleDrawWindow(void); +int SimpleDrawCGMText(void); +int SimpleDrawCGMBin(void); +int SimpleDrawDXF(void); +int SimpleDrawDGN(void); +int SimpleDrawEMF(void); +int SimpleDrawMetafile(void); +int SimpleDrawPDF(void); +int SimpleDrawPS(void); +int SimpleDrawEPS(void); +int SimpleDrawWMF(void); +int SimpleDrawPrint(void); +int SimpleDrawPrintDialog(void); +int SimpleDrawClipboardBitmap(void); +int SimpleDrawClipboardMetafile(void); +int SimpleDrawClipboardEMF(void); +int SimpleDrawImage(void); +int SimpleDrawImageRGB(void); +int SimpleDrawSimulate(void); + +int SimpleNotXor(void); +int SimpleXor(void); +int SimpleReplace(void); +int SimpleClippingOff(void); +int SimpleClippingArea(void); +int SimpleClippingPolygon(void); +int SimpleClippingRegion(void); + +int SimpleTransform(void); +int SimpleContextPlus(void); +int SimpleDrawAll(void); +int SimpleDrawTextAlign(void); +int SimpleDrawTextFonts(void); +void SimpleDrawTest(void); +int SimpleDrawRepaint(void); + +#endif diff --git a/test/simple/simple.led b/test/simple/simple.led new file mode 100644 index 0000000..cdf4430 --- /dev/null +++ b/test/simple/simple.led @@ -0,0 +1,93 @@ +mnOpen = MENU +( + ITEM("CGM - Binary", SimplePlayCGMBin), + ITEM("CGM - Text", SimplePlayCGMText), + ITEM("METAFILE", SimplePlayMetafile), + ITEM("WMF", SimplePlayWMF), + ITEM("EMF", SimplePlayEMF) +) + +mnSaveAs = MENU +( + ITEM("DEBUG", SimpleDrawDebug), + ITEM("CGM - Binary", SimpleDrawCGMBin), + ITEM("CGM - Text", SimpleDrawCGMText), + ITEM("DGN", SimpleDrawDGN), + ITEM("DXF", SimpleDrawDXF), + ITEM("EMF", SimpleDrawEMF), + ITEM("METAFILE", SimpleDrawMetafile), + ITEM("PDF", SimpleDrawPDF), + ITEM("PS", SimpleDrawPS), + ITEM("EPS", SimpleDrawEPS), + ITEM("WMF", SimpleDrawWMF) +) + +mnFile = MENU +( + SUBMENU("Open", mnOpen), + SUBMENU("Save As", mnSaveAs), + SEPARATOR(), + ITEM("Print", SimpleDrawPrint), + ITEM("Print Dialog...", SimpleDrawPrintDialog), + SEPARATOR(), + ITEM("Exit", cmdExit) +) + +mnEdit = MENU +( + ITEM("Copy as Metafile", SimpleDrawClipboardMetafile), + ITEM("Copy as EMF", SimpleDrawClipboardEMF), + ITEM("Copy as Bitmap", SimpleDrawClipboardBitmap), + ITEM("Paste", SimplePlayClipboard) +) + +mnClipping = MENU +( + ITEM("Off", SimpleClippingOff), + ITEM("Area", SimpleClippingArea), + ITEM("Polygon", SimpleClippingPolygon), + ITEM("Region", SimpleClippingRegion) +) + +mnWriteMode = MENU +( + ITEM("Replace", SimpleReplace), + ITEM("Xor", SimpleXor), + ITEM("Not Xor", SimpleNotXor) +) + +mnOptions = MENU +( + SUBMENU("Clipping", mnClipping), + SUBMENU("Write Mode", mnWriteMode), + ITEM("Simulate", SimpleDrawSimulate), + ITEM("Transform", SimpleTransform), + ITEM("Context Plus", SimpleContextPlus) +) + +mnSurface = MENU +( + ITEM("Window", SimpleDrawWindow), + ITEM("Server Image", SimpleDrawImage), + ITEM("Image RGB", SimpleDrawImageRGB) +) + +mnPrimitives = MENU +( + ITEM("All", SimpleDrawAll), + ITEM("Text Align", SimpleDrawTextAlign), + ITEM("Text Fonts", SimpleDrawTextFonts), + ITEM("Test", SimpleDrawTest) +) + +mnSimpleMenu = MENU +( + SUBMENU("File", mnFile), + SUBMENU("Edit", mnEdit), + SUBMENU("Options", mnOptions), + SUBMENU("Surface", mnSurface), + SUBMENU("Primitives", mnPrimitives) +) + +SimpleCanvas = CANVAS[BORDER=0](SimpleRepaint) +SimpleDialog = DIALOG [TITLE="Simple Draw", MENU=mnSimpleMenu](SimpleCanvas) diff --git a/test/simple/simple.sln b/test/simple/simple.sln new file mode 100644 index 0000000..fc2222e --- /dev/null +++ b/test/simple/simple.sln @@ -0,0 +1,20 @@ +Microsoft Visual Studio Solution File, Format Version 8.00 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "simple", "simple.vcproj", "{82BC36B1-9F7A-41D4-A24F-DBE012378CE6}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + Debug = Debug + EndGlobalSection + GlobalSection(ProjectDependencies) = postSolution + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {82BC36B1-9F7A-41D4-A24F-DBE012378CE6}.Debug.ActiveCfg = Debug|Win32 + {82BC36B1-9F7A-41D4-A24F-DBE012378CE6}.Debug.Build.0 = Debug|Win32 + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/test/simple/simple.vcproj b/test/simple/simple.vcproj new file mode 100644 index 0000000..87a199c --- /dev/null +++ b/test/simple/simple.vcproj @@ -0,0 +1,131 @@ +<?xml version="1.0" encoding="Windows-1252"?> +<VisualStudioProject + ProjectType="Visual C++" + Version="9,00" + Name="simple" + ProjectGUID="{82BC36B1-9F7A-41D4-A24F-DBE012378CE6}" + TargetFrameworkVersion="131072" + > + <Platforms> + <Platform + Name="Win32" + /> + </Platforms> + <ToolFiles> + </ToolFiles> + <Configurations> + <Configuration + Name="Debug|Win32" + OutputDirectory="..\bin" + IntermediateDirectory="..\obj\simple" + ConfigurationType="1" + InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops" + UseOfMFC="0" + ATLMinimizesCRunTimeLibraryUsage="false" + CharacterSet="2" + > + <Tool + Name="VCPreBuildEventTool" + /> + <Tool + Name="VCCustomBuildTool" + /> + <Tool + Name="VCXMLDataGeneratorTool" + /> + <Tool + Name="VCWebServiceProxyGeneratorTool" + /> + <Tool + Name="VCMIDLTool" + TypeLibraryName=".\..\bin/simple.tlb" + /> + <Tool + Name="VCCLCompilerTool" + Optimization="0" + AdditionalIncludeDirectories="..\..\include,..\..\..\iup\include" + PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;__CD__;simple;_CRT_SECURE_NO_DEPRECATE" + RuntimeLibrary="0" + PrecompiledHeaderFile=".\..\obj\simple/simple.pch" + AssemblerListingLocation=".\..\obj\simple/" + ObjectFile=".\..\obj\simple/" + ProgramDataBaseFileName=".\..\obj\simple/" + WarningLevel="4" + SuppressStartupBanner="true" + DebugInformationFormat="1" + /> + <Tool + Name="VCManagedResourceCompilerTool" + /> + <Tool + Name="VCResourceCompilerTool" + PreprocessorDefinitions="_DEBUG" + Culture="1046" + /> + <Tool + Name="VCPreLinkEventTool" + /> + <Tool + Name="VCLinkerTool" + AdditionalOptions="/MACHINE:I386" + AdditionalDependencies="freetype6.lib cd.lib iupcd.lib iup.lib comctl32.lib cdgdiplus.lib gdiplus.lib cdpdflib.lib iupcontrols.lib" + OutputFile="..\bin/simple.exe" + LinkIncremental="2" + SuppressStartupBanner="true" + AdditionalLibraryDirectories="..\..\lib,..\..\..\iup\lib" + GenerateDebugInformation="true" + ProgramDatabaseFile=".\..\bin/simple.pdb" + SubSystem="2" + RandomizedBaseAddress="1" + DataExecutionPrevention="0" + /> + <Tool + Name="VCALinkTool" + /> + <Tool + Name="VCManifestTool" + /> + <Tool + Name="VCXDCMakeTool" + /> + <Tool + Name="VCBscMakeTool" + /> + <Tool + Name="VCFxCopTool" + /> + <Tool + Name="VCAppVerifierTool" + /> + <Tool + Name="VCPostBuildEventTool" + /> + </Configuration> + </Configurations> + <References> + </References> + <Files> + <File + RelativePath="iupmain.c" + > + </File> + <File + RelativePath="simple.c" + > + </File> + <File + RelativePath="simple.h" + > + </File> + <File + RelativePath="simple.led" + > + </File> + <File + RelativePath="simple_led.c" + > + </File> + </Files> + <Globals> + </Globals> +</VisualStudioProject> diff --git a/test/simple/simple_led.c b/test/simple/simple_led.c new file mode 100644 index 0000000..07eebc8 --- /dev/null +++ b/test/simple/simple_led.c @@ -0,0 +1,125 @@ +/* Arquivo gerado automaticamente por ledc 2.5 */ + +#include <stdlib.h> +#include <stdarg.h> +#include <iup.h> + +static Ihandle* named[ 13 ]; + +static Ihandle* decl( char* name, Ihandle* elem, char* first, ...) +{ + char *attr, *val; + va_list arg; + va_start (arg, first); + attr = first; + while (attr) + { + val = va_arg(arg,char*); + IupSetAttribute( elem, attr, val ); + attr = va_arg(arg,char*); + } + va_end (arg); + if(name) IupSetHandle( name, elem ); + return elem; +} + + +void simple_loadled (void) +{ + named[0] = decl( "mnOpen", IupMenu( + IupItem( "CGM - Binary", "SimplePlayCGMBin" ), + IupItem( "CGM - Text", "SimplePlayCGMText" ), + IupItem( "METAFILE", "SimplePlayMetafile" ), + IupItem( "WMF", "SimplePlayWMF" ), + IupItem( "EMF", "SimplePlayEMF" ), + NULL), NULL ); + named[1] = decl( "mnSaveAs", IupMenu( + IupItem( "DEBUG", "SimpleDrawDebug" ), + IupItem( "CGM - Binary", "SimpleDrawCGMBin" ), + IupItem( "CGM - Text", "SimpleDrawCGMText" ), + IupItem( "DGN", "SimpleDrawDGN" ), + IupItem( "DXF", "SimpleDrawDXF" ), + IupItem( "EMF", "SimpleDrawEMF" ), + IupItem( "METAFILE", "SimpleDrawMetafile" ), + IupItem( "PDF", "SimpleDrawPDF" ), + IupItem( "PS", "SimpleDrawPS" ), + IupItem( "EPS", "SimpleDrawEPS" ), + IupItem( "WMF", "SimpleDrawWMF" ), + NULL), NULL ); + named[2] = decl( "mnFile", IupMenu( + IupSubmenu( "Open", + named[0] /* mnOpen */ + ), + IupSubmenu( "Save As", + named[1] /* mnSaveAs */ + ), + IupSeparator(), + IupItem( "Print", "SimpleDrawPrint" ), + IupItem( "Print Dialog...", "SimpleDrawPrintDialog" ), + IupSeparator(), + IupItem( "Exit", "cmdExit" ), + NULL), NULL ); + named[3] = decl( "mnEdit", IupMenu( + IupItem( "Copy as Metafile", "SimpleDrawClipboardMetafile" ), + IupItem( "Copy as EMF", "SimpleDrawClipboardEMF" ), + IupItem( "Copy as Bitmap", "SimpleDrawClipboardBitmap" ), + IupItem( "Paste", "SimplePlayClipboard" ), + NULL), NULL ); + named[4] = decl( "mnClipping", IupMenu( + IupItem( "Off", "SimpleClippingOff" ), + IupItem( "Area", "SimpleClippingArea" ), + IupItem( "Polygon", "SimpleClippingPolygon" ), + IupItem( "Region", "SimpleClippingRegion" ), + NULL), NULL ); + named[5] = decl( "mnWriteMode", IupMenu( + IupItem( "Replace", "SimpleReplace" ), + IupItem( "Xor", "SimpleXor" ), + IupItem( "Not Xor", "SimpleNotXor" ), + NULL), NULL ); + named[6] = decl( "mnOptions", IupMenu( + IupSubmenu( "Clipping", + named[4] /* mnClipping */ + ), + IupSubmenu( "Write Mode", + named[5] /* mnWriteMode */ + ), + IupItem( "Simulate", "SimpleDrawSimulate" ), + IupItem( "Transform", "SimpleTransform" ), + IupItem( "Context Plus", "SimpleContextPlus" ), + NULL), NULL ); + named[7] = decl( "mnSurface", IupMenu( + IupItem( "Window", "SimpleDrawWindow" ), + IupItem( "Server Image", "SimpleDrawImage" ), + IupItem( "Image RGB", "SimpleDrawImageRGB" ), + NULL), NULL ); + named[8] = decl( "mnPrimitives", IupMenu( + IupItem( "All", "SimpleDrawAll" ), + IupItem( "Text Align", "SimpleDrawTextAlign" ), + IupItem( "Text Fonts", "SimpleDrawTextFonts" ), + IupItem( "Test", "SimpleDrawTest" ), + NULL), NULL ); + named[9] = decl( "mnSimpleMenu", IupMenu( + IupSubmenu( "File", + named[2] /* mnFile */ + ), + IupSubmenu( "Edit", + named[3] /* mnEdit */ + ), + IupSubmenu( "Options", + named[6] /* mnOptions */ + ), + IupSubmenu( "Surface", + named[7] /* mnSurface */ + ), + IupSubmenu( "Primitives", + named[8] /* mnPrimitives */ + ), + NULL), NULL ); + named[10] = decl( "SimpleCanvas", IupCanvas( "SimpleRepaint" ), + "BORDER", "0", NULL ); + named[11] = decl( "SimpleDialog", IupDialog( + named[10] /* SimpleCanvas */ + ), + "TITLE", "Simple Draw", + "MENU", "mnSimpleMenu", NULL ); +} diff --git a/test/simple/teste.cpp b/test/simple/teste.cpp new file mode 100644 index 0000000..83fbbac --- /dev/null +++ b/test/simple/teste.cpp @@ -0,0 +1,219 @@ +#include <stdlib.h> +#include <stdio.h> +#include <string.h> +#include <io.h> + +#include "iup.h" +#include "cd.h" +#include "cdiup.h" +#include "cdirgb.h" + +/*************************************************************************** +* callbacks do IUP * +****************************************************************************/ +int Draw( Ihandle *dial ) +{ + cdCanvas *cnv = (cdCanvas *) IupGetAttribute(dial, "CDCANVAS"); + cdCanvas *imgCnv = (cdCanvas *) IupGetAttribute(dial, "IMGCNV"); + + if (cnv==NULL) + return IUP_DEFAULT; + + int width, height; + cdCanvasGetSize(cnv, &width, &height, NULL, NULL); + + cdCanvasInteriorStyle(cnv, CD_SOLID); + cdCanvasForeground(cnv, CD_WHITE); + cdCanvasBox(cnv, 0, width, 0, height); + + if (imgCnv==NULL) + return IUP_DEFAULT; + + int w, h; + cdCanvasGetSize(imgCnv, &w, &h, NULL, NULL); + + unsigned char* red = cdRedImage(imgCnv); + unsigned char* green = cdGreenImage(imgCnv); + unsigned char* blue = cdBlueImage(imgCnv); + + int dx = width - w; + int dy = height - h; + + cdCanvasPutImageRectRGB(cnv, w, h, red, green, blue, (int)(dx / 2.0), (int)(dy / 2.0), 0, 0, 0, 0, 0, 0); + + return IUP_DEFAULT; +} + +int repaint (Ihandle *self, float x, float y) +{ + Ihandle *dial = (Ihandle *) IupGetDialog(self); + + cdCanvas *cnv = (cdCanvas *) IupGetAttribute(dial, "CDCANVAS"); + + Draw(dial); + + return IUP_DEFAULT; +} + +static int Resize (Ihandle *self, int larg, int alt) +{ + Ihandle *dial = IupGetDialog(self); + + if (dial==NULL) return IUP_DEFAULT; + + cdCanvas *cnv = (cdCanvas *) IupGetAttribute(dial, "CDCANVAS"); + + if (cnv!=NULL) + cdCanvasActivate(cnv); + + Draw(dial); + + return IUP_DEFAULT; +} + +static int doexit(Ihandle *self) +{ + return IUP_CLOSE; +} + +cdCanvas* buildBackImage(Ihandle* dial) +{ + unsigned char* r = (unsigned char*) IupGetAttribute(dial, "BUFFRED"); + unsigned char* g = (unsigned char*) IupGetAttribute(dial, "BUFFGREEN"); + unsigned char* b = (unsigned char*) IupGetAttribute(dial, "BUFFBLUE"); + + cdCanvas* imgCnv = (cdCanvas*) IupGetAttribute(dial, "IMGCNV"); + + if (imgCnv!=NULL) + delete imgCnv; + + if (r!=NULL) + delete r; + if (g!=NULL) + delete g; + if (b!=NULL) + delete b; + + int w = 200; + int h = 200; + + int size = w * h; + + r = new unsigned char[size]; + g = new unsigned char[size]; + b = new unsigned char[size]; + + char data[100]; + sprintf(data, "%dx%d %p %p %p", w, h, r, g, b); + imgCnv = cdCreateCanvas(CD_IMAGERGB, data); + + IupSetAttribute(dial, "BUFFRED", (char*) r); + IupSetAttribute(dial, "BUFFGREEN", (char*) g); + IupSetAttribute(dial, "BUFFBLUE", (char*) b); + + IupSetAttribute(dial, "IMGCNV", (char*) imgCnv); + + return imgCnv; +} + +void drawInImage(cdCanvas* cnv) +{ + int w, h; + cdCanvasGetSize(cnv, &w, &h, NULL, NULL); + + cdCanvasBegin(cnv, CD_CLIP); +#if 0 + cdCanvasVertex(cnv, 0, 0); + cdCanvasVertex(cnv, w, 0); + cdCanvasVertex(cnv, w, h); + cdCanvasVertex(cnv, 0, h); +#else + cdCanvasVertex(cnv, -100, -100); + cdCanvasVertex(cnv, w+100, -100); + cdCanvasVertex(cnv, w+100, h+100); + cdCanvasVertex(cnv, -100, h+100); +#endif + cdCanvasEnd(cnv); + + cdCanvasClip(cnv, CD_CLIPPOLYGON); + + cdCanvasInteriorStyle(cnv, CD_SOLID); + cdCanvasForeground(cnv, CD_WHITE); + cdCanvasBox(cnv, 0, w, 0, h); + + cdCanvasForeground(cnv, CD_RED); + cdCanvasTextAlignment(cnv, CD_CENTER); + cdCanvasText(cnv, w/2, h/2, "SCURI É BOIOLA!"); +} + +static int tofly(Ihandle *self) +{ + Ihandle *dial = IupGetDialog(self); + + cdCanvas* back = buildBackImage(dial); + + if (back!=NULL) + drawInImage(back); + + Draw(dial); + + return IUP_DEFAULT; +} + +Ihandle *BuildDialog(void) +{ + Ihandle *saida = IupItem ("Saida", "acao_sai"); + Ihandle *voe = IupItem ("Voe", "acao_voar"); + Ihandle *main_menu = IupMenu ( saida, voe, NULL ); + + Ihandle *tela = IupCanvas("rpaint"); + IupSetAttribute(tela, IUP_BUTTON_CB, "buttonCb"); + IupSetAttribute(tela, IUP_MOTION_CB, "motionCb"); + + Ihandle *hbox = IupHbox ( tela, NULL ); + + Ihandle *dial = IupDialog ( hbox ); + + IupSetHandle( "main_menu", main_menu ); + IupSetHandle( "tela", tela ); + IupSetAttribute( dial, IUP_MENU, "main_menu" ); + IupSetAttribute( dial, IUP_SIZE, "HALFxHALF" ); + IupSetAttribute( tela, IUP_SIZE, "300x200" ); + IupSetAttribute( tela, IUP_RESIZE_CB, "resize_cb"); + + IupSetFunction( "rpaint", (Icallback) repaint ); + IupSetFunction( "acao_sai", (Icallback) doexit ); + IupSetFunction( "acao_voar", (Icallback) tofly ); + IupSetFunction( "resize_cb", (Icallback) Resize ); + + IupMap(dial); + + return dial; +} + +int main (void) +{ + Ihandle *dial; + + /* Abre IUP */ + IupOpen(); + + dial = BuildDialog(); + + cdCanvas *cnv = cdCreateCanvas( CD_IUP, IupGetHandle("tela") ); + + IupSetAttribute(dial, "CDCANVAS", (char *) cnv); + + /* Exibe dialogo */ + IupShow(dial); + + /* Interage com o usuario */ + IupMainLoop(); + + cdKillCanvas( cnv ); + + /* Fecha IUP */ + IupClose(); + + return 1; +} |