/* Perform action assigned to given control object */ void DoControlAction ( const Int16 control /* control value of the object */ ) { UInt16 newRecord; Int16 controlID; /* Clear location of find pattern */ ClearFindPatternData(); if ( 0 < control ) { Int16 anchorIndex; UInt16 reference; Int16 paragraphOffset; Int16 byteOffsetInPara; UInt16 image; AnchorMode type; anchorIndex = control - 1; reference = GetVisibleReference( anchorIndex ); paragraphOffset = GetVisibleParagraphOffset( anchorIndex ); byteOffsetInPara = GetVisibleByteOffset( anchorIndex ); image = GetVisibleImage( anchorIndex ); image = GetVisibleImage( anchorIndex ); type = GetVisibleMode( anchorIndex ); SndPlaySystemSound( sndClick ); if ( image != 0 ) { RectangleType bounds; ListType* list; Int16 x; Int16 y; UInt16 prevCoordSys; Int16 selection; bounds = GetVisibleImagePosition( anchorIndex ); list = GetObjectPtr( frmMainImageDialog ); x = ( bounds.extent.x - 60 ) / 2; if ( x < 0 ) x = 0; y = ( bounds.extent.y - 22 ) / 2; if ( y < 0 ) y = 0; x += bounds.topLeft.x; y += bounds.topLeft.y; LstSetPosition( list, x, y ); prevCoordSys = PalmSetCoordinateSystem( STANDARD ); selection = LstPopupList( list ); PalmSetCoordinateSystem( prevCoordSys ); if ( selection == noListSelection ) { return; } else if ( selection == 1 ) { reference = image; } } if ( type == ANCHORMODE_LINK ) { Int16 byteOffset; if ( byteOffsetInPara == 0 ) { byteOffset = NO_OFFSET; } else { byteOffset = ParagraphNumToByteOffset( paragraphOffset ) + byteOffsetInPara; paragraphOffset = NO_OFFSET; } JumpToRecord( reference, paragraphOffset, byteOffset ); } #ifdef SUPPORT_ANNOTATION else if ( type == ANCHORMODE_ANNOTATION ) { DoAnnotate( GetVisibleAnnotationIdentifier( anchorIndex ), 0, 0, 0, 0, 0, NULL ); } #endif return; } if ( control != 0 ) SndPlaySystemSound( sndClick ); controlID = -( control + 1 ); switch ( controlID ) { case HOMECONTROL: DoAutoscrollToggle( AUTOSCROLL_OFF ); ViewRecord( HOME_PAGE_ID, ADD_TO_HISTORY, 0, 0, WRITEMODE_DRAW_CHAR ); SetVisitedLink( HOME_PAGE_ID ); break; case LEFTCONTROL: DoAutoscrollToggle( AUTOSCROLL_OFF ); newRecord = GetHistoryPrev(); if ( newRecord != NO_RECORD ) { ViewRecord( newRecord, FROM_HISTORY, NO_OFFSET, NO_OFFSET, WRITEMODE_DRAW_CHAR ); SetVisitedLink( newRecord ); } else { FrmGotoForm( GetValidForm( frmLibrary ) ); } break; case RIGHTCONTROL: DoAutoscrollToggle( AUTOSCROLL_OFF ); newRecord = GetHistoryNext(); if ( newRecord != NO_RECORD ) { ViewRecord( newRecord, FROM_HISTORY, NO_OFFSET, NO_OFFSET, WRITEMODE_DRAW_CHAR ); SetVisitedLink( newRecord ); } break; case LIBRARYCONTROL: DoAutoscrollToggle( AUTOSCROLL_OFF ); CloseDocument(); FrmGotoForm( GetValidForm( frmLibrary ) ); break; case FINDCONTROL: DoAutoscrollToggle( AUTOSCROLL_OFF ); FrmPopupForm( frmSearch ); break; case AGAINCONTROL: DoAutoscrollToggle( AUTOSCROLL_OFF ); SearchAgain(); break; case MENUCONTROL: DoAutoscrollToggle( AUTOSCROLL_OFF ); EvtEnqueueKey( menuChr, 0, commandKeyMask ); break; case OFFSETCONTROL: { UInt16 prevCoordSys; Int16 selection; DoAutoscrollToggle( AUTOSCROLL_OFF ); prevCoordSys = PalmSetCoordinateSystem( STANDARD ); selection = LstPopupList( GetObjectPtr( frmMainPercentList ) ); PalmSetCoordinateSystem( prevCoordSys ); if ( selection != noListSelection ) GotoLocation( selection ); break; } case BOOKMARKCONTROL: { UInt16 prevCoordSys; ListType* list; Int16 selection; UInt16 numOfBookmarks; DoAutoscrollToggle( AUTOSCROLL_OFF ); prevCoordSys = PalmSetCoordinateSystem( STANDARD ); list = GetObjectPtr( frmMainBookmarkList ); numOfBookmarks = CreatePopupBookmarkList( list ); if ( numOfBookmarks == 0 ) { PalmSetCoordinateSystem( prevCoordSys ); break; } selection = LstPopupList( GetObjectPtr( frmMainBookmarkList ) ); if ( 0 <= selection ) { BookmarkListEntry e; MemMove( &e, GetBookmarkListEntry( selection ), sizeof( BookmarkListEntry ) ); ReleaseBookmarkList(); PalmSetCoordinateSystem( prevCoordSys ); switch ( e.kind ) { case BOOKMARK_ADD_BOOKMARK: DoAddBookmark(); break; case BOOKMARK_EDIT_BOOKMARK: FrmPopupForm( frmBookmarks ); break; #ifdef SUPPORT_ANNOTATION case BOOKMARK_ADD_ANNOTATION: isSelectWordTapMode = true; selectedWordAction = SELECT_WORD_ANNOTATE; ShowSelectWordTapIcon(); break; #endif case BOOKMARK_BOOKMARK: case BOOKMARK_ANNOTATION: SendBookmarkGoToEvent( &e, false ); break; case BOOKMARK_EXT_BOOKMARK: GoToExtBookmark( e.recordNum ); break; case BOOKMARK_INVALID: break; } } else { ReleaseBookmarkList(); PalmSetCoordinateSystem( prevCoordSys ); } break; } case AUTOSCROLLSTARTCONTROL: case AUTOSCROLLSTOPCONTROL: DoAutoscrollToggle( AUTOSCROLL_TOGGLE ); break; case AUTOSCROLLINCRCONTROL: DoAutoscrollIncr(); break; case AUTOSCROLLDECRCONTROL: DoAutoscrollDecr(); break; case COPYTOMEMOCONTROL: DoHardcopy(); break; #ifdef SUPPORT_WORD_LOOKUP case SELECTEDWORDCONTROL: { EventType newEvent; MemSet( &newEvent, sizeof( newEvent ), 0 ); newEvent.eType = pluckerSelectedWordEvent; newEvent.data.generic.datum[ 0 ] = selectedWordAction; EvtAddEventToQueue( &newEvent ); break; } #endif default: break; } }
/* Perform action for specified select type */ void DoSelectTypeAction ( SelectType selection /* selection type */ ) { if ( IsMainFormWinActive() || IsFullscreenformActive() || FrmGetActiveFormID() == frmLibrary ) { if ( IsMainFormWinActive() && selection != SELECT_TOGGLE_AUTOSCROLL && selection != SELECT_INCREASE_AUTOSCROLL && selection != SELECT_DECREASE_AUTOSCROLL && selection != SELECT_FULL_PAGE_UP && selection != SELECT_FULL_PAGE_DOWN && selection != SELECT_HALF_PAGE_UP && selection != SELECT_HALF_PAGE_DOWN && selection != SELECT_ONE_LINE_UP && selection != SELECT_ONE_LINE_DOWN ) { DoAutoscrollToggle( AUTOSCROLL_OFF ); } switch ( selection ) { case SELECT_NONE: break; #ifdef SUPPORT_WORD_LOOKUP #ifdef SUPPORT_PPI case SELECT_WORD_LOOKUP_PPI: isSelectWordTapMode = ! isSelectWordTapMode; selectedWordAction = SELECT_WORD_PPI; ShowSelectWordTapIcon(); break; #endif #ifdef SUPPORT_ANNOTATION case SELECT_WORD_LOOKUP_ANNOTATE: isSelectWordTapMode = ! isSelectWordTapMode; selectedWordAction = SELECT_WORD_ANNOTATE; ShowSelectWordTapIcon(); break; #endif case SELECT_WORD_LOOKUP_SEARCH_FORM: isSelectWordTapMode = ! isSelectWordTapMode; selectedWordAction = SELECT_WORD_SEARCH_FORM; ShowSelectWordTapIcon(); break; case SELECT_WORD_LOOKUP_TO_CLIPBOARD: isSelectWordTapMode = ! isSelectWordTapMode; selectedWordAction = SELECT_WORD_TO_CLIPBOARD; ShowSelectWordTapIcon(); break; #endif case SELECT_SAVE_POSITION: AddToHistory( GetCurrentRecordId() ); break; case SELECT_BRIGHTNESS_ADJUST: EmitKey( vchrBrightness, commandKeyMask ); break; case SELECT_TOGGLE_BACKLIGHT: EmitKey( vchrBacklight, commandKeyMask ); break; case SELECT_CONTRAST_ADJUST: EmitKey( vchrContrast, commandKeyMask ); break; case SELECT_ONE_LINE_UP: DoPageMove( GetDefaultMainStyleHeight() ); break; case SELECT_ONE_LINE_DOWN: DoPageMove( -GetDefaultMainStyleHeight() ); break; case SELECT_FULL_PAGE_UP: if ( Prefs()->autoscrollEnabled && Prefs()->autoscrollDir == AUTOSCROLL_UP ) DoAutoscrollIncr(); else if ( Prefs()->autoscrollEnabled ) DoAutoscrollDecr(); else if ( Prefs()->pageControlsLink && OnFirstScreen() && NO_RECORD == GetSequentialRecordId( DIRECTION_UP ) ) GoToFirstAnchor(); else DoPageMove( RotGetScrollValue() ); break; case SELECT_HALF_PAGE_UP: if ( Prefs()->autoscrollEnabled && Prefs()->autoscrollDir == AUTOSCROLL_UP ) DoAutoscrollIncr(); else if ( Prefs()->autoscrollEnabled ) DoAutoscrollDecr(); else if ( Prefs()->pageControlsLink && OnFirstScreen() && NO_RECORD == GetSequentialRecordId( DIRECTION_UP ) ) GoToFirstAnchor(); else DoPageMove( RotGetScrollValue() / 2 ); break; case SELECT_FULL_PAGE_DOWN: if ( Prefs()->autoscrollEnabled && Prefs()->autoscrollDir == AUTOSCROLL_UP ) DoAutoscrollDecr(); else if ( Prefs()->autoscrollEnabled ) DoAutoscrollIncr(); else if ( Prefs()->pageControlsLink && OnLastScreen() ) GoToLastAnchor(); else DoPageMove( -RotGetScrollValue() ); break; case SELECT_HALF_PAGE_DOWN: if ( Prefs()->autoscrollEnabled && Prefs()->autoscrollDir == AUTOSCROLL_UP ) DoAutoscrollDecr(); else if ( Prefs()->autoscrollEnabled ) DoAutoscrollIncr(); else if ( Prefs()->pageControlsLink && OnLastScreen() ) GoToLastAnchor(); else DoPageMove( -RotGetScrollValue() / 2 ); break; case SELECT_GO_BACK: if ( IsFullscreenformActive() ) FsDoControlAction( -( LEFTCONTROL + 1 ) ); else DoControlAction( -( LEFTCONTROL + 1 ) ); break; case SELECT_GO_FORWARD: if ( IsFullscreenformActive() ) FsDoControlAction( -( RIGHTCONTROL + 1 ) ); else DoControlAction( -( RIGHTCONTROL + 1 ) ); break; case SELECT_GO_HOME: if ( IsFullscreenformActive() ) FsDoControlAction( -( HOMECONTROL + 1 ) ); else DoControlAction( -( HOMECONTROL + 1 ) ); break; case SELECT_GO_TO_TOP: if ( IsFullscreenformActive() ) FsAdjustVerticalOffset( FULLSCREEN_TOP ); else GotoLocation( TOP ); break; case SELECT_GO_TO_BOTTOM: if ( IsFullscreenformActive() ) FsAdjustVerticalOffset( FULLSCREEN_BOTTOM ); else GotoLocation( BOTTOM ); break; case SELECT_FIND: FrmPopupForm( frmSearch ); break; case SELECT_FIND_AGAIN: SearchAgain(); break; case SELECT_ADD_BOOKMARK: DoAddBookmark(); break; case SELECT_VIEW_BOOKMARKS: FrmPopupForm( frmBookmarks ); break; case SELECT_OPEN_LIBRARY: CloseDocument(); FrmGotoForm( GetValidForm( frmLibrary ) ); break; case SELECT_DETAILS: FrmPopupForm( frmDetails ); break; case SELECT_PREFS: FrmGotoForm( frmPrefs ); break; case SELECT_BUTTON_ACTION: PrefsButtonShowFirst(); FrmGotoForm( frmPrefs ); break; case SELECT_TAP_ACTION: PrefsControlShowFirst(); FrmGotoForm( frmPrefs ); break; case SELECT_GESTURE_ACTION: PrefsGestureShowFirst(); FrmGotoForm( frmPrefs ); break; case SELECT_TOGGLE_AUTOSCROLL: DoAutoscrollToggle( AUTOSCROLL_TOGGLE ); break; case SELECT_INCREASE_AUTOSCROLL: DoAutoscrollIncr(); break; case SELECT_DECREASE_AUTOSCROLL: DoAutoscrollDecr(); break; case SELECT_NEXT_ANCHOR: HandleNextControl(); break; case SELECT_PREV_ANCHOR: HandlePrevControl(); break; case SELECT_GO_TO_LINK: if ( IsFullscreenformActive() ) { if ( 0 < actualAnchor ) FsDoControlAction( actualAnchor ); } else { DoControlAction( actualAnchor ); } break; case SELECT_COPY_TO_MEMO: DoHardcopy(); break; case SELECT_DELETE_DOCUMENT: DoDeleteDocument(); break; case SELECT_FONT: PrefsFontShowFirst(); FrmGotoForm( frmPrefs ); break; case SELECT_COMMAND_STROKE: EmitKey( vchrCommand, commandKeyMask ); break; case SELECT_MENU: EmitKey( vchrMenu, commandKeyMask ); break; #ifdef HAVE_ROTATE case SELECT_ROTATE_LEFT: { RotateType angle; angle = Prefs()->rotate; switch ( angle ) { case ROTATE_ZERO: angle = ROTATE_PLUS90; break; case ROTATE_PLUS90: angle = ROTATE_MINUS90; break; case ROTATE_MINUS90: angle = ROTATE_ZERO; } if ( Prefs()->individualDocumentLayout ) GetHistoryPtr()->rotate = angle; else Prefs()->rotate = angle; FrmUpdateForm( Prefs()->lastForm, frmRedrawUpdateCode ); break; } case SELECT_ROTATE_RIGHT: { RotateType angle; angle = Prefs()->rotate; switch ( angle ) { case ROTATE_PLUS90: angle = ROTATE_ZERO; break; case ROTATE_MINUS90: angle = ROTATE_PLUS90; break; case ROTATE_ZERO: angle = ROTATE_MINUS90; break; } if ( Prefs()->individualDocumentLayout ) GetHistoryPtr()->rotate = angle; else Prefs()->rotate = angle; FrmUpdateForm( Prefs()->lastForm, frmRedrawUpdateCode ); break; } #endif case SELECT_TOGGLE_TOOLBAR: if ( ! IsFormMain( Prefs()->lastForm ) ) break; if ( Prefs()->toolbar != TOOLBAR_NONE ) { Prefs()->savedToolbar = Prefs()->toolbar; Prefs()->toolbar = TOOLBAR_NONE; } else { if ( Prefs()->savedToolbar == TOOLBAR_NONE ) Prefs()->toolbar = TOOLBAR_TOP; else Prefs()->toolbar = Prefs()->savedToolbar; } #ifdef HAVE_SILKSCREEN if ( GetDIAState() == DIA_STATE_NO_STATUS_BAR && Prefs()->toolbar != TOOLBAR_NONE ) SetDIAState( Prefs()->savedSilkscreen ); #endif FrmUpdateForm( Prefs()->lastForm, frmRedrawUpdateCode ); break; case SELECT_TOGGLE_FULLSCREEN: { UInt16 newToolbarState; UInt16 newScrollbarState; DIAStateType newDIAState; if ( Prefs()->toolbar == TOOLBAR_NONE && Prefs()->scrollbar == SCROLLBAR_NONE ) { /* From fullscreen to non-fullscreen */ if ( Prefs()->savedToolbar == TOOLBAR_NONE && Prefs()->savedScrollbar == SCROLLBAR_NONE ) { Prefs()->savedToolbar = TOOLBAR_TOP; Prefs()->savedScrollbar = SCROLLBAR_RIGHT; } if ( Prefs()->savedSilkscreen == DIA_STATE_NO_STATUS_BAR ) { Prefs()->savedSilkscreen = DIA_STATE_MIN; } newToolbarState = Prefs()->savedToolbar; newScrollbarState = Prefs()->savedScrollbar; newDIAState = Prefs()->savedSilkscreen; } else { /* From non-fullscreen to fullscreen */ newToolbarState = TOOLBAR_NONE; newScrollbarState = SCROLLBAR_NONE; newDIAState = DIA_STATE_NO_STATUS_BAR; } Prefs()->savedToolbar = Prefs()->toolbar; Prefs()->savedScrollbar = Prefs()->scrollbar; Prefs()->savedSilkscreen = GetDIAState(); Prefs()->toolbar = newToolbarState; Prefs()->scrollbar = newScrollbarState; SetDIAState( newDIAState ); FrmUpdateForm( Prefs()->lastForm, frmRedrawUpdateCode ); break; } default: break; } } }
void AI::GlutIdle() { static int frame = 0; static int lastTime = glutGet(GLUT_ELAPSED_TIME); ++frame; int time = glutGet(GLUT_ELAPSED_TIME); float dt = (time - lastTime) / 1000.f; lastTime = time; static int lastFPSTime = glutGet(GLUT_ELAPSED_TIME); if (time - lastFPSTime > 1000) { m_fps = frame * 1000.f / (time - lastFPSTime); lastFPSTime = time; frame = 0; } for (std::vector<GameObject *>::iterator it = m_goList.begin(); it != m_goList.end(); ++it) { GameObject *go = (GameObject *)*it; if (go->active) { go->pos += go->vel * dt * m_speed; GameObject *nearest = NULL; for (std::vector<GameObject *>::iterator it2 = m_goList.begin(); it2 != m_goList.end(); ++it2) { GameObject *other = (GameObject *)*it2; if (other->active) { } } //Code to handle out of bound game objects switch (go->type) { case GameObject::GO_BULLET: break; case GameObject::GO_ROBBER: break; case GameObject::GO_POLICE: switch (go->CurrentState) { case GameObject::STATES::PATROLLING: if (go->pos.y >= 70) { go->vel = Vector3(15, 0, 0); } if (go->pos.x >= 100) { go->vel = Vector3(0, -15, 0); } if (go->pos.y <= 40) { go->vel = Vector3(-15, 0, 0); } if (go->pos.x <= 79) { go->vel = Vector3(0, 15, 0); } if (Alarm) go->CurrentState = GameObject::STATES::MOVING; break; case GameObject::STATES::MOVING: GotoLocation(Vector3(50,50,0),go,15); go->color.Set(1, 0, 0); break; } break; } } } }