static void mac_groweventlog(WindowPtr window, EventRecord *event) { Session *s = mac_windowsession(window); Rect limits; long grow_result; #if TARGET_API_MAC_CARBON Rect rect; Point cellsize; #else GrafPtr saveport; #endif SetRect(&limits, 15, 0, SHRT_MAX, SHRT_MAX); grow_result = GrowWindow(window, event->where, &limits); if (grow_result == 0) return; SizeWindow(window, LoWord(grow_result), HiWord(grow_result), TRUE); LSize(LoWord(grow_result) - 15, HiWord(grow_result), s->eventlog); mac_adjusteventlogscrollbar(s); /* We would use SetListCellSize in Carbon, but it's missing. */ (*s->eventlog)->cellSize.h = LoWord(grow_result) - 15; #if TARGET_API_MAC_CARBON cellsize.h = LoWord(grow_result) - 15; GetListViewBounds(s->eventlog, &rect); InvalWindowRect(window, &rect); #else GetPort(&saveport); SetPort(window); InvalRect(&(*s->eventlog)->rView); SetPort(saveport); #endif }
void doMouseDown(EventRecord *eventStrucPtr) { WindowRef windowRef; WindowPartCode partCode, zoomPart; BitMap screenBits; Rect constraintRect, mainScreenRect; Point standardStateHeightAndWidth; long newSize; partCode = FindWindow(eventStrucPtr->where,&windowRef); switch(partCode) { case inMenuBar: break; case inContent: if(windowRef != FrontWindow()) SelectWindow(windowRef); else doInContent(eventStrucPtr,windowRef); break; case inDrag: DragWindow(windowRef,eventStrucPtr->where,NULL); break; case inGoAway: break; case inGrow: constraintRect.top = 75; constraintRect.left = 250; constraintRect.bottom = constraintRect.right = 32767; newSize = GrowWindow(windowRef,eventStrucPtr->where,&constraintRect); if (newSize != 0) SizeWindow(windowRef,LoWord(newSize),HiWord(newSize),true); window_adjust_scrollbars(windowRef); window_invalidate(windowRef); break; case inZoomIn: case inZoomOut: mainScreenRect = GetQDGlobalsScreenBits(&screenBits)->bounds; standardStateHeightAndWidth.v = mainScreenRect.bottom; standardStateHeightAndWidth.h = mainScreenRect.right; if(IsWindowInStandardState(windowRef,&standardStateHeightAndWidth,NULL)) zoomPart = inZoomIn; else zoomPart = inZoomOut; if(TrackBox(windowRef,eventStrucPtr->where,partCode)) { ZoomWindowIdeal(windowRef,zoomPart,&standardStateHeightAndWidth); window_adjust_scrollbars(windowRef); } break; } }
void dogrowwin (Point start, WindowPtr wp) { Rect r; long newsize; /* todo: find out what is normally done when there is no maximum size that needs to be enforced */ SetRect (&r, ICONWIDTHUSED, ICONHEIGHTUSED, 32767, 32767); newsize = GrowWindow (wp, start, &r); SizeWindow (wp, LoWord (newsize), HiWord (newsize), true); InvalRect (&wp->portRect); straightenwindow (wp); }
void HandleMouseDown(EventRecord *event) { short part; WindowRef window; MacWindow *macwin; Rect growRect={100,100,32000,32000}; long size; part=FindWindow(event->where, &window); macwin = (MacWindow*)GetWRefCon(window); switch(part) { case inMenuBar: mac_AdjustMenus(event->modifiers); mac_HandleMenuSelect(MenuSelect(event->where), event->modifiers); HiliteMenu(0); break; case inContent: SetPortWindowPort(window); SelectWindow(window); GlobalToLocal(&event->where); if(macwin) macwin->click(event->where, event->modifiers); break; case inDrag: DragWindow(window, event->where, &qd.screenBits.bounds); break; case inGrow: SetPortWindowPort(window); size=GrowWindow(window, event->where, &growRect); if( size ) { SizeWindow(window, size&0x0000FFFF, size>>16, 0); EraseRect(&GetWindowPort(window)->portRect); InvalRect(&GetWindowPort(window)->portRect); if( macwin ) macwin->message(MW_GROW, size); } break; case inGoAway: if( TrackGoAway(window, event->where) ){ if( macwin ){ macwin->goaway(macwin); } } break; //case inZoomIn: //case inZoomOut: // break; } }
//default mouse event handler static OSStatus MouseEventHandler(EventHandlerCallRef nextHandler, EventRef event, void *userData) { OSStatus result = noErr; UInt32 class = GetEventClass (event); UInt32 kind = GetEventKind (event); result = CallNextEventHandler(nextHandler, event); if(class == kEventClassMouse) { WindowPtr tmpWin; Point mousePos; Point winMousePos; GetEventParameter(event, kEventParamMouseLocation, typeQDPoint, 0, sizeof(Point), 0, &mousePos); GetEventParameter(event, kEventParamWindowMouseLocation, typeQDPoint, 0, sizeof(Point), 0, &winMousePos); switch (kind) { case kEventMouseMoved: { if(vo_quartz_fs) { CGDisplayShowCursor(kCGDirectMainDisplay); mouseHide = FALSE; } } break; case kEventMouseWheelMoved: { int wheel; short part; GetEventParameter(event, kEventParamMouseWheelDelta, typeSInt32, 0, sizeof(int), 0, &wheel); part = FindWindow(mousePos,&tmpWin); if(part == inContent) { if(wheel > 0) mplayer_put_key(MOUSE_BTN3); else mplayer_put_key(MOUSE_BTN4); } } break; case kEventMouseDown: { EventMouseButton button; short part; Rect bounds; GetWindowPortBounds(theWindow, &bounds); GetEventParameter(event, kEventParamMouseButton, typeMouseButton, 0, sizeof(EventMouseButton), 0, &button); part = FindWindow(mousePos,&tmpWin); if( (winMousePos.h > (bounds.right - 15)) && (winMousePos.v > (bounds.bottom)) ) { if(!vo_quartz_fs) { GrowWindow(theWindow, mousePos, NULL); } } else if(part == inMenuBar) { MenuSelect(mousePos); HiliteMenu(0); } else if(part == inContent) { switch(button) { case 1: mplayer_put_key(MOUSE_BTN0);break; case 2: mplayer_put_key(MOUSE_BTN2);break; case 3: mplayer_put_key(MOUSE_BTN1);break; default:result = eventNotHandledErr;break; } } } break; case kEventMouseUp: break; case kEventMouseDragged: break; default:result = eventNotHandledErr;break; } } return result; }
INT GrowGraphWindow (GRAPH_WINDOW *gw, EventRecord *theEvent, DOC_GROW_EVENT *docGrow) { long growResult; Rect r,sizeRect,beforeRect,afterRect; WindowPtr theWindow; Rect myClipRect; theWindow = MAC_WIN(gw); SetPort(GetWindowPort(theWindow)); /* grow window */ GetPortBounds(GetWindowPort(theWindow),&beforeRect); SetRect(&sizeRect,GRAPHWIN_MINSIZE,GRAPHWIN_MINSIZE,SCREEN_WIDTH-2*MARGIN_TO_SCREEN,SCREEN_HEIGHT-2*MARGIN_TO_SCREEN-MENU_BAR); growResult = GrowWindow(theWindow,theEvent->where,&sizeRect); if (growResult!=0) { /* actually change windows size */ SizeWindow(theWindow,LoWrd(growResult),HiWrd(growResult),true); GetPortBounds(GetWindowPort(theWindow),&afterRect); /* make the new regions invalid */ if (afterRect.right>beforeRect.right) { SetRect(&r,beforeRect.right-15,beforeRect.top,beforeRect.right,beforeRect.bottom-15); InvalWindowRect(theWindow,&r); } else if (afterRect.right<beforeRect.right) { SetRect(&r,afterRect.right-15,afterRect.top,afterRect.right,afterRect.bottom-15); InvalWindowRect(theWindow,&r); } if (afterRect.bottom>beforeRect.bottom) { SetRect(&r,beforeRect.left,beforeRect.bottom-15,beforeRect.right,beforeRect.bottom); InvalWindowRect(theWindow,&r); } else if (afterRect.bottom<beforeRect.bottom) { SetRect(&r,afterRect.left,afterRect.bottom-15,afterRect.right,afterRect.bottom); InvalWindowRect(theWindow,&r); } /* store and report new size */ docGrow->Global_LL[0] = gw->Global_LL[0]; docGrow->Global_LL[1] = gw->Global_LL[1] += afterRect.bottom - SCROLL_BAR - gw->Local_LL[1]; docGrow->Global_UR[0] = gw->Global_UR[0] += afterRect.right - SCROLL_BAR - gw->Local_UR[0]; docGrow->Global_UR[1] = gw->Global_UR[1]; docGrow->Local_LL[0] = gw->Local_LL[0] = afterRect.left; docGrow->Local_LL[1] = gw->Local_LL[1] = afterRect.bottom - SCROLL_BAR; docGrow->Local_UR[0] = gw->Local_UR[0] = afterRect.right - SCROLL_BAR; docGrow->Local_UR[1] = gw->Local_UR[1] = afterRect.top; ClipRect(&afterRect); EraseRect(&afterRect); /* adjust clipping rectangle */ myClipRect.left = gw->Local_LL[0]; myClipRect.right = gw->Local_UR[0]; myClipRect.bottom = gw->Local_LL[1]; myClipRect.top = gw->Local_UR[1]; ClipRect(&myClipRect); return (POS_CHANGE); } else return (NO_POS_CHANGE); }
//------------------------------------------------------------------------------ //this is for system-level keys, such as help, etc. //returns 1 if screen changed int HandleSystemKey (int key) { int bScreenChanged = 0; int bStopPlayerMovement = 1; //if (gameStates.gameplay.bSpeedBoost) // return 0; if (!gameStates.app.bPlayerIsDead) switch (key) { case KEY_ESC: if (gameData.app.bGamePaused) gameData.app.bGamePaused = 0; else { gameStates.app.bGameAborted = 1; SetFunctionMode (FMODE_MENU); } break; case KEY_SHIFTED + KEY_F1: bScreenChanged = SelectNextWindowFunction (0); break; case KEY_SHIFTED + KEY_F2: bScreenChanged = SelectNextWindowFunction (1); break; case KEY_SHIFTED + KEY_F3: gameOpts->render.cockpit.nWindowSize = (gameOpts->render.cockpit.nWindowSize + 1) % 4; bScreenChanged = 1; //SelectNextWindowFunction(1); break; case KEY_CTRLED + KEY_F3: gameOpts->render.cockpit.nWindowPos = (gameOpts->render.cockpit.nWindowPos + 1) % 6; bScreenChanged = 1; //SelectNextWindowFunction(1); break; case KEY_SHIFTED + KEY_CTRLED + KEY_F3: gameOpts->render.cockpit.nWindowZoom = (gameOpts->render.cockpit.nWindowZoom + 1) % 4; bScreenChanged = 1; //SelectNextWindowFunction(1); break; } if (!gameStates.app.bPlayerIsDead || (LOCALPLAYER.lives > 1)) { switch (key) { /* case KEY_SHIFTED + KEY_ESC: console.Show (); break; */ case KEY_COMMAND + KEY_P: case KEY_CTRLED + KEY_P: case KEY_PAUSE: DoGamePause (); break; case KEY_CTRLED + KEY_ALTED + KEY_S: if (!ToggleFreeCam ()) return 0; break; case KEY_COMMAND + KEY_SHIFTED + KEY_P: case KEY_PRINT_SCREEN: gameStates.app.bSaveScreenshot = 1; SaveScreenShot (NULL, 0); break; case KEY_F1: ShowHelp (); break; case KEY_F2: //gameStates.app.bConfigMenu = 1; break; if (!IsMultiGame) { paletteManager.SaveEffect (); paletteManager.ResetEffect (); paletteManager.LoadEffect (); } ConfigMenu (); if (!IsMultiGame) paletteManager.LoadEffect (); break; case KEY_F3: if (!GuidedInMainView ()) { SetFreeCam (0); SetChaseCam (0); cockpit->Toggle (); bScreenChanged = 1; } break; case KEY_F7 + KEY_SHIFTED: paletteManager.SaveEffect (); JoyDefsCalibrate (); paletteManager.LoadEffect (); break; case KEY_SHIFTED + KEY_MINUS: case KEY_MINUS: ShrinkWindow (); bScreenChanged = 1; break; case KEY_SHIFTED + KEY_EQUALS: case KEY_EQUALS: GrowWindow (); bScreenChanged = 1; break; case KEY_CTRLED + KEY_F5: saveGameManager.Save (0, 0, 1, 0); break; case KEY_CTRLED + KEY_F9: saveGameManager.Load (0, 0, 1, 0); break; case KEY_F5: if (gameData.demo.nState == ND_STATE_RECORDING) { NDStopRecording (); } else if (gameData.demo.nState == ND_STATE_NORMAL) if (!gameData.app.bGamePaused) //can't start demo while paused NDStartRecording (); break; case KEY_ALTED + KEY_F4: gameData.multigame.bShowReticleName = (gameData.multigame.bShowReticleName + 1) % 2; case KEY_F7: gameData.multigame.kills.bShowList = (gameData.multigame.kills.bShowList + 1) % (IsTeamGame ? 4 : 3); if (IsMultiGame) MultiSortKillList (); bStopPlayerMovement = 0; break; case KEY_CTRLED + KEY_F7: if ((gameStates.render.cockpit.bShowPingStats = !gameStates.render.cockpit.bShowPingStats)) ResetPingStats (); break; case KEY_CTRLED + KEY_F8: gameData.stats.nDisplayMode = (gameData.stats.nDisplayMode + 1) % 5; gameOpts->render.cockpit.bPlayerStats = gameData.stats.nDisplayMode != 0; break; case KEY_F8: MultiSendMsgStart (-1); bStopPlayerMovement = 0; break; case KEY_F9: case KEY_F10: case KEY_F11: case KEY_F12: MultiSendMacro (key); bStopPlayerMovement = 0; break; // send taunt macros case KEY_CTRLED + KEY_F12: gameData.trackIR.x = gameData.trackIR.y = 0; break; case KEY_ALTED + KEY_F12: if (!ToggleChaseCam ()) return 0; break; case KEY_SHIFTED + KEY_F9: case KEY_SHIFTED + KEY_F10: case KEY_SHIFTED + KEY_F11: case KEY_SHIFTED + KEY_F12: MultiDefineMacro (key); bStopPlayerMovement = 0; break; // redefine taunt macros case KEY_ALTED + KEY_F2: if (!gameStates.app.bPlayerIsDead && !(IsMultiGame && !IsCoopGame)) { paletteManager.SaveEffectAndReset (); paletteManager.SetEffect (); // get only the effect color back saveGameManager.Save (0, 0, 0, NULL); paletteManager.LoadEffect (); } break; // 0 means not between levels. case KEY_ALTED + KEY_F3: if (!gameStates.app.bPlayerIsDead && (!IsMultiGame || IsCoopGame)) { paletteManager.SaveEffectAndReset (); saveGameManager.Load (1, 0, 0, NULL); if (gameData.app.bGamePaused) DoGamePause (); } break; case KEY_F4 + KEY_SHIFTED: if (!gameStates.app.bD1Mission) DoEscortMenu (); break; case KEY_F4 + KEY_SHIFTED + KEY_ALTED: if (!gameStates.app.bD1Mission) ChangeGuidebotName (); break; case KEY_MINUS + KEY_ALTED: songManager.Prev (); break; case KEY_EQUALS + KEY_ALTED: songManager.Next (); break; //added 8/23/99 by Matt Mueller for hot key res/fullscreen changing, and menu access case KEY_CTRLED + KEY_SHIFTED + KEY_PADDIVIDE: case KEY_ALTED + KEY_CTRLED + KEY_PADDIVIDE: case KEY_ALTED + KEY_SHIFTED + KEY_PADDIVIDE: RenderOptionsMenu (); break; case KEY_CTRLED + KEY_F1: SwitchDisplayMode (-1); break; case KEY_CTRLED + KEY_F2: SwitchDisplayMode (1); break; case KEY_ALTED + KEY_ENTER: case KEY_ALTED + KEY_PADENTER: GrToggleFullScreenGame (); break; default: return bScreenChanged; } //switch (key) } if (bStopPlayerMovement) { StopPlayerMovement (); gameStates.app.bEnterGame = 2; } return bScreenChanged; }
void HandleDemoKey (int key) { if (gameOpts->demo.bRevertFormat && (gameData.demo.nVersion > DEMO_VERSION)) return; switch (key) { case KEY_F3: if (!(GuidedInMainView () || gameStates.render.bChaseCam || gameStates.render.bFreeCam)) cockpit->Toggle (); break; case KEY_SHIFTED + KEY_MINUS: case KEY_MINUS: ShrinkWindow (); break; case KEY_SHIFTED + KEY_EQUALS: case KEY_EQUALS: GrowWindow (); break; case KEY_F2: gameStates.app.bConfigMenu = 1; break; case KEY_F7: gameData.multigame.kills.bShowList = (gameData.multigame.kills.bShowList+1) % ((gameData.demo.nGameMode & GM_TEAM) ? 4 : 3); break; case KEY_CTRLED + KEY_F7: if ((gameStates.render.cockpit.bShowPingStats = !gameStates.render.cockpit.bShowPingStats)) ResetPingStats (); break; case KEY_ESC: SetFunctionMode (FMODE_MENU); break; case KEY_UP: gameData.demo.nVcrState = ND_STATE_PLAYBACK; break; case KEY_DOWN: gameData.demo.nVcrState = ND_STATE_PAUSED; break; case KEY_LEFT: newdemo_single_frameTime = TimerGetFixedSeconds (); gameData.demo.nVcrState = ND_STATE_ONEFRAMEBACKWARD; break; case KEY_RIGHT: newdemo_single_frameTime = TimerGetFixedSeconds (); gameData.demo.nVcrState = ND_STATE_ONEFRAMEFORWARD; break; case KEY_CTRLED + KEY_RIGHT: NDGotoEnd (); break; case KEY_CTRLED + KEY_LEFT: NDGotoBeginning (); break; case KEY_COMMAND + KEY_P: case KEY_CTRLED + KEY_P: case KEY_PAUSE: DoGamePause (); break; case KEY_COMMAND + KEY_SHIFTED + KEY_P: case KEY_PRINT_SCREEN: { int oldState = gameData.demo.nVcrState; gameData.demo.nVcrState = ND_STATE_PRINTSCREEN; //RenderMonoFrame (); gameStates.app.bSaveScreenshot = 1; SaveScreenShot (NULL, 0); gameData.demo.nVcrState = oldState; break; } } }
static void process_event( EventRecord *event) { WindowPtr window; short part_code; Rect size_rect; long new_size; GrafPtr old_port; switch(event->what) { case kHighLevelEvent: AEProcessAppleEvent(event); break; case mouseDown: /* Did we hit one of the floaters? */ part_code= FindWindow(event->where, &window); switch (part_code) { case inSysWindow: break; case inMenuBar: do_menu_command(MenuSelect(event->where)); break; case inContent: if(window != FrontWindow()) SelectWindow(window); click_in_log_window(window,event->where,(event->modifiers & shiftKey) != 0); break; case inDrag: #ifdef OP_PLATFORM_MAC_CARBON_FLAG { Rect tempRect; GetRegionBounds(GetGrayRgn(), &tempRect); DragWindow(window, event->where, &tempRect); } #else DragWindow(window, event->where, &qd.screenBits.bounds); #endif break; case inGrow: #ifdef OP_PLATFORM_MAC_CARBON_FLAG GetRegionBounds(GetGrayRgn(), &size_rect); #else size_rect = qd.screenBits.bounds; #endif InsetRect(&size_rect, 4, 4); new_size= GrowWindow(window, event->where, &size_rect); if(new_size) { /* Resize the window */ SizeWindow(window, LoWord(new_size), HiWord(new_size), true); } break; case inGoAway: if(TrackGoAway(window, event->where)) { /* Close the window... */ handle_close(window); } break; case inZoomIn: case inZoomOut: if(TrackBox(window, event->where, part_code)) { GetPort(&old_port); SetPortWindowPort(window); #ifdef OP_PLATFORM_MAC_CARBON_FLAG { Rect windowBounds; GetWindowPortBounds(window, &windowBounds); EraseRect(&windowBounds); } #else EraseRect(&window->portRect); #endif ZoomWindow(window, part_code, true); SetPort(old_port); } break; } break; case keyDown: case autoKey: if(!process_key(event, event->message&charCodeMask)) { /* Not handled by anyone.. */ SysBeep(-1); } break; case updateEvt: /* Update the window.. */ update_window((WindowPtr)event->message); break; case activateEvt: /* Activate event->message, event->modifiers&activeFlag.. */ break; case osEvt: switch ((event->message>>24) & 0xff) { case suspendResumeMessage: if (event->message&resumeFlag) { /* resume */ #ifdef OP_PLATFORM_MAC_CARBON_FLAG { Cursor arrowCursor; SetCursor(GetQDGlobalsArrow(&arrowCursor)); } #else SetCursor(&qd.arrow); #endif } else { /* suspend */ } break; case mouseMovedMessage: break; } break; } return; }