void BtnIMPVoicesPreviousCallback( GUI_BUTTON *btn, INT32 reason ) { // btn callback for IMP attrbite begin button if ( !(btn->uiFlags & BUTTON_ENABLED) ) return; if ( reason & MSYS_CALLBACK_REASON_LBUTTON_DWN ) { btn->uiFlags |= (BUTTON_CLICKED_ON); } else if ( reason & MSYS_CALLBACK_REASON_LBUTTON_UP ) { if ( btn->uiFlags & BUTTON_CLICKED_ON ) { btn->uiFlags &= ~(BUTTON_CLICKED_ON); // previous voice, please!!! DecrementVoice( ); // play voice if ( !SoundIsPlaying( uiVocVoiceSound ) ) { uiVocVoiceSound = PlayVoice( ); } else { SoundStop( uiVocVoiceSound ); uiVocVoiceSound = PlayVoice( ); } fReDrawVoicesScreenFlag = TRUE; } } }
void CWeaponGravityGun::EffectDestroy( void ) { m_active = false; SoundStop(); DetachObject(); }
PyObject* LMF_SoundStop (PyObject *self, PyObject *args){ int iSoundID; if (!PyArg_ParseTuple(args, "i", &iSoundID)) { ParsePyTupleError( __func__, __LINE__ ); return nullptr; } SoundStop(iSoundID); Py_RETURN_NONE; }
void EffectsOff(void) { if(EffectInUsePriory && EffectInUse) { for(int i = 0; i < 16; i++) SoundStop(i); EffectInUse = 0; lastSoundFlag = 0; //SoundVolumeCD = -1; } }
void EffectsOnOff(void) { if(EffectInUsePriory) { EffectInUse = 1 - EffectInUse; if(!EffectInUse) { for(int i = 0; i < 16; i++) SoundStop(i); lastSoundFlag = 0; } } }
void CWeaponGravityGun::EffectDestroy( void ) { #ifdef CLIENT_DLL gHUD.m_bSkipClear = false; #endif m_active = false; SoundStop(); DetachObject(); }
void CWeaponGravityGun::SoundUpdate( void ) { int newState; if ( m_hObject ) newState = SS_LOCKEDON; else newState = SS_SCANNING; if ( newState != m_soundState ) { SoundStop(); m_soundState = newState; SoundStart(); } switch( m_soundState ) { case SS_SCANNING: break; case SS_LOCKEDON: { CPASAttenuationFilter filter( this ); float height = m_hObject->GetAbsOrigin().z - m_originalObjectPosition.z; // go from pitch 90 to 150 over a height of 500 int pitch = 90 + (int)UTIL_LineFraction( height, 0, 500, 60 ); assert(m_sndLockedOn!=NULL); if ( m_sndLockedOn != NULL ) { (CSoundEnvelopeController::GetController()).SoundChangePitch( m_sndLockedOn, pitch, 0.0f ); } // attenutate the movement sounds over 200 units of movement float distance = UTIL_LineFraction( m_movementLength, 0, 200, 1.0 ); // blend the "mass" sounds between 50 and 500 kg IPhysicsObject *pPhys = GetPhysObjFromPhysicsBone( m_hObject, m_physicsBone ); if ( pPhys == NULL ) { // we no longer exist! break; } float fade = UTIL_LineFraction( pPhys->GetMass(), 50, 500, 1.0 ); (CSoundEnvelopeController::GetController()).SoundChangeVolume( m_sndLightObject, fade * distance, 0.0f ); (CSoundEnvelopeController::GetController()).SoundChangeVolume( m_sndHeavyObject, (1.0 - fade) * distance, 0.0f ); } break; } }
//////////////////////////////////////////////////////////// /// Stop all sounds from buffer //////////////////////////////////////////////////////////// void SoundBufferStop() { Int32 i = 0; for (i = 0; i < SOUND_BUFFER_SIZE; i++) { if (SoundData[i].Buffer != 0) { // Stop sound SoundStop(&SoundData[i]); } } }
void SoundFinit(void) { int i; if(XSoundInitFlag){ for(i = 0; i < MAX_CHANNELS; ++i) SoundStop(i); /* SDL_Mixer version Mix_CloseAudio();*/ delete clunk_object; context.deinit(); XSoundInitFlag = 0; } }
void StartEFFECT(EFFECT_VALUE EffectValue,int loop,int pan) { if(!EffectInUse || !SndData[EffectValue].lpDSB) return; int flag = SndData[EffectValue].flags; if(loop) flag |= DS_LOOPING; if(SndData[EffectValue].channel != LOCAL_CHANNEL) SetVolume(SndData[EffectValue].lpDSB,soundVolumecurrent); else SetVolume(SndData[EffectValue].lpDSB,soundVolume); if(EngineNoise && EffectValue == EFF_DRIVING) SoundStop(SndData[EffectValue].channel); if (SoundVolumePanning) SoundPan(SndData[EffectValue].channel, -pan*8); //if (SndData[EffectValue].status & ESCAVE_SOUND&&EffectValue!=EFF_NOISE) // std::cout<<"StartEFFECT:"<<SndData[EffectValue].fname<<" int:"<<(int)EffectValue<<std::endl; SoundPlay(SndData[EffectValue].lpDSB,SndData[EffectValue].channel,SndData[EffectValue].priority,SndData[EffectValue].cropos,flag); }
static void AnimateUndo( LPRECT lpUndoRect ) /***********************************************************************/ { RECT rect; STRING szString; ITEMID id1, id2; int iHeight, iWidth, x1, x2, y; #define DXANIMATION 71 #define DYANIMATION 76 SoundStartID( IDC_AMBULANCE1, YES/*bLoop*/, NULL/*hInstance*/ ); GetClientRect( lpImage->hWnd, &rect ); iHeight = RectHeight( &rect ); iWidth = RectWidth( &rect ); File2DispRect( lpUndoRect, &rect ); x1 = (rect.left + rect.right) / 2; if ( x1 < iWidth - x1 ) { // closer to the left; come in from the left x1 = -DXANIMATION; x2 = rect.right; id1 = IDC_AMBULANCE2; id2 = IDC_AMBULANCE1; } else { // closer to the right; come in from the right x1 = iWidth - 1; x2 = rect.left - DXANIMATION; id1 = IDC_AMBULANCE1; id2 = IDC_AMBULANCE2; } y = (rect.top + rect.bottom - DYANIMATION) / 2; y = bound( y, 0, iHeight - DYANIMATION ); wsprintf( szString, "SETSPEED 35\rJUMP %d,%d\rMOVE %d,%d\r", x1, y, x2, y ); AnimateDibID( lpImage->hWnd, NULL/*&rect*/, hInstAstral, id1, NULL, szString ); UpdateImage( lpUndoRect, YES ); AstralUpdateWindow( lpImage->hWnd ); wsprintf( szString, "SETSPEED 35\rJUMP %d,%d\rMOVE %d,%d\r", x2, y, x1, y ); AnimateDibID( lpImage->hWnd, NULL/*&rect*/, hInstAstral, id2, NULL, szString ); SoundStop(); }
void LoadMotorSound(void) { XBuffer buf; XStream ff(0); for(int i = 0; i < 3; i++) { buf.init(); if(EngineNoise) buf < "resource/sound/effects/" < "/" < SndData[i].fname < ".wav"; if(ff.open(buf.GetBuf(),XS_IN)) { ff.close(); if (SndData[i].lpDSB) { SoundStop(SndData[i].channel); SoundRelease(SndData[i].lpDSB); SndData[i].lpDSB = NULL; } SoundLoad(buf.GetBuf(),&SndData[i].lpDSB); } } // end for i }
//////////////////////////////////////////////////////////// /// Destroy all sound data and buffer //////////////////////////////////////////////////////////// void SoundBufferDestroy() { Int32 i = 0; for (i = 0; i < SOUND_BUFFER_SIZE; i++) { if (SoundData[i].Buffer != 0) { // Stop sound SoundStop(&SoundData[i]); // Delete source ALCheck(alDeleteSources(1, &SoundData[i].Source)); // Delete buffer ALCheck(alDeleteBuffers(1, &SoundData[i].Buffer)); // Free data Delete(SoundData[i].Samples); } } }
void CWeaponGravityGun::SoundUpdate( void ) { int newState; if ( m_hObject ) newState = SS_LOCKEDON; else newState = SS_SCANNING; if ( newState != m_soundState ) { SoundStop(); m_soundState = newState; SoundStart(); } switch( m_soundState ) { case SS_SCANNING: break; case SS_LOCKEDON: { CPASAttenuationFilter filter( GetOwner() ); filter.MakeReliable(); float height = m_hObject->GetAbsOrigin().z - m_originalObjectPosition.z; // go from pitch 90 to 150 over a height of 500 int pitch = 90 + (int)UTIL_LineFraction( height, 0, 500, 60 ); CSoundParameters params; if ( GetParametersForSound( "Weapon_Physgun.LockedOn", params, NULL ) ) { EmitSound_t ep( params ); ep.m_nFlags = SND_CHANGE_VOL | SND_CHANGE_PITCH; ep.m_nPitch = pitch; EmitSound( filter, GetOwner()->entindex(), ep ); } // attenutate the movement sounds over 200 units of movement float distance = UTIL_LineFraction( m_movementLength, 0, 200, 1.0 ); // blend the "mass" sounds between 50 and 500 kg IPhysicsObject *pPhys = m_hObject->VPhysicsGetObject(); float fade = UTIL_LineFraction( pPhys->GetMass(), 50, 500, 1.0 ); if ( GetParametersForSound( "Weapon_Physgun.LightObject", params, NULL ) ) { EmitSound_t ep( params ); ep.m_nFlags = SND_CHANGE_VOL; ep.m_flVolume = fade * distance; EmitSound( filter, GetOwner()->entindex(), ep ); } if ( GetParametersForSound( "Weapon_Physgun.HeavyObject", params, NULL ) ) { EmitSound_t ep( params ); ep.m_nFlags = SND_CHANGE_VOL; ep.m_flVolume = (1.0 - fade) * distance; EmitSound( filter, GetOwner()->entindex(), ep ); } } break; } }
void CWeaponGravityGun::SoundDestroy( void ) { SoundStop(); }
void SoundPlay(void *lpDSB, int channel, int priority, int cropos, int flags) { if(XSoundInitFlag){ clunk::Sample *source = (clunk::Sample *)lpDSB; //if (channel==2) // std::cout<<"SoundPlay:"<<source->name<<" channel:"<<channel<<" cropos:"<<cropos<<" pr1:"<<channels[channel].priority<<" pr2:"<<priority<<" playing:"<<clunk_object->playing(source->name)<<std::endl; if (cropos == 255) { if (!clunk_object->playing(source->name)||channels[channel].priority>priority) { SoundStop(channel); clunk_object->play(source->name, new clunk::Source(source, false, clunk::v3<float>(), 1, 1, channels[channel].pan*0.0001)); if(flags & DS_LOOPING){ clunk_object->set_loop(source->name, true); } } else { return; } } else { if (channels[channel].sound) { if (clunk_object->playing(channels[channel].sound->name)&&channels[channel].priority<priority) { return; } SoundStop(channel); } clunk_object->play(source->name, new clunk::Source(source, false, clunk::v3<float>(), 1, 1, channels[channel].pan*0.0001)); if(flags & DS_LOOPING){ clunk_object->set_loop(source->name, true); } } if(flags & DS_QUEUE){ std::cout<<"DS_QUEUE!!!"<<std::endl; } if(flags & DS_STREAM){ std::cout<<"DS_STREAM!!!"<<std::endl; } channels[channel].priority = priority; channels[channel].flags = flags; channels[channel].cropos = cropos; channels[channel].sound = source; /* //Other sound logic for FUTURE //channels[channel].priority = priority; //channels[channel].sound = (Mix_Chunk *)lpDSB; //channels[channel].flags = flags; //Mix_PlayChannel(-1, channels[channel].sound, 0); if(channels[channel].sound) { if(channels[channel].priority < priority) { //ErrH.Log("D1"); SoundStop(channel); channels[channel].priority = priority; channels[channel].flags = flags; //SDL_Mixer version //channels[channel].sound = (Mix_Chunk *)lpDSB; //Mix_PlayChannel(channel, channels[channel].sound, 0); channels[channel].sound = (clunk::Sample *)lpDSB; clunk_object->play(channels[channel].sound->name, new clunk::Source(channels[channel].sound, false)); if(flags & DS_LOOPING){ clunk_object->set_loop(channels[channel].sound->name, true); } } else { if(channel<20) SoundPlay(lpDSB, channel+10, priority, cropos, flags); } } else { //ErrH.Log("D2"); channels[channel].priority = priority; channels[channel].flags = flags; //SDL_Mixer version //channels[channel].sound = (Mix_Chunk *)lpDSB; //Mix_PlayChannel(channel, channels[channel].sound, 0); channels[channel].sound = (clunk::Sample *)lpDSB; clunk_object->play(channels[channel].sound->name, new clunk::Source(channels[channel].sound, false)); if(flags & DS_LOOPING){ clunk_object->set_loop(channels[channel].sound->name, true); } }*/ } }
func Switch() { var phase = GetPhase(); if(open) { if(GetAction() == "Open") { open = 0; SetAction("Closes"); if(update) { SoundStart(); Sound("iris_atlantis_close"); } else Sound("luke1"); } if(GetAction() == "Opens") { open = 0; SetAction("Closes"); if(update) { SoundStart(); Sound("iris_atlantis_close"); } else Sound("luke1"); SetPhase(20-phase); } if(GetAction() == "Closes") { return(1); } if(GetAction() == "Close") { return(1); } } else { if(GetAction() == "Open") { return(1); } if(GetAction() == "Opens") { return(1); } if(GetAction() == "Closes") { open = 1; SetAction("Opens"); if(update) { SoundStop(); Sound("iris_atlantis_open"); } else Sound("luke1"); SetPhase(20 - phase); } if(GetAction() == "Close") { open = 1; SetAction("Opens"); if(update) { SoundStop(); Sound("iris_atlantis_open"); } else Sound("luke1"); } } return(1); }
void StopEFFECT(EFFECT_VALUE EffectValue) { if(!EffectInUse) return; SoundStop(SndData[EffectValue].channel); if(EngineNoise && EffectValue == EFF_DRIVING && SndData[EFF_STOP].lpDSB) StartEFFECT(EFF_STOP); }
long DoCommand( HWND hWindow, WPARAM wParam, LPARAM lParam ) /***********************************************************************/ { FNAME szFileName; LPFRAME lpFrame; LPOBJECT lpObject, lpBase; RECT rect, rMask, rTemp, rAll; HWND hWnd; STRING szString; int i, idFileType, x, y, dx, dy; BOOL fDoZoom, bPrint, fHasZoom; LPSTR lpszCmdLine; HGLOBAL hMem; ITEMID idDataType; DWORD dwReturn; int NewShape; UINT wID; SoundStartID( wParam, NO/*bLoop*/, NULL/*hInstance*/ ); /* WIN16: ID = wParam ctrl handle = LOWORD(lParam) notify code = HIWORD(lParam) WIN32: ID = LOWORD(wParam) ctrl handle = lParam notify code = HIWORD(wParam) */ #ifdef WIN32 wID = LOWORD(wParam); #else wID = wParam; #endif switch (wID) { case IDM_EXIT: DeactivateTool(); PostMessage( hWndAstral, WM_CLOSE, 0, 0L); Delay (750); break; case IDM_CLOSE: DeactivateTool(); /* Check to see if the image needs to be saved */ if ( !ConfirmClose(NO,NO) ) break; CloseImage( NO, lpImage ); // Close the active image break; case IDM_ABOUT: /* Bring up the modal 'About' dialog box */ AstralDlg( NO|2, hInstAstral, hWindow, IDD_ABOUT, DlgAboutProc); break; case IDM_NEXTPAGE: if ( !lpImage ) break; DeactivateTool(); SendMessage( lpImage->hWnd, WM_SYSCOMMAND, SC_NEXTWINDOW, 0L ); break; case IDM_NEW: DeactivateTool(); SoundStartResource( "magic01", NO, NULL ); AstralCursor( IDC_WAIT ); New( Control.NewWidth, Control.NewHeight, Control.NewResolution, Control.NewDepth ); AstralCursor( NULL ); break; case IDM_OPEN: DeactivateTool(); /* Bring up the modal 'File Open' box */ if ( !(dwReturn = DoOpenDlg( hWindow, IDD_OPEN, Save.FileType, szFileName, NO )) ) break; idFileType = LOWORD( dwReturn ); Save.FileType = idFileType; PutDefaultInt( "FileType", idFileType - IDN_TIFF ); AstralImageLoad( idFileType, szFileName, MAYBE, YES ); break; case IDM_ALTOPEN: DeactivateTool(); // Command line sent from a second instance prior to it closing /* If the caller passed in a file name, try to load it or print it */ if ( !(lpszCmdLine = (LPSTR)lParam) ) break; HandleCommandLine( hWindow, lpszCmdLine, &bPrint ); break; case IDM_SAVE: DeactivateTool(); HandleSaveCommand(hWindow, wID, YES); break; case IDM_SAVEAS: DeactivateTool(); HandleSaveCommand(hWindow, wID, YES); break; case IDM_SAVESPECIAL: DeactivateTool(); HandleSaveCommand(hWindow, wID, YES); break; case IDM_SAVEWALLPAPER: DeactivateTool(); SaveWallpaper( "CRAYOLA", NO/*fTiled*/ ); break; case IDM_REVERT: if ( !lpImage ) break; DeactivateTool(); if ( lpImage->fUntitled ) // If the picture doesn't have a name, get out break; if ( ImgChanged(lpImage) ) { /* Check to see if its OK to trash changes */ if ( AstralOKCancel(IDS_OKTOREVERT, (LPSTR)lpImage->CurFile) == IDCANCEL ) break; } lstrcpy( szFileName, lpImage->CurFile ); idFileType = lpImage->FileType; fDoZoom = IsZoomed(lpImage->hWnd); fHasZoom = Window.fHasZoom; CloseImage( NO, lpImage ); // Close the active image if ( !AstralImageLoad( idFileType, szFileName, fDoZoom, YES ) ) break; break; case IDM_RECALLIMAGE0: case IDM_RECALLIMAGE1: case IDM_RECALLIMAGE2: case IDM_RECALLIMAGE3: case IDM_RECALLIMAGE4: case IDM_RECALLIMAGE5: case IDM_RECALLIMAGE6: case IDM_RECALLIMAGE7: case IDM_RECALLIMAGE8: case IDM_RECALLIMAGE9: DeactivateTool(); GetMenuString( GetMenu(hWindow), wID, szFileName, sizeof(szFileName), MF_BYCOMMAND ); i = 0; while ( szFileName[i] && szFileName[i] != ' ' ) i++; // Skip over the numeric id in the string (3. junk.tif) lstrcpy(szString, &szFileName[i+1]); GetRecallFileName(szString); AstralImageLoad( NULL, szString, MAYBE, YES ); break; case IDM_PRINT: if ( !lpImage ) break; DeactivateTool(); AstralCursor( IDC_WAIT ); DoPrintSizeInits(); SoundStartResource( "print", YES, NULL ); PrintFile( hWindow, filename(lpImage->CurFile), YES, lpImage, NULL ); SoundStop(); AstralCursor( NULL ); break; case IDM_PRINTSETUP: /* Bring up the setup dialog box for the active printer */ AstralDlg( NO|2, hInstAstral, hWindow, IDD_PRINTSETUP, DlgPrintSetupProc); break; case IDC_SOUND: SoundToggle(); break; case IDM_UNDO: if ( !lpImage ) break; DeactivateTool(); ImgEditUndo(lpImage, YES, NO); break; case IDM_CUT: case IDM_COPY: if ( !lpImage ) break; DeactivateTool(); // Create the clipboard files from the image ProgressBegin(1, IDS_PROGCOPY); if ( !ImgWriteClipOut( lpImage, NULL, NULL, &rMask, lpImage->DataType ) ) { ProgressEnd(); Message(IDS_EMEMALLOC); break; } ProgressEnd(); OpenClipboard(hWindow); EmptyClipboard(); // Passing a NULL data handle in SetClipboardData() means that // the data will be requested in a WM_RENDERFORMAT message hMem = ConstructObject( lpImage, IsRectEmpty(&rMask)? (LPRECT)NULL : (LPRECT)&rMask ); if ( pOLE ) { // Any data put on before Native will become staticly copied SetClipboardData( pOLE->cfNative, NULL ); SetClipboardData( pOLE->cfOwnerLink, hMem ); } SetClipboardData( CF_DIB, NULL ); if ( Control.DoPicture ) SetClipboardData( CF_METAFILEPICT, NULL ); if ( Control.DoBitmap ) SetClipboardData( CF_BITMAP, NULL ); SetClipboardData( CF_PALETTE, NULL ); SetClipboardData( Control.cfImage, NULL ); if ( pOLE && wID == IDM_COPY && !lpImage->fUntitled ) { // ObjectLink is retrieved during a Paste Link... SetClipboardData( pOLE->cfObjectLink, hMem ); } CloseClipboard(); if ( wID == IDM_COPY ) break; // else fall through to IDM_DELETE case IDM_DELETE: if ( !lpImage ) break; { COLORINFO ColorInfo; DeactivateTool(); ColorInfo.gray = 255; SetColorInfo( &ColorInfo, &ColorInfo, CS_GRAY ); TintFill( lpImage, &ColorInfo, 255, MM_NORMAL, wID == IDM_CUT ? IDS_UNDOCUT : IDS_UNDODELETE ); } break; case IDM_PASTE: if ( !lpImage ) break; case IDM_PASTEASNEW: if ( !OpenClipboard(hWndAstral) ) { Message( IDS_ECLIPOPEN ); break; } if ( !IsClipboardFormatAvailable(CF_DIB) && !IsClipboardFormatAvailable(CF_BITMAP) && !IsClipboardFormatAvailable(Control.cfImage) ) { Message( IDS_ECLIPOPEN ); CloseClipboard(); break; } CloseClipboard(); DeactivateTool(); // First put clipboard contents into a file(s) AstralCursor(IDC_WAIT); if ( !PasteFromClipboard( hWindow, (wID == IDM_PASTE) /*fNeedMask*/ ) ) { AstralCursor(NULL); Message(IDS_EMEMALLOC); break; } if ( wID == IDM_PASTE ) { ProgressBegin(1, IDS_PROGPASTECLIP); TransformObjectsStart( YES/*fNewObject*/ ); if ( ImgCreateClipInObject( lpImage, NO ) ) ; ProgressEnd(); } else if ( wID == IDM_PASTEASNEW ) { if ( lpFrame = AstralFrameLoad( Names.PasteImageFile, -1, &idDataType, &idFileType) ) { if ( NewImageWindow( NULL, // lpOldFrame NULL, // Name lpFrame, // lpNewFrame idFileType, // lpImage->FileType idDataType, // lpImage->DataType FALSE, // New view? IMG_DOCUMENT, // lpImage->DocumentType NULL, // lpImage->ImageName MAYBE ) ) lpImage->fChanged = YES; } } break; case IDM_ESCAPE: if (!lpImage) break; if (lpImage->hWnd == hZoomWindow) break; if ( Tool.bActive && Tool.lpToolProc ) DestroyProc( lpImage->hWnd, 1L ); break; case IDM_SIZEUP: case IDM_SIZEDOWN: if (!Retouch.hBrush) break; SetFocus( hWindow ); // Take focus away from any controls if ( Retouch.BrushShape == IDC_BRUSHCUSTOM ) break; if ( wID == IDM_SIZEUP ) { if( bHexBrush && ( Retouch.BrushSize % 2 == 0 ) && ( Retouch.BrushSize > 6 )) Retouch.BrushSize += 2; else Retouch.BrushSize++; } else { if( bHexBrush && ( Retouch.BrushSize % 2 == 0 ) && ( Retouch.BrushSize > 6 )) Retouch.BrushSize -= 2; else Retouch.BrushSize--; } if ( Retouch.BrushSize < 1 || Retouch.BrushSize > MAX_BRUSH_SIZE ) { Retouch.BrushSize = bound( Retouch.BrushSize, 1,MAX_BRUSH_SIZE); MessageBeep(0); break; } if (lpImage) DisplayBrush(0, 0, 0, OFF); SetMgxBrushSize(Retouch.hBrush, Retouch.BrushSize); if (lpImage && Window.hCursor == Window.hNullCursor) DisplayBrush(lpImage->hWnd, 32767, 32767, ON); if ( Tool.hRibbon ) SetSlide( Tool.hRibbon, IDC_BRUSHSIZE, Retouch.BrushSize ); break; case IDM_SHAPEUP: case IDM_SHAPEDOWN: if (!Retouch.hBrush) break; SetFocus( hWindow ); // Take focus away from any controls NewShape = Retouch.BrushShape; if ( wID == IDM_SHAPEUP ) NewShape++; else NewShape--; if ( NewShape > IDC_BRUSHCUSTOM ) NewShape = IDC_BRUSHCIRCLE; if ( NewShape < IDC_BRUSHCIRCLE ) NewShape = IDC_BRUSHCUSTOM; if (lpImage) DisplayBrush(0, 0, 0, OFF); if (!SetMgxBrushShape(Retouch.hBrush, NewShape, Names.CustomBrush)) { NewShape = IDC_BRUSHCIRCLE; SetMgxBrushShape(Retouch.hBrush, NewShape, Names.CustomBrush); } Retouch.BrushShape = NewShape; if (lpImage && Window.hCursor == Window.hNullCursor) DisplayBrush(lpImage->hWnd, 32767, 32767, ON); if ( Tool.hRibbon ) { CheckComboItem( Tool.hRibbon, IDC_BRUSHSHAPE, IDC_BRUSHCIRCLE, IDC_BRUSHCUSTOMNEW, Retouch.BrushShape ); SendMessage( Tool.hRibbon, WM_CONTROLENABLE, 0, 0L ); } break; case IDM_MOVEUP: case IDM_MOVEDOWN: case IDM_MOVELEFT: case IDM_MOVERIGHT: if (!lpImage) break; lpBase = ImgGetBase(lpImage); if (ImgGetSelObject(lpImage, NULL) == lpBase) break; dx = dy = 0; if (wID == IDM_MOVEUP) --dy; if (wID == IDM_MOVEDOWN) ++dy; if (wID == IDM_MOVELEFT) --dx; if (wID == IDM_MOVERIGHT) ++dx; lpObject = NULL; while (lpObject = ImgGetSelObject(lpImage, lpObject)) { rect = lpObject->rObject; OffsetRect(&rect, dx, dy); if (!AstralIntersectRect(&rTemp, &lpBase->rObject, &rect)) break; } if (lpObject) break; AstralSetRectEmpty(&rAll); lpObject = NULL; while (lpObject = ImgGetSelObject(lpImage, lpObject)) { rect = lpObject->rObject; OffsetRect(&lpObject->rObject, dx, dy); AstralUnionRect(&rAll, &rAll, &lpObject->rObject); if (!lpObject->Pixmap.fNewFrame && EqualRect(&rect, &lpObject->rUndoObject)) lpObject->rUndoObject = lpObject->rObject; UpdateImage(&rect, TRUE); UpdateImage(&lpObject->rObject, TRUE); } if (wID == IDM_MOVEUP) { x = (rAll.left + rAll.right)/2; y = rAll.top; } else if (wID == IDM_MOVEDOWN) { x = (rAll.left + rAll.right)/2; y = rAll.bottom; } else if (wID == IDM_MOVELEFT) { x = rAll.left; y = (rAll.top + rAll.bottom)/2; } else if (wID == IDM_MOVERIGHT) { x = rAll.right; y = (rAll.top + rAll.bottom)/2; } File2Display(&x, &y); AutoScroll(lpImage->hWnd, x, y); AstralUpdateWindow(lpImage->hWnd); DisplayInfo(-1, &rAll); break; case IDM_LASTTOOL: DeactivateTool(); if ( Tool.idLast && (hWnd = AstralDlgGet(IDD_MAIN)) ) SendMessage( hWnd, WM_COMMAND, Tool.idLast, 2L); break; case IDM_PREF: // prevent problems if running animations and they change // the wave mix dll setting in preferences StopAnimation(); AstralDlg( NO|2, hInstAstral, hWindow, IDD_PREF, DlgPrefProc ); break; case IDC_VIEWLAST: // duplicate of function in the view ribbon if ( !lpImage ) break; RevertLastView(); break; // case IDC_VIEWFULL: // duplicate of function in the view ribbon // if ( !lpImage ) // break; // AstralDlg( NO, hInstAstral, hWindow, IDD_VIEWFULL, DlgFullScreenViewProc ); // break; case IDC_VIEWALL: // duplicate of function in the view ribbon if ( !lpImage ) break; ViewAll(); break; case IDC_ZOOMIN: // duplicate of function in the view ribbon if ( !lpImage ) break; if (!lpImage->lpDisplay) break; if (!lpImage->lpDisplay->ViewPercentage) break; x = ( lpImage->lpDisplay->FileRect.left + lpImage->lpDisplay->FileRect.right ) / 2; y = ( lpImage->lpDisplay->FileRect.top + lpImage->lpDisplay->FileRect.bottom ) / 2; SaveLastView(); Zoom(x,y, +100, YES, ( View.ZoomWindow ^ CONTROL ) ); break; case IDC_ZOOMOUT: // duplicate of function in the view ribbon if ( !lpImage ) break; if (!lpImage->lpDisplay) break; if (!lpImage->lpDisplay->ViewPercentage) break; x = ( lpImage->lpDisplay->FileRect.left + lpImage->lpDisplay->FileRect.right ) / 2; y = ( lpImage->lpDisplay->FileRect.top + lpImage->lpDisplay->FileRect.bottom ) / 2; SaveLastView(); Zoom(x,y, -100, YES,( View.ZoomWindow ^ CONTROL ) ); break; case IDM_HELP: Control.Hints = !Control.Hints; PutDefInt (Control.Hints,Control.Hints); break; default: return( FALSE ); } return( TRUE ); }