mirror of
https://github.com/rvtr/ctr_test_tools.git
synced 2025-10-31 13:41:24 -04:00
git-svn-id: file:///Volumes/Transfer/gigaleak_20231201/2020-09-30%20-%20paladin.7z/paladin/ctr_test_tools@8 6b0af911-cb57-b745-895f-eec5701120e1
311 lines
10 KiB
C++
311 lines
10 KiB
C++
///*---------------------------------------------------------------------------*
|
|
// Project: Horizon
|
|
// File: draw.cpp
|
|
//
|
|
// Copyright (C)2009 Nintendo Co., Ltd. All rights reserved.
|
|
//
|
|
// These coded instructions, statements, and computer programs contain
|
|
// proprietary information of Nintendo of America Inc. and/or Nintendo
|
|
// Company Ltd., and are protected by Federal copyright law. They may
|
|
// not be disclosed to third parties or copied or duplicated in any form,
|
|
// in whole or in part, without the prior written consent of Nintendo.
|
|
//
|
|
// $Rev: 14479 $
|
|
// *---------------------------------------------------------------------------*/
|
|
//
|
|
#include <nn.h>
|
|
#include <nn/srv.h>
|
|
#include <nn/am/am_ApiSystemMenu.h>
|
|
#include <nn/fs.h>
|
|
|
|
#include "demo.h"
|
|
#include "sdAccessor.h"
|
|
#include "draw.h"
|
|
|
|
|
|
/* ExpHeap for app. */
|
|
extern nn::fnd::ExpHeap s_AppHeap;
|
|
uptr s_HeapForGx;
|
|
const u32 s_GxHeapSize = 0x800000;
|
|
u16 xErrorPos = 130;
|
|
u16 yErrorPos = 5;
|
|
|
|
|
|
demo::RenderSystemExt s_RenderSystem;
|
|
|
|
void InitializeGraphics() {
|
|
s_HeapForGx = reinterpret_cast<uptr> (s_AppHeap.Allocate(s_GxHeapSize));
|
|
|
|
/* Initialize display */
|
|
s_RenderSystem.Initialize(s_HeapForGx, s_GxHeapSize);
|
|
|
|
s_RenderSystem.SetClearColor(NN_GX_DISPLAY0, 0.f, 0.f, 0.f, 1.0f);
|
|
s_RenderSystem.SetClearColor(NN_GX_DISPLAY1, 0.f, 0.f, 0.f, 1.0f);
|
|
|
|
s_RenderSystem.SetFontSize(8.0f);
|
|
s_RenderSystem.SetColor(1.f, 1.f, 1.f); // WHITE
|
|
}
|
|
|
|
u16 Min(u16 a, u16 b)
|
|
{
|
|
return (a > b) ? b : a;
|
|
}
|
|
|
|
//選択ウィンドウによって色変化
|
|
void ChangeColorMode(Window& window)
|
|
{
|
|
if(window.isSelectedWindow)
|
|
{
|
|
s_RenderSystem.SetColor(1.0f, 1.0f, 1.0f);
|
|
}
|
|
else
|
|
{
|
|
s_RenderSystem.SetColor(0.5f, 0.5f, 0.5f);
|
|
}
|
|
}
|
|
|
|
|
|
void DrawDefaultTop(void)
|
|
{
|
|
s_RenderSystem.DrawText(0, 0, "BinaryFile");
|
|
s_RenderSystem.DrawText(X_SCALE + xErrorPos, 0, " ErrorCode");
|
|
s_RenderSystem.SetLineWidth(1.f);
|
|
s_RenderSystem.DrawLine(0,(fileStartPos - 0.5 ) * Y_SCALE,200,( fileStartPos -0.5) * Y_SCALE);
|
|
s_RenderSystem.DrawLine(X_SCALE + xErrorPos - 1,0, X_SCALE + xErrorPos - 1,240);
|
|
}
|
|
|
|
void DrawDefaultBottom(void)
|
|
{
|
|
s_RenderSystem.DrawText(0, 0, "Directory");
|
|
s_RenderSystem.SetLineWidth(1.f);
|
|
s_RenderSystem.DrawLine(0,(fileStartPos - 0.5 ) * Y_SCALE,100,( fileStartPos -0.5) * Y_SCALE);
|
|
}
|
|
|
|
void DrawCursor(Window& window)
|
|
{
|
|
s_RenderSystem.DrawText(X_SCALE, Y_SCALE * (fileStartPos + window.GetSelectPos()), ">");
|
|
}
|
|
|
|
void DrawBinaryFile(Window& window, SdAccessor::BinaryInfo* binary)
|
|
{
|
|
for (u16 i = 0; i < Min(screenHeight,binary->size); i++)
|
|
{
|
|
if(window.isSelectedWindow)
|
|
{
|
|
switch (binary->binaryType[i+ window.GetOriginIndex()].state)
|
|
{
|
|
case SdAccessor::IMPORTED_NOT:
|
|
s_RenderSystem.SetColor(1.f, 1.f, 1.f);
|
|
break;
|
|
case SdAccessor::IMPORTED_CLEAR:
|
|
s_RenderSystem.SetColor(0.f, 0.f, 1.f);
|
|
break;
|
|
case SdAccessor::IMPORTED_ERROR:
|
|
s_RenderSystem.SetColor(1.f, 0.f, 0.f);
|
|
break;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
s_RenderSystem.SetColor(0.5f, 0.5f, 0.5f);
|
|
}
|
|
s_RenderSystem.DrawText(X_SCALE, Y_SCALE* (i + fileStartPos), " %ls ",
|
|
binary->binaryType[ i + window.GetOriginIndex()].directoryEntry.entryName);
|
|
s_RenderSystem.SetColor(1.f, 1.f, 1.f);
|
|
}
|
|
}
|
|
void DrawDirectory(Window& window, SdAccessor::DirectoryInfo* directory)
|
|
{
|
|
for (u16 i = 0; i < Min(manualStartPos - 2,directory->size) ; i++)
|
|
{
|
|
if(!window.isSelectedWindow)
|
|
{
|
|
s_RenderSystem.SetColor(0.5f, 0.5f, 0.5f);
|
|
}
|
|
else if (window.GetIndex() == i + window.GetOriginIndex()) {
|
|
s_RenderSystem.SetColor(1.f, 1.f, 0.f); // YELLOW
|
|
}
|
|
s_RenderSystem.DrawText(X_SCALE * 2 , Y_SCALE * (i + fileStartPos), "%ls",
|
|
directory->directoryEntry[i + window.GetOriginIndex()].entryName);
|
|
s_RenderSystem.SetColor(1.f, 1.f, 1.f); // WHITE
|
|
}
|
|
}
|
|
//エラーリスト表示
|
|
void DrawErrorList(Window& top,SdAccessor::BinaryInfo* binary)
|
|
{
|
|
u16 index = top.GetIndex();
|
|
//インポートされていなければ非表示
|
|
if(binary->binaryType[index].state != SdAccessor::IMPORTED_NOT)
|
|
{
|
|
nn::Result result = binary->binaryType[index].result;
|
|
u16 y = fileStartPos;
|
|
ChangeColorMode(top);
|
|
s_RenderSystem.DrawText( X_SCALE + xErrorPos, Y_SCALE * y," Level\n");
|
|
y += 2;
|
|
s_RenderSystem.DrawText( X_SCALE + xErrorPos, Y_SCALE * y," %s (%d)\n"
|
|
, nn::dbg::GetLevelString(result), result.GetLevel());
|
|
y += 3;
|
|
s_RenderSystem.DrawText( X_SCALE + xErrorPos, Y_SCALE * y," Summary\n");
|
|
y += 2;
|
|
s_RenderSystem.DrawText( X_SCALE + xErrorPos, Y_SCALE * y," %s (%d)\n"
|
|
, nn::dbg::GetSummaryString(result), result.GetSummary());
|
|
y += 3;
|
|
s_RenderSystem.DrawText( X_SCALE + xErrorPos, Y_SCALE * y," Module\n");
|
|
y += 2;
|
|
s_RenderSystem.DrawText( X_SCALE + xErrorPos, Y_SCALE * y," %s (%d)\n"
|
|
, nn::dbg::GetModuleString(result), result.GetModule());
|
|
y += 3;
|
|
s_RenderSystem.DrawText( X_SCALE + xErrorPos, Y_SCALE * y," Description\n");
|
|
y += 2;
|
|
s_RenderSystem.DrawText( X_SCALE + xErrorPos, Y_SCALE * y," %s\n"
|
|
, nn::dbg::GetDescriptionString(result));
|
|
y += 2;
|
|
s_RenderSystem.DrawText( X_SCALE + xErrorPos, Y_SCALE * y," (%d)\n", result.GetDescription());
|
|
|
|
y += 4;
|
|
s_RenderSystem.DrawText( X_SCALE + xErrorPos, Y_SCALE * y," ErrorCode : %x \n",result.GetPrintableBits());
|
|
|
|
|
|
s_RenderSystem.SetColor(1.f, 1.f, 1.f);
|
|
|
|
}
|
|
}
|
|
//上画面左描画
|
|
void DrawLeft(Window& window, SdAccessor::BinaryInfo* binary)
|
|
{
|
|
if(binary->size != 0)
|
|
{
|
|
ChangeColorMode(window);
|
|
DrawDefaultTop();
|
|
s_RenderSystem.SetColor(1.f, 1.f, 1.f); // WHITE
|
|
if(window.isSelectedWindow)
|
|
{
|
|
DrawCursor(window);
|
|
}
|
|
DrawBinaryFile(window,binary);
|
|
}
|
|
else
|
|
{
|
|
s_RenderSystem.DrawText(X_SCALE, Y_SCALE,"No Binary File in this directory..");
|
|
}
|
|
}
|
|
//上画面右描画
|
|
void DrawRight(Window& window, SdAccessor::BinaryInfo* binary)
|
|
{
|
|
DrawErrorList(window,binary);
|
|
}
|
|
//操作説明
|
|
void DrawManual(Window& top,Window& bottom, SdAccessor& sd)
|
|
{
|
|
f32 x = 1;
|
|
f32 y = manualStartPos;
|
|
s_RenderSystem.SetLineWidth(1.2f);
|
|
s_RenderSystem.DrawLine(0,(manualStartPos - 0.5) * Y_SCALE,320,( manualStartPos - 0.5) * Y_SCALE);
|
|
s_RenderSystem.SetLineWidth(1.f);
|
|
s_RenderSystem.DrawLine(0,(manualStartPos + 1.5 ) * Y_SCALE,100,( manualStartPos + 1.5) * Y_SCALE);
|
|
s_RenderSystem.DrawText(0, Y_SCALE*y++, "Manual");
|
|
y ++;
|
|
//上画面選択時
|
|
if(top.isSelectedWindow)
|
|
{
|
|
SdAccessor::BinaryInfo* binary = sd.GetBinary();
|
|
if(sd.GetImportCount() == 0)
|
|
{
|
|
s_RenderSystem.DrawText(X_SCALE*x, Y_SCALE*y++, "Current File :");
|
|
}
|
|
else
|
|
{
|
|
s_RenderSystem.DrawText(X_SCALE*x, Y_SCALE*y++, "Importing File :");
|
|
}
|
|
s_RenderSystem.DrawText(X_SCALE*x, Y_SCALE*y++, "%ls", binary->binaryType[top.GetIndex()].directoryEntry.entryName);
|
|
y ++;
|
|
s_RenderSystem.DrawText(X_SCALE*x, Y_SCALE*y++, " A : Import %ls", binary->binaryType[top.GetIndex()].directoryEntry.entryName);
|
|
s_RenderSystem.DrawText(X_SCALE*x, Y_SCALE*y++, " X : Import all files");
|
|
s_RenderSystem.DrawText(X_SCALE*x, Y_SCALE*y++, " Y : Export result");
|
|
s_RenderSystem.DrawText(X_SCALE*x, Y_SCALE*y++, " to 'Result%d.csv' ",sd.GetExportCount());
|
|
y++;
|
|
s_RenderSystem.DrawText(X_SCALE*x, Y_SCALE*y++, " Start: to directory screen");
|
|
}
|
|
//下画面選択時
|
|
else
|
|
{
|
|
s_RenderSystem.DrawText(X_SCALE*x, Y_SCALE*y++, "Current directory :" );
|
|
wchar_t path[128];
|
|
SdAccessor::DirectoryInfo* directory = sd.GetDirectory();
|
|
|
|
//ディレクトリ名の行分け
|
|
std::wcscpy( path,sd.GetFileName() );
|
|
u16 width = 240/Y_SCALE -1;
|
|
u16 height = 4;
|
|
wchar_t fileList[height][width];
|
|
for(u16 row = 0; row < height ; row++)
|
|
{
|
|
for(u16 col = 0; col < width;col++)
|
|
{
|
|
fileList[row][col] = path[row * width + col];
|
|
}
|
|
}
|
|
for(u16 i = 0; i < height; i++)
|
|
{
|
|
s_RenderSystem.DrawText(X_SCALE*x, Y_SCALE*y++, "%ls",fileList[i]);
|
|
}
|
|
|
|
y++;
|
|
s_RenderSystem.DrawText(X_SCALE*x, Y_SCALE*y++, " A : Select %ls", directory->directoryEntry[bottom.GetIndex()].entryName);
|
|
y++;
|
|
s_RenderSystem.DrawText(X_SCALE*x, Y_SCALE*y++, " Start : to file screen");
|
|
}
|
|
}
|
|
//上画面描画
|
|
void DrawDisplay0(Window& topWindow,SdAccessor& sd)
|
|
{
|
|
SdAccessor::BinaryInfo* binary = sd.GetBinary();
|
|
s_RenderSystem.SetRenderTarget(NN_GX_DISPLAY0);
|
|
s_RenderSystem.Clear();
|
|
DrawLeft(topWindow,binary);
|
|
DrawRight(topWindow,binary);
|
|
s_RenderSystem.Transfer();
|
|
s_RenderSystem.SwapBuffers();
|
|
}
|
|
//下画面描画
|
|
void DrawDisplay1(Window& topWindow,Window& bottomWindow, SdAccessor& sd)
|
|
{
|
|
SdAccessor::DirectoryInfo* directory = sd.GetDirectory();
|
|
s_RenderSystem.SetRenderTarget(NN_GX_DISPLAY1);
|
|
s_RenderSystem.Clear();
|
|
ChangeColorMode(bottomWindow);
|
|
DrawDefaultBottom();
|
|
s_RenderSystem.SetColor(1.f, 1.f, 1.f); // WHITE
|
|
if(bottomWindow.isSelectedWindow)
|
|
{
|
|
DrawCursor(bottomWindow);
|
|
}
|
|
DrawDirectory(bottomWindow,directory);
|
|
DrawManual(topWindow,bottomWindow,sd);
|
|
s_RenderSystem.Transfer();
|
|
s_RenderSystem.SwapBuffers();
|
|
}
|
|
void DrawNoSd(void) {
|
|
s_RenderSystem.SetRenderTarget(NN_GX_DISPLAY0);
|
|
s_RenderSystem.Clear();
|
|
s_RenderSystem.Transfer();
|
|
s_RenderSystem.SwapBuffers();
|
|
s_RenderSystem.SetRenderTarget(NN_GX_DISPLAY1);
|
|
s_RenderSystem.Clear();
|
|
s_RenderSystem.DrawText(X_SCALE, Y_SCALE, "No Sd Card Inserted");
|
|
s_RenderSystem.Transfer();
|
|
s_RenderSystem.SwapBuffers();
|
|
}
|
|
void Draw(Window& topWindow, Window& bottomWindow,SdAccessor& sd)
|
|
{
|
|
if(sd.IsSdMount())
|
|
{
|
|
DrawDisplay0(topWindow, sd );
|
|
DrawDisplay1(topWindow,bottomWindow, sd);
|
|
}
|
|
else
|
|
{
|
|
DrawNoSd();
|
|
}
|
|
}
|