static void GrCheckNextEventWrapper(void *r) { GR_EVENT evt; GR_EVENT_CLIENT_DATA *cde; GrCheckNextEvent(&evt); GsWriteType(current_fd,GrNumGetNextEvent); GsWrite(current_fd, &evt, sizeof(evt)); if(evt.type == GR_EVENT_TYPE_CLIENT_DATA) { cde = (GR_EVENT_CLIENT_DATA *)&evt; if(cde->data) { GsWrite(current_fd, cde->data, cde->datalen); free(cde->data); } cde->datalen = 0; } }
int main() { GR_WINDOW_ID window; GR_EVENT event; if (GrOpen() < 0) { fprintf(stderr, "cannot open graphics\n"); exit(1); } window = GrNewWindow(GR_ROOT_WINDOW_ID, 20, 20, 100, 60, 4, WHITE, BLUE); GrMapWindow(window); while(1) GrCheckNextEvent(&event); GrClose(); }
/* Complete the GrGetNextEvent call from client. * The client is still waiting on a read at this point. */ void GrGetNextEventWrapperFinish(int fd) { GR_EVENT evt; GR_EVENT_CLIENT_DATA *cde; /* get the event and pass it to client*/ /* this will never be GR_EVENT_TYPE_NONE*/ GrCheckNextEvent(&evt); GsWriteType(fd,GrNumGetNextEvent); GsWrite(fd, &evt, sizeof(evt)); if(evt.type == GR_EVENT_TYPE_CLIENT_DATA) { cde = (GR_EVENT_CLIENT_DATA *)&evt; if(cde->data) { GsWrite(fd, cde->data, cde->datalen); free(cde->data); } cde->datalen = 0; } }
int ttk_get_rawevent (int *arg) { GR_EVENT ev; int tev = TTK_NO_EVENT; if (GrCheckNextEvent (&ev), ev.type != GR_EVENT_TYPE_NONE) { switch (ev.type) { case GR_EVENT_TYPE_CLOSE_REQ: ttk_quit(); exit (0); break; case GR_EVENT_TYPE_KEY_DOWN: case GR_EVENT_TYPE_KEY_UP: tev = (ev.type == GR_EVENT_TYPE_KEY_UP)? TTK_BUTTON_UP : TTK_BUTTON_DOWN; if (ev.keystroke.ch >= 32 && ev.keystroke.ch < 128) { *arg = ev.keystroke.ch; return tev; } else if (ev.keystroke.ch == MWKEY_ENTER) { *arg = TTK_INPUT_ENTER; return tev; } else if (ev.keystroke.ch == MWKEY_BACKSPACE) { *arg = TTK_INPUT_BKSP; return tev; } else if (ev.keystroke.ch == MWKEY_LEFT) { *arg = TTK_INPUT_LEFT; return tev; } else if (ev.keystroke.ch == MWKEY_RIGHT) { *arg = TTK_INPUT_RIGHT; return tev; } else if (ev.keystroke.ch == MWKEY_ESCAPE) { ttk_input_end(); return TTK_NO_EVENT; } return TTK_NO_EVENT; } } return TTK_NO_EVENT; }
int mvpw_event_loop(void) { GR_EVENT event; if (widget_count == 0) return -1; while (widget_count > 0) { GrCheckNextEvent(&event); switch (event.type) { case GR_EVENT_TYPE_EXPOSURE: exposure(&event.exposure); break; case GR_EVENT_TYPE_KEY_DOWN: keystroke(&event.keystroke); break; case GR_EVENT_TYPE_TIMER: timer(&event.timer); break; case GR_EVENT_TYPE_SCREENSAVER: screensaver(&event.screensaver); break; case GR_EVENT_TYPE_FDINPUT: fdinput(&event.fdinput); break; case GR_EVENT_TYPE_NONE: if (idle) idle(); else usleep(1000); break; } } return 0; }
int ui_loop(int argc, char **argv, const char *name) { GR_EVENT event; /* current event */ GR_IMAGE_ID id = 0; NGLXContext cx; int width, height, k; if (GrOpen() < 0) { fprintf(stderr, "cannot open graphics\n"); exit(1); } width = 400; height = 300; GrSetErrorHandler(errorcatcher); w1 = GrNewWindow(GR_ROOT_WINDOW_ID, 10, 10, width, height, 4, BLACK, WHITE); GrSelectEvents(w1, GR_EVENT_MASK_CLOSE_REQ | GR_EVENT_MASK_EXPOSURE | GR_EVENT_MASK_KEY_DOWN); GrMapWindow(w1); gc1 = GrNewGC(); GrSetGCForeground(gc1, WHITE); cx = nglXCreateContext(NULL, 0); nglXMakeCurrent(w1, cx); init(); reshape(width, height); while (1) { GrCheckNextEvent(&event); switch (event.type) { case GR_EVENT_TYPE_CLOSE_REQ: GrFreeImage(id); GrClose(); exit(0); case GR_EVENT_TYPE_EXPOSURE: break; case GR_EVENT_TYPE_KEY_DOWN: { GR_EVENT_KEYSTROKE *kp = &event.keystroke; /* XXX: nanoX special keys are totally bugged ! */ switch (kp->ch) { case 81: k = KEY_LEFT; break; case 83: k = KEY_RIGHT; break; case 82: k = KEY_UP; break; case 84: k = KEY_DOWN; break; default: k = kp->ch; break; } key(k, 0); } break; default: idle(); break; } } return 0; }
void NX_PumpEvents (_THIS) { GR_EVENT event ; static GR_BUTTON last_button_down = 0 ; GrCheckNextEvent (& event) ; while (event.type != GR_EVENT_TYPE_NONE) { // dispatch event switch (event.type) { case GR_EVENT_TYPE_MOUSE_ENTER : { Dprintf ("mouse enter\n") ; SDL_PrivateAppActive (1, SDL_APPMOUSEFOCUS) ; break ; } case GR_EVENT_TYPE_MOUSE_EXIT : { Dprintf ("mouse exit\n") ; SDL_PrivateAppActive (0, SDL_APPMOUSEFOCUS) ; break ; } case GR_EVENT_TYPE_FOCUS_IN : { Dprintf ("focus in\n") ; SDL_PrivateAppActive (1, SDL_APPINPUTFOCUS) ; break ; } case GR_EVENT_TYPE_FOCUS_OUT : { Dprintf ("focus out\n") ; SDL_PrivateAppActive (0, SDL_APPINPUTFOCUS) ; break ; } case GR_EVENT_TYPE_MOUSE_MOTION : { Dprintf ("mouse motion\n") ; if (SDL_VideoSurface) { if (currently_fullscreen) { if (check_boundary (this, event.button.x, event.button.y)) { SDL_PrivateMouseMotion (0, 0, event.button.x - OffsetX, event.button.y - OffsetY) ; } } else { SDL_PrivateMouseMotion (0, 0, event.button.x, event.button.y) ; } } break ; } case GR_EVENT_TYPE_BUTTON_DOWN : { int button = event.button.buttons ; Dprintf ("button down\n") ; switch (button) { case MWBUTTON_L : button = 1 ; break ; case MWBUTTON_M : button = 2 ; break ; case MWBUTTON_R : button = 3 ; break ; default : button = 0 ; } last_button_down = button ; if (currently_fullscreen) { if (check_boundary (this, event.button.x, event.button.y)) { SDL_PrivateMouseButton (SDL_PRESSED, button, event.button.x - OffsetX, event.button.y - OffsetY) ; } } else { SDL_PrivateMouseButton (SDL_PRESSED, button, event.button.x, event.button.y) ; } break ; } // do not konw which button is released case GR_EVENT_TYPE_BUTTON_UP : { Dprintf ("button up\n") ; if (currently_fullscreen) { if (check_boundary (this, event.button.x, event.button.y)) { SDL_PrivateMouseButton (SDL_RELEASED, last_button_down, event.button.x - OffsetX, event.button.y - OffsetY) ; } } else { SDL_PrivateMouseButton (SDL_RELEASED, last_button_down, event.button.x, event.button.y) ; } last_button_down = 0 ; break ; } case GR_EVENT_TYPE_KEY_DOWN : { SDL_keysym keysym ; Dprintf ("key down\n") ; SDL_PrivateKeyboard (SDL_PRESSED, NX_TranslateKey (& event.keystroke, & keysym)) ; break ; } case GR_EVENT_TYPE_KEY_UP : { SDL_keysym keysym ; Dprintf ("key up\n") ; SDL_PrivateKeyboard (SDL_RELEASED, NX_TranslateKey (& event.keystroke, & keysym)) ; break ; } case GR_EVENT_TYPE_CLOSE_REQ : { Dprintf ("close require\n") ; SDL_PrivateQuit () ; break ; } case GR_EVENT_TYPE_EXPOSURE : { Dprintf ("event_type_exposure\n") ; if (SDL_VideoSurface) { NX_RefreshDisplay (this) ;//, & event.exposure) ; } break ; } case GR_EVENT_TYPE_UPDATE : { switch (event.update.utype) { case GR_UPDATE_MAP : { Dprintf ("GR_UPDATE_MAP\n") ; // If we're not active, make ourselves active if (!(SDL_GetAppState () & SDL_APPACTIVE)) { // Send an internal activate event SDL_PrivateAppActive (1, SDL_APPACTIVE) ; } if (SDL_VideoSurface) { NX_RefreshDisplay (this) ; } break ; } case GR_UPDATE_UNMAP : case GR_UPDATE_UNMAPTEMP : { Dprintf ("GR_UPDATE_UNMAP or GR_UPDATE_UNMAPTEMP\n") ; // If we're active, make ourselves inactive if (SDL_GetAppState () & SDL_APPACTIVE) { // Send an internal deactivate event SDL_PrivateAppActive (0, SDL_APPACTIVE | SDL_APPINPUTFOCUS) ; } break ; } case GR_UPDATE_SIZE : { Dprintf ("GR_UPDATE_SIZE\n") ; SDL_PrivateResize (event.update.width, event.update.height) ; break ; } case GR_UPDATE_MOVE : case GR_UPDATE_REPARENT : { Dprintf ("GR_UPDATE_MOVE or GR_UPDATE_REPARENT\n") ; #ifdef ENABLE_NANOX_DIRECT_FB if (Clientfb) { /* Get current window position and fb pointer*/ if (currently_fullscreen) GrGetWindowFBInfo(FSwindow, &fbinfo); else GrGetWindowFBInfo(SDL_Window, &fbinfo); } #endif break ; } default : Dprintf ("unknown GR_EVENT_TYPE_UPDATE\n") ; break ; } break ; } default : { Dprintf ("pump event default\n") ; } } GrCheckNextEvent (& event) ; } }
int main(int ac, char **av) { GR_WINDOW_ID window; GR_GC_ID gc; GR_FONT_ID fontid; int x, y, fnum; GR_REGION_ID regionid; #if CLIP_POLYGON GR_POINT points[] = { {20, 20}, {300, 20}, {300, 300}, {20, 300} }; #else GR_RECT clip_rect = { 20, 20, 300, 300 }; #endif if (GrOpen() < 0) exit(1); window = GrNewWindowEx(GR_WM_PROPS_APPWINDOW, "t1demo loadable fonts (truetype, t1lib, pcf, mgl, hzk)", GR_ROOT_WINDOW_ID, 50, 50, WIDTH, HEIGHT, BLACK); GrSelectEvents(window, GR_EVENT_MASK_EXPOSURE | GR_EVENT_MASK_CLOSE_REQ); GrMapWindow(window); gc = GrNewGC(); GrSetGCUseBackground(gc, GR_FALSE); GrSetGCBackground(gc, BLACK); #if CLIP_POLYGON /* polygon clip region */ regionid = GrNewPolygonRegion(MWPOLY_EVENODD, 3, points); #else /* rectangle clip region */ regionid = GrNewRegion(); GrUnionRectWithRegion(regionid, &clip_rect); #endif GrSetGCRegion(gc, regionid); srand(time(0)); while (1) { GR_EVENT event; GrCheckNextEvent(&event); if (event.type == GR_EVENT_TYPE_CLOSE_REQ) { GrClose(); exit(0); } fontid = GrCreateFontEx(names[fnum=RAND(MAXFONTS)], 0, 0, NULL); GrSetFontSizeEx(fontid, RAND(80) + 1, RAND(80) + 1); GrSetFontRotation(fontid, 330); /* 33 degrees */ GrSetFontAttr(fontid, GR_TFKERNING | GR_TFANTIALIAS, 0); GrSetGCFont(gc, fontid); GrSetGCForeground(gc, rand() & 0xffffff); /*GrSetGCBackground(gc, rand() & 0xffffff); */ x = RAND(WIDTH); y = RAND(HEIGHT); #if HAVE_HZK_SUPPORT { #if HZKBIG5 /* hzk big5 unicode-16 test*/ static unsigned short buffer[] = { 0x9060, 0x898b, 0x79d1, 0x6280, 0x0061, 0x0041, 0 }; GrText(window, gc, x, y, buffer, 7, GR_TFUC16); /* hzk big5 dbcs test #1*/ x = RAND(WIDTH); y = RAND(HEIGHT); GrText(window, gc, x, y, "Microwindows,Åwªï¨Ï¥Î¤¤^¤åÂI°}¦rÅé", -1, GR_TFASCII); /* hzk big5 dbcs test #2*/ x = RAND(WIDTH); y = RAND(HEIGHT); GrText(window, gc, x, y, "£t£u£v£w£¸£¹£º", -1, GR_TFASCII); #else #if 0 /* hzk test #1*/ static char buffer[] = { 0x6c, 0x49, 0x73, 0x8b, 0x79, 0xd1, 0x62, 0x80, 0x61, 0x00, 0x41, 0x00, 0x00, 0xa1, 0x00, 0xa6, 0x6c, 0x49, 0, 0 }; /* *static unsigned short buffer[] = { 0x496c, 0x8b73, 0xd179, 0x8062, 0x0061, 0x0041, 0xa100, 0xa600, 0x496c, 0 };***/ GrText(window, gc, x, y, buffer, 9, GR_TFUC16); #endif /* HZK Metrix font test, includes Chinese and English */ x = RAND(WIDTH); y = RAND(HEIGHT); GrText(window, gc, x, y, "Microwindows,»¶ÓʹÓÃÖÐÓ¢ÎĵãÕó×ÖÌå", -1, GR_TFASCII); #endif /* HZKBIG5*/ } #elif HAVE_BIG5_SUPPORT /* encoding BIG5 test 61 B1 64 B1 64 61 */ GrText(window, gc, x, y, "\151\261\144\261\144\151", 6, MWTF_DBCS_BIG5); #elif HAVE_GB2312_SUPPORT /* encoding GB2312 test BD A1 BD A1 */ GrText(window, gc, x, y, "\275\241\275\241", 4, MWTF_DBCS_GB); #elif HAVE_EUCJP_SUPPORT /* encoding EUC_JP test A2 A1 */ GrText(window, gc, x, y, "ï¿½Þ¥ï¿½ï¿½ï¿½ï¿½í¥¦ï¿½ï¿½ï¿½ï¿½ï¿½É¥ï¿½ï¿½ï¿½ï¿½Ø¤è¤¦ï¿½ï¿½ï¿½ï¿½!", -1, MWTF_DBCS_EUCJP); #elif HAVE_JISX0213_SUPPORT /* encoding JISX0213 test A2 A1 */ GrText(window, gc, x, y, "\242\241", 2, MWTF_DBCS_JIS); #elif HAVE_KSC5601_SUPPORT /* encoding KSC5601 test B0 B0 */ GrText(window, gc, x, y, "\273\273", 2, MWTF_DBCS_EUCKR); #elif HAVE_FREETYPE_2_SUPPORT /* ASCII test */ GrText(window, gc, x, y, "Microwindows", -1, GR_TFASCII); #elif HAVE_PCF_SUPPORT /* note: large PCF fonts require XCHAR2B, this is not figured out yet for these fonts. FIXME */ if (fnum == 3) { /* japanese jiskan24*/ unsigned short text[] = { 0x213a, 0x213b, 0x2170, 0x2276, 0x2339 }; GrText(window, gc, x,y, text, 5, GR_TFUC16); } else if (fnum == 4) { /* chinese gb24st*/ unsigned short text[] = /* FIXME: why doesn't first row index correctly?*/ /*{ 0x7765, 0x7766, 0x7767, 0x777a, 0x777e };*/ { 0x2129, 0x212a, 0x212b, 0x212c, 0x212d }; GrText(window, gc, x,y, text, 5, GR_TFUC16); } else GrText(window, gc, x,y, "Microwindows", -1, GR_TFASCII); #elif HAVE_FNT_SUPPORT /* UC16 test */ if (fnum == 2 || fnum == 3) { /* japanese jiskan24, jiskan16-2000-1*/ unsigned short text[] = { 0x213a, 0x213b, 0x2170, 0x2276, 0x2339 }; GrText(window, gc, x,y, text, 5, GR_TFUC16); } else if (fnum == 4) { /* chinese gbk16-xke*/ unsigned short text[] = { 0x8144, 0x8147, 0x8148, 0xfe4e, 0xfe4f }; GrText(window, gc, x,y, text, 5, GR_TFUC16); } else GrText(window, gc, x,y, "Microwindows", -1, GR_TFASCII); #else /* ASCII test */ GrText(window, gc, x, y, "Microwindows", -1, GR_TFASCII); #endif GrFlush(); GrDestroyFont(fontid); } GrDestroyRegion(regionid); GrClose(); return 0; }
/// forward events from system queue to application queue virtual void forwardSystemEvents( bool waitForEvent ) { if ( _stopFlag ) waitForEvent = false; GR_EVENT event; for(;;) { //main_win->unsetLastNavigationDirection(); if ( waitForEvent ) { GrGetNextEvent(&event); } else { if (!GrPeekEvent(&event)) break; GrCheckNextEvent( &event ); } waitForEvent = false; switch(event.type) { case GR_EVENT_TYPE_ERROR: CRLog::debug("GR_EVENT_TYPE_ERROR"); break; case GR_EVENT_TYPE_CLOSE_REQ: CRLog::debug("GR_EVENT_TYPE_CLOSE_REQ"); break; case GR_EVENT_TYPE_EXPOSURE: CRLog::debug("GR_EVENT_TYPE_EXPOSURE"); postEvent( new CRGUIUpdateEvent(true) ); /* m_images->printImage("logo",0,0); GrSetFontSize(m_state->fontid,32); GrText(m_state->wid,m_state->gc,240,690,(char *)"Hello!\n",-1,GR_TFASCII|GR_TFTOP); GrText(m_state->wid,m_state->gc,100,720,(char *)"This is only an example",-1,\ GR_TFASCII|GR_TFTOP); */ //postLeds( true ); //update(true); if ( firstDocUpdate ) { //main_win->getDocView()->swapToCache(); firstDocUpdate = false; } //postLeds( false ); break; case GR_EVENT_TYPE_BUTTON_DOWN: { CRLog::debug("GR_EVENT_TYPE_BUTTON_DOWN"); /* char buf[128]={0}; GrClearArea(m_state->wid,10,770,400,28,0); GrSetFontSize(m_state->fontid,24); sprintf(buf,"mouse down: x=%d y=%d",event.mouse.x,event.mouse.y); GrText(m_state->wid,m_state->gc,10,770,(char *)buf,-1,GR_TFASCII|GR_TFTOP); GrPartialPrint(m_state->wid,10,770,400,28); */ } break; case GR_EVENT_TYPE_BUTTON_UP: { CRLog::debug("GR_EVENT_TYPE_BUTTON_UP"); /* char buf[128]={0}; GrClearArea(m_state->wid,10,770,400,28,0); GrSetFontSize(m_state->fontid,24); sprintf(buf,"mouse up: x=%d y=%d",event.mouse.x,event.mouse.y); GrText(m_state->wid,m_state->gc,10,770,(char *)buf,-1,GR_TFASCII|GR_TFTOP); GrPartialPrint(m_state->wid,10,770,400,28); */ } break; case GR_EVENT_TYPE_MOUSE_POSITION: { CRLog::debug("GR_EVENT_TYPE_MOUSE_POSITION"); /* char buf[128]={0}; GrClearArea(m_state->wid,10,770,400,28,0); GrSetFontSize(m_state->fontid,24); sprintf(buf,"mouse move: x=%d y=%d",event.mouse.x,event.mouse.y); GrText(m_state->wid,m_state->gc,10,770,(char *)buf,-1,GR_TFASCII|GR_TFTOP); GrPartialPrint(m_state->wid,10,770,400,28); */ } break; case GR_EVENT_TYPE_KEY_DOWN: //case GR_EVENT_TYPE_KEY_UP: CRLog::debug("GR_EVENT_TYPE_KEY_DOWN %d", (int)event.keystroke.ch ); { static int convert_table[] = { KEY_0, '0', 0, KEY_1, '1', 0, KEY_2, '2', 0, KEY_3, '3', 0, KEY_4, '4', 0, KEY_5, '5', 0, KEY_6, '6', 0, KEY_7, '7', 0, KEY_8, '8', 0, KEY_9, '9', 0, LONG_KEY_0, '0', KEY_FLAG_LONG_PRESS, LONG_KEY_1, '1', KEY_FLAG_LONG_PRESS, LONG_KEY_2, '2', KEY_FLAG_LONG_PRESS, LONG_KEY_3, '3', KEY_FLAG_LONG_PRESS, LONG_KEY_4, '4', KEY_FLAG_LONG_PRESS, LONG_KEY_5, '5', KEY_FLAG_LONG_PRESS, LONG_KEY_6, '6', KEY_FLAG_LONG_PRESS, LONG_KEY_7, '7', KEY_FLAG_LONG_PRESS, LONG_KEY_8, '8', KEY_FLAG_LONG_PRESS, LONG_KEY_9, '9', KEY_FLAG_LONG_PRESS, KEY_CANCEL, XK_Escape, 0, KEY_OK, XK_Return, 0, KEY_DOWN, XK_Right, 0, KEY_UP, XK_Left, 0, KEY_CURSOR_OK, XK_KP_Enter, 0, KEY_CURSOR_DOWN, XK_Next, 0, KEY_CURSOR_UP, XK_Prior, 0, //KEY_CURSOR_OK, XK_Return, 0, //KEY_CURSOR_DOWN, XK_Up, 0, //KEY_CURSOR_UP, XK_Down, 0, LONG_KEY_CANCEL, XK_Escape, KEY_FLAG_LONG_PRESS, LONG_KEY_OK, XK_Return, KEY_FLAG_LONG_PRESS, LONG_KEY_DOWN, XK_Right, KEY_FLAG_LONG_PRESS, LONG_KEY_UP, XK_Left, KEY_FLAG_LONG_PRESS, LONG_KEY_CURSOR_OK, XK_KP_Enter, KEY_FLAG_LONG_PRESS, LONG_KEY_CURSOR_DOWN, XK_Next, KEY_FLAG_LONG_PRESS, LONG_KEY_CURSOR_UP, XK_Prior, KEY_FLAG_LONG_PRESS, KEY_SHORTCUT_VOLUME_UP, XK_KP_Add, 0, KEY_SHORTCUT_VOLUME_DOWN, XK_KP_Subtract, 0, LONG_SHORTCUT_KEY_VOLUMN_UP, XK_KP_Add, KEY_FLAG_LONG_PRESS, LONG_SHORTCUT_KEY_VOLUMN_DOWN, XK_KP_Subtract, KEY_FLAG_LONG_PRESS, 0, 0, 0 // end marker }; int code = 0; int flags = 0; int keyId = event.keystroke.ch; for ( int i=0; convert_table[i]; i+=3 ) { if ( keyId==convert_table[i] ) { code = convert_table[i+1]; flags = convert_table[i+2]; CRLog::debug( "OnKeyPressed( %d (%04x) ) - converted to %04x, %d", keyId, keyId, code, flags ); } } if ( !code ) { CRLog::debug( "Unknown key code in OnKeyPressed() : %d (%04x)", keyId, keyId ); break; } postEvent( new CRGUIKeyDownEvent(code, flags) ); if ( CRJinkeWindowManager::instance->getWindowCount()==0 ) { _stopFlag = true; // QUIT CRLog::trace("windowCount==0, quitting"); } } break; case GR_EVENT_TYPE_FDINPUT: CRLog::debug( "GR_EVENT_TYPE_FDINPUT" ); break; default: CRLog::debug( "unknown event %d", (int)event.type ); break; } } }
int main(int argc, char **argv) { GR_WINDOW_ID window; GR_EVENT event; GR_GC_ID gc; GR_FONT_ID fontid; int x, y, rnd = 0; MWLOGFONT lf; char description[128]; srand(time(0)); GrOpen(); window = GrNewWindow(GR_ROOT_WINDOW_ID, 5, 5, MAXW, MAXH, 4, BLACK, BLUE); GrMapWindow(window); gc = GrNewGC(); GrSelectEvents(window,GR_EVENT_MASK_ALL); GrSetGCUseBackground(gc,GR_FALSE); GrSetGCBackground(gc, GR_RGB(0, 0, 0)); y = 30; x = 0; while(1) { GrCheckNextEvent(&event); if(event.type == GR_EVENT_TYPE_CLOSE_REQ) { GrClose(); exit(0); } sleep(1); MWLF_Clear(&lf); description[0] = '\0'; // lf.lfSerif = 1; if ( rnd & 1 ) { lf.lfWeight = MWLF_WEIGHT_BOLD; strcat(description,"Bold "); } if ( rnd & 2 ) { lf.lfItalic = 1; strcat(description,"Italics "); } if ( rnd & 4 ) { lf.lfOblique = 1; strcat(description,"Oblique "); } if ( rnd & 8 ) { lf.lfMonospace = 1; strcat(description,"°íÁ¤Æø Monospace "); } else { lf.lfProportional = 1; strcat(description,"Proportional "); } if ( argc > 1 ) strcpy(lf.lfFaceName,argv[1]); else strcpy(lf.lfFaceName,"fantasy"); fontid = GrCreateFont(0, 0, &lf); /* GrSetFontSize(fontid, 1+(int)(80.0 * rand() / (RAND_MAX+1.0))); */ GrSetFontSize(fontid,26); GrSetFontRotation(fontid, 330); /* 33 degrees*/ GrSetFontAttr(fontid, GR_TFKERNING | GR_TFANTIALIAS, 0); GrSetGCFont(gc, fontid); /*GrSetGCBackground(gc, rand() & 0xffffff);*/ GrSetGCForeground(gc, 0xffffff); /* x = (int) ((MAXW * 1.0) *rand()/(RAND_MAX+1.0)); y = (int) ((MAXH * 1.0) *rand()/(RAND_MAX+1.0)); */ GrText(window, gc,x,y, description, -1, GR_TFASCII); GrDestroyFont(fontid); rnd++; y += 30; if ( y > 460 ) y = 0; } GrClose(); }
int main(int argc,char **argv) { GR_EVENT event; /* current event */ GR_BITMAP bitmap1fg[7]; /* bitmaps for first cursor */ GR_BITMAP bitmap1bg[7]; GR_BITMAP bitmap2fg[7]; /* bitmaps for second cursor */ GR_BITMAP bitmap2bg[7]; if (GrOpen() < 0) { fprintf(stderr, "cannot open graphics\n"); exit(1); } GrReqShmCmds(655360); GrGetScreenInfo(&si); COLS = si.cols - 40; ROWS = si.rows - 80; /* print error, but don't exit*/ GrSetErrorHandler(errorcatcher); w1 = GrNewWindow(GR_ROOT_WINDOW_ID, 100, 50, COLS - 120, ROWS - 60, 1, BROWN, WHITE); w2 = GrNewWindow(GR_ROOT_WINDOW_ID, 6, 6, W2_WIDTH, W2_HEIGHT, 2, GREEN, WHITE); w3 = GrNewWindow(GR_ROOT_WINDOW_ID, 250, 30, 80, 100, 1, LTGRAY, GREEN); w4 = GrNewWindow(GR_ROOT_WINDOW_ID, 350, 20, 200, 150, 5, BLACK, WHITE); w5 = GrNewWindow(GR_ROOT_WINDOW_ID, 11, 143, 209, 100, 1, BLUE, GREEN); GrSelectEvents(w1, GR_EVENT_MASK_BUTTON_DOWN | GR_EVENT_MASK_KEY_DOWN | GR_EVENT_MASK_EXPOSURE | GR_EVENT_MASK_FOCUS_IN | GR_EVENT_MASK_FOCUS_OUT | GR_EVENT_MASK_CLOSE_REQ); /* must select down and up for w2 to get implicit grab when * running window manager, otherwise the wm-created parent * window will get the grab, and we won't get the button up... */ GrSelectEvents(w2, GR_EVENT_MASK_BUTTON_DOWN | GR_EVENT_MASK_BUTTON_UP | GR_EVENT_MASK_CLOSE_REQ); GrSelectEvents(w3, GR_EVENT_MASK_BUTTON_DOWN | GR_EVENT_MASK_MOUSE_MOTION | GR_EVENT_MASK_CLOSE_REQ); GrSelectEvents(w4, GR_EVENT_MASK_BUTTON_DOWN | GR_EVENT_MASK_BUTTON_UP | GR_EVENT_MASK_MOUSE_POSITION | GR_EVENT_MASK_KEY_DOWN | GR_EVENT_MASK_CLOSE_REQ); GrSelectEvents(w5, GR_EVENT_MASK_MOUSE_ENTER | GR_EVENT_MASK_MOUSE_EXIT | GR_EVENT_MASK_CLOSE_REQ); GrSelectEvents(GR_ROOT_WINDOW_ID, GR_EVENT_MASK_BUTTON_DOWN | GR_EVENT_MASK_CLOSE_REQ); GrMapWindow(w1); GrMapWindow(w2); GrMapWindow(w3); GrMapWindow(w4); GrMapWindow(w5); gc1 = GrNewGC(); gc2 = GrNewGC(); gc3 = GrNewGC(); gc4 = GrNewGC(); GrSetGCForeground(gc1, RED); GrSetGCBackground(gc1, BROWN); GrSetGCForeground(gc2, MAGENTA); GrSetGCMode(gc4, GR_MODE_XOR); bitmap1fg[0] = MASK(_,_,_,X,_,_,_); bitmap1fg[1] = MASK(_,_,_,X,_,_,_); bitmap1fg[2] = MASK(_,_,_,X,_,_,_); bitmap1fg[3] = MASK(X,X,X,X,X,X,X); bitmap1fg[4] = MASK(_,_,_,X,_,_,_); bitmap1fg[5] = MASK(_,_,_,X,_,_,_); bitmap1fg[6] = MASK(_,_,_,X,_,_,_); bitmap1bg[0] = MASK(_,_,X,X,X,_,_); bitmap1bg[1] = MASK(_,_,X,X,X,_,_); bitmap1bg[2] = MASK(X,X,X,X,X,X,X); bitmap1bg[3] = MASK(X,X,X,X,X,X,X); bitmap1bg[4] = MASK(X,X,X,X,X,X,X); bitmap1bg[5] = MASK(_,_,X,X,X,_,_); bitmap1bg[6] = MASK(_,_,X,X,X,_,_); bitmap2fg[0] = MASK(_,_,X,X,X,_,_); bitmap2fg[1] = MASK(_,X,_,_,_,X,_); bitmap2fg[2] = MASK(X,_,_,_,_,_,X); bitmap2fg[3] = MASK(X,_,_,_,_,_,X); bitmap2fg[4] = MASK(_,X,_,_,_,X,_); bitmap2fg[5] = MASK(_,_,X,X,X,_,_); bitmap2bg[0] = MASK(_,_,X,X,X,_,_); bitmap2bg[1] = MASK(_,X,X,X,X,X,_); bitmap2bg[2] = MASK(X,X,X,X,X,X,X); bitmap2bg[3] = MASK(X,X,X,X,X,X,X); bitmap2bg[4] = MASK(_,X,X,X,X,X,_); bitmap2bg[5] = MASK(_,_,X,X,X,_,_); GrSetCursor(w1, 7, 7, 3, 3, WHITE, BLACK, bitmap1fg, bitmap1bg); GrSetCursor(w2, 7, 7, 3, 3, WHITE, BLACK, bitmap2fg, bitmap2bg); while (1) { GrCheckNextEvent(&event); switch (event.type) { case GR_EVENT_TYPE_BUTTON_DOWN: do_buttondown(&event.button); break; case GR_EVENT_TYPE_BUTTON_UP: do_buttonup(&event.button); break; case GR_EVENT_TYPE_MOUSE_POSITION: case GR_EVENT_TYPE_MOUSE_MOTION: do_motion(&event.mouse); break; case GR_EVENT_TYPE_KEY_DOWN: do_keystroke(&event.keystroke); break; case GR_EVENT_TYPE_EXPOSURE: do_exposure(&event.exposure); break; case GR_EVENT_TYPE_FOCUS_IN: do_focusin(&event.general); break; case GR_EVENT_TYPE_FOCUS_OUT: do_focusout(&event.general); break; case GR_EVENT_TYPE_MOUSE_ENTER: do_enter(&event.general); break; case GR_EVENT_TYPE_MOUSE_EXIT: do_exit(&event.general); break; case GR_EVENT_TYPE_CLOSE_REQ: GrClose(); exit(0); case GR_EVENT_TYPE_NONE: do_idle(); break; } } }
int main() { GR_WINDOW_ID window; GR_EVENT event; GR_GC_ID gc; GR_FONT_ID fontid; int i, x, y; GR_REGION_ID regionid = 0; #if CLIP_POLYGON GR_POINT points[]={ {100, 100}, {300, 100}, {300, 300}, {100, 300}}; #else GR_RECT clip_rect={100,100,300,300}; #endif srand(time(0)); GrOpen(); window = GrNewWindow(GR_ROOT_WINDOW_ID, 50,50, MAXW,MAXH, 4, BLACK,BLUE); GrMapWindow(window); gc = GrNewGC(); #if CLIP_POLYGON /* polygon clip region*/ regionid = GrNewPolygonRegion(MWPOLY_EVENODD, 3, points); #else /* rectangle clip region*/ regionid = GrNewRegion(); GrUnionRectWithRegion(regionid, &clip_rect); #endif GrSetGCRegion(gc, regionid); GrSelectEvents(window,GR_EVENT_MASK_ALL); GrSetGCUseBackground(gc,GR_FALSE); GrSetGCBackground(gc, GR_RGB(0, 0, 0)); while(1) { GrCheckNextEvent(&event); i = (int)((float)MAXFONTS * rand() / (RAND_MAX + 1.0)); fontid = GrCreateFont(names[i], 20, NULL); GrSetFontSize(fontid, 1+(int)(80.0 * rand() / (RAND_MAX+1.0))); GrSetFontRotation(fontid, 330); /* 33 degrees*/ GrSetFontAttr(fontid, GR_TFKERNING | GR_TFANTIALIAS, 0); GrSetGCFont(gc, fontid); /*GrSetGCBackground(gc, rand() & 0xffffff);*/ GrSetGCForeground(gc, rand() & 0xffffff); x = (int) ((MAXW * 1.0) *rand()/(RAND_MAX+1.0)); y = (int) ((MAXH * 1.0) *rand()/(RAND_MAX+1.0)); #if HAVE_HZK_SUPPORT { /* to test Unicode 16 chinese characters display ,use HZK font Bitmap font (Metrix font). */ #ifndef BIG5 char buffer[256]; buffer[0]=0x6c; buffer[1]=0x49; buffer[2]=0x73; buffer[3]=0x8b; buffer[4]=0x79; buffer[5]=0xd1; buffer[6]=0x62; buffer[7]=0x80; buffer[8]=0x61; buffer[9]=0x00; buffer[10]=0x41; buffer[11]=0x00; buffer[12]=0x00; buffer[13]=0xa1; buffer[14]=0x00; buffer[15]=0xa6; buffer[16]=0x6c; buffer[17]=0x49; buffer[18]=0x0; buffer[19]=0x0; GrText(window, gc,x,y+20, buffer,17, GR_TFUC16); x=0;y=16; GrText(window, gc,x,y+20, buffer,17, GR_TFUC16); #else unsigned short buffer[7]; buffer[0]=0x9060; buffer[1]=0x898b; buffer[2]=0x79d1; buffer[3]=0x6280; buffer[4]=0x0061; buffer[5]=0x0041; buffer[6]=0x0; GrText(window, gc,x,y+20, buffer,7, GR_TFUC16); x=0;y=16; GrText(window, gc,x,y+20, buffer,7, GR_TFUC16); #endif } #ifndef BIG5 x=0;y=16; /* HZK Metrix font test, includes Chinese and English*/ GrText(window, gc,x,y, "Microwindows,欢迎使用中英文点阵字体", -1, GR_TFASCII); #else GrText(window, gc,x,y, "Microwindows,舧ㄏノい璣ゅ翴皚砰", -1, GR_TFASCII); x=0;y=16*3+4; GrText(window, gc,x,y, "89:", -1, GR_TFASCII); #endif GrFlush(); #else /* !HZK_FONT_SUPPORT*/ #if HAVE_BIG5_SUPPORT /* ENCODING_BIG5 test*/ GrText(window, gc,x,y, "眃眃", -1, GR_TFASCII); #else #if HAVE_GB2312_SUPPORT /* ENCODING_GB2312 test*/ GrText(window, gc,x,y, "\275\241\275\241", -1, GR_TFASCII); #else /* ASCII test*/ GrText(window, gc,x,y, "Microwindows", -1, GR_TFASCII); #endif #endif #endif /* HZK_FONT_SUPPORT*/ GrDestroyFont(fontid); if(event.type == GR_EVENT_TYPE_CLOSE_REQ) { GrClose(); exit(0); } } GrDestroyRegion(regionid); GrClose(); }