mirror of
https://github.com/ClassiCube/ClassiCube.git
synced 2025-09-16 02:56:09 -04:00
Vita: Make system fonts a little bit more readable
This commit is contained in:
parent
368503eae4
commit
e7c8348131
@ -2,11 +2,12 @@ PROJECT_TITLE := ClassiCube
|
|||||||
PROJECT_TITLEID := CUBE00200
|
PROJECT_TITLEID := CUBE00200
|
||||||
TARGET := ClassiCube-vita
|
TARGET := ClassiCube-vita
|
||||||
|
|
||||||
BUILD_DIR := build
|
BUILD_DIR := build-vita
|
||||||
|
SOURCE_DIR := src
|
||||||
|
|
||||||
CFLAGS += -Wl,-q -I../common
|
CFLAGS += -Wl,-q -I../common
|
||||||
CFILES :=$(wildcard src/*.c)
|
C_FILES := $(wildcard $(SOURCE_DIR)/*.c)
|
||||||
OBJS := $(addprefix $(BUILD_DIR)/, $(CFILES:src/%.c=%.o))
|
OBJS := $(addprefix $(BUILD_DIR)/, $(C_FILES:$(SOURCE_DIR)/%.c=%.o))
|
||||||
|
|
||||||
# Needed by psvDebugScreenPrintf
|
# Needed by psvDebugScreenPrintf
|
||||||
LIBS += -lm -lSceDisplay_stub -lSceCtrl_stub -lSceTouch_stub -lSceGxm_stub
|
LIBS += -lm -lSceDisplay_stub -lSceCtrl_stub -lSceTouch_stub -lSceGxm_stub
|
||||||
|
@ -1179,7 +1179,6 @@ static void InitPvfLib(void) {
|
|||||||
Platform_Log3("F_CODES: %i, %i, %i", &LC, &RC, &CC);
|
Platform_Log3("F_CODES: %i, %i, %i", &LC, &RC, &CC);
|
||||||
|
|
||||||
}
|
}
|
||||||
Platform_LogConst("--pgf fonts");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void SysFonts_Register(const cc_string* path) { }
|
void SysFonts_Register(const cc_string* path) { }
|
||||||
@ -1260,7 +1259,21 @@ static cc_result MakeSysFont(struct FontDesc* desc, const cc_string* fontName, i
|
|||||||
font->fontID = scePvfOpen(lib_handle, idx, 1, &error);
|
font->fontID = scePvfOpen(lib_handle, idx, 1, &error);
|
||||||
Platform_Log1("FONT ID: %i", &font->fontID);
|
Platform_Log1("FONT ID: %i", &font->fontID);
|
||||||
|
|
||||||
if (!error) scePvfSetCharSize(font->fontID, size, size);
|
if (!error) {
|
||||||
|
ScePvfFontInfo fontInfo = { 0 };
|
||||||
|
int err2 = scePvfGetFontInfo(font->fontID, &fontInfo);
|
||||||
|
if (!err2) {
|
||||||
|
Platform_Log3("FONT METRICS: H %i, A %i, D %i", &fontInfo.maxIGlyphMetrics.height64,
|
||||||
|
&fontInfo.maxIGlyphMetrics.ascender64,&fontInfo.maxIGlyphMetrics.descender64);
|
||||||
|
Platform_Log3("FONT METRICS: X %i, Y %i, A %i", &fontInfo.maxIGlyphMetrics.horizontalBearingX64,
|
||||||
|
&fontInfo.maxIGlyphMetrics.horizontalBearingY64,&fontInfo.maxIGlyphMetrics.horizontalAdvance64);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!error) {
|
||||||
|
float scale = size * 72.0f / 96.0f;
|
||||||
|
scePvfSetCharSize(font->fontID, scale, scale);
|
||||||
|
}
|
||||||
return error;
|
return error;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1330,7 +1343,7 @@ static void RasteriseGlyph(ScePvfUserImageBufferRec* glyph, struct Bitmap* bmp,
|
|||||||
|
|
||||||
// TODO optimise
|
// TODO optimise
|
||||||
// See https://freetype.org/freetype2/docs/glyphs/glyphs-3.html
|
// See https://freetype.org/freetype2/docs/glyphs/glyphs-3.html
|
||||||
static int DrawGlyph(struct SysFont* font, struct Bitmap* bmp, int x, int y, cc_uint8 c) {
|
static int DrawGlyph(struct SysFont* font, int size, struct Bitmap* bmp, int x, int y, cc_uint8 c) {
|
||||||
ScePvfCharInfo charInfo;
|
ScePvfCharInfo charInfo;
|
||||||
ScePvfIrect charRect;
|
ScePvfIrect charRect;
|
||||||
ScePvfError error;
|
ScePvfError error;
|
||||||
@ -1343,16 +1356,20 @@ static int DrawGlyph(struct SysFont* font, struct Bitmap* bmp, int x, int y, cc_
|
|||||||
|
|
||||||
ScePvfUserImageBufferRec glyph = { 0 };
|
ScePvfUserImageBufferRec glyph = { 0 };
|
||||||
cc_uint8* tmp = Mem_Alloc(charRect.width * charRect.height, 1, "temp font bitmap");
|
cc_uint8* tmp = Mem_Alloc(charRect.width * charRect.height, 1, "temp font bitmap");
|
||||||
|
//Mem_Set(tmp, 0x00, charRect.width * charRect.height);
|
||||||
glyph.pixelFormat = SCE_PVF_USERIMAGE_DIRECT8;
|
glyph.pixelFormat = SCE_PVF_USERIMAGE_DIRECT8;
|
||||||
glyph.rect.width = charRect.width;
|
glyph.rect.width = charRect.width;
|
||||||
glyph.rect.height = charRect.height;
|
glyph.rect.height = charRect.height;
|
||||||
glyph.bytesPerLine = charRect.width;
|
glyph.bytesPerLine = charRect.width;
|
||||||
glyph.buffer = tmp;
|
glyph.buffer = tmp;
|
||||||
|
|
||||||
|
//glyph.xPos64 = -charInfo.glyphMetrics.horizontalBearingX64;
|
||||||
|
//glyph.yPos64 = +charInfo.glyphMetrics.horizontalBearingY64;
|
||||||
|
|
||||||
// TODO: use charInfo.glyphMetrics.horizontalBearingX64 and Y64
|
// TODO: use charInfo.glyphMetrics.horizontalBearingX64 and Y64
|
||||||
Platform_Log1("ABOUT %r:", &c);
|
Platform_Log1("ABOUT %r:", &c);
|
||||||
int BX = charInfo.glyphMetrics.horizontalBearingX64;
|
int BX = charInfo.glyphMetrics.horizontalBearingX64, BX2 = TEXT_CEIL(BX);
|
||||||
int BY = charInfo.glyphMetrics.horizontalBearingY64;
|
int BY = charInfo.glyphMetrics.horizontalBearingY64, BY2 = TEXT_CEIL(BY);
|
||||||
//Platform_Log4(" Bitmap: %i,%i --> %i, %i", &charInfo.bitmapLeft, &charInfo.bitmapTop, &charInfo.bitmapWidth, &charInfo.bitmapHeight);
|
//Platform_Log4(" Bitmap: %i,%i --> %i, %i", &charInfo.bitmapLeft, &charInfo.bitmapTop, &charInfo.bitmapWidth, &charInfo.bitmapHeight);
|
||||||
|
|
||||||
int W = charInfo.glyphMetrics.width64, W2 =TEXT_CEIL(W);
|
int W = charInfo.glyphMetrics.width64, W2 =TEXT_CEIL(W);
|
||||||
@ -1362,11 +1379,13 @@ static int DrawGlyph(struct SysFont* font, struct Bitmap* bmp, int x, int y, cc_
|
|||||||
|
|
||||||
Platform_Log4(" Size: %i,%i (%i, %i)", &W, &H, &W2, &H2);
|
Platform_Log4(" Size: %i,%i (%i, %i)", &W, &H, &W2, &H2);
|
||||||
Platform_Log4(" Vert: %i,%i (%i, %i)", &A, &D, &A2, &D2);
|
Platform_Log4(" Vert: %i,%i (%i, %i)", &A, &D, &A2, &D2);
|
||||||
Platform_Log2(" Bearings: %i,%i", &BX, &BY);
|
Platform_Log4(" Bear: %i,%i (%i, %i)", &BX, &BY, &BX2, &BY2);
|
||||||
|
|
||||||
int CW = charRect.width, CH = charRect.height;
|
int CW = charRect.width, CH = charRect.height;
|
||||||
Platform_Log2(" CharSize: %i,%i", &CW, &CH);
|
Platform_Log2(" CharSize: %i,%i", &CW, &CH);
|
||||||
|
|
||||||
|
if (A2 < size) y += (size - A2);
|
||||||
|
|
||||||
error = scePvfGetCharGlyphImage(font->fontID, c, &glyph);
|
error = scePvfGetCharGlyphImage(font->fontID, c, &glyph);
|
||||||
if (!error) RasteriseGlyph(&glyph, bmp, x, y);
|
if (!error) RasteriseGlyph(&glyph, bmp, x, y);
|
||||||
Mem_Free(tmp);
|
Mem_Free(tmp);
|
||||||
@ -1380,6 +1399,11 @@ void SysFont_DrawText(struct DrawTextArgs* args, struct Bitmap* bmp, int x, int
|
|||||||
struct SysFont* font = (struct SysFont*)args->font->handle;
|
struct SysFont* font = (struct SysFont*)args->font->handle;
|
||||||
if (shadow) return;//{ x += 2; y += 2; }
|
if (shadow) return;//{ x += 2; y += 2; }
|
||||||
|
|
||||||
|
int W = SysFont_TextWidth(args);
|
||||||
|
int S = args->font->size;
|
||||||
|
int H = args->font->height;
|
||||||
|
Platform_Log3("TOTAL: %i (%i/%i)", &W, &S, &H);
|
||||||
|
|
||||||
cc_string left = args->text, part;
|
cc_string left = args->text, part;
|
||||||
char colorCode = 'f';
|
char colorCode = 'f';
|
||||||
BitmapCol color;
|
BitmapCol color;
|
||||||
@ -1391,7 +1415,7 @@ void SysFont_DrawText(struct DrawTextArgs* args, struct Bitmap* bmp, int x, int
|
|||||||
|
|
||||||
for (int i = 0; i < part.length; i++)
|
for (int i = 0; i < part.length; i++)
|
||||||
{
|
{
|
||||||
x += DrawGlyph(font, bmp, x, y, (cc_uint16)part.buffer[i]);
|
x += DrawGlyph(font, S, bmp, x, y, (cc_uint16)part.buffer[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user