Example showing drawing using GINO in a GINOMENU application
/* Program function */
/************************************************/
/* Copyright Bradly Associates Limited */
/* GINOMENU Version 6.0 */
/************************************************/
#include <gino-c.h>
#include <menu-c.h>
#include <math.h>
GDIM paper;
GLIMIT viewport = {0.0,120.0,0.0,120.0};
GLIMIT limits = {0.0,1.0,0.0,1.0};
char devname[32],filename[32];
int funt1,funt2,funt3,funt4,funt5,funt6,funt7,funt8;
int iprop[4];
void redraw(void);
void drawfn(int);
#if defined(MWIN) || defined(GUIWIN)
int PASCAL WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpszCmdParam, int nCmdShow)
#else
int main ()
#endif
{
int master_window,menu_bar,file_entry,file_menu,print_entry,separator,exit_entry;
int help_entry,help_menu,about_entry,graphics_frame;
int function_panel,about_window,about_panel,text_entry,done_button;
int callback,status,ipapty;
/* initialize GINO */
gOpenGino();
gGuiwin();
/* initialize GINOMENU */
gmInitializeMenu();
/* define master window */
master_window=gmCreateMasterWindow(1,9,16,11,GMINIMIZE|GQUIT,"Function Viewer",
gmIconFormat,GDLLICON,gmIconFile,"mbig1083",0);
/* define menubar */
menu_bar=gmCreateMenuBar(master_window);
file_entry=gmCreateMenuEntry(menu_bar,"File",gmAccel,'F',0);
file_menu=gmCreatePullDownMenu(file_entry);
print_entry=gmCreateMenuEntry(file_menu,"Print...",gmAccel,'P',gmCallback,300,0);
separator=gmCreateMenuSeparator(file_menu);
exit_entry=gmCreateMenuEntry(file_menu,"Exit",gmAccel,'x',gmCallback,-1,0);
help_entry=gmCreateMenuEntry(menu_bar,"Help",gmAccel,'H',0);
help_menu=gmCreatePullDownMenu(help_entry);
about_entry=gmCreateMenuEntry(help_menu,"About",gmAccel,'A',gmCallback,900,0);
/* define graphics frame */
graphics_frame=gmCreateGraphicsFrame(master_window,7,1,8,10,&viewport,gmExpose,700,0);
/* define function gmCreateToggleButtons */
function_panel=gmCreatePanel(master_window,0,1,7,10,gmTitle,"Function",gmType,GCHISEL,0);
funt1=gmCreateToggleButton(function_panel,1,8,5,1,"sin(x)",GOFF,gmCallback,701,0);
funt2=gmCreateToggleButton(function_panel,1,7,5,1,"cos(x)",GOFF,gmCallback,702,0);
funt3=gmCreateToggleButton(function_panel,1,6,5,1,"sin(x)*sin(x)",GOFF,gmCallback,703,0);
funt4=gmCreateToggleButton(function_panel,1,5,5,1,"cos(x)*cos(x)",GOFF,gmCallback,704,0);
funt5=gmCreateToggleButton(function_panel,1,4,5,1,"sin(x)+cos(x)",GOFF,gmCallback,705,0);
funt6=gmCreateToggleButton(function_panel,1,3,5,1,"sin(x)*cos(x)",GOFF,gmCallback,706,0);
funt7=gmCreateToggleButton(function_panel,1,2,5,1,"sin(x*4)",GOFF,gmCallback,707,0);
funt8=gmCreateToggleButton(function_panel,1,1,5,1,"cos(x*4)",GOFF,gmCallback,708,0);
/* define about box */
about_window=gmCreateComplexDialogueBox(master_window,10,8,10,6,GOFF," ",gmInitState,GCENTRED,0);
about_panel=gmCreatePanel(about_window,0,0,10,6,gmBorderType,GPRESSED,0);
text_entry=gmCreateTextEntry(about_panel,1,4,8,1,"Function Viewer",16,GDISPLAY,gmJustify,GCENTRE,0);
text_entry=gmCreateTextEntry(about_panel,1,3,8,1,"Bradly Associates Ltd.",22,GDISPLAY,gmJustify,GCENTRE,0);
done_button=gmCreatePushButton(about_panel,4,1,2,1,"Done",gmAccel,'D',gmCallback,901,0);
/* initialize application */
gmManage();
/* Start the action loop */
while (gmAction(&callback) != -1) {
/* deal with printing */
if(callback == 300){
gSuspendDevice();
/* Set up properties for colour portrait plot */
iprop[0]=7;
iprop[1]=2;
iprop[2]=9;
iprop[3]=2;
status=gMwinpp(hInstance,hPrevInstance,2,devname,31,filename,31,4,iprop);
if(status == 0) {
/* enquire printer limits and set up viewport */
gEnqDrawingLimits(&paper,&ipapty);
limits.xmax=paper.xpap;
limits.ymax=paper.ypap;
gSetViewport2D(&viewport,&limits);
redraw();
}
gCloseDevice();
gGuiwin();
/* restore default viewport on graphics frame */
gmActivateGraphicsFrame(graphics_frame);
gSetViewport2D(&viewport,&viewport);
}
/* deal with function toggles */
if(callback >= 700 && callback < 709) {
gmClearGraphicsFrame(graphics_frame);
gmActivateGraphicsFrame(graphics_frame);
redraw();
}
/* deal with about box */
if(callback == 900){
gmDrawWindow(about_window);
gmSetActiveWindow(about_window);
}
if(callback == 901){
gmRemoveWindow(about_window);
gmSetActiveWindow(0);
}
}
/* close application */
gmCloseMenu();
gCloseDevice();
gCloseGino();
}
void redraw(void)
{
/* redraw the complete contents of the graphics frame */
gSetLineColour(GBLACK);
gMoveTo2D(10.0,60.0);
gDrawLineTo2D(110.0,60.0);
gMoveTo2D(60.0,10.0);
gDrawLineTo2D(60.0,110.0);
gFlushGraphics();
if(gmEnqToggleSwitch(funt1) == 1)drawfn(1);
if(gmEnqToggleSwitch(funt2) == 1)drawfn(2);
if(gmEnqToggleSwitch(funt3) == 1)drawfn(3);
if(gmEnqToggleSwitch(funt4) == 1)drawfn(4);
if(gmEnqToggleSwitch(funt5) == 1)drawfn(5);
if(gmEnqToggleSwitch(funt6) == 1)drawfn(6);
if(gmEnqToggleSwitch(funt7) == 1)drawfn(7);
if(gmEnqToggleSwitch(funt8) == 1)drawfn(8);
}
void drawfn(int function)
{
/* function drawing routine */
GPOINT pt[101];
float pi = 3.14159;
int i;
switch (function) {
case 1:
for (i=0; i<101; i++) {
pt[i].x=(float)i+9.0;
pt[i].y=sin((float)(i-51)*(pi/50.0))*30.0+60.0;
}
gSetLineColour(GRED);
gMoveTo2D(pt[0].x,pt[0].y);
gDrawPolylineTo2D(101,pt);
break;
case 2:
for (i=0; i<101; i++) {
pt[i].x=(float)i+10.0;
pt[i].y=cos((float)(i-51)*(pi/50.0))*30.0+60.0;
}
gSetLineColour(GORANGE);
gMoveTo2D(pt[0].x,pt[0].y);
gDrawPolylineTo2D(101,pt);
break;
case 3:
for (i=0; i<101; i++) {
pt[i].x=(float)i+10.0;
pt[i].y=sin((float)(i-51)*(pi/50.0));
pt[i].y=pt[i].y*pt[i].y*30.0+60.0;
}
gSetLineColour(GYELLOW);
gMoveTo2D(pt[0].x,pt[0].y);
gDrawPolylineTo2D(101,pt);
break;
case 4:
for (i=0; i<101; i++) {
pt[i].x=(float)i+10.0;
pt[i].y=cos((float)(i-51)*(pi/50.0));
pt[i].y=pt[i].y*pt[i].y*30.0+60.0;
}
gSetLineColour(GGREEN);
gMoveTo2D(pt[0].x,pt[0].y);
gDrawPolylineTo2D(101,pt);
break;
case 5:
for (i=0; i<101; i++) {
pt[i].x=(float)i+10.0;
pt[i].y=sin((float)(i-51)*(pi/50.0))+cos((float)(i-51)*(pi/50.0));
pt[i].y=pt[i].y*30.0+60.0;
}
gSetLineColour(GCYAN);
gMoveTo2D(pt[0].x,pt[0].y);
gDrawPolylineTo2D(101,pt);
break;
case 6:
for (i=0; i<101; i++) {
pt[i].x=(float)i+10.0;
pt[i].y=sin((float)(i-51)*(pi/50.0))*cos((float)(i-51)*(pi/50.0));
pt[i].y=pt[i].y*30.0+60.0;
}
gSetLineColour(GBLUE);
gMoveTo2D(pt[0].x,pt[0].y);
gDrawPolylineTo2D(101,pt);
break;
case 7:
for (i=0; i<101; i++) {
pt[i].x=(float)i+10.0;
pt[i].y=sin((float)(i-51)*(pi/12.5));
pt[i].y=pt[i].y*30.0+60.0;
}
gSetLineColour(GMAGENTA);
gMoveTo2D(pt[0].x,pt[0].y);
gDrawPolylineTo2D(101,pt);
break;
case 8:
for (i=0; i<101; i++) {
pt[i].x=(float)i+10.0;
pt[i].y=cos((float)(i-51)*(pi/12.5));
pt[i].y=pt[i].y*30.0+60.0;
}
gSetLineColour(GBROWN);
gMoveTo2D(pt[0].x,pt[0].y);
gDrawPolylineTo2D(101,pt);
break;
}
gFlushGraphics();
}