int macgetch(void) { WindowPtr whichWindow; EventRecord theEvent; char c; /* one-byte buffer for read() to use */ do { SystemTask(); if (!GetNextEvent(everyEvent, &theEvent)) theEvent.what = nullEvent; else { switch (theEvent.what) { case keyDown: c = theEvent.message & charCodeMask; break; case mouseDown: if (FindWindow(theEvent.where, &whichWindow) == inSysWindow) SystemClick(&theEvent, whichWindow); break; case updateEvt: break; } } } while (theEvent.what != keyDown); printf("*"); fflush(stdout); return (int)c; }
void MacIdle(void) { extern logical anywarns; static long time = 0; EventRecord myEvent; WindowPtr whichWindow; #if TARGET_API_MAC_CARBON Rect tempRect; #endif char theChar; if (TickCount()<time) return; if (mac_quit_now) { anywarns = FALSE; /* kludge so that window doesn't sit around */ my_exit(1); } #if !TARGET_API_MAC_CARBON SystemTask(); #endif if (WaitNextEvent(everyEvent, &myEvent, 1, nil)) { if (!SIOUXHandleOneEvent(&myEvent)) switch (myEvent.what) { case mouseDown: switch (FindWindow(myEvent.where,&whichWindow)) { case inMenuBar: MenuSelect(myEvent.where); break; #if !TARGET_API_MAC_CARBON case inSysWindow: SystemClick(&myEvent,whichWindow); break; #endif case inContent: SelectWindow(whichWindow); break; case inDrag: #if TARGET_API_MAC_CARBON GetRegionBounds(GetGrayRgn(),&tempRect); DragWindow(whichWindow,myEvent.where,&tempRect); #else DragWindow(whichWindow,myEvent.where,&qd.screenBits.bounds); #endif break; } break; case keyDown: theChar = myEvent.message & charCodeMask; break; case updateEvt: BeginUpdate((WindowPtr) myEvent.message); EndUpdate((WindowPtr) myEvent.message); break; } } time=TickCount()+20; }
static void ProcessEvent () { EventRecord myEvent; WindowPtr whichWindow; /* do system tasks */ SystemTask(); /* get event */ if (GetNextEvent(everyEvent,&myEvent)) { switch (myEvent.what) { case mouseDown : switch (FindWindow(myEvent.where,&whichWindow)) { case inSysWindow : SystemClick(&myEvent,whichWindow); break; case inMenuBar : DoCommand(MenuSelect(myEvent.where)); break; case inDrag : DragWindow(whichWindow,myEvent.where,&dragRect); break; case inContent : if (whichWindow!=FrontWindow()) SelectWindow(whichWindow); else { /*DoContentClick(whichWindow,&myEvent);*/ } break; case inGrow : /*DoGrowWindow(whichWindow,&myEvent);*/ break; case inGoAway : /*DoGoAway(whichWindow,&myEvent);*/ break; } break; /* mouseDown */ case keyDown : case autoKey : DoKey(&myEvent); break; case activateEvt : /*DoActivate(&myEvent);*/ break; case updateEvt : whichWindow = (WindowPtr) myEvent.message; /*DoUpdate(whichWindow,&myEvent);*/ break; } } } /* ProcessEvent */
static void handlemouse (EventRecord *ev) { short part; WindowPtr w; part = FindWindow ((*ev).where, &w); if (w != nil) if (w != FrontWindow ()) { /*just like all other Mac programs*/ SelectWindow (w); return; /*the mouse click is consumed by the bringtofront operation*/ } switch (part) { case inMenuBar: handlemenu (MenuSelect ((*ev).where)); break; case inSysWindow: SystemClick (ev, w); break; case inDrag: handledrag (ev, w); break; case inContent: EnableSharedMenus (false); while (StillDown ()) ; EnableSharedMenus (true); break; } /*switch*/ } /*handlemouse*/
void DoMouseDown(EventRecord *event) { int myPart; WindowPtr myWindow; Point point; myPart = FindWindow(event->where, &myWindow); switch(myPart) { case inMenuBar: DrawMenuBar(); DoMenuCommand(MenuSelect(event->where)); break; case inSysWindow: SystemClick(event, myWindow); break; case inDrag: DoDrag(myWindow, event->where); // update the vid_xpos / vid_ypos cvars point.h = 0; point.v = 0; LocalToGlobal( &point ); Cvar_SetValue( "vid_xpos", point.h ); Cvar_SetValue( "vid_ypos", point.v ); return; break; case inGoAway: DoGoAwayBox(myWindow, event->where); break; case inContent: if (myWindow != FrontWindow()) { SelectWindow(myWindow); } break; } }
static void mac_event(EventRecord *event) { short part; WindowPtr window; switch (event->what) { case mouseDown: part = FindWindow(event->where, &window); switch (part) { case inMenuBar: mac_adjustmenus(); mac_menucommand(MenuSelect(event->where)); break; #if !TARGET_API_MAC_CARBON case inSysWindow: SystemClick(event, window); break; #endif case inContent: if (window != FrontWindow()) /* XXX: check for movable modal dboxes? */ SelectWindow(window); else mac_contentclick(window, event); break; case inGoAway: if (TrackGoAway(window, event->where)) mac_closewindow(window); break; case inDrag: /* XXX: moveable modal check? */ #if TARGET_API_MAC_CARBON { BitMap screenBits; GetQDGlobalsScreenBits(&screenBits); DragWindow(window, event->where, &screenBits.bounds); } #else DragWindow(window, event->where, &qd.screenBits.bounds); #endif break; case inGrow: mac_growwindow(window, event); break; case inZoomIn: case inZoomOut: if (TrackBox(window, event->where, part)) mac_zoomwindow(window, part); break; } break; case keyDown: case autoKey: mac_keypress(event); break; case activateEvt: mac_activatewindow((WindowPtr)event->message, event); break; case updateEvt: mac_updatewindow((WindowPtr)event->message); break; #if !TARGET_API_MAC_CARBON case diskEvt: if (HiWord(event->message) != noErr) { Point pt; SetPt(&pt, 120, 120); DIBadMount(pt, event->message); } break; #endif case osEvt: switch ((event->message & osEvtMessageMask) >> 24) { case suspendResumeMessage: mac_suspendresume(event); break; } break; case kHighLevelEvent: AEProcessAppleEvent(event); /* errors? */ break; } }
Boolean ThermDialog::DisplayTherm(int k,int maxk,unsigned char *st) { Rect r; int maxr; Handle h; short itemType; long temp; GrafPtr tdp; WindowPtr window; short thePart; Rect screenRect, updateRect; Point aPoint = {100, 100}; Boolean QuitFlag = FALSE; short item = 0; EventRecord event; short the_part; DialogPtr hitdp; GetPort(&tdp); SetPort(dp); if (st != NULL) { GetDItem (dp,ids[THERM_TEXT], &itemType, &h, &r); SetIText(h,st); } GetDItem (dp, ids[THERM_BOX], &itemType, &h, &r); if (k == -1) k = old_k; if (maxk == -1) maxk = old_maxk; maxr = r.right; temp = ((long)k*((long)r.right - (long)r.left))/(long)maxk; r.right = r.left + temp; if (r.right>maxr) r.right=maxr; old_k = k; old_maxk = maxk; PenNormal (); PenPat(&qd.gray); PaintRect(&r); PenNormal (); SetPort(tdp); if (GetNextEvent(0xFFFF,&event)) { if (event.what == mouseDown) { the_part = FindWindow(event.where, &window); if (IsDialogEvent(&event)) { DialogSelect(&event,&hitdp,&item); if ((hitdp == dp) && (item == ids[THERM_CANCEL])) { Quit = TRUE; return FALSE; } } else switch (the_part) { case inSysWindow: SystemClick (&event, window); break; case inDrag: screenRect = (**GetGrayRgn()).rgnBBox; DragWindow( window, event.where, &screenRect ); break; } } else if (event.what == keyDown) { if ((event.modifiers & 0x0100) && ( (event.message) & charCodeMask == 0x02E)) { Quit = TRUE; return FALSE; } } else if (event.what == updateEvt) { window = (WindowPtr)event.message; updateRect = (**(window->visRgn)).rgnBBox; SetPort( window ) ; BeginUpdate( window ); DrawDialog( window ); if (dp == window) box_d_item(dp,ids[THERM_BOX]); EndUpdate( window ); } } if (Quit) return FALSE; return TRUE; }
void DoMouseDown(EventRecord e) { short partCode; WindowPtr whichWindow; Rect dragRect; Point pt; switch(partCode = FindWindow(e.where, &whichWindow)) { case inMenuBar: FixMenus(); ProcessMenu(MenuSelect(e.where)); break; case inSysWindow: SystemClick(&e, whichWindow); break; case inContent: if(whichWindow != FrontWindow()) SelectWindow(whichWindow); if(whichWindow==nesWind) DoClickInNES(e); if(whichWindow==wpWind) DoClickInWP(e); if(whichWindow==srchWind) DoClickInSrch(e); #ifdef GB_DEBUG if(whichWindow==statWind) DoClickInStat(e); if(whichWindow==patWind) DoClickInPat(e); #endif break; case inDrag: dragRect = qd.screenBits.bounds; InsetRect(&dragRect, 5, 5); DragWindow(whichWindow, e.where, &dragRect); if(whichWindow == nesWind) { SetPt(&pt,0,0); SetPort(nesWind); LocalToGlobal(&pt); MoveWindow(nesWind,pt.h & 0xfff8,pt.v,false); SetPt(&pt,0,0); LocalToGlobal(&pt); if( (pt.h < 0) || (pt.v < 20) ) MoveWindow(nesWind,8,40,false); SetPt(&pt,nesWind->portRect.right,nesWind->portRect.bottom); LocalToGlobal(&pt); if( (pt.h > scrnW) || (pt.v > scrnH) ) MoveWindow(nesWind,8,40,false); } WP_RepositionWind(); Srch_RepositionWind(); break; case inGoAway: if(TrackGoAway(whichWindow, e.where)) DoCloseWindow(whichWindow); break; default: break; } vVrtFrame = vActFrame; // keep timing code working }
// -------------------------------------------------------------------------------------- static void handleEvents(EventRecord *event) { WindowRef window; Boolean activate; WindowPartCode partCode; OSErr error; Rect tempRect, newSize; long menuChoice; MenuCommand commandID; RgnHandle grayRegion; switch (event->what) // handle events according to the priority { // determined by the system case activateEvt: window = (WindowRef)event->message; activate = (event->modifiers & activeFlag) != 0; HandleActivate(window, activate); break; case mouseDown: partCode = FindWindow(event->where, &window); switch(partCode) { case inMenuBar: menuChoice = MenuSelect(event->where); error = GetMenuItemCommandID(GetMenuRef(HiWord(menuChoice)), LoWord(menuChoice), &commandID); if (error == noErr) { if (commandID == 0) // if the menu item clicked on does not have commandID = (MenuCommand)menuChoice; // a command ID HandleMenuChoice(commandID); } break; case inSysWindow: if (window != NULL) SystemClick(event, window); break; case inContent: // the following window part codes will only be returned if (window != FrontWindow()) // for the preferences window SelectWindow(window); else HandleContentClick(window, event->where, event->modifiers); break; case inDrag: grayRegion = GetGrayRgn(); DragWindow(window, event->where, &((*grayRegion)->rgnBBox)); break; case inGrow: SetRect(&tempRect, kPrefsWindowPlatinumWidth, kPrefsWindowPlatinumHeight, SHRT_MAX, SHRT_MAX); ResizeWindow(window, event->where, &tempRect, &newSize); AdjustControls(window); break; case inGoAway: ClosePrefsWindow(window); break; } break; case keyDown: case autoKey: // a separate auto key handler would go after disk events if ((event->modifiers & cmdKey) != 0) { UInt32 keyMenuChoice; keyMenuChoice = MenuEvent(event); error = GetMenuItemCommandID(GetMenuRef(HiWord(keyMenuChoice)), LoWord(keyMenuChoice), &commandID); if (error == noErr) { if (commandID == 0) // if the menu item chosen does not have a commandID = (MenuCommand)keyMenuChoice; // command ID HandleMenuChoice(commandID); // (but they all should) } } else { window = FrontNonFloatingWindow(); if (window != NULL) { char keyCode = (event->message & keyCodeMask) >> 8; HandleKeyDown(keyCode, window); } } break; case diskEvt: if (HiWord(event->message) != noErr) { Point where; SetPt(&where, 70, 50); ShowCursor(); DIBadMount(where, event->message); } break; case updateEvt: window = (WindowRef)event->message; SetPortWindowPort(window); BeginUpdate(window); HandleDrawContent(window); EndUpdate(window); break; case kHighLevelEvent: // an OS Event handler would go before high level events AEProcessAppleEvent(event); break; }
void RunLoop() { EventRecord theEvent; WindowPtr whichWindow; Rect txRect; txRect = qd.thePort->portRect; InsetRect(&txRect,4,0); textH = TENew(&txRect,&txRect); while (!quit) { SystemTask(); TEIdle(textH); if (GetNextEvent(everyEvent, &theEvent)) { switch (theEvent.what) { case mouseDown: { switch (FindWindow(theEvent.where, &whichWindow)) { case inSysWindow: { SystemClick(&theEvent, whichWindow); break; } case inMenuBar: { DoCommand(MenuSelect(theEvent.where)); break; } case inDrag: { DragWindow(whichWindow, theEvent.where, &qd.screenBits.bounds); break; } case inContent: { if (whichWindow != FrontWindow()) { SelectWindow(whichWindow); } else { GlobalToLocal(&theEvent.where); if (theEvent.modifiers&shiftKey) isShift = true; TEClick(theEvent.where, isShift, textH); } break; } case inGoAway: { if (TrackGoAway(whichWindow, theEvent.where)) { quit = true; } break; } default: break; } break; } case autoKey: case keyDown: { char theChar = (theEvent.message&charCodeMask); if (theEvent.modifiers&cmdKey) { DoCommand(MenuKey(theChar)); if (theChar == 'm') { quit = true; } } else { TEKey(theChar, textH); } break; } case activateEvt: { if (theEvent.modifiers&activeFlag) { TEActivate(textH); } else { TEDeactivate(textH); } break; } case updateEvt: { BeginUpdate((WindowPtr)theEvent.message); EraseRect(&(qd.thePort->portRect)); TEUpdate(&(qd.thePort->portRect), textH); EndUpdate((WindowPtr)theEvent.message); break; } default: break; } } } }