FX_BOOL CFX_QuartzDeviceDriver::SetDIBits(const CFX_DIBSource* pBitmap, FX_ARGB argb, const FX_RECT* srcRect, int dest_left, int dest_top, int blendType, int alphaFlag , void* iccTransform ) { SaveState(); CGFloat src_left, src_top, src_width, src_height; if (srcRect) { src_left = srcRect->left; src_top = srcRect->top; src_width = srcRect->Width(); src_height = srcRect->Height(); } else { src_left = src_top = 0; src_width = pBitmap->GetWidth(); src_height = pBitmap->GetHeight(); } CGAffineTransform ctm = CGContextGetCTM(_context); CGFloat scale_x = FXSYS_fabs(ctm.a); CGFloat scale_y = FXSYS_fabs(ctm.d); src_left /= scale_x; src_top /= scale_y; src_width /= scale_x; src_height /= scale_y; CGRect rect_fx = CGRectMake(dest_left, dest_top, src_width, src_height); CGRect rect_usr = CGRectApplyAffineTransform(rect_fx, _foxitDevice2User); CGContextBeginPath(_context); CGContextAddRect(_context, rect_usr); CGContextClip(_context); rect_usr.size = CGSizeMake(pBitmap->GetWidth() / scale_x, pBitmap->GetHeight() / scale_y); rect_usr = CGRectOffset(rect_usr, -src_left, -src_top); CG_SetImageTransform(dest_left, dest_top, src_width, src_height, &rect_usr); CFX_DIBitmap* pBitmap1 = NULL; if (pBitmap->IsAlphaMask()) { if (pBitmap->GetBuffer()) { pBitmap1 = (CFX_DIBitmap*)pBitmap; } else { pBitmap1 = pBitmap->Clone(); } if (NULL == pBitmap1) { RestoreState(FALSE); return FALSE; } CGDataProviderRef pBitmapProvider = CGDataProviderCreateWithData(NULL, pBitmap1->GetBuffer(), pBitmap1->GetPitch() * pBitmap1->GetHeight(), NULL); CGColorSpaceRef pColorSpace = CGColorSpaceCreateDeviceGray(); CGBitmapInfo bitmapInfo = kCGImageAlphaNone | kCGBitmapByteOrderDefault; CGImageRef pImage = CGImageCreate(pBitmap1->GetWidth(), pBitmap1->GetHeight(), pBitmap1->GetBPP(), pBitmap1->GetBPP(), pBitmap1->GetPitch(), pColorSpace, bitmapInfo, pBitmapProvider, NULL, true, kCGRenderingIntentDefault); CGContextClipToMask(_context, rect_usr, pImage); CGContextSetRGBFillColor(_context, FXARGB_R(argb) / 255.f, FXARGB_G(argb) / 255.f, FXARGB_B(argb) / 255.f, FXARGB_A(argb) / 255.f); CGContextFillRect(_context, rect_usr); CGImageRelease(pImage); CGColorSpaceRelease(pColorSpace); CGDataProviderRelease(pBitmapProvider); if (pBitmap1 != pBitmap) { delete pBitmap1; } RestoreState(FALSE); return TRUE; } if (pBitmap->GetBPP() < 32) { pBitmap1 = pBitmap->CloneConvert(FXDIB_Rgb32); } else { if (pBitmap->GetBuffer()) { pBitmap1 = (CFX_DIBitmap*)pBitmap; } else { pBitmap1 = pBitmap->Clone(); } } if (NULL == pBitmap1) { RestoreState(FALSE); return FALSE; } if (pBitmap1->HasAlpha()) { if (pBitmap1 == pBitmap) { pBitmap1 = pBitmap->Clone(); if (!pBitmap1) { RestoreState(FALSE); return FALSE; } } for (int row = 0; row < pBitmap1->GetHeight(); row ++) { FX_LPBYTE pScanline = (FX_LPBYTE)pBitmap1->GetScanline(row); for (int col = 0; col < pBitmap1->GetWidth(); col ++) { pScanline[0] = (FX_BYTE)(pScanline[0] * pScanline[3] / 255.f + .5f); pScanline[1] = (FX_BYTE)(pScanline[1] * pScanline[3] / 255.f + .5f); pScanline[2] = (FX_BYTE)(pScanline[2] * pScanline[3] / 255.f + .5f); pScanline += 4; } } } CGContextRef ctx = createContextWithBitmap(pBitmap1); CGImageRef image = CGBitmapContextCreateImage(ctx); int blend_mode = blendType; if (FXDIB_BLEND_HARDLIGHT == blendType) { blend_mode = kCGBlendModeSoftLight; } else if (FXDIB_BLEND_SOFTLIGHT == blendType) { blend_mode = kCGBlendModeHardLight; } else if (blendType >= FXDIB_BLEND_NONSEPARABLE && blendType <= FXDIB_BLEND_LUMINOSITY) { blend_mode = blendType - 9; } else if (blendType > FXDIB_BLEND_LUMINOSITY || blendType < 0) { blend_mode = kCGBlendModeNormal; } CGContextSetBlendMode(_context, (CGBlendMode)blend_mode); CGContextDrawImage(_context, rect_usr, image); CGImageRelease(image); CGContextRelease(ctx); if (pBitmap1 != pBitmap) { delete pBitmap1; } RestoreState(FALSE); return TRUE; }
Handle poly_dispatch_c(TaskData *taskData, Handle args, Handle code) { unsigned c = get_C_unsigned(taskData, DEREFWORDHANDLE(code)); switch (c) { case 1: return exportNative(taskData, args); // Export case 2: raise_syscall(taskData, "C Export has been withdrawn", 0); return 0; case 3: return exportPortable(taskData, args); // Export as portable format case 9: // Return the GIT version if appropriate { return SAVE(C_string_to_Poly(taskData, GitVersion)); } case 10: // Return the RTS version string. { const char *version; switch (machineDependent->MachineArchitecture()) { case MA_Interpreted: version = "Portable-" TextVersion; break; case MA_I386: version = "I386-" TextVersion; break; case MA_X86_64: version = "X86_64-" TextVersion; break; default: version = "Unknown-" TextVersion; break; } return SAVE(C_string_to_Poly(taskData, version)); } case 11: // Return the RTS copyright string return SAVE(C_string_to_Poly(taskData, poly_runtime_system_copyright)); case 12: // Return the architecture { const char *arch; switch (machineDependent->MachineArchitecture()) { case MA_Interpreted: arch = "Interpreted"; break; case MA_I386: arch = "I386"; break; case MA_X86_64: arch = "X86_64"; break; default: arch = "Unknown"; break; } return SAVE(C_string_to_Poly(taskData, arch)); } case 13: // Share common immutable data. { ShareData(taskData, args); return SAVE(TAGGED(0)); } // ObjSize and ShowSize have their own IO vector entries but really they don't // need them. Include them here and add ObjProfile. case 14: return ObjSize(taskData, args); case 15: return ShowSize(taskData, args); case 16: return ObjProfile(taskData, args); /* 17 and 18 are no longer used. */ case 19: // Return the RTS argument help string. return SAVE(C_string_to_Poly(taskData, RTSArgHelp())); case 20: // Write a saved state file. return SaveState(taskData, args); case 21: // Load a saved state file and any ancestors. return LoadState(taskData, false, args); case 22: // Show the hierarchy. return ShowHierarchy(taskData); case 23: // Change the name of the immediate parent stored in a child return RenameParent(taskData, args); case 24: // Return the name of the immediate parent stored in a child return ShowParent(taskData, args); case 25: // Old statistics - now removed case 26: raise_exception_string(taskData, EXC_Fail, "No statistics available"); case 27: // Get number of user statistics available return Make_arbitrary_precision(taskData, N_PS_USER); case 28: // Set an entry in the user stats table. { unsigned index = get_C_unsigned(taskData, DEREFHANDLE(args)->Get(0)); if (index >= N_PS_USER) raise_exception0(taskData, EXC_subscript); POLYSIGNED value = getPolySigned(taskData, DEREFHANDLE(args)->Get(1)); globalStats.setUserCounter(index, value); Make_arbitrary_precision(taskData, 0); } case 29: // Get local statistics. return globalStats.getLocalStatistics(taskData); case 30: // Get remote statistics. The argument is the process ID to get the statistics. return globalStats.getRemoteStatistics(taskData, getPolyUnsigned(taskData, DEREFHANDLE(args))); case 31: // Store a module return StoreModule(taskData, args); case 32: // Load a module return LoadModule(taskData, args); case 33: // Load hierarchy. This provides a complete list of children and parents. return LoadState(taskData, true, args); case 34: // Return the system directory for modules. This is configured differently // in Unix and in Windows. #if (defined(MODULEDIR)) return SAVE(C_string_to_Poly(taskData, Xstr(MODULEDIR))); #elif (defined(_WIN32) && ! defined(__CYGWIN__)) { // This registry key is configured when Poly/ML is installed using the installer. // It gives the path to the Poly/ML installation directory. We return the // Modules subdirectory. HKEY hk; if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, _T("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\App Paths\\PolyML.exe"), 0, KEY_QUERY_VALUE, &hk) == ERROR_SUCCESS) { DWORD valSize; if (RegQueryValueEx(hk, _T("Path"), 0, NULL, NULL, &valSize) == ERROR_SUCCESS) { #define MODULEDIR _T("Modules") TempString buff((TCHAR*)malloc(valSize + (_tcslen(MODULEDIR) + 1)*sizeof(TCHAR))); DWORD dwType; if (RegQueryValueEx(hk, _T("Path"), 0, &dwType, (LPBYTE)(LPTSTR)buff, &valSize) == ERROR_SUCCESS) { RegCloseKey(hk); // The registry entry should end with a backslash. _tcscat(buff, MODULEDIR); return SAVE(C_string_to_Poly(taskData, buff)); } } RegCloseKey(hk); } return SAVE(C_string_to_Poly(taskData, "")); } #else return SAVE(C_string_to_Poly(taskData, "")); #endif case 50: // GCD return gcd_arbitrary(taskData, SAVE(DEREFHANDLE(args)->Get(0)), SAVE(DEREFHANDLE(args)->Get(1))); case 51: // LCM return lcm_arbitrary(taskData, SAVE(DEREFHANDLE(args)->Get(0)), SAVE(DEREFHANDLE(args)->Get(1))); // These next ones were originally in process_env and have now been moved here, case 100: /* Return the maximum word segment size. */ return taskData->saveVec.push(TAGGED(MAX_OBJECT_SIZE)); case 101: /* Return the maximum string size (in bytes). It is the maximum number of bytes in a segment less one word for the length field. */ return taskData->saveVec.push(TAGGED((MAX_OBJECT_SIZE)*sizeof(PolyWord) - sizeof(PolyWord))); case 102: /* Test whether the supplied address is in the io area. This was previously done by having get_flags return 256 but this was changed so that get_flags simply returns the top byte of the length word. */ { PolyWord *pt = (PolyWord*)DEREFWORDHANDLE(args); if (gMem.IsIOPointer(pt)) return Make_arbitrary_precision(taskData, 1); else return Make_arbitrary_precision(taskData, 0); } case 103: /* Return the register mask for the given function. This is used by the code-generator to find out which registers are modified by the function and so need to be saved if they are used by the caller. */ { PolyObject *pt = DEREFWORDHANDLE(args); if (gMem.IsIOPointer(pt)) { /* IO area. We need to get this from the vector. */ int i; for (i=0; i < POLY_SYS_vecsize; i++) { if (pt == (PolyObject*)IoEntry(i)) { int regMask = taskData->GetIOFunctionRegisterMask(i); POLYUNSIGNED props = rtsProperties(taskData, i); return taskData->saveVec.push(TAGGED(regMask | props)); } } raise_exception_string(taskData, EXC_Fail, "Io pointer not found"); } else { /* We may have a pointer to the code or a pointer to a closure. If it's a closure we have to find the code. */ if (! pt->IsCodeObject() && ! pt->IsByteObject()) pt = pt->Get(0).AsObjPtr(); /* Should now be a code object. */ if (pt->IsCodeObject()) { /* Compiled code. This is the second constant in the constant area. */ PolyWord *codePt = pt->ConstPtrForCode(); PolyWord mask = codePt[1]; // A real mask will be an integer. if (IS_INT(mask)) return SAVE(mask); else raise_exception_string(taskData, EXC_Fail, "Invalid mask"); } else raise_exception_string(taskData, EXC_Fail, "Not a code pointer"); } } case 104: return Make_arbitrary_precision(taskData, POLY_version_number); case 105: /* Get the name of the function. */ { PolyObject *pt = DEREFWORDHANDLE(args); if (gMem.IsIOPointer(pt)) { /* IO area. */ int i; for (i=0; i < POLY_SYS_vecsize; i++) { if (pt == (PolyObject*)IoEntry(i)) { char buff[8]; sprintf(buff, "RTS%d", i); return SAVE(C_string_to_Poly(taskData, buff)); } } raise_syscall(taskData, "Io pointer not found", 0); } else if (pt->IsCodeObject()) /* Should now be a code object. */ { /* Compiled code. This is the first constant in the constant area. */ PolyWord *codePt = pt->ConstPtrForCode(); PolyWord name = codePt[0]; /* May be zero indicating an anonymous segment - return null string. */ if (name == PolyWord::FromUnsigned(0)) return SAVE(C_string_to_Poly(taskData, "")); else return SAVE(name); } else raise_syscall(taskData, "Not a code pointer", 0); } default: { char msg[100]; sprintf(msg, "Unknown poly-specific function: %d", c); raise_exception_string(taskData, EXC_Fail, msg); return 0; } } }
/* Release foreground detector: */ virtual void Release() { SaveState(0); if(m_pFG)cvReleaseBGStatModel( &m_pFG ); };
// destructor CDlgItemProperties::~CDlgItemProperties() { SaveState(); }
void CBCGWorkspace::OnClosingMainFrame (CBCGFrameImpl* pFrame) { // Defaults to automatically saving state. SaveState(0, pFrame); }
/** This function is the main entry point for an SMM handler dispatch or communicate-based callback. @param DispatchHandle The unique handle assigned to this handler by SmiHandlerRegister(). @param RegisterContext Points to an optional handler context which was specified when the handler was registered. @param CommBuffer A pointer to a collection of data in memory that will be conveyed from a non-SMM environment into an SMM environment. @param CommBufferSize The size of the CommBuffer. @return Status Code **/ EFI_STATUS QNCSmmCoreDispatcher ( IN EFI_HANDLE DispatchHandle, IN CONST VOID *RegisterContext, IN OUT VOID *CommBuffer, IN OUT UINTN *CommBufferSize ) { // // Used to prevent infinite loops // UINTN EscapeCount; BOOLEAN ContextsMatch; BOOLEAN ResetListSearch; BOOLEAN EosSet; BOOLEAN SxChildWasDispatched; BOOLEAN ChildWasDispatched; DATABASE_RECORD *RecordInDb; LIST_ENTRY *LinkInDb; DATABASE_RECORD *RecordToExhaust; LIST_ENTRY *LinkToExhaust; QNC_SMM_CONTEXT Context; VOID *CommunicationBuffer; UINTN BufferSize; EFI_STATUS Status; UINT32 NewValue; QNC_SMM_SOURCE_DESC ActiveSource = NULL_SOURCE_DESC_INITIALIZER; EscapeCount = 100; ContextsMatch = FALSE; ResetListSearch = FALSE; EosSet = FALSE; SxChildWasDispatched = FALSE; Status = EFI_WARN_INTERRUPT_SOURCE_PENDING; ChildWasDispatched = FALSE; // // Preserve Index registers // SaveState (); if (!IsListEmpty (&mPrivateData.CallbackDataBase)) { // // We have children registered w/ us -- continue // while ((!EosSet) && (EscapeCount > 0)) { EscapeCount--; // // Reset this flag in order to be able to process multiple SMI Sources in one loop. // ResetListSearch = FALSE; LinkInDb = GetFirstNode (&mPrivateData.CallbackDataBase); while ((!IsNull (&mPrivateData.CallbackDataBase, LinkInDb)) && (ResetListSearch == FALSE)) { RecordInDb = DATABASE_RECORD_FROM_LINK (LinkInDb); // // look for the first active source // if (!SourceIsActive (&RecordInDb->SrcDesc)) { // // Didn't find the source yet, keep looking // LinkInDb = GetNextNode (&mPrivateData.CallbackDataBase, &RecordInDb->Link); } else { // // We found a source. If this is a sleep type, we have to go to // appropriate sleep state anyway.No matter there is sleep child or not // if (RecordInDb->ProtocolType == SxType) { SxChildWasDispatched = TRUE; } // // "cache" the source description and don't query I/O anymore // CopyMem (&ActiveSource, &RecordInDb->SrcDesc, sizeof (ActiveSource)); LinkToExhaust = LinkInDb; // // exhaust the rest of the queue looking for the same source // while (!IsNull (&mPrivateData.CallbackDataBase, LinkToExhaust)) { RecordToExhaust = DATABASE_RECORD_FROM_LINK (LinkToExhaust); if (CompareSources (&RecordToExhaust->SrcDesc, &ActiveSource)) { // // These source descriptions are equal, so this callback should be // dispatched. // if (RecordToExhaust->ContextFunctions.GetContext != NULL) { // // This child requires that we get a calling context from // hardware and compare that context to the one supplied // by the child. // ASSERT (RecordToExhaust->ContextFunctions.CmpContext != NULL); // // Make sure contexts match before dispatching event to child // RecordToExhaust->ContextFunctions.GetContext (RecordToExhaust, &Context); ContextsMatch = RecordToExhaust->ContextFunctions.CmpContext (&Context, &RecordToExhaust->ChildContext); } else { // // This child doesn't require any more calling context beyond what // it supplied in registration. Simply pass back what it gave us. // ASSERT (RecordToExhaust->Callback != NULL); Context = RecordToExhaust->ChildContext; ContextsMatch = TRUE; } if (ContextsMatch) { if (RecordToExhaust->BufferSize != 0) { ASSERT (RecordToExhaust->ContextFunctions.GetBuffer != NULL); RecordToExhaust->ContextFunctions.GetBuffer (RecordToExhaust); CommunicationBuffer = &RecordToExhaust->CommBuffer; BufferSize = RecordToExhaust->BufferSize; } else { CommunicationBuffer = NULL; BufferSize = 0; } ASSERT (RecordToExhaust->Callback != NULL); RecordToExhaust->Callback ( (EFI_HANDLE) & RecordToExhaust->Link, &Context, CommunicationBuffer, &BufferSize ); ChildWasDispatched = TRUE; if (RecordToExhaust->ProtocolType == SxType) { SxChildWasDispatched = TRUE; } } } // // Get next record in DB // LinkToExhaust = GetNextNode (&mPrivateData.CallbackDataBase, &RecordToExhaust->Link); } if (RecordInDb->ClearSource == NULL) { // // Clear the SMI associated w/ the source using the default function // QNCSmmClearSource (&ActiveSource); } else { // // This source requires special handling to clear // RecordInDb->ClearSource (&ActiveSource); } if (ChildWasDispatched) { // // The interrupt was handled and quiesced // Status = EFI_SUCCESS; } else { // // The interrupt was not handled but quiesced // Status = EFI_WARN_INTERRUPT_SOURCE_QUIESCED; } // // Queue is empty, reset the search // ResetListSearch = TRUE; } } EosSet = QNCSmmSetAndCheckEos (); } } // // If you arrive here, there are two possible reasons: // (1) you've got problems with clearing the SMI status bits in the // ACPI table. If you don't properly clear the SMI bits, then you won't be able to set the // EOS bit. If this happens too many times, the loop exits. // (2) there was a SMM communicate for callback messages that was received prior // to this driver. // If there is an asynchronous SMI that occurs while processing the Callback, let // all of the drivers (including this one) have an opportunity to scan for the SMI // and handle it. // If not, we don't want to exit and have the foreground app. clear EOS without letting // these other sources get serviced. // ASSERT (EscapeCount > 0); // // Restore Index registers // RestoreState (); if (SxChildWasDispatched) { // // A child of the SmmSxDispatch protocol was dispatched during this call; // put the system to sleep. // QNCSmmSxGoToSleep (); } // // Ensure that SMI signal pin indicator is clear at the end of SMM handling. // NewValue = QNCPortRead (QUARK_NC_HOST_BRIDGE_SB_PORT_ID, QUARK_NC_HOST_BRIDGE_HLEGACY_REG); NewValue &= ~(HLEGACY_SMI_PIN_VALUE); QNCPortWrite (QUARK_NC_HOST_BRIDGE_SB_PORT_ID, QUARK_NC_HOST_BRIDGE_HLEGACY_REG, NewValue); return Status; }
void CFunctionList::OnClose() { // TODO: Add your message handler code here and/or call default SaveState(); CDialog::OnClose(); }
void CLibraryWnd::OnDestroy() { SaveState(); CPanelWnd::OnDestroy(); }
/************************************************************************************************** This function handles events. **************************************************************************************************/ void CGroup::HandleEvent(UINT uEvent) { if (_stricmp(m_szEventCommand[uEvent], EVENT_ACTION_NONE) == 0) { return; } else if (_stricmp(m_szEventCommand[uEvent], EVENT_ACTION_RENAME) == 0) { ListView_EditLabel(m_hwndListView, ListView_GetNextItem(m_hwndListView, -1, LVNI_FOCUSED)); } else if (_stricmp(m_szEventCommand[uEvent], EVENT_ACTION_EXECUTE) == 0) { if (ListView_GetSelectedCount(m_hwndListView) == 1) { int iItem = ListView_GetNextItem(m_hwndListView, -1, LVNI_SELECTED); char szFileName[MAX_PATH]; if (GetNameFromId(iItem, szFileName, sizeof(szFileName))) { if (utils::Is_Directory(szFileName)) { if (m_bInlineBrowsing) { return ChangeDir(".selected"); } else if (m_bExplicitCalls) { LSExecuteEx(NULL, "open", "explorer.exe", szFileName, NULL, SW_SHOWNORMAL); return; } } } } CallWindowProc(m_wpOrigListViewProc, m_hwndListView, WM_KEYDOWN, VK_RETURN, NULL); } else if (_stricmp(m_szEventCommand[uEvent], EVENT_ACTION_DELETE) == 0) { DeleteFiles(); } else if (_stricmp(m_szEventCommand[uEvent], EVENT_ACTION_PASTE) == 0) { DoPaste(); } else if (_stricmp(m_szEventCommand[uEvent], EVENT_ACTION_UNDO) == 0) { // TODO::Add support for this } else if (_stricmp(m_szEventCommand[uEvent], EVENT_ACTION_COPY) == 0) { CopyFiles(false); } else if (_stricmp(m_szEventCommand[uEvent], EVENT_ACTION_CUT) == 0) { CopyFiles(true); } else if (_stricmp(m_szEventCommand[uEvent], EVENT_ACTION_SELECTALL) == 0) { ListView_SetItemState(m_hwndListView, -1, LVIS_SELECTED, LVIS_SELECTED); } else if (_stricmp(m_szEventCommand[uEvent], EVENT_ACTION_REFRESH) == 0) { SaveState(); m_pView2->Refresh(); RestoreState(); } else if (_stricmp(m_szEventCommand[uEvent], EVENT_ACTION_UP) == 0) { ChangeDir(".up"); } else if (_stricmp(m_szEventCommand[uEvent], EVENT_ACTION_CHANGEDIR) == 0) { ChangeDir(".selected"); } else if (_stricmp(m_szEventCommand[uEvent], EVENT_ACTION_DOWNKEY) == 0) { CallWindowProc(m_wpOrigListViewProc, m_hwndListView, WM_KEYDOWN, VK_DOWN, NULL); } else if (_stricmp(m_szEventCommand[uEvent], EVENT_ACTION_UPKEY) == 0) { CallWindowProc(m_wpOrigListViewProc, m_hwndListView, WM_KEYDOWN, VK_UP, NULL); } else if (_stricmp(m_szEventCommand[uEvent], EVENT_ACTION_LEFTKEY) == 0) { CallWindowProc(m_wpOrigListViewProc, m_hwndListView, WM_KEYDOWN, VK_LEFT, NULL); } else if (_stricmp(m_szEventCommand[uEvent], EVENT_ACTION_RIGHTKEY) == 0) { CallWindowProc(m_wpOrigListViewProc, m_hwndListView, WM_KEYDOWN, VK_RIGHT, NULL); } else { LSExecute(m_hwndListView, m_szEventCommand[uEvent], SW_SHOWNORMAL); } }
void CGalacticMapSession::OnKeyDown (int iVirtKey, DWORD dwKeyData) // OnKeyDown // // KeyDown { switch (iVirtKey) { case 'C': if (uiIsControlDown() && m_pPainter) ::CopyGalacticMapToClipboard(m_HI.GetHWND(), m_pPainter); break; case VK_ADD: case VK_OEM_PLUS: if (m_Scale.CanZoomIn()) { g_pUniverse->PlaySound(NULL, g_pUniverse->FindSound(UNID_DEFAULT_SELECT)); m_Scale.ZoomIn(); SetTargetScale(); } break; case VK_CONTROL: break; case VK_DOWN: m_pPainter->AdjustCenter(m_xCenter, m_yCenter - (100 * SCROLL_STEP / m_Scale.GetTargetScale()), m_Scale.GetTargetScale(), &m_xTargetCenter, &m_yTargetCenter); break; case VK_ESCAPE: SaveState(); m_HI.ClosePopupSession(); break; case VK_HOME: case VK_END: { CTopologyNode *pNode = g_pUniverse->GetCurrentTopologyNode(); if (pNode) { pNode->GetDisplayPos(&m_xTargetCenter, &m_yTargetCenter); m_pPainter->AdjustCenter(m_xTargetCenter, m_yTargetCenter, m_Scale.GetTargetScale(), &m_xTargetCenter, &m_yTargetCenter); } break; } case VK_LEFT: m_pPainter->AdjustCenter(m_xCenter - (100 * SCROLL_STEP / m_Scale.GetTargetScale()), m_yCenter, m_Scale.GetTargetScale(), &m_xTargetCenter, &m_yTargetCenter); break; case VK_NEXT: m_pPainter->AdjustCenter(m_xCenter, m_yCenter - (300 * SCROLL_STEP / m_Scale.GetTargetScale()), m_Scale.GetTargetScale(), &m_xTargetCenter, &m_yTargetCenter); break; case VK_PRIOR: m_pPainter->AdjustCenter(m_xCenter, m_yCenter + (300 * SCROLL_STEP / m_Scale.GetTargetScale()), m_Scale.GetTargetScale(), &m_xTargetCenter, &m_yTargetCenter); break; case VK_RIGHT: m_pPainter->AdjustCenter(m_xCenter + (100 * SCROLL_STEP / m_Scale.GetTargetScale()), m_yCenter, m_Scale.GetTargetScale(), &m_xTargetCenter, &m_yTargetCenter); break; case VK_SUBTRACT: case VK_OEM_MINUS: if (m_Scale.CanZoomOut()) { g_pUniverse->PlaySound(NULL, g_pUniverse->FindSound(UNID_DEFAULT_SELECT)); m_Scale.ZoomOut(); SetTargetScale(); } break; case VK_UP: m_pPainter->AdjustCenter(m_xCenter, m_yCenter + (100 * SCROLL_STEP / m_Scale.GetTargetScale()), m_Scale.GetTargetScale(), &m_xTargetCenter, &m_yTargetCenter); break; } }
void TClient::OnDataReceived(const TBuffer& data) { switch (CurrentState) { case CS_Registering: { Buffer += data.ToString(); string packetStr; if (Deserialize(Buffer, packetStr)) { packetStr = Decompress(packetStr); TServerRegisterPacket packet; if (!packet.ParseFromString(packetStr)) { ForceDisconnect(); Config.RegisterResultCallback(RR_ConnectionFailure); return; } string captcha = packet.captcha(); State.set_serverpublickey(packet.publickey()); Config.CaptchaAvailableCallback(captcha); } } break; case CS_RegisteringConfirmWait: { Buffer += data.ToString(); string packetStr; if (Deserialize(Buffer, packetStr)) { packetStr = Decompress(DecryptAsymmetrical(State.privatekey(), packetStr)); if (packetStr.size() != 1) { ForceDisconnect(); Config.RegisterResultCallback(RR_ConnectionFailure); return; } ERegisterResult registerResult; registerResult = (ERegisterResult)packetStr[0]; if (registerResult == RR_Success) { SaveState(); } ForceDisconnect(); Config.RegisterResultCallback(registerResult); return; } } break; case CS_Logining: { Buffer += data.ToString(); string packetStr; if (Deserialize(Buffer, packetStr)) { packetStr = Decompress(packetStr); TServerLoginPacket packet; if (!packet.ParseFromString(packetStr)) { ForceDisconnect(); Config.LoginResultCallback(LR_ConnectionFail); return; } string captcha = packet.captcha(); State.set_serverpublickey(packet.publickey()); Config.CaptchaAvailableCallback(captcha); } } break; case CS_LoginingConfirmWait: { Buffer += data.ToString(); string packetStr; if (Deserialize(Buffer, packetStr)) { packetStr = Decompress(packetStr); TServerLoginConfirm packet; if (!packet.ParseFromString(packetStr)) { ForceDisconnect(); Config.LoginResultCallback(LR_ConnectionFail); return; } if (packet.result() != LR_Success) { ForceDisconnect(); Config.LoginResultCallback(packet.result()); } else { assert(packet.has_publickey() && "no public key in packet"); assert(packet.has_encryptedprivatekey() && "no private key in packet"); assert(!Password.empty() && "no password"); State.set_publickey(packet.publickey()); State.set_privatekey(DecryptSymmetrical(GenerateKey(Password), packet.encryptedprivatekey())); Password.clear(); SaveState(); ForceDisconnect(); Config.LoginResultCallback(packet.result()); } ForceDisconnect(); } } break; case CS_Connecting: { Buffer += data.ToString(); string packetStr; if (Deserialize(Buffer, packetStr)) { packetStr = Decompress(packetStr); TServerAuthorizeRequest packet; if (!packet.ParseFromString(packetStr)) { ForceDisconnect(); Config.ConnectedCallback(false); return; } if (!CheckSignature(State.serverpublickey(), packet.randomsequence(), packet.signature())) { ForceDisconnect(); Config.ConnectedCallback(false); return; } TClientAuthorizeRequest request; assert(State.has_login() && "no login in state"); request.set_login(State.login()); string hash = Hash(packet.randomsequence()); request.set_randomsequencehash(hash); request.set_randomsequencehashsignature(Sign(State.privatekey(), hash)); string response = Compress(request.SerializeAsString()); response = Serialize(EncryptAsymmetrical(State.serverpublickey(), response)); CurrentState = CS_ConnectingConfirmWait; UdtClient->Send(response); } } break; case CS_ConnectingConfirmWait: { Buffer += data.ToString(); string packetStr; if (Deserialize(Buffer, packetStr)) { assert(State.has_privatekey()); string sessionKey = Decompress(DecryptAsymmetrical(State.privatekey(), packetStr)); State.set_sessionkey(sessionKey); CurrentState = CS_Connected; Config.ConnectedCallback(true); string response; response.resize(1); response[0] = RT_SyncMessages; TSyncMessagesRequest syncRequest; if (State.has_lastsync()) { syncRequest.set_from(State.lastsync()); } else { syncRequest.set_from(0); } syncRequest.set_to(TDuration::Max().GetValue()); // request all messages after connection response += syncRequest.SerializeAsString(); response = EncryptSymmetrical(State.sessionkey(), Compress(response)); UdtClient->Send(Serialize(response)); } } break; case CS_Connected: { Buffer += data.ToString(); string packetStr; if (Deserialize(Buffer, packetStr)) { assert(!packetStr.empty() && "empty packet"); packetStr = DecryptSymmetrical(State.sessionkey(), packetStr); assert(!packetStr.empty() && "empty decrypted"); packetStr = Decompress(packetStr); assert(!packetStr.empty() && "empty decompress"); EServerPacket packetType = (EServerPacket)packetStr[0]; packetStr = packetStr.substr(1); switch (packetType) { case SP_FriendAlreadyExists: { // todo: just sync friendList if required // send repeated authorization request } break; case SP_FriendAdded: { // todo: send authorization request } break; case SP_SyncMessages: { TClientSyncPacket packet; if (!packet.ParseFromString(packetStr)) { throw UException("failed to parse client sync message packet"); } for (size_t i = 0; i < packet.encryptedmessages_size(); ++i) { const TDirectionedMessage& currMessage = packet.encryptedmessages(i); auto friendIt = Friends.find(currMessage.login()); if (friendIt == Friends.end()) { cerr << "warning: friend login not found\n"; continue; } TFriendRef& frnd = friendIt->second; frnd->OnOfflineMessageReceived(currMessage.message(), currMessage.incoming()); } State.set_lastsync(packet.to()); SaveState(); } break; case SP_SyncInfo: { TClientSyncInfoPacket packet; if (!packet.ParseFromString(packetStr)) { throw UException("failed to parse client sync info packet"); } for (TFriendIterator it = Friends.begin(); it != Friends.end(); ++it) { TFriendRef& frnd = it->second; frnd->ToDelete = true; } bool friendListUpdated = false; for (size_t i = 0; i < packet.friends_size(); ++i) { const TSyncFriend& frnd = packet.friends(i); auto frndIt = Friends.find(frnd.login()); TFriendRef currentFrnd; bool friendAdded = false; if (frndIt == Friends.end()) { // todo: refactor syncing friendListUpdated = true; friendAdded = true; Friends.insert(pair<string, TFriendRef>(frnd.login(), make_shared<TFriend>(this))); currentFrnd = Friends[frnd.login()]; currentFrnd->FullLogin = frnd.login(); currentFrnd->PublicKey = frnd.publickey(); currentFrnd->ServerPublicKey = frnd.serverpublickey(); currentFrnd->SelfOfflineKey = DecryptSymmetrical(GenerateKey(State.privatekey()), frnd.encryptedkey()); if (frnd.status() == AS_WaitingAuthorization) { currentFrnd->Status = FS_AddRequest; Config.FriendRequestCallback(frnd.login()); } else if (frnd.status() == AS_UnAuthorized) { currentFrnd->Status = FS_Unauthorized; } else if (frnd.status() == AS_Authorized) { currentFrnd->Status = FS_Offline; // todo: start trying to connect } else { assert(!"unknown status"); } } else { currentFrnd = frndIt->second; if (currentFrnd->PublicKey.empty()) { currentFrnd->PublicKey = frnd.publickey(); } else { if (currentFrnd->PublicKey != frnd.publickey()) { throw UException("public keys missmatch"); } } if (currentFrnd->SelfOfflineKey.empty()) { currentFrnd->SelfOfflineKey = DecryptSymmetrical(GenerateKey(State.privatekey()), frnd.encryptedkey()); } else { if (!frnd.encryptedkey().empty() && currentFrnd->SelfOfflineKey != DecryptSymmetrical(GenerateKey(State.privatekey()), frnd.encryptedkey())) { throw UException("public keys missmatch"); } } if (currentFrnd->ServerPublicKey.empty()) { currentFrnd->ServerPublicKey = frnd.serverpublickey(); } else { if (currentFrnd->ServerPublicKey != frnd.serverpublickey()) { throw UException("server public keys missmatch"); } } if ((currentFrnd->Status == FS_Unauthorized || currentFrnd->Status == FS_AddRequest) && frnd.status() == AS_Authorized) { friendListUpdated = true; currentFrnd->Status = FS_Offline; // todo: start trying to connect } else if (frnd.status() == AS_WaitingAuthorization) { currentFrnd->Status = FS_AddRequest; } else if (frnd.status() == AS_UnAuthorized) { currentFrnd->Status = FS_Unauthorized; } } if (currentFrnd->FriendOfflineKey.empty() && IsAuthorized(currentFrnd->Status)) { if (frnd.has_offlinekey() && frnd.has_offlinekeysignature()) { assert(!frnd.offlinekey().empty() && "empty offline key"); string offlineSignature = DecryptAsymmetrical(State.privatekey(), frnd.offlinekey()); assert(!currentFrnd->PublicKey.empty() && "no public key for friend"); if (!CheckSignature(currentFrnd->PublicKey, offlineSignature, frnd.offlinekeysignature())) { cerr << "all bad, wrong signature\n"; // todo: normal handling continue; } currentFrnd->FriendOfflineKey = DecryptAsymmetrical(State.privatekey(), frnd.offlinekey()); } } currentFrnd->ToDelete = false; if (friendAdded && Config.OnFriendAdded) { Config.OnFriendAdded(currentFrnd); } if (frnd.has_needofflinekey() && frnd.needofflinekey()) { string response; response.resize(1); response[0] = RT_SetFriendOfflineKey; TFriendOfflineKey offlineKeyPacket; assert(!currentFrnd->PublicKey.empty() && "missing friend public key"); assert(!currentFrnd->SelfOfflineKey.empty() && "missing self offline key for friend"); offlineKeyPacket.set_offlinekey(EncryptAsymmetrical(currentFrnd->PublicKey, currentFrnd->SelfOfflineKey)); offlineKeyPacket.set_offlinekeysignature(Sign(State.privatekey(), currentFrnd->SelfOfflineKey)); offlineKeyPacket.set_login(currentFrnd->GetLogin()); response += offlineKeyPacket.SerializeAsString(); response = EncryptSymmetrical(State.sessionkey(), Compress(response)); UdtClient->Send(Serialize(response)); } } for (TFriendIterator it = Friends.begin(); it != Friends.end();) { TFriendRef& frnd = it->second; if (frnd->ToDelete) { friendListUpdated = true; if (Config.OnFriendRemoved) { Config.OnFriendRemoved(frnd); } it = Friends.erase(it); } else { frnd->Connect(); ++it; } } if (friendListUpdated && Config.FriendlistChangedCallback) { Config.FriendlistChangedCallback(); } } break; case SP_ConnectToFriend: { auto frndIt = Friends.find(packetStr); if (frndIt == Friends.end()) { throw UException("no friend to connect to"); } TFriendRef& frnd = frndIt->second; frnd->ConnectAccept(); } } } } break; default: assert(false && "unknown state"); break; } }
void CUploadsWnd::OnDestroy() { KillTimer( 4 ); SaveState(); CPanelWnd::OnDestroy(); }
void ModulesView::MessageReceived(BMessage* message) { switch (message->what) { case kMsgSaverSelected: { int32 selection = fScreenSaversListView->CurrentSelection(); if (selection < 0) break; ScreenSaverItem* item = (ScreenSaverItem*)fScreenSaversListView->ItemAt(selection); if (item == NULL) break; if (strcmp(item->Text(), B_TRANSLATE("Blackness")) == 0) fSettings.SetModuleName(""); else fSettings.SetModuleName(item->Text()); SaveState(); _CloseSaver(); _OpenSaver(); fSettings.Save(); break; } case kMsgTestSaver: { SaveState(); fSettings.Save(); _CloseSaver(); be_roster->StartWatching(BMessenger(this, Looper()), B_REQUEST_QUIT); BMessage message(kMsgTestSaver); if (be_roster->Launch(SCREEN_BLANKER_SIG, &message, &fScreenSaverTestTeam) == B_OK) { break; } // Try really hard to launch it. It's very likely that this fails // when we run from the CD, and there is only an incomplete mime // database for example... BPath path; if (find_directory(B_SYSTEM_BIN_DIRECTORY, &path) != B_OK || path.Append("screen_blanker") != B_OK) { path.SetTo("/bin/screen_blanker"); } BEntry entry(path.Path()); entry_ref ref; if (entry.GetRef(&ref) == B_OK) { be_roster->Launch(&ref, &message, &fScreenSaverTestTeam); } break; } case B_SOME_APP_QUIT: { team_id team; if (message->FindInt32("be:team", &team) == B_OK && team == fScreenSaverTestTeam) { be_roster->StopWatching(this); _OpenSaver(); } break; } default: BView::MessageReceived(message); } }
CODBCConfig::~CODBCConfig() { SaveState(); }
void CFunctionList::OnCancel() { SaveState(); CDialog::OnCancel(); }
void CIRCWnd::OnDestroy() { SaveState(); CPanelWnd::OnDestroy(); }
s32 SelectGame() { u32 keys; s32 loadst = 0; s32 menu_state = 0; s32 menu_pos = 0; s8* newpackfile = NULL; gp2x_video_RGB_clearscreen16(); gp2x_video_flip(); #if 1 // pick a game for(;;) { gp2x_video_RGB_clearscreen16(); gp2x_printf(NULL, 0, 10, "psx4all http://github.com/uli/psx4all-dingoo"); gp2x_printf(NULL, 0, 20, "CREDITS: UNAI - ZODTTD - HLIDE - CHUI - TINNUS"); gp2x_printf(NULL, 0, 30, "Dingoo/MIPS port by Ulrich Hecht"); keys = gp2x_joystick_read(); // draw arrow gp2x_printf(NULL, 10, (menu_pos * 10) + PSX4ALL_MENU_START_POS, "----> "); // read key input for up and down for menu position if( keys & GP2X_UP ) { if( menu_pos > 0 ) menu_pos--; } switch(menu_state) { case PSX4ALL_MENU_DEFAULT_STATE: if( keys & GP2X_DOWN ) { if( menu_pos < 4 ) menu_pos++; } break; case PSX4ALL_MENU_GPU_STATE: if( keys & GP2X_DOWN ) { if( menu_pos < 15 ) menu_pos++; } break; case PSX4ALL_MENU_SPU_STATE: if( keys & GP2X_DOWN ) { if( menu_pos < 1 ) menu_pos++; } break; case PSX4ALL_MENU_BIOS_STATE: if( keys & GP2X_DOWN ) { if( menu_pos < 1 ) menu_pos++; } break; case PSX4ALL_MENU_GAMESTATE_STATE: if( keys & GP2X_DOWN ) { if( menu_pos < 4 ) menu_pos++; } break; } // text to display for each option switch(menu_state) { case PSX4ALL_MENU_DEFAULT_STATE: gp2x_printf(NULL, 80, PSX4ALL_MENU_START_POS + 0, "GRAPHICS OPTIONS"); gp2x_printf(NULL, 80, PSX4ALL_MENU_START_POS + 10, "SOUND OPTIONS"); gp2x_printf(NULL, 80, PSX4ALL_MENU_START_POS + 20, "BIOS OPTIONS"); gp2x_printf(NULL, 80, PSX4ALL_MENU_START_POS + 30, "FILE OPTIONS"); if (psx4all_emulating) gp2x_printf(NULL, 80, PSX4ALL_MENU_START_POS + 40, "RESUME EMULATION"); else gp2x_printf(NULL, 80, PSX4ALL_MENU_START_POS + 40, "QUIT"); break; case PSX4ALL_MENU_GPU_STATE: gp2x_printf(NULL, 80, PSX4ALL_MENU_START_POS + 0, "Show FPS %s", (displayFrameInfo == false ? "OFF" : "ON")); gp2x_printf(NULL, 80, PSX4ALL_MENU_START_POS + 10, "Show GPU Stats %s", (displayGpuStats == false ? "OFF" : "ON")); gp2x_printf(NULL, 80, PSX4ALL_MENU_START_POS + 20, "Display Video Memory %s", (displayVideoMemory == false ? "OFF" : "ON")); gp2x_printf(NULL, 80, PSX4ALL_MENU_START_POS + 30, "Set NULL GPU %s", (activeNullGPU == false ? "OFF" : "ON")); gp2x_printf(NULL, 80, PSX4ALL_MENU_START_POS + 40, "Interlace Count %d", linesInterlace_user ); gp2x_printf(NULL, 80, PSX4ALL_MENU_START_POS + 50, "Frame Limit %s", (enableFrameLimit == false ? "OFF" : "ON")); gp2x_printf(NULL, 80, PSX4ALL_MENU_START_POS + 60, "Frame Skip %d/%d", skipCount, skipRate); gp2x_printf(NULL, 80, PSX4ALL_MENU_START_POS + 70, "Abe's Oddysee Fix %s", (enableAbbeyHack == false ? "OFF" : "ON")); gp2x_printf(NULL, 80, PSX4ALL_MENU_START_POS + 80, "Cycle Multiplier %d", PsxCycleMult); gp2x_printf(NULL, 80, PSX4ALL_MENU_START_POS + 90, "Frameskip: Line %s", hardframeskip_line ? "ON" : "OFF"); gp2x_printf(NULL, 80, PSX4ALL_MENU_START_POS + 100, "Frameskip: Poly %s", hardframeskip_poly ? "ON" : "OFF"); gp2x_printf(NULL, 80, PSX4ALL_MENU_START_POS + 110, "Frameskip: Sprite %s", hardframeskip_sprite ? "ON" : "OFF"); gp2x_printf(NULL, 80, PSX4ALL_MENU_START_POS + 120, "Frameskip: Image %s", hardframeskip_image ? "ON" : "OFF"); gp2x_printf(NULL, 80, PSX4ALL_MENU_START_POS + 130, "Frameskip: Blit %s", hardframeskip_blit ? "ON" : "OFF"); gp2x_printf(NULL, 80, PSX4ALL_MENU_START_POS + 140, "Wall Clock Timing %s", use_wall_clock_time ? "ON" : "OFF"); gp2x_printf(NULL, 80, PSX4ALL_MENU_START_POS + 150, "<-Back"); break; case PSX4ALL_MENU_SPU_STATE: gp2x_printf(NULL, 80, PSX4ALL_MENU_START_POS + 0, "SOUND IS %s", (iSoundMuted == 0 ? "ON" : "OFF")); gp2x_printf(NULL, 80, PSX4ALL_MENU_START_POS + 10, "BACK"); break; case PSX4ALL_MENU_BIOS_STATE: switch(biosVersion) { case 0: gp2x_printf(NULL, 80, PSX4ALL_MENU_START_POS + 0, "Bios file: scph1000 (Japanese)"); break; case 1: gp2x_printf(NULL, 80, PSX4ALL_MENU_START_POS + 0, "Bios file: scph1001 (North American)"); break; case 2: gp2x_printf(NULL, 80, PSX4ALL_MENU_START_POS + 0, "Bios file: scph1002 (European)"); break; case 3: gp2x_printf(NULL, 80, PSX4ALL_MENU_START_POS + 0, "Bios file: scph5500 (Japanese)"); break; case 4: gp2x_printf(NULL, 80, PSX4ALL_MENU_START_POS + 0, "Bios file: scph5501 (North American)"); break; case 5: gp2x_printf(NULL, 80, PSX4ALL_MENU_START_POS + 0, "Bios file: scph5502 (European)"); break; case 6: gp2x_printf(NULL, 80, PSX4ALL_MENU_START_POS + 0, "Bios file: scph7001 (North American)"); break; case 7: gp2x_printf(NULL, 80, PSX4ALL_MENU_START_POS + 0, "Bios file: scph7002 (European)"); break; case 8: gp2x_printf(NULL, 80, PSX4ALL_MENU_START_POS + 0, "Bios file: scph7003 (Asian)"); break; case 9: gp2x_printf(NULL, 80, PSX4ALL_MENU_START_POS + 0, "Bios file: scph7500 (Japanese)"); break; case 10: gp2x_printf(NULL, 80, PSX4ALL_MENU_START_POS + 0, "Bios file: scph7501 (North American)"); break; case 11: gp2x_printf(NULL, 80, PSX4ALL_MENU_START_POS + 0, "Bios file: scph7502 (European)"); break; case 12: gp2x_printf(NULL, 80, PSX4ALL_MENU_START_POS + 0, "Bios file: scph7503 (Japanese updated)"); break; default: break; } gp2x_printf(NULL, 80, PSX4ALL_MENU_START_POS + 10, "BACK"); break; case PSX4ALL_MENU_GAMESTATE_STATE: gp2x_printf(NULL, 80, PSX4ALL_MENU_START_POS + 0, "SAVE GAME STATE" ); gp2x_printf(NULL, 80, PSX4ALL_MENU_START_POS + 10, "LOAD GAME STATE"); gp2x_printf(NULL, 80, PSX4ALL_MENU_START_POS + 20, "LOAD A GAME"); gp2x_printf(NULL, 80, PSX4ALL_MENU_START_POS + 30, "LOAD A GAME WITHOUT BIOS"); gp2x_printf(NULL, 80, PSX4ALL_MENU_START_POS + 40, "BACK"); break; } // logic for each option switch(menu_state) { case PSX4ALL_MENU_DEFAULT_STATE: if( keys & GP2X_B ) { switch(menu_pos) { case 0: menu_state = PSX4ALL_MENU_GPU_STATE; menu_pos = 0; break; case 1: menu_state = PSX4ALL_MENU_SPU_STATE; menu_pos = 0; break; case 2: menu_state = PSX4ALL_MENU_BIOS_STATE; menu_pos = 0; break; case 3: menu_state = PSX4ALL_MENU_GAMESTATE_STATE; menu_pos = 0; break; case 4: // clear screen so interlaced screens look ok gp2x_video_RGB_clearscreen16(); return 0; default: break; } } if (keys & GP2X_L && psx4all_emulating) { gp2x_video_RGB_clearscreen16(); return 0; } break; case PSX4ALL_MENU_GPU_STATE: switch(menu_pos) { case 0: if( keys & GP2X_B || keys & GP2X_LEFT || keys & GP2X_RIGHT ) { displayFrameInfo = !displayFrameInfo; } break; case 1: if( keys & GP2X_B || keys & GP2X_LEFT || keys & GP2X_RIGHT ) { displayGpuStats = !displayGpuStats; } break; case 2: if( keys & GP2X_B ) { displayVideoMemory = !displayVideoMemory; } break; case 3: if( keys & GP2X_B ) { activeNullGPU = !activeNullGPU; } break; case 4: if( keys & GP2X_LEFT ) { switch( linesInterlace_user ) { case 0: linesInterlace_user = 7; break; case 1: linesInterlace_user = 0; break; case 3: linesInterlace_user = 1; break; case 7: linesInterlace_user = 3; break; } } if( keys & GP2X_RIGHT ) { switch( linesInterlace_user ) { case 0: linesInterlace_user = 1; break; case 1: linesInterlace_user = 3; break; case 3: linesInterlace_user = 7; break; case 7: linesInterlace_user = 0; break; } } break; case 5: if( keys & GP2X_B ) { enableFrameLimit = !enableFrameLimit; } break; case 6: if( keys & GP2X_LEFT ) { if( skipValue > 0 ) { skipValue--; skipCount = skipCountTable[skipValue]; skipRate = skipRateTable[skipValue]; } } if( keys & GP2X_RIGHT ) { if( skipValue < 8 ) { skipValue++; skipCount = skipCountTable[skipValue]; skipRate = skipRateTable[skipValue]; } } break; case 7: if( keys & GP2X_B ) { enableAbbeyHack = !enableAbbeyHack; } break; case 8: if (keys & GP2X_LEFT && PsxCycleMult > 1) PsxCycleMult--; if (keys & GP2X_RIGHT && PsxCycleMult < 10) PsxCycleMult++; break; case 9: if( keys & GP2X_B ) { hardframeskip_line = !hardframeskip_line; } break; case 10: if( keys & GP2X_B ) { hardframeskip_poly = !hardframeskip_poly; } break; case 11: if( keys & GP2X_B ) { hardframeskip_sprite = !hardframeskip_sprite; } break; case 12: if( keys & GP2X_B ) { hardframeskip_image = !hardframeskip_image; } break; case 13: if( keys & GP2X_B ) { hardframeskip_blit = !hardframeskip_blit; } break; case 14: if( keys & GP2X_B ) { use_wall_clock_time = !use_wall_clock_time; } break; case 15: if( keys & GP2X_B ) { menu_state = PSX4ALL_MENU_DEFAULT_STATE; menu_pos = 0; } break; default: break; } if (keys & GP2X_L) { menu_state = PSX4ALL_MENU_DEFAULT_STATE; menu_pos = 0; } break; case PSX4ALL_MENU_SPU_STATE: switch(menu_pos) { case 0: if( keys & GP2X_B || keys & GP2X_LEFT || keys & GP2X_RIGHT ) { #ifndef NOSOUND iSoundMuted = !iSoundMuted; #endif } break; case 1: if( keys & GP2X_B ) { menu_state = PSX4ALL_MENU_DEFAULT_STATE; menu_pos = 0; } break; } if (keys & GP2X_L) { menu_state = PSX4ALL_MENU_DEFAULT_STATE; menu_pos = 0; } break; case PSX4ALL_MENU_BIOS_STATE: switch(menu_pos) { case 0: if( keys & GP2X_B || keys & GP2X_RIGHT ) { biosVersion++; } else if( keys & GP2X_LEFT) { biosVersion--; } if(biosVersion < 0) biosVersion = 12; if(biosVersion > 12) biosVersion = 0; switch(biosVersion) { case 0: sprintf(Config.Bios, "/scph1000.bin"); break; case 1: sprintf(Config.Bios, "/scph1001.bin"); break; case 2: sprintf(Config.Bios, "/scph1002.bin"); break; case 3: sprintf(Config.Bios, "/scph5500.bin"); break; case 4: sprintf(Config.Bios, "/scph5501.bin"); break; case 5: sprintf(Config.Bios, "/scph5502.bin"); break; case 6: sprintf(Config.Bios, "/scph7001.bin"); break; case 7: sprintf(Config.Bios, "/scph7002.bin"); break; case 8: sprintf(Config.Bios, "/scph7003.bin"); break; case 9: sprintf(Config.Bios, "/scph7500.bin"); break; case 10: sprintf(Config.Bios, "/scph7501.bin"); break; case 11: sprintf(Config.Bios, "/scph7502.bin"); break; case 12: sprintf(Config.Bios, "/scph7503.bin"); break; default: break; } break; case 1: if( keys & GP2X_B ) { menu_state = PSX4ALL_MENU_DEFAULT_STATE; menu_pos = 0; } break; } if (keys & GP2X_L) { menu_state = PSX4ALL_MENU_DEFAULT_STATE; menu_pos = 0; } break; case PSX4ALL_MENU_GAMESTATE_STATE: switch(menu_pos) { case 0: if( keys & GP2X_B ) { #ifndef IPHONE if( 1 == psx4all_emulating ) { s32 ret; char buffer[360]; char filename[260]; struct stat s; for(int count = 1;; count++) { sprintf(filename, "%s-%04d.svs", packfile, count); if (stat(filename, &s)) break; } gp2x_printf(NULL, 80, 130, "Saving..."); gp2x_video_flip(); GPU_freeze(2, NULL); ret = SaveState(filename); if (ret == 0) sprintf(buffer, "Saved!"); else sprintf(buffer, "Error Saving!"); gp2x_printf(NULL, 80, 140, "%s", buffer); gp2x_video_flip(); gp2x_timer_delay(1000); } #endif } break; case 1: if( keys & GP2X_B ) { #ifndef IPHONE // pause so keys won't be accidently inputted in FileReq gp2x_timer_delay(500); newpackfile = FileReq(NULL, ".svs"); #endif } break; case 2: if( keys & GP2X_B ) { #ifndef IPHONE Config.HLE = 0; // pause so keys won't be accidently inputted in FileReq gp2x_timer_delay(500); newpackfile = FileReq(NULL, NULL); #endif } break; case 3: if( keys & GP2X_B ) { #ifndef IPHONE Config.HLE = 1; // pause so keys won't be accidently inputted in FileReq gp2x_timer_delay(500); newpackfile = FileReq(NULL, NULL); #endif } break; case 4: if( keys & GP2X_B ) { menu_state = PSX4ALL_MENU_DEFAULT_STATE; menu_pos = 0; } break; } if (keys & GP2X_L) { menu_state = PSX4ALL_MENU_DEFAULT_STATE; menu_pos = 0; } break; } if( newpackfile != NULL ) { break; } gp2x_video_flip(); gp2x_timer_delay(100); if(keys & (GP2X_A|GP2X_B|GP2X_X|GP2X_Y|GP2X_L|GP2X_R|GP2X_PUSH| GP2X_LEFT|GP2X_RIGHT|GP2X_UP|GP2X_DOWN) ) { //gp2x_video_flip(); gp2x_timer_delay(50); } } #else //newpackfile = "Einhander.bin"; //newpackfile = "Einhander.cbn"; Config.HLE = 1; //newpackfile = "Cotton Jap.bin"; newpackfile = "Cotton Jap.cbn"; #endif DEBUGF("loaded %s", newpackfile); packfile = newpackfile; // clear screen gp2x_video_RGB_clearscreen16(); keys = gp2x_joystick_read(); LoadCdBios = 0; if( (!strcasecmp(packfile + (strlen(packfile)-4), ".svs")) ) { char *pos; loadst = 1; sprintf(svsfilename, "%s", packfile); pos = strrchr(packfile, '-'); if (pos) *pos = '\0'; } else { loadst = 0; } if( loadst > 0 ) { gp2x_printf(NULL, 120, 100, "LOADING SAVE STATE"); } else { gp2x_printf(NULL, 120, 100, "LOADING BIOS"); } gp2x_video_flip(); if( 1 == psx4all_emulating ) { psxShutdown(); CloseComponents(); } if (SysInit() == -1) { gp2x_deinit(); return 0; } if (InitComponents() == -1) { gp2x_deinit(); return 0; } SysReset(); CheckCdrom(); if( Config.HLE ) { LoadCdBios = 0; if( LoadCdrom() == -1 ) { gp2x_printf(NULL, 120, 120, "LOAD FAILED"); gp2x_video_flip(); gp2x_timer_delay(2000); // clear screen gp2x_video_RGB_clearscreen16(); return 0; } } else { gp2x_printf(NULL, 120, 120, "LOADED!"); gp2x_video_flip(); gp2x_timer_delay(100); } if (loadst) { if( LoadState(svsfilename) == -1 ) { gp2x_printf(NULL, 120, 120, "LOAD SAVE FAILED"); gp2x_video_flip(); gp2x_timer_delay(2000); // clear screen gp2x_video_RGB_clearscreen16(); return 0; } } return 1; }
//*********************************************************************************** BOOL CBCGWorkspace::SaveState (CBCGOleDocIPFrameWnd* pFrame, LPCTSTR lpszSectionName /*=NULL*/) { ASSERT_VALID (pFrame); return SaveState (lpszSectionName, &pFrame->m_Impl); }
void PADhandleKey(int key) { char Text[255]; int ret; if (Running == 0) return; switch (key) { case 0: break; case VK_F1: GetStateFilename(Text, StatesC); GPU_freeze(2, (GPUFreeze_t *)&StatesC); ret = SaveState(Text); if (ret == 0) sprintf(Text, _("*PCSX*: Saved State %d"), StatesC+1); else sprintf(Text, _("*PCSX*: Error Saving State %d"), StatesC+1); GPU_displayText(Text); if (ShowPic) { ShowPic = 0; gpuShowPic(); } break; case VK_F2: if (StatesC < 4) StatesC++; else StatesC = 0; GPU_freeze(2, (GPUFreeze_t *)&StatesC); if (ShowPic) { ShowPic = 0; gpuShowPic(); } break; case VK_F3: GetStateFilename(Text, StatesC); ret = LoadState(Text); if (ret == 0) sprintf(Text, _("*PCSX*: Loaded State %d"), StatesC+1); else sprintf(Text, _("*PCSX*: Error Loading State %d"), StatesC+1); GPU_displayText(Text); break; case VK_F4: gpuShowPic(); break; case VK_F5: Config.Sio ^= 0x1; if (Config.Sio) sprintf(Text, _("*PCSX*: Sio Irq Always Enabled")); else sprintf(Text, _("*PCSX*: Sio Irq Not Always Enabled")); GPU_displayText(Text); break; case VK_F6: Config.Mdec ^= 0x1; if (Config.Mdec) sprintf(Text, _("*PCSX*: Black&White Mdecs Only Enabled")); else sprintf(Text, _("*PCSX*: Black&White Mdecs Only Disabled")); GPU_displayText(Text); break; case VK_F7: Config.Xa ^= 0x1; if (Config.Xa == 0) sprintf (Text, _("*PCSX*: Xa Enabled")); else sprintf (Text, _("*PCSX*: Xa Disabled")); GPU_displayText(Text); break; case VK_F8: GPU_makeSnapshot(); return; case VK_F9: GPU_displayText(_("*PCSX*: CdRom Case Opened")); cdOpenCase = -1; break; case VK_F10: GPU_displayText(_("*PCSX*: CdRom Case Closed")); cdOpenCase = 0; break; case VK_F12: SysPrintf("*PCSX*: CpuReset\n"); psxCpu->Reset(); break; case VK_ESCAPE: Running = 0; ClosePlugins(); SysRunGui(); break; } }
bool Parser::parseElement (Node * node) { if (current != '<') return false; State state = SaveState (); std::string name; readChar (false); if (!parseName (name)) { RestoreState (state); return false; } Node *thisNode = new Node; thisNode->setName (name); thisNode->setNodeType (Element); try { do { parseWhitespace (); } while (parseAttribute (thisNode)); // Empty Element Tag if (current == '/') { readChar (false); if (current != '>') reportError ("Tag not terminated properly."); readChar (); // Skip Char } // Normal Start Tag else if (current == '>') { readChar (false); parseContent (thisNode); //thisNode->setData( thisNode->data().replace( ... ) ); // was: ThisNode.Data := TrimChars(ThisNode.Data, [' ', #9, #13, #10]); if (!parseETag (thisNode)) reportError ("No ending tag for " + name); } // Not terminated properly else { reportError ("Tag not terminated properly."); } } catch (...) { delete thisNode; throw; } node->addNode (thisNode); return true; }
bool CDlgEventLog::Create( wxWindow* parent, wxWindowID id, const wxString& caption, const wxPoint& pos, const wxSize& size, long style ) { ////@begin CDlgEventLog member initialisation CMainDocument* pDoc = wxGetApp().GetDocument(); wxASSERT(pDoc); wxASSERT(wxDynamicCast(pDoc, CMainDocument)); m_iPreviousRowCount = 0; m_iTotalDocCount = 0; m_iPreviousFirstMsgSeqNum = pDoc->GetFirstMsgSeqNum(); m_iPreviousLastMsgSeqNum = m_iPreviousFirstMsgSeqNum - 1; m_iNumDeletedFilteredRows = 0; m_iTotalDeletedFilterRows = 0; if (!s_bIsFiltered) { s_strFilteredProjectName.clear(); } m_iFilteredIndexes.Clear(); m_bProcessingRefreshEvent = false; m_bWasConnected = false; m_bEventLogIsOpen = true; ////@end CDlgEventLog member initialisation CSkinAdvanced* pSkinAdvanced = wxGetApp().GetSkinManager()->GetAdvanced(); wxPoint oTempPoint; wxSize oTempSize; wxASSERT(pSkinAdvanced); wxASSERT(wxDynamicCast(pSkinAdvanced, CSkinAdvanced)); if ((pos == wxDefaultPosition) && (size == wxDefaultSize)) { // Get size and position from the previous configuration GetWindowDimensions( oTempPoint, oTempSize ); #ifdef __WXMSW__ // Get the current display space for the current window int iDisplay = wxNOT_FOUND; if ( wxGetApp().GetFrame() != NULL ) iDisplay = wxDisplay::GetFromWindow(wxGetApp().GetFrame()); if ( iDisplay == wxNOT_FOUND ) iDisplay = 0; wxDisplay *display = new wxDisplay(iDisplay); wxRect rDisplay = display->GetClientArea(); // Check that the saved height and width is not larger than the displayable space. // If it is, then reduce the size. if ( oTempSize.GetWidth() > rDisplay.width ) oTempSize.SetWidth(rDisplay.width); if ( oTempSize.GetHeight() > rDisplay.height ) oTempSize.SetHeight(rDisplay.height); // Check if part of the display was going to be off the screen, if so, center the // display on that axis if ( oTempPoint.x < rDisplay.x ) { oTempPoint.x = rDisplay.x; } else if ( oTempPoint.x + oTempSize.GetWidth() > rDisplay.x + rDisplay.width ) { oTempPoint.x = rDisplay.x + rDisplay.width - oTempSize.GetWidth(); } if ( oTempPoint.y < rDisplay.y ) { oTempPoint.y = rDisplay.y; } else if ( oTempPoint.y + oTempSize.GetHeight() > rDisplay.y + rDisplay.height ) { oTempPoint.y = rDisplay.y + rDisplay.height - oTempSize.GetHeight(); } delete display; #endif #ifdef __WXMAC__ // If the user has changed the arrangement of multiple // displays, make sure the window title bar is still on-screen. if (!IsWindowOnScreen(oTempPoint.x, oTempPoint.y, oTempSize.GetWidth(), oTempSize.GetHeight())) { oTempPoint.y = oTempPoint.x = 30; } #endif // ! __WXMAC__ } else { oTempPoint = pos; oTempSize = size; } wxDialog::Create( parent, id, caption, oTempPoint, oTempSize, style ); SetExtraStyle(GetExtraStyle()|wxWS_EX_BLOCK_EVENTS); // Initialize Application Title wxString strCaption = caption; if (strCaption.IsEmpty()) { strCaption.Printf(_("%s - Event Log"), pSkinAdvanced->GetApplicationName().c_str()); } SetTitle(strCaption); // Initialize Application Icon wxIconBundle icons; icons.AddIcon(*pSkinAdvanced->GetApplicationIcon()); icons.AddIcon(*pSkinAdvanced->GetApplicationIcon32()); SetIcons(icons); CreateControls(); // Create List Pane Items m_pList->InsertColumn(COLUMN_PROJECT, _("Project"), wxLIST_FORMAT_LEFT, 109); m_pList->InsertColumn(COLUMN_TIME, _("Time"), wxLIST_FORMAT_LEFT, 130); m_pList->InsertColumn(COLUMN_MESSAGE, _("Message"), wxLIST_FORMAT_LEFT, 378); m_pMessageInfoAttr = new wxListItemAttr( wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOWTEXT), wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW), wxNullFont ); m_pMessageErrorAttr = new wxListItemAttr( *wxRED, wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW), wxNullFont ); #if EVENT_LOG_STRIPES m_pMessageInfoGrayAttr = new wxListItemAttr( wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOWTEXT), wxColour(240, 240, 240), wxNullFont ); m_pMessageErrorGrayAttr = new wxListItemAttr(*wxRED, wxColour(240, 240, 240), wxNullFont); #else m_pMessageInfoGrayAttr = new wxListItemAttr(*m_pMessageInfoAttr); m_pMessageErrorGrayAttr = new wxListItemAttr(*m_pMessageErrorAttr); #endif SetTextColor(); RestoreState(); OnRefresh(); // Register that we had the Event Log open immediately SaveState(); return true; }
JBoolean SyGTreeDir::Close() { SaveState(); return JXWindowDirector::Close(); }
void CDlgEventLog::OnOK( wxCommandEvent& WXUNUSED(event) ) { SaveState(); SetWindowDimensions(); Close(); }
static int game_engine_exec(bContext *C, wmOperator *op) { #ifdef WITH_GAMEENGINE Scene *startscene = CTX_data_scene(C); ScrArea /* *sa, */ /* UNUSED */ *prevsa= CTX_wm_area(C); ARegion *ar, *prevar= CTX_wm_region(C); wmWindow *prevwin= CTX_wm_window(C); RegionView3D *rv3d; rcti cam_frame; (void)op; /* unused */ // bad context switch .. if(!ED_view3d_context_activate(C)) return OPERATOR_CANCELLED; /* redraw to hide any menus/popups, we don't go back to the window manager until after this operator exits */ WM_redraw_windows(C); rv3d= CTX_wm_region_view3d(C); /* sa= CTX_wm_area(C); */ /* UNUSED */ ar= CTX_wm_region(C); view3d_operator_needs_opengl(C); game_set_commmandline_options(&startscene->gm); if((rv3d->persp == RV3D_CAMOB) && (startscene->gm.framing.type == SCE_GAMEFRAMING_BARS) && (startscene->gm.stereoflag != STEREO_DOME)) { /* Letterbox */ rctf cam_framef; ED_view3d_calc_camera_border(startscene, ar, CTX_wm_view3d(C), rv3d, &cam_framef, FALSE); cam_frame.xmin = cam_framef.xmin + ar->winrct.xmin; cam_frame.xmax = cam_framef.xmax + ar->winrct.xmin; cam_frame.ymin = cam_framef.ymin + ar->winrct.ymin; cam_frame.ymax = cam_framef.ymax + ar->winrct.ymin; BLI_isect_rcti(&ar->winrct, &cam_frame, &cam_frame); } else { cam_frame.xmin = ar->winrct.xmin; cam_frame.xmax = ar->winrct.xmax; cam_frame.ymin = ar->winrct.ymin; cam_frame.ymax = ar->winrct.ymax; } SaveState(C, prevwin); StartKetsjiShell(C, ar, &cam_frame, 1); /* window wasnt closed while the BGE was running */ if(BLI_findindex(&CTX_wm_manager(C)->windows, prevwin) == -1) { prevwin= NULL; CTX_wm_window_set(C, NULL); } ED_area_tag_redraw(CTX_wm_area(C)); if(prevwin) { /* restore context, in case it changed in the meantime, for example by working in another window or closing it */ CTX_wm_region_set(C, prevar); CTX_wm_window_set(C, prevwin); CTX_wm_area_set(C, prevsa); } RestoreState(C, prevwin); //XXX restore_all_scene_cfra(scene_cfra_store); set_scene_bg(CTX_data_main(C), startscene); //XXX scene_update_for_newframe(bmain, scene, scene->lay); return OPERATOR_FINISHED; #else (void)C; /* unused */ BKE_report(op->reports, RPT_ERROR, "Game engine is disabled in this build"); return OPERATOR_CANCELLED; #endif }
void CDlgEventLog::OnColResize( wxListEvent& ) { // Register the new column widths immediately SaveState(); }
ret_code HllStartDef( int i ) /***************************/ { struct hll_list *hll; int cmd = AsmBuffer[i]->value; char buffer[MAX_ID_LEN+1+64]; DebugMsg(("HllStartDef(%u [=%s]) enter\n", i, AsmBuffer[i]->string_ptr )); #if FASTPASS /* make sure the directive is stored */ if ( StoreState == FALSE && Parse_Pass == PASS_1 ) { SaveState(); } #endif switch (cmd) { case T_DOT_REPEAT: if ( AsmBuffer[i+1]->token != T_FINAL ) { DebugMsg(("HllStartDef: unexpected tokens behind .REPEAT\n" )); AsmError( SYNTAX_ERROR ); return( ERROR ); } break; case T_DOT_IF: case T_DOT_WHILE: #if 0 /* Masm allows a missing expression! */ if ( AsmBuffer[i+1]->token == T_FINAL ) { AsmError( SYNTAX_ERROR ); return( ERROR ); } #endif break; } hll = AsmAlloc( sizeof(hll_list) ); hll->cmd = HLL_UNDEF; /* create labels which are always needed */ /* for .IF -.ENDIF without .ELSE no symexit label is needed. */ hll->symfirst = NULL; hll->symexit = NULL; hll->symtest = MakeAnonymousLabel(); hll->condlines = NULL; // structure for .IF .ELSE .ENDIF // cond jump to symtest // ... // jmp symexit // symtest: // ... // symexit: // structure for .IF .ELSEIF // cond jump to symtest // ... // jmp symexit // symtest: // cond jump to (new) symtest // ... // jmp symexit // symtest: // ... // structure for .WHILE and .REPEAT: // jmp symtest (for .WHILE only) // symfirst: // ... // symtest: (jumped to by .continue) // test end condition, cond jump to symfirst // symexit: (jumped to by .break) PushLineQueue(); switch (cmd) { case T_DOT_IF: hll->cmd = HLL_IF; /* get the C-style expression, convert to ASM code lines */ i++; if ( ERROR == EvaluateHllExpression( hll, &i, LABELTEST, FALSE ) ) { return( ERROR ); } HllPushTestLines( hll ); #if 1 /* if no lines have been created, the symtest label isn't needed */ if ( line_queue == NULL ) { AsmFree( hll->symtest ); hll->symtest = NULL; } #endif break; case T_DOT_WHILE: case T_DOT_REPEAT: /* create the label to loop start */ hll->symfirst = MakeAnonymousLabel(); hll->symexit = MakeAnonymousLabel(); if ( cmd == T_DOT_WHILE ) { i++; hll->cmd = HLL_WHILE; if ( AsmBuffer[i]->token != T_FINAL ) { if ( ERROR == EvaluateHllExpression( hll, &i, LABELFIRST, TRUE ) ) { return( ERROR ); } } else hll->condlines = ""; /* create a jump to second label */ /* optimisation: if second label is just a jump, dont jump! */ if ( hll->condlines && _memicmp(hll->condlines, "jmp", 3) ) { sprintf( buffer, " jmp %s", hll->symtest ); AddLineQueue( buffer ); } else { AsmFree( hll->symtest ); hll->symtest = NULL; } } else { i++; hll->cmd = HLL_REPEAT; } MakeLabel( buffer, hll->symfirst ); AddLineQueue( buffer ); break; } if ( AsmBuffer[i]->token != T_FINAL ) { DebugMsg(("HllStartDef: unexpected token %u [%s]\n", AsmBuffer[i]->token, AsmBuffer[i]->string_ptr )); AsmErr( SYNTAX_ERROR_EX, AsmBuffer[i]->string_ptr ); return( ERROR ); } hll->next = HllStack; HllStack = hll; if ( ModuleInfo.list ) LstWrite( LSTTYPE_DIRECTIVE, GetCurrOffset(), NULL ); if ( line_queue ) /* might be NULL! (".if 1") */ RunLineQueue(); return( NOT_ERROR ); }
void CComputerGrid::OnDestroy() { SaveState(_T("IBA")); CIBAGrid::OnDestroy(); }
FX_BOOL CFX_QuartzDeviceDriver::StretchDIBits(const CFX_DIBSource* pBitmap, FX_ARGB argb, int dest_left, int dest_top, int dest_width, int dest_height, const FX_RECT* clipRect, FX_DWORD flags, int alphaFlag , void* iccTransform , int blend_type) { SaveState(); if (clipRect) { CGContextBeginPath(_context); CGRect rect_clip = CGRectMake(clipRect->left, clipRect->top, clipRect->Width(), clipRect->Height()); rect_clip = CGRectApplyAffineTransform(rect_clip, _foxitDevice2User); CGContextAddRect(_context, rect_clip); CGContextClip(_context); } CGRect rect = CGRectMake(dest_left, dest_top, dest_width, dest_height); rect = CGRectApplyAffineTransform(rect, _foxitDevice2User); if (FXDIB_BICUBIC_INTERPOL == flags) { CGContextSetInterpolationQuality(_context, kCGInterpolationHigh); } else if (FXDIB_DOWNSAMPLE == flags) { CGContextSetInterpolationQuality(_context, kCGInterpolationNone); } else { CGContextSetInterpolationQuality(_context, kCGInterpolationMedium); } CG_SetImageTransform(dest_left, dest_top, dest_width, dest_height); CFX_DIBitmap* pBitmap1 = NULL; if (pBitmap->IsAlphaMask()) { if (pBitmap->GetBuffer()) { pBitmap1 = (CFX_DIBitmap*)pBitmap; } else { pBitmap1 = pBitmap->Clone(); } if (NULL == pBitmap1) { RestoreState(FALSE); return FALSE; } CGDataProviderRef pBitmapProvider = CGDataProviderCreateWithData(NULL, pBitmap1->GetBuffer(), pBitmap1->GetPitch() * pBitmap1->GetHeight(), NULL); CGColorSpaceRef pColorSpace = CGColorSpaceCreateDeviceGray(); CGBitmapInfo bitmapInfo = kCGImageAlphaNone | kCGBitmapByteOrderDefault; CGImageRef pImage = CGImageCreate(pBitmap1->GetWidth(), pBitmap1->GetHeight(), pBitmap1->GetBPP(), pBitmap1->GetBPP(), pBitmap1->GetPitch(), pColorSpace, bitmapInfo, pBitmapProvider, NULL, true, kCGRenderingIntentDefault); CGContextClipToMask(_context, rect, pImage); CGContextSetRGBFillColor(_context, FXARGB_R(argb) / 255.f, FXARGB_G(argb) / 255.f, FXARGB_B(argb) / 255.f, FXARGB_A(argb) / 255.f); CGContextFillRect(_context, rect); CGImageRelease(pImage); CGColorSpaceRelease(pColorSpace); CGDataProviderRelease(pBitmapProvider); if (pBitmap1 != pBitmap) { delete pBitmap1; } RestoreState(FALSE); return TRUE; } if (pBitmap->GetBPP() < 32) { pBitmap1 = pBitmap->CloneConvert(FXDIB_Rgb32); } else { if (pBitmap->GetBuffer()) { pBitmap1 = (CFX_DIBitmap*)pBitmap; } else { pBitmap1 = pBitmap->Clone(); } } if (NULL == pBitmap1) { RestoreState(FALSE); return FALSE; } if (pBitmap1->HasAlpha()) { if (pBitmap1 == pBitmap) { pBitmap1 = pBitmap->Clone(); if (!pBitmap1) { RestoreState(FALSE); return FALSE; } } for (int row = 0; row < pBitmap1->GetHeight(); row ++) { FX_LPBYTE pScanline = (FX_LPBYTE)pBitmap1->GetScanline(row); for (int col = 0; col < pBitmap1->GetWidth(); col ++) { pScanline[0] = (FX_BYTE)(pScanline[0] * pScanline[3] / 255.f + .5f); pScanline[1] = (FX_BYTE)(pScanline[1] * pScanline[3] / 255.f + .5f); pScanline[2] = (FX_BYTE)(pScanline[2] * pScanline[3] / 255.f + .5f); pScanline += 4; } } } CGContextRef ctx = createContextWithBitmap(pBitmap1); CGImageRef image = CGBitmapContextCreateImage(ctx); CGContextDrawImage(_context, rect, image); CGImageRelease(image); CGContextRelease(ctx); if (pBitmap1 != pBitmap) { delete pBitmap1; } RestoreState(FALSE); return TRUE; }
void psxRcntUpdate() { #ifdef DEBUG_ANALYSIS dbg_anacnt_psxRcntUpdate++; #endif pcsx4all_prof_start_with_pause(PCSX4ALL_PROF_COUNTERS,PCSX4ALL_PROF_CPU); u32 cycle; cycle = psxRegs.cycle; #ifdef USE_EXTRA_IO_CYCLES // CHUI: Añado ResetIoCycle para permite que en el proximo salto entre en psxBranchTest ResetIoCycle(); #endif // rcnt 0. if( cycle - rcnts[0].cycleStart >= rcnts[0].cycle ) { psxRcntReset( 0 ); } // rcnt 1. if( cycle - rcnts[1].cycleStart >= rcnts[1].cycle ) { psxRcntReset( 1 ); } // rcnt 2. if( cycle - rcnts[2].cycleStart >= rcnts[2].cycle ) { psxRcntReset( 2 ); } // rcnt base. if( cycle - rcnts[3].cycleStart >= rcnts[3].cycle ) { psxRcntReset( 3 ); spuSyncCount++; hSyncCount++; // Update spu. if( spuSyncCount >= SPU_UPD_INTERVAL ) { spuSyncCount = 0; SPU_async(); } /* // For the best times. :D // VSync irq. if( hSyncCount == VBlankStart[Config.PsxType] ) { setIrq( 0x01 ); } */ // Update lace. (with InuYasha fix) if( hSyncCount >= (Config.VSyncWA ? UDIV(HSyncTotal[Config.PsxType],BIAS) : HSyncTotal[Config.PsxType]) ) { #ifdef DEBUG_BIOS dbg("UpdateLace"); #endif hSyncCount = 0; setIrq( 0x01 ); GPU_updateLace(); pad_update(); #ifdef DEBUG_END_FRAME { static unsigned _endframe_=0; static unsigned _frametime_[DEBUG_END_FRAME+1]; _frametime_[_endframe_]=(get_ticks() #ifndef TIME_IN_MSEC /1000 #endif ); _endframe_++; if (_endframe_>DEBUG_END_FRAME) { unsigned i; for(i=1;i<_endframe_;i++) printf("FRAME %u = %u msec\n",i,_frametime_[i]-_frametime_[i-1]); pcsx4all_exit(); } } #endif if ((toSaveState)&&(SaveState_filename)) { toSaveState=0; SaveState(SaveState_filename); if (toExit) pcsx4all_exit(); } if ((toLoadState)&&(SaveState_filename)) { toLoadState=0; LoadState(SaveState_filename); pcsx4all_prof_reset(); #ifdef PROFILER_PCSX4ALL _pcsx4all_prof_end(PCSX4ALL_PROF_CPU,0); #endif pcsx4all_prof_start(PCSX4ALL_PROF_CPU); psxCpu->Execute(); pcsx4all_prof_end(PCSX4ALL_PROF_CPU); pcsx4all_exit(); } } } pcsx4all_prof_end_with_resume(PCSX4ALL_PROF_COUNTERS,PCSX4ALL_PROF_CPU); }