示例#1
0
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

}
示例#2
0
文件: pmenu.cpp 项目: garyqinyu/abv
/*--------------------------------------------------------------------------*/
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();
}
示例#3
0
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();
        }
    }
}
示例#4
0
文件: pclight.cpp 项目: garyqinyu/abv
/*--------------------------------------------------------------------------*/
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();
}
示例#5
0
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;
};
示例#6
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;
}
示例#7
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();
    }
示例#9
0
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();
}
示例#10
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();

		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;
}
示例#11
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;
}
示例#12
0
文件: pbutton.cpp 项目: garyqinyu/abv
/*--------------------------------------------------------------------------*/
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();
}
示例#13
0
文件: pwindow.cpp 项目: garyqinyu/abv
/*--------------------------------------------------------------------------*/
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;
}
示例#14
0
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;
}
示例#15
0
文件: pbutton.cpp 项目: garyqinyu/abv
/*--------------------------------------------------------------------------*/
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();
}
示例#16
0
文件: pgroup.cpp 项目: garyqinyu/abv
/*--------------------------------------------------------------------------*/
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();
}
示例#17
0
文件: pprompt.cpp 项目: garyqinyu/abv
/*--------------------------------------------------------------------------*/
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();
}
示例#18
0
文件: help.cpp 项目: garyqinyu/abv
/*--------------------------------------------------------------------------*/
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();
}
示例#19
0
文件: pwindow.cpp 项目: garyqinyu/abv
/*--------------------------------------------------------------------------*/
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();
        }
    }
}
示例#20
0
文件: pbutton.cpp 项目: garyqinyu/abv
/*--------------------------------------------------------------------------*/
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();
}
示例#21
0
文件: pwindow.cpp 项目: garyqinyu/abv
/*--------------------------------------------------------------------------*/
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();
}
示例#22
0
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;
}
示例#23
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);
}
示例#25
0
文件: pmenu.cpp 项目: garyqinyu/abv
/*--------------------------------------------------------------------------*/
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();
}
示例#26
0
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;
};
示例#27
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;
	}

	// 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;
}
示例#28
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();
}
示例#29
0
/* 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(&params->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;	
	}

}
示例#30
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;
}