void Game::FrameLoop() { #if CA_PLATFORM_DESKTOP while (m_IsRunning == true) { if (m_IsRunning == true) { #endif // CA_PLATFORM_DESKTOP HandleWindowEvents(); m_GameTime.Start(); Update(m_GameTime); CA_PROFILE("Game::Draw"); BeginDraw(); Draw(); EndDraw(); m_GameTime.End(); if (m_NeedResize == true) { Resize(); m_NeedResize = false; } #if CA_PLATFORM_DESKTOP } // if (m_IsRunning == true) } // while (m_IsRunning == true) #endif // CA_PLATFORM_DESKTOP }
/*--------------------------------------------------------------------------*/ void PegMenu::Draw(void) { BeginDraw(); #if (PEG_NUM_COLORS >= 4) PegColor Color(muColors[PCI_NORMAL], muColors[PCI_NORMAL], CF_FILL); Rectangle(mReal, Color, 0); // outline myself: Color.uForeground = PCLR_HIGHLIGHT; Line(mReal.wLeft + 1, mReal.wTop + 1, mReal.wLeft + 1, mReal.wBottom, Color); Line(mReal.wLeft + 1, mReal.wTop + 1, mReal.wRight - 1, mReal.wTop + 1, Color); Color.uForeground = PCLR_LOWLIGHT; Line(mReal.wLeft + 1, mReal.wBottom - 1, mReal.wRight - 1, mReal.wBottom - 1, Color); Line(mReal.wRight - 1, mReal.wTop + 1, mReal.wRight - 1, mReal.wBottom - 1, Color); Color.uForeground = PCLR_SHADOW; Line(mReal.wLeft, mReal.wBottom, mReal.wRight, mReal.wBottom, Color); Line(mReal.wRight, mReal.wTop, mReal.wRight, mReal.wBottom, Color); #else // here for monochrome: PegColor Color(PCLR_SHADOW, muColors[PCI_NORMAL], CF_FILL); Rectangle(mReal, Color, 1); #endif PegThing::Draw(); EndDraw(); }
void ProcessFieldAnim(int x, int y) { int oldt, t; TSprite *s; int rx, ry, drawx, drawy; t = oldt = GetField(x, y)->Terrain2; t = CycleF(t, 389, 390, 900, 901, 902, 903, 904, 905); t = CycleF(t, 391, 392, 906, 907, 908, 909, 910, 911); t = CycleF(t, 395, 396, 397, 912, 913, 914, 915, 916); t = CycleF(t, 398, 399, 400, 918, 919, 920, 921, 922); if (t != oldt) { PlaceL2(x, y, t, 1); s = (TSprite*)(BmpTerr2[GetField(x, y)->Terrain2]); if (s) { rx = GetRelX(x), ry = GetRelY(y); drawx = 28 * (rx - ry) + 28; drawy = 14 * (rx + ry - (GetField(x, y)->Height)) + 14; StartDraw(drawx - s->dx, drawy - s->dy, s->w, s->h); PaintUnits(); EndDraw(); } } }
/*--------------------------------------------------------------------------*/ void PegColorLight::Draw() { if (!mwNumStates || !mpStateColor) { return; } BeginDraw(); PegColor Color(mpStateColor[mwCurState], mpStateColor[mwCurState], CF_FILL); if(mwStyle & LS_RECTANGLE) { StandardBorder(mpStateColor[mwCurState]); } else if(mwStyle & LS_CIRCLE) { if(mwStyle & AF_TRANSPARENT && Parent()) { StandardBorder(Parent()->muColors[PCI_NORMAL]); } SIGNED iWidth = mClient.Width() / 2; SIGNED iHeight = mClient.Height() / 2; Circle(iWidth + mClient.wLeft, iHeight + mClient.wTop, PEGMIN(iWidth, iHeight), Color, 1); PegColor Border(PCLR_SHADOW, PCLR_SHADOW, CF_NONE); Circle(iWidth + mClient.wLeft, iHeight + mClient.wTop, PEGMIN(iWidth, iHeight), Border, 1); } DrawChildren(); EndDraw(); }
void do_sys_draw(window_t *win) { // printf("%s win:%x\n", __FUNCTION__, win); window_update_layout(win); BeginDraw(); DrawWindow(0,0,0,0, NULL, 0x000000,0x41); EndDraw(); send_message((ctrl_t*)win, MSG_DRAW_CLIENT, 0, 0); if(win->win_state == FULLSCREEN) { need_update=0; return; }; blit_caption(&win->caption); blit_panel(&win->panel); // blit_client(win); need_update=0; };
int PSPSaveDialog::Update(int animSpeed) { if (GetStatus() != SCE_UTILITY_STATUS_RUNNING) return SCE_ERROR_UTILITY_INVALID_STATUS; if (!param.GetPspParam()) { ChangeStatusShutdown(SAVEDATA_SHUTDOWN_DELAY_US); return 0; } if (pendingStatus != SCE_UTILITY_STATUS_RUNNING) { // We're actually done, we're just waiting to tell the game that. return 0; } // The struct may have been updated by the game. This happens in "Where Is My Heart?" // Check if it has changed, reload it. // TODO: Cut down on preloading? This rebuilds the list from scratch. int size = Memory::Read_U32(requestAddr); if (memcmp(Memory::GetPointer(requestAddr), &originalRequest, size) != 0) { memset(&request, 0, sizeof(request)); Memory::Memcpy(&request, requestAddr, size); Memory::Memcpy(&originalRequest, requestAddr, size); lock_guard guard(paramLock); param.SetPspParam(&request); } UpdateButtons(); UpdateFade(animSpeed); okButtonImg = I_CIRCLE; cancelButtonImg = I_CROSS; okButtonFlag = CTRL_CIRCLE; cancelButtonFlag = CTRL_CROSS; if (param.GetPspParam()->common.buttonSwap == 1) { okButtonImg = I_CROSS; cancelButtonImg = I_CIRCLE; okButtonFlag = CTRL_CROSS; cancelButtonFlag = CTRL_CIRCLE; } I18NCategory *di = GetI18NCategory("Dialog"); switch (display) { case DS_SAVE_LIST_CHOICE: StartDraw(); DisplaySaveList(); DisplaySaveDataInfo1(); DisplayButtons(DS_BUTTON_OK | DS_BUTTON_CANCEL); DisplayBanner(DB_SAVE); if (IsButtonPressed(cancelButtonFlag)) { param.GetPspParam()->common.result = SCE_UTILITY_DIALOG_RESULT_CANCEL; StartFade(false); } else if (IsButtonPressed(okButtonFlag)) { // Save exist, ask user confirm if (param.GetFileInfo(currentSelectedSave).size > 0) { yesnoChoice = 0; display = DS_SAVE_CONFIRM_OVERWRITE; } else { display = DS_SAVE_SAVING; StartIOThread(); } } EndDraw(); break; case DS_SAVE_CONFIRM: StartDraw(); DisplaySaveIcon(); DisplaySaveDataInfo2(); DisplayMessage(di->T("Confirm Save", "Do you want to save this data?"), true); DisplayButtons(DS_BUTTON_OK | DS_BUTTON_CANCEL); DisplayBanner(DB_SAVE); if (IsButtonPressed(cancelButtonFlag) || (IsButtonPressed(okButtonFlag) && yesnoChoice == 0)) { param.GetPspParam()->common.result = SCE_UTILITY_DIALOG_RESULT_CANCEL; StartFade(false); } else if (IsButtonPressed(okButtonFlag)) { display = DS_SAVE_SAVING; StartIOThread(); } EndDraw(); break; case DS_SAVE_CONFIRM_OVERWRITE: StartDraw(); DisplaySaveIcon(); DisplaySaveDataInfo2(); DisplayMessage(di->T("Confirm Overwrite","Do you want to overwrite the data?"), true); DisplayButtons(DS_BUTTON_OK | DS_BUTTON_CANCEL); DisplayBanner(DB_SAVE); if (IsButtonPressed(cancelButtonFlag) || (IsButtonPressed(okButtonFlag) && yesnoChoice == 0)) { if (param.GetPspParam()->mode != SCE_UTILITY_SAVEDATA_TYPE_SAVE) display = DS_SAVE_LIST_CHOICE; else { param.GetPspParam()->common.result = SCE_UTILITY_DIALOG_RESULT_CANCEL; StartFade(false); } } else if (IsButtonPressed(okButtonFlag)) { display = DS_SAVE_SAVING; StartIOThread(); } EndDraw(); break; case DS_SAVE_SAVING: if (ioThreadStatus != SAVEIO_PENDING) { JoinIOThread(); } StartDraw(); DisplaySaveIcon(); DisplaySaveDataInfo2(); DisplayMessage(di->T("Saving","Saving\nPlease Wait...")); DisplayBanner(DB_SAVE); EndDraw(); break; case DS_SAVE_FAILED: JoinIOThread(); StartDraw(); DisplaySaveIcon(); DisplaySaveDataInfo2(); DisplayMessage(di->T("SavingFailed", "Unable to save data.")); DisplayButtons(DS_BUTTON_CANCEL); DisplayBanner(DB_SAVE); if (IsButtonPressed(cancelButtonFlag)) { // Go back to the list so they can try again. if (param.GetPspParam()->mode != SCE_UTILITY_SAVEDATA_TYPE_SAVE) { display = DS_SAVE_LIST_CHOICE; } else { param.GetPspParam()->common.result = SCE_UTILITY_DIALOG_RESULT_CANCEL; StartFade(false); } } EndDraw(); break; case DS_SAVE_DONE: if (ioThread) { JoinIOThread(); param.SetPspParam(param.GetPspParam()); } StartDraw(); DisplaySaveIcon(); DisplaySaveDataInfo2(); DisplayMessage(di->T("Save completed")); DisplayButtons(DS_BUTTON_CANCEL); DisplayBanner(DB_SAVE); if (IsButtonPressed(cancelButtonFlag)) { param.GetPspParam()->common.result = SCE_UTILITY_DIALOG_RESULT_SUCCESS; // Set the save to use for autosave and autoload param.SetSelectedSave(param.GetFileInfo(currentSelectedSave).idx); StartFade(false); } EndDraw(); break; case DS_LOAD_LIST_CHOICE: StartDraw(); DisplaySaveList(); DisplaySaveDataInfo1(); DisplayButtons(DS_BUTTON_OK | DS_BUTTON_CANCEL); DisplayBanner(DB_LOAD); if (IsButtonPressed(cancelButtonFlag)) { param.GetPspParam()->common.result = SCE_UTILITY_DIALOG_RESULT_CANCEL; StartFade(false); } else if (IsButtonPressed(okButtonFlag)) { display = DS_LOAD_LOADING; StartIOThread(); } EndDraw(); break; case DS_LOAD_CONFIRM: StartDraw(); DisplaySaveIcon(); DisplaySaveDataInfo2(); DisplayMessage(di->T("ConfirmLoad", "Load this data?"), true); DisplayButtons(DS_BUTTON_OK | DS_BUTTON_CANCEL); DisplayBanner(DB_LOAD); if (IsButtonPressed(cancelButtonFlag) || (IsButtonPressed(okButtonFlag) && yesnoChoice == 0)) { param.GetPspParam()->common.result = SCE_UTILITY_DIALOG_RESULT_CANCEL; StartFade(false); } else if (IsButtonPressed(okButtonFlag)) { display = DS_LOAD_LOADING; StartIOThread(); } EndDraw(); break; case DS_LOAD_LOADING: if (ioThreadStatus != SAVEIO_PENDING) { JoinIOThread(); } StartDraw(); DisplaySaveIcon(); DisplaySaveDataInfo2(); DisplayMessage(di->T("Loading","Loading\nPlease Wait...")); DisplayBanner(DB_LOAD); EndDraw(); break; case DS_LOAD_FAILED: JoinIOThread(); StartDraw(); DisplaySaveIcon(); DisplaySaveDataInfo2(); DisplayMessage(di->T("LoadingFailed", "Unable to load data.")); DisplayButtons(DS_BUTTON_CANCEL); DisplayBanner(DB_LOAD); if (IsButtonPressed(cancelButtonFlag)) { // Go back to the list so they can try again. if (param.GetPspParam()->mode != SCE_UTILITY_SAVEDATA_TYPE_LOAD) { display = DS_LOAD_LIST_CHOICE; } else { param.GetPspParam()->common.result = SCE_UTILITY_DIALOG_RESULT_CANCEL; StartFade(false); } } EndDraw(); break; case DS_LOAD_DONE: JoinIOThread(); StartDraw(); DisplaySaveIcon(); DisplaySaveDataInfo2(); DisplayMessage(di->T("Load completed")); DisplayButtons(DS_BUTTON_CANCEL); DisplayBanner(DB_LOAD); // Allow OK to be pressed as well to confirm the save. // The PSP only allows cancel, but that's generally not great UX. // Allowing this here makes it quicker for most users to get into the actual game. if (IsButtonPressed(cancelButtonFlag) || IsButtonPressed(okButtonFlag)) { param.GetPspParam()->common.result = SCE_UTILITY_DIALOG_RESULT_SUCCESS; // Set the save to use for autosave and autoload param.SetSelectedSave(param.GetFileInfo(currentSelectedSave).idx); StartFade(false); } EndDraw(); break; case DS_LOAD_NODATA: StartDraw(); DisplayMessage(di->T("There is no data")); DisplayButtons(DS_BUTTON_CANCEL); DisplayBanner(DB_LOAD); if (IsButtonPressed(cancelButtonFlag)) { param.GetPspParam()->common.result = SCE_UTILITY_SAVEDATA_ERROR_LOAD_NO_DATA; StartFade(false); } EndDraw(); break; case DS_DELETE_LIST_CHOICE: StartDraw(); DisplaySaveList(); DisplaySaveDataInfo1(); DisplayButtons(DS_BUTTON_OK | DS_BUTTON_CANCEL); DisplayBanner(DB_DELETE); if (IsButtonPressed(cancelButtonFlag)) { param.GetPspParam()->common.result = SCE_UTILITY_DIALOG_RESULT_CANCEL; StartFade(false); } else if (IsButtonPressed(okButtonFlag)) { yesnoChoice = 0; display = DS_DELETE_CONFIRM; } EndDraw(); break; case DS_DELETE_CONFIRM: StartDraw(); DisplaySaveIcon(); DisplaySaveDataInfo2(); DisplayMessage(di->T("DeleteConfirm", "This save data will be deleted.\nAre you sure you want to continue?"), true); DisplayButtons(DS_BUTTON_OK | DS_BUTTON_CANCEL); DisplayBanner(DB_DELETE); if (IsButtonPressed(cancelButtonFlag)) display = DS_DELETE_LIST_CHOICE; else if (IsButtonPressed(okButtonFlag)) { if (yesnoChoice == 0) display = DS_DELETE_LIST_CHOICE; else { display = DS_DELETE_DELETING; StartIOThread(); } } EndDraw(); break; case DS_DELETE_DELETING: if (ioThreadStatus != SAVEIO_PENDING) { JoinIOThread(); } StartDraw(); DisplayMessage(di->T("Deleting","Deleting\nPlease Wait...")); DisplayBanner(DB_DELETE); EndDraw(); break; case DS_DELETE_FAILED: JoinIOThread(); StartDraw(); DisplayMessage(di->T("DeleteFailed", "Unable to delete data.")); DisplayButtons(DS_BUTTON_CANCEL); DisplayBanner(DB_DELETE); if (IsButtonPressed(cancelButtonFlag)) { display = DS_DELETE_LIST_CHOICE; } EndDraw(); break; case DS_DELETE_DONE: if (ioThread) { JoinIOThread(); param.SetPspParam(param.GetPspParam()); } StartDraw(); DisplayMessage(di->T("Delete completed")); DisplayButtons(DS_BUTTON_CANCEL); DisplayBanner(DB_DELETE); if (IsButtonPressed(cancelButtonFlag)) { if (param.GetFilenameCount() == 0) display = DS_DELETE_NODATA; else display = DS_DELETE_LIST_CHOICE; } EndDraw(); break; case DS_DELETE_NODATA: StartDraw(); DisplayMessage(di->T("There is no data")); DisplayButtons(DS_BUTTON_CANCEL); DisplayBanner(DB_DELETE); if (IsButtonPressed(cancelButtonFlag)) { param.GetPspParam()->common.result = SCE_UTILITY_SAVEDATA_ERROR_DELETE_NO_DATA; StartFade(false); } EndDraw(); break; case DS_NONE: // For action which display nothing switch (ioThreadStatus) { case SAVEIO_NONE: StartIOThread(); break; case SAVEIO_PENDING: case SAVEIO_DONE: // To make sure there aren't any timing variations, we sync the next frame. JoinIOThread(); ChangeStatus(SCE_UTILITY_STATUS_FINISHED, 0); break; } break; default: ChangeStatus(SCE_UTILITY_STATUS_FINISHED, 0); break; } if (status == SCE_UTILITY_STATUS_FINISHED || pendingStatus == SCE_UTILITY_STATUS_FINISHED) Memory::Memcpy(requestAddr, &request, request.common.size); return 0; }
/*--------------------------------------------------------------------------*/ SIGNED PegTextBox::Message(const PegMessage &Mesg) { switch (Mesg.wType) { case PM_VSCROLL: if (Mesg.lData != miTopLine) { Invalidate(); SIGNED iCount = miTopLine - (SIGNED) Mesg.lData; SIGNED iShift = iCount * miLineHeight; MoveClientObjects(0, iShift, FALSE); miTopLine = (SIGNED) Mesg.lData; // If FAST_BLIT is not defined, just redraw the lines of text // in my client area: #ifndef FAST_BLIT Draw(); #else // If we have scrolled more than the height of the client area, // just redraw myself #ifdef PEG_FULL_CLIPPING if (abs(iCount) >= miVisible || !ViewportList()) { Draw(); break; } if (!ViewportList()->mView.Contains(mClient)) { Draw(); break; } #else if (abs(iCount) >= miVisible) { Draw(); break; } #endif // Here for scrolling just a line or so. To improve speed, // we use RectMove to move most of the text, and just draw // the newly exposed lines. SIGNED iLine; PegRect ShiftRect = mClient; ShiftRect -= TB_WHITESPACE; ShiftRect.wBottom = ShiftRect.wTop + (miVisible * miLineHeight) - 1; PegPoint Put; Put.x = ShiftRect.wLeft; ClipToClient(); BeginDraw(); // Scroll as much as possible using RectMove() // if iCount < 0, we are advancing miTopLine and the lines // need to move up. Otherwise the lines need to move down. if (iCount < 0) // scroll lines up { Put.y = ShiftRect.wTop; ShiftRect.wTop -= iShift; Screen()->RectMove(this, ShiftRect, Put); iLine = miTopLine + miVisible + iCount; Put.y += (iLine - miTopLine) * miLineHeight; while (iLine < miTopLine + miVisible) { DrawTextLine(iLine, Put, TRUE); Put.y += miLineHeight; iLine++; } } else // scroll lines down { ShiftRect.wBottom -= iShift; Put.y = ShiftRect.wTop + iShift; Screen()->RectMove(this, ShiftRect, Put); // Draw top line(s) Put.y = mClient.wTop + TB_WHITESPACE; iLine = miTopLine; while (iLine < miTopLine + iCount) { DrawTextLine(iLine, Put, TRUE); Put.y += miLineHeight; iLine++; } } EndDraw(); EndClipToClient(); #endif } break; case PM_HSCROLL: if (Mesg.lData != miLeftOffset) { SIGNED iShift = miLeftOffset - (SIGNED) Mesg.lData; miLeftOffset = (SIGNED) Mesg.lData; // Let PegWindow do the shifting: ClipToClient(); MoveClientObjects(iShift, 0); EndClipToClient(); } break; #ifdef PEG_KEYBOARD_SUPPORT case PM_KEY: switch(Mesg.iData) { case PK_PGUP: SetTopLine(miTopLine - miVisible); break; case PK_PGDN: SetTopLine(miTopLine + miVisible); break; default: return PegWindow::Message(Mesg); } break; #endif default: return(PegWindow::Message(Mesg)); } return 0; }
void CRendering::ProcessFrame() { BeginDraw(); Drawing(iRect); EndDraw(); }
void cb_display() { BeginDraw(); int i; PQP_CollideResult cres; PQP_DistanceResult dres; PQP_ToleranceResult tres; double oglm[16]; switch(query_type) { case 0: // draw model 1 glColor3f(1,1,1); // setup color and transform MVtoOGL(oglm,R1[step],T1[step]); glPushMatrix(); glMultMatrixd(oglm); torus1_drawn->Draw(); // do gl rendering glPopMatrix(); // restore transform // draw model 2 MVtoOGL(oglm,R2[step],T2[step]); glPushMatrix(); glMultMatrixd(oglm); torus2_drawn->Draw(); glPopMatrix(); break; case 1: // perform collision query PQP_Collide(&cres,R1[step],T1[step],torus1_tested, R2[step],T2[step],torus2_tested, PQP_ALL_CONTACTS); // draw model 1 and its overlapping tris MVtoOGL(oglm,R1[step],T1[step]); glPushMatrix(); glMultMatrixd(oglm); glColor3f(1,1,1); torus1_drawn->Draw(); glColor3f(1,0,0); for(i = 0; i < cres.NumPairs(); i++) { torus1_drawn->DrawTri(cres.Id1(i)); } glPopMatrix(); // draw model 2 and its overlapping tris MVtoOGL(oglm,R2[step],T2[step]); glPushMatrix(); glMultMatrixd(oglm); glColor3f(1,1,1); torus2_drawn->Draw(); glColor3f(1,0,0); for(i = 0; i < cres.NumPairs(); i++) { torus2_drawn->DrawTri(cres.Id2(i)); } glPopMatrix(); break; case 2: // perform distance query PQP_Distance(&dres,R1[step],T1[step],torus1_tested, R2[step],T2[step],torus2_tested, 0.0,0.0); // draw models glColor3f(1,1,1); MVtoOGL(oglm,R1[step],T1[step]); glPushMatrix(); glMultMatrixd(oglm); torus1_drawn->Draw(); glPopMatrix(); MVtoOGL(oglm,R2[step],T2[step]); glPushMatrix(); glMultMatrixd(oglm); torus2_drawn->Draw(); glPopMatrix(); // draw the closest points as small spheres glColor3f(0,1,0); PQP_REAL P1[3],P2[3],V1[3],V2[3]; VcV(P1,dres.P1()); VcV(P2,dres.P2()); // each point is in the space of its model; // transform to world space MxVpV(V1,R1[step],P1,T1[step]); glPushMatrix(); glTranslated(V1[0],V1[1],V1[2]); glutSolidSphere(.01,15,15); glPopMatrix(); MxVpV(V2,R2[step],P2,T2[step]); glPushMatrix(); glTranslated(V2[0],V2[1],V2[2]); glutSolidSphere(.01,15,15); glPopMatrix(); // draw the line between the closest points glDisable(GL_LIGHTING); glBegin(GL_LINES); glVertex3v(V1); glVertex3v(V2); glEnd(); glEnable(GL_LIGHTING); break; case 3: // perform tolerance query PQP_Tolerance(&tres,R1[step],T1[step],torus1_tested, R2[step],T2[step],torus2_tested, tolerance); if (tres.CloserThanTolerance()) glColor3f(0,0,1); else glColor3f(1,1,1); // draw models MVtoOGL(oglm,R1[step],T1[step]); glPushMatrix(); glMultMatrixd(oglm); torus1_drawn->Draw(); glPopMatrix(); MVtoOGL(oglm,R2[step],T2[step]); glPushMatrix(); glMultMatrixd(oglm); torus2_drawn->Draw(); glPopMatrix(); break; } EndDraw(); }
int PSPMsgDialog::Update() { if (status != SCE_UTILITY_STATUS_RUNNING) { return 0; } if((flag & DS_ERROR)) { status = SCE_UTILITY_STATUS_FINISHED; } else { UpdateFade(); buttons = __CtrlPeekButtons(); okButtonImg = I_CIRCLE; cancelButtonImg = I_CROSS; okButtonFlag = CTRL_CIRCLE; cancelButtonFlag = CTRL_CROSS; if(messageDialog.common.buttonSwap == 1) { okButtonImg = I_CROSS; cancelButtonImg = I_CIRCLE; okButtonFlag = CTRL_CROSS; cancelButtonFlag = CTRL_CIRCLE; } StartDraw(); if((flag & DS_MSG) || (flag & DS_ERRORMSG)) DisplayMessage(msgText); if(flag & DS_YESNO) DisplayYesNo(); if(flag & DS_OK) DisplayOk(); if(flag & DS_VALIDBUTTON) DisplayEnter(); if(flag & DS_CANCELBUTTON) DisplayBack(); if (IsButtonPressed(cancelButtonFlag) && (flag & DS_CANCELBUTTON)) { if(messageDialog.common.size == SCE_UTILITY_MSGDIALOG_SIZE_V3 || ((messageDialog.common.size == SCE_UTILITY_MSGDIALOG_SIZE_V2) && (flag & DS_YESNO))) messageDialog.buttonPressed = 3; else messageDialog.buttonPressed = 0; StartFade(false); } else if(IsButtonPressed(okButtonFlag) && (flag & DS_VALIDBUTTON)) { if(yesnoChoice == 0) { messageDialog.buttonPressed = 2; } else { messageDialog.buttonPressed = 1; } StartFade(false); } EndDraw(); lastButtons = buttons; } Memory::Memcpy(messageDialogAddr,&messageDialog,messageDialog.common.size); return 0; }
int PSPMsgDialog::Update() { if (status != SCE_UTILITY_STATUS_RUNNING) { return 0; } if ((flag & DS_ERROR)) { status = SCE_UTILITY_STATUS_FINISHED; } else { UpdateFade(); buttons = __CtrlPeekButtons(); okButtonImg = I_CIRCLE; cancelButtonImg = I_CROSS; okButtonFlag = CTRL_CIRCLE; cancelButtonFlag = CTRL_CROSS; if (messageDialog.common.buttonSwap == 1) { okButtonImg = I_CROSS; cancelButtonImg = I_CIRCLE; okButtonFlag = CTRL_CROSS; cancelButtonFlag = CTRL_CIRCLE; } StartDraw(); // white -> RGB(168,173,189), black -> RGB(129,134,150) // (255 - a) + (x * a / 255) = 173, x * a / 255 = 134 // a = 255 - w + b = 158, x = b * 255 / a = ? // but is not drawn using x * a + y * (255 - a) here? //PPGeDrawRect(0, 0, 480, 272, CalcFadedColor(0x9EF2D8D0)); PPGeDrawRect(0, 0, 480, 272, CalcFadedColor(0xC0C8B2AC)); if ((flag & DS_MSG) || (flag & DS_ERRORMSG)) DisplayMessage(msgText, (flag & DS_YESNO) != 0); if (flag & (DS_OK | DS_VALIDBUTTON)) DisplayButtons(DS_BUTTON_OK); if (flag & DS_CANCELBUTTON) DisplayButtons(DS_BUTTON_CANCEL); if (IsButtonPressed(cancelButtonFlag) && (flag & DS_CANCELBUTTON)) { if(messageDialog.common.size == SCE_UTILITY_MSGDIALOG_SIZE_V3 || ((messageDialog.common.size == SCE_UTILITY_MSGDIALOG_SIZE_V2) && (flag & DS_YESNO))) messageDialog.buttonPressed = 3; else messageDialog.buttonPressed = 0; StartFade(false); } else if (IsButtonPressed(okButtonFlag) && (flag & DS_VALIDBUTTON)) { if (yesnoChoice == 0) { messageDialog.buttonPressed = 2; } else { messageDialog.buttonPressed = 1; } StartFade(false); } EndDraw(); lastButtons = buttons; } Memory::Memcpy(messageDialogAddr,&messageDialog,messageDialog.common.size); return 0; }
/*--------------------------------------------------------------------------*/ void PegButton::Draw(void) { if (PegThing::Style() & AF_TRANSPARENT) { return; } PegColor Color; BeginDraw(); if (NumColors() >= 4) { Color.Set(PCLR_SHADOW, muColors[PCI_NORMAL], CF_FILL); #if defined(ACTIVE_BUTTON_COLOR_CHANGE) if (StatusIs(PSF_CURRENT)) { Color.uBackground = muColors[PCI_SELECTED]; } #endif // fill in the face: mClient = mReal; mClient--; Rectangle(mReal, Color, 0); if (mwStyle & FF_NONE) { #ifdef PEG_DRAW_FOCUS if (StatusIs(PSF_CURRENT)) { DrawFocusIndicator(FALSE); } #endif EndDraw(); return; } // draw the highlights: Color.uForeground = PCLR_LOWLIGHT; if (mwStyle & BF_SELECTED) { Line(mReal.wLeft + 1, mReal.wTop + 1, mReal.wRight - 1, mReal.wTop + 1, Color); Line(mReal.wLeft + 1, mReal.wTop + 2, mReal.wLeft + 1, mReal.wBottom - 1, Color); Color.uForeground = PCLR_SHADOW; mClient.wTop++; mClient.wLeft++; } else { Line(mReal.wRight - 1, mReal.wTop + 1, mReal.wRight - 1, mReal.wBottom - 1, Color); Line(mReal.wLeft + 1, mReal.wBottom - 1, mReal.wRight - 2, mReal.wBottom - 1, Color); Color.uForeground = PCLR_HIGHLIGHT; mClient.wRight--; mClient.wBottom--; } if (mwStyle & BF_FULLBORDER) { Line(mReal.wLeft + 1, mReal.wTop + 1, mReal.wLeft + 1, mReal.wBottom, Color); Line(mReal.wLeft + 1, mReal.wTop + 1, mReal.wRight - 1, mReal.wTop + 1, Color); mClient.wTop++; mClient.wLeft++; } else { Line(mReal.wLeft, mReal.wTop, mReal.wLeft, mReal.wBottom, Color); Line(mReal.wLeft, mReal.wTop, mReal.wRight, mReal.wTop, Color); } if (mwStyle & BF_SELECTED) { Color.uForeground = PCLR_HIGHLIGHT; } else { Color.uForeground = PCLR_SHADOW; } Line(mReal.wLeft, mReal.wBottom, mReal.wRight, mReal.wBottom, Color); Line(mReal.wRight, mReal.wTop, mReal.wRight, mReal.wBottom, Color); } else { // here for monochrome: PegColor Color(PCLR_SHADOW, muColors[PCI_NORMAL], CF_FILL); #if defined(ACTIVE_BUTTON_COLOR_CHANGE) if (StatusIs(PSF_CURRENT)) { Color.uBackground = muColors[PCI_SELECTED]; } #endif mClient = mReal; Rectangle(mReal, Color, 1); mClient--; if (mwStyle & BF_SELECTED) { mClient.wTop++; mClient.wLeft++; Line(mReal.wLeft, mReal.wTop + 1, mReal.wRight, mReal.wTop + 1, Color); Line(mReal.wLeft + 1, mReal.wTop + 2, mReal.wLeft + 1, mReal.wBottom, Color); } else { mClient.wRight--; mClient.wBottom--; Line(mReal.wLeft, mReal.wBottom - 1, mReal.wRight, mReal.wBottom - 1, Color); Line(mReal.wRight - 1, mReal.wTop + 1, mReal.wRight - 1, mReal.wBottom - 1, Color); } } #ifdef PEG_DRAW_FOCUS if (StatusIs(PSF_CURRENT)) { DrawFocusIndicator(FALSE); } #endif EndDraw(); }
/*--------------------------------------------------------------------------*/ void PegWindow::DrawMoveFrame(BOOL bErase) { if (bErase) { if (!mbMoveFrame) { return; } mbMoveFrame = FALSE; } else { if (mbMoveFrame) { return; } mbMoveFrame = TRUE; } PegRect Invalid = mReal; if (mMovePoint.x > Parent()->mClient.wRight) { mMovePoint.x = Parent()->mClient.wRight; } else { if (mMovePoint.x < Parent()->mClient.wLeft) { mMovePoint.x = Parent()->mClient.wLeft; } } if (mMovePoint.y > Parent()->mClient.wBottom) { mMovePoint.y = Parent()->mClient.wBottom; } else { if (mMovePoint.y < Parent()->mClient.wTop) { mMovePoint.y = Parent()->mClient.wTop; } } int xShift = mMovePoint.x - mStartMove.x; int yShift = mMovePoint.y - mStartMove.y; switch(muMoveMode) { case PMM_MOVEALL: Invalid.Shift(xShift, yShift); break; case PMM_MOVERIGHT: Invalid.wRight += xShift; break; case PMM_MOVELEFT: Invalid.wLeft += xShift; break; case PMM_MOVETOP: Invalid.wTop += yShift; break; case PMM_MOVEBOTTOM: Invalid.wBottom += yShift; break; case PMM_MOVEUL: Invalid.wLeft += xShift; Invalid.wTop += yShift; break; case PMM_MOVELL: Invalid.wLeft += xShift; Invalid.wBottom += yShift; break; case PMM_MOVEUR: Invalid.wRight += xShift; Invalid.wTop += yShift; break; case PMM_MOVELR: Invalid.wRight += xShift; Invalid.wBottom += yShift; break; } CheckResizeRect(Invalid); PegRect OldClip = mClip; mClip = Parent()->mClip & Parent()->mClient; Invalidate(Invalid); BeginDraw(); Screen()->RectangleXOR(this, Invalid); EndDraw(); mClip = OldClip; }
void COGLWin::Display() { //printf("Display\n"); if (m_bInDisplay) return; m_bInDisplay = true; bool bRedisplay = false; //printf("Enter Display\n"); // Always call this function before drawing // Now we display, so we can allow idle loop to check script. m_bWaitWithIdleForNextDisplay = false; // Reset Perspective Angle to standard SetPerspectiveAngle(70); BeginDraw(); // Save Frame Transform float fFrameAngle = m_fFrameAngle; STransform Trans = m_mTransform[0]; bool bRedraw = false; bool bEnable2dView = false; bool b2dViewChanged = false; int iActRTMode = GetActRTMode(); if (iActRTMode && m_mTransform[iActRTMode].iFlags) AddExecModeVar(EXEC_MODE_USER); if (m_bCodeChanged) { bRedraw = true; m_bCodeChanged = false; } else { for(int i=1;i<=9;i++) { if (m_mTransform[i].iFlags) { bRedraw = true; break; } } if (m_iExecMode & EXEC_MODE_TOOL || m_iExecMode & EXEC_MODE_LINK || m_iExecMode & EXEC_MODE_KEYUP || m_iExecMode & EXEC_MODE_KEYDOWN) //|| //m_iExecMode & EXEC_MODE_RESHAPE) { bRedraw = true; m_bCheckForAnimate = true; } // if (!m_mTransform[0].iFlags) // bRedraw = true; } if (HasError() && !bRedraw) { // Draw Frame Box (optional) if (m_dFrameBoxSize > 0.0 && !m_b2dView) DrawBox((float)m_dFrameBoxSize); EndDraw(); //SetExecModeVar(EXEC_MODE_NONE); m_bInDisplay = false; return; } glEnable(GL_ALPHA_TEST); glAlphaFunc(GL_GEQUAL, 1.0f); // Check whether only space has been transformed if (bRedraw) { CCodeVar Var; // Start drawing into display list m_dlSpace.BeginDraw(true); // Draw Frame Box (optional) // DrawBox(3.0); // Draw you own stuff Draw(); // End drawing into display list m_dlSpace.EndDraw(); if (!HasError()) { // Check whether Frame Box is to be drawn and in what size if (m_Parse.GetVar("_FrameBoxSize", Var)) { TCVScalar dVal; if (Var.CastToScalar(dVal)) m_dFrameBoxSize = dVal; } else m_dFrameBoxSize = 3.0; // Set Background Color if (m_Parse.GetVar("_BGColor", Var)) { if (Var.Type() == PDT_COLOR) { COGLColor colBG = *((COGLColor *) Var.Val()); if (!(colBG == GetBGColor())) bRedisplay = true; // m_bBGColChanged = true; SetBGColor(colBG); } } //else SetBGColor(Black); if (!m_b2dView && ScriptIs2d()) { //printf("Switch to 2d view.\n"); bEnable2dView = true; b2dViewChanged = true; //m_bCodeChanged = true; //SetExecModeVar(EXEC_MODE_AGAIN); bRedisplay = true; } else if (m_b2dView && !ScriptIs2d()) { //printf("Switch to 3d view.\n"); bEnable2dView = false; b2dViewChanged = true; //m_bCodeChanged = true; //SetExecModeVar(EXEC_MODE_AGAIN); bRedisplay = true; } if (m_bBGColChanged) { //printf("BGCol. changed.\n"); //m_bBGColChanged = false; //SetExecModeVar(EXEC_MODE_AGAIN); bRedisplay = true; } if (m_bFrameTransChanged) { m_bFrameTransChanged = false; //SetExecModeVar(EXEC_MODE_AGAIN); bRedisplay = true; } if (bRedisplay) { //printf("Redisplay\n"); // End Draw without swapping buffers CCLUDrawBase::EndDraw(); if (b2dViewChanged) Enable2dView(bEnable2dView); // Now begin drawing again BeginDraw(); fFrameAngle = m_fFrameAngle; Trans = m_mTransform[0]; glEnable(GL_ALPHA_TEST); glAlphaFunc(GL_GEQUAL, 1.0f); m_dlSpace.Apply(); } } // Draw Frame Box (optional) if (m_dFrameBoxSize > 0.0 && !m_b2dView) DrawBox((float)m_dFrameBoxSize); } else { // Apply display list m_dlSpace.Apply(); // Draw Frame Box (optional) if (m_dFrameBoxSize > 0.0 && !m_b2dView) DrawBox((float)m_dFrameBoxSize); } if (!HasError()) { // Get ModelView Identity Matrix back glPopMatrix(); // Save it again glPushMatrix(); // Set initial origin again glTranslatef(Trans.pfTrans[0], Trans.pfTrans[1], Trans.pfTrans[2]); if (m_bUseLocalRot) { glRotatef(Trans.pfRot[2], 1, 0, 0); glRotatef(Trans.pfRot[0], 0, 1, 0); glRotatef(Trans.pfRot[1], 0, 0, 1); } else { glRotatef(fFrameAngle, Trans.pfRot[0], Trans.pfRot[1], Trans.pfRot[2]); } glEnable(GL_BLEND); glAlphaFunc(GL_LESS, 1.0f); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glDepthMask(GL_FALSE); m_dlSpace.Apply(); glDepthMask(GL_TRUE); glDisable(GL_BLEND); } glDisable(GL_ALPHA_TEST); //m_Filter << m_E3Base.vI; // Always call this function after drawing EndDraw(); //CheckToolBoxSize(); m_bCheckToolBoxSize = true; //SetExecModeVar(EXEC_MODE_NONE); m_bInDisplay = false; }
/*--------------------------------------------------------------------------*/ void PegCheckBox::Draw(void) { PegBitmap *pbm; PegColor Color; #if defined(ACTIVE_BUTTON_COLOR_CHANGE) if (StatusIs(PSF_CURRENT)) { Color.Set(muColors[PCI_STEXT], muColors[PCI_SELECTED], CF_NONE); } else { Color.Set(muColors[PCI_NTEXT], muColors[PCI_NORMAL], CF_NONE); } #else Color.Set(muColors[PCI_NTEXT], muColors[PCI_NORMAL], CF_NONE); #endif if (NumColors() < 4) { Color.uFlags = CF_FILL; } if (!(mwStyle & AF_ENABLED)) { Color.uForeground = PCLR_LOWLIGHT; if (mwStyle & BF_SELECTED) { pbm = &gbCheckBoxOnDisabledBitmap; } else { pbm = &gbCheckBoxOffDisabledBitmap; } } else { if (mwStyle & BF_SELECTED) { pbm = &gbCheckBoxOnBitmap; } else { pbm = &gbCheckBoxOffBitmap; } } BeginDraw(); SIGNED yCenter = (mReal.wTop + mReal.wBottom) / 2; PegPoint Put; #ifdef PEG_DRAW_FOCUS Put.x = mReal.wLeft + 3; #else Put.x = mReal.wLeft; #endif Put.y = yCenter - (pbm->wHeight / 2); Bitmap(Put, pbm); // now draw the text: Put.x = mReal.wLeft + pbm->wWidth + CBOX_SPACING; WORD wSize = TextHeight(mpText, mpFont); Put.y = yCenter - (wSize / 2); DrawText(Put, mpText, Color, mpFont); if (NumColors() < 4) { if (!(mwStyle & AF_ENABLED)) { Line(Put.x, yCenter, Put.x + TextWidth(mpText, mpFont) - 2, yCenter, Color); } } #ifdef PEG_DRAW_FOCUS if (StatusIs(PSF_CURRENT)) { DrawFocusIndicator(FALSE); } #endif EndDraw(); }
/*--------------------------------------------------------------------------*/ void PegGroup::Draw(void) { #ifdef PEG_UNICODE PEGCHAR cTest[2] = {'E', '\0'}; #else PEGCHAR cTest[] = "E"; #endif if (Parent()) { muColors[PCI_NORMAL] = Parent()->muColors[PCI_NORMAL]; } BeginDraw(); PegColor Color(muColors[PCI_NORMAL], muColors[PCI_NORMAL], CF_FILL); Rectangle(mClient, Color, 0); Color.Set(PCLR_LOWLIGHT, PCLR_LOWLIGHT, CF_NONE); Color.uForeground = PCLR_LOWLIGHT; SIGNED iTextLeft = mReal.wLeft + TextWidth(cTest, mpFont); SIGNED iTextRight = iTextLeft + TextWidth(mpText, mpFont) + 4; if(mpText) { Line(mReal.wLeft, mClient.wTop - 2, iTextLeft, mClient.wTop - 2, Color); Line(iTextRight, mClient.wTop - 2, mReal.wRight, mClient.wTop - 2, Color); } else { Line(mReal.wLeft, mClient.wTop - 2, mReal.wRight, mClient.wTop - 2, Color); } Line(mReal.wLeft, mClient.wTop - 1, mReal.wLeft, mReal.wBottom, Color); Line(mReal.wLeft + 1, mReal.wBottom - 1, mReal.wRight - 1, mReal.wBottom - 1, Color); Line(mReal.wRight - 1, mClient.wTop - 2, mReal.wRight - 1, mReal.wBottom - 1, Color); Color.uForeground = PCLR_HIGHLIGHT; if(mpText) { Line(mReal.wLeft + 1, mClient.wTop - 1, iTextLeft, mClient.wTop - 1, Color); Line(iTextRight, mClient.wTop - 1, mReal.wRight - 2, mClient.wTop - 1, Color); } else { Line(mReal.wLeft + 1, mClient.wTop - 1, mReal.wRight - 2, mClient.wTop - 1, Color); } Line(mReal.wLeft + 1, mClient.wTop, mReal.wLeft + 1, mReal.wBottom - 1, Color); Line(mReal.wLeft, mReal.wBottom, mReal.wRight, mReal.wBottom, Color); Line(mReal.wRight, mClient.wTop - 2, mReal.wRight, mReal.wBottom, Color); if(mpText) { if (mwStyle & AF_ENABLED) { Color.uForeground = muColors[PCI_NTEXT]; } else { Color.uForeground = PCLR_LOWLIGHT; } PegPoint Put; Put.x = iTextLeft + 2; Put.y = mReal.wTop; DrawText(Put, mpText, Color, mpFont); } PegThing::Draw(); // to draw children EndDraw(); }
/*--------------------------------------------------------------------------*/ void PegPrompt::Draw(void) { if (!Parent()) { return; } PegColor Color; if (mwStyle & AF_TRANSPARENT && Parent()) { Color.uBackground = Parent()->muColors[PCI_NORMAL]; } else { if (StatusIs(PSF_CURRENT)) { Color.uBackground = muColors[PCI_SELECTED]; } else { Color.uBackground = muColors[PCI_NORMAL]; } } BeginDraw(); if ((Style() & AF_TRANSPARENT) != AF_TRANSPARENT || (Style() & FF_MASK) != FF_NONE) { StandardBorder(Color.uBackground); } Color.uFlags = CF_NONE; if (StatusIs(PSF_CURRENT)) { Color.uForeground = muColors[PCI_STEXT]; } else { Color.uForeground = muColors[PCI_NTEXT]; } // Draw the Text: if (mpText) { PegRect mSave = mClip; mClip &= mClient; PegPoint Point; Point.y = mClient.wTop + ((mClient.Height() - TextHeight(mpText, mpFont)) / 2); if (mwStyle & TJ_LEFT) { Point.x = mClient.wLeft + 1; } else { if (mwStyle & TJ_RIGHT) { Point.x = mClient.wRight - TextWidth(mpText, mpFont) - 1; } else { Point.x = mClient.wLeft; Point.x += (mClient.Width() - TextWidth(mpText, mpFont)) / 2; } } DrawText(Point, mpText, Color, mpFont); mClip = mSave; } if (First()) { DrawChildren(); } EndDraw(); }
/*--------------------------------------------------------------------------*/ void HelpMenuClass::DisplayHelp(void) { BeginDraw(); if (iMenu == 0 ) { /* General Menu */ pCancelStatus->DataSet(NULL); pMixStatus->DataSet(NULL); pRevealStatus->DataSet(NULL); pSubtitleStatus->DataSet(NULL); pColorLinksStatus->DataSet(NULL); pTxtZoomStatus->DataSet(NULL); pTwbStatus->DataSet(LS(SID_TelewebOnOff)); pAVToogleStatus->DataSet(LS(SID_AVToggle)); pZoomSubcodeStatus->DataSet(LS(SID_ZoomMode)); pTeletextStatus->DataSet(LS(SID_TeletextOnOff)); pPrgPPrgMStatus->DataSet(LS(SID_PrgPlusMinus)); pOKStatus->DataSet(LS(SID_OK)); pStandbyIndexStatus->DataSet(LS(SID_Standby)); pDigitStatus->DataSet(LS(SID_Digit)); pSoundStatus->DataSet(LS(SID_SoundPlusMinusMute)); pLeftRightStatus->DataSet(LS(SID_LeftRight)); pMenuStatus->DataSet(LS(SID_Menu)); pUpDownStatus->DataSet(LS(SID_UpDown)); pRCBitmap->SetIcon(&gbRC_menBitmap); } else if (iMenu == 1 ) { /* Txt Menu */ pCancelStatus->DataSet(LS(SID_Cancel)); pMixStatus->DataSet(LS(SID_Mix)); pRevealStatus->DataSet(LS(SID_Reveal)); pSubtitleStatus->DataSet(LS(SID_Subtitle)); pColorLinksStatus->DataSet(LS(SID_ColorLinks)); pTxtZoomStatus->DataSet(LS(SID_TxtZoom)); pTwbStatus->DataSet(NULL); pAVToogleStatus->DataSet(NULL); pZoomSubcodeStatus->DataSet(LS(SID_Subcode)); pTeletextStatus->DataSet(LS(SID_TeletextOnOff)); pPrgPPrgMStatus->DataSet(LS(SID_PagePlusMinus)); pOKStatus->DataSet(NULL); pStandbyIndexStatus->DataSet(LS(SID_Index)); pDigitStatus->DataSet(LS(SID_DigitTxt)); pSoundStatus->DataSet(LS(SID_SoundPlusMinusMute)); pLeftRightStatus->DataSet(LS(SID_PreviousPage)); pMenuStatus->DataSet(LS(SID_ListBasicModes)); pUpDownStatus->DataSet(LS(SID_SubpagePlusMinus)); pRCBitmap->SetIcon(&gbRC_txtBitmap); } else if (iMenu == 2 ) { /* Twb Menu */ pCancelStatus->DataSet(NULL); pMixStatus->DataSet(NULL); pRevealStatus->DataSet(NULL); pSubtitleStatus->DataSet(NULL); pColorLinksStatus->DataSet(NULL); pTxtZoomStatus->DataSet(NULL); pTwbStatus->DataSet(LS(SID_TelewebOnOff)); pAVToogleStatus->DataSet(NULL); pZoomSubcodeStatus->DataSet(NULL); pTeletextStatus->DataSet(NULL); pPrgPPrgMStatus->DataSet(NULL); pOKStatus->DataSet(LS(SID_OK)); pStandbyIndexStatus->DataSet(NULL); pDigitStatus->DataSet(NULL); pSoundStatus->DataSet(LS(SID_SoundPlusMinusMute)); pLeftRightStatus->DataSet(LS(SID_LeftRightTwb)); pMenuStatus->DataSet(LS(SID_Menu)); pUpDownStatus->DataSet(LS(SID_UpDown)); pRCBitmap->SetIcon(&gbRC_twbBitmap); } EndDraw(); Invalidate(); Draw(); }
/*--------------------------------------------------------------------------*/ void PegWindow::SetScrollMode(UCHAR uMode) { muScrollMode = uMode; if (uMode & WSM_CONTINUOUS) { AddStatus(PSF_CONTINUOUS_SCROLL); } else { RemoveStatus(PSF_CONTINUOUS_SCROLL); } if ((uMode & WSM_AUTOSCROLL) && StatusIs(PSF_VISIBLE)) { CheckAutoScroll(); } else { if (uMode & WSM_HSCROLL) { if (!mpHScroll) { mpHScroll = new PegHScroll(); mClient.wBottom -= PEG_SCROLL_WIDTH; if ((uMode & WSM_VSCROLL) && !mpVScroll) { mClient.wRight -= PEG_SCROLL_WIDTH; Add(mpHScroll); mClient.wRight += PEG_SCROLL_WIDTH; } else { Add(mpHScroll); } } } else { if (mpHScroll) { Remove(mpHScroll); mClient.wBottom += PEG_SCROLL_WIDTH; MessageQueue()->Purge(mpHScroll); delete mpHScroll; mpHScroll = NULL; } } if (uMode & WSM_VSCROLL) { if (!mpVScroll) { mpVScroll = new PegVScroll(); mClient.wRight -= PEG_SCROLL_WIDTH; Add(mpVScroll); } } else { if (mpVScroll) { Remove(mpVScroll); mClient.wRight += PEG_SCROLL_WIDTH; MessageQueue()->Purge(mpVScroll); delete mpVScroll; mpVScroll = NULL; } } } if (StatusIs(PSF_VISIBLE)) { if (mpVScroll && mpHScroll) { Invalidate(mReal); BeginDraw(); FillScrollCorner(); EndDraw(); } else { Invalidate(mReal); Draw(); } } }
/*--------------------------------------------------------------------------*/ void PegTextButton::Draw(void) { BeginDraw(); PegButton::Draw(); PegColor Color; #if defined(ACTIVE_BUTTON_COLOR_CHANGE) if (StatusIs(PSF_CURRENT)) { Color.Set(muColors[PCI_STEXT], muColors[PCI_SELECTED], CF_NONE); } else { Color.Set(muColors[PCI_NTEXT], muColors[PCI_NORMAL], CF_NONE); } #else Color.Set(muColors[PCI_NTEXT], muColors[PCI_NORMAL], CF_NONE); #endif if (NumColors() < 4) { Color.uFlags = CF_FILL; } if (!(Style() & AF_ENABLED)) { Color.uForeground = PCLR_LOWLIGHT; } // now draw the text: PegPoint Put; SIGNED iSize; if (Style() & TJ_LEFT) { #ifdef PEG_DRAW_FOCUS Put.x = mClient.wLeft + 3; #else Put.x = mClient.wLeft + 1; #endif } else { iSize = TextWidth(mpText, mpFont); if (Style() & TJ_RIGHT) { #ifdef PEG_DRAW_FOCUS Put.x = mClient.wRight - iSize - 3; #else Put.x = mClient.wRight - iSize - 1; #endif } else { Put.x = mClient.wLeft + (mClient.Width() - iSize) / 2; } } iSize = TextHeight(mpText, mpFont); if (iSize <= mClient.Height()) { Put.y = mClient.wTop + (mClient.Height() - iSize) / 2; } else { Put.y = mClient.wTop; } DrawText(Put, mpText, Color, mpFont); if (NumColors() < 4) { if (!(Style() & AF_ENABLED)) { SIGNED yCenter = (mClient.wTop + mClient.wBottom) / 2; Line(Put.x, yCenter, Put.x + TextWidth(mpText, mpFont), yCenter, Color); } } if (First()) { DrawChildren(); } EndDraw(); }
/*--------------------------------------------------------------------------*/ void PegWindow::MoveClientObjects(SIGNED xShift, SIGNED yShift, BOOL bDraw) { PegThing *Child = First(); if (StatusIs(PSF_VISIBLE)) { Invalidate(); } while(Child) { if (!(Child->StatusIs(PSF_NONCLIENT))) { PegRect MoveRect = Child->mReal; MoveRect.Shift(xShift, yShift); Child->Resize(MoveRect); } Child = Child->Next(); } if (!bDraw) { return; } #ifdef FAST_BLIT if (StatusIs(PSF_CURRENT)) //if (Presentation()->First() == this) { // scroll as much as possible using RectMove() PegPoint Put; PegRect Invalid, SaveClip; // figure out what needs to be re-drawn Invalid = mClient & mClip; SaveClip = mClient; if (xShift) { Put.y = mClient.wTop; if (xShift > 0) { Invalid.wRight = Invalid.wLeft + xShift; SaveClip.wRight -= xShift; Put.x = mClient.wLeft + xShift; } else { Invalid.wLeft = Invalid.wRight + xShift; SaveClip.wLeft -= xShift; Put.x = mClient.wLeft; } } else { Put.x = mClient.wLeft; if (yShift > 0) { Invalid.wBottom = Invalid.wTop + yShift; SaveClip.wBottom -= yShift; Put.y = mClient.wTop + yShift; } else { Invalid.wTop = Invalid.wBottom + yShift; SaveClip.wTop -= yShift; Put.y = mClient.wTop; } } BeginDraw(); Screen()->RectMove(this, SaveClip, Put); EndDraw(); SaveClip = mClip; Invalidate(Invalid); mClip = Invalid; Draw(); mClip = SaveClip; return; } #endif // for non-accelerated hardware, // forced to re-draw the client area: Draw(); }
int PSPOskDialog::Update() { buttons = __CtrlReadLatch(); int selectedRow = selectedChar / KEYSPERROW; int selectedExtra = selectedChar % KEYSPERROW; u32 limit = oskData.outtextlimit; // TODO: Test more thoroughly. Encountered a game where this was 0. if (limit <= 0) limit = 16; if (status == SCE_UTILITY_STATUS_INITIALIZE) { status = SCE_UTILITY_STATUS_RUNNING; } else if (status == SCE_UTILITY_STATUS_RUNNING) { UpdateFade(); StartDraw(); RenderKeyboard(); PPGeDrawImage(I_CROSS, 100, 220, 20, 20, 0, CalcFadedColor(0xFFFFFFFF)); PPGeDrawText("Select", 130, 220, PPGE_ALIGN_LEFT, 0.5f, CalcFadedColor(0xFFFFFFFF)); PPGeDrawImage(I_CIRCLE, 200, 220, 20, 20, 0, CalcFadedColor(0xFFFFFFFF)); PPGeDrawText("Delete", 230, 220, PPGE_ALIGN_LEFT, 0.5f, CalcFadedColor(0xFFFFFFFF)); PPGeDrawImage(I_BUTTON, 290, 220, 50, 20, 0, CalcFadedColor(0xFFFFFFFF)); PPGeDrawText("Start", 305, 220, PPGE_ALIGN_LEFT, 0.5f, CalcFadedColor(0xFFFFFFFF)); PPGeDrawText("Finish", 350, 220, PPGE_ALIGN_LEFT, 0.5f, CalcFadedColor(0xFFFFFFFF)); if (IsButtonPressed(CTRL_UP)) { selectedChar -= KEYSPERROW; } else if (IsButtonPressed(CTRL_DOWN)) { selectedChar += KEYSPERROW; } else if (IsButtonPressed(CTRL_LEFT)) { selectedChar--; if (((selectedChar + KEYSPERROW) % KEYSPERROW) == KEYSPERROW - 1) selectedChar += KEYSPERROW; } else if (IsButtonPressed(CTRL_RIGHT)) { selectedChar++; if ((selectedChar % KEYSPERROW) == 0) selectedChar -= KEYSPERROW; } selectedChar = (selectedChar + NUMBEROFVALIDCHARS) % NUMBEROFVALIDCHARS; if (IsButtonPressed(CTRL_CROSS)) { if (inputChars.size() < limit) inputChars += oskKeys[selectedRow][selectedExtra]; } else if (IsButtonPressed(CTRL_CIRCLE)) { if (inputChars.size() > 0) inputChars.resize(inputChars.size() - 1); } else if (IsButtonPressed(CTRL_START)) { StartFade(false); } EndDraw(); } else if (status == SCE_UTILITY_STATUS_FINISHED) { status = SCE_UTILITY_STATUS_SHUTDOWN; } for (u32 i = 0; i < limit; ++i) { u16 value = 0; if (i < inputChars.size()) value = 0x0000 ^ inputChars[i]; Memory::Write_U16(value, oskData.outtextPtr + (2 * i)); } oskData.outtextlength = inputChars.size(); oskParams.base.result= 0; oskData.result = PSP_UTILITY_OSK_RESULT_CHANGED; Memory::WriteStruct(oskParams.SceUtilityOskDataPtr, &oskData); Memory::WriteStruct(oskParamsAddr, &oskParams); return 0; }
void moSceneEffect::Draw( moTempo* tempogral, moEffectState* parentstate) { MOuint i; MOswitch borrar = MO_ACTIVATED; moEffect* pEffect = NULL; bool pre_effect_on = false; moRenderManager* RenderMan = GetResourceManager()->GetRenderMan(); BeginDraw( tempogral, parentstate ); #ifndef OPENGLESV2 glMatrixMode( GL_MODELVIEW ); glPushMatrix(); // Store The Modelview Matrix glLoadIdentity(); #endif /** ACTIVAR EL PRE-EFFECT */ for(i=1 /*starting from index 0+1 (first is expected to be ERASE*/; i<m_EffectManager.PreEffects().Count(); i++ ) { pEffect = m_EffectManager.PreEffects().GetRef(i); if( pEffect ) { if( pEffect->Activated() ) { pre_effect_on = true; RenderMan->BeginDrawEffect(); moEffectState fstate = pEffect->GetEffectState(); fstate.alpha = m_EffectState.alpha; pEffect->SetEffectState( fstate ); pEffect->Draw(&m_EffectState.tempo); RenderMan->EndDrawEffect(); borrar = MO_DEACTIVATED; } } } if (borrar==MO_ACTIVATED) { if( m_EffectManager.PreEffects().Count()>0 ) { pEffect = m_EffectManager.PreEffects().GetRef(0); if( pEffect ) { if( pEffect->Activated() ) { if (RenderMan) RenderMan->BeginDrawEffect(); moEffectState fstate = pEffect->GetEffectState(); fstate.alpha = m_EffectState.alpha; pEffect->SetEffectState( fstate ); pEffect->Draw(&m_EffectState.tempo); if (RenderMan) RenderMan->EndDrawEffect(); } else if (!pre_effect_on && !RenderMan->IsRenderToFBOEnabled() && !RenderMan->RenderResEqualScreenRes()) // All the preeffects are disabled, including erase. And the screen resolution is different from // the render resolution. So the last screen image has to be redrawn at render resolution. RenderMan->DrawTexture(MO_RENDER_RESOLUTION, MO_FINAL_TEX); } } } /** ACTIVAR EL EFFECT */ //Se dibujan los Effects for( i=0; i<m_EffectManager.Effects().Count(); i++ ) { pEffect = m_EffectManager.Effects().GetRef(i); if(pEffect) { if(pEffect->Activated()) { RenderMan->BeginDrawEffect(); moEffectState fstate = pEffect->GetEffectState(); fstate.alpha = m_EffectState.alpha; pEffect->SetEffectState( fstate ); pEffect->Draw(&m_EffectState.tempo); RenderMan->EndDrawEffect(); } } } //RenderMan->CopyRenderToTexture(MO_EFFECTS_TEX); /** ACTIVAR EL POST-EFFECT */ for(i=0;i<m_EffectManager.PostEffects().Count();i++) { pEffect = m_EffectManager.PostEffects().GetRef(i); if(pEffect) { if(pEffect->Activated()) { RenderMan->BeginDrawEffect(); moEffectState fstate = pEffect->GetEffectState(); fstate.alpha = m_EffectState.alpha; pEffect->SetEffectState( fstate ); pEffect->Draw(&m_EffectState.tempo); RenderMan->EndDrawEffect(); } } } ///TODO: corregir esto, debe hacerse este paso sobre la textura final de ete efecto (FBO) ///if (RenderMan) RenderMan->CopyRenderToTexture(MO_FINAL_TEX); /** GUARDAR LA TEXTURA -> scene_xxx_texture */ #ifndef OPENGLESV2 glMatrixMode(GL_PROJECTION); // Select The Projection Matrix glPopMatrix(); // Restore The Old Projection Matrix glMatrixMode(GL_MODELVIEW); // Select The Modelview Matrix glPopMatrix(); // Restore The Old Projection Matrix #endif EndDraw(); }
void GfxD3D7Device::OnPaint() { EndDraw(0x70000000); }
/*--------------------------------------------------------------------------*/ void PegMenuButton::Draw(void) { BeginDraw(); PegColor Color; PegPoint Put; if (mwStyle & BF_SEPERATOR) { int Center = (mReal.wTop + mReal.wBottom) / 2; Color.Set(PCLR_LOWLIGHT); Line(mReal.wLeft, Center, mReal.wRight, Center, Color); Color.Set(PCLR_HIGHLIGHT); Line(mReal.wLeft, Center + 1, mReal.wRight, Center + 1, Color); } else { Put.x = mReal.wLeft; if (Parent()->Type() == TYPE_MENU) { Put.x += MENU_CHECK_WIDTH * 2; } Put.y = mReal.wTop + 1; if (Parent()->Type() == TYPE_MENU) { if (NumColors() >= 4) { if (mwStyle & AF_ENABLED) { if (mbPointerOver) { Color.Set(muColors[PCI_STEXT], muColors[PCI_SELECTED], CF_FILL); } else { Color.Set(muColors[PCI_NTEXT], muColors[PCI_NORMAL], CF_FILL); } } else { Color.Set(PCLR_LOWLIGHT, muColors[PCI_NORMAL], CF_FILL); } Rectangle(mReal, Color, 0); } else { Color.Set(muColors[PCI_NTEXT], muColors[PCI_NORMAL], CF_FILL); if (mbPointerOver && (mwStyle & AF_ENABLED)) { Rectangle(mReal, Color, 2); } else { Rectangle(mReal, Color, 0); } } } else { // here if I am on the menu bar: if (NumColors() >= 4) { Color.Set(muColors[PCI_NORMAL], muColors[PCI_NORMAL], CF_FILL); Rectangle(mReal, Color, 0); PegMenuBar *pBar = (PegMenuBar *) Parent(); if (mbPointerOver && (mwStyle & AF_ENABLED) || mbSubVisible) { if (pBar->InFlyoverMode()) { Color.uForeground = PCLR_LOWLIGHT; } else { Color.uForeground = PCLR_HIGHLIGHT; } Line(mReal.wLeft, mReal.wTop, mReal.wRight, mReal.wTop, Color); Line(mReal.wLeft, mReal.wTop, mReal.wLeft, mReal.wBottom, Color); if (pBar->InFlyoverMode()) { Color.uForeground = PCLR_HIGHLIGHT; } else { Color.uForeground = PCLR_LOWLIGHT; } Line(mReal.wLeft + 1, mReal.wBottom, mReal.wRight, mReal.wBottom, Color); Line(mReal.wRight, mReal.wTop, mReal.wRight, mReal.wBottom, Color); } if (mwStyle & AF_ENABLED) { Color.uForeground = muColors[PCI_NTEXT]; } else { Color.uForeground = PCLR_LOWLIGHT; } } else { // here for monochrome Color.Set(muColors[PCI_NTEXT], muColors[PCI_NORMAL], CF_FILL); if (mbPointerOver && (mwStyle & AF_ENABLED) || mbSubVisible) { Rectangle(mReal, Color, 1); } else { Rectangle(mReal, Color, 0); } } Put.x += (mReal.Width() - TextWidth(mpText, mpFont)) / 2; } // finally put the text on top: Color.uFlags = CF_NONE; DrawText(Put, mpText, Color, mpFont, mwStrLen); } if (Parent()->Type() == TYPE_MENU && mpSubMenu) { Put.x = mReal.wRight - gbMoreBitmap.wWidth * 2; Put.y = mReal.wTop; Put.y += (mReal.Height() - gbMoreBitmap.wHeight) / 2; Bitmap(Put, &gbMoreBitmap); } else { if (mwStyle & BF_CHECKED) { // draw the check mark on my left: Put.x = mReal.wLeft + MENU_CHECK_WIDTH / 2; Put.y = mReal.wTop; Put.y += (mReal.Height() - gbCheckBitmap.wHeight) / 2; Bitmap(Put, &gbCheckBitmap); } else { if (mwStyle & BF_DOTTED) { Put.x = mReal.wLeft + MENU_CHECK_WIDTH / 2; Put.y = mReal.wTop; Put.y += (mReal.Height() - gbDotBitmap.wHeight) / 2; Bitmap(Put, &gbDotBitmap); } } } if (NumColors() < 4) { if (!(mwStyle & AF_ENABLED)) { Line(mReal.wLeft + 2, Put.y + mReal.Height() / 2, mReal.wRight - 2, Put.y + mReal.Height() / 2, Color); } } EndDraw(); }
window_t *create_window(char *caption, int style, int x, int y, int w, int h, handler_t handler) { char proc_info[1024]; int stride; // __asm__ __volatile__("int3"); // ctx_t *ctx = &Window.client_ctx; if(handler==0) return 0; BeginDraw(); DrawWindow(x, y, w, h, NULL,0,0x41); EndDraw(); get_proc_info(proc_info); x = *(uint32_t*)(proc_info+34); y = *(uint32_t*)(proc_info+38); w = *(uint32_t*)(proc_info+42)+1; h = *(uint32_t*)(proc_info+46)+1; Window.handler = handler; // Window.ctx = ctx; list_initialize(&Window.link); list_initialize(&Window.child); // Window.bitmap.width = 1920; // Window.bitmap.height = 1080; // Window.bitmap.flags = 0; // if( create_bitmap(&Window.bitmap) ) // { // printf("not enough memory for window bitmap\n"); // return 0; // } // ctx->pixmap = &Window.bitmap; // ctx->offset_x = 0; // ctx->offset_y = 0; Window.rc.l = x; Window.rc.t = y; Window.rc.r = x + w; Window.rc.b = y + h; Window.w = w; Window.h = h; Window.caption_txt = caption; Window.style = style; Window.child_over = NULL; Window.child_focus = NULL; init_caption(&Window); init_panel(&Window); init_frame(&Window); send_message((ctrl_t*)&Window, MSG_SIZE, 0, 0); return &Window; };
int PSPSaveDialog::Update() { switch (status) { case SCE_UTILITY_STATUS_FINISHED: status = SCE_UTILITY_STATUS_SHUTDOWN; break; default: break; } if (status != SCE_UTILITY_STATUS_RUNNING) return SCE_ERROR_UTILITY_INVALID_STATUS; if (!param.GetPspParam()) { status = SCE_UTILITY_STATUS_SHUTDOWN; return 0; } // The struct may have been updated by the game. This happens in "Where Is My Heart?" // Check if it has changed, reload it. // TODO: Cut down on preloading? This rebuilds the list from scratch. int size = Memory::Read_U32(requestAddr); if (memcmp(Memory::GetPointer(requestAddr), &originalRequest, size) != 0) { memset(&request, 0, sizeof(request)); Memory::Memcpy(&request, requestAddr, size); Memory::Memcpy(&originalRequest, requestAddr, size); param.SetPspParam(&request); } buttons = __CtrlPeekButtons(); UpdateFade(); okButtonImg = I_CIRCLE; cancelButtonImg = I_CROSS; okButtonFlag = CTRL_CIRCLE; cancelButtonFlag = CTRL_CROSS; if (param.GetPspParam()->common.buttonSwap == 1) { okButtonImg = I_CROSS; cancelButtonImg = I_CIRCLE; okButtonFlag = CTRL_CROSS; cancelButtonFlag = CTRL_CIRCLE; } I18NCategory *d = GetI18NCategory("Dialog"); switch (display) { case DS_SAVE_LIST_CHOICE: StartDraw(); DisplaySaveList(); DisplaySaveDataInfo1(); DisplayButtons(DS_BUTTON_OK | DS_BUTTON_CANCEL); DisplayBanner(DB_SAVE); if (IsButtonPressed(cancelButtonFlag)) { param.GetPspParam()->common.result = SCE_UTILITY_DIALOG_RESULT_CANCEL; StartFade(false); } else if (IsButtonPressed(okButtonFlag)) { // Save exist, ask user confirm if (param.GetFileInfo(currentSelectedSave).size > 0) { yesnoChoice = 0; display = DS_SAVE_CONFIRM_OVERWRITE; } else { display = DS_SAVE_SAVING; if (param.Save(param.GetPspParam(), GetSelectedSaveDirName())) { param.SetPspParam(param.GetPspParam()); // Optim : Just Update modified save display = DS_SAVE_DONE; } else display = DS_SAVE_LIST_CHOICE; // This will probably need error message ? } } EndDraw(); break; case DS_SAVE_CONFIRM: StartDraw(); DisplaySaveIcon(); DisplaySaveDataInfo2(); DisplayMessage(d->T("Confirm Save", "Do you want to save this data?"), true); DisplayButtons(DS_BUTTON_OK | DS_BUTTON_CANCEL); DisplayBanner(DB_SAVE); if (IsButtonPressed(cancelButtonFlag) || (IsButtonPressed(okButtonFlag) && yesnoChoice == 0)) { param.GetPspParam()->common.result = SCE_UTILITY_DIALOG_RESULT_CANCEL; StartFade(false); } else if (IsButtonPressed(okButtonFlag)) { display = DS_SAVE_SAVING; if (param.Save(param.GetPspParam(), GetSelectedSaveDirName())) { param.SetPspParam(param.GetPspParam()); // Optim : Just Update modified save display = DS_SAVE_DONE; } else { // TODO: This should probably show an error message? StartFade(false); } } EndDraw(); break; case DS_SAVE_CONFIRM_OVERWRITE: StartDraw(); DisplaySaveIcon(); DisplaySaveDataInfo2(); DisplayMessage(d->T("Confirm Overwrite","Do you want to overwrite the data?"), true); DisplayButtons(DS_BUTTON_OK | DS_BUTTON_CANCEL); DisplayBanner(DB_SAVE); if (IsButtonPressed(cancelButtonFlag) || (IsButtonPressed(okButtonFlag) && yesnoChoice == 0)) { if (param.GetPspParam()->mode != SCE_UTILITY_SAVEDATA_TYPE_SAVE) display = DS_SAVE_LIST_CHOICE; else { param.GetPspParam()->common.result = SCE_UTILITY_DIALOG_RESULT_CANCEL; StartFade(false); } } else if (IsButtonPressed(okButtonFlag)) { display = DS_SAVE_SAVING; if (param.Save(param.GetPspParam(), GetSelectedSaveDirName())) { param.SetPspParam(param.GetPspParam()); // Optim : Just Update modified save display = DS_SAVE_DONE; } else { // TODO: This should probably show an error message? if (param.GetPspParam()->mode != SCE_UTILITY_SAVEDATA_TYPE_SAVE) display = DS_SAVE_LIST_CHOICE; else StartFade(false); } } EndDraw(); break; case DS_SAVE_SAVING: StartDraw(); DisplaySaveIcon(); DisplaySaveDataInfo2(); DisplayMessage(d->T("Saving","Saving\nPlease Wait...")); DisplayBanner(DB_SAVE); EndDraw(); break; case DS_SAVE_DONE: StartDraw(); DisplaySaveIcon(); DisplaySaveDataInfo2(); DisplayMessage(d->T("Save completed")); DisplayButtons(DS_BUTTON_CANCEL); DisplayBanner(DB_SAVE); if (IsButtonPressed(cancelButtonFlag)) { param.GetPspParam()->common.result = SCE_UTILITY_DIALOG_RESULT_SUCCESS; // Set the save to use for autosave and autoload param.SetSelectedSave(param.GetFileInfo(currentSelectedSave).idx); StartFade(false); } EndDraw(); break; case DS_LOAD_LIST_CHOICE: StartDraw(); DisplaySaveList(); DisplaySaveDataInfo1(); DisplayButtons(DS_BUTTON_OK | DS_BUTTON_CANCEL); DisplayBanner(DB_LOAD); if (IsButtonPressed(cancelButtonFlag)) { param.GetPspParam()->common.result = SCE_UTILITY_DIALOG_RESULT_CANCEL; StartFade(false); } else if (IsButtonPressed(okButtonFlag)) { display = DS_LOAD_LOADING; if (param.Load(param.GetPspParam(), GetSelectedSaveDirName(), currentSelectedSave)) display = DS_LOAD_DONE; } EndDraw(); break; case DS_LOAD_CONFIRM: StartDraw(); DisplaySaveIcon(); DisplaySaveDataInfo2(); DisplayMessage(d->T("ConfirmLoad", "Load this data?"), true); DisplayButtons(DS_BUTTON_OK | DS_BUTTON_CANCEL); DisplayBanner(DB_LOAD); if (IsButtonPressed(cancelButtonFlag) || (IsButtonPressed(okButtonFlag) && yesnoChoice == 0)) { param.GetPspParam()->common.result = SCE_UTILITY_DIALOG_RESULT_CANCEL; StartFade(false); } else if (IsButtonPressed(okButtonFlag)) { display = DS_LOAD_LOADING; if (param.Load(param.GetPspParam(), GetSelectedSaveDirName(), currentSelectedSave)) display = DS_LOAD_DONE; else { param.GetPspParam()->common.result = SCE_UTILITY_DIALOG_RESULT_CANCEL; StartFade(false); } } EndDraw(); break; case DS_LOAD_LOADING: StartDraw(); DisplaySaveIcon(); DisplaySaveDataInfo2(); DisplayMessage(d->T("Loading","Loading\nPlease Wait...")); DisplayBanner(DB_LOAD); EndDraw(); break; case DS_LOAD_DONE: StartDraw(); DisplaySaveIcon(); DisplaySaveDataInfo2(); DisplayMessage(d->T("Load completed")); DisplayButtons(DS_BUTTON_CANCEL); DisplayBanner(DB_LOAD); if (IsButtonPressed(cancelButtonFlag)) { param.GetPspParam()->common.result = SCE_UTILITY_DIALOG_RESULT_SUCCESS; // Set the save to use for autosave and autoload param.SetSelectedSave(param.GetFileInfo(currentSelectedSave).idx); StartFade(false); } EndDraw(); break; case DS_LOAD_NODATA: StartDraw(); DisplayMessage(d->T("There is no data")); DisplayButtons(DS_BUTTON_CANCEL); DisplayBanner(DB_LOAD); if (IsButtonPressed(cancelButtonFlag)) { param.GetPspParam()->common.result = SCE_UTILITY_SAVEDATA_ERROR_LOAD_NO_DATA; StartFade(false); } EndDraw(); break; case DS_DELETE_LIST_CHOICE: StartDraw(); DisplaySaveList(); DisplaySaveDataInfo1(); DisplayButtons(DS_BUTTON_OK | DS_BUTTON_CANCEL); DisplayBanner(DB_DELETE); if (IsButtonPressed(cancelButtonFlag)) { param.GetPspParam()->common.result = SCE_UTILITY_DIALOG_RESULT_CANCEL; StartFade(false); } else if (IsButtonPressed(okButtonFlag)) { yesnoChoice = 0; display = DS_DELETE_CONFIRM; } EndDraw(); break; case DS_DELETE_CONFIRM: StartDraw(); DisplaySaveIcon(); DisplaySaveDataInfo2(); DisplayMessage(d->T("DeleteConfirm", "This save data will be deleted.\nAre you sure you want to continue?"), true); DisplayButtons(DS_BUTTON_OK | DS_BUTTON_CANCEL); DisplayBanner(DB_DELETE); if (IsButtonPressed(cancelButtonFlag)) display = DS_DELETE_LIST_CHOICE; else if (IsButtonPressed(okButtonFlag)) { if (yesnoChoice == 0) display = DS_DELETE_LIST_CHOICE; else { display = DS_DELETE_DELETING; if (param.Delete(param.GetPspParam(),currentSelectedSave)) { param.SetPspParam(param.GetPspParam()); // Optim : Just Update modified save display = DS_DELETE_DONE; } else display = DS_DELETE_LIST_CHOICE; // This will probably need error message ? } } EndDraw(); break; case DS_DELETE_DELETING: StartDraw(); DisplayMessage(d->T("Deleting","Deleting\nPlease Wait...")); DisplayBanner(DB_DELETE); EndDraw(); break; case DS_DELETE_DONE: StartDraw(); DisplayMessage(d->T("Delete completed")); DisplayButtons(DS_BUTTON_CANCEL); DisplayBanner(DB_DELETE); if (IsButtonPressed(cancelButtonFlag)) { if (param.GetFilenameCount() == 0) display = DS_DELETE_NODATA; else display = DS_DELETE_LIST_CHOICE; } EndDraw(); break; case DS_DELETE_NODATA: StartDraw(); DisplayMessage(d->T("There is no data")); DisplayButtons(DS_BUTTON_CANCEL); DisplayBanner(DB_DELETE); if (IsButtonPressed(cancelButtonFlag)) { param.GetPspParam()->common.result = SCE_UTILITY_SAVEDATA_ERROR_DELETE_NO_DATA; StartFade(false); } EndDraw(); break; case DS_NONE: // For action which display nothing { switch ((SceUtilitySavedataType)(u32)param.GetPspParam()->mode) { case SCE_UTILITY_SAVEDATA_TYPE_LOAD: // Only load and exit case SCE_UTILITY_SAVEDATA_TYPE_AUTOLOAD: if (param.Load(param.GetPspParam(), GetSelectedSaveDirName(), currentSelectedSave)) param.GetPspParam()->common.result = 0; else param.GetPspParam()->common.result = SCE_UTILITY_SAVEDATA_ERROR_LOAD_NO_DATA; status = SCE_UTILITY_STATUS_FINISHED; break; case SCE_UTILITY_SAVEDATA_TYPE_SAVE: // Only save and exit case SCE_UTILITY_SAVEDATA_TYPE_AUTOSAVE: if (param.Save(param.GetPspParam(), GetSelectedSaveDirName())) param.GetPspParam()->common.result = 0; else param.GetPspParam()->common.result = SCE_UTILITY_SAVEDATA_ERROR_SAVE_MS_NOSPACE; status = SCE_UTILITY_STATUS_FINISHED; break; case SCE_UTILITY_SAVEDATA_TYPE_SIZES: param.GetPspParam()->common.result = param.GetSizes(param.GetPspParam()); status = SCE_UTILITY_STATUS_FINISHED; break; case SCE_UTILITY_SAVEDATA_TYPE_LIST: param.GetList(param.GetPspParam()); param.GetPspParam()->common.result = 0; status = SCE_UTILITY_STATUS_FINISHED; break; case SCE_UTILITY_SAVEDATA_TYPE_FILES: param.GetPspParam()->common.result = param.GetFilesList(param.GetPspParam()); status = SCE_UTILITY_STATUS_FINISHED; break; case SCE_UTILITY_SAVEDATA_TYPE_GETSIZE: { bool result = param.GetSize(param.GetPspParam()); // TODO: According to JPCSP, should test/verify this part but seems edge casey. if (MemoryStick_State() != PSP_MEMORYSTICK_STATE_DRIVER_READY) param.GetPspParam()->common.result = SCE_UTILITY_SAVEDATA_ERROR_RW_NO_MEMSTICK; else if (result) param.GetPspParam()->common.result = 0; else param.GetPspParam()->common.result = SCE_UTILITY_SAVEDATA_ERROR_RW_NO_DATA; status = SCE_UTILITY_STATUS_FINISHED; } break; case SCE_UTILITY_SAVEDATA_TYPE_DELETEDATA: // TODO: This should probably actually delete something. // For now, always say it couldn't be deleted. WARN_LOG(SCEUTILITY, "FAKE sceUtilitySavedata DELETEDATA: %s", param.GetPspParam()->saveName); param.GetPspParam()->common.result = SCE_UTILITY_SAVEDATA_ERROR_RW_BAD_STATUS; status = SCE_UTILITY_STATUS_FINISHED; break; //case SCE_UTILITY_SAVEDATA_TYPE_AUTODELETE: case SCE_UTILITY_SAVEDATA_TYPE_SINGLEDELETE: if (param.Delete(param.GetPspParam(), param.GetSelectedSave())) param.GetPspParam()->common.result = 0; else param.GetPspParam()->common.result = SCE_UTILITY_SAVEDATA_ERROR_DELETE_NO_DATA; status = SCE_UTILITY_STATUS_FINISHED; break; // TODO: Should reset the directory's other files. case SCE_UTILITY_SAVEDATA_TYPE_MAKEDATA: case SCE_UTILITY_SAVEDATA_TYPE_MAKEDATASECURE: if (param.Save(param.GetPspParam(), GetSelectedSaveDirName(), param.GetPspParam()->mode == SCE_UTILITY_SAVEDATA_TYPE_MAKEDATASECURE)) param.GetPspParam()->common.result = 0; else param.GetPspParam()->common.result = SCE_UTILITY_SAVEDATA_ERROR_RW_NO_DATA; status = SCE_UTILITY_STATUS_FINISHED; break; case SCE_UTILITY_SAVEDATA_TYPE_WRITEDATA: case SCE_UTILITY_SAVEDATA_TYPE_WRITEDATASECURE: if (param.Save(param.GetPspParam(), GetSelectedSaveDirName(), param.GetPspParam()->mode == SCE_UTILITY_SAVEDATA_TYPE_WRITEDATASECURE)) param.GetPspParam()->common.result = 0; else param.GetPspParam()->common.result = SCE_UTILITY_SAVEDATA_ERROR_RW_NO_DATA; status = SCE_UTILITY_STATUS_FINISHED; break; case SCE_UTILITY_SAVEDATA_TYPE_READDATA: case SCE_UTILITY_SAVEDATA_TYPE_READDATASECURE: if (param.Load(param.GetPspParam(), GetSelectedSaveDirName(), currentSelectedSave, param.GetPspParam()->mode == SCE_UTILITY_SAVEDATA_TYPE_READDATASECURE)) param.GetPspParam()->common.result = 0; else param.GetPspParam()->common.result = SCE_UTILITY_SAVEDATA_ERROR_RW_NO_DATA; // not sure if correct code status = SCE_UTILITY_STATUS_FINISHED; break; default: status = SCE_UTILITY_STATUS_FINISHED; break; } } break; default: status = SCE_UTILITY_STATUS_FINISHED; break; } lastButtons = buttons; if (status == SCE_UTILITY_STATUS_FINISHED) Memory::Memcpy(requestAddr, &request, request.common.size); return 0; }
void DisplayCB() { BeginDraw(); // set up model transformations if (animate) { rot1 += .1; rot2 += .2; rot3 += .3; } PQP_REAL R1[3][3],R2[3][3],T1[3],T2[3]; PQP_REAL M1[3][3],M2[3][3],M3[3][3]; T1[0] = -1; T1[1] = 0.0; T1[2] = 0.0; T2[0] = 1; T2[1] = 0.0; T2[2] = 0.0; MRotX(M1,rot1); MRotY(M2,rot2); MxM(M3,M1,M2); MRotZ(M1,rot3); MxM(R1,M3,M1); MRotX(M1,rot3); MRotY(M2,rot1); MxM(M3,M1,M2); MRotZ(M1,rot2); MxM(R2,M3,M1); // perform distance query PQP_REAL rel_err = 0.0; PQP_REAL abs_err = 0.0; PQP_DistanceResult res; PQP_Distance(&res,R1,T1,&bunny,R2,T2,&torus,rel_err,abs_err); // draw the models glColor3d(0.0,0.0,1.0); double oglm[16]; MVtoOGL(oglm,R1,T1); glPushMatrix(); glMultMatrixd(oglm); bunny_to_draw->Draw(); glPopMatrix(); glColor3d(0.0,1.0,0.0); MVtoOGL(oglm,R2,T2); glPushMatrix(); glMultMatrixd(oglm); torus_to_draw->Draw(); glPopMatrix(); // draw the closest points as small spheres glColor3d(1.0,0.0,0.0); PQP_REAL P1[3],P2[3],V1[3],V2[3]; VcV(P1,res.P1()); VcV(P2,res.P2()); // each point is in the space of its model; // transform to world space MxVpV(V1,R1,P1,T1); /* glPushMatrix(); glTranslated(V1[0],V1[1],V1[2]); glutSolidSphere(.05,15,15); glPopMatrix(); */ MxVpV(V2,R2,P2,T2); /* glPushMatrix(); glTranslated(V2[0],V2[1],V2[2]); glutSolidSphere(.05,15,15); glPopMatrix(); */ // draw the line between the closest points float v1p[3], v2p[3]; for (int i = 0; i < 3; ++i) { v1p[i] = V1[i]; v2p[i] = V2[i]; } //glDisable(GL_LIGHTING); glBegin(GL_LINES); glVertex3v(v1p); glVertex3v(v2p); glEnd(); //glEnable(GL_LIGHTING); EndDraw(); }
/* Compute form-factors from the shooting patch to every elements */ static void ComputeFormfactors(unsigned long shootPatch) { unsigned long i; TVector3f up[5]; TPoint3f lookat[5]; TPoint3f center; TVector3f normal, tangentU, tangentV, vec; int face; double norm; TPatch* sp; double* fp; TElement* ep; /* get the center of shootPatch */ sp = &(params->patches[shootPatch]); center = sp->center; normal = sp->normal; /* rotate the hemi-cube along the normal axis of the patch randomly */ /* this will reduce the hemi-cube aliasing artifacts */ do { vec.x = RandomFloat; vec.y = RandomFloat; vec.z = RandomFloat; /* get a tangent vector */ CrossVector(tangentU, normal, vec); NormalizeVector(norm, tangentU); } while (norm==0); /* bad choice of the random vector */ /* compute tangentV */ CrossVector(tangentV, normal, tangentU); /* assign the lookats and ups for each hemicube face */ AddVector(lookat[0], center, normal); up[0] = tangentU; AddVector(lookat[1], center, tangentU); up[1] = normal; AddVector(lookat[2], center, tangentV); up[2] = normal; SubVector(lookat[3], center, tangentU); up[3] = normal; SubVector(lookat[4], center, tangentV); up[4] = normal; /* position the hemicube slightly above the center of the shooting patch */ ScaleVector(normal, params->worldSize*0.0001); AddVector(hemicube.view.camera, center, normal); /* clear the formfactors */ fp = formfactors; for (i=params->nElements; i--; fp++) *fp = 0.0; for (face=0; face < 5; face++) { hemicube.view.lookat = lookat[face]; hemicube.view.up = up[face]; /* draw elements */ BeginDraw(&(hemicube.view), kBackgroundItem); for (i=0; i< params->nElements; i++) DrawElement(¶ms->elements[i], i); /* color element i with its index */ EndDraw(); /* get formfactors */ if (face==0) SumFactors(formfactors, hemicube.view.xRes, hemicube.view.yRes, hemicube.view.buffer, hemicube.topFactors); else SumFactors(formfactors, hemicube.view.xRes, hemicube.view.yRes/2, hemicube.view.buffer, hemicube.sideFactors); } /* compute reciprocal form-factors */ ep = params->elements; fp = formfactors; for (i=params->nElements; i--; ep++, fp++) { *fp *= sp->area / ep->area; /* This is a potential source of hemi-cube aliasing */ /* To do this right, we need to subdivide the shooting patch and reshoot. For now we just clip it to unity */ if ((*fp) > 1.0) *fp = 1.0; } }
int PSPSaveDialog::Update() { switch (status) { case SCE_UTILITY_STATUS_FINISHED: status = SCE_UTILITY_STATUS_SHUTDOWN; break; default: break; } if (status != SCE_UTILITY_STATUS_RUNNING) { return SCE_ERROR_UTILITY_INVALID_STATUS; } if (!param.GetPspParam()) { status = SCE_UTILITY_STATUS_SHUTDOWN; return 0; } buttons = __CtrlPeekButtons(); UpdateFade(); okButtonImg = I_CIRCLE; cancelButtonImg = I_CROSS; okButtonFlag = CTRL_CIRCLE; cancelButtonFlag = CTRL_CROSS; if(param.GetPspParam()->buttonSwap == 1) { okButtonImg = I_CROSS; cancelButtonImg = I_CIRCLE; okButtonFlag = CTRL_CROSS; cancelButtonFlag = CTRL_CIRCLE; } I18NCategory *d = GetI18NCategory("Dialog"); switch(display) { case DS_SAVE_LIST_CHOICE: StartDraw(); // TODO : use focus param for selected save by default DisplaySaveList(); DisplaySaveDataInfo1(); DisplayEnterBack(); if (IsButtonPressed(cancelButtonFlag)) { param.GetPspParam()->result = SCE_UTILITY_DIALOG_RESULT_CANCEL; StartFade(false); } else if (IsButtonPressed(okButtonFlag)) { // Save exist, ask user confirm if(param.GetFileInfo(currentSelectedSave).size > 0) { yesnoChoice = 0; display = DS_SAVE_CONFIRM_OVERWRITE; } else { display = DS_SAVE_SAVING; if(param.Save(param.GetPspParam(),currentSelectedSave)) { param.SetPspParam(param.GetPspParam()); // Optim : Just Update modified save display = DS_SAVE_DONE; } else { display = DS_SAVE_LIST_CHOICE; // This will probably need error message ? } } } EndDraw(); break; case DS_SAVE_CONFIRM_OVERWRITE: StartDraw(); DisplaySaveIcon(); DisplaySaveDataInfo2(); DisplayConfirmationYesNo(d->T("Do you want to overwrite the data?")); DisplayEnterBack(); if (IsButtonPressed(cancelButtonFlag)) { display = DS_SAVE_LIST_CHOICE; } else if (IsButtonPressed(okButtonFlag)) { if(yesnoChoice == 0) { display = DS_SAVE_LIST_CHOICE; } else { display = DS_SAVE_SAVING; if(param.Save(param.GetPspParam(),currentSelectedSave)) { param.SetPspParam(param.GetPspParam()); // Optim : Just Update modified save display = DS_SAVE_DONE; } else { display = DS_SAVE_LIST_CHOICE; // This will probably need error message ? } } } EndDraw(); break; case DS_SAVE_SAVING: StartDraw(); DisplaySaveIcon(); DisplaySaveDataInfo2(); DisplayInfo(d->T("Saving\nPlease Wait...")); EndDraw(); break; case DS_SAVE_DONE: StartDraw(); DisplaySaveIcon(); DisplaySaveDataInfo2(); DisplayBack(); DisplayInfo(d->T("Save completed")); if (IsButtonPressed(cancelButtonFlag)) { param.GetPspParam()->result = SCE_UTILITY_DIALOG_RESULT_SUCCESS; // Set the save to use for autosave and autoload param.SetSelectedSave(param.GetFileInfo(currentSelectedSave).idx); StartFade(false); } EndDraw(); break; case DS_LOAD_LIST_CHOICE: StartDraw(); DisplaySaveList(); DisplaySaveDataInfo1(); DisplayEnterBack(); if (IsButtonPressed(cancelButtonFlag)) { param.GetPspParam()->result = SCE_UTILITY_DIALOG_RESULT_CANCEL; StartFade(false); } else if (IsButtonPressed(okButtonFlag)) { display = DS_LOAD_LOADING; if(param.Load(param.GetPspParam(),currentSelectedSave)) { display = DS_LOAD_DONE; } } EndDraw(); break; case DS_LOAD_LOADING: StartDraw(); DisplaySaveIcon(); DisplaySaveDataInfo2(); DisplayInfo(d->T("Loading\nPlease Wait...")); EndDraw(); break; case DS_LOAD_DONE: StartDraw(); DisplaySaveIcon(); DisplaySaveDataInfo2(); DisplayBack(); DisplayInfo(d->T("Load completed")); if (IsButtonPressed(cancelButtonFlag)) { param.GetPspParam()->result = SCE_UTILITY_DIALOG_RESULT_SUCCESS; // Set the save to use for autosave and autoload param.SetSelectedSave(param.GetFileInfo(currentSelectedSave).idx); StartFade(false); } EndDraw(); break; case DS_LOAD_NODATA: StartDraw(); DisplayBack(); DisplayInfo(d->T("There is no data")); if (IsButtonPressed(cancelButtonFlag)) { param.GetPspParam()->result = SCE_UTILITY_SAVEDATA_ERROR_LOAD_NO_DATA; StartFade(false); } EndDraw(); break; case DS_DELETE_LIST_CHOICE: StartDraw(); DisplaySaveList(); DisplaySaveDataInfo1(); DisplayEnterBack(); if (IsButtonPressed(cancelButtonFlag)) { param.GetPspParam()->result = SCE_UTILITY_DIALOG_RESULT_CANCEL; StartFade(false); } else if (IsButtonPressed(okButtonFlag)) { yesnoChoice = 0; display = DS_DELETE_CONFIRM; } EndDraw(); break; case DS_DELETE_CONFIRM: StartDraw(); DisplaySaveIcon(); DisplaySaveDataInfo2(); DisplayConfirmationYesNo(d->T("This save data will be deleted.\nAre you sure you want to continue?", " This save data will be deleted.\nAre you sure you want to continue?")); DisplayEnterBack(); if (IsButtonPressed(cancelButtonFlag)) { display = DS_DELETE_LIST_CHOICE; } else if (IsButtonPressed(okButtonFlag)) { if(yesnoChoice == 0) { display = DS_DELETE_LIST_CHOICE; } else { display = DS_DELETE_DELETING; if(param.Delete(param.GetPspParam(),currentSelectedSave)) { param.SetPspParam(param.GetPspParam()); // Optim : Just Update modified save display = DS_DELETE_DONE; } else { display = DS_DELETE_LIST_CHOICE; // This will probably need error message ? } } } EndDraw(); break; case DS_DELETE_DELETING: StartDraw(); DisplayInfo(d->T("Deleting\nPlease Wait...")); EndDraw(); break; case DS_DELETE_DONE: StartDraw(); DisplayBack(); DisplayInfo(d->T("Delete completed")); if (IsButtonPressed(cancelButtonFlag)) { if(param.GetFilenameCount() == 0) display = DS_DELETE_NODATA; else display = DS_DELETE_LIST_CHOICE; } EndDraw(); break; case DS_DELETE_NODATA: StartDraw(); DisplayBack(); DisplayInfo(d->T("There is no data")); if (IsButtonPressed(cancelButtonFlag)) { param.GetPspParam()->result = SCE_UTILITY_SAVEDATA_ERROR_DELETE_NO_DATA; StartFade(false); } EndDraw(); break; case DS_NONE: // For action which display nothing { switch(param.GetPspParam()->mode) { case SCE_UTILITY_SAVEDATA_TYPE_LOAD: // Only load and exit case SCE_UTILITY_SAVEDATA_TYPE_AUTOLOAD: if(param.Load(param.GetPspParam(),param.GetSelectedSave())) param.GetPspParam()->result = 0; else param.GetPspParam()->result = SCE_UTILITY_SAVEDATA_ERROR_LOAD_NO_DATA; status = SCE_UTILITY_STATUS_FINISHED; break; case SCE_UTILITY_SAVEDATA_TYPE_SAVE: // Only save and exit case SCE_UTILITY_SAVEDATA_TYPE_AUTOSAVE: if(param.Save(param.GetPspParam(),param.GetSelectedSave())) param.GetPspParam()->result = 0; else param.GetPspParam()->result = SCE_UTILITY_SAVEDATA_ERROR_SAVE_MS_NOSPACE; status = SCE_UTILITY_STATUS_FINISHED; break; case SCE_UTILITY_SAVEDATA_TYPE_SIZES: if(param.GetSizes(param.GetPspParam())) { param.GetPspParam()->result = 0; } else { param.GetPspParam()->result = SCE_UTILITY_SAVEDATA_ERROR_SIZES_NO_DATA; } status = SCE_UTILITY_STATUS_FINISHED; break; case SCE_UTILITY_SAVEDATA_TYPE_LIST: param.GetList(param.GetPspParam()); param.GetPspParam()->result = 0; status = SCE_UTILITY_STATUS_FINISHED; break; case SCE_UTILITY_SAVEDATA_TYPE_FILES: if(param.GetFilesList(param.GetPspParam())) { param.GetPspParam()->result = 0; } else { param.GetPspParam()->result = SCE_UTILITY_SAVEDATA_ERROR_RW_NO_DATA; } status = SCE_UTILITY_STATUS_FINISHED; break; case SCE_UTILITY_SAVEDATA_TYPE_GETSIZE: { bool result = param.GetSize(param.GetPspParam()); // TODO: According to JPCSP, should test/verify this part but seems edge casey. if (MemoryStick_State() != PSP_MEMORYSTICK_STATE_DRIVER_READY) param.GetPspParam()->result = SCE_UTILITY_SAVEDATA_ERROR_RW_NO_MEMSTICK; else if (result) param.GetPspParam()->result = 0; else param.GetPspParam()->result = SCE_UTILITY_SAVEDATA_ERROR_RW_NO_DATA; status = SCE_UTILITY_STATUS_FINISHED; } break; case SCE_UTILITY_SAVEDATA_TYPE_DELETEDATA: // TODO: This should probably actually delete something. // For now, since MAKEDATA doesn't work anyway, always say it couldn't be deleted. WARN_LOG(HLE, "FAKE sceUtilitySavedata DELETEDATA: %s", param.GetPspParam()->saveName); param.GetPspParam()->result = SCE_UTILITY_SAVEDATA_ERROR_RW_BAD_STATUS; status = SCE_UTILITY_STATUS_FINISHED; break; //case SCE_UTILITY_SAVEDATA_TYPE_AUTODELETE: case SCE_UTILITY_SAVEDATA_TYPE_SINGLEDELETE: if(param.Delete(param.GetPspParam(), param.GetSelectedSave())) { param.GetPspParam()->result = 0; } else { param.GetPspParam()->result = SCE_UTILITY_SAVEDATA_ERROR_DELETE_NO_DATA; } status = SCE_UTILITY_STATUS_FINISHED; break; //case SCE_UTILITY_SAVEDATA_TYPE_MAKEDATA: case SCE_UTILITY_SAVEDATA_TYPE_MAKEDATASECURE: if(param.Save(param.GetPspParam(),param.GetSelectedSave())) param.GetPspParam()->result = 0; else param.GetPspParam()->result = SCE_UTILITY_SAVEDATA_ERROR_RW_NO_DATA; status = SCE_UTILITY_STATUS_FINISHED; break; //case SCE_UTILITY_SAVEDATA_TYPE_WRITEDATA: case SCE_UTILITY_SAVEDATA_TYPE_WRITEDATASECURE: if(param.Save(param.GetPspParam(),param.GetSelectedSave())) param.GetPspParam()->result = 0; else param.GetPspParam()->result = SCE_UTILITY_SAVEDATA_ERROR_RW_NO_DATA; status = SCE_UTILITY_STATUS_FINISHED; break; //case SCE_UTILITY_SAVEDATA_TYPE_READDATA: case SCE_UTILITY_SAVEDATA_TYPE_READDATASECURE: if(param.Load(param.GetPspParam(),param.GetSelectedSave())) param.GetPspParam()->result = 0; else param.GetPspParam()->result = SCE_UTILITY_SAVEDATA_ERROR_RW_NO_DATA; // not sure if correct code status = SCE_UTILITY_STATUS_FINISHED; break; default: status = SCE_UTILITY_STATUS_FINISHED; break; } } break; default: status = SCE_UTILITY_STATUS_FINISHED; break; } lastButtons = buttons; if(status == SCE_UTILITY_STATUS_FINISHED) { Memory::Memcpy(requestAddr,&request,request.size); } return 0; }