mirror of
https://github.com/Fledge68/WiiFlow_Lite.git
synced 2024-11-01 00:55:06 +01:00
-first step into getting the lists away from the buggy mem1
(VERY beta, not suggested to use this version)
This commit is contained in:
parent
fd071afd36
commit
a95fe25030
@ -66,7 +66,7 @@ endif
|
||||
#---------------------------------------------------------------------------------
|
||||
# any extra libraries we wish to link with the project
|
||||
#---------------------------------------------------------------------------------
|
||||
LIBS := -lcustomfat -lcustomntfs -lcustomext2fs -lpng -lm -lz -lwiiuse -lbte -lasnd -logc -lfreetype -lvorbisidec -lmad -ljpeg -lmodplay
|
||||
LIBS := -lcustomfat -lcustomntfs -lcustomext2fs -lpng -ljpeg -lm -lz -lwiiuse -lbte -lasnd -logc -lfreetype -lvorbisidec -lmad
|
||||
|
||||
#---------------------------------------------------------------------------------
|
||||
# list of directories containing libraries, this must be the top level containing
|
||||
|
@ -1,11 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2002, 2003, 2004, 2005, 2007 by Christian Nowak <chnowak@web.de>
|
||||
* Last update: 20th October, 2007
|
||||
*/
|
||||
|
||||
#ifndef __DEFINES_H__
|
||||
#define __DEFINES_H__
|
||||
|
||||
#include <gccore.h>
|
||||
|
||||
#endif
|
@ -1,57 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2002, 2003, 2004, 2005, 2007 by Christian Nowak <chnowak@web.de>
|
||||
* Last update: 20th October, 2007
|
||||
*/
|
||||
|
||||
#ifndef __ENVELOPE_H__
|
||||
#define __ENVELOPE_H__
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
|
||||
#include "defines.h"
|
||||
|
||||
#define ENV_WIDTH 65536
|
||||
#define ENV_HEIGHT 65536
|
||||
|
||||
typedef struct EnvPoint {
|
||||
|
||||
u16 x,y;
|
||||
} EnvPoint;
|
||||
|
||||
typedef struct EnvelopeConfig {
|
||||
|
||||
BOOL enabled;
|
||||
u8 numPoints; /* # of envelope points */
|
||||
u8 loop_start;
|
||||
u8 loop_end;
|
||||
u8 sustain;
|
||||
|
||||
EnvPoint *envPoints;
|
||||
} EnvelopeConfig;
|
||||
|
||||
typedef struct Envelope {
|
||||
|
||||
EnvelopeConfig *envConfig;
|
||||
|
||||
BOOL triggered;
|
||||
BOOL hold;
|
||||
u8 curPoint;
|
||||
u16 value;
|
||||
u16 position;
|
||||
} Envelope;
|
||||
|
||||
|
||||
void EnvReset(Envelope *env);
|
||||
void EnvTrigger(Envelope *env);
|
||||
BOOL EnvProcess(Envelope *env);
|
||||
void EnvRelease(Envelope *env);
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
@ -1,77 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2002, 2003, 2004, 2005, 2007 by Christian Nowak <chnowak@web.de>
|
||||
* Last update: 20th October, 2007
|
||||
*/
|
||||
|
||||
#ifndef __MIXER_H__
|
||||
#define __MIXER_H__
|
||||
|
||||
#include "defines.h"
|
||||
|
||||
/*
|
||||
#define MIXER_TYPE u64
|
||||
#define MIXER_SHIFT 32
|
||||
*/
|
||||
|
||||
#define MIXER_TYPE u32
|
||||
#define MIXER_SHIFT 10
|
||||
|
||||
|
||||
typedef struct MOD_SAMPLEINFO16 {
|
||||
|
||||
u32 length;
|
||||
u32 loop_start;
|
||||
u32 loop_end;
|
||||
BOOL looped;
|
||||
BOOL pingpong;
|
||||
void *sampledata;
|
||||
BOOL bit_16;
|
||||
BOOL stereo;
|
||||
} MOD_SAMPLEINFO16;
|
||||
|
||||
typedef struct MOD_VOICEINFO16 {
|
||||
|
||||
BOOL enabled;
|
||||
BOOL playing;
|
||||
BOOL forward;
|
||||
u8 panning;
|
||||
u8 envPanning;
|
||||
/* u32 playpos;
|
||||
u32 incval;*/
|
||||
MIXER_TYPE playpos;
|
||||
MIXER_TYPE incval;
|
||||
u8 volume;
|
||||
u8 envVolume;
|
||||
MOD_SAMPLEINFO16 *sampleInfo;
|
||||
} MOD_VOICEINFO16;
|
||||
|
||||
#define MIXER_USE_S32 1
|
||||
#define MIXER_3232BIT 2
|
||||
#define MIXER_SRC_SIGNED 4
|
||||
#define MIXER_DEST_STEREO 8
|
||||
#define MIXER_USE_DOUBLE 16
|
||||
#define MIXER_USE_FLOAT 32
|
||||
#define MIXER_DEST_16BIT 64
|
||||
#define MIXER_DEST_SIGNED 128
|
||||
#define MIXER_SRC_16BIT 256
|
||||
|
||||
int mix_s8m_to_s32m_1616bit (s32 *, int, MOD_VOICEINFO16 *, u8);
|
||||
int mix_s8m_to_s32s_1616bit (s32 *, int, MOD_VOICEINFO16*, u8);
|
||||
|
||||
int mix_s16m_to_s32s_1616bit(s32 *, int, MOD_VOICEINFO16 *, u8);
|
||||
int mix_s16m_to_s32m_1616bit(s32 *, int, MOD_VOICEINFO16 *, u8);
|
||||
|
||||
void clearbuf_s32(s32 *, int, int);
|
||||
|
||||
void copybuf_s32_to_s16(s16 *, s32 *, int, int);
|
||||
void copybuf_s32_to_u16(u16 *, s32 *, int, int);
|
||||
void copybuf_s32_to_s8 (s8 *, s32 *, int, int);
|
||||
void copybuf_s32_to_u8 (u8 *, s32 *, int, int);
|
||||
|
||||
int mix_final_1616bit(int flags, void *dest, int nSamples, MOD_VOICEINFO16 *vinfo, u8 mainvol);
|
||||
int copybuf_final(int flags, void *dest, void *src, int nSamples);
|
||||
int clearbuf_final(int flags, void *dest, int nSamples);
|
||||
|
||||
int mix_destbufsize(int flags);
|
||||
|
||||
#endif
|
@ -1,55 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2002, 2003, 2004, 2005, 2007 by Christian Nowak <chnowak@web.de>
|
||||
* Last update: 20th October, 2007
|
||||
*/
|
||||
|
||||
#ifndef __MODPLAY_H__
|
||||
#define __MODPLAY_H__
|
||||
|
||||
#include "modplay_core.h"
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#define MODULE_MOD 1
|
||||
#define MODULE_S3M 2
|
||||
#define MODULE_XM 3
|
||||
|
||||
|
||||
typedef struct MODFORMAT {
|
||||
|
||||
int (*set)(u8 *, int, MODFILE *);
|
||||
BOOL (*is) (u8 *, int);
|
||||
int (*getFormatID)(void);
|
||||
char *(*getDescription)(void);
|
||||
char *(*getAuthor)(void);
|
||||
char *(*getVersion)(void);
|
||||
char *(*getCopyright)(void);
|
||||
} MODFORMAT;
|
||||
|
||||
extern const MODFORMAT mod_formats[];
|
||||
|
||||
|
||||
|
||||
int MODFILE_Load(const char *fname, MODFILE *mod);
|
||||
|
||||
void MODFILE_Start(MODFILE *s3m);
|
||||
void MODFILE_Stop(MODFILE *s3m);
|
||||
void MODFILE_Player(MODFILE *s3m);
|
||||
void MODFILE_Free(MODFILE *mod);
|
||||
void MODFILE_Init(MODFILE *mod);
|
||||
void MODFILE_SetFormat(MODFILE *mod, int freq, int channels, int bits, BOOL mixsigned);
|
||||
int MODFILE_Set(u8 *modfile, int modlength, MODFILE *mod);
|
||||
BOOL MODFILE_Is(u8 *, int);
|
||||
|
||||
MOD_Instrument *MODFILE_MakeInstrument(void *rawData, int nBytes, int nBits);
|
||||
int MODFILE_AllocSFXChannels(MODFILE *mod, int nChannels);
|
||||
void MODFILE_TriggerSFX(MODFILE *mod, MOD_Instrument *instr, int channel, u8 note);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
@ -1,212 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2002, 2003, 2004, 2005, 2007 by Christian Nowak <chnowak@web.de>
|
||||
* Last update: 20th October, 2007
|
||||
*/
|
||||
|
||||
#ifndef __MODPLAY_CORE_H__
|
||||
#define __MODPLAY_CORE_H__
|
||||
|
||||
#include "defines.h"
|
||||
#include "mixer.h"
|
||||
#include "envelope.h"
|
||||
|
||||
#define MODPLAY_MAX_CHANNELS 33
|
||||
#define MODPLAY_NUM_COMMANDS 2
|
||||
|
||||
typedef struct MOD_Note {
|
||||
|
||||
u32 instrument;
|
||||
u8 volume;
|
||||
u8 note;
|
||||
u16 effect[MODPLAY_NUM_COMMANDS];
|
||||
u8 operand[MODPLAY_NUM_COMMANDS];
|
||||
} MOD_Note;
|
||||
|
||||
typedef struct MOD_ChannelEffect {
|
||||
|
||||
u16 cur_effect;
|
||||
u8 cur_operand;
|
||||
u16 last_effect;
|
||||
|
||||
/* Panning slide */
|
||||
u8 panslide_bak;
|
||||
/* Volume Slide */
|
||||
u8 volslide_bak;
|
||||
/* Portamento */
|
||||
u8 porta_bak;
|
||||
/* Tone portamento */
|
||||
u8 toneporta_bak;
|
||||
u32 toneporta_dest;
|
||||
/* Vibrato */
|
||||
u8 vibrato_depth;
|
||||
u8 vibrato_freq;
|
||||
u8 vibrato_bak;
|
||||
int vibrato_wave;
|
||||
u32 vibrato_base;
|
||||
int vibrato_sintabpos;
|
||||
/* Tremolo */
|
||||
u8 tremolo_depth;
|
||||
u8 tremolo_freq;
|
||||
u8 tremolo_bak;
|
||||
int tremolo_wave;
|
||||
u8 tremolo_base;
|
||||
int tremolo_sintabpos;
|
||||
/* Retrig */
|
||||
u8 retrig_count;
|
||||
u8 retrig_bak;
|
||||
/* Note delay */
|
||||
/* u8 notedelay_note;
|
||||
u8 notedelay_instrument;
|
||||
u8 notedelay_volume;
|
||||
u8 notedelay_tick;*/
|
||||
MOD_Note *notedelay_note;
|
||||
/* Note cut */
|
||||
u8 notecut_tick;
|
||||
/* Arpeggio */
|
||||
u8 arpeggio_count;
|
||||
u8 arpeggio_bak;
|
||||
u32 arpeggio_base;
|
||||
/* Offset */
|
||||
u8 offset_bak;
|
||||
/* Fine volslide */
|
||||
u8 finevolslidedown_bak;
|
||||
u8 finevolslideup_bak;
|
||||
u8 gvolslide_bak;
|
||||
} MOD_ChannelEffect;
|
||||
|
||||
typedef struct MOD_Sample {
|
||||
|
||||
MOD_SAMPLEINFO16 sampleInfo;
|
||||
|
||||
char name[28];
|
||||
u8 default_volume;
|
||||
u32 middle_c;
|
||||
u32 default_middle_c;
|
||||
s8 finetune;
|
||||
s8 relative_note;
|
||||
u8 panning;
|
||||
u8 volume;
|
||||
} MOD_Sample;
|
||||
|
||||
typedef struct MOD_Instrument {
|
||||
|
||||
char name[28];
|
||||
MOD_Sample *samples[256]; /* Instrument note -> Sample number mapping */
|
||||
u8 note[256]; /* Instrument note -> Sample note mapping */
|
||||
|
||||
EnvelopeConfig envPanning;
|
||||
EnvelopeConfig envVolume;
|
||||
u16 volumeFade;
|
||||
} MOD_Instrument;
|
||||
|
||||
typedef struct MOD_Channel {
|
||||
|
||||
u16 volumeFade;
|
||||
u16 volumeFadeDec;
|
||||
/* u32 instrument;*/
|
||||
MOD_Instrument *instrument;
|
||||
/* u32 sample;*/
|
||||
MOD_Sample *sample;
|
||||
MOD_VOICEINFO16 voiceInfo;
|
||||
Envelope envPanning;
|
||||
Envelope envVolume;
|
||||
|
||||
u8 default_panning;
|
||||
u8 cur_note;
|
||||
u32 st3_period;
|
||||
s32 st3_periodofs;
|
||||
u8 last_instrument;
|
||||
u8 last_note;
|
||||
|
||||
MOD_ChannelEffect effects[MODPLAY_NUM_COMMANDS];
|
||||
} MOD_Channel;
|
||||
|
||||
typedef struct MODFILE {
|
||||
|
||||
char songname[28];
|
||||
int nChannels;
|
||||
int nSFXChannels;
|
||||
int songlength;
|
||||
int nInstruments;
|
||||
int nSamples;
|
||||
int nPatterns;
|
||||
int restart_position;
|
||||
int period_type; /* 0 - Amiga, 1 - Linear (XM) */
|
||||
BOOL st2_vibrato;
|
||||
BOOL st2_tempo;
|
||||
BOOL amiga_sliding;
|
||||
BOOL optimize_vols;
|
||||
BOOL amiga_boundaries;
|
||||
BOOL enable_sfx; /* Fast volume slides */
|
||||
BOOL unsigned_samples;
|
||||
u8 master_volume;
|
||||
u8 cur_master_volume;
|
||||
u8 musicvolume;
|
||||
u8 sfxvolume;
|
||||
u8 start_speed;
|
||||
u8 start_tempo;
|
||||
u16 tracker_version;
|
||||
|
||||
u8 playlist[256];
|
||||
|
||||
MOD_Channel channels[MODPLAY_MAX_CHANNELS];
|
||||
MOD_Instrument *instruments;
|
||||
MOD_Sample *samples;
|
||||
MOD_Note **patterns;
|
||||
int *patternLengths;
|
||||
|
||||
int playfreq; /* Output frequency (11025, 22050 or 44100) */
|
||||
int bits; /* Output resolution (8 or 16 bits) */
|
||||
u16 *mixingbuf; /* Output buffer */
|
||||
int mixingbuflen; /* Output buffer length in bytes */
|
||||
int mixchannels; /* 1 = mono, 2 = stereo */
|
||||
BOOL mixsigned; /* mixingbuf is signed */
|
||||
|
||||
/* Play time variables */
|
||||
int patterndelay;
|
||||
int pattern_line;
|
||||
int play_position;
|
||||
int speedcounter;
|
||||
int speed;
|
||||
int bpm;
|
||||
int samplespertick;
|
||||
int samplescounter;
|
||||
|
||||
/* Pattern loop */
|
||||
int patternloop_to;
|
||||
int patternloop_count;
|
||||
|
||||
void *tempmixbuf;
|
||||
|
||||
int filetype;
|
||||
|
||||
BOOL playing;
|
||||
BOOL set;
|
||||
|
||||
u32 notebeats;
|
||||
void (*callback)(void*);
|
||||
|
||||
} MODFILE;
|
||||
|
||||
#include "modplay.h"
|
||||
|
||||
int MODFILE_Mix(MODFILE *mod, int flags, void *buf, int nSamples);
|
||||
u32 MODFILE_EffectHandler(MODFILE *mod);
|
||||
u32 MODFILE_Process(MODFILE *mod);
|
||||
BOOL MODFILE_TriggerNote(MODFILE *mod, int channel, u8 note, u8 instrument, u8 volume, u16 *commands);
|
||||
void MODFILE_SetBPM(MODFILE *mod, int bpm);
|
||||
int MODFILE_BPM2SamplesPerTick(MODFILE *mod, int bpm);
|
||||
char * MODFILE_GetNoteString(u8 note);
|
||||
u16 MODFILE_GetEffect(MODFILE*,int,int,int);
|
||||
u8 MODFILE_GetEffectOp(MODFILE*,int,int,int);
|
||||
u8 MODFILE_GetNote(MODFILE *mod, int patternline, int channel);
|
||||
u32 MODFILE_GetInstr(MODFILE *mod, int patternline, int channel);
|
||||
void MODFILE_ClearPattern(MODFILE *mod, int pattern);
|
||||
|
||||
void MODFILE_SetNote(MODFILE *mod, int channel, u8 note, int middle_c, s8 finetune);
|
||||
void MODFILE_SetPeriodOfs(MODFILE *mod, int channel, s32 periodofs);
|
||||
void MODFILE_SetPeriod(MODFILE *mod, int channel, u32 period);
|
||||
void MODFILE_SubVolume(MODFILE *mod, int channel, u8 sub);
|
||||
void MODFILE_AddVolume(MODFILE *mod, int channel, u8 add);
|
||||
|
||||
#endif
|
Binary file not shown.
@ -27,7 +27,7 @@
|
||||
|
||||
using namespace std;
|
||||
|
||||
void GC_Disc::init(char *path)
|
||||
void GC_Disc::init(const char *path)
|
||||
{
|
||||
opening_bnr = NULL;
|
||||
FSTable = NULL;
|
||||
|
@ -30,7 +30,7 @@ enum
|
||||
class GC_Disc
|
||||
{
|
||||
public:
|
||||
void init(char *path);
|
||||
void init(const char *path);
|
||||
void clear();
|
||||
u8 *GetGameCubeBanner();
|
||||
private:
|
||||
|
@ -62,7 +62,7 @@ static inline int loopNum(int i, int s)
|
||||
|
||||
CCoverFlow CoverFlow;
|
||||
|
||||
CCoverFlow::CCover::CCover(void)
|
||||
CCoverFlow::CCover::CCover(void)
|
||||
{
|
||||
index = 0;
|
||||
txtAngle = 0.f;
|
||||
@ -79,14 +79,17 @@ CCoverFlow::CCover::CCover(void)
|
||||
|
||||
CCoverFlow::CItem::CItem(dir_discHdr *itemHdr, const char *itemPic, const char *itemBoxPic, const char *itemBlankBoxPic, int playcount, unsigned int lastPlayed) :
|
||||
hdr(itemHdr),
|
||||
picPath(itemPic),
|
||||
boxPicPath(itemBoxPic),
|
||||
blankBoxPicPath(itemBlankBoxPic),
|
||||
playcount(playcount),
|
||||
lastPlayed(lastPlayed)
|
||||
lastPlayed(lastPlayed),
|
||||
boxTexture(false),
|
||||
state(STATE_Loading)
|
||||
{
|
||||
state = CCoverFlow::STATE_Loading;
|
||||
boxTexture = false;
|
||||
strncpy(picPath, itemPic, 127);
|
||||
picPath[127] = '\0';
|
||||
strncpy(boxPicPath, itemBoxPic, 127);
|
||||
boxPicPath[127] = '\0';
|
||||
strncpy(blankBoxPicPath, itemBlankBoxPic, 63);
|
||||
blankBoxPicPath[63] = '\0';
|
||||
}
|
||||
|
||||
static inline wchar_t upperCaseWChar(wchar_t c)
|
||||
@ -240,6 +243,8 @@ CCoverFlow::CCoverFlow(void)
|
||||
//
|
||||
m_loadingTexture = NULL;
|
||||
m_noCoverTexture = NULL;
|
||||
//
|
||||
m_covers = NULL;
|
||||
LWP_MutexInit(&m_mutex, 0);
|
||||
}
|
||||
|
||||
@ -315,14 +320,13 @@ void CCoverFlow::setHQcover(bool HQ)
|
||||
|
||||
void CCoverFlow::setBufferSize(u32 numCovers)
|
||||
{
|
||||
if(!m_covers.empty())
|
||||
return;
|
||||
if(m_covers != NULL) return;
|
||||
m_numBufCovers = min(max(4u, numCovers / 2u), 40u);
|
||||
}
|
||||
|
||||
void CCoverFlow::setTextures(const string &loadingPic, const string &loadingPicFlat, const string &noCoverPic, const string &noCoverPicFlat)
|
||||
{
|
||||
if (!m_covers.empty()) return;
|
||||
if (m_covers != NULL) return;
|
||||
m_pngLoadCover = loadingPic;
|
||||
m_pngLoadCoverFlat = loadingPicFlat;
|
||||
m_pngNoCover = noCoverPic;
|
||||
@ -335,7 +339,7 @@ void CCoverFlow::setFont(const SFont &font, const CColor &color)
|
||||
delete m_font.font;
|
||||
m_font = font;
|
||||
m_fontColor = color;
|
||||
if (!m_covers.empty())
|
||||
if (m_covers != NULL)
|
||||
{
|
||||
for (u32 i = 0; i < m_range; ++i)
|
||||
_loadCover(i, m_covers[i].index);
|
||||
@ -343,7 +347,7 @@ void CCoverFlow::setFont(const SFont &font, const CColor &color)
|
||||
}
|
||||
}
|
||||
|
||||
void CCoverFlow::_transposeCover(vector<CCoverFlow::CCover> &dst, u32 rows, u32 columns, int pos)
|
||||
void CCoverFlow::_transposeCover(CCover* &dst, u32 rows, u32 columns, int pos)
|
||||
{
|
||||
int i = pos - (int)(rows * columns / 2);
|
||||
int j = rows >= 3 ? abs(i) - ((abs(i) + (int)rows / 2) / (int)rows) * 2 : abs(i);
|
||||
@ -361,11 +365,12 @@ void CCoverFlow::setRange(u32 rows, u32 columns)
|
||||
u32 range = rows * columns;
|
||||
if (rows == m_rows && columns == m_columns && range == m_range)
|
||||
return;
|
||||
if (!m_covers.empty())
|
||||
if (m_covers != NULL)
|
||||
{
|
||||
stopCoverLoader();
|
||||
vector<CCoverFlow::CCover> tmpCovers;
|
||||
tmpCovers.resize(range);
|
||||
CCover *tmpCovers = (CCover*)MEM2_alloc(sizeof(CCover) * range);
|
||||
for(size_t i = 0; i < range; ++i)
|
||||
tmpCovers[i] = *(new(tmpCovers+i) CCover);
|
||||
if (rows >= 3)
|
||||
for (u32 x = 0; x < columns; ++x)
|
||||
for (u32 y = 1; y < rows - 1; ++y)
|
||||
@ -373,10 +378,11 @@ void CCoverFlow::setRange(u32 rows, u32 columns)
|
||||
else
|
||||
for (u32 x = 0; x < range; ++x)
|
||||
_transposeCover(tmpCovers, rows, columns, x);
|
||||
swap(tmpCovers, m_covers);
|
||||
m_rows = rows;
|
||||
m_columns = columns;
|
||||
m_range = range;
|
||||
MEM2_free(m_covers);
|
||||
m_covers = tmpCovers;
|
||||
_loadAllCovers(m_covers[m_range / 2].index);
|
||||
_updateAllTargets();
|
||||
startCoverLoader();
|
||||
@ -625,7 +631,7 @@ void CCoverFlow::stopSound(void)
|
||||
|
||||
void CCoverFlow::applySettings(void)
|
||||
{
|
||||
if (m_covers.empty()) return;
|
||||
if (m_covers == NULL) return;
|
||||
|
||||
LockMutex lock(m_mutex);
|
||||
_updateAllTargets();
|
||||
@ -634,6 +640,7 @@ void CCoverFlow::applySettings(void)
|
||||
void CCoverFlow::stopCoverLoader(bool empty)
|
||||
{
|
||||
m_loadingCovers = false;
|
||||
m_moved = true;
|
||||
if(coverLoaderThread != LWP_THREAD_NULL)
|
||||
{
|
||||
if(LWP_ThreadIsSuspended(coverLoaderThread))
|
||||
@ -657,7 +664,7 @@ void CCoverFlow::stopCoverLoader(bool empty)
|
||||
|
||||
void CCoverFlow::startCoverLoader(void)
|
||||
{
|
||||
if(m_covers.empty() || coverLoaderThread != LWP_THREAD_NULL || m_loadingCovers)
|
||||
if(m_covers == NULL || coverLoaderThread != LWP_THREAD_NULL || m_loadingCovers)
|
||||
return;
|
||||
|
||||
m_loadingCovers = true;
|
||||
@ -670,7 +677,9 @@ void CCoverFlow::startCoverLoader(void)
|
||||
void CCoverFlow::clear(void)
|
||||
{
|
||||
stopCoverLoader(true);
|
||||
m_covers.clear();
|
||||
if(m_covers != NULL)
|
||||
MEM2_free(m_covers);
|
||||
m_covers = NULL;
|
||||
m_items.clear();
|
||||
}
|
||||
|
||||
@ -701,7 +710,7 @@ void CCoverFlow::reserve(u32 capacity)
|
||||
|
||||
void CCoverFlow::addItem(dir_discHdr *hdr, const char *picPath, const char *boxPicPath, const char *blankBoxPicPath, int playcount, unsigned int lastPlayed)
|
||||
{
|
||||
if (!m_covers.empty()) return;
|
||||
if (m_covers != NULL) return;
|
||||
m_items.push_back(CCoverFlow::CItem(hdr, picPath, boxPicPath, blankBoxPicPath, playcount, lastPlayed));
|
||||
}
|
||||
|
||||
@ -946,7 +955,7 @@ void CCoverFlow::makeEffectTexture(const TexData * &bg)
|
||||
|
||||
void CCoverFlow::drawEffect(void)
|
||||
{
|
||||
if (m_covers.empty()) return;
|
||||
if (m_covers == NULL) return;
|
||||
|
||||
if (_effectVisible())
|
||||
{
|
||||
@ -1006,7 +1015,7 @@ void CCoverFlow::drawText(bool withRectangle)
|
||||
Vector3D dir(m_cameraAim);
|
||||
Vector3D pos(m_cameraPos);
|
||||
|
||||
if (m_covers.empty()) return;
|
||||
if (m_covers == NULL) return;
|
||||
if (m_fontColor.a == 0) return;
|
||||
|
||||
pos += _cameraMoves();
|
||||
@ -1048,7 +1057,7 @@ void CCoverFlow::_draw(DrawMode dm, bool mirror, bool blend)
|
||||
Vector3D pos(m_cameraPos);
|
||||
|
||||
if (mirror && m_mirrorAlpha <= 0.f) return;
|
||||
if (m_covers.empty()) return;
|
||||
if (m_covers == NULL) return;
|
||||
|
||||
pos += _cameraMoves();
|
||||
// GX setup
|
||||
@ -1496,38 +1505,38 @@ void CCoverFlow::_loadCover(int i, int item)
|
||||
|
||||
const char *CCoverFlow::getId(void) const
|
||||
{
|
||||
if (m_covers.empty() || m_items.empty()) return "";
|
||||
if (m_covers == NULL || m_items.empty()) return "";
|
||||
return m_items[loopNum(m_covers[m_range / 2].index + m_jump, m_items.size())].hdr->id;
|
||||
}
|
||||
|
||||
const char *CCoverFlow::getNextId(void) const
|
||||
{
|
||||
if (m_covers.empty() || m_items.empty()) return "";
|
||||
if (m_covers == NULL || m_items.empty()) return "";
|
||||
return m_items[loopNum(m_covers[m_range / 2].index + m_jump + 1, m_items.size())].hdr->id;
|
||||
}
|
||||
|
||||
dir_discHdr * CCoverFlow::getHdr(void) const
|
||||
const dir_discHdr * CCoverFlow::getHdr(void) const
|
||||
{
|
||||
if (m_covers.empty() || m_items.empty()) return NULL;
|
||||
if (m_covers == NULL || m_items.empty()) return NULL;
|
||||
return m_items[loopNum(m_covers[m_range / 2].index + m_jump, m_items.size())].hdr;
|
||||
}
|
||||
|
||||
dir_discHdr * CCoverFlow::getNextHdr(void) const
|
||||
const dir_discHdr * CCoverFlow::getNextHdr(void) const
|
||||
{
|
||||
if (m_covers.empty() || m_items.empty()) return NULL;
|
||||
if (m_covers == NULL || m_items.empty()) return NULL;
|
||||
return m_items[loopNum(m_covers[m_range / 2].index + m_jump + 1, m_items.size())].hdr;
|
||||
}
|
||||
|
||||
wstringEx CCoverFlow::getTitle(void) const
|
||||
{
|
||||
if (m_covers.empty()) return L"";
|
||||
if (m_covers == NULL) return L"";
|
||||
|
||||
return m_items[m_covers[m_range / 2].index].hdr->title;
|
||||
}
|
||||
|
||||
u64 CCoverFlow::getChanTitle(void) const
|
||||
{
|
||||
if (m_covers.empty() || m_items.empty()) return 0;
|
||||
if (m_covers == NULL || m_items.empty()) return 0;
|
||||
|
||||
return TITLE_ID(m_items[loopNum(m_covers[m_range / 2].index + m_jump, m_items.size())].hdr->settings[0],
|
||||
m_items[loopNum(m_covers[m_range / 2].index + m_jump, m_items.size())].hdr->settings[1]);
|
||||
@ -1554,7 +1563,7 @@ void CCoverFlow::RenderTex(void)
|
||||
|
||||
bool CCoverFlow::select(void)
|
||||
{
|
||||
if (m_covers.empty() || m_jump != 0) return false;
|
||||
if (m_covers == NULL || m_jump != 0) return false;
|
||||
if (m_selected) return true;
|
||||
|
||||
LockMutex lock(m_mutex);
|
||||
@ -1584,7 +1593,7 @@ bool CCoverFlow::select(void)
|
||||
|
||||
void CCoverFlow::cancel(void)
|
||||
{
|
||||
if (m_covers.empty()) return;
|
||||
if (m_covers == NULL) return;
|
||||
|
||||
LockMutex lock(m_mutex);
|
||||
_unselect();
|
||||
@ -1903,8 +1912,15 @@ bool CCoverFlow::start()
|
||||
m_loadingTexture = (m_box ? &m_boxLoadingTexture : &m_flatLoadingTexture);
|
||||
m_noCoverTexture = (m_box ? &m_boxNoCoverTexture : &m_flatNoCoverTexture);
|
||||
|
||||
m_covers.clear();
|
||||
m_covers.resize(m_range);
|
||||
if(m_covers != NULL)
|
||||
MEM2_free(m_covers);
|
||||
m_covers = NULL;
|
||||
if(m_range > 0)
|
||||
{
|
||||
m_covers = (CCover*)MEM2_alloc(sizeof(struct CCover) * m_range);
|
||||
for(size_t i = 0; i < m_range; ++i)
|
||||
m_covers[i] = *(new(m_covers+i) CCover);
|
||||
}
|
||||
m_jump = 0;
|
||||
m_selected = false;
|
||||
m_moved = true;
|
||||
@ -1913,7 +1929,7 @@ bool CCoverFlow::start()
|
||||
|
||||
void CCoverFlow::up(void)
|
||||
{
|
||||
if (m_covers.empty()) return;
|
||||
if (m_covers == NULL) return;
|
||||
if (m_jump != 0) return;
|
||||
|
||||
LockMutex lock(m_mutex);
|
||||
@ -1922,7 +1938,7 @@ void CCoverFlow::up(void)
|
||||
|
||||
void CCoverFlow::down(void)
|
||||
{
|
||||
if (m_covers.empty()) return;
|
||||
if (m_covers == NULL) return;
|
||||
if (m_jump != 0) return;
|
||||
|
||||
LockMutex lock(m_mutex);
|
||||
@ -1931,7 +1947,7 @@ void CCoverFlow::down(void)
|
||||
|
||||
void CCoverFlow::left(void)
|
||||
{
|
||||
if (m_covers.empty()) return;
|
||||
if (m_covers == NULL) return;
|
||||
if (m_jump != 0) return;
|
||||
|
||||
LockMutex lock(m_mutex);
|
||||
@ -1940,7 +1956,7 @@ void CCoverFlow::left(void)
|
||||
|
||||
void CCoverFlow::right(void)
|
||||
{
|
||||
if (m_covers.empty()) return;
|
||||
if (m_covers == NULL) return;
|
||||
if (m_jump != 0) return;
|
||||
|
||||
LockMutex lock(m_mutex);
|
||||
@ -2031,14 +2047,14 @@ void CCoverFlow::_right(int repeatDelay, u32 step)
|
||||
|
||||
u32 CCoverFlow::_currentPos(void) const
|
||||
{
|
||||
if (m_covers.empty()) return 0;
|
||||
if (m_covers == NULL) return 0;
|
||||
|
||||
return m_covers[m_range / 2].index;
|
||||
}
|
||||
|
||||
void CCoverFlow::mouse(int chan, int x, int y)
|
||||
{
|
||||
if (m_covers.empty()) return;
|
||||
if (m_covers == NULL) return;
|
||||
|
||||
int m = m_mouse[chan];
|
||||
if (x < 0 || y < 0)
|
||||
@ -2060,7 +2076,7 @@ void CCoverFlow::mouse(int chan, int x, int y)
|
||||
|
||||
bool CCoverFlow::mouseOver(int x, int y)
|
||||
{
|
||||
if (m_covers.empty()) return false;
|
||||
if (m_covers == NULL) return false;
|
||||
|
||||
m_vid.prepareStencil();
|
||||
_draw(CCoverFlow::CFDR_STENCIL, false, false);
|
||||
@ -2076,7 +2092,7 @@ bool CCoverFlow::findId(const char *id, bool instant, bool path)
|
||||
LockMutex lock(m_mutex);
|
||||
u32 i, curPos = _currentPos();
|
||||
|
||||
if(m_items.empty() || (instant && m_covers.empty()) || strlen(id) == 0)
|
||||
if(m_items.empty() || (instant && m_covers == NULL) || strlen(id) == 0)
|
||||
return false;
|
||||
//
|
||||
for(i = 0; i < m_items.size(); ++i)
|
||||
@ -2111,7 +2127,7 @@ bool CCoverFlow::findId(const char *id, bool instant, bool path)
|
||||
|
||||
void CCoverFlow::pageUp(void)
|
||||
{
|
||||
if (m_covers.empty()) return;
|
||||
if (m_covers == NULL) return;
|
||||
|
||||
int n, j;
|
||||
if (m_rows >= 3)
|
||||
@ -2138,7 +2154,7 @@ void CCoverFlow::pageUp(void)
|
||||
|
||||
void CCoverFlow::pageDown(void)
|
||||
{
|
||||
if (m_covers.empty()) return;
|
||||
if (m_covers == NULL) return;
|
||||
|
||||
int n, j;
|
||||
if (m_rows >= 3)
|
||||
@ -2165,7 +2181,7 @@ void CCoverFlow::pageDown(void)
|
||||
|
||||
void CCoverFlow::flip(bool force, bool f)
|
||||
{
|
||||
if (m_covers.empty() || !m_selected) return;
|
||||
if (m_covers == NULL || !m_selected) return;
|
||||
LockMutex lock(m_mutex);
|
||||
|
||||
CCoverFlow::CCover &cvr = m_covers[m_range / 2];
|
||||
@ -2230,7 +2246,7 @@ void CCoverFlow::_completeJump(void)
|
||||
|
||||
void CCoverFlow::nextLetter(wchar_t *c)
|
||||
{
|
||||
if (m_covers.empty())
|
||||
if (m_covers == NULL)
|
||||
{
|
||||
c[0] = L'\0';
|
||||
return;
|
||||
@ -2269,7 +2285,7 @@ void CCoverFlow::nextLetter(wchar_t *c)
|
||||
|
||||
void CCoverFlow::prevLetter(wchar_t *c)
|
||||
{
|
||||
if (m_covers.empty())
|
||||
if (m_covers == NULL)
|
||||
{
|
||||
c[0] = L'\0';
|
||||
return;
|
||||
@ -2504,7 +2520,7 @@ void CCoverFlow::_jump(void)
|
||||
|
||||
void CCoverFlow::tick(void)
|
||||
{
|
||||
if (m_covers.empty()) return;
|
||||
if (m_covers == NULL) return;
|
||||
|
||||
LockMutex lock(m_mutex);
|
||||
++m_tickCount;
|
||||
@ -2606,8 +2622,8 @@ bool CCoverFlow::_loadCoverTexPNG(u32 i, bool box, bool hq, bool blankBoxCover)
|
||||
if (!m_loadingCovers) return false;
|
||||
|
||||
u8 textureFmt = m_compressTextures ? GX_TF_CMPR : GX_TF_RGB565;
|
||||
const char *path = box ? (blankBoxCover ? m_items[i].blankBoxPicPath.c_str() :
|
||||
m_items[i].boxPicPath.c_str()) : m_items[i].picPath.c_str();
|
||||
const char *path = box ? (blankBoxCover ? m_items[i].blankBoxPicPath :
|
||||
m_items[i].boxPicPath) : m_items[i].picPath;
|
||||
TexData tex;
|
||||
tex.thread = true;
|
||||
m_renderingTex = &tex;
|
||||
@ -2633,24 +2649,21 @@ bool CCoverFlow::_loadCoverTexPNG(u32 i, bool box, bool hq, bool blankBoxCover)
|
||||
u32 bufSize = fixGX_GetTexBufferSize(tex.width, tex.height, tex.format, tex.maxLOD > 0 ? GX_TRUE : GX_FALSE, tex.maxLOD);
|
||||
uLongf zBufferSize = m_compressCache ? bufSize + bufSize / 100 + 12 : bufSize;
|
||||
u8 *zBuffer = m_compressCache ? (u8*)MEM2_alloc(zBufferSize) : tex.data;
|
||||
if (!!zBuffer && (!m_compressCache || compress(zBuffer, &zBufferSize, tex.data, bufSize) == Z_OK))
|
||||
if(!!zBuffer && (!m_compressCache || compress(zBuffer, &zBufferSize, tex.data, bufSize) == Z_OK))
|
||||
{
|
||||
char gamePath[256];
|
||||
char gamePath[128];
|
||||
gamePath[127] = '\0';
|
||||
if(blankBoxCover)
|
||||
{
|
||||
string tempName = m_items[i].blankBoxPicPath.c_str();
|
||||
tempName.assign(&tempName[tempName.find_last_of('/') + 1]);
|
||||
strncpy(gamePath, tempName.c_str(), sizeof(gamePath));
|
||||
}
|
||||
strncpy(gamePath, strrchr(m_items[i].blankBoxPicPath, '/') + 1, 127);
|
||||
else if(NoGameID(m_items[i].hdr->type))
|
||||
{
|
||||
if(string(m_items[i].hdr->path).find_last_of("/") != string::npos)
|
||||
strncpy(gamePath, &m_items[i].hdr->path[string(m_items[i].hdr->path).find_last_of("/")+1], sizeof(gamePath));
|
||||
if(strrchr(m_items[i].hdr->path, '/') != NULL)
|
||||
strncpy(gamePath, strrchr(m_items[i].hdr->path, '/') + 1, 127);
|
||||
else
|
||||
strncpy(gamePath, m_items[i].hdr->path, sizeof(gamePath));
|
||||
strncpy(gamePath, m_items[i].hdr->path, 127);
|
||||
}
|
||||
else
|
||||
strncpy(gamePath, m_items[i].hdr->id, sizeof(gamePath));
|
||||
strncpy(gamePath, m_items[i].hdr->id, 6);
|
||||
FILE *file = fopen(fmt("%s/%s.wfc", m_cachePath.c_str(), gamePath), "wb");
|
||||
if(file != NULL)
|
||||
{
|
||||
@ -2721,22 +2734,19 @@ CCoverFlow::CLRet CCoverFlow::_loadCoverTex(u32 i, bool box, bool hq, bool blank
|
||||
// Try to find the texture in the cache
|
||||
if(!m_cachePath.empty())
|
||||
{
|
||||
char gamePath[256];
|
||||
char gamePath[128];
|
||||
memset(gamePath, 0, 128);
|
||||
if(blankBoxCover)
|
||||
{
|
||||
string tempName = m_items[i].blankBoxPicPath.c_str();
|
||||
tempName.assign(&tempName[tempName.find_last_of('/') + 1]);
|
||||
strncpy(gamePath, tempName.c_str(), sizeof(gamePath));
|
||||
}
|
||||
strncpy(gamePath, strrchr(m_items[i].blankBoxPicPath, '/') + 1, 127);
|
||||
else if(NoGameID(m_items[i].hdr->type))
|
||||
{
|
||||
if(string(m_items[i].hdr->path).find_last_of("/") != string::npos)
|
||||
strncpy(gamePath, &m_items[i].hdr->path[string(m_items[i].hdr->path).find_last_of("/")+1], sizeof(gamePath));
|
||||
if(strrchr(m_items[i].hdr->path, '/') != NULL)
|
||||
strncpy(gamePath, strrchr(m_items[i].hdr->path, '/') + 1, 127);
|
||||
else
|
||||
strncpy(gamePath, m_items[i].hdr->path, sizeof(gamePath));
|
||||
strncpy(gamePath, m_items[i].hdr->path, 127);
|
||||
}
|
||||
else
|
||||
strncpy(gamePath, m_items[i].hdr->id, sizeof(gamePath));
|
||||
strncpy(gamePath, m_items[i].hdr->id, 6);
|
||||
FILE *fp = fopen(fmt("%s/%s.wfc", m_cachePath.c_str(), gamePath), "rb");
|
||||
if(fp != NULL)
|
||||
{
|
||||
|
@ -128,8 +128,8 @@ public:
|
||||
//
|
||||
const char *getId(void) const;
|
||||
const char *getNextId(void) const;
|
||||
dir_discHdr * getHdr(void) const;
|
||||
dir_discHdr * getNextHdr(void) const;
|
||||
const dir_discHdr * getHdr(void) const;
|
||||
const dir_discHdr * getNextHdr(void) const;
|
||||
wstringEx getTitle(void) const;
|
||||
u64 getChanTitle(void) const;
|
||||
//
|
||||
@ -194,18 +194,18 @@ private:
|
||||
enum TexState { STATE_Loading, STATE_Ready, STATE_NoCover };
|
||||
struct CItem
|
||||
{
|
||||
CItem(dir_discHdr *itemHdr, const char *itemPic, const char *itemBoxPic,
|
||||
const char *itemBlankBoxPic, int playcount, unsigned int lastPlayed);
|
||||
dir_discHdr *hdr;
|
||||
string picPath;
|
||||
string boxPicPath;
|
||||
string blankBoxPicPath;
|
||||
char picPath[128];
|
||||
char boxPicPath[128];
|
||||
char blankBoxPicPath[64];
|
||||
int playcount;
|
||||
unsigned int lastPlayed;
|
||||
TexData texture;
|
||||
volatile bool boxTexture;
|
||||
volatile enum TexState state;
|
||||
//
|
||||
CItem(dir_discHdr *itemHdr, const char *itemPic, const char *itemBoxPic, const char *itemBlankBoxPic, int playcount, unsigned int lastPlayed);
|
||||
};
|
||||
} ATTRIBUTE_PACKED;
|
||||
struct CCover
|
||||
{
|
||||
u32 index;
|
||||
@ -238,7 +238,7 @@ private:
|
||||
Vector3D m_targetCameraPos;
|
||||
Vector3D m_targetCameraAim;
|
||||
vector<CItem> m_items;
|
||||
vector<CCover> m_covers;
|
||||
CCover *m_covers;
|
||||
int m_delay;
|
||||
int m_minDelay;
|
||||
int m_jump;
|
||||
@ -345,7 +345,7 @@ private:
|
||||
CLRet _loadCoverTex(u32 i, bool box, bool hq, bool blankBoxCover);
|
||||
bool _invisibleCover(u32 x, u32 y);
|
||||
void _instantTarget(int i);
|
||||
void _transposeCover(vector<CCover> &dst, u32 rows, u32 columns, int pos);
|
||||
void _transposeCover(CCover* &dst, u32 rows, u32 columns, int pos);
|
||||
|
||||
void _stopSound(GuiSound * &snd);
|
||||
void _playSound(GuiSound * &snd);
|
||||
|
@ -237,13 +237,11 @@ bool SFont::fromFile(const char *filename, u32 size, u32 lspacing, u32 w, u32 id
|
||||
static const wchar_t *g_whitespaces = L" \f\n\r\t\v";
|
||||
void CText::setText(const SFont &font, const wstringEx &t)
|
||||
{
|
||||
CText::SWord w;
|
||||
SWord w;
|
||||
m_lines.clear();
|
||||
if(font.font != NULL)
|
||||
m_font = font;
|
||||
if(m_font.font == NULL)
|
||||
if(font.font == NULL)
|
||||
return;
|
||||
|
||||
m_font = font;
|
||||
firstLine = 0;
|
||||
// Don't care about performance
|
||||
vector<wstringEx> lines = stringToVector(t, L'\n');
|
||||
@ -252,7 +250,7 @@ void CText::setText(const SFont &font, const wstringEx &t)
|
||||
for (u32 k = 0; k < lines.size(); ++k)
|
||||
{
|
||||
wstringEx &l = lines[k];
|
||||
m_lines.push_back(CText::CLine());
|
||||
m_lines.push_back(CLine());
|
||||
m_lines.back().reserve(32);
|
||||
wstringEx::size_type i = l.find_first_not_of(g_whitespaces);
|
||||
wstringEx::size_type j;
|
||||
@ -277,7 +275,7 @@ void CText::setText(const SFont &font, const wstringEx &t)
|
||||
|
||||
void CText::setText(const SFont &font, const wstringEx &t, u32 startline)
|
||||
{
|
||||
CText::SWord w;
|
||||
SWord w;
|
||||
totalHeight = 0;
|
||||
|
||||
m_lines.clear();
|
||||
@ -294,7 +292,7 @@ void CText::setText(const SFont &font, const wstringEx &t, u32 startline)
|
||||
for (u32 k = 0; k < lines.size(); ++k)
|
||||
{
|
||||
wstringEx &l = lines[k];
|
||||
m_lines.push_back(CText::CLine());
|
||||
m_lines.push_back(CLine());
|
||||
m_lines.back().reserve(32);
|
||||
wstringEx::size_type i = l.find_first_not_of(g_whitespaces);
|
||||
wstringEx::size_type j;
|
||||
@ -333,7 +331,7 @@ void CText::setFrame(float width, u16 style, bool ignoreNewlines, bool instant)
|
||||
|
||||
for (u32 k = firstLine; k < m_lines.size(); ++k)
|
||||
{
|
||||
CText::CLine &words = m_lines[k];
|
||||
CLine &words = m_lines[k];
|
||||
if (words.empty())
|
||||
{
|
||||
posY += (float)m_font.lineSpacing;
|
||||
|
@ -28,6 +28,14 @@ private:
|
||||
size_t dataSize;
|
||||
};
|
||||
|
||||
struct SWord
|
||||
{
|
||||
wstringEx text;
|
||||
Vector3D pos;
|
||||
Vector3D targetPos;
|
||||
};
|
||||
typedef vector<SWord> CLine;
|
||||
|
||||
class CText
|
||||
{
|
||||
public:
|
||||
@ -39,14 +47,6 @@ public:
|
||||
void draw(void);
|
||||
int getTotalHeight();
|
||||
private:
|
||||
struct SWord
|
||||
{
|
||||
wstringEx text;
|
||||
Vector3D pos;
|
||||
Vector3D targetPos;
|
||||
};
|
||||
private:
|
||||
typedef vector<SWord> CLine;
|
||||
vector<CLine> m_lines;
|
||||
SFont m_font;
|
||||
CColor m_color;
|
||||
|
@ -60,6 +60,12 @@ void MEM1_lo_free(void *p)
|
||||
g_mem1lo.release(p);
|
||||
}
|
||||
|
||||
unsigned int MEM1_lo_freesize()
|
||||
{
|
||||
return g_mem1lo.FreeSize();
|
||||
}
|
||||
|
||||
|
||||
void *MEM1_alloc(unsigned int s)
|
||||
{
|
||||
return __real_malloc(s);
|
||||
@ -84,7 +90,7 @@ void MEM1_free(void *p)
|
||||
|
||||
unsigned int MEM1_freesize()
|
||||
{
|
||||
return (g_mem1lo.FreeSize() + SYS_GetArena1Size());
|
||||
return SYS_GetArena1Size();
|
||||
}
|
||||
|
||||
|
||||
@ -105,6 +111,11 @@ void MEM2_lo_free(void *p)
|
||||
g_mem2lo_gp.release(p);
|
||||
}
|
||||
|
||||
unsigned int MEM2_lo_freesize()
|
||||
{
|
||||
return g_mem2lo_gp.FreeSize();
|
||||
}
|
||||
|
||||
|
||||
void MEM2_free(void *p)
|
||||
{
|
||||
|
@ -13,6 +13,7 @@ void MEM_init();
|
||||
|
||||
void *MEM1_lo_alloc(unsigned int s);
|
||||
void MEM1_lo_free(void *p);
|
||||
unsigned int MEM1_lo_freesize();
|
||||
|
||||
void *MEM1_alloc(unsigned int s);
|
||||
void *MEM1_memalign(unsigned int a, unsigned int s);
|
||||
@ -23,6 +24,7 @@ unsigned int MEM1_freesize();
|
||||
void *MEM2_lo_alloc(unsigned int s);
|
||||
void *MEM2_lo_realloc(void *p, unsigned int s);
|
||||
void MEM2_lo_free(void *p);
|
||||
unsigned int MEM2_lo_freesize();
|
||||
|
||||
void MEM2_free(void *p);
|
||||
void *MEM2_alloc(unsigned int s);
|
||||
|
@ -1616,15 +1616,15 @@ void CMenu::_initCF(void)
|
||||
Config dump, gameAgeList;
|
||||
GameTDB gametdb;
|
||||
const char *domain = _domainFromView();
|
||||
|
||||
|
||||
CoverFlow.clear();
|
||||
CoverFlow.reserve(m_gameList.size());
|
||||
|
||||
bool dumpGameLst = m_cfg.getBool(domain, "dump_list", true);
|
||||
bool dumpGameLst = m_cfg.getBool(domain, "dump_list", true);
|
||||
if(dumpGameLst) dump.load(fmt("%s/" TITLES_DUMP_FILENAME, m_settingsDir.c_str()));
|
||||
|
||||
m_gcfg1.load(fmt("%s/" GAME_SETTINGS1_FILENAME, m_settingsDir.c_str()));
|
||||
|
||||
|
||||
int ageLock = m_cfg.getInt("GENERAL", "age_lock");
|
||||
if (ageLock < 2 || ageLock > 19)
|
||||
ageLock = 19;
|
||||
@ -1639,7 +1639,7 @@ void CMenu::_initCF(void)
|
||||
}
|
||||
_checkForSinglePlugin();
|
||||
const vector<bool> &EnabledPlugins = m_plugin.GetEnabledPlugins(m_cfg);
|
||||
|
||||
|
||||
for(vector<dir_discHdr>::iterator element = m_gameList.begin(); element != m_gameList.end(); ++element)
|
||||
{
|
||||
string id;
|
||||
@ -1905,7 +1905,7 @@ void CMenu::_initCF(void)
|
||||
CoverFlow.addItem(&(*element), fmt("%s/%s.png", m_picDir.c_str(), id.c_str()), fmt("%s/%s.png", m_boxPicDir.c_str(), id.c_str()), fmt("%s/%s", m_boxPicDir.c_str(), blankCoverName.c_str()), playcount, lastPlayed);
|
||||
}
|
||||
}
|
||||
if(gametdb.IsLoaded())
|
||||
if(gametdb.IsLoaded())
|
||||
gametdb.CloseFile();
|
||||
m_gcfg1.unload();
|
||||
if (dumpGameLst)
|
||||
@ -2037,7 +2037,10 @@ void CMenu::_mainLoopCommon(bool withCF, bool adjusting)
|
||||
}
|
||||
|
||||
#ifdef SHOWMEM
|
||||
m_btnMgr.setText(m_mem2FreeSize, wfmt(L"Mem2 Free:%u, Mem1 Free:%u", MEM2_freesize(), MEM1_freesize()), true);
|
||||
m_btnMgr.setText(m_mem1FreeSize, wfmt(L"Mem1 lo Free:%u, Mem1 Free:%u",
|
||||
MEM1_lo_freesize(), MEM1_freesize()), true);
|
||||
m_btnMgr.setText(m_mem2FreeSize, wfmt(L"Mem2 lo Free:%u, Mem2 Free:%u",
|
||||
MEM2_lo_freesize(), MEM2_freesize()), true);
|
||||
#endif
|
||||
|
||||
#ifdef SHOWMEMGECKO
|
||||
@ -2565,7 +2568,7 @@ char tmp[256];
|
||||
const char *CMenu::_getId()
|
||||
{
|
||||
const char *id = NULL;
|
||||
dir_discHdr *hdr = CoverFlow.getHdr();
|
||||
const dir_discHdr *hdr = CoverFlow.getHdr();
|
||||
if(hdr->type == TYPE_HOMEBREW)
|
||||
id = strrchr(hdr->path, '/') + 1;
|
||||
else if(hdr->type == TYPE_PLUGIN)
|
||||
|
@ -149,6 +149,7 @@ private:
|
||||
s16 m_mainLblLetter;
|
||||
s16 m_mainLblCurMusic;
|
||||
#ifdef SHOWMEM
|
||||
s16 m_mem1FreeSize;
|
||||
s16 m_mem2FreeSize;
|
||||
#endif
|
||||
#ifdef SHOWMEMGECKO
|
||||
|
@ -111,7 +111,7 @@ void CMenu::_updateCheckboxes(void)
|
||||
|
||||
void CMenu::_getIDCats(void)
|
||||
{
|
||||
dir_discHdr *hdr = CoverFlow.getHdr();
|
||||
const dir_discHdr *hdr = CoverFlow.getHdr();
|
||||
switch(hdr->type)
|
||||
{
|
||||
case TYPE_CHANNEL:
|
||||
|
@ -255,7 +255,7 @@ static void _extractChannelBnr(const u64 chantitle)
|
||||
ChannelHandle.GetBanner(chantitle);
|
||||
}
|
||||
|
||||
static void _extractBnr(dir_discHdr *hdr)
|
||||
static void _extractBnr(const dir_discHdr *hdr)
|
||||
{
|
||||
u32 size = 0;
|
||||
DeviceHandle.OpenWBFS(currentPartition);
|
||||
@ -555,7 +555,8 @@ void CMenu::_game(bool launch)
|
||||
m_gameSound.FreeMemory();
|
||||
CheckGameSoundThread();
|
||||
m_banner.DeleteBanner();
|
||||
dir_discHdr *hdr = CoverFlow.getHdr();
|
||||
dir_discHdr *hdr = (dir_discHdr*)MEM2_alloc(sizeof(dir_discHdr));
|
||||
memcpy(hdr, CoverFlow.getHdr(), sizeof(dir_discHdr));
|
||||
m_gcfg2.load(fmt("%s/" GAME_SETTINGS2_FILENAME, m_settingsDir.c_str()));
|
||||
// change to current games partition and set last_view for recall later
|
||||
switch(hdr->type)
|
||||
@ -1501,7 +1502,7 @@ void CMenu::_gameSoundThread(CMenu *m)
|
||||
m->m_gamesound_changed = false;
|
||||
CurrentBanner.ClearBanner();
|
||||
|
||||
dir_discHdr *GameHdr = CoverFlow.getHdr();
|
||||
const dir_discHdr *GameHdr = CoverFlow.getHdr();
|
||||
if(GameHdr->type == TYPE_PLUGIN)
|
||||
{
|
||||
m_banner.DeleteBanner();
|
||||
|
@ -81,7 +81,8 @@ static bool show_emu = true;
|
||||
void CMenu::_showMain(void)
|
||||
{
|
||||
_hideWaitMessage();
|
||||
#ifdef SHOWMEM
|
||||
#ifdef SHOWMEM
|
||||
m_btnMgr.show(m_mem1FreeSize);
|
||||
m_btnMgr.show(m_mem2FreeSize);
|
||||
#endif
|
||||
m_vid.set2DViewport(m_cfg.getInt("GENERAL", "tv_width", 640), m_cfg.getInt("GENERAL", "tv_height", 480),
|
||||
@ -941,8 +942,9 @@ void CMenu::_initMainMenu()
|
||||
m_mainLblLetter = _addLabel("MAIN/LETTER", theme.titleFont, L"", 540, 40, 80, 80, theme.titleFontColor, FTGX_JUSTIFY_CENTER | FTGX_ALIGN_MIDDLE, emptyTex);
|
||||
m_mainLblNotice = _addLabel("MAIN/NOTICE", theme.titleFont, L"", 340, 40, 280, 80, theme.titleFontColor, FTGX_JUSTIFY_RIGHT | FTGX_ALIGN_MIDDLE, emptyTex);
|
||||
m_mainLblCurMusic = _addLabel("MAIN/MUSIC", theme.btnFont, L"", 0, 20, 640, 56, theme.btnFontColor, FTGX_JUSTIFY_CENTER | FTGX_ALIGN_MIDDLE, theme.btnTexC);
|
||||
#ifdef SHOWMEM
|
||||
m_mem2FreeSize = _addLabel("MEM2", theme.titleFont, L"", 40, 300, 480, 80, theme.titleFontColor, FTGX_JUSTIFY_CENTER | FTGX_ALIGN_MIDDLE, emptyTex);
|
||||
#ifdef SHOWMEM
|
||||
m_mem1FreeSize = _addLabel("MEM1", theme.btnFont, L"", 0, 300, 480, 56, theme.btnFontColor, FTGX_JUSTIFY_LEFT, emptyTex);
|
||||
m_mem2FreeSize = _addLabel("MEM2", theme.btnFont, L"", 0, 356, 480, 56, theme.btnFontColor, FTGX_JUSTIFY_LEFT, emptyTex);
|
||||
#endif
|
||||
//
|
||||
m_mainPrevZone.x = m_theme.getInt("MAIN/ZONES", "prev_x", -32);
|
||||
@ -995,6 +997,7 @@ void CMenu::_initMainMenu()
|
||||
_setHideAnim(m_mainLblNotice, "MAIN/NOTICE", 0, 0, 0.f, 0.f);
|
||||
_setHideAnim(m_mainLblCurMusic, "MAIN/MUSIC", 0, -100, 0.f, 0.f);
|
||||
#ifdef SHOWMEM
|
||||
_setHideAnim(m_mem1FreeSize, "MEM1", 0, 0, 0.f, 0.f);
|
||||
_setHideAnim(m_mem2FreeSize, "MEM2", 0, 0, 0.f, 0.f);
|
||||
#endif
|
||||
_hideMain(true);
|
||||
|
@ -280,7 +280,7 @@ bool CMenu::_wbfsOp(CMenu::WBFS_OP op)
|
||||
bool upd_dml = false;
|
||||
bool upd_emu = false;
|
||||
bool out = false;
|
||||
dir_discHdr *CF_Hdr = CoverFlow.getHdr();
|
||||
const dir_discHdr *CF_Hdr = CoverFlow.getHdr();
|
||||
char cfPos[7];
|
||||
cfPos[6] = '\0';
|
||||
strncpy(cfPos, CoverFlow.getNextId(), 6);
|
||||
@ -418,7 +418,7 @@ bool CMenu::_wbfsOp(CMenu::WBFS_OP op)
|
||||
else if(CF_Hdr->type == TYPE_WII_GAME)
|
||||
{
|
||||
DeviceHandle.OpenWBFS(currentPartition);
|
||||
WBFS_RemoveGame((u8*)&CF_Hdr->id, CF_Hdr->path);
|
||||
WBFS_RemoveGame((u8*)&CF_Hdr->id, (char*)&CF_Hdr->path);
|
||||
WBFS_Close();
|
||||
upd_usb = true;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user