バナーのパレットを読み込むように変更

ソースコードの整理

git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@249 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
yoshida_teruhisa 2007-11-26 01:08:07 +00:00
parent 6acdecc63d
commit 531131bdd6
2 changed files with 90 additions and 63 deletions

View File

@ -128,10 +128,6 @@ static void BannerInit( void )
// OBJModeの設定
GX_SetOBJVRamModeChar(GX_OBJVRAMMODE_CHAR_1D_128K); // 2D mapping mode
// パレットのロード
// どのバナーもdata/EmptyBanner.bnrのパレットと同じものを使う事前提
GX_LoadOBJPltt( empty_banner->v1.pltt, 0, BNR_PLTT_SIZE );
//OBJATTRの初期化……表示前には値を弄る
for(l=0;l<MAX_SHOW_BANNER;l++)
@ -265,6 +261,10 @@ static void BannerDraw(int cursor, int selected, TitleProperty *titleprop)
int num = cursor/FRAME_PER_SELECT - 2 + l;
if(-1 < num && num < LAUNCHER_TITLE_LIST_NUM){
banner_oam_attr[l].charNo = image_index_list[num]*4;
// パレットのロード
// 必要なパレットが変わるので、毎度毎度入れ替え
GX_LoadOBJPltt( titleprop[num].pBanner->v1.pltt, (u16)(num * BNR_PLTT_SIZE), BNR_PLTT_SIZE );
G2_SetOBJMode(&banner_oam_attr[l], GX_OAM_MODE_NORMAL, num);
if(l == 2 || l == 3) // 中央付近で大きくなったり小さくなったりする二つのバナー
{
@ -330,7 +330,7 @@ void LauncherInit( TitleProperty *pTitleList )
GX_SetVisiblePlane( GX_PLANEMASK_BG0 | GX_PLANEMASK_BG1 | GX_PLANEMASK_BG2 | GX_PLANEMASK_OBJ );
G2_SetBlendAlpha(GX_BLEND_PLANEMASK_BG2,
GX_BLEND_PLANEMASK_BG0 | GX_BLEND_PLANEMASK_BG1 | GX_BLEND_PLANEMASK_OBJ, 0,31);
GX_BLEND_PLANEMASK_BG0 | GX_BLEND_PLANEMASK_BG1 | GX_BLEND_PLANEMASK_OBJ, 0,ALPHA_MAX);
GX_DispOn();
GXS_DispOn();
@ -387,7 +387,7 @@ BOOL LauncherFadeout( TitleProperty *pTitleList )
}
}
// LauncherMainのSelectSomethingByTPで使うSelectSomethingFuncの実装
// ProcessPadsのSelectSomethingByTPで使うSelectSomethingFuncの実装
static BOOL SelectCenterFunc( u16 *csr, TPData *tgt )
{
// 単純な実装例

View File

@ -25,7 +25,23 @@
#define CANCEL_BUTTON_BOTTOM_X ( (CANCEL_BUTTON_TOP_X + 8 ) * 8 )
#define CANCEL_BUTTON_BOTTOM_Y ( (CANCEL_BUTTON_TOP_Y + 2 ) * 8 )
#define MENU_DISPLAY_SIZE 7
#define MENU_DISPLAY_SIZE 7
// スクロールバー関係
#define BAR_ZERO_X 230
#define BAR_ZERO_Y 48
#define BAR_HEIGHT_MAX 107
#define BAR_HEIGHT_MIN SQUARE_SIZE
#define BAR_WIDTH SQUARE_SIZE
#define BAR_BUTTON_HEIGHT SQUARE_SIZE
#define BAR_BUTTON_WIDTH SQUARE_SIZE
#define SQUARE_SIZE 11
#define BAR_LOOSENESS 2
#define BAR_OFFSET 2 // 表示に"■"テキストを使っているので、タッチ座標を補正する目的のOFFSET
// ボタン長押しでのカーソル自動移動関係
#define START_AUTOMOVE_COUNT 30
#define AUTOMOVE_INTERVAL 5
// extern data------------------------------------------
@ -73,37 +89,10 @@ static MenuParam countrySel = {
// function's description
//======================================================
// 国名設定の初期化
void SelectCountryInit( void )
// スクロールメニューの初期化
static void InitScrollMenuList( void )
{
int l;
BOOL in_list_flag = FALSE;
GX_DispOff();
GXS_DispOff();
NNS_G2dCharCanvasClear( &gCanvas, TXT_COLOR_NULL );
PutStringUTF16( 0, 0, TXT_COLOR_BLUE, (const u16 *)L"COUNTRY SELECT" );
PutStringUTF16( CANCEL_BUTTON_TOP_X, CANCEL_BUTTON_TOP_Y, TXT_COLOR_CYAN, (const u16 *)L"CANCEL" );
if( g_initialSet ) {
PutStringUTF16( 8 * 8, 18 * 8, TXT_COLOR_RED, (const u16 *)L"Select country." );
}
// 設定済みリージョンと国名コードの取得
if( !SYSM_IsValidTSD() ||
( TSD_GetRegion() >= TWL_REGION_MAX ) ) {
s_regionCode = (TWLRegion)TWL_DEFAULT_REGION;
}else {
s_regionCode = (TWLRegion)TSD_GetRegion();
}
if( !SYSM_IsValidTSD() ||
( TSD_GetCountry() >= TWL_COUNTRY_MAX ) ) {
s_countryCode = (TWLCountryCode)0;
}else {
s_countryCode = TSD_GetCountry();
}
int l;
// メニューに表示する国名リスト全体の最初と最後をマッピングデータから取得
s_list_start = (u16)(region_country_mapping[s_regionCode] >> 16);
s_list_end = (u16)(region_country_mapping[s_regionCode]);
@ -133,14 +122,50 @@ void SelectCountryInit( void )
s_pStrCountry[l] = s_pStrCountryName[s_menu_display_start + l];
}
DrawMenu( (u16)(s_countryCode - s_menu_display_start), &countrySel );
bar_height = 107 - (list_size - countrySel.num);
// スクロールバー
bar_height = BAR_HEIGHT_MAX - (list_size - countrySel.num);
dots_per_item = 1;
if(bar_height<11){
bar_height = 11;
dots_per_item = (double)(107-11)/(list_size - countrySel.num);
if(bar_height < BAR_HEIGHT_MIN){
bar_height = BAR_HEIGHT_MIN;
dots_per_item = (double)(BAR_HEIGHT_MAX-BAR_HEIGHT_MIN)/(list_size - countrySel.num);
}
}
// 国名設定の初期化
void SelectCountryInit( void )
{
GX_DispOff();
GXS_DispOff();
NNS_G2dCharCanvasClear( &gCanvas, TXT_COLOR_NULL );
PutStringUTF16( 0, 0, TXT_COLOR_BLUE, (const u16 *)L"COUNTRY SELECT" );
PutStringUTF16( CANCEL_BUTTON_TOP_X, CANCEL_BUTTON_TOP_Y, TXT_COLOR_CYAN, (const u16 *)L"CANCEL" );
if( g_initialSet ) {
PutStringUTF16( 8 * 8, 18 * 8, TXT_COLOR_RED, (const u16 *)L"Select country." );
}
// ::::::::::::::::::::::::::::::::::::::::::::::
// TWL設定データの読み込み
// ::::::::::::::::::::::::::::::::::::::::::::::
// 設定済みリージョンと国名コードの取得
if( !SYSM_IsValidTSD() ||
( TSD_GetRegion() >= TWL_REGION_MAX ) ) {
s_regionCode = (TWLRegion)TWL_DEFAULT_REGION;
}else {
s_regionCode = (TWLRegion)TSD_GetRegion();
}
if( !SYSM_IsValidTSD() ||
( TSD_GetCountry() >= TWL_COUNTRY_MAX ) ) {
s_countryCode = (TWLCountryCode)0;
}else {
s_countryCode = TSD_GetCountry();
}
// スクロールメニューの初期化
InitScrollMenuList();
DrawMenu( (u16)(s_countryCode - s_menu_display_start), &countrySel );
SVC_CpuClear( 0x0000, &tpd, sizeof(TpWork), 16 );
@ -157,12 +182,12 @@ static void MoveCursorByKey( void )
static int pad_count = 0;
if( pad.cont & PAD_KEY_DOWN ) { // カーソルの移動
if(pad_count == 0 || (pad_count>29 && pad_count%5==0))
if(pad_count == 0 || (pad_count>=START_AUTOMOVE_COUNT && pad_count%AUTOMOVE_INTERVAL==0))
if( s_countryCode < s_list_end ) s_countryCode++;
pad_cont = TRUE;
}
if( pad.cont & PAD_KEY_UP ) {
if(pad_count == 0 || (pad_count>29 && pad_count%5==0))
if(pad_count == 0 || (pad_count>=START_AUTOMOVE_COUNT && pad_count%AUTOMOVE_INTERVAL==0))
if( s_countryCode > s_list_start ) s_countryCode--;
pad_cont = TRUE;
}
@ -175,6 +200,7 @@ static void MoveCursorByKey( void )
else if( s_menu_display_start + countrySel.num - 1 < s_countryCode ) s_menu_display_start = (u16)(s_countryCode - countrySel.num + 1);
}
// 簡易スクロールバーのボタンによるスクロール
static void MoveCursorByScrollBarButton( void )
{
static int tpd_count = 0;
@ -182,13 +208,13 @@ static void MoveCursorByScrollBarButton( void )
if(tpd.disp.touch)
{
if( WithinRangeTP(230,48+107+2,241,48+107+2+11,&tpd.disp) ) {//down
if(tpd_count == 0 || (tpd_count>29 && tpd_count%5==0))
if( WithinRangeTP(BAR_ZERO_X,BAR_ZERO_Y+BAR_HEIGHT_MAX+BAR_OFFSET,BAR_ZERO_X+BAR_BUTTON_WIDTH,BAR_ZERO_Y+BAR_HEIGHT_MAX+BAR_OFFSET+BAR_BUTTON_HEIGHT,&tpd.disp) ) {//down
if(tpd_count == 0 || (tpd_count>=START_AUTOMOVE_COUNT && tpd_count%AUTOMOVE_INTERVAL==0))
if( s_countryCode < s_list_end ) s_menu_display_start++;
tpd_cont = TRUE;
}
if( WithinRangeTP(230,48-11+2,241,48-11+2+11,&tpd.disp) ) {//up
if(tpd_count == 0 || (tpd_count>29 && tpd_count%5==0))
if( WithinRangeTP(BAR_ZERO_X,BAR_ZERO_Y-BAR_BUTTON_HEIGHT+BAR_OFFSET,BAR_ZERO_X+BAR_BUTTON_WIDTH,BAR_ZERO_Y+BAR_OFFSET,&tpd.disp) ) {//up
if(tpd_count == 0 || (tpd_count>=START_AUTOMOVE_COUNT && tpd_count%AUTOMOVE_INTERVAL==0))
if( s_countryCode > s_list_start ) s_menu_display_start--;
tpd_cont = TRUE;
}
@ -208,22 +234,22 @@ static void MoveCursorByScrollBar( void )
{
static BOOL hogehoge=FALSE;
static int dy;
int bar_top = (int)(48+dots_per_item * (s_menu_display_start - s_list_start));
int bar_top = (int)(BAR_ZERO_Y+dots_per_item * (s_menu_display_start - s_list_start));
if(tpd.disp.touch)
{
if(hogehoge)
{
if ( tpd.disp.y - dy < bar_top - 2)//2はあそび
if ( tpd.disp.y - dy < bar_top - BAR_LOOSENESS)
{
bar_top = tpd.disp.y - dy + 2;
bar_top = tpd.disp.y - dy + BAR_LOOSENESS;
}
else if ( tpd.disp.y - dy > bar_top + 2)
else if ( tpd.disp.y - dy > bar_top + BAR_LOOSENESS)
{
bar_top = tpd.disp.y - dy - 2;
bar_top = tpd.disp.y - dy - BAR_LOOSENESS;
}
s_menu_display_start = (u16)(((bar_top - 48)/dots_per_item) + s_list_start);
s_menu_display_start = (u16)(((bar_top - BAR_ZERO_Y)/dots_per_item) + s_list_start);
}
else if(WithinRangeTP(230, bar_top+2,241,bar_top+2+bar_height,&tpd.disp))
else if(WithinRangeTP(BAR_ZERO_X, bar_top+BAR_OFFSET,BAR_ZERO_X + BAR_WIDTH,bar_top+BAR_OFFSET+bar_height,&tpd.disp))
{
hogehoge = TRUE;
dy = tpd.disp.y - bar_top;
@ -242,6 +268,7 @@ static void MoveCursorByScrollBar( void )
else if( s_menu_display_start + countrySel.num - 1 < s_countryCode ) s_countryCode = (TWLCountryCode)(s_menu_display_start + countrySel.num - 1);
}
// 国選択画面の描画処理
static void DrawCountryMain( void )
{
int l;
@ -254,13 +281,13 @@ static void DrawCountryMain( void )
NNS_G2dCharCanvasClear( &gCanvas, TXT_COLOR_NULL );
// 簡易スクロールバー表示
{
PutStringUTF16( 230, 48-11, TXT_UCOLOR_G0, (const u16 *)L"" );
for(l=0; l<bar_height-11;l+=11)
PutStringUTF16( BAR_ZERO_X, BAR_ZERO_Y-BAR_BUTTON_HEIGHT, TXT_UCOLOR_G0, (const u16 *)L"" );
for(l=0; l<bar_height-SQUARE_SIZE; l+=SQUARE_SIZE)
{
PutStringUTF16( 230, (int)(l+48+dots_per_item * (s_menu_display_start - s_list_start)), TXT_UCOLOR_G2, (const u16 *)L"" );
PutStringUTF16( BAR_ZERO_X, (int)(l+BAR_ZERO_Y+dots_per_item * (s_menu_display_start - s_list_start)), TXT_UCOLOR_G2, (const u16 *)L"" );
}
PutStringUTF16( 230, (int)(bar_height-11+48+dots_per_item * (s_menu_display_start - s_list_start)), TXT_UCOLOR_G2, (const u16 *)L"" );
PutStringUTF16( 230, 48+107, TXT_UCOLOR_G0, (const u16 *)L"" );
PutStringUTF16( BAR_ZERO_X, (int)(BAR_ZERO_Y+bar_height-SQUARE_SIZE+dots_per_item * (s_menu_display_start - s_list_start)), TXT_UCOLOR_G2, (const u16 *)L"" );
PutStringUTF16( BAR_ZERO_X, BAR_ZERO_Y+BAR_HEIGHT_MAX, TXT_UCOLOR_G0, (const u16 *)L"" );
}
PutStringUTF16( 0, 0, TXT_COLOR_BLUE, (const u16 *)L"COUNTRY SELECT" );
PutStringUTF16( CANCEL_BUTTON_TOP_X, CANCEL_BUTTON_TOP_Y, TXT_COLOR_CYAN, (const u16 *)L"CANCEL" );
@ -296,8 +323,8 @@ int SelectCountryMain( void )
}
if( ( pad.trg & PAD_BUTTON_A ) || tp_select ) { // メニュー項目への分岐
TSD_SetCountry( s_countryCode );
//TSD_SetFlagCountry( TRUE ); // 国入力フラグを立てる
TSD_SetCountry( s_countryCode ); // 国コード設定
//TSD_SetFlagCountry( TRUE ); // 国コード入力フラグを立てる
// ::::::::::::::::::::::::::::::::::::::::::::::
// TWL設定データファイルへの書き込み
// ::::::::::::::::::::::::::::::::::::::::::::::