Menu fixed, path problems on Windows fixed. b14 released.
This commit is contained in:
parent
70da276a58
commit
127ac9891b
5 changed files with 105 additions and 74 deletions
144
singe/Menu.singe
144
singe/Menu.singe
|
@ -29,69 +29,6 @@ function compareTitles(a, b)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
function wrapText(text, maxWidth)
|
|
||||||
local words = {}
|
|
||||||
local line = ""
|
|
||||||
local lastLine = ""
|
|
||||||
local lastWord = ""
|
|
||||||
local newLine = false
|
|
||||||
local trimBreak = utilTrim(WRAP_BREAK)
|
|
||||||
|
|
||||||
-- Break input into words
|
|
||||||
for w in text:gmatch("%S+") do
|
|
||||||
words[#words+1] = w
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Iterate over words and try to fit them in the space given
|
|
||||||
for _, word in ipairs(words) do
|
|
||||||
|
|
||||||
-- Add new word to line
|
|
||||||
lastLine = line
|
|
||||||
if newLine then
|
|
||||||
line = lastWord
|
|
||||||
newLine = false
|
|
||||||
end
|
|
||||||
line = utilTrim(line .. " " .. word)
|
|
||||||
|
|
||||||
-- Create a temporary sprite to see how wide this is
|
|
||||||
if string.len(line) > 0 then
|
|
||||||
spriteTemp = fontToSprite(line)
|
|
||||||
if spriteGetWidth(spriteTemp) > maxWidth or word == trimBreak then
|
|
||||||
-- Was the wrap forced?
|
|
||||||
if word == trimBreak then
|
|
||||||
word = ""
|
|
||||||
if spriteGetWidth(spriteTemp) <= maxWidth then
|
|
||||||
lastLine = lastLine .. lastWord
|
|
||||||
end
|
|
||||||
end
|
|
||||||
-- We wrapped - Create sprite from this line before the last word was added
|
|
||||||
if string.len(lastLine) > 0 then
|
|
||||||
table.insert(TEXT_SPRITE_LIST, fontToSprite(lastLine))
|
|
||||||
else
|
|
||||||
-- Blank line?
|
|
||||||
table.insert(TEXT_SPRITE_LIST, -1)
|
|
||||||
end
|
|
||||||
-- Get ready for the next line
|
|
||||||
line = ""
|
|
||||||
lastWord = word
|
|
||||||
newLine = true
|
|
||||||
end
|
|
||||||
spriteUnload(spriteTemp)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
if newLine then
|
|
||||||
line = lastWord
|
|
||||||
end
|
|
||||||
|
|
||||||
if string.len(line) > 0 then
|
|
||||||
-- Create sprite from remaining text
|
|
||||||
table.insert(TEXT_SPRITE_LIST, fontToSprite(line))
|
|
||||||
end
|
|
||||||
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
function loadGameAssets(firstGame)
|
function loadGameAssets(firstGame)
|
||||||
|
|
||||||
if not firstGame then
|
if not firstGame then
|
||||||
|
@ -161,10 +98,7 @@ function onInputPressed(what)
|
||||||
end
|
end
|
||||||
|
|
||||||
if what == SWITCH_START1 or what == SWITCH_START2 or what == SWITCH_BUTTON1 or what == SWITCH_BUTTON2 or what == SWITCH_BUTTON3 or what == SWITCH_BUTTON4 then
|
if what == SWITCH_START1 or what == SWITCH_START2 or what == SWITCH_BUTTON1 or what == SWITCH_BUTTON2 or what == SWITCH_BUTTON3 or what == SWITCH_BUTTON4 then
|
||||||
-- Save what game we're currently viewing
|
saveConfig()
|
||||||
local cfg = io.open(CONFIG_FILE, "w")
|
|
||||||
cfg:write("GAME_SELECTED = " .. GAME_SELECTED .. "\n")
|
|
||||||
cfg:close()
|
|
||||||
-- Start next game
|
-- Start next game
|
||||||
scriptPush(GAME_LIST[GAME_SELECTED])
|
scriptPush(GAME_LIST[GAME_SELECTED])
|
||||||
end
|
end
|
||||||
|
@ -228,6 +162,82 @@ function onOverlayUpdate()
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
function onShutdown()
|
||||||
|
saveConfig()
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
function saveConfig()
|
||||||
|
if GAME_COUNT > 0 then
|
||||||
|
-- Save what game we're currently viewing
|
||||||
|
local cfg = io.open(CONFIG_FILE, "w")
|
||||||
|
cfg:write("GAME_SELECTED = " .. GAME_SELECTED .. "\n")
|
||||||
|
cfg:close()
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
function wrapText(text, maxWidth)
|
||||||
|
local words = {}
|
||||||
|
local toWrap = ""
|
||||||
|
local line = ""
|
||||||
|
local lastLine = ""
|
||||||
|
local fragment = ""
|
||||||
|
local doBreak = false
|
||||||
|
local spriteTemp = -1
|
||||||
|
local trimBreak = utilTrim(WRAP_BREAK)
|
||||||
|
|
||||||
|
-- Break input into words
|
||||||
|
toWrap = text .. WRAP_BREAK
|
||||||
|
for w in toWrap:gmatch("%S+") do
|
||||||
|
words[#words+1] = w
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Iterate over words and try to fit them in the space given
|
||||||
|
for _, word in ipairs(words) do
|
||||||
|
|
||||||
|
-- Is this an intentional break?
|
||||||
|
if word == trimBreak then
|
||||||
|
doBreak = true
|
||||||
|
else
|
||||||
|
-- Add this word to the line
|
||||||
|
line = utilTrim(line .. " " .. word)
|
||||||
|
-- Do we even have text?
|
||||||
|
if string.len(line) > 0 then
|
||||||
|
-- Is the line too long to fit now?
|
||||||
|
spriteTemp = fontToSprite(line)
|
||||||
|
if spriteGetWidth(spriteTemp) > maxWidth then
|
||||||
|
doBreak = true
|
||||||
|
fragment = word
|
||||||
|
line = lastLine
|
||||||
|
else
|
||||||
|
fragment = ""
|
||||||
|
end
|
||||||
|
spriteUnload(spriteTemp)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
lastLine = line
|
||||||
|
|
||||||
|
-- Did we find a break?
|
||||||
|
if doBreak then
|
||||||
|
-- Did we get anything to print?
|
||||||
|
if string.len(line) > 0 then
|
||||||
|
table.insert(TEXT_SPRITE_LIST, fontToSprite(line))
|
||||||
|
else
|
||||||
|
-- Blank line
|
||||||
|
table.insert(TEXT_SPRITE_LIST, -1)
|
||||||
|
end
|
||||||
|
-- Reset for next line
|
||||||
|
line = fragment
|
||||||
|
fragment = ""
|
||||||
|
doBreak = false
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
-- Search for games.dat files in subdirectories
|
-- Search for games.dat files in subdirectories
|
||||||
GAME_LIST = {}
|
GAME_LIST = {}
|
||||||
GAME_COUNT = 0
|
GAME_COUNT = 0
|
||||||
|
|
|
@ -58,6 +58,7 @@ function doBuild() {
|
||||||
done
|
done
|
||||||
|
|
||||||
TARGET="${SOURCE_DIR}/../build/${TARGET}${EXT}"
|
TARGET="${SOURCE_DIR}/../build/${TARGET}${EXT}"
|
||||||
|
[[ -e "${TARGET}" ]] && rm "${TARGET}"
|
||||||
echo "Linking ${TARGET}..."
|
echo "Linking ${TARGET}..."
|
||||||
# The grep nonsense hides a warning we don't care about.
|
# The grep nonsense hides a warning we don't care about.
|
||||||
${CROSS}-${CPPCOMPILER} -o "${TARGET}" ${OFILES} ${EXTRA_OFILES} "-L${SOURCE_DIR}/../thirdparty-build/${OSNAME}/${OSARCH}/installed/lib" ${EXTRA_LD_FLAGS} 2>&1 | grep -v loslib || true
|
${CROSS}-${CPPCOMPILER} -o "${TARGET}" ${OFILES} ${EXTRA_OFILES} "-L${SOURCE_DIR}/../thirdparty-build/${OSNAME}/${OSARCH}/installed/lib" ${EXTRA_LD_FLAGS} 2>&1 | grep -v loslib || true
|
||||||
|
|
|
@ -2148,13 +2148,18 @@ int32_t apiVideoLoad(lua_State *L) {
|
||||||
int32_t result = -1;
|
int32_t result = -1;
|
||||||
const char *name = NULL;
|
const char *name = NULL;
|
||||||
char *data = NULL;
|
char *data = NULL;
|
||||||
|
char *temp = NULL;
|
||||||
VideoT *video = NULL;
|
VideoT *video = NULL;
|
||||||
|
|
||||||
if (n == 1) {
|
if (n == 1) {
|
||||||
if (lua_isstring(L, 1)) {
|
if (lua_isstring(L, 1)) {
|
||||||
name = lua_tostring(L, 1);
|
name = lua_tostring(L, 1);
|
||||||
// Create data directory based on video path.
|
// Create data directory based on video path.
|
||||||
data = utilCreateString("%s%s", _global.conf.dataDirBase, utilGetUpToLastPathComponent((char *)name));
|
temp = utilGetUpToLastPathComponent((char *)name);
|
||||||
|
data = utilCreateString("%s%s", _global.conf.dataDirBase, temp);
|
||||||
|
free(temp);
|
||||||
|
temp = NULL;
|
||||||
|
utilFixPathSeparators(&data, false);
|
||||||
// Be sure it exists.
|
// Be sure it exists.
|
||||||
utilMkDirP(data, 0777);
|
utilMkDirP(data, 0777);
|
||||||
if (!utilPathExists(data)) {
|
if (!utilPathExists(data)) {
|
||||||
|
|
21
singe/util.c
21
singe/util.c
|
@ -126,16 +126,29 @@ bool utilFileExists(char *filename) {
|
||||||
void utilFixPathSeparators(char **path, bool slash) {
|
void utilFixPathSeparators(char **path, bool slash) {
|
||||||
|
|
||||||
int32_t i = 0;
|
int32_t i = 0;
|
||||||
|
int32_t j = 0;
|
||||||
char *work = *path;
|
char *work = *path;
|
||||||
char *temp = NULL;
|
char *temp = NULL;
|
||||||
|
|
||||||
// Flip path separators to whatever our OS wants
|
// Flip path separators to whatever our OS wants & remove repeated separators.
|
||||||
while (work[i] != 0) {
|
while (work[i] != 0) {
|
||||||
|
// Correct separator
|
||||||
if (work[i] == '\\' || work[i] == '/') {
|
if (work[i] == '\\' || work[i] == '/') {
|
||||||
work[i] = utilGetPathSeparator();
|
// Was the prior character a seprator?
|
||||||
|
if (j == 0) {
|
||||||
|
work[j++] = utilGetPathSeparator();
|
||||||
|
} else {
|
||||||
|
if (work[j - 1] != utilGetPathSeparator()) {
|
||||||
|
// No, accept it.
|
||||||
|
work[j++] = utilGetPathSeparator();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
work[j++] = work[i];
|
||||||
}
|
}
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
|
work[j] = 0;
|
||||||
|
|
||||||
if (slash) {
|
if (slash) {
|
||||||
// Does this string end with a path separator?
|
// Does this string end with a path separator?
|
||||||
|
@ -170,7 +183,7 @@ char *utilGetFileExtension(char *filename) {
|
||||||
start = &filename[x + 1];
|
start = &filename[x + 1];
|
||||||
}
|
}
|
||||||
// Reset if we find a path separator
|
// Reset if we find a path separator
|
||||||
if (filename[x] == utilGetPathSeparator()) {
|
if (filename[x] == '\\' || filename[x] == '/') {
|
||||||
start = filename + strlen(filename);
|
start = filename + strlen(filename);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -187,7 +200,7 @@ char *utilGetLastPathComponent(char *pathname) {
|
||||||
|
|
||||||
// Scan through name and find the last path separator
|
// Scan through name and find the last path separator
|
||||||
for (x=0; x<(int32_t)strlen(pathname); x++) {
|
for (x=0; x<(int32_t)strlen(pathname); x++) {
|
||||||
if (pathname[x] == utilGetPathSeparator()) {
|
if (pathname[x] == '\\' || pathname[x] == '/') {
|
||||||
start = &pathname[x + 1];
|
start = &pathname[x + 1];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -160,12 +160,13 @@ int FFMS_CC _indexCallBack(int64_t current, int64_t total, void *ICPrivate) {
|
||||||
|
|
||||||
|
|
||||||
FFMS_Index *_createIndex(char *filename, char *indexPath, bool hasVideo, bool hasAudio, VideoPlayerT *v) {
|
FFMS_Index *_createIndex(char *filename, char *indexPath, bool hasVideo, bool hasAudio, VideoPlayerT *v) {
|
||||||
char indexName[1024];
|
char *indexName = NULL;
|
||||||
FFMS_Index *index = NULL;
|
FFMS_Index *index = NULL;
|
||||||
FFMS_Indexer *indexer = NULL;
|
FFMS_Indexer *indexer = NULL;
|
||||||
|
|
||||||
// Index file
|
// Index file
|
||||||
snprintf(indexName, 1024, "%s%c%s.index", indexPath, utilGetPathSeparator(), utilGetLastPathComponent(filename));
|
indexName = utilCreateString("%s%c%s.index", indexPath, utilGetPathSeparator(), utilGetLastPathComponent(filename));
|
||||||
|
utilFixPathSeparators(&indexName, false);
|
||||||
index = FFMS_ReadIndex(indexName, &v->errInfo);
|
index = FFMS_ReadIndex(indexName, &v->errInfo);
|
||||||
if (index) {
|
if (index) {
|
||||||
if (FFMS_IndexBelongsToFile(index, filename, &v->errInfo)) {
|
if (FFMS_IndexBelongsToFile(index, filename, &v->errInfo)) {
|
||||||
|
@ -184,6 +185,7 @@ FFMS_Index *_createIndex(char *filename, char *indexPath, bool hasVideo, bool ha
|
||||||
if (index == NULL) utilDie("%s", v->errInfo.Buffer);
|
if (index == NULL) utilDie("%s", v->errInfo.Buffer);
|
||||||
if (FFMS_WriteIndex(indexName, index, &v->errInfo)) utilDie("%s", v->errInfo.Buffer);
|
if (FFMS_WriteIndex(indexName, index, &v->errInfo)) utilDie("%s", v->errInfo.Buffer);
|
||||||
}
|
}
|
||||||
|
free(indexName);
|
||||||
|
|
||||||
return index;
|
return index;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue