static void do_buttondown(GR_EVENT_BUTTON *ep) { mwin * mwp; static int app_no; if (ep->wid == w1) { app_no = ep->y / fheight; if (app_no >= num_apps) { app_no = num_apps - 1; } if (!vfork()) { char * nargv[2]; nargv[0] = Apps[app_no].app_path; nargv[1] = 0; execve(nargv[0], nargv, environ); /* write(1, "\7", 1); */ exit(1); } } else if ((mwp = IsDecoration(ep->wid)) != NULL) { GrRaiseWindow(mwp->wid); GrRaiseWindow(mwp->fid); in_motion = mwp; move_xoff = ep->x; move_yoff = ep->y; } }
static void do_buttondown(GR_EVENT_BUTTON *ep) { mwin * mwp; static int app_no; char *userargs; int r,taskid,queid,n; char s[16]; char *argv[2]; if (ep->wid == w1) { app_no = ep->y / fheight; if (app_no >= num_apps) { app_no = num_apps - 1; } taskid=syscall_pgm_load( Apps[app_no].app_path, SYSCALL_PGM_TYPE_VGA|SYSCALL_PGM_TYPE_IO); if(taskid<0) { display_puts("load error="); int2dec(-taskid,s); display_puts(s); display_puts("\n"); return; } argv[0]=Apps[app_no].app_path; argv[1]=""; userargs=environment_copy_session(); n = environment_get_session_size(); environment_make_args(userargs, 2, argv); r = syscall_pgm_setargs(taskid, userargs, n); if(r<0) { display_puts("setargs error="); int2dec(-r,s); display_puts(s); display_puts("\n"); return; } mfree(userargs); queid = environment_getqueid(); r=syscall_pgm_start(taskid, queid); if(r<0) { display_puts("start error="); int2dec(-r,s); display_puts(s); display_puts("\n"); return; } } else if ((mwp = IsDecoration(ep->wid)) != NULL) { GrRaiseWindow(mwp->wid); GrRaiseWindow(mwp->fid); in_motion = mwp; move_xoff = ep->x; move_yoff = ep->y; } }
void mvpw_raise(mvp_widget_t *widget) { if (widget) { if (modal_focus) { if ((widget == modal_focus) || (widget == screensaver_widget)) { GrRaiseWindow(widget->wid); } } else { GrRaiseWindow(widget->wid); } } }
static void GrRaiseWindowWrapper(void *r) { nxRaiseWindowReq *req = r; GrRaiseWindow(req->windowid); }
void resizebar_buttondown(win *window, GR_EVENT_BUTTON *event) { GR_WINDOW_INFO wi; struct pos_size *pos; Dprintf("resizebar_buttondown window %d\n", window->wid); GrRaiseWindow(window->pid); if(window->active) return; if(!window->data) if(!(window->data = malloc(sizeof(struct pos_size)))) return; GrGetWindowInfo(window->pid, &wi); pos = (struct pos_size *)window->data; pos->xoff = event->x; pos->yoff = event->y; pos->xorig = wi.x; pos->yorig = wi.y; pos->width = wi.width; pos->height = wi.height; window->active = GR_TRUE; }
/* * Here when a enter window event occurs. */ void do_enter(GR_EVENT_GENERAL *gp) { if (gp->wid != w5) return; GrSetBorderColor(w5, WHITE); GrRaiseWindow(w5); }
void closebutton_buttondown(win *window, GR_EVENT_BUTTON *event) { Dprintf("closebutton_buttondown window %d\n", window->wid); GrRaiseWindow(window->pid); window->active = GR_TRUE; closebutton_exposure(window, NULL); }
int NX_LeaveFullScreen (_THIS) { if (currently_fullscreen) { GrUnmapWindow (FSwindow) ; GrMapWindow (SDL_Window) ; GrRaiseWindow (SDL_Window) ; GrSetFocus (SDL_Window) ; currently_fullscreen = 0 ; } return 0 ; }
void button_event(GR_EVENT_BUTTON *ev, nxeyes_state *state) { if(ev->wid != state->wid) return; if(ev->type == GR_EVENT_TYPE_BUTTON_DOWN) { if(ev->buttons & GR_BUTTON_L) { state->button_down = 1; state->x = ev->x; state->y = ev->y; GrRaiseWindow(state->wid); } if(ev->buttons & GR_BUTTON_R) state->quit = 1; } else state->button_down = 0; }
int NX_EnterFullScreen (_THIS) { if (! currently_fullscreen) { GR_SCREEN_INFO si ; GrGetScreenInfo (& si) ; GrResizeWindow (FSwindow, si.cols, si.rows) ; GrUnmapWindow (SDL_Window) ; GrMapWindow (FSwindow) ; GrRaiseWindow (FSwindow) ; GrSetFocus (FSwindow) ; currently_fullscreen = 1 ; } return 1 ; }
void CContextWeather::Proc(UINT nContextNum) { char szWaveFile[7][14] = { "serenity\0", "party_cloudy\0", "cloudy\0", "shower\0", "rainny\0", "thunderstorm\0", "snow\0" }; char szWaveFilePath[128] = {0,}; DBGMSGC(DBG_WEATHER, "++ [%d]\r\n", nContextNum); switch (nContextNum) { case 0: //하단 배너 준비 if ((!g_setup_data.m_SetupData.light_stat) && (g_gpio_mtm.CheckWatchdogReset()==FALSE) && (g_gpio_mtm.GetGpioInputPin(GPIO_DOOR_DETECT)==HIGH)) { //와치독 리셋상태가 아니고 출입문이 닫힌 상태이면 sprintf(szWaveFilePath, "/app/sound/%s.wav\0", szWaveFile[g_setup_data.m_SetupData.weather_right]); PlayWavFile(szWaveFilePath); } //문자열의 길이 m_len_ment = strlen(g_szWeatherMent[g_setup_data.m_SetupData.weather_right]); //폰트크기를 감안한 문자열이 표시되는 폭 m_width_ment = m_len_ment*12; //멘트 텍스트를 픽셀맵에 그리기 GrMapWindow(m_wid_ment); RedrawImage(m_wid_ment, g_gc, 0, 0, MENT_AREA_WIDTH, MENT_AREA_HEIGHT, MENT_AREA_X, MENT_AREA_Y, MENT_AREA_WIDTH, MENT_AREA_HEIGHT, WEATHER_OBJ_BG); RedrawImage(m_pixmap_ment, g_gc, 0, 0, MENT_AREA_WIDTH, MENT_AREA_HEIGHT, MENT_AREA_X, MENT_AREA_Y, MENT_AREA_WIDTH, MENT_AREA_HEIGHT, WEATHER_OBJ_BG); RedrawImage(m_pixmap_ment, g_gc, MENT_AREA_WIDTH, 0, MENT_PIXEL_MAP_WIDTH-MENT_AREA_WIDTH, MENT_AREA_HEIGHT, MENT_AREA_X, MENT_AREA_Y, MENT_PIXEL_MAP_WIDTH-MENT_AREA_WIDTH, MENT_AREA_HEIGHT, WEATHER_OBJ_BG); DrawText(g_szWeatherMent[g_setup_data.m_SetupData.weather_right], m_pixmap_ment, g_gc, 0, 0, m_width_ment, MENT_AREA_HEIGHT, g_font, 24, WHITE, TXT_HALIGN_LEFT|TXT_VALIGN_MIDDLE); GrRaiseWindow(m_wid_ment); m_nThreadStep = 0; break; case 1: break; } DBGMSGC(DBG_WEATHER, "--\r\n"); }
//------------------------------------------------------------------------------ // Function Name : init_ui_manager() // Description : //------------------------------------------------------------------------------ BOOL init_ui_manager(void) { CObject* pObject; UINT id; PRINT_FUNC_CO(); // start nano-x service if (GrOpen() < 0) { // DBGMSG(DBG_MAIN, "[Failure]\r\n--> %s: GrOpen Failed!!\r\n", __func__); return FALSE; } GrSetErrorHandler(error_handler); GrGetScreenInfo(&g_scr_info); // prepare g_font g_font = GrCreateFontEx((GR_CHAR *)FONT_PATH, 18, 18, NULL); GrSetFontAttr(g_font, (GR_TFKERNING | GR_TFANTIALIAS), 0); g_wid = GrNewWindow(GR_ROOT_WINDOW_ID, 0, 0, g_scr_info.cols, g_scr_info.rows, 0, BLACK, 0); if (g_wid == 0) { // DBGMSG(DBG_MAIN, "[Failure]\r\n--> %s: GrNewWindow failure\r\n", __func__); GrClose(); return FALSE; } g_gc = GrNewGC(); GrRaiseWindow(g_wid); GrMapWindow(g_wid); GrSelectEvents(g_wid, GR_EVENT_MASK_BUTTON_DOWN | GR_EVENT_MASK_EXPOSURE); GrSetGCUseBackground(g_gc, FALSE); // GrSetGCUseBackground(g_gc, TRUE); GrSetGCFont(g_gc, g_font); // GrSetGCBackground(g_gc, BLACK); GrSetGCForeground(g_gc, WHITE); // BuildObject(); return TRUE; }
void mvpw_show(mvp_widget_t *widget) { mvp_widget_t *top; if (widget) { if ((widget->type == MVPW_DIALOG) && widget->data.dialog.modal) { top = mvpw_get_focus(); GrMapWindow(widget->wid); raise_widget(widget, top); if (!mvpw_visible((mvp_widget_t*)screensaver_widget)) GrRaiseWindow(widget->wid); mvpw_focus(widget); } else { GrMapWindow(widget->wid); if(widget->show) (*widget->show)(widget, 1); } } }
void topbar_buttondown(win *window, GR_EVENT_BUTTON *event) { struct position *pos; Dprintf("topbar_buttondown window %d\n", window->wid); GrRaiseWindow(window->pid); if(window->active) return; if(!window->data) if(!(window->data = malloc(sizeof(struct position)))) return; pos = (struct position *) window->data; pos->x = event->x; //+ TITLE_BAR_HEIGHT; /* actually width*/ pos->y = event->y; window->active = GR_TRUE; }
void wm_container_buttondown(win *window, GR_EVENT_BUTTON *event) { struct pos_size *pos; GR_RECT r; GR_COORD cxborder = 0, cyborder = 0; GR_WINDOW_INFO info; GR_WINDOW_INFO cinfo; GR_GC_ID gc; Dprintf("wm_container_buttondown window %d\n", window->wid); if(window->active) return; GrGetWindowInfo(window->wid, &info); GrGetWindowInfo(window->clientid, &cinfo); /* calc border sizes*/ if (info.props & GR_WM_PROPS_BORDER) { cxborder = 1; cyborder = 1; } if (info.props & GR_WM_PROPS_APPFRAME) { cxborder = CXBORDER; cyborder = CYBORDER; } /* Check for close box press*/ if ((info.props & (GR_WM_PROPS_CAPTION|GR_WM_PROPS_CLOSEBOX)) == (GR_WM_PROPS_CAPTION|GR_WM_PROPS_CLOSEBOX)) { /* Get close box rect*/ r.x = info.width - CXCLOSEBOX - cxborder - 2; r.y = cyborder + 2; r.width = CXCLOSEBOX; r.height = CYCLOSEBOX; /* Check mousedn in close box*/ if (PtInRect(&r, event->x, event->y)) { /* close on button up*/ window->close = GR_TRUE; return; } } /* * Set focus to the window only if client * or the container itself is clicked. * if any of the children (of the client) * are clicked better not take the focus * away from them. They might require handling * the focus themself. * -- Amit Kulkarni */ if(window->wid==event->subwid) GrSetFocus(window->wid); /* check for corner resize */ r.x = info.width - 5; r.y = info.height - 5; r.width = 5; r.height = 5; if (PtInRect(&r,event->x, event->y) && !(info.props & GR_WM_PROPS_NORESIZE) && !(cinfo.props & GR_WM_PROPS_NORESIZE)) { #if !NO_CORNER_RESIZE struct pos_size * pos; if(!window->data) if(!(window->data = malloc(sizeof(struct pos_size)))) return; window->sizing = GR_TRUE; /* save off the width/height offset from the window manager */ GrGetWindowInfo(window->clientid,&info); pos = (struct pos_size*)window->data; pos->xoff = -info.width; pos->yoff = -info.height; GrGetWindowInfo(window->wid,&info); pos->xoff += info.width; pos->yoff += info.height; gc = GrNewGC(); GrSetGCMode(gc, GR_MODE_XOR|GR_MODE_EXCLUDECHILDREN); GrRect(GR_ROOT_WINDOW_ID,gc,info.x, info.y, info.width, info.height); GrDestroyGC(gc); /* save this rectangle's width/height so we can erase it later */ pos->width = info.width; pos->height = info.height; pos->xorig = event->x; pos->yorig = event->y; /* * This window is being resized. * The client should have focus now. * -- Amit Kulkarni */ GrSetFocus(window->clientid); return; #endif /* !NO_CORNER_RESIZE*/ } else GrSetWindowCursor(window->wid, 0); /* if not in caption, return (FIXME, not calc'd exactly)*/ if (!(info.props & GR_WM_PROPS_CAPTION)) return; /* Get caption box rect*/ r.x = cxborder; r.y = cyborder; r.width = info.width - cxborder*2; r.height = CYCAPTION; /* Check for mousedn in caption box*/ if (!PtInRect(&r, event->x, event->y)) return; /* * Now we have a click on the caption. * So window is active. * Set focus to the client * --Amit Kulkarni */ GrSetFocus(window->clientid); /* Raise window if mouse down and allowed*/ if (!(info.props & GR_WM_PROPS_NORAISE) && !(cinfo.props & GR_WM_PROPS_NORAISE)) GrRaiseWindow(window->wid); /* Don't allow window move if NOMOVE property set*/ if ((info.props & GR_WM_PROPS_NOMOVE) || (cinfo.props & GR_WM_PROPS_NOMOVE)) return; if(!window->data) if(!(window->data = malloc(sizeof(struct pos_size)))) return; GrGetWindowInfo(window->wid,&info); pos = (struct pos_size *)window->data; pos->xoff = event->x; pos->yoff = event->y; #if OUTLINE_MOVE pos->xorig = info.x; pos->yorig = info.y; pos->width = info.width; pos->height = info.height; gc = GrNewGC(); GrSetGCMode(gc, GR_MODE_XOR|GR_MODE_EXCLUDECHILDREN); GrRect(GR_ROOT_WINDOW_ID, gc,info.x, info.y, info.width, info.height); GrDestroyGC(gc); #endif window->active = GR_TRUE; }
// // Member Function // void CContextWeather::Init() { CObject* pObject; CObjectIcon* pObjectIcon; UINT id; CContext::Init(); // 배경 이미지 pObject = new CObjectImage(m_wid_parent, m_gc, 0, 0, g_scr_info.cols, g_scr_info.rows); if(pObject) { pObject->LoadImage(IMG_BACKGROUND, "/app/img/main_bg_blank.png"); id = m_ObjectList.AddObject(pObject); } // 왼쪽 날씨 이미지 pObject = new CObjectIcon(m_wid_parent, m_gc, 1, 169, 300, 246); if(pObject) { pObjectIcon = (CObjectIcon*)pObject; pObjectIcon->AllocImageCount(IMG_ENUM_WEATHER_COUNT); pObject->LoadImage(IMG_ENUM_WEATHER_SERENITY, "/app/img/weather/serenity.png"); pObject->LoadImage(IMG_ENUM_WEATHER_PARTLY_CLOUDY, "/app/img/weather/partly_cloudy.png"); pObject->LoadImage(IMG_ENUM_WEATHER_CLOUDY, "/app/img/weather/cloudy.png"); pObject->LoadImage(IMG_ENUM_WEATHER_SHOWER, "/app/img/weather/shower.png"); pObject->LoadImage(IMG_ENUM_WEATHER_RAINNY, "/app/img/weather/rainny.png"); pObject->LoadImage(IMG_ENUM_WEATHER_THUNDERSTORM, "/app/img/weather/thunderstorm.png"); pObject->LoadImage(IMG_ENUM_WEATHER_SNOW, "/app/img/weather/snow.png"); id = m_ObjectList.AddObject(pObject); } // 오른쪽 날씨 이미지 pObject = new CObjectIcon(m_wid_parent, m_gc, 499, 169, 300, 246); if(pObject) { pObjectIcon = (CObjectIcon*)pObject; pObjectIcon->AllocImageCount(IMG_ENUM_WEATHER_COUNT); pObject->LoadImage(IMG_ENUM_WEATHER_SERENITY, "/app/img/weather/serenity.png"); pObject->LoadImage(IMG_ENUM_WEATHER_PARTLY_CLOUDY, "/app/img/weather/partly_cloudy.png"); pObject->LoadImage(IMG_ENUM_WEATHER_CLOUDY, "/app/img/weather/cloudy.png"); pObject->LoadImage(IMG_ENUM_WEATHER_SHOWER, "/app/img/weather/shower.png"); pObject->LoadImage(IMG_ENUM_WEATHER_RAINNY, "/app/img/weather/rainny.png"); pObject->LoadImage(IMG_ENUM_WEATHER_THUNDERSTORM, "/app/img/weather/thunderstorm.png"); pObject->LoadImage(IMG_ENUM_WEATHER_SNOW, "/app/img/weather/snow.png"); id = m_ObjectList.AddObject(pObject); } // 가스On/Off 이미지 pObject = new CObjectIcon(m_wid_parent, m_gc, 325, 245, 137, 137); //좌측여백 13 if(pObject) { pObjectIcon = (CObjectIcon*)pObject; pObjectIcon->AllocImageCount(IMG_ENUM_GAS_COUNT); pObject->LoadImage(IMG_ENUM_GAS_ON, "/app/img/main_icon/main_gas_on.png"); //적색 가스사용 pObject->LoadImage(IMG_ENUM_GAS_OFF, "/app/img/main_icon/main_gas_off.png"); //녹색 가스차단 id = m_ObjectList.AddObject(pObject); } // 주차아이콘 pObject = new CObjectImage(m_wid_parent, m_gc, 0, 419, 261, 61); if(pObject) { pObject->LoadImage(IMG_BACKGROUND, "/app/img/main_bar_back.png"); id = m_ObjectList.AddObject(pObject); } //g_setup_data.m_SetupData.gas_stat: 0=사용중, 1=사용차단 m_isGasOff = (g_setup_data.m_SetupData.gas_stat) ? TRUE : FALSE; //멘트가 표시될 서브 윈도 m_wid_ment = GrNewWindow(g_wid, MENT_AREA_X, MENT_AREA_Y, MENT_AREA_WIDTH, MENT_AREA_HEIGHT, 0, 0, 0); if(m_wid_ment) { // GrMapWindow(m_wid_ment); //이미지 버퍼링을 처리할 Pixel Map // m_pixmap_ment = GrNewPixmap(MENT_AREA_WIDTH, MENT_AREA_HEIGHT, NULL); m_pixmap_ment = GrNewPixmap(MENT_PIXEL_MAP_WIDTH, MENT_AREA_HEIGHT, NULL); #if 0 RedrawImage(m_wid_ment, g_gc, 0, 0, MENT_AREA_WIDTH, MENT_AREA_HEIGHT, MENT_AREA_X, MENT_AREA_Y, MENT_AREA_WIDTH, MENT_AREA_HEIGHT, WEATHER_OBJ_BG); RedrawImage(m_pixmap_ment, g_gc, 0, 0, MENT_AREA_WIDTH, MENT_AREA_HEIGHT, MENT_AREA_X, MENT_AREA_Y, MENT_AREA_WIDTH, MENT_AREA_HEIGHT, WEATHER_OBJ_BG); DrawText(g_szWeatherMent[g_setup_data.m_SetupData.today_weather], m_pixmap_ment, g_gc, 0, 0, m_width_ment, MENT_AREA_HEIGHT, g_font, 24, WHITE, TXT_HALIGN_LEFT|TXT_VALIGN_MIDDLE); GrRaiseWindow(m_wid_ment); #endif } else { DBGMSGC(DBG_WEATHER, "%s: GrNewWindow failure\r\n", __func__); } }
/* * Demo to test child window movement and redrawing */ int main(int ac,char **av) { GR_COORD offset_x = 0, offset_y = 0; GR_WINDOW_ID window1, subwindow1, subsubwin1; GR_WINDOW_ID window2, subwindow2; /*GR_WINDOW_ID subsubwin2;*/ GR_EVENT event; fprintf(stderr,"This is a demo program.\n"); fprintf(stderr,"Left-button drags window\n"); fprintf(stderr,"Right-button raises window\n"); GrOpen(); window1 = GrNewWindow(GR_ROOT_WINDOW_ID, 20, 20, 100, 60, 4, BLACK, BLUE); subwindow1 = GrNewWindow(window1, 5, 5, 90, 50, 4, WHITE, RED); subsubwin1 = GrNewWindow(subwindow1, 10, 10, 10, 10, 2, GREEN, BLUE); window2 = GrNewWindow(GR_ROOT_WINDOW_ID, 20, 100, 100, 60, 4, BLACK, BLUE); subwindow2 = GrNewWindow(window2, 5, 5, 90, 50, 4, WHITE, RED); /* subsubwin2 = GrNewWindow(subwindow2, 10, 10, 10, 10, 2, GREEN, BLUE); */ GrSelectEvents(window1, GR_EVENT_MASK_EXPOSURE | GR_EVENT_MASK_BUTTON_DOWN | GR_EVENT_MASK_BUTTON_UP | GR_EVENT_MASK_MOUSE_ENTER | GR_EVENT_MASK_MOUSE_EXIT | GR_EVENT_MASK_MOUSE_MOTION | GR_EVENT_MASK_CLOSE_REQ); GrSelectEvents(window2, GR_EVENT_MASK_EXPOSURE | GR_EVENT_MASK_BUTTON_DOWN | GR_EVENT_MASK_BUTTON_UP | GR_EVENT_MASK_MOUSE_ENTER | GR_EVENT_MASK_MOUSE_EXIT | GR_EVENT_MASK_MOUSE_MOTION | GR_EVENT_MASK_CLOSE_REQ); GrSelectEvents(subsubwin1, GR_EVENT_MASK_BUTTON_DOWN | 0); GrMapWindow(subsubwin1); GrMapWindow(subwindow1); GrMapWindow(window1); /*GrMapWindow(subsubwin2);*/ GrMapWindow(subwindow2); GrMapWindow(window2); while(1) { GrGetNextEvent(&event); switch (event.type) { case GR_EVENT_TYPE_NONE: break; case GR_EVENT_TYPE_BUTTON_DOWN: offset_x = event.button.x; offset_y = event.button.y; if (event.button.changebuttons & GR_BUTTON_R) { GrRaiseWindow(event.button.wid); } if (event.button.wid == subsubwin1) { GR_WINDOW_INFO winfo; GrGetWindowInfo(subsubwin1, &winfo); if (winfo.parent == subwindow1) { GrReparentWindow(subsubwin1, subwindow2, 10, 10); } else { GrReparentWindow(subsubwin1, subwindow1, 10, 10); } } case GR_EVENT_TYPE_MOUSE_MOTION: if (event.mouse.buttons == GR_BUTTON_L && (event.mouse.wid == window1 || event.mouse.wid == window2)) { GrMoveWindow(event.mouse.wid, event.mouse.rootx - offset_x, event.mouse.rooty - offset_y); } if (event.mouse.buttons == GR_BUTTON_R) { GrResizeWindow(event.mouse.wid, event.mouse.x + 1, event.mouse.y + 1); } break; case GR_EVENT_TYPE_EXPOSURE: /*GrFillRect(event.exposure.wid, defgc, event.exposure.x, event.exposure.y, event.exposure.width, event.exposure.height);*/ break; case GR_EVENT_TYPE_CLOSE_REQ: GrClose(); exit(0); default: fprintf(stderr, "%d\n", event.type); } } GrClose(); }
/* * Here when a button is pressed. */ void do_buttondown(GR_EVENT_BUTTON *bp) { GR_PIXELVAL intable[W2_WIDTH * W2_HEIGHT]; GR_PIXELVAL outtable[W2_WIDTH * W2_HEIGHT * 6]; GR_PIXELVAL *inp; GR_PIXELVAL *outp; GR_PIXELVAL *oldinp; GR_COORD row; GR_COORD col; /*static int xx = 100; static int yy = 50;*/ if (bp->wid == w3) { GrRaiseWindow(w3); GrReadArea(w2, 0, 0, W2_WIDTH, W2_HEIGHT, intable); inp = intable; outp = outtable; for (row = 0; row < W2_HEIGHT; row++) { oldinp = inp; for (col = 0; col < W2_WIDTH; col++) { *outp++ = *inp; *outp++ = *inp++; } inp = oldinp; for (col = 0; col < W2_WIDTH; col++) { *outp++ = *inp; *outp++ = *inp++; } inp = oldinp; for (col = 0; col < W2_WIDTH; col++) { *outp++ = *inp; *outp++ = *inp++; } } GrArea(w1, gc1, 0, 0, W2_WIDTH * 2, W2_HEIGHT * 3, outtable, MWPF_PIXELVAL); return; } if (bp->wid == w4) { GrRaiseWindow(w4); linexpos = bp->x; lineypos = bp->y; xorxpos = bp->x; xorypos = bp->y; GrLine(w4, gc4, xorxpos, xorypos, linexpos, lineypos); lineok = GR_TRUE; return; } if (bp->wid != w1) { /* * Cause a fatal error for testing if more than one * button is pressed. */ if ((bp->buttons & -((int) bp->buttons)) != bp->buttons) GrClearWindow(-1, 0); return; } GrRaiseWindow(w1); /*GrMoveWindow(w1, ++xx, yy);*/ if (bp->buttons & GR_BUTTON_L) { GrClearWindow(w1, GR_TRUE); return; } begxpos = bp->x; xpos = bp->x; ypos = bp->y; }